/ Hex Artifact Content
Login

Artifact 5c09ebeb5d59ca587e0c1d23cdbcddd99864bfe5:


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 65  orter(x) ((x)->e
1810: 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
1820: 5f 53 4f 52 54 45 52 29 0a 0a 2f 2a 0a 2a 2a 20  _SORTER)../*.** 
1830: 41 6c 6c 6f 63 61 74 65 20 56 64 62 65 43 75 72  Allocate VdbeCur
1840: 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75 72 2e  sor number iCur.
1850: 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74    Return a point
1860: 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74 75 72  er to it.  Retur
1870: 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20  n NULL.** if we 
1880: 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72  run out of memor
1890: 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 56 64 62  y..*/.static Vdb
18a0: 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74  eCursor *allocat
18b0: 65 43 75 72 73 6f 72 28 0a 20 20 56 64 62 65 20  eCursor(.  Vdbe 
18c0: 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  *p,             
18d0: 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61 6c 20   /* The virtual 
18e0: 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74  machine */.  int
18f0: 20 69 43 75 72 2c 20 20 20 20 20 20 20 20 20 20   iCur,          
1900: 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74     /* Index of t
1910: 68 65 20 6e 65 77 20 56 64 62 65 43 75 72 73 6f  he new VdbeCurso
1920: 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c  r */.  int nFiel
1930: 64 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d,           /* 
1940: 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  Number of fields
1950: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   in the table or
1960: 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
1970: 69 44 62 2c 20 20 20 20 20 20 20 20 20 20 20 20  iDb,            
1980: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 74 68    /* Database th
1990: 65 20 63 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73  e cursor belongs
19a0: 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20   to, or -1 */.  
19b0: 75 38 20 65 43 75 72 54 79 70 65 20 20 20 20 20  u8 eCurType     
19c0: 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66        /* Type of
19d0: 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20   the new cursor 
19e0: 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20  */.){.  /* Find 
19f0: 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  the memory cell 
1a00: 74 68 61 74 20 77 69 6c 6c 20 62 65 20 75 73 65  that will be use
1a10: 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62  d to store the b
1a20: 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20  lob of memory.  
1a30: 2a 2a 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ** required for 
1a40: 74 68 69 73 20 56 64 62 65 43 75 72 73 6f 72 20  this VdbeCursor 
1a50: 73 74 72 75 63 74 75 72 65 2e 20 49 74 20 69 73  structure. It is
1a60: 20 63 6f 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75   convenient to u
1a70: 73 65 20 61 20 0a 20 20 2a 2a 20 76 64 62 65 20  se a .  ** vdbe 
1a80: 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d  memory cell to m
1a90: 61 6e 61 67 65 20 74 68 65 20 6d 65 6d 6f 72 79  anage the memory
1aa0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75   allocation requ
1ab0: 69 72 65 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20  ired for a.  ** 
1ac0: 56 64 62 65 43 75 72 73 6f 72 20 73 74 72 75 63  VdbeCursor struc
1ad0: 74 75 72 65 20 66 6f 72 20 74 68 65 20 66 6f 6c  ture for the fol
1ae0: 6c 6f 77 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a  lowing reasons:.
1af0: 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f    **.  **   * So
1b00: 6d 65 74 69 6d 65 73 20 63 75 72 73 6f 72 20 6e  metimes cursor n
1b10: 75 6d 62 65 72 73 20 61 72 65 20 75 73 65 64 20  umbers are used 
1b20: 66 6f 72 20 61 20 63 6f 75 70 6c 65 20 6f 66 20  for a couple of 
1b30: 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20  different.  **  
1b40: 20 20 20 70 75 72 70 6f 73 65 73 20 69 6e 20 61     purposes in a
1b50: 20 76 64 62 65 20 70 72 6f 67 72 61 6d 2e 20 54   vdbe program. T
1b60: 68 65 20 64 69 66 66 65 72 65 6e 74 20 75 73 65  he different use
1b70: 73 20 6d 69 67 68 74 20 72 65 71 75 69 72 65 0a  s might require.
1b80: 20 20 2a 2a 20 20 20 20 20 64 69 66 66 65 72 65    **     differe
1b90: 6e 74 20 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74  nt sized allocat
1ba0: 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c  ions. Memory cel
1bb0: 6c 73 20 70 72 6f 76 69 64 65 20 67 72 6f 77 61  ls provide growa
1bc0: 62 6c 65 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c  ble.  **     all
1bd0: 6f 63 61 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20  ocations..  **. 
1be0: 20 2a 2a 20 20 20 2a 20 57 68 65 6e 20 75 73 69   **   * When usi
1bf0: 6e 67 20 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59  ng ENABLE_MEMORY
1c00: 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d  _MANAGEMENT, mem
1c10: 6f 72 79 20 63 65 6c 6c 20 62 75 66 66 65 72 73  ory cell buffers
1c20: 20 63 61 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65   can.  **     be
1c30: 20 66 72 65 65 64 20 6c 61 7a 69 6c 79 20 76 69   freed lazily vi
1c40: 61 20 74 68 65 20 73 71 6c 69 74 65 33 5f 72 65  a the sqlite3_re
1c50: 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41  lease_memory() A
1c60: 50 49 2e 20 54 68 69 73 0a 20 20 2a 2a 20 20 20  PI. This.  **   
1c70: 20 20 6d 69 6e 69 6d 69 7a 65 73 20 74 68 65 20    minimizes the 
1c80: 6e 75 6d 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63  number of malloc
1c90: 20 63 61 6c 6c 73 20 6d 61 64 65 20 62 79 20 74   calls made by t
1ca0: 68 65 20 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a  he system..  **.
1cb0: 20 20 2a 2a 20 4d 65 6d 6f 72 79 20 63 65 6c 6c    ** Memory cell
1cc0: 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20 61 72  s for cursors ar
1cd0: 65 20 61 6c 6c 6f 63 61 74 65 64 20 61 74 20 74  e allocated at t
1ce0: 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20 61 64  he top of the ad
1cf0: 64 72 65 73 73 0a 20 20 2a 2a 20 73 70 61 63 65  dress.  ** space
1d00: 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 20 28 70  . Memory cell (p
1d10: 2d 3e 6e 4d 65 6d 29 20 63 6f 72 72 65 73 70 6f  ->nMem) correspo
1d20: 6e 64 73 20 74 6f 20 63 75 72 73 6f 72 20 30 2e  nds to cursor 0.
1d30: 20 53 70 61 63 65 20 66 6f 72 0a 20 20 2a 2a 20   Space for.  ** 
1d40: 63 75 72 73 6f 72 20 31 20 69 73 20 6d 61 6e 61  cursor 1 is mana
1d50: 67 65 64 20 62 79 20 6d 65 6d 6f 72 79 20 63 65  ged by memory ce
1d60: 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 2d 31 29 2c 20  ll (p->nMem-1), 
1d70: 65 74 63 2e 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20  etc..  */.  Mem 
1d80: 2a 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d  *pMem = &p->aMem
1d90: 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 3b 0a  [p->nMem-iCur];.
1da0: 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a 20 20  .  int nByte;.  
1db0: 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 20  VdbeCursor *pCx 
1dc0: 3d 20 30 3b 0a 20 20 6e 42 79 74 65 20 3d 20 0a  = 0;.  nByte = .
1dd0: 20 20 20 20 20 20 52 4f 55 4e 44 38 28 73 69 7a        ROUND8(siz
1de0: 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29 29  eof(VdbeCursor))
1df0: 20 2b 20 32 2a 73 69 7a 65 6f 66 28 75 33 32 29   + 2*sizeof(u32)
1e00: 2a 6e 46 69 65 6c 64 20 2b 20 0a 20 20 20 20 20  *nField + .     
1e10: 20 28 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54   (eCurType==CURT
1e20: 59 50 45 5f 42 54 52 45 45 3f 73 71 6c 69 74 65  YPE_BTREE?sqlite
1e30: 33 42 74 72 65 65 43 75 72 73 6f 72 53 69 7a 65  3BtreeCursorSize
1e40: 28 29 3a 30 29 3b 0a 0a 20 20 61 73 73 65 72 74  ():0);..  assert
1e50: 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72 73 6f  ( iCur<p->nCurso
1e60: 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70  r );.  if( p->ap
1e70: 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20 20 20  Csr[iCur] ){.   
1e80: 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65   sqlite3VdbeFree
1e90: 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43  Cursor(p, p->apC
1ea0: 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20 70  sr[iCur]);.    p
1eb0: 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20  ->apCsr[iCur] = 
1ec0: 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51 4c  0;.  }.  if( SQL
1ed0: 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33 56  ITE_OK==sqlite3V
1ee0: 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65  dbeMemClearAndRe
1ef0: 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79 74 65  size(pMem, nByte
1f00: 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70 43 73  ) ){.    p->apCs
1f10: 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20 3d 20  r[iCur] = pCx = 
1f20: 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70 4d 65  (VdbeCursor*)pMe
1f30: 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73 65 74  m->z;.    memset
1f40: 28 70 43 78 2c 20 30 2c 20 73 69 7a 65 6f 66 28  (pCx, 0, sizeof(
1f50: 56 64 62 65 43 75 72 73 6f 72 29 29 3b 0a 20 20  VdbeCursor));.  
1f60: 20 20 70 43 78 2d 3e 65 43 75 72 54 79 70 65 20    pCx->eCurType 
1f70: 3d 20 65 43 75 72 54 79 70 65 3b 0a 20 20 20 20  = eCurType;.    
1f80: 70 43 78 2d 3e 69 44 62 20 3d 20 69 44 62 3b 0a  pCx->iDb = iDb;.
1f90: 20 20 20 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20      pCx->nField 
1fa0: 3d 20 6e 46 69 65 6c 64 3b 0a 20 20 20 20 70 43  = nField;.    pC
1fb0: 78 2d 3e 61 4f 66 66 73 65 74 20 3d 20 26 70 43  x->aOffset = &pC
1fc0: 78 2d 3e 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d  x->aType[nField]
1fd0: 3b 0a 20 20 20 20 69 66 28 20 65 43 75 72 54 79  ;.    if( eCurTy
1fe0: 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
1ff0: 45 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e  E ){.      pCx->
2000: 75 63 2e 70 43 75 72 73 6f 72 20 3d 20 28 42 74  uc.pCursor = (Bt
2010: 43 75 72 73 6f 72 2a 29 0a 20 20 20 20 20 20 20  Cursor*).       
2020: 20 20 20 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e     &pMem->z[ROUN
2030: 44 38 28 73 69 7a 65 6f 66 28 56 64 62 65 43 75  D8(sizeof(VdbeCu
2040: 72 73 6f 72 29 29 2b 32 2a 73 69 7a 65 6f 66 28  rsor))+2*sizeof(
2050: 75 33 32 29 2a 6e 46 69 65 6c 64 5d 3b 0a 20 20  u32)*nField];.  
2060: 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
2070: 43 75 72 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e  CursorZero(pCx->
2080: 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  uc.pCursor);.   
2090: 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20   }.  }.  return 
20a0: 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72  pCx;.}../*.** Tr
20b0: 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 61 20 76  y to convert a v
20c0: 61 6c 75 65 20 69 6e 74 6f 20 61 20 6e 75 6d 65  alue into a nume
20d0: 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74 69  ric representati
20e0: 6f 6e 20 69 66 20 77 65 20 63 61 6e 0a 2a 2a 20  on if we can.** 
20f0: 64 6f 20 73 6f 20 77 69 74 68 6f 75 74 20 6c 6f  do so without lo
2100: 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f  ss of informatio
2110: 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  n.  In other wor
2120: 64 73 2c 20 69 66 20 74 68 65 20 73 74 72 69 6e  ds, if the strin
2130: 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20  g.** looks like 
2140: 61 20 6e 75 6d 62 65 72 2c 20 63 6f 6e 76 65 72  a number, conver
2150: 74 20 69 74 20 69 6e 74 6f 20 61 20 6e 75 6d 62  t it into a numb
2160: 65 72 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20  er.  If it does 
2170: 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b 65  not.** look like
2180: 20 61 20 6e 75 6d 62 65 72 2c 20 6c 65 61 76 65   a number, leave
2190: 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a 2a 0a 2a 2a   it alone..**.**
21a0: 20 49 66 20 74 68 65 20 62 54 72 79 46 6f 72 49   If the bTryForI
21b0: 6e 74 20 66 6c 61 67 20 69 73 20 74 72 75 65 2c  nt flag is true,
21c0: 20 74 68 65 6e 20 65 78 74 72 61 20 65 66 66 6f   then extra effo
21d0: 72 74 20 69 73 20 6d 61 64 65 20 74 6f 20 67 69  rt is made to gi
21e0: 76 65 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72  ve.** an integer
21f0: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e   representation.
2200: 20 20 53 74 72 69 6e 67 73 20 74 68 61 74 20 6c    Strings that l
2210: 6f 6f 6b 20 6c 69 6b 65 20 66 6c 6f 61 74 69 6e  ook like floatin
2220: 67 20 70 6f 69 6e 74 0a 2a 2a 20 76 61 6c 75 65  g point.** value
2230: 73 20 62 75 74 20 77 68 69 63 68 20 68 61 76 65  s but which have
2240: 20 6e 6f 20 66 72 61 63 74 69 6f 6e 61 6c 20 63   no fractional c
2250: 6f 6d 70 6f 6e 65 6e 74 20 28 65 78 61 6d 70 6c  omponent (exampl
2260: 65 3a 20 27 34 38 2e 30 30 27 29 0a 2a 2a 20 77  e: '48.00').** w
2270: 69 6c 6c 20 68 61 76 65 20 61 20 4d 45 4d 5f 49  ill have a MEM_I
2280: 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  nt representatio
2290: 6e 20 77 68 65 6e 20 62 54 72 79 46 6f 72 49 6e  n when bTryForIn
22a0: 74 20 69 73 20 74 72 75 65 2e 0a 2a 2a 0a 2a 2a  t is true..**.**
22b0: 20 49 66 20 62 54 72 79 46 6f 72 49 6e 74 20 69   If bTryForInt i
22c0: 73 20 66 61 6c 73 65 2c 20 74 68 65 6e 20 69 66  s false, then if
22d0: 20 74 68 65 20 69 6e 70 75 74 20 73 74 72 69 6e   the input strin
22e0: 67 20 63 6f 6e 74 61 69 6e 73 20 61 20 64 65 63  g contains a dec
22f0: 69 6d 61 6c 0a 2a 2a 20 70 6f 69 6e 74 20 6f 72  imal.** point or
2300: 20 65 78 70 6f 6e 65 6e 74 69 61 6c 20 6e 6f 74   exponential not
2310: 61 74 69 6f 6e 2c 20 74 68 65 20 72 65 73 75 6c  ation, the resul
2320: 74 20 69 73 20 6f 6e 6c 79 20 4d 45 4d 5f 52 65  t is only MEM_Re
2330: 61 6c 2c 20 65 76 65 6e 0a 2a 2a 20 69 66 20 74  al, even.** if t
2340: 68 65 72 65 20 69 73 20 61 6e 20 65 78 61 63 74  here is an exact
2350: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
2360: 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 71  ntation of the q
2370: 75 61 6e 74 69 74 79 2e 0a 2a 2f 0a 73 74 61 74  uantity..*/.stat
2380: 69 63 20 76 6f 69 64 20 61 70 70 6c 79 4e 75 6d  ic void applyNum
2390: 65 72 69 63 41 66 66 69 6e 69 74 79 28 4d 65 6d  ericAffinity(Mem
23a0: 20 2a 70 52 65 63 2c 20 69 6e 74 20 62 54 72 79   *pRec, int bTry
23b0: 46 6f 72 49 6e 74 29 7b 0a 20 20 64 6f 75 62 6c  ForInt){.  doubl
23c0: 65 20 72 56 61 6c 75 65 3b 0a 20 20 69 36 34 20  e rValue;.  i64 
23d0: 69 56 61 6c 75 65 3b 0a 20 20 75 38 20 65 6e 63  iValue;.  u8 enc
23e0: 20 3d 20 70 52 65 63 2d 3e 65 6e 63 3b 0a 20 20   = pRec->enc;.  
23f0: 61 73 73 65 72 74 28 20 28 70 52 65 63 2d 3e 66  assert( (pRec->f
2400: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c  lags & (MEM_Str|
2410: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
2420: 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 3b 0a 20  ))==MEM_Str );. 
2430: 20 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 46   if( sqlite3AtoF
2440: 28 70 52 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75  (pRec->z, &rValu
2450: 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29  e, pRec->n, enc)
2460: 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20  ==0 ) return;.  
2470: 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 41 74  if( 0==sqlite3At
2480: 6f 69 36 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69  oi64(pRec->z, &i
2490: 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20  Value, pRec->n, 
24a0: 65 6e 63 29 20 29 7b 0a 20 20 20 20 70 52 65 63  enc) ){.    pRec
24b0: 2d 3e 75 2e 69 20 3d 20 69 56 61 6c 75 65 3b 0a  ->u.i = iValue;.
24c0: 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20      pRec->flags 
24d0: 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 65  |= MEM_Int;.  }e
24e0: 6c 73 65 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75  lse{.    pRec->u
24f0: 2e 72 20 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20  .r = rValue;.   
2500: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20   pRec->flags |= 
2510: 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 20 20 69 66  MEM_Real;.    if
2520: 28 20 62 54 72 79 46 6f 72 49 6e 74 20 29 20 73  ( bTryForInt ) s
2530: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65  qlite3VdbeIntege
2540: 72 41 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b  rAffinity(pRec);
2550: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72  .  }.}../*.** Pr
2560: 6f 63 65 73 73 69 6e 67 20 69 73 20 64 65 74 65  ocessing is dete
2570: 72 6d 69 6e 65 20 62 79 20 74 68 65 20 61 66 66  rmine by the aff
2580: 69 6e 69 74 79 20 70 61 72 61 6d 65 74 65 72 3a  inity parameter:
2590: 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  .**.** SQLITE_AF
25a0: 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20 53 51  F_INTEGER:.** SQ
25b0: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a  LITE_AFF_REAL:.*
25c0: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  * SQLITE_AFF_NUM
25d0: 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72 79 20  ERIC:.**    Try 
25e0: 74 6f 20 63 6f 6e 76 65 72 74 20 70 52 65 63 20  to convert pRec 
25f0: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  to an integer re
2600: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 72 20  presentation or 
2610: 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74 69 6e  a .**    floatin
2620: 67 2d 70 6f 69 6e 74 20 72 65 70 72 65 73 65 6e  g-point represen
2630: 74 61 74 69 6f 6e 20 69 66 20 61 6e 20 69 6e 74  tation if an int
2640: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
2650: 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e 6f 74  ion.**    is not
2660: 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f 74 65   possible.  Note
2670: 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 67 65   that the intege
2680: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
2690: 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61 79 73   is.**    always
26a0: 20 70 72 65 66 65 72 72 65 64 2c 20 65 76 65 6e   preferred, even
26b0: 20 69 66 20 74 68 65 20 61 66 66 69 6e 69 74 79   if the affinity
26c0: 20 69 73 20 52 45 41 4c 2c 20 62 65 63 61 75 73   is REAL, becaus
26d0: 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74 65 67  e.**    an integ
26e0: 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  er representatio
26f0: 6e 20 69 73 20 6d 6f 72 65 20 73 70 61 63 65 20  n is more space 
2700: 65 66 66 69 63 69 65 6e 74 20 6f 6e 20 64 69 73  efficient on dis
2710: 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f  k..**.** SQLITE_
2720: 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20 20 20  AFF_TEXT:.**    
2730: 43 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20  Convert pRec to 
2740: 61 20 74 65 78 74 20 72 65 70 72 65 73 65 6e 74  a text represent
2750: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c  ation..**.** SQL
2760: 49 54 45 5f 41 46 46 5f 42 4c 4f 42 3a 0a 2a 2a  ITE_AFF_BLOB:.**
2770: 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70 52 65 63      No-op.  pRec
2780: 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a   is unchanged..*
2790: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61 70  /.static void ap
27a0: 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20 4d  plyAffinity(.  M
27b0: 65 6d 20 2a 70 52 65 63 2c 20 20 20 20 20 20 20  em *pRec,       
27c0: 20 20 20 2f 2a 20 54 68 65 20 76 61 6c 75 65 20     /* The value 
27d0: 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e 69 74  to apply affinit
27e0: 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61 72 20 61  y to */.  char a
27f0: 66 66 69 6e 69 74 79 2c 20 20 20 20 20 20 2f 2a  ffinity,      /*
2800: 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f   The affinity to
2810: 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20   be applied */. 
2820: 20 75 38 20 65 6e 63 20 20 20 20 20 20 20 20 20   u8 enc         
2830: 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73       /* Use this
2840: 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a   text encoding *
2850: 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66 66 69 6e  /.){.  if( affin
2860: 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity>=SQLITE_AFF_
2870: 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20 20 20 61  NUMERIC ){.    a
2880: 73 73 65 72 74 28 20 61 66 66 69 6e 69 74 79 3d  ssert( affinity=
2890: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45  =SQLITE_AFF_INTE
28a0: 47 45 52 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d  GER || affinity=
28b0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c  =SQLITE_AFF_REAL
28c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c  .             ||
28d0: 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54   affinity==SQLIT
28e0: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b  E_AFF_NUMERIC );
28f0: 0a 20 20 20 20 69 66 28 20 28 70 52 65 63 2d 3e  .    if( (pRec->
2900: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
2910: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ==0 ){.      if(
2920: 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20   (pRec->flags & 
2930: 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a  MEM_Real)==0 ){.
2940: 20 20 20 20 20 20 20 20 69 66 28 20 70 52 65 63          if( pRec
2950: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ->flags & MEM_St
2960: 72 20 29 20 61 70 70 6c 79 4e 75 6d 65 72 69 63  r ) applyNumeric
2970: 41 66 66 69 6e 69 74 79 28 70 52 65 63 2c 31 29  Affinity(pRec,1)
2980: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
2990: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
29a0: 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74  beIntegerAffinit
29b0: 79 28 70 52 65 63 29 3b 0a 20 20 20 20 20 20 7d  y(pRec);.      }
29c0: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69  .    }.  }else i
29d0: 66 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  f( affinity==SQL
29e0: 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a  ITE_AFF_TEXT ){.
29f0: 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 74 74 65      /* Only atte
2a00: 6d 70 74 20 74 68 65 20 63 6f 6e 76 65 72 73 69  mpt the conversi
2a10: 6f 6e 20 74 6f 20 54 45 58 54 20 69 66 20 74 68  on to TEXT if th
2a20: 65 72 65 20 69 73 20 61 6e 20 69 6e 74 65 67 65  ere is an intege
2a30: 72 20 6f 72 20 72 65 61 6c 0a 20 20 20 20 2a 2a  r or real.    **
2a40: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2a50: 28 62 6c 6f 62 20 61 6e 64 20 4e 55 4c 4c 20 64  (blob and NULL d
2a60: 6f 20 6e 6f 74 20 67 65 74 20 63 6f 6e 76 65 72  o not get conver
2a70: 74 65 64 29 20 62 75 74 20 6e 6f 20 73 74 72 69  ted) but no stri
2a80: 6e 67 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73  ng.    ** repres
2a90: 65 6e 74 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f  entation..    */
2aa0: 0a 20 20 20 20 69 66 28 20 30 3d 3d 28 70 52 65  .    if( 0==(pRe
2ab0: 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72  c->flags&MEM_Str
2ac0: 29 20 26 26 20 28 70 52 65 63 2d 3e 66 6c 61 67  ) && (pRec->flag
2ad0: 73 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f  s&(MEM_Real|MEM_
2ae0: 49 6e 74 29 29 20 29 7b 0a 20 20 20 20 20 20 73  Int)) ){.      s
2af0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72  qlite3VdbeMemStr
2b00: 69 6e 67 69 66 79 28 70 52 65 63 2c 20 65 6e 63  ingify(pRec, enc
2b10: 2c 20 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  , 1);.    }.    
2b20: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pRec->flags &= ~
2b30: 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e  (MEM_Real|MEM_In
2b40: 74 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a  t);.  }.}../*.**
2b50: 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   Try to convert 
2b60: 74 68 65 20 74 79 70 65 20 6f 66 20 61 20 66 75  the type of a fu
2b70: 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20  nction argument 
2b80: 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75  or a result colu
2b90: 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e 75 6d  mn.** into a num
2ba0: 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74  eric representat
2bb0: 69 6f 6e 2e 20 20 55 73 65 20 65 69 74 68 65 72  ion.  Use either
2bc0: 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c   INTEGER or REAL
2bd0: 20 77 68 69 63 68 65 76 65 72 0a 2a 2a 20 69 73   whichever.** is
2be0: 20 61 70 70 72 6f 70 72 69 61 74 65 2e 20 20 42   appropriate.  B
2bf0: 75 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65 20 63  ut only do the c
2c00: 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 69 74 20  onversion if it 
2c10: 69 73 20 70 6f 73 73 69 62 6c 65 20 77 69 74 68  is possible with
2c20: 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20 69  out.** loss of i
2c30: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 72  nformation and r
2c40: 65 74 75 72 6e 20 74 68 65 20 72 65 76 69 73 65  eturn the revise
2c50: 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 61 72  d type of the ar
2c60: 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73  gument..*/.int s
2c70: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e 75 6d  qlite3_value_num
2c80: 65 72 69 63 5f 74 79 70 65 28 73 71 6c 69 74 65  eric_type(sqlite
2c90: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a  3_value *pVal){.
2ca0: 20 20 69 6e 74 20 65 54 79 70 65 20 3d 20 73 71    int eType = sq
2cb0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65  lite3_value_type
2cc0: 28 70 56 61 6c 29 3b 0a 20 20 69 66 28 20 65 54  (pVal);.  if( eT
2cd0: 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45 58 54  ype==SQLITE_TEXT
2ce0: 20 29 7b 0a 20 20 20 20 4d 65 6d 20 2a 70 4d 65   ){.    Mem *pMe
2cf0: 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a  m = (Mem*)pVal;.
2d00: 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
2d10: 41 66 66 69 6e 69 74 79 28 70 4d 65 6d 2c 20 30  Affinity(pMem, 0
2d20: 29 3b 0a 20 20 20 20 65 54 79 70 65 20 3d 20 73  );.    eType = s
2d30: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70  qlite3_value_typ
2d40: 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 20 20 72  e(pVal);.  }.  r
2d50: 65 74 75 72 6e 20 65 54 79 70 65 3b 0a 7d 0a 0a  eturn eType;.}..
2d60: 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20 76  /*.** Exported v
2d70: 65 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79 41  ersion of applyA
2d80: 66 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73 20  ffinity(). This 
2d90: 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71 6c  one works on sql
2da0: 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a  ite3_value*, .**
2db0: 20 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e 61   not the interna
2dc0: 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a  l Mem* type..*/.
2dd0: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
2de0: 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a  eApplyAffinity(.
2df0: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
2e00: 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66 66  *pVal, .  u8 aff
2e10: 69 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e 63  inity, .  u8 enc
2e20: 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e  .){.  applyAffin
2e30: 69 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c 2c  ity((Mem *)pVal,
2e40: 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29 3b   affinity, enc);
2e50: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70 4d 65 6d 20 63  .}../*.** pMem c
2e60: 75 72 72 65 6e 74 6c 79 20 6f 6e 6c 79 20 68 6f  urrently only ho
2e70: 6c 64 73 20 61 20 73 74 72 69 6e 67 20 74 79 70  lds a string typ
2e80: 65 20 28 6f 72 20 6d 61 79 62 65 20 61 20 42 4c  e (or maybe a BL
2e90: 4f 42 20 74 68 61 74 20 77 65 20 63 61 6e 0a 2a  OB that we can.*
2ea0: 2a 20 69 6e 74 65 72 70 72 65 74 20 61 73 20 61  * interpret as a
2eb0: 20 73 74 72 69 6e 67 20 69 66 20 77 65 20 77 61   string if we wa
2ec0: 6e 74 20 74 6f 29 2e 20 20 43 6f 6d 70 75 74 65  nt to).  Compute
2ed0: 20 69 74 73 20 63 6f 72 72 65 73 70 6f 6e 64 69   its correspondi
2ee0: 6e 67 0a 2a 2a 20 6e 75 6d 65 72 69 63 20 74 79  ng.** numeric ty
2ef0: 70 65 2c 20 69 66 20 68 61 73 20 6f 6e 65 2e 20  pe, if has one. 
2f00: 20 53 65 74 20 74 68 65 20 70 4d 65 6d 2d 3e 75   Set the pMem->u
2f10: 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69  .r and pMem->u.i
2f20: 20 66 69 65 6c 64 73 0a 2a 2a 20 61 63 63 6f 72   fields.** accor
2f30: 64 69 6e 67 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69  dingly..*/.stati
2f40: 63 20 75 31 36 20 53 51 4c 49 54 45 5f 4e 4f 49  c u16 SQLITE_NOI
2f50: 4e 4c 49 4e 45 20 63 6f 6d 70 75 74 65 4e 75 6d  NLINE computeNum
2f60: 65 72 69 63 54 79 70 65 28 4d 65 6d 20 2a 70 4d  ericType(Mem *pM
2f70: 65 6d 29 7b 0a 20 20 61 73 73 65 72 74 28 20 28  em){.  assert( (
2f80: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
2f90: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
2fa0: 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )==0 );.  assert
2fb0: 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
2fc0: 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
2fd0: 6f 62 29 29 21 3d 30 20 29 3b 0a 20 20 69 66 28  ob))!=0 );.  if(
2fe0: 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 4d 65   sqlite3AtoF(pMe
2ff0: 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e 72  m->z, &pMem->u.r
3000: 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d  , pMem->n, pMem-
3010: 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a 20 20 20 20  >enc)==0 ){.    
3020: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20  return 0;.  }.  
3030: 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 69 36  if( sqlite3Atoi6
3040: 34 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d  4(pMem->z, &pMem
3050: 2d 3e 75 2e 69 2c 20 70 4d 65 6d 2d 3e 6e 2c 20  ->u.i, pMem->n, 
3060: 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 53 51 4c 49  pMem->enc)==SQLI
3070: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74  TE_OK ){.    ret
3080: 75 72 6e 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d  urn MEM_Int;.  }
3090: 0a 20 20 72 65 74 75 72 6e 20 4d 45 4d 5f 52 65  .  return MEM_Re
30a0: 61 6c 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  al;.}../*.** Ret
30b0: 75 72 6e 20 74 68 65 20 6e 75 6d 65 72 69 63 20  urn the numeric 
30c0: 74 79 70 65 20 66 6f 72 20 70 4d 65 6d 2c 20 65  type for pMem, e
30d0: 69 74 68 65 72 20 4d 45 4d 5f 49 6e 74 20 6f 72  ither MEM_Int or
30e0: 20 4d 45 4d 5f 52 65 61 6c 20 6f 72 20 62 6f 74   MEM_Real or bot
30f0: 68 20 6f 72 0a 2a 2a 20 6e 6f 6e 65 2e 20 20 0a  h or.** none.  .
3100: 2a 2a 0a 2a 2a 20 55 6e 6c 69 6b 65 20 61 70 70  **.** Unlike app
3110: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
3120: 79 28 29 2c 20 74 68 69 73 20 72 6f 75 74 69 6e  y(), this routin
3130: 65 20 64 6f 65 73 20 6e 6f 74 20 6d 6f 64 69 66  e does not modif
3140: 79 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 2e 0a 2a  y pMem->flags..*
3150: 2a 20 42 75 74 20 69 74 20 64 6f 65 73 20 73 65  * But it does se
3160: 74 20 70 4d 65 6d 2d 3e 75 2e 72 20 61 6e 64 20  t pMem->u.r and 
3170: 70 4d 65 6d 2d 3e 75 2e 69 20 61 70 70 72 6f 70  pMem->u.i approp
3180: 72 69 61 74 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74  riately..*/.stat
3190: 69 63 20 75 31 36 20 6e 75 6d 65 72 69 63 54 79  ic u16 numericTy
31a0: 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20  pe(Mem *pMem){. 
31b0: 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73   if( pMem->flags
31c0: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
31d0: 52 65 61 6c 29 20 29 7b 0a 20 20 20 20 72 65 74  Real) ){.    ret
31e0: 75 72 6e 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  urn pMem->flags 
31f0: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
3200: 65 61 6c 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  eal);.  }.  if( 
3210: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
3220: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
3230: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 63   ){.    return c
3240: 6f 6d 70 75 74 65 4e 75 6d 65 72 69 63 54 79 70  omputeNumericTyp
3250: 65 28 70 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 72  e(pMem);.  }.  r
3260: 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64  eturn 0;.}..#ifd
3270: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
3280: 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 6e 69  /*.** Write a ni
3290: 63 65 20 73 74 72 69 6e 67 20 72 65 70 72 65 73  ce string repres
32a0: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
32b0: 63 6f 6e 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c  contents of cell
32c0: 20 70 4d 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75   pMem.** into bu
32d0: 66 66 65 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74  ffer zBuf, lengt
32e0: 68 20 6e 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20  h nBuf..*/.void 
32f0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72  sqlite3VdbeMemPr
3300: 65 74 74 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70  ettyPrint(Mem *p
3310: 4d 65 6d 2c 20 63 68 61 72 20 2a 7a 42 75 66 29  Mem, char *zBuf)
3320: 7b 0a 20 20 63 68 61 72 20 2a 7a 43 73 72 20 3d  {.  char *zCsr =
3330: 20 7a 42 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d   zBuf;.  int f =
3340: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20   pMem->flags;.. 
3350: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
3360: 61 72 20 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d  ar *const encnam
3370: 65 73 5b 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22  es[] = {"(X)", "
3380: 28 38 29 22 2c 20 22 28 31 36 4c 45 29 22 2c 20  (8)", "(16LE)", 
3390: 22 28 31 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66  "(16BE)"};..  if
33a0: 28 20 66 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a  ( f&MEM_Blob ){.
33b0: 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 63      int i;.    c
33c0: 68 61 72 20 63 3b 0a 20 20 20 20 69 66 28 20 66  har c;.    if( f
33d0: 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20   & MEM_Dyn ){.  
33e0: 20 20 20 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20      c = 'z';.   
33f0: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3400: 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  (MEM_Static|MEM_
3410: 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20  Ephem))==0 );.  
3420: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
3430: 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20  MEM_Static ){.  
3440: 20 20 20 20 63 20 3d 20 27 74 27 3b 0a 20 20 20      c = 't';.   
3450: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3460: 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68  (MEM_Dyn|MEM_Eph
3470: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
3480: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3490: 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20  _Ephem ){.      
34a0: 63 20 3d 20 27 65 27 3b 0a 20 20 20 20 20 20 61  c = 'e';.      a
34b0: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
34c0: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29  _Static|MEM_Dyn)
34d0: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
34e0: 65 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 73 27  e{.      c = 's'
34f0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c  ;.    }..    sql
3500: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
3510: 30 2c 20 7a 43 73 72 2c 20 22 25 63 22 2c 20 63  0, zCsr, "%c", c
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 73 71 6c 69 74 65  Csr);.    sqlite
3550: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
3560: 7a 43 73 72 2c 20 22 25 64 5b 22 2c 20 70 4d 65  zCsr, "%d[", pMe
3570: 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a 43 73 72 20  m->n);.    zCsr 
3580: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3590: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 66 6f  30(zCsr);.    fo
35a0: 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69  r(i=0; i<16 && i
35b0: 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a  <pMem->n; i++){.
35c0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e        sqlite3_sn
35d0: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
35e0: 2c 20 22 25 30 32 58 22 2c 20 28 28 69 6e 74 29  , "%02X", ((int)
35f0: 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78 46  pMem->z[i] & 0xF
3600: 46 29 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20  F));.      zCsr 
3610: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3620: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a  30(zCsr);.    }.
3630: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31      for(i=0; i<1
3640: 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20  6 && i<pMem->n; 
3650: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 68 61 72  i++){.      char
3660: 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b   z = pMem->z[i];
3670: 0a 20 20 20 20 20 20 69 66 28 20 7a 3c 33 32 20  .      if( z<32 
3680: 7c 7c 20 7a 3e 31 32 36 20 29 20 2a 7a 43 73 72  || z>126 ) *zCsr
3690: 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20  ++ = '.';.      
36a0: 65 6c 73 65 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a  else *zCsr++ = z
36b0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c  ;.    }..    sql
36c0: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
36d0: 30 2c 20 7a 43 73 72 2c 20 22 5d 25 73 22 2c 20  0, zCsr, "]%s", 
36e0: 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65  encnames[pMem->e
36f0: 6e 63 5d 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b  nc]);.    zCsr +
3700: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
3710: 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 69 66 28  0(zCsr);.    if(
3720: 20 66 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b   f & MEM_Zero ){
3730: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
3740: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3750: 72 2c 22 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75  r,"+%dz",pMem->u
3760: 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20 7a  .nZero);.      z
3770: 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74  Csr += sqlite3St
3780: 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20  rlen30(zCsr);.  
3790: 20 20 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20    }.    *zCsr = 
37a0: 27 5c 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66  '\0';.  }else if
37b0: 28 20 66 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b  ( f & MEM_Str ){
37c0: 0a 20 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20  .    int j, k;. 
37d0: 20 20 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20 27     zBuf[0] = ' '
37e0: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
37f0: 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 7a  M_Dyn ){.      z
3800: 42 75 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20 20  Buf[1] = 'z';.  
3810: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
3820: 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d   (MEM_Static|MEM
3830: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
3840: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
3850: 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20   MEM_Static ){. 
3860: 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27       zBuf[1] = '
3870: 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  t';.      assert
3880: 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c  ( (f & (MEM_Dyn|
3890: 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29  MEM_Ephem))==0 )
38a0: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
38b0: 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b  f & MEM_Ephem ){
38c0: 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d  .      zBuf[1] =
38d0: 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'e';.      asse
38e0: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
38f0: 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d  atic|MEM_Dyn))==
3900: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0 );.    }else{.
3910: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
3920: 27 73 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6b  's';.    }.    k
3930: 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 2;.    sqlite
3940: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
3950: 26 7a 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c 20  &zBuf[k], "%d", 
3960: 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20  pMem->n);.    k 
3970: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3980: 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20  30(&zBuf[k]);.  
3990: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b    zBuf[k++] = '[
39a0: 27 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20  ';.    for(j=0; 
39b0: 6a 3c 31 35 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e  j<15 && j<pMem->
39c0: 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 75  n; j++){.      u
39d0: 38 20 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d  8 c = pMem->z[j]
39e0: 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3e 3d 30  ;.      if( c>=0
39f0: 78 32 30 20 26 26 20 63 3c 30 78 37 66 20 29 7b  x20 && c<0x7f ){
3a00: 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b  .        zBuf[k+
3a10: 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d 65  +] = c;.      }e
3a20: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 42 75  lse{.        zBu
3a30: 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20  f[k++] = '.';.  
3a40: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
3a50: 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b  zBuf[k++] = ']';
3a60: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
3a70: 72 69 6e 74 66 28 31 30 30 2c 26 7a 42 75 66 5b  rintf(100,&zBuf[
3a80: 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65  k], encnames[pMe
3a90: 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 6b 20  m->enc]);.    k 
3aa0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3ab0: 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20  30(&zBuf[k]);.  
3ac0: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b    zBuf[k++] = 0;
3ad0: 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  .  }.}.#endif..#
3ae0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
3af0: 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74  UG./*.** Print t
3b00: 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20 72 65  he value of a re
3b10: 67 69 73 74 65 72 20 66 6f 72 20 74 72 61 63 69  gister for traci
3b20: 6e 67 20 70 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a  ng purposes:.*/.
3b30: 73 74 61 74 69 63 20 76 6f 69 64 20 6d 65 6d 54  static void memT
3b40: 72 61 63 65 50 72 69 6e 74 28 4d 65 6d 20 2a 70  racePrint(Mem *p
3b50: 29 7b 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61 67  ){.  if( p->flag
3b60: 73 20 26 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65  s & MEM_Undefine
3b70: 64 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28  d ){.    printf(
3b80: 22 20 75 6e 64 65 66 69 6e 65 64 22 29 3b 0a 20  " undefined");. 
3b90: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
3ba0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
3bb0: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 4e  {.    printf(" N
3bc0: 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69  ULL");.  }else i
3bd0: 66 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 28  f( (p->flags & (
3be0: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
3bf0: 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  )==(MEM_Int|MEM_
3c00: 53 74 72 29 20 29 7b 0a 20 20 20 20 70 72 69 6e  Str) ){.    prin
3c10: 74 66 28 22 20 73 69 3a 25 6c 6c 64 22 2c 20 70  tf(" si:%lld", p
3c20: 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c 73 65 20  ->u.i);.  }else 
3c30: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3c40: 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 70 72  EM_Int ){.    pr
3c50: 69 6e 74 66 28 22 20 69 3a 25 6c 6c 64 22 2c 20  intf(" i:%lld", 
3c60: 70 2d 3e 75 2e 69 29 3b 0a 23 69 66 6e 64 65 66  p->u.i);.#ifndef
3c70: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
3c80: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 7d 65  ATING_POINT.  }e
3c90: 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  lse if( p->flags
3ca0: 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20   & MEM_Real ){. 
3cb0: 20 20 20 70 72 69 6e 74 66 28 22 20 72 3a 25 67     printf(" r:%g
3cc0: 22 2c 20 70 2d 3e 75 2e 72 29 3b 0a 23 65 6e 64  ", p->u.r);.#end
3cd0: 69 66 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  if.  }else if( p
3ce0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
3cf0: 77 53 65 74 20 29 7b 0a 20 20 20 20 70 72 69 6e  wSet ){.    prin
3d00: 74 66 28 22 20 28 72 6f 77 73 65 74 29 22 29 3b  tf(" (rowset)");
3d10: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63 68  .  }else{.    ch
3d20: 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b 0a 20 20  ar zBuf[200];.  
3d30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
3d40: 50 72 65 74 74 79 50 72 69 6e 74 28 70 2c 20 7a  PrettyPrint(p, z
3d50: 42 75 66 29 3b 0a 20 20 20 20 70 72 69 6e 74 66  Buf);.    printf
3d60: 28 22 20 25 73 22 2c 20 7a 42 75 66 29 3b 0a 20  (" %s", zBuf);. 
3d70: 20 7d 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61 67   }.  if( p->flag
3d80: 73 20 26 20 4d 45 4d 5f 53 75 62 74 79 70 65 20  s & MEM_Subtype 
3d90: 29 20 70 72 69 6e 74 66 28 22 20 73 75 62 74 79  ) printf(" subty
3da0: 70 65 3d 30 78 25 30 32 78 22 2c 20 70 2d 3e 65  pe=0x%02x", p->e
3db0: 53 75 62 74 79 70 65 29 3b 0a 7d 0a 73 74 61 74  Subtype);.}.stat
3dc0: 69 63 20 76 6f 69 64 20 72 65 67 69 73 74 65 72  ic void register
3dd0: 54 72 61 63 65 28 69 6e 74 20 69 52 65 67 2c 20  Trace(int iReg, 
3de0: 4d 65 6d 20 2a 70 29 7b 0a 20 20 70 72 69 6e 74  Mem *p){.  print
3df0: 66 28 22 52 45 47 5b 25 64 5d 20 3d 20 22 2c 20  f("REG[%d] = ", 
3e00: 69 52 65 67 29 3b 0a 20 20 6d 65 6d 54 72 61 63  iReg);.  memTrac
3e10: 65 50 72 69 6e 74 28 70 29 3b 0a 20 20 70 72 69  ePrint(p);.  pri
3e20: 6e 74 66 28 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6e  ntf("\n");.}.#en
3e30: 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
3e40: 54 45 5f 44 45 42 55 47 0a 23 20 20 64 65 66 69  TE_DEBUG.#  defi
3e50: 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  ne REGISTER_TRAC
3e60: 45 28 52 2c 4d 29 20 69 66 28 64 62 2d 3e 66 6c  E(R,M) if(db->fl
3e70: 61 67 73 26 53 51 4c 49 54 45 5f 56 64 62 65 54  ags&SQLITE_VdbeT
3e80: 72 61 63 65 29 72 65 67 69 73 74 65 72 54 72 61  race)registerTra
3e90: 63 65 28 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20  ce(R,M).#else.# 
3ea0: 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52   define REGISTER
3eb0: 5f 54 52 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64  _TRACE(R,M).#end
3ec0: 69 66 0a 0a 0a 23 69 66 64 65 66 20 56 44 42 45  if...#ifdef VDBE
3ed0: 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a  _PROFILE../* .**
3ee0: 20 68 77 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69   hwtime.h contai
3ef0: 6e 73 20 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62  ns inline assemb
3f00: 6c 65 72 20 63 6f 64 65 20 66 6f 72 20 69 6d 70  ler code for imp
3f10: 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69  lementing .** hi
3f20: 67 68 2d 70 65 72 66 6f 72 6d 61 6e 63 65 20 74  gh-performance t
3f30: 69 6d 69 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a  iming routines..
3f40: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 68 77 74  */.#include "hwt
3f50: 69 6d 65 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a  ime.h"..#endif..
3f60: 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f  #ifndef NDEBUG./
3f70: 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69  *.** This functi
3f80: 6f 6e 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65  on is only calle
3f90: 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e  d from within an
3fa0: 20 61 73 73 65 72 74 28 29 20 65 78 70 72 65 73   assert() expres
3fb0: 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63  sion. It.** chec
3fc0: 6b 73 20 74 68 61 74 20 74 68 65 20 73 71 6c 69  ks that the sqli
3fd0: 74 65 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e  te3.nTransaction
3fe0: 20 76 61 72 69 61 62 6c 65 20 69 73 20 63 6f 72   variable is cor
3ff0: 72 65 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a  rectly set to.**
4000: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e   the number of n
4010: 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  on-transaction s
4020: 61 76 65 70 6f 69 6e 74 73 20 63 75 72 72 65 6e  avepoints curren
4030: 74 6c 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c  tly in the .** l
4040: 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74  inked list start
4050: 69 6e 67 20 61 74 20 73 71 6c 69 74 65 33 2e 70  ing at sqlite3.p
4060: 53 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a  Savepoint..** .*
4070: 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20  * Usage:.**.**  
4080: 20 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b     assert( check
4090: 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64  SavepointCount(d
40a0: 62 29 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20  b) );.*/.static 
40b0: 69 6e 74 20 63 68 65 63 6b 53 61 76 65 70 6f 69  int checkSavepoi
40c0: 6e 74 43 6f 75 6e 74 28 73 71 6c 69 74 65 33 20  ntCount(sqlite3 
40d0: 2a 64 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20  *db){.  int n = 
40e0: 30 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  0;.  Savepoint *
40f0: 70 3b 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70  p;.  for(p=db->p
4100: 53 61 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d  Savepoint; p; p=
4110: 70 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20  p->pNext) n++;. 
4120: 20 61 73 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d   assert( n==(db-
4130: 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62  >nSavepoint + db
4140: 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
4150: 61 76 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72  avepoint) );.  r
4160: 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69  eturn 1;.}.#endi
4170: 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  f../*.** Return 
4180: 74 68 65 20 72 65 67 69 73 74 65 72 20 6f 66 20  the register of 
4190: 70 4f 70 2d 3e 70 32 20 61 66 74 65 72 20 66 69  pOp->p2 after fi
41a0: 72 73 74 20 70 72 65 70 61 72 69 6e 67 20 69 74  rst preparing it
41b0: 20 74 6f 20 62 65 0a 2a 2a 20 6f 76 65 72 77 72   to be.** overwr
41c0: 69 74 74 65 6e 20 77 69 74 68 20 61 6e 20 69 6e  itten with an in
41d0: 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a  teger value..*/.
41e0: 73 74 61 74 69 63 20 53 51 4c 49 54 45 5f 4e 4f  static SQLITE_NO
41f0: 49 4e 4c 49 4e 45 20 4d 65 6d 20 2a 6f 75 74 32  INLINE Mem *out2
4200: 50 72 65 72 65 6c 65 61 73 65 57 69 74 68 43 6c  PrereleaseWithCl
4210: 65 61 72 28 4d 65 6d 20 2a 70 4f 75 74 29 7b 0a  ear(Mem *pOut){.
4220: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
4230: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
4240: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
4250: 45 4d 5f 49 6e 74 3b 0a 20 20 72 65 74 75 72 6e  EM_Int;.  return
4260: 20 70 4f 75 74 3b 0a 7d 0a 73 74 61 74 69 63 20   pOut;.}.static 
4270: 4d 65 6d 20 2a 6f 75 74 32 50 72 65 72 65 6c 65  Mem *out2Prerele
4280: 61 73 65 28 56 64 62 65 20 2a 70 2c 20 56 64 62  ase(Vdbe *p, Vdb
4290: 65 4f 70 20 2a 70 4f 70 29 7b 0a 20 20 4d 65 6d  eOp *pOp){.  Mem
42a0: 20 2a 70 4f 75 74 3b 0a 20 20 61 73 73 65 72 74   *pOut;.  assert
42b0: 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
42c0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
42d0: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
42e0: 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74  ursor) );.  pOut
42f0: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
4300: 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p2];.  memAbout
4310: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
4320: 29 3b 0a 20 20 69 66 28 20 56 64 62 65 4d 65 6d  );.  if( VdbeMem
4330: 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 20 29 7b  Dynamic(pOut) ){
4340: 0a 20 20 20 20 72 65 74 75 72 6e 20 6f 75 74 32  .    return out2
4350: 50 72 65 72 65 6c 65 61 73 65 57 69 74 68 43 6c  PrereleaseWithCl
4360: 65 61 72 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c  ear(pOut);.  }el
4370: 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c  se{.    pOut->fl
4380: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
4390: 20 20 20 72 65 74 75 72 6e 20 70 4f 75 74 3b 0a     return pOut;.
43a0: 20 20 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78    }.}.../*.** Ex
43b0: 65 63 75 74 65 20 61 73 20 6d 75 63 68 20 6f 66  ecute as much of
43c0: 20 61 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20   a VDBE program 
43d0: 61 73 20 77 65 20 63 61 6e 2e 0a 2a 2a 20 54 68  as we can..** Th
43e0: 69 73 20 69 73 20 74 68 65 20 63 6f 72 65 20 6f  is is the core o
43f0: 66 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  f sqlite3_step()
4400: 2e 20 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  .  .*/.int sqlit
4410: 65 33 56 64 62 65 45 78 65 63 28 0a 20 20 56 64  e3VdbeExec(.  Vd
4420: 62 65 20 2a 70 20 20 20 20 20 20 20 20 20 20 20  be *p           
4430: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
4440: 56 44 42 45 20 2a 2f 0a 29 7b 0a 20 20 4f 70 20  VDBE */.){.  Op 
4450: 2a 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 20 20  *aOp = p->aOp;  
4460: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20          /* Copy 
4470: 6f 66 20 70 2d 3e 61 4f 70 20 2a 2f 0a 20 20 4f  of p->aOp */.  O
4480: 70 20 2a 70 4f 70 20 3d 20 61 4f 70 3b 20 20 20  p *pOp = aOp;   
4490: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
44a0: 72 65 6e 74 20 6f 70 65 72 61 74 69 6f 6e 20 2a  rent operation *
44b0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
44c0: 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64  LITE_DEBUG) || d
44d0: 65 66 69 6e 65 64 28 56 44 42 45 5f 50 52 4f 46  efined(VDBE_PROF
44e0: 49 4c 45 29 0a 20 20 4f 70 20 2a 70 4f 72 69 67  ILE).  Op *pOrig
44f0: 4f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Op;             
4500: 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 70 4f    /* Value of pO
4510: 70 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20  p at the top of 
4520: 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 23 65 6e 64  the loop */.#end
4530: 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
4540: 5f 44 45 42 55 47 0a 20 20 69 6e 74 20 6e 45 78  _DEBUG.  int nEx
4550: 74 72 61 44 65 6c 65 74 65 20 3d 20 30 3b 20 20  traDelete = 0;  
4560: 20 20 20 20 2f 2a 20 56 65 72 69 66 69 65 73 20      /* Verifies 
4570: 46 4f 52 44 45 4c 45 54 45 20 61 6e 64 20 41 55  FORDELETE and AU
4580: 58 44 45 4c 45 54 45 20 66 6c 61 67 73 20 2a 2f  XDELETE flags */
4590: 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 72 63  .#endif.  int rc
45a0: 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20   = SQLITE_OK;   
45b0: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
45c0: 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c   return */.  sql
45d0: 69 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62  ite3 *db = p->db
45e0: 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64  ;       /* The d
45f0: 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20  atabase */.  u8 
4600: 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
4610: 6c 74 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65 74  lt = 0; /* Reset
4620: 20 73 63 68 65 6d 61 20 61 66 74 65 72 20 61 6e   schema after an
4630: 20 65 72 72 6f 72 20 69 66 20 70 6f 73 69 74 69   error if positi
4640: 76 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f 64  ve */.  u8 encod
4650: 69 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b 20 20  ing = ENC(db);  
4660: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
4670: 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20  se encoding */. 
4680: 20 69 6e 74 20 69 43 6f 6d 70 61 72 65 20 3d 20   int iCompare = 
4690: 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  0;          /* R
46a0: 65 73 75 6c 74 20 6f 66 20 6c 61 73 74 20 4f 50  esult of last OP
46b0: 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 69  _Compare operati
46c0: 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  on */.  unsigned
46d0: 20 6e 56 6d 53 74 65 70 20 3d 20 30 3b 20 20 20   nVmStep = 0;   
46e0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
46f0: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20  virtual machine 
4700: 73 74 65 70 73 20 2a 2f 0a 23 69 66 6e 64 65 66  steps */.#ifndef
4710: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
4720: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
4730: 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72   unsigned nProgr
4740: 65 73 73 4c 69 6d 69 74 20 3d 20 30 3b 2f 2a 20  essLimit = 0;/* 
4750: 49 6e 76 6f 6b 65 20 78 50 72 6f 67 72 65 73 73  Invoke xProgress
4760: 28 29 20 77 68 65 6e 20 6e 56 6d 53 74 65 70 20  () when nVmStep 
4770: 72 65 61 63 68 65 73 20 74 68 69 73 20 2a 2f 0a  reaches this */.
4780: 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a 61 4d  #endif.  Mem *aM
4790: 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20 20 20  em = p->aMem;   
47a0: 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70      /* Copy of p
47b0: 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65 6d 20  ->aMem */.  Mem 
47c0: 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20 20 20 20  *pIn1 = 0;      
47d0: 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 69 6e         /* 1st in
47e0: 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  put operand */. 
47f0: 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30 3b 20   Mem *pIn2 = 0; 
4800: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32              /* 2
4810: 6e 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64  nd input operand
4820: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 33 20   */.  Mem *pIn3 
4830: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
4840: 20 2f 2a 20 33 72 64 20 69 6e 70 75 74 20 6f 70   /* 3rd input op
4850: 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  erand */.  Mem *
4860: 70 4f 75 74 20 3d 20 30 3b 20 20 20 20 20 20 20  pOut = 0;       
4870: 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 20        /* Output 
4880: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 6e 74  operand */.  int
4890: 20 2a 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 20   *aPermute = 0; 
48a0: 20 20 20 20 20 20 20 20 2f 2a 20 50 65 72 6d 75          /* Permu
48b0: 74 61 74 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d 6e  tation of column
48c0: 73 20 66 6f 72 20 4f 50 5f 43 6f 6d 70 61 72 65  s for OP_Compare
48d0: 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f   */.  i64 lastRo
48e0: 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f  wid = db->lastRo
48f0: 77 69 64 3b 20 20 2f 2a 20 53 61 76 65 64 20 76  wid;  /* Saved v
4900: 61 6c 75 65 20 6f 66 20 74 68 65 20 6c 61 73 74  alue of the last
4910: 20 69 6e 73 65 72 74 20 52 4f 57 49 44 20 2a 2f   insert ROWID */
4920: 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
4930: 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61 72 74  FILE.  u64 start
4940: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
4950: 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b 20 63    /* CPU clock c
4960: 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20 6f 66  ount at start of
4970: 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69   opcode */.#endi
4980: 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52 54 20  f.  /*** INSERT 
4990: 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45 52 45  STACK UNION HERE
49a0: 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28   ***/..  assert(
49b0: 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f   p->magic==VDBE_
49c0: 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20 2f 2a  MAGIC_RUN );  /*
49d0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
49e0: 76 65 72 69 66 69 65 73 20 74 68 69 73 20 2a 2f  verifies this */
49f0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 6e  .  sqlite3VdbeEn
4a00: 74 65 72 28 70 29 3b 0a 20 20 69 66 28 20 70 2d  ter(p);.  if( p-
4a10: 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45  >rc==SQLITE_NOME
4a20: 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73  M ){.    /* This
4a30: 20 68 61 70 70 65 6e 73 20 69 66 20 61 20 6d 61   happens if a ma
4a40: 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20 61 20  lloc() inside a 
4a50: 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f  call to sqlite3_
4a60: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20 6f 72  column_text() or
4a70: 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f  .    ** sqlite3_
4a80: 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28 29 20  column_text16() 
4a90: 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20 20 20  failed.  */.    
4aa0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
4ab0: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 63  .  assert( p->rc
4ac0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28  ==SQLITE_OK || (
4ad0: 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53 51 4c  p->rc&0xff)==SQL
4ae0: 49 54 45 5f 42 55 53 59 0a 20 20 20 20 20 20 20  ITE_BUSY.       
4af0: 20 20 20 20 20 7c 7c 20 28 70 2d 3e 72 63 26 30       || (p->rc&0
4b00: 78 46 46 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43  xFF)==SQLITE_LOC
4b10: 4b 45 44 20 29 3b 0a 20 20 61 73 73 65 72 74 28  KED );.  assert(
4b20: 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 7c 7c   p->bIsReader ||
4b30: 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 21 3d 30 20   p->readOnly!=0 
4b40: 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c  );.  p->rc = SQL
4b50: 49 54 45 5f 4f 4b 3b 0a 20 20 70 2d 3e 69 43 75  ITE_OK;.  p->iCu
4b60: 72 72 65 6e 74 54 69 6d 65 20 3d 20 30 3b 0a 20  rrentTime = 0;. 
4b70: 20 61 73 73 65 72 74 28 20 70 2d 3e 65 78 70 6c   assert( p->expl
4b80: 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e 70  ain==0 );.  p->p
4b90: 52 65 73 75 6c 74 53 65 74 20 3d 20 30 3b 0a 20  ResultSet = 0;. 
4ba0: 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72   db->busyHandler
4bb0: 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 69 66  .nBusy = 0;.  if
4bc0: 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72  ( db->u1.isInter
4bd0: 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20 61 62  rupted ) goto ab
4be0: 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72  ort_due_to_inter
4bf0: 72 75 70 74 3b 0a 20 20 73 71 6c 69 74 65 33 56  rupt;.  sqlite3V
4c00: 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 70 29  dbeIOTraceSql(p)
4c10: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
4c20: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
4c30: 41 4c 4c 42 41 43 4b 0a 20 20 69 66 28 20 64 62  ALLBACK.  if( db
4c40: 2d 3e 78 50 72 6f 67 72 65 73 73 20 29 7b 0a 20  ->xProgress ){. 
4c50: 20 20 20 75 33 32 20 69 50 72 69 6f 72 20 3d 20     u32 iPrior = 
4c60: 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49  p->aCounter[SQLI
4c70: 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 56 4d  TE_STMTSTATUS_VM
4c80: 5f 53 54 45 50 5d 3b 0a 20 20 20 20 61 73 73 65  _STEP];.    asse
4c90: 72 74 28 20 30 20 3c 20 64 62 2d 3e 6e 50 72 6f  rt( 0 < db->nPro
4ca0: 67 72 65 73 73 4f 70 73 20 29 3b 0a 20 20 20 20  gressOps );.    
4cb0: 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d  nProgressLimit =
4cc0: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
4cd0: 73 20 2d 20 28 69 50 72 69 6f 72 20 25 20 64 62  s - (iPrior % db
4ce0: 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 29 3b  ->nProgressOps);
4cf0: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 64  .  }.#endif.#ifd
4d00: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
4d10: 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65    sqlite3BeginBe
4d20: 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20  nignMalloc();.  
4d30: 69 66 28 20 70 2d 3e 70 63 3d 3d 30 0a 20 20 20  if( p->pc==0.   
4d40: 26 26 20 28 70 2d 3e 64 62 2d 3e 66 6c 61 67 73  && (p->db->flags
4d50: 20 26 20 28 53 51 4c 49 54 45 5f 56 64 62 65 4c   & (SQLITE_VdbeL
4d60: 69 73 74 69 6e 67 7c 53 51 4c 49 54 45 5f 56 64  isting|SQLITE_Vd
4d70: 62 65 45 51 50 7c 53 51 4c 49 54 45 5f 56 64 62  beEQP|SQLITE_Vdb
4d80: 65 54 72 61 63 65 29 29 21 3d 30 0a 20 20 29 7b  eTrace))!=0.  ){
4d90: 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20  .    int i;.    
4da0: 69 6e 74 20 6f 6e 63 65 20 3d 20 31 3b 0a 20 20  int once = 1;.  
4db0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69    sqlite3VdbePri
4dc0: 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20 20 69 66  ntSql(p);.    if
4dd0: 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26  ( p->db->flags &
4de0: 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74   SQLITE_VdbeList
4df0: 69 6e 67 20 29 7b 0a 20 20 20 20 20 20 70 72 69  ing ){.      pri
4e00: 6e 74 66 28 22 56 44 42 45 20 50 72 6f 67 72 61  ntf("VDBE Progra
4e10: 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e 22 29 3b 0a  m Listing:\n");.
4e20: 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69        for(i=0; i
4e30: 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20  <p->nOp; i++){. 
4e40: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
4e50: 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74  bePrintOp(stdout
4e60: 2c 20 69 2c 20 26 61 4f 70 5b 69 5d 29 3b 0a 20  , i, &aOp[i]);. 
4e70: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
4e80: 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67   if( p->db->flag
4e90: 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 45  s & SQLITE_VdbeE
4ea0: 51 50 20 29 7b 0a 20 20 20 20 20 20 66 6f 72 28  QP ){.      for(
4eb0: 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69  i=0; i<p->nOp; i
4ec0: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  ++){.        if(
4ed0: 20 61 4f 70 5b 69 5d 2e 6f 70 63 6f 64 65 3d 3d   aOp[i].opcode==
4ee0: 4f 50 5f 45 78 70 6c 61 69 6e 20 29 7b 0a 20 20  OP_Explain ){.  
4ef0: 20 20 20 20 20 20 20 20 69 66 28 20 6f 6e 63 65          if( once
4f00: 20 29 20 70 72 69 6e 74 66 28 22 56 44 42 45 20   ) printf("VDBE 
4f10: 51 75 65 72 79 20 50 6c 61 6e 3a 5c 6e 22 29 3b  Query Plan:\n");
4f20: 0a 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74  .          print
4f30: 66 28 22 25 73 5c 6e 22 2c 20 61 4f 70 5b 69 5d  f("%s\n", aOp[i]
4f40: 2e 70 34 2e 7a 29 3b 0a 20 20 20 20 20 20 20 20  .p4.z);.        
4f50: 20 20 6f 6e 63 65 20 3d 20 30 3b 0a 20 20 20 20    once = 0;.    
4f60: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
4f70: 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 64    }.    if( p->d
4f80: 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
4f90: 45 5f 56 64 62 65 54 72 61 63 65 20 29 20 20 70  E_VdbeTrace )  p
4fa0: 72 69 6e 74 66 28 22 56 44 42 45 20 54 72 61 63  rintf("VDBE Trac
4fb0: 65 3a 5c 6e 22 29 3b 0a 20 20 7d 0a 20 20 73 71  e:\n");.  }.  sq
4fc0: 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61  lite3EndBenignMa
4fd0: 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64 69 66 0a 20  lloc();.#endif. 
4fe0: 20 66 6f 72 28 70 4f 70 3d 26 61 4f 70 5b 70 2d   for(pOp=&aOp[p-
4ff0: 3e 70 63 5d 3b 20 31 3b 20 70 4f 70 2b 2b 29 7b  >pc]; 1; pOp++){
5000: 0a 20 20 20 20 2f 2a 20 45 72 72 6f 72 73 20 61  .    /* Errors a
5010: 72 65 20 64 65 74 65 63 74 65 64 20 62 79 20 69  re detected by i
5020: 6e 64 69 76 69 64 75 61 6c 20 6f 70 63 6f 64 65  ndividual opcode
5030: 73 2c 20 77 69 74 68 20 61 6e 20 69 6d 6d 65 64  s, with an immed
5040: 69 61 74 65 0a 20 20 20 20 2a 2a 20 6a 75 6d 70  iate.    ** jump
5050: 73 20 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  s to abort_due_t
5060: 6f 5f 65 72 72 6f 72 2e 20 2a 2f 0a 20 20 20 20  o_error. */.    
5070: 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
5080: 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20 20 20 61 73  TE_OK );..    as
5090: 73 65 72 74 28 20 70 4f 70 3e 3d 61 4f 70 20 26  sert( pOp>=aOp &
50a0: 26 20 70 4f 70 3c 26 61 4f 70 5b 70 2d 3e 6e 4f  & pOp<&aOp[p->nO
50b0: 70 5d 29 3b 0a 23 69 66 64 65 66 20 56 44 42 45  p]);.#ifdef VDBE
50c0: 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 73 74 61  _PROFILE.    sta
50d0: 72 74 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69  rt = sqlite3Hwti
50e0: 6d 65 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20  me();.#endif.   
50f0: 20 6e 56 6d 53 74 65 70 2b 2b 3b 0a 23 69 66 64   nVmStep++;.#ifd
5100: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
5110: 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53  _STMT_SCANSTATUS
5120: 0a 20 20 20 20 69 66 28 20 70 2d 3e 61 6e 45 78  .    if( p->anEx
5130: 65 63 20 29 20 70 2d 3e 61 6e 45 78 65 63 5b 28  ec ) p->anExec[(
5140: 69 6e 74 29 28 70 4f 70 2d 61 4f 70 29 5d 2b 2b  int)(pOp-aOp)]++
5150: 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a  ;.#endif..    /*
5160: 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63   Only allow trac
5170: 69 6e 67 20 69 66 20 53 51 4c 49 54 45 5f 44 45  ing if SQLITE_DE
5180: 42 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a  BUG is defined..
5190: 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51      */.#ifdef SQ
51a0: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69  LITE_DEBUG.    i
51b0: 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  f( db->flags & S
51c0: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20  QLITE_VdbeTrace 
51d0: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
51e0: 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f  VdbePrintOp(stdo
51f0: 75 74 2c 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  ut, (int)(pOp - 
5200: 61 4f 70 29 2c 20 70 4f 70 29 3b 0a 20 20 20 20  aOp), pOp);.    
5210: 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20 0a  }.#endif.      .
5220: 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 74 6f  .    /* Check to
5230: 20 73 65 65 20 69 66 20 77 65 20 6e 65 65 64 20   see if we need 
5240: 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69  to simulate an i
5250: 6e 74 65 72 72 75 70 74 2e 20 20 54 68 69 73 20  nterrupt.  This 
5260: 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a 20 20 20  only happens.   
5270: 20 2a 2a 20 69 66 20 77 65 20 68 61 76 65 20 61   ** if we have a
5280: 20 73 70 65 63 69 61 6c 20 74 65 73 74 20 62 75   special test bu
5290: 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64  ild..    */.#ifd
52a0: 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
52b0: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69     if( sqlite3_i
52c0: 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3e 30  nterrupt_count>0
52d0: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
52e0: 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e  3_interrupt_coun
52f0: 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66 28 20 73  t--;.      if( s
5300: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
5310: 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a 20 20 20  _count==0 ){.   
5320: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74       sqlite3_int
5330: 65 72 72 75 70 74 28 64 62 29 3b 0a 20 20 20 20  errupt(db);.    
5340: 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66    }.    }.#endif
5350: 0a 0a 20 20 20 20 2f 2a 20 53 61 6e 69 74 79 20  ..    /* Sanity 
5360: 63 68 65 63 6b 69 6e 67 20 6f 6e 20 6f 74 68 65  checking on othe
5370: 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 23 69  r operands */.#i
5380: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
5390: 47 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  G.    assert( pO
53a0: 70 2d 3e 6f 70 66 6c 61 67 73 3d 3d 73 71 6c 69  p->opflags==sqli
53b0: 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74  te3OpcodePropert
53c0: 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 5d 20 29  y[pOp->opcode] )
53d0: 3b 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e  ;.    if( (pOp->
53e0: 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f  opflags & OPFLG_
53f0: 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  IN1)!=0 ){.     
5400: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
5410: 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  >0 );.      asse
5420: 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d  rt( pOp->p1<=(p-
5430: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
5440: 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  ) );.      asser
5450: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61  t( memIsValid(&a
5460: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b  Mem[pOp->p1]) );
5470: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
5480: 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d  qlite3VdbeCheckM
5490: 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d  emInvariants(&aM
54a0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a  em[pOp->p1]) );.
54b0: 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
54c0: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 26 61  RACE(pOp->p1, &a
54d0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20  Mem[pOp->p1]);. 
54e0: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f     }.    if( (pO
54f0: 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
5500: 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b 0a 20 20  LG_IN2)!=0 ){.  
5510: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5520: 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61  >p2>0 );.      a
5530: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d  ssert( pOp->p2<=
5540: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
5550: 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 61 73  sor) );.      as
5560: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
5570: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29  (&aMem[pOp->p2])
5580: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
5590: 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  ( sqlite3VdbeChe
55a0: 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28  ckMemInvariants(
55b0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20  &aMem[pOp->p2]) 
55c0: 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45  );.      REGISTE
55d0: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
55e0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29   &aMem[pOp->p2])
55f0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
5600: 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20  (pOp->opflags & 
5610: 4f 50 46 4c 47 5f 49 4e 33 29 21 3d 30 20 29 7b  OPFLG_IN3)!=0 ){
5620: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
5630: 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20  Op->p3>0 );.    
5640: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5650: 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  3<=(p->nMem-p->n
5660: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
5670: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
5680: 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  lid(&aMem[pOp->p
5690: 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73  3]) );.      ass
56a0: 65 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65  ert( sqlite3Vdbe
56b0: 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e  CheckMemInvarian
56c0: 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  ts(&aMem[pOp->p3
56d0: 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49  ]) );.      REGI
56e0: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
56f0: 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  p3, &aMem[pOp->p
5700: 33 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  3]);.    }.    i
5710: 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  f( (pOp->opflags
5720: 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 29 21 3d   & OPFLG_OUT2)!=
5730: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
5740: 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a  t( pOp->p2>0 );.
5750: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5760: 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p2<=(p->nMem-
5770: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
5780: 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
5790: 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70  hange(p, &aMem[p
57a0: 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a  Op->p2]);.    }.
57b0: 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70      if( (pOp->op
57c0: 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55  flags & OPFLG_OU
57d0: 54 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  T3)!=0 ){.      
57e0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
57f0: 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
5800: 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  t( pOp->p3<=(p->
5810: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
5820: 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f   );.      memAbo
5830: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61  utToChange(p, &a
5840: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20  Mem[pOp->p3]);. 
5850: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 20     }.#endif.#if 
5860: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
5870: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
5880: 28 56 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a 20  (VDBE_PROFILE). 
5890: 20 20 20 70 4f 72 69 67 4f 70 20 3d 20 70 4f 70     pOrigOp = pOp
58a0: 3b 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 20 20  ;.#endif.  .    
58b0: 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63  switch( pOp->opc
58c0: 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a  ode ){../*******
58d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
58e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
58f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5900: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5910: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68 61 74 20 66  ******.** What f
5920: 6f 6c 6c 6f 77 73 20 69 73 20 61 20 6d 61 73 73  ollows is a mass
5930: 69 76 65 20 73 77 69 74 63 68 20 73 74 61 74 65  ive switch state
5940: 6d 65 6e 74 20 77 68 65 72 65 20 65 61 63 68 20  ment where each 
5950: 63 61 73 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20  case implements 
5960: 61 0a 2a 2a 20 73 65 70 61 72 61 74 65 20 69 6e  a.** separate in
5970: 73 74 72 75 63 74 69 6f 6e 20 69 6e 20 74 68 65  struction in the
5980: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
5990: 2e 20 20 49 66 20 77 65 20 66 6f 6c 6c 6f 77 20  .  If we follow 
59a0: 74 68 65 20 75 73 75 61 6c 0a 2a 2a 20 69 6e 64  the usual.** ind
59b0: 65 6e 74 61 74 69 6f 6e 20 63 6f 6e 76 65 6e 74  entation convent
59c0: 69 6f 6e 73 2c 20 65 61 63 68 20 63 61 73 65 20  ions, each case 
59d0: 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e 74  should be indent
59e0: 65 64 20 62 79 20 36 20 73 70 61 63 65 73 2e 20  ed by 6 spaces. 
59f0: 20 42 75 74 0a 2a 2a 20 74 68 61 74 20 69 73 20   But.** that is 
5a00: 61 20 6c 6f 74 20 6f 66 20 77 61 73 74 65 64 20  a lot of wasted 
5a10: 73 70 61 63 65 20 6f 6e 20 74 68 65 20 6c 65 66  space on the lef
5a20: 74 20 6d 61 72 67 69 6e 2e 20 20 53 6f 20 74 68  t margin.  So th
5a30: 65 20 63 6f 64 65 20 77 69 74 68 69 6e 0a 2a 2a  e code within.**
5a40: 20 74 68 65 20 73 77 69 74 63 68 20 73 74 61 74   the switch stat
5a50: 65 6d 65 6e 74 20 77 69 6c 6c 20 62 72 65 61 6b  ement will break
5a60: 20 77 69 74 68 20 63 6f 6e 76 65 6e 74 69 6f 6e   with convention
5a70: 20 61 6e 64 20 62 65 20 66 6c 75 73 68 2d 6c 65   and be flush-le
5a80: 66 74 2e 20 41 6e 6f 74 68 65 72 0a 2a 2a 20 62  ft. Another.** b
5a90: 69 67 20 63 6f 6d 6d 65 6e 74 20 28 73 69 6d 69  ig comment (simi
5aa0: 6c 61 72 20 74 6f 20 74 68 69 73 20 6f 6e 65 29  lar to this one)
5ab0: 20 77 69 6c 6c 20 6d 61 72 6b 20 74 68 65 20 70   will mark the p
5ac0: 6f 69 6e 74 20 69 6e 20 74 68 65 20 63 6f 64 65  oint in the code
5ad0: 20 77 68 65 72 65 0a 2a 2a 20 77 65 20 74 72 61   where.** we tra
5ae0: 6e 73 69 74 69 6f 6e 20 62 61 63 6b 20 74 6f 20  nsition back to 
5af0: 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69  normal indentati
5b00: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f  on..**.** The fo
5b10: 72 6d 61 74 74 69 6e 67 20 6f 66 20 65 61 63 68  rmatting of each
5b20: 20 63 61 73 65 20 69 73 20 69 6d 70 6f 72 74 61   case is importa
5b30: 6e 74 2e 20 20 54 68 65 20 6d 61 6b 65 66 69 6c  nt.  The makefil
5b40: 65 20 66 6f 72 20 53 51 4c 69 74 65 0a 2a 2a 20  e for SQLite.** 
5b50: 67 65 6e 65 72 61 74 65 73 20 74 77 6f 20 43 20  generates two C 
5b60: 66 69 6c 65 73 20 22 6f 70 63 6f 64 65 73 2e 68  files "opcodes.h
5b70: 22 20 61 6e 64 20 22 6f 70 63 6f 64 65 73 2e 63  " and "opcodes.c
5b80: 22 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74 68  " by scanning th
5b90: 69 73 0a 2a 2a 20 66 69 6c 65 20 6c 6f 6f 6b 69  is.** file looki
5ba0: 6e 67 20 66 6f 72 20 6c 69 6e 65 73 20 74 68 61  ng for lines tha
5bb0: 74 20 62 65 67 69 6e 20 77 69 74 68 20 22 63 61  t begin with "ca
5bc0: 73 65 20 4f 50 5f 22 2e 20 20 54 68 65 20 6f 70  se OP_".  The op
5bd0: 63 6f 64 65 73 2e 68 20 66 69 6c 65 73 0a 2a 2a  codes.h files.**
5be0: 20 77 69 6c 6c 20 62 65 20 66 69 6c 6c 65 64 20   will be filled 
5bf0: 77 69 74 68 20 23 64 65 66 69 6e 65 73 20 74 68  with #defines th
5c00: 61 74 20 67 69 76 65 20 75 6e 69 71 75 65 20 69  at give unique i
5c10: 6e 74 65 67 65 72 20 76 61 6c 75 65 73 20 74 6f  nteger values to
5c20: 20 65 61 63 68 0a 2a 2a 20 6f 70 63 6f 64 65 20   each.** opcode 
5c30: 61 6e 64 20 74 68 65 20 6f 70 63 6f 64 65 73 2e  and the opcodes.
5c40: 63 20 66 69 6c 65 20 69 73 20 66 69 6c 6c 65 64  c file is filled
5c50: 20 77 69 74 68 20 61 6e 20 61 72 72 61 79 20 6f   with an array o
5c60: 66 20 73 74 72 69 6e 67 73 20 77 68 65 72 65 0a  f strings where.
5c70: 2a 2a 20 65 61 63 68 20 73 74 72 69 6e 67 20 69  ** each string i
5c80: 73 20 74 68 65 20 73 79 6d 62 6f 6c 69 63 20 6e  s the symbolic n
5c90: 61 6d 65 20 66 6f 72 20 74 68 65 20 63 6f 72 72  ame for the corr
5ca0: 65 73 70 6f 6e 64 69 6e 67 20 6f 70 63 6f 64 65  esponding opcode
5cb0: 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 63 61 73  .  If the.** cas
5cc0: 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 66  e statement is f
5cd0: 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6d  ollowed by a com
5ce0: 6d 65 6e 74 20 6f 66 20 74 68 65 20 66 6f 72 6d  ment of the form
5cf0: 20 22 2f 23 20 73 61 6d 65 20 61 73 20 2e 2e 2e   "/# same as ...
5d00: 20 23 2f 22 0a 2a 2a 20 74 68 61 74 20 63 6f 6d   #/".** that com
5d10: 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20  ment is used to 
5d20: 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 70 61  determine the pa
5d30: 72 74 69 63 75 6c 61 72 20 76 61 6c 75 65 20 6f  rticular value o
5d40: 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 0a 2a 2a  f the opcode..**
5d50: 0a 2a 2a 20 4f 74 68 65 72 20 6b 65 79 77 6f 72  .** Other keywor
5d60: 64 73 20 69 6e 20 74 68 65 20 63 6f 6d 6d 65 6e  ds in the commen
5d70: 74 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 65  t that follows e
5d80: 61 63 68 20 63 61 73 65 20 61 72 65 20 75 73 65  ach case are use
5d90: 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73 74 72 75 63  d to.** construc
5da0: 74 20 74 68 65 20 4f 50 46 4c 47 5f 49 4e 49 54  t the OPFLG_INIT
5db0: 49 41 4c 49 5a 45 52 20 76 61 6c 75 65 20 74 68  IALIZER value th
5dc0: 61 74 20 69 6e 69 74 69 61 6c 69 7a 65 73 20 6f  at initializes o
5dd0: 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 2e  pcodeProperty[].
5de0: 0a 2a 2a 20 4b 65 79 77 6f 72 64 73 20 69 6e 63  .** Keywords inc
5df0: 6c 75 64 65 3a 20 69 6e 31 2c 20 69 6e 32 2c 20  lude: in1, in2, 
5e00: 69 6e 33 2c 20 6f 75 74 32 2c 20 6f 75 74 33 2e  in3, out2, out3.
5e10: 20 20 53 65 65 0a 2a 2a 20 74 68 65 20 6d 6b 6f    See.** the mko
5e20: 70 63 6f 64 65 68 2e 61 77 6b 20 73 63 72 69 70  pcodeh.awk scrip
5e30: 74 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  t for additional
5e40: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a   information..**
5e50: 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74 61 74 69 6f  .** Documentatio
5e60: 6e 20 61 62 6f 75 74 20 56 44 42 45 20 6f 70 63  n about VDBE opc
5e70: 6f 64 65 73 20 69 73 20 67 65 6e 65 72 61 74 65  odes is generate
5e80: 64 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74 68  d by scanning th
5e90: 69 73 20 66 69 6c 65 0a 2a 2a 20 66 6f 72 20 6c  is file.** for l
5ea0: 69 6e 65 73 20 6f 66 20 74 68 61 74 20 63 6f 6e  ines of that con
5eb0: 74 61 69 6e 20 22 4f 70 63 6f 64 65 3a 22 2e 20  tain "Opcode:". 
5ec0: 20 54 68 61 74 20 6c 69 6e 65 20 61 6e 64 20 61   That line and a
5ed0: 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a  ll subsequent.**
5ee0: 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e 65 73 20 61   comment lines a
5ef0: 72 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 67  re used in the g
5f00: 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65  eneration of the
5f10: 20 6f 70 63 6f 64 65 2e 68 74 6d 6c 20 64 6f 63   opcode.html doc
5f20: 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 66 69  umentation.** fi
5f30: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d 41 52  le..**.** SUMMAR
5f40: 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 46 6f 72  Y:.**.**     For
5f50: 6d 61 74 74 69 6e 67 20 69 73 20 69 6d 70 6f 72  matting is impor
5f60: 74 61 6e 74 20 74 6f 20 73 63 72 69 70 74 73 20  tant to scripts 
5f70: 74 68 61 74 20 73 63 61 6e 20 74 68 69 73 20 66  that scan this f
5f80: 69 6c 65 2e 0a 2a 2a 20 20 20 20 20 44 6f 20 6e  ile..**     Do n
5f90: 6f 74 20 64 65 76 69 61 74 65 20 66 72 6f 6d 20  ot deviate from 
5fa0: 74 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 73  the formatting s
5fb0: 74 79 6c 65 20 63 75 72 72 65 6e 74 6c 79 20 69  tyle currently i
5fc0: 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a  n use..**.******
5fd0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5fe0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ff0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6000: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6010: 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63  *******/../* Opc
6020: 6f 64 65 3a 20 20 47 6f 74 6f 20 2a 20 50 32 20  ode:  Goto * P2 
6030: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20 75  * * *.**.** An u
6040: 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 6a 75 6d  nconditional jum
6050: 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e  p to address P2.
6060: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 73  .** The next ins
6070: 74 72 75 63 74 69 6f 6e 20 65 78 65 63 75 74 65  truction execute
6080: 64 20 77 69 6c 6c 20 62 65 20 0a 2a 2a 20 74 68  d will be .** th
6090: 65 20 6f 6e 65 20 61 74 20 69 6e 64 65 78 20 50  e one at index P
60a0: 32 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  2 from the begin
60b0: 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74 68 65 20 70  ning of.** the p
60c0: 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 54 68  rogram..**.** Th
60d0: 65 20 50 31 20 70 61 72 61 6d 65 74 65 72 20 69  e P1 parameter i
60e0: 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 75  s not actually u
60f0: 73 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f  sed by this opco
6100: 64 65 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 74  de.  However, it
6110: 0a 2a 2a 20 69 73 20 73 6f 6d 65 74 69 6d 65 73  .** is sometimes
6120: 20 73 65 74 20 74 6f 20 31 20 69 6e 73 74 65 61   set to 1 instea
6130: 64 20 6f 66 20 30 20 61 73 20 61 20 68 69 6e 74  d of 0 as a hint
6140: 20 74 6f 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d   to the command-
6150: 6c 69 6e 65 20 73 68 65 6c 6c 0a 2a 2a 20 74 68  line shell.** th
6160: 61 74 20 74 68 69 73 20 47 6f 74 6f 20 69 73 20  at this Goto is 
6170: 74 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20  the bottom of a 
6180: 6c 6f 6f 70 20 61 6e 64 20 74 68 61 74 20 74 68  loop and that th
6190: 65 20 6c 69 6e 65 73 20 66 72 6f 6d 20 50 32 20  e lines from P2 
61a0: 64 6f 77 6e 0a 2a 2a 20 74 6f 20 74 68 65 20 63  down.** to the c
61b0: 75 72 72 65 6e 74 20 6c 69 6e 65 20 73 68 6f 75  urrent line shou
61c0: 6c 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20 66  ld be indented f
61d0: 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75  or EXPLAIN outpu
61e0: 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f  t..*/.case OP_Go
61f0: 74 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  to: {           
6200: 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 6a 75 6d    /* jump */.jum
6210: 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63  p_to_p2_and_chec
6220: 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3a  k_for_interrupt:
6230: 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f  .  pOp = &aOp[pO
6240: 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 0a 20 20 2f  p->p2 - 1];..  /
6250: 2a 20 4f 70 63 6f 64 65 73 20 74 68 61 74 20 61  * Opcodes that a
6260: 72 65 20 75 73 65 64 20 61 73 20 74 68 65 20 62  re used as the b
6270: 6f 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20  ottom of a loop 
6280: 28 4f 50 5f 4e 65 78 74 2c 20 4f 50 5f 50 72 65  (OP_Next, OP_Pre
6290: 76 2c 0a 20 20 2a 2a 20 4f 50 5f 56 4e 65 78 74  v,.  ** OP_VNext
62a0: 2c 20 4f 50 5f 52 6f 77 53 65 74 4e 65 78 74 2c  , OP_RowSetNext,
62b0: 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78   or OP_SorterNex
62c0: 74 29 20 61 6c 6c 20 6a 75 6d 70 20 68 65 72 65  t) all jump here
62d0: 20 75 70 6f 6e 0a 20 20 2a 2a 20 63 6f 6d 70 6c   upon.  ** compl
62e0: 65 74 69 6f 6e 2e 20 20 43 68 65 63 6b 20 74 6f  etion.  Check to
62f0: 20 73 65 65 20 69 66 20 73 71 6c 69 74 65 33 5f   see if sqlite3_
6300: 69 6e 74 65 72 72 75 70 74 28 29 20 68 61 73 20  interrupt() has 
6310: 62 65 65 6e 20 63 61 6c 6c 65 64 0a 20 20 2a 2a  been called.  **
6320: 20 6f 72 20 69 66 20 74 68 65 20 70 72 6f 67 72   or if the progr
6330: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 6e 65 65  ess callback nee
6340: 64 73 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64  ds to be invoked
6350: 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 69  . .  **.  ** Thi
6360: 73 20 63 6f 64 65 20 75 73 65 73 20 75 6e 73 74  s code uses unst
6370: 72 75 63 74 75 72 65 64 20 22 67 6f 74 6f 22 20  ructured "goto" 
6380: 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 20 64  statements and d
6390: 6f 65 73 20 6e 6f 74 20 6c 6f 6f 6b 20 63 6c 65  oes not look cle
63a0: 61 6e 2e 0a 20 20 2a 2a 20 42 75 74 20 74 68 61  an..  ** But tha
63b0: 74 20 69 73 20 6e 6f 74 20 64 75 65 20 74 6f 20  t is not due to 
63c0: 73 6c 6f 70 70 79 20 63 6f 64 69 6e 67 20 68 61  sloppy coding ha
63d0: 62 69 74 73 2e 20 54 68 65 20 63 6f 64 65 20 69  bits. The code i
63e0: 73 20 77 72 69 74 74 65 6e 20 74 68 69 73 0a 20  s written this. 
63f0: 20 2a 2a 20 77 61 79 20 66 6f 72 20 70 65 72 66   ** way for perf
6400: 6f 72 6d 61 6e 63 65 2c 20 74 6f 20 61 76 6f 69  ormance, to avoi
6410: 64 20 68 61 76 69 6e 67 20 74 6f 20 72 75 6e 20  d having to run 
6420: 74 68 65 20 69 6e 74 65 72 72 75 70 74 20 61 6e  the interrupt an
6430: 64 20 70 72 6f 67 72 65 73 73 0a 20 20 2a 2a 20  d progress.  ** 
6440: 63 68 65 63 6b 73 20 6f 6e 20 65 76 65 72 79 20  checks on every 
6450: 6f 70 63 6f 64 65 2e 20 20 54 68 69 73 20 68 65  opcode.  This he
6460: 6c 70 73 20 73 71 6c 69 74 65 33 5f 73 74 65 70  lps sqlite3_step
6470: 28 29 20 74 6f 20 72 75 6e 20 61 62 6f 75 74 20  () to run about 
6480: 31 2e 35 25 0a 20 20 2a 2a 20 66 61 73 74 65 72  1.5%.  ** faster
6490: 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 22 76   according to "v
64a0: 61 6c 67 72 69 6e 64 20 2d 2d 74 6f 6f 6c 3d 63  algrind --tool=c
64b0: 61 63 68 65 67 72 69 6e 64 22 20 2a 2f 0a 63 68  achegrind" */.ch
64c0: 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70  eck_for_interrup
64d0: 74 3a 0a 20 20 69 66 28 20 64 62 2d 3e 75 31 2e  t:.  if( db->u1.
64e0: 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 20  isInterrupted ) 
64f0: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
6500: 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 23 69 66  o_interrupt;.#if
6510: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
6520: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
6530: 43 4b 0a 20 20 2f 2a 20 43 61 6c 6c 20 74 68 65  CK.  /* Call the
6540: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
6550: 63 6b 20 69 66 20 69 74 20 69 73 20 63 6f 6e 66  ck if it is conf
6560: 69 67 75 72 65 64 20 61 6e 64 20 74 68 65 20 72  igured and the r
6570: 65 71 75 69 72 65 64 20 6e 75 6d 62 65 72 0a 20  equired number. 
6580: 20 2a 2a 20 6f 66 20 56 44 42 45 20 6f 70 73 20   ** of VDBE ops 
6590: 68 61 76 65 20 62 65 65 6e 20 65 78 65 63 75 74  have been execut
65a0: 65 64 20 28 65 69 74 68 65 72 20 73 69 6e 63 65  ed (either since
65b0: 20 74 68 69 73 20 69 6e 76 6f 63 61 74 69 6f 6e   this invocation
65c0: 20 6f 66 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33   of.  ** sqlite3
65d0: 56 64 62 65 45 78 65 63 28 29 20 6f 72 20 73 69  VdbeExec() or si
65e0: 6e 63 65 20 6c 61 73 74 20 74 69 6d 65 20 74 68  nce last time th
65f0: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
6600: 61 63 6b 20 77 61 73 20 63 61 6c 6c 65 64 29 2e  ack was called).
6610: 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 70 72 6f  .  ** If the pro
6620: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 72  gress callback r
6630: 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  eturns non-zero,
6640: 20 65 78 69 74 20 74 68 65 20 76 69 72 74 75 61   exit the virtua
6650: 6c 20 6d 61 63 68 69 6e 65 20 77 69 74 68 0a 20  l machine with. 
6660: 20 2a 2a 20 61 20 72 65 74 75 72 6e 20 63 6f 64   ** a return cod
6670: 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 2e 0a  e SQLITE_ABORT..
6680: 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78    */.  if( db->x
6690: 50 72 6f 67 72 65 73 73 21 3d 30 20 26 26 20 6e  Progress!=0 && n
66a0: 56 6d 53 74 65 70 3e 3d 6e 50 72 6f 67 72 65 73  VmStep>=nProgres
66b0: 73 4c 69 6d 69 74 20 29 7b 0a 20 20 20 20 61 73  sLimit ){.    as
66c0: 73 65 72 74 28 20 64 62 2d 3e 6e 50 72 6f 67 72  sert( db->nProgr
66d0: 65 73 73 4f 70 73 21 3d 30 20 29 3b 0a 20 20 20  essOps!=0 );.   
66e0: 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20   nProgressLimit 
66f0: 3d 20 6e 56 6d 53 74 65 70 20 2b 20 64 62 2d 3e  = nVmStep + db->
6700: 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 2d 20 28  nProgressOps - (
6710: 6e 56 6d 53 74 65 70 25 64 62 2d 3e 6e 50 72 6f  nVmStep%db->nPro
6720: 67 72 65 73 73 4f 70 73 29 3b 0a 20 20 20 20 69  gressOps);.    i
6730: 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73  f( db->xProgress
6740: 28 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72  (db->pProgressAr
6750: 67 29 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  g) ){.      rc =
6760: 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50   SQLITE_INTERRUP
6770: 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  T;.      goto ab
6780: 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
6790: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64  ;.    }.  }.#end
67a0: 69 66 0a 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d  if.  .  break;.}
67b0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f  ../* Opcode:  Go
67c0: 73 75 62 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  sub P1 P2 * * *.
67d0: 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  **.** Write the 
67e0: 63 75 72 72 65 6e 74 20 61 64 64 72 65 73 73 20  current address 
67f0: 6f 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 31  onto register P1
6800: 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20 6a 75 6d  .** and then jum
6810: 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e  p to address P2.
6820: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 73 75  .*/.case OP_Gosu
6830: 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  b: {            
6840: 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73  /* jump */.  ass
6850: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26  ert( pOp->p1>0 &
6860: 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e  & pOp->p1<=(p->n
6870: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
6880: 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  );.  pIn1 = &aMe
6890: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
68a0: 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e  sert( VdbeMemDyn
68b0: 61 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20 29 3b  amic(pIn1)==0 );
68c0: 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
68d0: 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20  nge(p, pIn1);.  
68e0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pIn1->flags = ME
68f0: 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75  M_Int;.  pIn1->u
6900: 2e 69 20 3d 20 28 69 6e 74 29 28 70 4f 70 2d 61  .i = (int)(pOp-a
6910: 4f 70 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  Op);.  REGISTER_
6920: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70  TRACE(pOp->p1, p
6930: 49 6e 31 29 3b 0a 0a 20 20 2f 2a 20 4d 6f 73 74  In1);..  /* Most
6940: 20 6a 75 6d 70 20 6f 70 65 72 61 74 69 6f 6e 73   jump operations
6950: 20 64 6f 20 61 20 67 6f 74 6f 20 74 6f 20 74 68   do a goto to th
6960: 69 73 20 73 70 6f 74 20 69 6e 20 6f 72 64 65 72  is spot in order
6970: 20 74 6f 20 75 70 64 61 74 65 0a 20 20 2a 2a 20   to update.  ** 
6980: 74 68 65 20 70 4f 70 20 70 6f 69 6e 74 65 72 2e  the pOp pointer.
6990: 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32 3a 0a   */.jump_to_p2:.
69a0: 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70    pOp = &aOp[pOp
69b0: 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 62 72 65  ->p2 - 1];.  bre
69c0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
69d0: 3a 20 20 52 65 74 75 72 6e 20 50 31 20 2a 20 2a  :  Return P1 * *
69e0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
69f0: 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
6a00: 72 75 63 74 69 6f 6e 20 61 66 74 65 72 20 74 68  ruction after th
6a10: 65 20 61 64 64 72 65 73 73 20 69 6e 20 72 65 67  e address in reg
6a20: 69 73 74 65 72 20 50 31 2e 20 20 41 66 74 65 72  ister P1.  After
6a30: 0a 2a 2a 20 74 68 65 20 6a 75 6d 70 2c 20 72 65  .** the jump, re
6a40: 67 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65  gister P1 become
6a50: 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a  s undefined..*/.
6a60: 63 61 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a 20  case OP_Return: 
6a70: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69  {           /* i
6a80: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
6a90: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
6aa0: 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
6ab0: 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b  lags==MEM_Int );
6ac0: 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 49  .  pOp = &aOp[pI
6ad0: 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20 70 49 6e 31  n1->u.i];.  pIn1
6ae0: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e  ->flags = MEM_Un
6af0: 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b  defined;.  break
6b00: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
6b10: 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 20 50 31  InitCoroutine P1
6b20: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
6b30: 20 53 65 74 20 75 70 20 72 65 67 69 73 74 65 72   Set up register
6b40: 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 77   P1 so that it w
6b50: 69 6c 6c 20 59 69 65 6c 64 20 74 6f 20 74 68 65  ill Yield to the
6b60: 20 63 6f 72 6f 75 74 69 6e 65 0a 2a 2a 20 6c 6f   coroutine.** lo
6b70: 63 61 74 65 64 20 61 74 20 61 64 64 72 65 73 73  cated at address
6b80: 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32   P3..**.** If P2
6b90: 21 3d 30 20 74 68 65 6e 20 74 68 65 20 63 6f 72  !=0 then the cor
6ba0: 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74  outine implement
6bb0: 61 74 69 6f 6e 20 69 6d 6d 65 64 69 61 74 65 6c  ation immediatel
6bc0: 79 20 66 6f 6c 6c 6f 77 73 0a 2a 2a 20 74 68 69  y follows.** thi
6bd0: 73 20 6f 70 63 6f 64 65 2e 20 20 53 6f 20 6a 75  s opcode.  So ju
6be0: 6d 70 20 6f 76 65 72 20 74 68 65 20 63 6f 72 6f  mp over the coro
6bf0: 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61  utine implementa
6c00: 74 69 6f 6e 20 74 6f 0a 2a 2a 20 61 64 64 72 65  tion to.** addre
6c10: 73 73 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ss P2..**.** See
6c20: 20 61 6c 73 6f 3a 20 45 6e 64 43 6f 72 6f 75 74   also: EndCorout
6c30: 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ine.*/.case OP_I
6c40: 6e 69 74 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20  nitCoroutine: { 
6c50: 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
6c60: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
6c70: 3e 30 20 26 26 20 20 70 4f 70 2d 3e 70 31 3c 3d  >0 &&  pOp->p1<=
6c80: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
6c90: 73 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74  sor) );.  assert
6ca0: 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 26 26 20  ( pOp->p2>=0 && 
6cb0: 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29  pOp->p2<p->nOp )
6cc0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
6cd0: 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p3>=0 && pOp->p
6ce0: 33 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f  3<p->nOp );.  pO
6cf0: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
6d00: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 21  p1];.  assert( !
6d10: 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70  VdbeMemDynamic(p
6d20: 4f 75 74 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  Out) );.  pOut->
6d30: 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20  u.i = pOp->p3 - 
6d40: 31 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  1;.  pOut->flags
6d50: 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 69 66   = MEM_Int;.  if
6d60: 28 20 70 4f 70 2d 3e 70 32 20 29 20 67 6f 74 6f  ( pOp->p2 ) goto
6d70: 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62   jump_to_p2;.  b
6d80: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
6d90: 64 65 3a 20 20 45 6e 64 43 6f 72 6f 75 74 69 6e  de:  EndCoroutin
6da0: 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  e P1 * * * *.**.
6db0: 2a 2a 20 54 68 65 20 69 6e 73 74 72 75 63 74 69  ** The instructi
6dc0: 6f 6e 20 61 74 20 74 68 65 20 61 64 64 72 65 73  on at the addres
6dd0: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
6de0: 20 69 73 20 61 20 59 69 65 6c 64 2e 0a 2a 2a 20   is a Yield..** 
6df0: 4a 75 6d 70 20 74 6f 20 74 68 65 20 50 32 20 70  Jump to the P2 p
6e00: 61 72 61 6d 65 74 65 72 20 6f 66 20 74 68 61 74  arameter of that
6e10: 20 59 69 65 6c 64 2e 0a 2a 2a 20 41 66 74 65 72   Yield..** After
6e20: 20 74 68 65 20 6a 75 6d 70 2c 20 72 65 67 69 73   the jump, regis
6e30: 74 65 72 20 50 31 20 62 65 63 6f 6d 65 73 20 75  ter P1 becomes u
6e40: 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20  ndefined..**.** 
6e50: 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74 43 6f  See also: InitCo
6e60: 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20  routine.*/.case 
6e70: 4f 50 5f 45 6e 64 43 6f 72 6f 75 74 69 6e 65 3a  OP_EndCoroutine:
6e80: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
6e90: 69 6e 31 20 2a 2f 0a 20 20 56 64 62 65 4f 70 20  in1 */.  VdbeOp 
6ea0: 2a 70 43 61 6c 6c 65 72 3b 0a 20 20 70 49 6e 31  *pCaller;.  pIn1
6eb0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
6ec0: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
6ed0: 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e  1->flags==MEM_In
6ee0: 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t );.  assert( p
6ef0: 49 6e 31 2d 3e 75 2e 69 3e 3d 30 20 26 26 20 70  In1->u.i>=0 && p
6f00: 49 6e 31 2d 3e 75 2e 69 3c 70 2d 3e 6e 4f 70 20  In1->u.i<p->nOp 
6f10: 29 3b 0a 20 20 70 43 61 6c 6c 65 72 20 3d 20 26  );.  pCaller = &
6f20: 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a  aOp[pIn1->u.i];.
6f30: 20 20 61 73 73 65 72 74 28 20 70 43 61 6c 6c 65    assert( pCalle
6f40: 72 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 59 69  r->opcode==OP_Yi
6f50: 65 6c 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28  eld );.  assert(
6f60: 20 70 43 61 6c 6c 65 72 2d 3e 70 32 3e 3d 30 20   pCaller->p2>=0 
6f70: 26 26 20 70 43 61 6c 6c 65 72 2d 3e 70 32 3c 70  && pCaller->p2<p
6f80: 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f 70 20 3d  ->nOp );.  pOp =
6f90: 20 26 61 4f 70 5b 70 43 61 6c 6c 65 72 2d 3e 70   &aOp[pCaller->p
6fa0: 32 20 2d 20 31 5d 3b 0a 20 20 70 49 6e 31 2d 3e  2 - 1];.  pIn1->
6fb0: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65  flags = MEM_Unde
6fc0: 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b 0a  fined;.  break;.
6fd0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 59  }../* Opcode:  Y
6fe0: 69 65 6c 64 20 50 31 20 50 32 20 2a 20 2a 20 2a  ield P1 P2 * * *
6ff0: 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74 68 65 20  .**.** Swap the 
7000: 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20  program counter 
7010: 77 69 74 68 20 74 68 65 20 76 61 6c 75 65 20 69  with the value i
7020: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  n register P1.  
7030: 54 68 69 73 0a 2a 2a 20 68 61 73 20 74 68 65 20  This.** has the 
7040: 65 66 66 65 63 74 20 6f 66 20 79 69 65 6c 64 69  effect of yieldi
7050: 6e 67 20 74 6f 20 61 20 63 6f 72 6f 75 74 69 6e  ng to a coroutin
7060: 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
7070: 63 6f 72 6f 75 74 69 6e 65 20 74 68 61 74 20 69  coroutine that i
7080: 73 20 6c 61 75 6e 63 68 65 64 20 62 79 20 74 68  s launched by th
7090: 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65  is instruction e
70a0: 6e 64 73 20 77 69 74 68 0a 2a 2a 20 59 69 65 6c  nds with.** Yiel
70b0: 64 20 6f 72 20 52 65 74 75 72 6e 20 74 68 65 6e  d or Return then
70c0: 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 74 68 65   continue to the
70d0: 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
70e0: 6e 2e 20 20 42 75 74 20 69 66 0a 2a 2a 20 74 68  n.  But if.** th
70f0: 65 20 63 6f 72 6f 75 74 69 6e 65 20 6c 61 75 6e  e coroutine laun
7100: 63 68 65 64 20 62 79 20 74 68 69 73 20 69 6e 73  ched by this ins
7110: 74 72 75 63 74 69 6f 6e 20 65 6e 64 73 20 77 69  truction ends wi
7120: 74 68 0a 2a 2a 20 45 6e 64 43 6f 72 6f 75 74 69  th.** EndCorouti
7130: 6e 65 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ne, then jump to
7140: 20 50 32 20 72 61 74 68 65 72 20 74 68 61 6e 20   P2 rather than 
7150: 63 6f 6e 74 69 6e 75 69 6e 67 20 77 69 74 68 20  continuing with 
7160: 74 68 65 0a 2a 2a 20 6e 65 78 74 20 69 6e 73 74  the.** next inst
7170: 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53  ruction..**.** S
7180: 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74 43 6f 72  ee also: InitCor
7190: 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f  outine.*/.case O
71a0: 50 5f 59 69 65 6c 64 3a 20 7b 20 20 20 20 20 20  P_Yield: {      
71b0: 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6a 75        /* in1, ju
71c0: 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 70 63 44 65  mp */.  int pcDe
71d0: 73 74 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  st;.  pIn1 = &aM
71e0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
71f0: 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79  ssert( VdbeMemDy
7200: 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20 29  namic(pIn1)==0 )
7210: 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  ;.  pIn1->flags 
7220: 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 63 44  = MEM_Int;.  pcD
7230: 65 73 74 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d  est = (int)pIn1-
7240: 3e 75 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e  >u.i;.  pIn1->u.
7250: 69 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  i = (int)(pOp - 
7260: 61 4f 70 29 3b 0a 20 20 52 45 47 49 53 54 45 52  aOp);.  REGISTER
7270: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20  _TRACE(pOp->p1, 
7280: 70 49 6e 31 29 3b 0a 20 20 70 4f 70 20 3d 20 26  pIn1);.  pOp = &
7290: 61 4f 70 5b 70 63 44 65 73 74 5d 3b 0a 20 20 62  aOp[pcDest];.  b
72a0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
72b0: 64 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c 6c 20  de:  HaltIfNull 
72c0: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
72d0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 66  ** Synopsis:  if
72e0: 20 72 5b 50 33 5d 3d 6e 75 6c 6c 20 68 61 6c 74   r[P3]=null halt
72f0: 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65  .**.** Check the
7300: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
7310: 65 72 20 50 33 2e 20 20 49 66 20 69 74 20 69 73  er P3.  If it is
7320: 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61 6c 74 20   NULL then Halt 
7330: 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61 6d 65 74  using.** paramet
7340: 65 72 20 50 31 2c 20 50 32 2c 20 61 6e 64 20 50  er P1, P2, and P
7350: 34 20 61 73 20 69 66 20 74 68 69 73 20 77 65 72  4 as if this wer
7360: 65 20 61 20 48 61 6c 74 20 69 6e 73 74 72 75 63  e a Halt instruc
7370: 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a  tion.  If the.**
7380: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
7390: 65 72 20 50 33 20 69 73 20 6e 6f 74 20 4e 55 4c  er P3 is not NUL
73a0: 4c 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75  L, then this rou
73b0: 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e  tine is a no-op.
73c0: 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61 6d  .** The P5 param
73d0: 65 74 65 72 20 73 68 6f 75 6c 64 20 62 65 20 31  eter should be 1
73e0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c  ..*/.case OP_Hal
73f0: 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20  tIfNull: {      
7400: 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33  /* in3 */.  pIn3
7410: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
7420: 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 33 2d 3e  ];.  if( (pIn3->
7430: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
7440: 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20  )==0 ) break;.  
7450: 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
7460: 69 6e 74 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a  into OP_Halt */.
7470: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48  }../* Opcode:  H
7480: 61 6c 74 20 50 31 20 50 32 20 2a 20 50 34 20 50  alt P1 P2 * P4 P
7490: 35 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d 6d  5.**.** Exit imm
74a0: 65 64 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20 6f  ediately.  All o
74b0: 70 65 6e 20 63 75 72 73 6f 72 73 2c 20 65 74 63  pen cursors, etc
74c0: 20 61 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20 61   are closed.** a
74d0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a  utomatically..**
74e0: 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 72 65  .** P1 is the re
74f0: 73 75 6c 74 20 63 6f 64 65 20 72 65 74 75 72 6e  sult code return
7500: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 65 78  ed by sqlite3_ex
7510: 65 63 28 29 2c 20 73 71 6c 69 74 65 33 5f 72 65  ec(), sqlite3_re
7520: 73 65 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c  set(),.** or sql
7530: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 2e  ite3_finalize().
7540: 20 20 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20 68    For a normal h
7550: 61 6c 74 2c 20 74 68 69 73 20 73 68 6f 75 6c 64  alt, this should
7560: 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28 30   be SQLITE_OK (0
7570: 29 2e 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72 73  )..** For errors
7580: 2c 20 69 74 20 63 61 6e 20 62 65 20 73 6f 6d 65  , it can be some
7590: 20 6f 74 68 65 72 20 76 61 6c 75 65 2e 20 20 49   other value.  I
75a0: 66 20 50 31 21 3d 30 20 74 68 65 6e 20 50 32 20  f P1!=0 then P2 
75b0: 77 69 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a 2a  will determine.*
75c0: 2a 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  * whether or not
75d0: 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65   to rollback the
75e0: 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63   current transac
75f0: 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72 6f  tion.  Do not ro
7600: 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32 3d  llback.** if P2=
7610: 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68 65  =OE_Fail. Do the
7620: 20 72 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32 3d   rollback if P2=
7630: 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20 49  =OE_Rollback.  I
7640: 66 20 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a  f P2==OE_Abort,.
7650: 2a 2a 20 74 68 65 6e 20 62 61 63 6b 20 6f 75 74  ** then back out
7660: 20 61 6c 6c 20 63 68 61 6e 67 65 73 20 74 68 61   all changes tha
7670: 74 20 68 61 76 65 20 6f 63 63 75 72 72 65 64 20  t have occurred 
7680: 64 75 72 69 6e 67 20 74 68 69 73 20 65 78 65 63  during this exec
7690: 75 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ution of the.** 
76a0: 56 44 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f 74  VDBE, but do not
76b0: 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72   rollback the tr
76c0: 61 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a  ansaction. .**.*
76d0: 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 6e  * If P4 is not n
76e0: 75 6c 6c 20 74 68 65 6e 20 69 74 20 69 73 20 61  ull then it is a
76f0: 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
7700: 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50 35  string..**.** P5
7710: 20 69 73 20 61 20 76 61 6c 75 65 20 62 65 74 77   is a value betw
7720: 65 65 6e 20 30 20 61 6e 64 20 34 2c 20 69 6e 63  een 0 and 4, inc
7730: 6c 75 73 69 76 65 2c 20 74 68 61 74 20 6d 6f 64  lusive, that mod
7740: 69 66 69 65 73 20 74 68 65 20 50 34 20 73 74 72  ifies the P4 str
7750: 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 30 3a  ing..**.**    0:
7760: 20 20 28 6e 6f 20 63 68 61 6e 67 65 29 0a 2a 2a    (no change).**
7770: 20 20 20 20 31 3a 20 20 4e 4f 54 20 4e 55 4c 4c      1:  NOT NULL
7780: 20 63 6f 6e 74 72 61 69 6e 74 20 66 61 69 6c 65   contraint faile
7790: 64 3a 20 50 34 0a 2a 2a 20 20 20 20 32 3a 20 20  d: P4.**    2:  
77a0: 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
77b0: 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20  t failed: P4.** 
77c0: 20 20 20 33 3a 20 20 43 48 45 43 4b 20 63 6f 6e     3:  CHECK con
77d0: 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20  straint failed: 
77e0: 50 34 0a 2a 2a 20 20 20 20 34 3a 20 20 46 4f 52  P4.**    4:  FOR
77f0: 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61  EIGN KEY constra
7800: 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a  int failed: P4.*
7810: 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f  *.** If P5 is no
7820: 74 20 7a 65 72 6f 20 61 6e 64 20 50 34 20 69 73  t zero and P4 is
7830: 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 65 76 65 72   NULL, then ever
7840: 79 74 68 69 6e 67 20 61 66 74 65 72 20 74 68 65  ything after the
7850: 20 22 3a 22 20 69 73 0a 2a 2a 20 6f 6d 69 74 74   ":" is.** omitt
7860: 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20  ed..**.** There 
7870: 69 73 20 61 6e 20 69 6d 70 6c 69 65 64 20 22 48  is an implied "H
7880: 61 6c 74 20 30 20 30 20 30 22 20 69 6e 73 74 72  alt 0 0 0" instr
7890: 75 63 74 69 6f 6e 20 69 6e 73 65 72 74 65 64 20  uction inserted 
78a0: 61 74 20 74 68 65 20 76 65 72 79 20 65 6e 64 20  at the very end 
78b0: 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f 67  of.** every prog
78c0: 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70 20  ram.  So a jump 
78d0: 70 61 73 74 20 74 68 65 20 6c 61 73 74 20 69 6e  past the last in
78e0: 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 65  struction of the
78f0: 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20 74   program.** is t
7900: 68 65 20 73 61 6d 65 20 61 73 20 65 78 65 63 75  he same as execu
7910: 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61  ting Halt..*/.ca
7920: 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20 20  se OP_Halt: {.  
7930: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70  const char *zTyp
7940: 65 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  e;.  const char 
7950: 2a 7a 4c 6f 67 46 6d 74 3b 0a 20 20 56 64 62 65  *zLogFmt;.  Vdbe
7960: 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20  Frame *pFrame;. 
7970: 20 69 6e 74 20 70 63 78 3b 0a 0a 20 20 70 63 78   int pcx;..  pcx
7980: 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61   = (int)(pOp - a
7990: 4f 70 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  Op);.  if( pOp->
79a0: 70 31 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  p1==SQLITE_OK &&
79b0: 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20   p->pFrame ){.  
79c0: 20 20 2f 2a 20 48 61 6c 74 20 74 68 65 20 73 75    /* Halt the su
79d0: 62 2d 70 72 6f 67 72 61 6d 2e 20 52 65 74 75 72  b-program. Retur
79e0: 6e 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65  n control to the
79f0: 20 70 61 72 65 6e 74 20 66 72 61 6d 65 2e 20 2a   parent frame. *
7a00: 2f 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 70  /.    pFrame = p
7a10: 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 20 20 70 2d  ->pFrame;.    p-
7a20: 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65  >pFrame = pFrame
7a30: 2d 3e 70 50 61 72 65 6e 74 3b 0a 20 20 20 20 70  ->pParent;.    p
7a40: 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20 20 20  ->nFrame--;.    
7a50: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68  sqlite3VdbeSetCh
7a60: 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68  anges(db, p->nCh
7a70: 61 6e 67 65 29 3b 0a 20 20 20 20 70 63 78 20 3d  ange);.    pcx =
7a80: 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 61 6d   sqlite3VdbeFram
7a90: 65 52 65 73 74 6f 72 65 28 70 46 72 61 6d 65 29  eRestore(pFrame)
7aa0: 3b 0a 20 20 20 20 6c 61 73 74 52 6f 77 69 64 20  ;.    lastRowid 
7ab0: 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b  = db->lastRowid;
7ac0: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  .    if( pOp->p2
7ad0: 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20  ==OE_Ignore ){. 
7ae0: 20 20 20 20 20 2f 2a 20 49 6e 73 74 72 75 63 74       /* Instruct
7af0: 69 6f 6e 20 70 63 78 20 69 73 20 74 68 65 20 4f  ion pcx is the O
7b00: 50 5f 50 72 6f 67 72 61 6d 20 74 68 61 74 20 69  P_Program that i
7b10: 6e 76 6f 6b 65 64 20 74 68 65 20 73 75 62 2d 70  nvoked the sub-p
7b20: 72 6f 67 72 61 6d 20 0a 20 20 20 20 20 20 2a 2a  rogram .      **
7b30: 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67   currently being
7b40: 20 68 61 6c 74 65 64 2e 20 49 66 20 74 68 65 20   halted. If the 
7b50: 70 32 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  p2 instruction o
7b60: 66 20 74 68 69 73 20 4f 50 5f 48 61 6c 74 0a 20  f this OP_Halt. 
7b70: 20 20 20 20 20 2a 2a 20 69 6e 73 74 72 75 63 74       ** instruct
7b80: 69 6f 6e 20 69 73 20 73 65 74 20 74 6f 20 4f 45  ion is set to OE
7b90: 5f 49 67 6e 6f 72 65 2c 20 74 68 65 6e 20 74 68  _Ignore, then th
7ba0: 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 69 73  e sub-program is
7bb0: 20 74 68 72 6f 77 69 6e 67 0a 20 20 20 20 20 20   throwing.      
7bc0: 2a 2a 20 61 6e 20 49 47 4e 4f 52 45 20 65 78 63  ** an IGNORE exc
7bd0: 65 70 74 69 6f 6e 2e 20 49 6e 20 74 68 69 73 20  eption. In this 
7be0: 63 61 73 65 20 6a 75 6d 70 20 74 6f 20 74 68 65  case jump to the
7bf0: 20 61 64 64 72 65 73 73 20 73 70 65 63 69 66 69   address specifi
7c00: 65 64 0a 20 20 20 20 20 20 2a 2a 20 61 73 20 74  ed.      ** as t
7c10: 68 65 20 70 32 20 6f 66 20 74 68 65 20 63 61 6c  he p2 of the cal
7c20: 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 2e  ling OP_Program.
7c30: 20 20 2a 2f 0a 20 20 20 20 20 20 70 63 78 20 3d    */.      pcx =
7c40: 20 70 2d 3e 61 4f 70 5b 70 63 78 5d 2e 70 32 2d   p->aOp[pcx].p2-
7c50: 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 4f 70  1;.    }.    aOp
7c60: 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 61   = p->aOp;.    a
7c70: 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20  Mem = p->aMem;. 
7c80: 20 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63     pOp = &aOp[pc
7c90: 78 5d 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  x];.    break;. 
7ca0: 20 7d 0a 20 20 70 2d 3e 72 63 20 3d 20 70 4f 70   }.  p->rc = pOp
7cb0: 2d 3e 70 31 3b 0a 20 20 70 2d 3e 65 72 72 6f 72  ->p1;.  p->error
7cc0: 41 63 74 69 6f 6e 20 3d 20 28 75 38 29 70 4f 70  Action = (u8)pOp
7cd0: 2d 3e 70 32 3b 0a 20 20 70 2d 3e 70 63 20 3d 20  ->p2;.  p->pc = 
7ce0: 70 63 78 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63  pcx;.  if( p->rc
7cf0: 20 29 7b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   ){.    if( pOp-
7d00: 3e 70 35 20 29 7b 0a 20 20 20 20 20 20 73 74 61  >p5 ){.      sta
7d10: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
7d20: 20 63 6f 6e 73 74 20 61 7a 54 79 70 65 5b 5d 20   const azType[] 
7d30: 3d 20 7b 20 22 4e 4f 54 20 4e 55 4c 4c 22 2c 20  = { "NOT NULL", 
7d40: 22 55 4e 49 51 55 45 22 2c 20 22 43 48 45 43 4b  "UNIQUE", "CHECK
7d50: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
7d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d80: 22 46 4f 52 45 49 47 4e 20 4b 45 59 22 20 7d 3b  "FOREIGN KEY" };
7d90: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
7da0: 4f 70 2d 3e 70 35 3e 3d 31 20 26 26 20 70 4f 70  Op->p5>=1 && pOp
7db0: 2d 3e 70 35 3c 3d 34 20 29 3b 0a 20 20 20 20 20  ->p5<=4 );.     
7dc0: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
7dd0: 70 35 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 74  p5==1 );.      t
7de0: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35  estcase( pOp->p5
7df0: 3d 3d 32 20 29 3b 0a 20 20 20 20 20 20 74 65 73  ==2 );.      tes
7e00: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d  tcase( pOp->p5==
7e10: 33 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63  3 );.      testc
7e20: 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 34 20  ase( pOp->p5==4 
7e30: 29 3b 0a 20 20 20 20 20 20 7a 54 79 70 65 20 3d  );.      zType =
7e40: 20 61 7a 54 79 70 65 5b 70 4f 70 2d 3e 70 35 2d   azType[pOp->p5-
7e50: 31 5d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  1];.    }else{. 
7e60: 20 20 20 20 20 7a 54 79 70 65 20 3d 20 30 3b 0a       zType = 0;.
7e70: 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74      }.    assert
7e80: 28 20 7a 54 79 70 65 21 3d 30 20 7c 7c 20 70 4f  ( zType!=0 || pO
7e90: 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20  p->p4.z!=0 );.  
7ea0: 20 20 7a 4c 6f 67 46 6d 74 20 3d 20 22 61 62 6f    zLogFmt = "abo
7eb0: 72 74 20 61 74 20 25 64 20 69 6e 20 5b 25 73 5d  rt at %d in [%s]
7ec0: 3a 20 25 73 22 3b 0a 20 20 20 20 69 66 28 20 7a  : %s";.    if( z
7ed0: 54 79 70 65 20 26 26 20 70 4f 70 2d 3e 70 34 2e  Type && pOp->p4.
7ee0: 7a 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  z ){.      sqlit
7ef0: 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22  e3VdbeError(p, "
7f00: 25 73 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  %s constraint fa
7f10: 69 6c 65 64 3a 20 25 73 22 2c 20 7a 54 79 70 65  iled: %s", zType
7f20: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
7f30: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d    }else if( pOp-
7f40: 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20 73  >p4.z ){.      s
7f50: 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
7f60: 70 2c 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70 34  p, "%s", pOp->p4
7f70: 2e 7a 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  .z);.    }else{.
7f80: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
7f90: 65 45 72 72 6f 72 28 70 2c 20 22 25 73 20 63 6f  eError(p, "%s co
7fa0: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 22  nstraint failed"
7fb0: 2c 20 7a 54 79 70 65 29 3b 0a 20 20 20 20 7d 0a  , zType);.    }.
7fc0: 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28      sqlite3_log(
7fd0: 70 4f 70 2d 3e 70 31 2c 20 7a 4c 6f 67 46 6d 74  pOp->p1, zLogFmt
7fe0: 2c 20 70 63 78 2c 20 70 2d 3e 7a 53 71 6c 2c 20  , pcx, p->zSql, 
7ff0: 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d  p->zErrMsg);.  }
8000: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
8010: 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 61 73  dbeHalt(p);.  as
8020: 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
8030: 5f 42 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c  _BUSY || rc==SQL
8040: 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51  ITE_OK || rc==SQ
8050: 4c 49 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20 20  LITE_ERROR );.  
8060: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  if( rc==SQLITE_B
8070: 55 53 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63  USY ){.    p->rc
8080: 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42   = rc = SQLITE_B
8090: 55 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  USY;.  }else{.  
80a0: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
80b0: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72  LITE_OK || (p->r
80c0: 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f  c&0xff)==SQLITE_
80d0: 43 4f 4e 53 54 52 41 49 4e 54 20 29 3b 0a 20 20  CONSTRAINT );.  
80e0: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
80f0: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e  LITE_OK || db->n
8100: 44 65 66 65 72 72 65 64 43 6f 6e 73 3e 30 20 7c  DeferredCons>0 |
8110: 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  | db->nDeferredI
8120: 6d 6d 43 6f 6e 73 3e 30 20 29 3b 0a 20 20 20 20  mmCons>0 );.    
8130: 72 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51 4c  rc = p->rc ? SQL
8140: 49 54 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c 49  ITE_ERROR : SQLI
8150: 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67  TE_DONE;.  }.  g
8160: 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
8170: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
8180: 6e 74 65 67 65 72 20 50 31 20 50 32 20 2a 20 2a  nteger P1 P2 * *
8190: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
81a0: 72 5b 50 32 5d 3d 50 31 0a 2a 2a 0a 2a 2a 20 54  r[P2]=P1.**.** T
81b0: 68 65 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65  he 32-bit intege
81c0: 72 20 76 61 6c 75 65 20 50 31 20 69 73 20 77 72  r value P1 is wr
81d0: 69 74 74 65 6e 20 69 6e 74 6f 20 72 65 67 69 73  itten into regis
81e0: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
81f0: 4f 50 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20 20  OP_Integer: {   
8200: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
8210: 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
8220: 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
8230: 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
8240: 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61 6b  pOp->p1;.  break
8250: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
8260: 49 6e 74 36 34 20 2a 20 50 32 20 2a 20 50 34 20  Int64 * P2 * P4 
8270: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
8280: 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34  [P2]=P4.**.** P4
8290: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
82a0: 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65   a 64-bit intege
82b0: 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74  r value..** Writ
82c0: 65 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74  e that value int
82d0: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
82e0: 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36 34 3a  /.case OP_Int64:
82f0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
8300: 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d  out2 */.  pOut =
8310: 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
8320: 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72  p, pOp);.  asser
8330: 74 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36 34 21  t( pOp->p4.pI64!
8340: 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  =0 );.  pOut->u.
8350: 69 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 49 36  i = *pOp->p4.pI6
8360: 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23  4;.  break;.}..#
8370: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
8380: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
8390: 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61  T./* Opcode: Rea
83a0: 6c 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a  l * P2 * P4 *.**
83b0: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
83c0: 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  =P4.**.** P4 is 
83d0: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36  a pointer to a 6
83e0: 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20 70  4-bit floating p
83f0: 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20 57  oint value..** W
8400: 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20  rite that value 
8410: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
8420: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61  ..*/.case OP_Rea
8430: 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  l: {            
8440: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 46 4c  /* same as TK_FL
8450: 4f 41 54 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70  OAT, out2 */.  p
8460: 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
8470: 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
8480: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
8490: 4d 5f 52 65 61 6c 3b 0a 20 20 61 73 73 65 72 74  M_Real;.  assert
84a0: 28 20 21 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  ( !sqlite3IsNaN(
84b0: 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 29 20  *pOp->p4.pReal) 
84c0: 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d  );.  pOut->u.r =
84d0: 20 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 3b   *pOp->p4.pReal;
84e0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
84f0: 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  if../* Opcode: S
8500: 74 72 69 6e 67 38 20 2a 20 50 32 20 2a 20 50 34  tring8 * P2 * P4
8510: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
8520: 72 5b 50 32 5d 3d 27 50 34 27 0a 2a 2a 0a 2a 2a  r[P2]='P4'.**.**
8530: 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20   P4 points to a 
8540: 6e 75 6c 20 74 65 72 6d 69 6e 61 74 65 64 20 55  nul terminated U
8550: 54 46 2d 38 20 73 74 72 69 6e 67 2e 20 54 68 69  TF-8 string. Thi
8560: 73 20 6f 70 63 6f 64 65 20 69 73 20 74 72 61 6e  s opcode is tran
8570: 73 66 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f  sformed .** into
8580: 20 61 20 53 74 72 69 6e 67 20 6f 70 63 6f 64 65   a String opcode
8590: 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 65 78   before it is ex
85a0: 65 63 75 74 65 64 20 66 6f 72 20 74 68 65 20 66  ecuted for the f
85b0: 69 72 73 74 20 74 69 6d 65 2e 20 20 44 75 72 69  irst time.  Duri
85c0: 6e 67 0a 2a 2a 20 74 68 69 73 20 74 72 61 6e 73  ng.** this trans
85d0: 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 6c  formation, the l
85e0: 65 6e 67 74 68 20 6f 66 20 73 74 72 69 6e 67 20  ength of string 
85f0: 50 34 20 69 73 20 63 6f 6d 70 75 74 65 64 20 61  P4 is computed a
8600: 6e 64 20 73 74 6f 72 65 64 0a 2a 2a 20 61 73 20  nd stored.** as 
8610: 74 68 65 20 50 31 20 70 61 72 61 6d 65 74 65 72  the P1 parameter
8620: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72  ..*/.case OP_Str
8630: 69 6e 67 38 3a 20 7b 20 20 20 20 20 20 20 20 20  ing8: {         
8640: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54  /* same as TK_ST
8650: 52 49 4e 47 2c 20 6f 75 74 32 20 2a 2f 0a 20 20  RING, out2 */.  
8660: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
8670: 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20 3d  z!=0 );.  pOut =
8680: 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
8690: 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 70 2d 3e  p, pOp);.  pOp->
86a0: 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72 69  opcode = OP_Stri
86b0: 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20  ng;.  pOp->p1 = 
86c0: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
86d0: 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66  pOp->p4.z);..#if
86e0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
86f0: 5f 55 54 46 31 36 0a 20 20 69 66 28 20 65 6e 63  _UTF16.  if( enc
8700: 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55 54  oding!=SQLITE_UT
8710: 46 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  F8 ){.    rc = s
8720: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
8730: 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70  Str(pOut, pOp->p
8740: 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f  4.z, -1, SQLITE_
8750: 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41  UTF8, SQLITE_STA
8760: 54 49 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63  TIC);.    if( rc
8770: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
8780: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f  ( rc==SQLITE_TOO
8790: 42 49 47 20 29 3b 20 2f 2a 20 54 68 69 73 20 69  BIG ); /* This i
87a0: 73 20 74 68 65 20 6f 6e 6c 79 20 70 6f 73 73 69  s the only possi
87b0: 62 6c 65 20 65 72 72 6f 72 20 68 65 72 65 20 2a  ble error here *
87c0: 2f 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f  /.      goto too
87d0: 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20  _big;.    }.    
87e0: 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 73  if( SQLITE_OK!=s
87f0: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
8800: 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65  Encoding(pOut, e
8810: 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f 74 6f 20  ncoding) ) goto 
8820: 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73 73 65  no_mem;.    asse
8830: 72 74 28 20 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c  rt( pOut->szMall
8840: 6f 63 3e 30 20 26 26 20 70 4f 75 74 2d 3e 7a 4d  oc>0 && pOut->zM
8850: 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a 20 29  alloc==pOut->z )
8860: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 56 64  ;.    assert( Vd
8870: 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75  beMemDynamic(pOu
8880: 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20 70 4f 75  t)==0 );.    pOu
8890: 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b  t->szMalloc = 0;
88a0: 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
88b0: 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69 63 3b 0a   |= MEM_Static;.
88c0: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74      if( pOp->p4t
88d0: 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d 49 43 20  ype==P4_DYNAMIC 
88e0: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
88f0: 44 62 46 72 65 65 28 64 62 2c 20 70 4f 70 2d 3e  DbFree(db, pOp->
8900: 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 20  p4.z);.    }.   
8910: 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50   pOp->p4type = P
8920: 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20 20 20 70  4_DYNAMIC;.    p
8930: 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75 74 2d  Op->p4.z = pOut-
8940: 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 31 20  >z;.    pOp->p1 
8950: 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20 7d 0a 23  = pOut->n;.  }.#
8960: 65 6e 64 69 66 0a 20 20 69 66 28 20 70 4f 70 2d  endif.  if( pOp-
8970: 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  >p1>db->aLimit[S
8980: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
8990: 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  TH] ){.    goto 
89a0: 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 2f  too_big;.  }.  /
89b0: 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  * Fall through t
89c0: 6f 20 74 68 65 20 6e 65 78 74 20 63 61 73 65 2c  o the next case,
89d0: 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a   OP_String */.}.
89e0: 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74    ./* Opcode: St
89f0: 72 69 6e 67 20 50 31 20 50 32 20 50 33 20 50 34  ring P1 P2 P3 P4
8a00: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
8a10: 20 72 5b 50 32 5d 3d 27 50 34 27 20 28 6c 65 6e   r[P2]='P4' (len
8a20: 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73  =P1).**.** The s
8a30: 74 72 69 6e 67 20 76 61 6c 75 65 20 50 34 20 6f  tring value P4 o
8a40: 66 20 6c 65 6e 67 74 68 20 50 31 20 28 62 79 74  f length P1 (byt
8a50: 65 73 29 20 69 73 20 73 74 6f 72 65 64 20 69 6e  es) is stored in
8a60: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
8a70: 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 61 6e 64  .** If P5!=0 and
8a80: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
8a90: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67  register P3 is g
8aa0: 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f  reater than zero
8ab0: 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 64 61  , then.** the da
8ac0: 74 61 74 79 70 65 20 6f 66 20 74 68 65 20 72 65  tatype of the re
8ad0: 67 69 73 74 65 72 20 50 32 20 69 73 20 63 6f 6e  gister P2 is con
8ae0: 76 65 72 74 65 64 20 74 6f 20 42 4c 4f 42 2e 20  verted to BLOB. 
8af0: 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 0a   The content is.
8b00: 2a 2a 20 74 68 65 20 73 61 6d 65 20 73 65 71 75  ** the same sequ
8b10: 65 6e 63 65 20 6f 66 20 62 79 74 65 73 2c 20 69  ence of bytes, i
8b20: 74 20 69 73 20 6d 65 72 65 6c 79 20 69 6e 74 65  t is merely inte
8b30: 72 70 72 65 74 65 64 20 61 73 20 61 20 42 4c 4f  rpreted as a BLO
8b40: 42 20 69 6e 73 74 65 61 64 0a 2a 2a 20 6f 66 20  B instead.** of 
8b50: 61 20 73 74 72 69 6e 67 2c 20 61 73 20 69 66 20  a string, as if 
8b60: 69 74 20 68 61 64 20 62 65 65 6e 20 43 41 53 54  it had been CAST
8b70: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72  ..*/.case OP_Str
8b80: 69 6e 67 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ing: {          
8b90: 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73  /* out2 */.  ass
8ba0: 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d  ert( pOp->p4.z!=
8bb0: 30 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  0 );.  pOut = ou
8bc0: 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
8bd0: 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  pOp);.  pOut->fl
8be0: 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45  ags = MEM_Str|ME
8bf0: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72  M_Static|MEM_Ter
8c00: 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70  m;.  pOut->z = p
8c10: 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74  Op->p4.z;.  pOut
8c20: 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  ->n = pOp->p1;. 
8c30: 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63   pOut->enc = enc
8c40: 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f  oding;.  UPDATE_
8c50: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
8c60: 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
8c70: 54 45 5f 4c 49 4b 45 5f 44 4f 45 53 4e 54 5f 4d  TE_LIKE_DOESNT_M
8c80: 41 54 43 48 5f 42 4c 4f 42 53 0a 20 20 69 66 28  ATCH_BLOBS.  if(
8c90: 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20   pOp->p5 ){.    
8ca0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
8cb0: 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
8cc0: 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
8cd0: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
8ce0: 3b 0a 20 20 20 20 70 49 6e 33 20 3d 20 26 61 4d  ;.    pIn3 = &aM
8cf0: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
8d00: 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
8d10: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
8d20: 3b 0a 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e  ;.    if( pIn3->
8d30: 75 2e 69 20 29 20 70 4f 75 74 2d 3e 66 6c 61 67  u.i ) pOut->flag
8d40: 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d  s = MEM_Blob|MEM
8d50: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d  _Static|MEM_Term
8d60: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 62  ;.  }.#endif.  b
8d70: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
8d80: 64 65 3a 20 4e 75 6c 6c 20 50 31 20 50 32 20 50  de: Null P1 P2 P
8d90: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
8da0: 73 3a 20 20 72 5b 50 32 2e 2e 50 33 5d 3d 4e 55  s:  r[P2..P3]=NU
8db0: 4c 4c 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61  LL.**.** Write a
8dc0: 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73   NULL into regis
8dd0: 74 65 72 73 20 50 32 2e 20 20 49 66 20 50 33 20  ters P2.  If P3 
8de0: 67 72 65 61 74 65 72 20 74 68 61 6e 20 50 32 2c  greater than P2,
8df0: 20 74 68 65 6e 20 61 6c 73 6f 20 77 72 69 74 65   then also write
8e00: 0a 2a 2a 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65  .** NULL into re
8e10: 67 69 73 74 65 72 20 50 33 20 61 6e 64 20 65 76  gister P3 and ev
8e20: 65 72 79 20 72 65 67 69 73 74 65 72 20 69 6e 20  ery register in 
8e30: 62 65 74 77 65 65 6e 20 50 32 20 61 6e 64 20 50  between P2 and P
8e40: 33 2e 20 20 49 66 20 50 33 0a 2a 2a 20 69 73 20  3.  If P3.** is 
8e50: 6c 65 73 73 20 74 68 61 6e 20 50 32 20 28 74 79  less than P2 (ty
8e60: 70 69 63 61 6c 6c 79 20 50 33 20 69 73 20 7a 65  pically P3 is ze
8e70: 72 6f 29 20 74 68 65 6e 20 6f 6e 6c 79 20 72 65  ro) then only re
8e80: 67 69 73 74 65 72 20 50 32 20 69 73 0a 2a 2a 20  gister P2 is.** 
8e90: 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a  set to NULL..**.
8ea0: 2a 2a 20 49 66 20 74 68 65 20 50 31 20 76 61 6c  ** If the P1 val
8eb0: 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  ue is non-zero, 
8ec0: 74 68 65 6e 20 61 6c 73 6f 20 73 65 74 20 74 68  then also set th
8ed0: 65 20 4d 45 4d 5f 43 6c 65 61 72 65 64 20 66 6c  e MEM_Cleared fl
8ee0: 61 67 20 73 6f 20 74 68 61 74 0a 2a 2a 20 4e 55  ag so that.** NU
8ef0: 4c 4c 20 76 61 6c 75 65 73 20 77 69 6c 6c 20 6e  LL values will n
8f00: 6f 74 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c  ot compare equal
8f10: 20 65 76 65 6e 20 69 66 20 53 51 4c 49 54 45 5f   even if SQLITE_
8f20: 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 6f 6e  NULLEQ is set on
8f30: 0a 2a 2a 20 4f 50 5f 4e 65 20 6f 72 20 4f 50 5f  .** OP_Ne or OP_
8f40: 45 71 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  Eq..*/.case OP_N
8f50: 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ull: {          
8f60: 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e   /* out2 */.  in
8f70: 74 20 63 6e 74 3b 0a 20 20 75 31 36 20 6e 75 6c  t cnt;.  u16 nul
8f80: 6c 46 6c 61 67 3b 0a 20 20 70 4f 75 74 20 3d 20  lFlag;.  pOut = 
8f90: 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
8fa0: 2c 20 70 4f 70 29 3b 0a 20 20 63 6e 74 20 3d 20  , pOp);.  cnt = 
8fb0: 70 4f 70 2d 3e 70 33 2d 70 4f 70 2d 3e 70 32 3b  pOp->p3-pOp->p2;
8fc0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
8fd0: 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
8fe0: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f  nCursor) );.  pO
8ff0: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c  ut->flags = null
9000: 46 6c 61 67 20 3d 20 70 4f 70 2d 3e 70 31 20 3f  Flag = pOp->p1 ?
9010: 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 43   (MEM_Null|MEM_C
9020: 6c 65 61 72 65 64 29 20 3a 20 4d 45 4d 5f 4e 75  leared) : MEM_Nu
9030: 6c 6c 3b 0a 20 20 77 68 69 6c 65 28 20 63 6e 74  ll;.  while( cnt
9040: 3e 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2b 2b  >0 ){.    pOut++
9050: 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f  ;.    memAboutTo
9060: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
9070: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
9080: 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
9090: 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  ;.    pOut->flag
90a0: 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20  s = nullFlag;.  
90b0: 20 20 63 6e 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62    cnt--;.  }.  b
90c0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
90d0: 64 65 3a 20 53 6f 66 74 4e 75 6c 6c 20 50 31 20  de: SoftNull P1 
90e0: 2a 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  * * * *.** Synop
90f0: 73 69 73 3a 20 20 72 5b 50 31 5d 3d 4e 55 4c 4c  sis:  r[P1]=NULL
9100: 0a 2a 2a 0a 2a 2a 20 53 65 74 20 72 65 67 69 73  .**.** Set regis
9110: 74 65 72 20 50 31 20 74 6f 20 68 61 76 65 20 74  ter P1 to have t
9120: 68 65 20 76 61 6c 75 65 20 4e 55 4c 4c 20 61 73  he value NULL as
9130: 20 73 65 65 6e 20 62 79 20 74 68 65 20 4f 50 5f   seen by the OP_
9140: 4d 61 6b 65 52 65 63 6f 72 64 0a 2a 2a 20 69 6e  MakeRecord.** in
9150: 73 74 72 75 63 74 69 6f 6e 2c 20 62 75 74 20 64  struction, but d
9160: 6f 20 6e 6f 74 20 66 72 65 65 20 61 6e 79 20 73  o not free any s
9170: 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d 65  tring or blob me
9180: 6d 6f 72 79 20 61 73 73 6f 63 69 61 74 65 64 20  mory associated 
9190: 77 69 74 68 0a 2a 2a 20 74 68 65 20 72 65 67 69  with.** the regi
91a0: 73 74 65 72 2c 20 73 6f 20 74 68 61 74 20 69 66  ster, so that if
91b0: 20 74 68 65 20 76 61 6c 75 65 20 77 61 73 20 61   the value was a
91c0: 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20   string or blob 
91d0: 74 68 61 74 20 77 61 73 0a 2a 2a 20 70 72 65 76  that was.** prev
91e0: 69 6f 75 73 6c 79 20 63 6f 70 69 65 64 20 75 73  iously copied us
91f0: 69 6e 67 20 4f 50 5f 53 43 6f 70 79 2c 20 74 68  ing OP_SCopy, th
9200: 65 20 63 6f 70 69 65 73 20 77 69 6c 6c 20 63 6f  e copies will co
9210: 6e 74 69 6e 75 65 20 74 6f 20 62 65 20 76 61 6c  ntinue to be val
9220: 69 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  id..*/.case OP_S
9230: 6f 66 74 4e 75 6c 6c 3a 20 7b 0a 20 20 61 73 73  oftNull: {.  ass
9240: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26  ert( pOp->p1>0 &
9250: 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e  & pOp->p1<=(p->n
9260: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
9270: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  );.  pOut = &aMe
9280: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
9290: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 28 70 4f 75  ut->flags = (pOu
92a0: 74 2d 3e 66 6c 61 67 73 7c 4d 45 4d 5f 4e 75 6c  t->flags|MEM_Nul
92b0: 6c 29 26 7e 4d 45 4d 5f 55 6e 64 65 66 69 6e 65  l)&~MEM_Undefine
92c0: 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  d;.  break;.}../
92d0: 2a 20 4f 70 63 6f 64 65 3a 20 42 6c 6f 62 20 50  * Opcode: Blob P
92e0: 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  1 P2 * P4 *.** S
92f0: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50  ynopsis: r[P2]=P
9300: 34 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a  4 (len=P1).**.**
9310: 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20   P4 points to a 
9320: 62 6c 6f 62 20 6f 66 20 64 61 74 61 20 50 31 20  blob of data P1 
9330: 62 79 74 65 73 20 6c 6f 6e 67 2e 20 20 53 74 6f  bytes long.  Sto
9340: 72 65 20 74 68 69 73 0a 2a 2a 20 62 6c 6f 62 20  re this.** blob 
9350: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
9360: 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62 3a  */.case OP_Blob:
9370: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
9380: 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 61    /* out2 */.  a
9390: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 20 3c  ssert( pOp->p1 <
93a0: 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e  = SQLITE_MAX_LEN
93b0: 47 54 48 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  GTH );.  pOut = 
93c0: 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
93d0: 2c 20 70 4f 70 29 3b 0a 20 20 73 71 6c 69 74 65  , pOp);.  sqlite
93e0: 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70  3VdbeMemSetStr(p
93f0: 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20  Out, pOp->p4.z, 
9400: 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29 3b 0a  pOp->p1, 0, 0);.
9410: 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e    pOut->enc = en
9420: 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45  coding;.  UPDATE
9430: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
9440: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
9450: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72 69  ./* Opcode: Vari
9460: 61 62 6c 65 20 50 31 20 50 32 20 2a 20 50 34 20  able P1 P2 * P4 
9470: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
9480: 5b 50 32 5d 3d 70 61 72 61 6d 65 74 65 72 28 50  [P2]=parameter(P
9490: 31 2c 50 34 29 0a 2a 2a 0a 2a 2a 20 54 72 61 6e  1,P4).**.** Tran
94a0: 73 66 65 72 20 74 68 65 20 76 61 6c 75 65 73 20  sfer the values 
94b0: 6f 66 20 62 6f 75 6e 64 20 70 61 72 61 6d 65 74  of bound paramet
94c0: 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73  er P1 into regis
94d0: 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20  ter P2.**.** If 
94e0: 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 69 73  the parameter is
94f0: 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20 69 74 73   named, then its
9500: 20 6e 61 6d 65 20 61 70 70 65 61 72 73 20 69 6e   name appears in
9510: 20 50 34 2e 0a 2a 2a 20 54 68 65 20 50 34 20 76   P4..** The P4 v
9520: 61 6c 75 65 20 69 73 20 75 73 65 64 20 62 79 20  alue is used by 
9530: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
9540: 61 6d 65 74 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a  ameter_name()..*
9550: 2f 0a 63 61 73 65 20 4f 50 5f 56 61 72 69 61 62  /.case OP_Variab
9560: 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  le: {           
9570: 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 4d 65   /* out2 */.  Me
9580: 6d 20 2a 70 56 61 72 3b 20 20 20 20 20 20 20 2f  m *pVar;       /
9590: 2a 20 56 61 6c 75 65 20 62 65 69 6e 67 20 74 72  * Value being tr
95a0: 61 6e 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20 20  ansferred */..  
95b0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
95c0: 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d  0 && pOp->p1<=p-
95d0: 3e 6e 56 61 72 20 29 3b 0a 20 20 61 73 73 65 72  >nVar );.  asser
95e0: 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20  t( pOp->p4.z==0 
95f0: 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 70 2d  || pOp->p4.z==p-
9600: 3e 61 7a 56 61 72 5b 70 4f 70 2d 3e 70 31 2d 31  >azVar[pOp->p1-1
9610: 5d 20 29 3b 0a 20 20 70 56 61 72 20 3d 20 26 70  ] );.  pVar = &p
9620: 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e 70 31 20 2d  ->aVar[pOp->p1 -
9630: 20 31 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69 74   1];.  if( sqlit
9640: 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28  e3VdbeMemTooBig(
9650: 70 56 61 72 29 20 29 7b 0a 20 20 20 20 67 6f 74  pVar) ){.    got
9660: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
9670: 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
9680: 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
9690: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
96a0: 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74  ShallowCopy(pOut
96b0: 2c 20 70 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74  , pVar, MEM_Stat
96c0: 69 63 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ic);.  UPDATE_MA
96d0: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
96e0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
96f0: 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31   Opcode: Move P1
9700: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
9710: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 32 40 50 33  nopsis:  r[P2@P3
9720: 5d 3d 72 5b 50 31 40 50 33 5d 0a 2a 2a 0a 2a 2a  ]=r[P1@P3].**.**
9730: 20 4d 6f 76 65 20 74 68 65 20 50 33 20 76 61 6c   Move the P3 val
9740: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
9750: 50 31 2e 2e 50 31 2b 50 33 2d 31 20 6f 76 65 72  P1..P1+P3-1 over
9760: 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65   into.** registe
9770: 72 73 20 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 20  rs P2..P2+P3-1. 
9780: 20 52 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50   Registers P1..P
9790: 31 2b 50 33 2d 31 20 61 72 65 0a 2a 2a 20 6c 65  1+P3-1 are.** le
97a0: 66 74 20 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c  ft holding a NUL
97b0: 4c 2e 20 20 49 74 20 69 73 20 61 6e 20 65 72 72  L.  It is an err
97c0: 6f 72 20 66 6f 72 20 72 65 67 69 73 74 65 72 20  or for register 
97d0: 72 61 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31  ranges.** P1..P1
97e0: 2b 50 33 2d 31 20 61 6e 64 20 50 32 2e 2e 50 32  +P3-1 and P2..P2
97f0: 2b 50 33 2d 31 20 74 6f 20 6f 76 65 72 6c 61 70  +P3-1 to overlap
9800: 2e 20 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f  .  It is an erro
9810: 72 0a 2a 2a 20 66 6f 72 20 50 33 20 74 6f 20 62  r.** for P3 to b
9820: 65 20 6c 65 73 73 20 74 68 61 6e 20 31 2e 0a 2a  e less than 1..*
9830: 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20  /.case OP_Move: 
9840: 7b 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20  {.  int n;      
9850: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
9860: 66 20 72 65 67 69 73 74 65 72 73 20 6c 65 66 74  f registers left
9870: 20 74 6f 20 63 6f 70 79 20 2a 2f 0a 20 20 69 6e   to copy */.  in
9880: 74 20 70 31 3b 20 20 20 20 20 20 20 20 20 20 2f  t p1;          /
9890: 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f  * Register to co
98a0: 70 79 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74  py from */.  int
98b0: 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 2f 2a   p2;          /*
98c0: 20 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70   Register to cop
98d0: 79 20 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70  y to */..  n = p
98e0: 4f 70 2d 3e 70 33 3b 0a 20 20 70 31 20 3d 20 70  Op->p3;.  p1 = p
98f0: 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70  Op->p1;.  p2 = p
9900: 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74  Op->p2;.  assert
9910: 28 20 6e 3e 30 20 26 26 20 70 31 3e 30 20 26 26  ( n>0 && p1>0 &&
9920: 20 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72   p2>0 );.  asser
9930: 74 28 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70  t( p1+n<=p2 || p
9940: 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49  2+n<=p1 );..  pI
9950: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a  n1 = &aMem[p1];.
9960: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
9970: 32 5d 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73  2];.  do{.    as
9980: 73 65 72 74 28 20 70 4f 75 74 3c 3d 26 61 4d 65  sert( pOut<=&aMe
9990: 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  m[(p->nMem-p->nC
99a0: 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61  ursor)] );.    a
99b0: 73 73 65 72 74 28 20 70 49 6e 31 3c 3d 26 61 4d  ssert( pIn1<=&aM
99c0: 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  em[(p->nMem-p->n
99d0: 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20  Cursor)] );.    
99e0: 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
99f0: 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20  id(pIn1) );.    
9a00: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
9a10: 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 73  (p, pOut);.    s
9a20: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76  qlite3VdbeMemMov
9a30: 65 28 70 4f 75 74 2c 20 70 49 6e 31 29 3b 0a 23  e(pOut, pIn1);.#
9a40: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
9a50: 55 47 0a 20 20 20 20 69 66 28 20 70 4f 75 74 2d  UG.    if( pOut-
9a60: 3e 70 53 63 6f 70 79 46 72 6f 6d 3e 3d 26 61 4d  >pScopyFrom>=&aM
9a70: 65 6d 5b 70 31 5d 20 26 26 20 70 4f 75 74 2d 3e  em[p1] && pOut->
9a80: 70 53 63 6f 70 79 46 72 6f 6d 3c 70 4f 75 74 20  pScopyFrom<pOut 
9a90: 29 7b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 70  ){.      pOut->p
9aa0: 53 63 6f 70 79 46 72 6f 6d 20 2b 3d 20 70 4f 70  ScopyFrom += pOp
9ab0: 2d 3e 70 32 20 2d 20 70 31 3b 0a 20 20 20 20 7d  ->p2 - p1;.    }
9ac0: 0a 23 65 6e 64 69 66 0a 20 20 20 20 44 65 65 70  .#endif.    Deep
9ad0: 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29  hemeralize(pOut)
9ae0: 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
9af0: 52 41 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29  RACE(p2++, pOut)
9b00: 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20  ;.    pIn1++;.  
9b10: 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d 77 68 69    pOut++;.  }whi
9b20: 6c 65 28 20 2d 2d 6e 20 29 3b 0a 20 20 62 72 65  le( --n );.  bre
9b30: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
9b40: 3a 20 43 6f 70 79 20 50 31 20 50 32 20 50 33 20  : Copy P1 P2 P3 
9b50: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
9b60: 20 72 5b 50 32 40 50 33 2b 31 5d 3d 72 5b 50 31   r[P2@P3+1]=r[P1
9b70: 40 50 33 2b 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b  @P3+1].**.** Mak
9b80: 65 20 61 20 63 6f 70 79 20 6f 66 20 72 65 67 69  e a copy of regi
9b90: 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 20  sters P1..P1+P3 
9ba0: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20 50  into registers P
9bb0: 32 2e 2e 50 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20  2..P2+P3..**.** 
9bc0: 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
9bd0: 20 6d 61 6b 65 73 20 61 20 64 65 65 70 20 63 6f   makes a deep co
9be0: 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e  py of the value.
9bf0: 20 20 41 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a    A duplicate.**
9c00: 20 69 73 20 6d 61 64 65 20 6f 66 20 61 6e 79 20   is made of any 
9c10: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63  string or blob c
9c20: 6f 6e 73 74 61 6e 74 2e 20 20 53 65 65 20 61 6c  onstant.  See al
9c30: 73 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a  so OP_SCopy..*/.
9c40: 63 61 73 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 0a  case OP_Copy: {.
9c50: 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20    int n;..  n = 
9c60: 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 49 6e 31 20  pOp->p3;.  pIn1 
9c70: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
9c80: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
9c90: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
9ca0: 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20  ert( pOut!=pIn1 
9cb0: 29 3b 0a 20 20 77 68 69 6c 65 28 20 31 20 29 7b  );.  while( 1 ){
9cc0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
9cd0: 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
9ce0: 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45  Out, pIn1, MEM_E
9cf0: 70 68 65 6d 29 3b 0a 20 20 20 20 44 65 65 70 68  phem);.    Deeph
9d00: 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b  emeralize(pOut);
9d10: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
9d20: 45 42 55 47 0a 20 20 20 20 70 4f 75 74 2d 3e 70  EBUG.    pOut->p
9d30: 53 63 6f 70 79 46 72 6f 6d 20 3d 20 30 3b 0a 23  ScopyFrom = 0;.#
9d40: 65 6e 64 69 66 0a 20 20 20 20 52 45 47 49 53 54  endif.    REGIST
9d50: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
9d60: 2b 70 4f 70 2d 3e 70 33 2d 6e 2c 20 70 4f 75 74  +pOp->p3-n, pOut
9d70: 29 3b 0a 20 20 20 20 69 66 28 20 28 6e 2d 2d 29  );.    if( (n--)
9d80: 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  ==0 ) break;.   
9d90: 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 70 49 6e   pOut++;.    pIn
9da0: 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  1++;.  }.  break
9db0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
9dc0: 53 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20  SCopy P1 P2 * * 
9dd0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
9de0: 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]=r[P1].**.**
9df0: 20 4d 61 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20   Make a shallow 
9e00: 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72  copy of register
9e10: 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65   P1 into registe
9e20: 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P2..**.** This
9e30: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b   instruction mak
9e40: 65 73 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70  es a shallow cop
9e50: 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20  y of the value. 
9e60: 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a   If the value.**
9e70: 20 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20   is a string or 
9e80: 62 6c 6f 62 2c 20 74 68 65 6e 20 74 68 65 20 63  blob, then the c
9e90: 6f 70 79 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f  opy is only a po
9ea0: 69 6e 74 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20  inter to the.** 
9eb0: 6f 72 69 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e  original and hen
9ec0: 63 65 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e  ce if the origin
9ed0: 61 6c 20 63 68 61 6e 67 65 73 20 73 6f 20 77 69  al changes so wi
9ee0: 6c 6c 20 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20  ll the copy..** 
9ef0: 57 6f 72 73 65 2c 20 69 66 20 74 68 65 20 6f 72  Worse, if the or
9f00: 69 67 69 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f  iginal is deallo
9f10: 63 61 74 65 64 2c 20 74 68 65 20 63 6f 70 79 20  cated, the copy 
9f20: 62 65 63 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e  becomes invalid.
9f30: 0a 2a 2a 20 54 68 75 73 20 74 68 65 20 70 72 6f  .** Thus the pro
9f40: 67 72 61 6d 20 6d 75 73 74 20 67 75 61 72 61 6e  gram must guaran
9f50: 74 65 65 20 74 68 61 74 20 74 68 65 20 6f 72 69  tee that the ori
9f60: 67 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63  ginal will not c
9f70: 68 61 6e 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20  hange.** during 
9f80: 74 68 65 20 6c 69 66 65 74 69 6d 65 20 6f 66 20  the lifetime of 
9f90: 74 68 65 20 63 6f 70 79 2e 20 20 55 73 65 20 4f  the copy.  Use O
9fa0: 50 5f 43 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61  P_Copy to make a
9fb0: 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70   complete.** cop
9fc0: 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43  y..*/.case OP_SC
9fd0: 6f 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20  opy: {          
9fe0: 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70    /* out2 */.  p
9ff0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
a000: 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p1];.  pOut = &
a010: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
a020: 20 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70   assert( pOut!=p
a030: 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  In1 );.  sqlite3
a040: 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
a050: 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d  py(pOut, pIn1, M
a060: 45 4d 5f 45 70 68 65 6d 29 3b 0a 23 69 66 64 65  EM_Ephem);.#ifde
a070: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
a080: 20 69 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70   if( pOut->pScop
a090: 79 46 72 6f 6d 3d 3d 30 20 29 20 70 4f 75 74 2d  yFrom==0 ) pOut-
a0a0: 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 70 49  >pScopyFrom = pI
a0b0: 6e 31 3b 0a 23 65 6e 64 69 66 0a 20 20 62 72 65  n1;.#endif.  bre
a0c0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
a0d0: 3a 20 49 6e 74 43 6f 70 79 20 50 31 20 50 32 20  : IntCopy P1 P2 
a0e0: 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
a0f0: 73 3a 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a  s: r[P2]=r[P1].*
a100: 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20 74 68  *.** Transfer th
a110: 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  e integer value 
a120: 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65 72  held in register
a130: 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65   P1 into registe
a140: 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P2..**.** This
a150: 20 69 73 20 61 6e 20 6f 70 74 69 6d 69 7a 65 64   is an optimized
a160: 20 76 65 72 73 69 6f 6e 20 6f 66 20 53 43 6f 70   version of SCop
a170: 79 20 74 68 61 74 20 77 6f 72 6b 73 20 6f 6e 6c  y that works onl
a180: 79 20 66 6f 72 20 69 6e 74 65 67 65 72 0a 2a 2a  y for integer.**
a190: 20 76 61 6c 75 65 73 2e 0a 2a 2f 0a 63 61 73 65   values..*/.case
a1a0: 20 4f 50 5f 49 6e 74 43 6f 70 79 3a 20 7b 20 20   OP_IntCopy: {  
a1b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
a1c0: 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
a1d0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
a1e0: 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66  assert( (pIn1->f
a1f0: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21  lags & MEM_Int)!
a200: 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26  =0 );.  pOut = &
a210: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
a220: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
a230: 65 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 70 49  etInt64(pOut, pI
a240: 6e 31 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61  n1->u.i);.  brea
a250: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
a260: 20 52 65 73 75 6c 74 52 6f 77 20 50 31 20 50 32   ResultRow P1 P2
a270: 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
a280: 69 73 3a 20 20 6f 75 74 70 75 74 3d 72 5b 50 31  is:  output=r[P1
a290: 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72  @P2].**.** The r
a2a0: 65 67 69 73 74 65 72 73 20 50 31 20 74 68 72 6f  egisters P1 thro
a2b0: 75 67 68 20 50 31 2b 50 32 2d 31 20 63 6f 6e 74  ugh P1+P2-1 cont
a2c0: 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  ain a single row
a2d0: 20 6f 66 0a 2a 2a 20 72 65 73 75 6c 74 73 2e 20   of.** results. 
a2e0: 54 68 69 73 20 6f 70 63 6f 64 65 20 63 61 75 73  This opcode caus
a2f0: 65 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73  es the sqlite3_s
a300: 74 65 70 28 29 20 63 61 6c 6c 20 74 6f 20 74 65  tep() call to te
a310: 72 6d 69 6e 61 74 65 0a 2a 2a 20 77 69 74 68 20  rminate.** with 
a320: 61 6e 20 53 51 4c 49 54 45 5f 52 4f 57 20 72 65  an SQLITE_ROW re
a330: 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 69 74  turn code and it
a340: 20 73 65 74 73 20 75 70 20 74 68 65 20 73 71 6c   sets up the sql
a350: 69 74 65 33 5f 73 74 6d 74 0a 2a 2a 20 73 74 72  ite3_stmt.** str
a360: 75 63 74 75 72 65 20 74 6f 20 70 72 6f 76 69 64  ucture to provid
a370: 65 20 61 63 63 65 73 73 20 74 6f 20 74 68 65 20  e access to the 
a380: 72 28 50 31 29 2e 2e 72 28 50 31 2b 50 32 2d 31  r(P1)..r(P1+P2-1
a390: 29 20 76 61 6c 75 65 73 20 61 73 0a 2a 2a 20 74  ) values as.** t
a3a0: 68 65 20 72 65 73 75 6c 74 20 72 6f 77 2e 0a 2a  he result row..*
a3b0: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 75 6c 74  /.case OP_Result
a3c0: 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d  Row: {.  Mem *pM
a3d0: 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 61  em;.  int i;.  a
a3e0: 73 73 65 72 74 28 20 70 2d 3e 6e 52 65 73 43 6f  ssert( p->nResCo
a3f0: 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29 3b  lumn==pOp->p2 );
a400: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
a410: 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p1>0 );.  assert
a420: 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70  ( pOp->p1+pOp->p
a430: 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  2<=(p->nMem-p->n
a440: 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 0a 23 69  Cursor)+1 );..#i
a450: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
a460: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
a470: 41 43 4b 0a 20 20 2f 2a 20 52 75 6e 20 74 68 65  ACK.  /* Run the
a480: 20 70 72 6f 67 72 65 73 73 20 63 6f 75 6e 74 65   progress counte
a490: 72 20 6a 75 73 74 20 62 65 66 6f 72 65 20 72 65  r just before re
a4a0: 74 75 72 6e 69 6e 67 2e 0a 20 20 2a 2f 0a 20 20  turning..  */.  
a4b0: 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73  if( db->xProgres
a4c0: 73 21 3d 30 0a 20 20 20 26 26 20 6e 56 6d 53 74  s!=0.   && nVmSt
a4d0: 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d  ep>=nProgressLim
a4e0: 69 74 0a 20 20 20 26 26 20 64 62 2d 3e 78 50 72  it.   && db->xPr
a4f0: 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67  ogress(db->pProg
a500: 72 65 73 73 41 72 67 29 21 3d 30 0a 20 20 29 7b  ressArg)!=0.  ){
a510: 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
a520: 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20  _INTERRUPT;.    
a530: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
a540: 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 23 65 6e  o_error;.  }.#en
a550: 64 69 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69  dif..  /* If thi
a560: 73 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20  s statement has 
a570: 76 69 6f 6c 61 74 65 64 20 69 6d 6d 65 64 69 61  violated immedia
a580: 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  te foreign key c
a590: 6f 6e 73 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20  onstraints, do. 
a5a0: 20 2a 2a 20 6e 6f 74 20 72 65 74 75 72 6e 20 74   ** not return t
a5b0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
a5c0: 73 20 6d 6f 64 69 66 69 65 64 2e 20 41 6e 64 20  s modified. And 
a5d0: 64 6f 20 6e 6f 74 20 52 45 4c 45 41 53 45 20 74  do not RELEASE t
a5e0: 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a  he statement.  *
a5f0: 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49  * transaction. I
a600: 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f  t needs to be ro
a610: 6c 6c 65 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20  lled back.  */. 
a620: 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d   if( SQLITE_OK!=
a630: 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62  (rc = sqlite3Vdb
a640: 65 43 68 65 63 6b 46 6b 28 70 2c 20 30 29 29 20  eCheckFk(p, 0)) 
a650: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64  ){.    assert( d
a660: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
a670: 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20  CountRows );.   
a680: 20 61 73 73 65 72 74 28 20 70 2d 3e 75 73 65 73   assert( p->uses
a690: 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20  StmtJournal );. 
a6a0: 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
a6b0: 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
a6c0: 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 53 51 4c  .  /* If the SQL
a6d0: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c  ITE_CountRows fl
a6e0: 61 67 20 69 73 20 73 65 74 20 69 6e 20 73 71 6c  ag is set in sql
a6f0: 69 74 65 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  ite3.flags mask,
a700: 20 74 68 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20   then .  ** DML 
a710: 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b  statements invok
a720: 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f  e this opcode to
a730: 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   return the numb
a740: 65 72 20 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a  er of rows .  **
a750: 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 74 68 65   modified to the
a760: 20 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74   user. This is t
a770: 68 65 20 6f 6e 6c 79 20 77 61 79 20 74 68 61 74  he only way that
a780: 20 61 20 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20   a VM that.  ** 
a790: 6f 70 65 6e 73 20 61 20 73 74 61 74 65 6d 65 6e  opens a statemen
a7a0: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61  t transaction ma
a7b0: 79 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70  y invoke this op
a7c0: 63 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  code..  **.  ** 
a7d0: 49 6e 20 63 61 73 65 20 74 68 69 73 20 69 73 20  In case this is 
a7e0: 73 75 63 68 20 61 20 73 74 61 74 65 6d 65 6e 74  such a statement
a7f0: 2c 20 63 6c 6f 73 65 20 61 6e 79 20 73 74 61 74  , close any stat
a800: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
a810: 6e 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79  n.  ** opened by
a820: 20 74 68 69 73 20 56 4d 20 62 65 66 6f 72 65 20   this VM before 
a830: 72 65 74 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f  returning contro
a840: 6c 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54  l to the user. T
a850: 68 69 73 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65  his is to.  ** e
a860: 6e 73 75 72 65 20 74 68 61 74 20 73 74 61 74 65  nsure that state
a870: 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ment-transaction
a880: 73 20 61 72 65 20 61 6c 77 61 79 73 20 6e 65 73  s are always nes
a890: 74 65 64 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70  ted, not overlap
a8a0: 70 69 6e 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68  ping..  ** If th
a8b0: 65 20 6f 70 65 6e 20 73 74 61 74 65 6d 65 6e 74  e open statement
a8c0: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
a8d0: 6e 6f 74 20 63 6c 6f 73 65 64 20 68 65 72 65 2c  not closed here,
a8e0: 20 74 68 65 6e 20 74 68 65 20 75 73 65 72 0a 20   then the user. 
a8f0: 20 2a 2a 20 6d 61 79 20 73 74 65 70 20 61 6e 6f   ** may step ano
a900: 74 68 65 72 20 56 4d 20 74 68 61 74 20 6f 70 65  ther VM that ope
a910: 6e 73 20 69 74 73 20 6f 77 6e 20 73 74 61 74 65  ns its own state
a920: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
a930: 2e 20 54 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20  . This.  ** may 
a940: 6c 65 61 64 20 74 6f 20 6f 76 65 72 6c 61 70 70  lead to overlapp
a950: 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 74 72  ing statement tr
a960: 61 6e 73 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a  ansactions..  **
a970: 0a 20 20 2a 2a 20 54 68 65 20 73 74 61 74 65 6d  .  ** The statem
a980: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
a990: 69 73 20 6e 65 76 65 72 20 61 20 74 6f 70 2d 6c  is never a top-l
a9a0: 65 76 65 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e  evel transaction
a9b0: 2e 20 20 48 65 6e 63 65 0a 20 20 2a 2a 20 74 68  .  Hence.  ** th
a9c0: 65 20 52 45 4c 45 41 53 45 20 63 61 6c 6c 20 62  e RELEASE call b
a9d0: 65 6c 6f 77 20 63 61 6e 20 6e 65 76 65 72 20 66  elow can never f
a9e0: 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65  ail..  */.  asse
a9f0: 72 74 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e  rt( p->iStatemen
aa00: 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67  t==0 || db->flag
aa10: 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  s&SQLITE_CountRo
aa20: 77 73 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  ws );.  rc = sql
aa30: 69 74 65 33 56 64 62 65 43 6c 6f 73 65 53 74 61  ite3VdbeCloseSta
aa40: 74 65 6d 65 6e 74 28 70 2c 20 53 41 56 45 50 4f  tement(p, SAVEPO
aa50: 49 4e 54 5f 52 45 4c 45 41 53 45 29 3b 0a 20 20  INT_RELEASE);.  
aa60: 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
aa70: 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20 2f 2a 20 49  TE_OK );..  /* I
aa80: 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 65 70  nvalidate all ep
aa90: 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 20 72  hemeral cursor r
aaa0: 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a 20 20 70  ow caches */.  p
aab0: 2d 3e 63 61 63 68 65 43 74 72 20 3d 20 28 70 2d  ->cacheCtr = (p-
aac0: 3e 63 61 63 68 65 43 74 72 20 2b 20 32 29 7c 31  >cacheCtr + 2)|1
aad0: 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  ;..  /* Make sur
aae0: 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  e the results of
aaf0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
ab00: 20 61 72 65 20 5c 30 30 30 20 74 65 72 6d 69 6e   are \000 termin
ab10: 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61  ated.  ** and ha
ab20: 76 65 20 61 6e 20 61 73 73 69 67 6e 65 64 20 74  ve an assigned t
ab30: 79 70 65 2e 20 20 54 68 65 20 72 65 73 75 6c 74  ype.  The result
ab40: 73 20 61 72 65 20 64 65 2d 65 70 68 65 6d 65 72  s are de-ephemer
ab50: 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61  alized as.  ** a
ab60: 20 73 69 64 65 20 65 66 66 65 63 74 2e 0a 20 20   side effect..  
ab70: 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70  */.  pMem = p->p
ab80: 52 65 73 75 6c 74 53 65 74 20 3d 20 26 61 4d 65  ResultSet = &aMe
ab90: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f  m[pOp->p1];.  fo
aba0: 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32  r(i=0; i<pOp->p2
abb0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  ; i++){.    asse
abc0: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
abd0: 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20  pMem[i]) );.    
abe0: 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 26  Deephemeralize(&
abf0: 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73  pMem[i]);.    as
ac00: 73 65 72 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66  sert( (pMem[i].f
ac10: 6c 61 67 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d  lags & MEM_Ephem
ac20: 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20  )==0.           
ac30: 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61   || (pMem[i].fla
ac40: 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
ac50: 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20  M_Blob))==0 );. 
ac60: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
ac70: 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28 26 70  mNulTerminate(&p
ac80: 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 52 45 47  Mem[i]);.    REG
ac90: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
aca0: 3e 70 31 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29  >p1+i, &pMem[i])
acb0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e  ;.  }.  if( db->
acc0: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67  mallocFailed ) g
acd0: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 2f  oto no_mem;..  /
ace0: 2a 20 52 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  * Return SQLITE_
acf0: 52 4f 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70 63  ROW.  */.  p->pc
ad00: 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61   = (int)(pOp - a
ad10: 4f 70 29 20 2b 20 31 3b 0a 20 20 72 63 20 3d 20  Op) + 1;.  rc = 
ad20: 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 67 6f  SQLITE_ROW;.  go
ad30: 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
ad40: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
ad50: 6e 63 61 74 20 50 31 20 50 32 20 50 33 20 2a 20  ncat P1 P2 P3 * 
ad60: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
ad70: 5b 50 33 5d 3d 72 5b 50 32 5d 2b 72 5b 50 31 5d  [P3]=r[P2]+r[P1]
ad80: 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 74  .**.** Add the t
ad90: 65 78 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ext in register 
ada0: 50 31 20 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20  P1 onto the end 
adb0: 6f 66 20 74 68 65 20 74 65 78 74 20 69 6e 0a 2a  of the text in.*
adc0: 2a 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  * register P2 an
add0: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
ade0: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
adf0: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
ae00: 74 68 65 20 50 31 20 6f 72 20 50 32 20 74 65 78  the P1 or P2 tex
ae10: 74 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20  t are NULL then 
ae20: 73 74 6f 72 65 20 4e 55 4c 4c 20 69 6e 20 50 33  store NULL in P3
ae30: 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d 20 50  ..**.**   P3 = P
ae40: 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74  2 || P1.**.** It
ae50: 20 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20   is illegal for 
ae60: 50 31 20 61 6e 64 20 50 33 20 74 6f 20 62 65 20  P1 and P3 to be 
ae70: 74 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65  the same registe
ae80: 72 2e 20 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a  r. Sometimes,.**
ae90: 20 69 66 20 50 33 20 69 73 20 74 68 65 20 73 61   if P3 is the sa
aea0: 6d 65 20 72 65 67 69 73 74 65 72 20 61 73 20 50  me register as P
aeb0: 32 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  2, the implement
aec0: 61 74 69 6f 6e 20 69 73 20 61 62 6c 65 0a 2a 2a  ation is able.**
aed0: 20 74 6f 20 61 76 6f 69 64 20 61 20 6d 65 6d 63   to avoid a memc
aee0: 70 79 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  py()..*/.case OP
aef0: 5f 43 6f 6e 63 61 74 3a 20 7b 20 20 20 20 20 20  _Concat: {      
af00: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
af10: 54 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e 31 2c 20  TK_CONCAT, in1, 
af20: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in2, out3 */.  i
af30: 36 34 20 6e 42 79 74 65 3b 0a 0a 20 20 70 49 6e  64 nByte;..  pIn
af40: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
af50: 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1];.  pIn2 = &aM
af60: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
af70: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
af80: 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p3];.  assert( 
af90: 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20  pIn1!=pOut );.  
afa0: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
afb0: 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20   | pIn2->flags) 
afc0: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
afd0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
afe0: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
aff0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
b000: 69 66 28 20 45 78 70 61 6e 64 42 6c 6f 62 28 70  if( ExpandBlob(p
b010: 49 6e 31 29 20 7c 7c 20 45 78 70 61 6e 64 42 6c  In1) || ExpandBl
b020: 6f 62 28 70 49 6e 32 29 20 29 20 67 6f 74 6f 20  ob(pIn2) ) goto 
b030: 6e 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72 69 6e 67  no_mem;.  String
b040: 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69  ify(pIn1, encodi
b050: 6e 67 29 3b 0a 20 20 53 74 72 69 6e 67 69 66 79  ng);.  Stringify
b060: 28 70 49 6e 32 2c 20 65 6e 63 6f 64 69 6e 67 29  (pIn2, encoding)
b070: 3b 0a 20 20 6e 42 79 74 65 20 3d 20 70 49 6e 31  ;.  nByte = pIn1
b080: 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20  ->n + pIn2->n;. 
b090: 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61   if( nByte>db->a
b0a0: 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
b0b0: 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
b0c0: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
b0d0: 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65    }.  if( sqlite
b0e0: 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75  3VdbeMemGrow(pOu
b0f0: 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c  t, (int)nByte+2,
b100: 20 70 4f 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a   pOut==pIn2) ){.
b110: 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
b120: 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70  .  }.  MemSetTyp
b130: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
b140: 53 74 72 29 3b 0a 20 20 69 66 28 20 70 4f 75 74  Str);.  if( pOut
b150: 21 3d 70 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65  !=pIn2 ){.    me
b160: 6d 63 70 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49  mcpy(pOut->z, pI
b170: 6e 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b  n2->z, pIn2->n);
b180: 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70  .  }.  memcpy(&p
b190: 4f 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c  Out->z[pIn2->n],
b1a0: 20 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e   pIn1->z, pIn1->
b1b0: 6e 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42  n);.  pOut->z[nB
b1c0: 79 74 65 5d 3d 30 3b 0a 20 20 70 4f 75 74 2d 3e  yte]=0;.  pOut->
b1d0: 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a  z[nByte+1] = 0;.
b1e0: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d    pOut->flags |=
b1f0: 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75   MEM_Term;.  pOu
b200: 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74  t->n = (int)nByt
b210: 65 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  e;.  pOut->enc =
b220: 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44   encoding;.  UPD
b230: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
b240: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
b250: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
b260: 64 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  dd P1 P2 P3 * *.
b270: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
b280: 50 33 5d 3d 72 5b 50 31 5d 2b 72 5b 50 32 5d 0a  P3]=r[P1]+r[P2].
b290: 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 76 61  **.** Add the va
b2a0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
b2b0: 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  P1 to the value 
b2c0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
b2d0: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
b2e0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
b2f0: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
b300: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
b310: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
b320: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
b330: 6f 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31  ode: Multiply P1
b340: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
b350: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
b360: 5b 50 31 5d 2a 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]*r[P2].**.**
b370: 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68 65  .** Multiply the
b380: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
b390: 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c  er P1 by the val
b3a0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
b3b0: 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74  2.** and store t
b3c0: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
b3d0: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
b3e0: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
b3f0: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
b400: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
b410: 4f 70 63 6f 64 65 3a 20 53 75 62 74 72 61 63 74  Opcode: Subtract
b420: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
b430: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33   Synopsis:  r[P3
b440: 5d 3d 72 5b 50 32 5d 2d 72 5b 50 31 5d 0a 2a 2a  ]=r[P2]-r[P1].**
b450: 0a 2a 2a 20 53 75 62 74 72 61 63 74 20 74 68 65  .** Subtract the
b460: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
b470: 65 72 20 50 31 20 66 72 6f 6d 20 74 68 65 20 76  er P1 from the v
b480: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
b490: 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65   P2.** and store
b4a0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
b4b0: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
b4c0: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
b4d0: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
b4e0: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
b4f0: 2a 20 4f 70 63 6f 64 65 3a 20 44 69 76 69 64 65  * Opcode: Divide
b500: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
b510: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33   Synopsis:  r[P3
b520: 5d 3d 72 5b 50 32 5d 2f 72 5b 50 31 5d 0a 2a 2a  ]=r[P2]/r[P1].**
b530: 0a 2a 2a 20 44 69 76 69 64 65 20 74 68 65 20 76  .** Divide the v
b540: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
b550: 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65   P1 by the value
b560: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
b570: 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  ** and store the
b580: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
b590: 74 65 72 20 50 33 20 28 50 33 3d 50 32 2f 50 31  ter P3 (P3=P2/P1
b5a0: 29 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ). If the value 
b5b0: 69 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  in .** register 
b5c0: 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e  P1 is zero, then
b5d0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
b5e0: 55 4c 4c 2e 20 49 66 20 65 69 74 68 65 72 20 69  ULL. If either i
b5f0: 6e 70 75 74 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c  nput is .** NULL
b600: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
b610: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
b620: 64 65 3a 20 52 65 6d 61 69 6e 64 65 72 20 50 31  de: Remainder P1
b630: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
b640: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
b650: 5b 50 32 5d 25 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]%r[P1].**.**
b660: 20 43 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d   Compute the rem
b670: 61 69 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74  ainder after int
b680: 65 67 65 72 20 72 65 67 69 73 74 65 72 20 50 32  eger register P2
b690: 20 69 73 20 64 69 76 69 64 65 64 20 62 79 20 0a   is divided by .
b6a0: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 61  ** register P1 a
b6b0: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
b6c0: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
b6d0: 50 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76  P3. .** If the v
b6e0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
b6f0: 20 50 31 20 69 73 20 7a 65 72 6f 20 74 68 65 20   P1 is zero the 
b700: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
b710: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70 65  ** If either ope
b720: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68  rand is NULL, th
b730: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b740: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64  ..*/.case OP_Add
b750: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
b760: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b770: 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32  K_PLUS, in1, in2
b780: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
b790: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 20  P_Subtract:     
b7a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
b7b0: 20 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e   as TK_MINUS, in
b7c0: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
b7d0: 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79  case OP_Multiply
b7e0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  :              /
b7f0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41  * same as TK_STA
b800: 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  R, in1, in2, out
b810: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76  3 */.case OP_Div
b820: 69 64 65 3a 20 20 20 20 20 20 20 20 20 20 20 20  ide:            
b830: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b840: 4b 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e  K_SLASH, in1, in
b850: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
b860: 4f 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20  OP_Remainder: { 
b870: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
b880: 65 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31  e as TK_REM, in1
b890: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
b8a0: 20 63 68 61 72 20 62 49 6e 74 69 6e 74 3b 20 20   char bIntint;  
b8b0: 20 2f 2a 20 53 74 61 72 74 65 64 20 6f 75 74 20   /* Started out 
b8c0: 61 73 20 74 77 6f 20 69 6e 74 65 67 65 72 20 6f  as two integer o
b8d0: 70 65 72 61 6e 64 73 20 2a 2f 0a 20 20 75 31 36  perands */.  u16
b8e0: 20 66 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a 20   flags;      /* 
b8f0: 43 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66  Combined MEM_* f
b900: 6c 61 67 73 20 66 72 6f 6d 20 62 6f 74 68 20 69  lags from both i
b910: 6e 70 75 74 73 20 2a 2f 0a 20 20 75 31 36 20 74  nputs */.  u16 t
b920: 79 70 65 31 3b 20 20 20 20 20 20 2f 2a 20 4e 75  ype1;      /* Nu
b930: 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20 6c 65  meric type of le
b940: 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ft operand */.  
b950: 75 31 36 20 74 79 70 65 32 3b 20 20 20 20 20 20  u16 type2;      
b960: 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79 70 65 20  /* Numeric type 
b970: 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64  of right operand
b980: 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 20 20 20   */.  i64 iA;   
b990: 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72        /* Integer
b9a0: 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f   value of left o
b9b0: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20  perand */.  i64 
b9c0: 69 42 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49  iB;         /* I
b9d0: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20  nteger value of 
b9e0: 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f  right operand */
b9f0: 0a 20 20 64 6f 75 62 6c 65 20 72 41 3b 20 20 20  .  double rA;   
ba00: 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65     /* Real value
ba10: 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64   of left operand
ba20: 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 42 3b   */.  double rB;
ba30: 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61        /* Real va
ba40: 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65  lue of right ope
ba50: 72 61 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e 31 20  rand */..  pIn1 
ba60: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
ba70: 3b 0a 20 20 74 79 70 65 31 20 3d 20 6e 75 6d 65  ;.  type1 = nume
ba80: 72 69 63 54 79 70 65 28 70 49 6e 31 29 3b 0a 20  ricType(pIn1);. 
ba90: 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
baa0: 70 2d 3e 70 32 5d 3b 0a 20 20 74 79 70 65 32 20  p->p2];.  type2 
bab0: 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28 70 49  = numericType(pI
bac0: 6e 32 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  n2);.  pOut = &a
bad0: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
bae0: 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c  flags = pIn1->fl
baf0: 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67  ags | pIn2->flag
bb00: 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73 20  s;.  if( (flags 
bb10: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29  & MEM_Null)!=0 )
bb20: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
bb30: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
bb40: 0a 20 20 69 66 28 20 28 74 79 70 65 31 20 26 20  .  if( (type1 & 
bb50: 74 79 70 65 32 20 26 20 4d 45 4d 5f 49 6e 74 29  type2 & MEM_Int)
bb60: 21 3d 30 20 29 7b 0a 20 20 20 20 69 41 20 3d 20  !=0 ){.    iA = 
bb70: 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20 20 69  pIn1->u.i;.    i
bb80: 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  B = pIn2->u.i;. 
bb90: 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 31 3b 0a     bIntint = 1;.
bba0: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
bbb0: 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20  >opcode ){.     
bbc0: 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20   case OP_Add:   
bbd0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 41      if( sqlite3A
bbe0: 64 64 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20  ddInt64(&iB,iA) 
bbf0: 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20  ) goto fp_math; 
bc00: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
bc10: 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20  se OP_Subtract: 
bc20: 20 69 66 28 20 73 71 6c 69 74 65 33 53 75 62 49   if( sqlite3SubI
bc30: 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67  nt64(&iB,iA) ) g
bc40: 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72  oto fp_math;  br
bc50: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
bc60: 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 69 66  OP_Multiply:  if
bc70: 28 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36  ( sqlite3MulInt6
bc80: 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f  4(&iB,iA) ) goto
bc90: 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b   fp_math;  break
bca0: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
bcb0: 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20  Divide: {.      
bcc0: 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f    if( iA==0 ) go
bcd0: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
bce0: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
bcf0: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31        if( iA==-1
bd00: 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45 53 54   && iB==SMALLEST
bd10: 5f 49 4e 54 36 34 20 29 20 67 6f 74 6f 20 66 70  _INT64 ) goto fp
bd20: 5f 6d 61 74 68 3b 0a 20 20 20 20 20 20 20 20 69  _math;.        i
bd30: 42 20 2f 3d 20 69 41 3b 0a 20 20 20 20 20 20 20  B /= iA;.       
bd40: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
bd50: 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b        default: {
bd60: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
bd70: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
bd80: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
bd90: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
bda0: 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31   iA==-1 ) iA = 1
bdb0: 3b 0a 20 20 20 20 20 20 20 20 69 42 20 25 3d 20  ;.        iB %= 
bdc0: 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  iA;.        brea
bdd0: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
bde0: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
bdf0: 20 69 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   iB;.    MemSetT
be00: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
be10: 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 7b  M_Int);.  }else{
be20: 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 30  .    bIntint = 0
be30: 3b 0a 66 70 5f 6d 61 74 68 3a 0a 20 20 20 20 72  ;.fp_math:.    r
be40: 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  A = sqlite3VdbeR
be50: 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a  ealValue(pIn1);.
be60: 20 20 20 20 72 42 20 3d 20 73 71 6c 69 74 65 33      rB = sqlite3
be70: 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49  VdbeRealValue(pI
be80: 6e 32 29 3b 0a 20 20 20 20 73 77 69 74 63 68 28  n2);.    switch(
be90: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a   pOp->opcode ){.
bea0: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64        case OP_Ad
beb0: 64 3a 20 20 20 20 20 20 20 20 20 72 42 20 2b 3d  d:         rB +=
bec0: 20 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b   rA;       break
bed0: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
bee0: 53 75 62 74 72 61 63 74 3a 20 20 20 20 72 42 20  Subtract:    rB 
bef0: 2d 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65  -= rA;       bre
bf00: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
bf10: 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 72  P_Multiply:    r
bf20: 42 20 2a 3d 20 72 41 3b 20 20 20 20 20 20 20 62  B *= rA;       b
bf30: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
bf40: 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20   OP_Divide: {.  
bf50: 20 20 20 20 20 20 2f 2a 20 28 64 6f 75 62 6c 65        /* (double
bf60: 29 30 20 49 6e 20 63 61 73 65 20 6f 66 20 53 51  )0 In case of SQ
bf70: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
bf80: 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20  NG_POINT... */. 
bf90: 20 20 20 20 20 20 20 69 66 28 20 72 41 3d 3d 28         if( rA==(
bfa0: 64 6f 75 62 6c 65 29 30 20 29 20 67 6f 74 6f 20  double)0 ) goto 
bfb0: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
bfc0: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
bfd0: 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20 20 20     rB /= rA;.   
bfe0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
bff0: 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c    }.      defaul
c000: 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 41 20  t: {.        iA 
c010: 3d 20 28 69 36 34 29 72 41 3b 0a 20 20 20 20 20  = (i64)rA;.     
c020: 20 20 20 69 42 20 3d 20 28 69 36 34 29 72 42 3b     iB = (i64)rB;
c030: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
c040: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
c050: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
c060: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
c070: 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31   iA==-1 ) iA = 1
c080: 3b 0a 20 20 20 20 20 20 20 20 72 42 20 3d 20 28  ;.        rB = (
c090: 64 6f 75 62 6c 65 29 28 69 42 20 25 20 69 41 29  double)(iB % iA)
c0a0: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
c0b0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23  .      }.    }.#
c0c0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
c0d0: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
c0e0: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
c0f0: 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   rB;.    MemSetT
c100: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
c110: 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20  M_Int);.#else.  
c120: 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 73 4e    if( sqlite3IsN
c130: 61 4e 28 72 42 29 20 29 7b 0a 20 20 20 20 20 20  aN(rB) ){.      
c140: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
c150: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
c160: 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e      }.    pOut->
c170: 75 2e 72 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65  u.r = rB;.    Me
c180: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
c190: 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20  t, MEM_Real);.  
c1a0: 20 20 69 66 28 20 28 28 74 79 70 65 31 7c 74 79    if( ((type1|ty
c1b0: 70 65 32 29 26 4d 45 4d 5f 52 65 61 6c 29 3d 3d  pe2)&MEM_Real)==
c1c0: 30 20 26 26 20 21 62 49 6e 74 69 6e 74 20 29 7b  0 && !bIntint ){
c1d0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
c1e0: 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74  beIntegerAffinit
c1f0: 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23  y(pOut);.    }.#
c200: 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61  endif.  }.  brea
c210: 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f 72  k;..arithmetic_r
c220: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20  esult_is_null:. 
c230: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
c240: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
c250: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
c260: 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20 50 31 20  ode: CollSeq P1 
c270: 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20  * * P4.**.** P4 
c280: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
c290: 61 20 43 6f 6c 6c 53 65 71 20 73 74 72 75 63 74  a CollSeq struct
c2a0: 2e 20 49 66 20 74 68 65 20 6e 65 78 74 20 63 61  . If the next ca
c2b0: 6c 6c 20 74 6f 20 61 20 75 73 65 72 20 66 75 6e  ll to a user fun
c2c0: 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72  ction.** or aggr
c2d0: 65 67 61 74 65 20 63 61 6c 6c 73 20 73 71 6c 69  egate calls sqli
c2e0: 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65  te3GetFuncCollSe
c2f0: 71 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74  q(), this collat
c300: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77 69 6c  ion sequence wil
c310: 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e 65 64  l.** be returned
c320: 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62  . This is used b
c330: 79 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d  y the built-in m
c340: 69 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e 64 20  in(), max() and 
c350: 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63  nullif().** func
c360: 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  tions..**.** If 
c370: 50 31 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P1 is not zero, 
c380: 74 68 65 6e 20 69 74 20 69 73 20 61 20 72 65 67  then it is a reg
c390: 69 73 74 65 72 20 74 68 61 74 20 61 20 73 75 62  ister that a sub
c3a0: 73 65 71 75 65 6e 74 20 6d 69 6e 28 29 20 6f 72  sequent min() or
c3b0: 0a 2a 2a 20 6d 61 78 28 29 20 61 67 67 72 65 67  .** max() aggreg
c3c0: 61 74 65 20 77 69 6c 6c 20 73 65 74 20 74 6f 20  ate will set to 
c3d0: 31 20 69 66 20 74 68 65 20 63 75 72 72 65 6e 74  1 if the current
c3e0: 20 72 6f 77 20 69 73 20 6e 6f 74 20 74 68 65 20   row is not the 
c3f0: 6d 69 6e 69 6d 75 6d 20 6f 72 0a 2a 2a 20 6d 61  minimum or.** ma
c400: 78 69 6d 75 6d 2e 20 20 54 68 65 20 50 31 20 72  ximum.  The P1 r
c410: 65 67 69 73 74 65 72 20 69 73 20 69 6e 69 74 69  egister is initi
c420: 61 6c 69 7a 65 64 20 74 6f 20 30 20 62 79 20 74  alized to 0 by t
c430: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
c440: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72  .**.** The inter
c450: 66 61 63 65 20 75 73 65 64 20 62 79 20 74 68 65  face used by the
c460: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
c470: 6f 66 20 74 68 65 20 61 66 6f 72 65 6d 65 6e 74  of the aforement
c480: 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a  ioned functions.
c490: 2a 2a 20 74 6f 20 72 65 74 72 69 65 76 65 20 74  ** to retrieve t
c4a0: 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  he collation seq
c4b0: 75 65 6e 63 65 20 73 65 74 20 62 79 20 74 68 69  uence set by thi
c4c0: 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f 74 20  s opcode is not 
c4d0: 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62  available.** pub
c4e0: 6c 69 63 6c 79 2e 20 20 4f 6e 6c 79 20 62 75 69  licly.  Only bui
c4f0: 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73 20  lt-in functions 
c500: 68 61 76 65 20 61 63 63 65 73 73 20 74 6f 20 74  have access to t
c510: 68 69 73 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a  his feature..*/.
c520: 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65 71 3a  case OP_CollSeq:
c530: 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
c540: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c  ->p4type==P4_COL
c550: 4c 53 45 51 20 29 3b 0a 20 20 69 66 28 20 70 4f  LSEQ );.  if( pO
c560: 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c  p->p1 ){.    sql
c570: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
c580: 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t64(&aMem[pOp->p
c590: 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72  1], 0);.  }.  br
c5a0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
c5b0: 65 3a 20 46 75 6e 63 74 69 6f 6e 30 20 50 31 20  e: Function0 P1 
c5c0: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
c5d0: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 66  ynopsis: r[P3]=f
c5e0: 75 6e 63 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a  unc(r[P2@P5]).**
c5f0: 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73 65  .** Invoke a use
c600: 72 20 66 75 6e 63 74 69 6f 6e 20 28 50 34 20 69  r function (P4 i
c610: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
c620: 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 20   FuncDef object 
c630: 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 73 20  that.** defines 
c640: 74 68 65 20 66 75 6e 63 74 69 6f 6e 29 20 77 69  the function) wi
c650: 74 68 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20  th P5 arguments 
c660: 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
c670: 74 65 72 20 50 32 20 61 6e 64 0a 2a 2a 20 73 75  ter P2 and.** su
c680: 63 63 65 73 73 6f 72 73 2e 20 20 54 68 65 20 72  ccessors.  The r
c690: 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e  esult of the fun
c6a0: 63 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20  ction is stored 
c6b0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
c6c0: 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 6d  ** Register P3 m
c6d0: 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65 20 6f  ust not be one o
c6e0: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69  f the function i
c6f0: 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  nputs..**.** P1 
c700: 69 73 20 61 20 33 32 2d 62 69 74 20 62 69 74 6d  is a 32-bit bitm
c710: 61 73 6b 20 69 6e 64 69 63 61 74 69 6e 67 20 77  ask indicating w
c720: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 65 61  hether or not ea
c730: 63 68 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  ch argument to t
c740: 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20  he .** function 
c750: 77 61 73 20 64 65 74 65 72 6d 69 6e 65 64 20 74  was determined t
c760: 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74 20 61 74  o be constant at
c770: 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e 20 49   compile time. I
c780: 66 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61  f the first.** a
c790: 72 67 75 6d 65 6e 74 20 77 61 73 20 63 6f 6e 73  rgument was cons
c7a0: 74 61 6e 74 20 74 68 65 6e 20 62 69 74 20 30 20  tant then bit 0 
c7b0: 6f 66 20 50 31 20 69 73 20 73 65 74 2e 20 54 68  of P1 is set. Th
c7c0: 69 73 20 69 73 20 75 73 65 64 20 74 6f 20 64 65  is is used to de
c7d0: 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68  termine.** wheth
c7e0: 65 72 20 6d 65 74 61 20 64 61 74 61 20 61 73 73  er meta data ass
c7f0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 75  ociated with a u
c800: 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 61 72 67  ser function arg
c810: 75 6d 65 6e 74 20 75 73 69 6e 67 20 74 68 65 0a  ument using the.
c820: 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65 74 5f 61  ** sqlite3_set_a
c830: 75 78 64 61 74 61 28 29 20 41 50 49 20 6d 61 79  uxdata() API may
c840: 20 62 65 20 73 61 66 65 6c 79 20 72 65 74 61 69   be safely retai
c850: 6e 65 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65  ned until the ne
c860: 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e  xt.** invocation
c870: 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65 2e   of this opcode.
c880: 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
c890: 20 46 75 6e 63 74 69 6f 6e 2c 20 41 67 67 53 74   Function, AggSt
c8a0: 65 70 2c 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a  ep, AggFinal.*/.
c8b0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 75 6e 63 74  /* Opcode: Funct
c8c0: 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50 34 20  ion P1 P2 P3 P4 
c8d0: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
c8e0: 72 5b 50 33 5d 3d 66 75 6e 63 28 72 5b 50 32 40  r[P3]=func(r[P2@
c8f0: 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b  P5]).**.** Invok
c900: 65 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f  e a user functio
c910: 6e 20 28 50 34 20 69 73 20 61 20 70 6f 69 6e 74  n (P4 is a point
c920: 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33  er to an sqlite3
c930: 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74 20  _context object 
c940: 74 68 61 74 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73  that.** contains
c950: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
c960: 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65  e function to be
c970: 20 72 75 6e 29 20 77 69 74 68 20 50 35 20 61 72   run) with P5 ar
c980: 67 75 6d 65 6e 74 73 20 74 61 6b 65 6e 0a 2a 2a  guments taken.**
c990: 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
c9a0: 32 20 61 6e 64 20 73 75 63 63 65 73 73 6f 72 73  2 and successors
c9b0: 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66  .  The result of
c9c0: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 73   the function is
c9d0: 20 73 74 6f 72 65 64 0a 2a 2a 20 69 6e 20 72 65   stored.** in re
c9e0: 67 69 73 74 65 72 20 50 33 2e 20 20 52 65 67 69  gister P3.  Regi
c9f0: 73 74 65 72 20 50 33 20 6d 75 73 74 20 6e 6f 74  ster P3 must not
ca00: 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 66   be one of the f
ca10: 75 6e 63 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a  unction inputs..
ca20: 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 33 32  **.** P1 is a 32
ca30: 2d 62 69 74 20 62 69 74 6d 61 73 6b 20 69 6e 64  -bit bitmask ind
ca40: 69 63 61 74 69 6e 67 20 77 68 65 74 68 65 72 20  icating whether 
ca50: 6f 72 20 6e 6f 74 20 65 61 63 68 20 61 72 67 75  or not each argu
ca60: 6d 65 6e 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20  ment to the .** 
ca70: 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 64 65 74  function was det
ca80: 65 72 6d 69 6e 65 64 20 74 6f 20 62 65 20 63 6f  ermined to be co
ca90: 6e 73 74 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c  nstant at compil
caa0: 65 20 74 69 6d 65 2e 20 49 66 20 74 68 65 20 66  e time. If the f
cab0: 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  irst.** argument
cac0: 20 77 61 73 20 63 6f 6e 73 74 61 6e 74 20 74 68   was constant th
cad0: 65 6e 20 62 69 74 20 30 20 6f 66 20 50 31 20 69  en bit 0 of P1 i
cae0: 73 20 73 65 74 2e 20 54 68 69 73 20 69 73 20 75  s set. This is u
caf0: 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  sed to determine
cb00: 0a 2a 2a 20 77 68 65 74 68 65 72 20 6d 65 74 61  .** whether meta
cb10: 20 64 61 74 61 20 61 73 73 6f 63 69 61 74 65 64   data associated
cb20: 20 77 69 74 68 20 61 20 75 73 65 72 20 66 75 6e   with a user fun
cb30: 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75  ction argument u
cb40: 73 69 6e 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69  sing the.** sqli
cb50: 74 65 33 5f 73 65 74 5f 61 75 78 64 61 74 61 28  te3_set_auxdata(
cb60: 29 20 41 50 49 20 6d 61 79 20 62 65 20 73 61 66  ) API may be saf
cb70: 65 6c 79 20 72 65 74 61 69 6e 65 64 20 75 6e 74  ely retained unt
cb80: 69 6c 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69  il the next.** i
cb90: 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 69  nvocation of thi
cba0: 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  s opcode..**.** 
cbb0: 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  SQL functions ar
cbc0: 65 20 69 6e 69 74 69 61 6c 6c 79 20 63 6f 64 65  e initially code
cbd0: 64 20 61 73 20 4f 50 5f 46 75 6e 63 74 69 6f 6e  d as OP_Function
cbe0: 30 20 77 69 74 68 20 50 34 20 70 6f 69 6e 74 69  0 with P4 pointi
cbf0: 6e 67 0a 2a 2a 20 74 6f 20 61 20 46 75 6e 63 44  ng.** to a FuncD
cc00: 65 66 20 6f 62 6a 65 63 74 2e 20 20 42 75 74 20  ef object.  But 
cc10: 6f 6e 20 66 69 72 73 74 20 65 76 61 6c 75 61 74  on first evaluat
cc20: 69 6f 6e 2c 20 74 68 65 20 50 34 20 6f 70 65 72  ion, the P4 oper
cc30: 61 6e 64 20 69 73 0a 2a 2a 20 61 75 74 6f 6d 61  and is.** automa
cc40: 74 69 63 61 6c 6c 79 20 63 6f 6e 76 65 72 74 65  tically converte
cc50: 64 20 69 6e 74 6f 20 61 6e 20 73 71 6c 69 74 65  d into an sqlite
cc60: 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74  3_context object
cc70: 20 61 6e 64 20 74 68 65 20 6f 70 65 72 61 74 69   and the operati
cc80: 6f 6e 0a 2a 2a 20 63 68 61 6e 67 65 64 20 74 6f  on.** changed to
cc90: 20 74 68 69 73 20 4f 50 5f 46 75 6e 63 74 69 6f   this OP_Functio
cca0: 6e 20 6f 70 63 6f 64 65 2e 20 20 49 6e 20 74 68  n opcode.  In th
ccb0: 69 73 20 77 61 79 2c 20 74 68 65 20 69 6e 69 74  is way, the init
ccc0: 69 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 0a 2a 2a  ialization of.**
ccd0: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63 6f 6e   the sqlite3_con
cce0: 74 65 78 74 20 6f 62 6a 65 63 74 20 6f 63 63 75  text object occu
ccf0: 72 73 20 6f 6e 6c 79 20 6f 6e 63 65 2c 20 72 61  rs only once, ra
cd00: 74 68 65 72 20 74 68 61 6e 20 6f 6e 63 65 20 66  ther than once f
cd10: 6f 72 20 65 61 63 68 0a 2a 2a 20 65 76 61 6c 75  or each.** evalu
cd20: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 66 75 6e  ation of the fun
cd30: 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ction..**.** See
cd40: 20 61 6c 73 6f 3a 20 46 75 6e 63 74 69 6f 6e 30   also: Function0
cd50: 2c 20 41 67 67 53 74 65 70 2c 20 41 67 67 46 69  , AggStep, AggFi
cd60: 6e 61 6c 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  nal.*/.case OP_F
cd70: 75 6e 63 74 69 6f 6e 30 3a 20 7b 0a 20 20 69 6e  unction0: {.  in
cd80: 74 20 6e 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63  t n;.  sqlite3_c
cd90: 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a 0a 20  ontext *pCtx;.. 
cda0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
cdb0: 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46  type==P4_FUNCDEF
cdc0: 20 29 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70   );.  n = pOp->p
cdd0: 35 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  5;.  assert( pOp
cde0: 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
cdf0: 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  3<=(p->nMem-p->n
ce00: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73  Cursor) );.  ass
ce10: 65 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f  ert( n==0 || (pO
ce20: 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p2>0 && pOp->
ce30: 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  p2+n<=(p->nMem-p
ce40: 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 29 20 29 3b  ->nCursor)+1) );
ce50: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
ce60: 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f  p3<pOp->p2 || pO
ce70: 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e  p->p3>=pOp->p2+n
ce80: 20 29 3b 0a 20 20 70 43 74 78 20 3d 20 73 71 6c   );.  pCtx = sql
ce90: 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e  ite3DbMallocRawN
cea0: 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28 2a 70 43  N(db, sizeof(*pC
ceb0: 74 78 29 20 2b 20 28 6e 2d 31 29 2a 73 69 7a 65  tx) + (n-1)*size
cec0: 6f 66 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  of(sqlite3_value
ced0: 2a 29 29 3b 0a 20 20 69 66 28 20 70 43 74 78 3d  *));.  if( pCtx=
cee0: 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
cef0: 3b 0a 20 20 70 43 74 78 2d 3e 70 4f 75 74 20 3d  ;.  pCtx->pOut =
cf00: 20 30 3b 0a 20 20 70 43 74 78 2d 3e 70 46 75 6e   0;.  pCtx->pFun
cf10: 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e  c = pOp->p4.pFun
cf20: 63 3b 0a 20 20 70 43 74 78 2d 3e 69 4f 70 20 3d  c;.  pCtx->iOp =
cf30: 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
cf40: 29 3b 0a 20 20 70 43 74 78 2d 3e 70 56 64 62 65  );.  pCtx->pVdbe
cf50: 20 3d 20 70 3b 0a 20 20 70 43 74 78 2d 3e 61 72   = p;.  pCtx->ar
cf60: 67 63 20 3d 20 6e 3b 0a 20 20 70 4f 70 2d 3e 70  gc = n;.  pOp->p
cf70: 34 74 79 70 65 20 3d 20 50 34 5f 46 55 4e 43 43  4type = P4_FUNCC
cf80: 54 58 3b 0a 20 20 70 4f 70 2d 3e 70 34 2e 70 43  TX;.  pOp->p4.pC
cf90: 74 78 20 3d 20 70 43 74 78 3b 0a 20 20 70 4f 70  tx = pCtx;.  pOp
cfa0: 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 46 75  ->opcode = OP_Fu
cfb0: 6e 63 74 69 6f 6e 3b 0a 20 20 2f 2a 20 46 61 6c  nction;.  /* Fal
cfc0: 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
cfd0: 50 5f 46 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 0a  P_Function */.}.
cfe0: 63 61 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e  case OP_Function
cff0: 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73  : {.  int i;.  s
d000: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
d010: 70 43 74 78 3b 0a 0a 20 20 61 73 73 65 72 74 28  pCtx;..  assert(
d020: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
d030: 5f 46 55 4e 43 43 54 58 20 29 3b 0a 20 20 70 43  _FUNCCTX );.  pC
d040: 74 78 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 43 74  tx = pOp->p4.pCt
d050: 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73  x;..  /* If this
d060: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e 73   function is ins
d070: 69 64 65 20 6f 66 20 61 20 74 72 69 67 67 65 72  ide of a trigger
d080: 2c 20 74 68 65 20 72 65 67 69 73 74 65 72 20 61  , the register a
d090: 72 72 61 79 20 69 6e 20 61 4d 65 6d 5b 5d 0a 20  rray in aMem[]. 
d0a0: 20 2a 2a 20 6d 69 67 68 74 20 63 68 61 6e 67 65   ** might change
d0b0: 20 66 72 6f 6d 20 6f 6e 65 20 65 76 61 6c 75 61   from one evalua
d0c0: 74 69 6f 6e 20 74 6f 20 74 68 65 20 6e 65 78 74  tion to the next
d0d0: 2e 20 20 54 68 65 20 6e 65 78 74 20 62 6c 6f 63  .  The next bloc
d0e0: 6b 20 6f 66 20 63 6f 64 65 0a 20 20 2a 2a 20 63  k of code.  ** c
d0f0: 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20  hecks to see if 
d100: 74 68 65 20 72 65 67 69 73 74 65 72 20 61 72 72  the register arr
d110: 61 79 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20  ay has changed, 
d120: 61 6e 64 20 69 66 20 73 6f 20 69 74 0a 20 20 2a  and if so it.  *
d130: 2a 20 72 65 69 6e 69 74 69 61 6c 69 7a 65 73 20  * reinitializes 
d140: 74 68 65 20 72 65 6c 61 76 61 6e 74 20 70 61 72  the relavant par
d150: 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ts of the sqlite
d160: 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74  3_context object
d170: 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d   */.  pOut = &aM
d180: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
d190: 66 28 20 70 43 74 78 2d 3e 70 4f 75 74 20 21 3d  f( pCtx->pOut !=
d1a0: 20 70 4f 75 74 20 29 7b 0a 20 20 20 20 70 43 74   pOut ){.    pCt
d1b0: 78 2d 3e 70 4f 75 74 20 3d 20 70 4f 75 74 3b 0a  x->pOut = pOut;.
d1c0: 20 20 20 20 66 6f 72 28 69 3d 70 43 74 78 2d 3e      for(i=pCtx->
d1d0: 61 72 67 63 2d 31 3b 20 69 3e 3d 30 3b 20 69 2d  argc-1; i>=0; i-
d1e0: 2d 29 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d  -) pCtx->argv[i]
d1f0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
d200: 2b 69 5d 3b 0a 20 20 7d 0a 0a 20 20 6d 65 6d 41  +i];.  }..  memA
d210: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
d220: 70 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 23 69 66  pCtx->pOut);.#if
d230: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
d240: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 43  .  for(i=0; i<pC
d250: 74 78 2d 3e 61 72 67 63 3b 20 69 2b 2b 29 7b 0a  tx->argc; i++){.
d260: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
d270: 73 56 61 6c 69 64 28 70 43 74 78 2d 3e 61 72 67  sValid(pCtx->arg
d280: 76 5b 69 5d 29 20 29 3b 0a 20 20 20 20 52 45 47  v[i]) );.    REG
d290: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
d2a0: 3e 70 32 2b 69 2c 20 70 43 74 78 2d 3e 61 72 67  >p2+i, pCtx->arg
d2b0: 76 5b 69 5d 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  v[i]);.  }.#endi
d2c0: 66 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  f.  MemSetTypeFl
d2d0: 61 67 28 70 43 74 78 2d 3e 70 4f 75 74 2c 20 4d  ag(pCtx->pOut, M
d2e0: 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 70 43 74 78  EM_Null);.  pCtx
d2f0: 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78 20 3d 20  ->fErrorOrAux = 
d300: 30 3b 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77  0;.  db->lastRow
d310: 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a  id = lastRowid;.
d320: 20 20 28 2a 70 43 74 78 2d 3e 70 46 75 6e 63 2d    (*pCtx->pFunc-
d330: 3e 78 53 46 75 6e 63 29 28 70 43 74 78 2c 20 70  >xSFunc)(pCtx, p
d340: 43 74 78 2d 3e 61 72 67 63 2c 20 70 43 74 78 2d  Ctx->argc, pCtx-
d350: 3e 61 72 67 76 29 3b 2f 2a 20 49 4d 50 3a 20 52  >argv);/* IMP: R
d360: 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a  -24505-23230 */.
d370: 20 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62    lastRowid = db
d380: 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 20 20 2f 2a  ->lastRowid;  /*
d390: 20 52 65 6d 65 6d 62 65 72 20 72 6f 77 69 64 20   Remember rowid 
d3a0: 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20  changes made by 
d3b0: 78 53 46 75 6e 63 20 2a 2f 0a 0a 20 20 2f 2a 20  xSFunc */..  /* 
d3c0: 49 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  If the function 
d3d0: 72 65 74 75 72 6e 65 64 20 61 6e 20 65 72 72 6f  returned an erro
d3e0: 72 2c 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65  r, throw an exce
d3f0: 70 74 69 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 70  ption */.  if( p
d400: 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78  Ctx->fErrorOrAux
d410: 20 29 7b 0a 20 20 20 20 69 66 28 20 70 43 74 78   ){.    if( pCtx
d420: 2d 3e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20  ->isError ){.   
d430: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
d440: 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71 6c  ror(p, "%s", sql
d450: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
d460: 70 43 74 78 2d 3e 70 4f 75 74 29 29 3b 0a 20 20  pCtx->pOut));.  
d470: 20 20 20 20 72 63 20 3d 20 70 43 74 78 2d 3e 69      rc = pCtx->i
d480: 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  sError;.    }.  
d490: 20 20 73 71 6c 69 74 65 33 56 64 62 65 44 65 6c    sqlite3VdbeDel
d4a0: 65 74 65 41 75 78 44 61 74 61 28 64 62 2c 20 26  eteAuxData(db, &
d4b0: 70 2d 3e 70 41 75 78 44 61 74 61 2c 20 70 43 74  p->pAuxData, pCt
d4c0: 78 2d 3e 69 4f 70 2c 20 70 4f 70 2d 3e 70 31 29  x->iOp, pOp->p1)
d4d0: 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67  ;.    if( rc ) g
d4e0: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
d4f0: 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f  _error;.  }..  /
d500: 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c  * Copy the resul
d510: 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  t of the functio
d520: 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  n into register 
d530: 50 33 20 2a 2f 0a 20 20 69 66 28 20 70 4f 75 74  P3 */.  if( pOut
d540: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
d550: 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a  tr|MEM_Blob) ){.
d560: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
d570: 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 43  hangeEncoding(pC
d580: 74 78 2d 3e 70 4f 75 74 2c 20 65 6e 63 6f 64 69  tx->pOut, encodi
d590: 6e 67 29 3b 0a 20 20 20 20 69 66 28 20 73 71 6c  ng);.    if( sql
d5a0: 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
d5b0: 67 28 70 43 74 78 2d 3e 70 4f 75 74 29 20 29 20  g(pCtx->pOut) ) 
d5c0: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
d5d0: 7d 0a 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  }..  REGISTER_TR
d5e0: 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 43 74  ACE(pOp->p3, pCt
d5f0: 78 2d 3e 70 4f 75 74 29 3b 0a 20 20 55 50 44 41  x->pOut);.  UPDA
d600: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
d610: 70 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 20 20 62  pCtx->pOut);.  b
d620: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
d630: 64 65 3a 20 42 69 74 41 6e 64 20 50 31 20 50 32  de: BitAnd P1 P2
d640: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
d650: 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31  sis:  r[P3]=r[P1
d660: 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61  ]&r[P2].**.** Ta
d670: 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20  ke the bit-wise 
d680: 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65  AND of the value
d690: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
d6a0: 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73   and P2 and.** s
d6b0: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
d6c0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
d6d0: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
d6e0: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
d6f0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
d700: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  */./* Opcode: Bi
d710: 74 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a  tOr P1 P2 P3 * *
d720: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
d730: 5b 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b 50 32 5d  [P3]=r[P1]|r[P2]
d740: 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
d750: 62 69 74 2d 77 69 73 65 20 4f 52 20 6f 66 20 74  bit-wise OR of t
d760: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
d770: 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20  ister P1 and P2 
d780: 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  and.** store the
d790: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
d7a0: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
d7b0: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
d7c0: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
d7d0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
d7e0: 63 6f 64 65 3a 20 53 68 69 66 74 4c 65 66 74 20  code: ShiftLeft 
d7f0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
d800: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
d810: 3d 72 5b 50 32 5d 3c 3c 72 5b 50 31 5d 0a 2a 2a  =r[P2]<<r[P1].**
d820: 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e  .** Shift the in
d830: 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72  teger value in r
d840: 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74 68  egister P2 to th
d850: 65 20 6c 65 66 74 20 62 79 20 74 68 65 0a 2a 2a  e left by the.**
d860: 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20   number of bits 
d870: 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65  specified by the
d880: 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69   integer in regi
d890: 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72  ster P1..** Stor
d8a0: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
d8b0: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
d8c0: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
d8d0: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
d8e0: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
d8f0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74  /* Opcode: Shift
d900: 52 69 67 68 74 20 50 31 20 50 32 20 50 33 20 2a  Right P1 P2 P3 *
d910: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
d920: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3e 3e 72 5b   r[P3]=r[P2]>>r[
d930: 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20  P1].**.** Shift 
d940: 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  the integer valu
d950: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
d960: 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 62 79   to the right by
d970: 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f   the.** number o
d980: 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65 64  f bits specified
d990: 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72 20   by the integer 
d9a0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
d9b0: 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65 73  ** Store the res
d9c0: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
d9d0: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
d9e0: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
d9f0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
da00: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42  LL..*/.case OP_B
da10: 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20  itAnd:          
da20: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
da30: 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31  s TK_BITAND, in1
da40: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
da50: 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20  ase OP_BitOr:   
da60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
da70: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54  * same as TK_BIT
da80: 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  OR, in1, in2, ou
da90: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68  t3 */.case OP_Sh
daa0: 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20 20 20  iftLeft:        
dab0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
dac0: 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c   TK_LSHIFT, in1,
dad0: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
dae0: 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74  se OP_ShiftRight
daf0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
db00: 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53 48 49   same as TK_RSHI
db10: 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  FT, in1, in2, ou
db20: 74 33 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 0a  t3 */.  i64 iA;.
db30: 20 20 75 36 34 20 75 41 3b 0a 20 20 69 36 34 20    u64 uA;.  i64 
db40: 69 42 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a 20 20  iB;.  u8 op;..  
db50: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
db60: 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20  ->p1];.  pIn2 = 
db70: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
db80: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
db90: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28  Op->p3];.  if( (
dba0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
dbb0: 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d  n2->flags) & MEM
dbc0: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c  _Null ){.    sql
dbd0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
dbe0: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72  ll(pOut);.    br
dbf0: 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 41 20 3d 20  eak;.  }.  iA = 
dc00: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
dc10: 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 69 42 20  lue(pIn2);.  iB 
dc20: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
dc30: 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 6f  Value(pIn1);.  o
dc40: 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b  p = pOp->opcode;
dc50: 0a 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69  .  if( op==OP_Bi
dc60: 74 41 6e 64 20 29 7b 0a 20 20 20 20 69 41 20 26  tAnd ){.    iA &
dc70: 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66  = iB;.  }else if
dc80: 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72 20 29  ( op==OP_BitOr )
dc90: 7b 0a 20 20 20 20 69 41 20 7c 3d 20 69 42 3b 0a  {.    iA |= iB;.
dca0: 20 20 7d 65 6c 73 65 20 69 66 28 20 69 42 21 3d    }else if( iB!=
dcb0: 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
dcc0: 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67   op==OP_ShiftRig
dcd0: 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69  ht || op==OP_Shi
dce0: 66 74 4c 65 66 74 20 29 3b 0a 0a 20 20 20 20 2f  ftLeft );..    /
dcf0: 2a 20 49 66 20 73 68 69 66 74 69 6e 67 20 62 79  * If shifting by
dd00: 20 61 20 6e 65 67 61 74 69 76 65 20 61 6d 6f 75   a negative amou
dd10: 6e 74 2c 20 73 68 69 66 74 20 69 6e 20 74 68 65  nt, shift in the
dd20: 20 6f 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e   other direction
dd30: 20 2a 2f 0a 20 20 20 20 69 66 28 20 69 42 3c 30   */.    if( iB<0
dd40: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
dd50: 28 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3d  ( OP_ShiftRight=
dd60: 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 2b 31 20  =OP_ShiftLeft+1 
dd70: 29 3b 0a 20 20 20 20 20 20 6f 70 20 3d 20 32 2a  );.      op = 2*
dd80: 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 2b 20 31  OP_ShiftLeft + 1
dd90: 20 2d 20 6f 70 3b 0a 20 20 20 20 20 20 69 42 20   - op;.      iB 
dda0: 3d 20 69 42 3e 28 2d 36 34 29 20 3f 20 2d 69 42  = iB>(-64) ? -iB
ddb0: 20 3a 20 36 34 3b 0a 20 20 20 20 7d 0a 0a 20 20   : 64;.    }..  
ddc0: 20 20 69 66 28 20 69 42 3e 3d 36 34 20 29 7b 0a    if( iB>=64 ){.
ddd0: 20 20 20 20 20 20 69 41 20 3d 20 28 69 41 3e 3d        iA = (iA>=
dde0: 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66  0 || op==OP_Shif
ddf0: 74 4c 65 66 74 29 20 3f 20 30 20 3a 20 2d 31 3b  tLeft) ? 0 : -1;
de00: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
de10: 20 20 6d 65 6d 63 70 79 28 26 75 41 2c 20 26 69    memcpy(&uA, &i
de20: 41 2c 20 73 69 7a 65 6f 66 28 75 41 29 29 3b 0a  A, sizeof(uA));.
de30: 20 20 20 20 20 20 69 66 28 20 6f 70 3d 3d 4f 50        if( op==OP
de40: 5f 53 68 69 66 74 4c 65 66 74 20 29 7b 0a 20 20  _ShiftLeft ){.  
de50: 20 20 20 20 20 20 75 41 20 3c 3c 3d 20 69 42 3b        uA <<= iB;
de60: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
de70: 20 20 20 20 20 20 75 41 20 3e 3e 3d 20 69 42 3b        uA >>= iB;
de80: 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 69 67 6e  .        /* Sign
de90: 2d 65 78 74 65 6e 64 20 6f 6e 20 61 20 72 69 67  -extend on a rig
dea0: 68 74 20 73 68 69 66 74 20 6f 66 20 61 20 6e 65  ht shift of a ne
deb0: 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20 2a 2f  gative number */
dec0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3c  .        if( iA<
ded0: 30 20 29 20 75 41 20 7c 3d 20 28 28 28 28 75 36  0 ) uA |= ((((u6
dee0: 34 29 30 78 66 66 66 66 66 66 66 66 29 3c 3c 33  4)0xffffffff)<<3
def0: 32 29 7c 30 78 66 66 66 66 66 66 66 66 29 20 3c  2)|0xffffffff) <
df00: 3c 20 28 36 34 2d 69 42 29 3b 0a 20 20 20 20 20  < (64-iB);.     
df10: 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28   }.      memcpy(
df20: 26 69 41 2c 20 26 75 41 2c 20 73 69 7a 65 6f 66  &iA, &uA, sizeof
df30: 28 69 41 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  (iA));.    }.  }
df40: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69  .  pOut->u.i = i
df50: 41 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  A;.  MemSetTypeF
df60: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
df70: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
df80: 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d  /* Opcode: AddIm
df90: 6d 20 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  m  P1 P2 * * *.*
dfa0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
dfb0: 31 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a 2a 20 0a  1]=r[P1]+P2.** .
dfc0: 2a 2a 20 41 64 64 20 74 68 65 20 63 6f 6e 73 74  ** Add the const
dfd0: 61 6e 74 20 50 32 20 74 6f 20 74 68 65 20 76 61  ant P2 to the va
dfe0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
dff0: 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c  P1..** The resul
e000: 74 20 69 73 20 61 6c 77 61 79 73 20 61 6e 20 69  t is always an i
e010: 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f  nteger..**.** To
e020: 20 66 6f 72 63 65 20 61 6e 79 20 72 65 67 69 73   force any regis
e030: 74 65 72 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  ter to be an int
e040: 65 67 65 72 2c 20 6a 75 73 74 20 61 64 64 20 30  eger, just add 0
e050: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64  ..*/.case OP_Add
e060: 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Imm: {          
e070: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49    /* in1 */.  pI
e080: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
e090: 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p1];.  memAboutT
e0a0: 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29  oChange(p, pIn1)
e0b0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
e0c0: 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
e0d0: 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20  1);.  pIn1->u.i 
e0e0: 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72  += pOp->p2;.  br
e0f0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
e100: 65 3a 20 4d 75 73 74 42 65 49 6e 74 20 50 31 20  e: MustBeInt P1 
e110: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20  P2 * * *.** .** 
e120: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
e130: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
e140: 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e  o be an integer.
e150: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
e160: 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f 74 20 61  * in P1 is not a
e170: 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20 63 61  n integer and ca
e180: 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65  nnot be converte
e190: 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65  d into an intege
e1a0: 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20 64 61 74  r.** without dat
e1b0: 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d  a loss, then jum
e1c0: 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
e1d0: 20 50 32 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30   P2, or if P2==0
e1e0: 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20 53 51 4c  .** raise an SQL
e1f0: 49 54 45 5f 4d 49 53 4d 41 54 43 48 20 65 78 63  ITE_MISMATCH exc
e200: 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  eption..*/.case 
e210: 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20  OP_MustBeInt: { 
e220: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
e230: 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
e240: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
e250: 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  1];.  if( (pIn1-
e260: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
e270: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70 70 6c  )==0 ){.    appl
e280: 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20  yAffinity(pIn1, 
e290: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
e2a0: 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  IC, encoding);. 
e2b0: 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
e2c0: 65 6e 28 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26  en((pIn1->flags&
e2d0: 4d 45 4d 5f 49 6e 74 29 3d 3d 30 2c 20 32 29 3b  MEM_Int)==0, 2);
e2e0: 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  .    if( (pIn1->
e2f0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
e300: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ==0 ){.      if(
e310: 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20   pOp->p2==0 ){. 
e320: 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
e330: 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20  TE_MISMATCH;.   
e340: 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
e350: 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
e360: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
e370: 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
e380: 70 32 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  p2;.      }.    
e390: 7d 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79  }.  }.  MemSetTy
e3a0: 70 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d  peFlag(pIn1, MEM
e3b0: 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  _Int);.  break;.
e3c0: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
e3d0: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
e3e0: 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  POINT./* Opcode:
e3f0: 20 52 65 61 6c 41 66 66 69 6e 69 74 79 20 50 31   RealAffinity P1
e400: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49   * * * *.**.** I
e410: 66 20 72 65 67 69 73 74 65 72 20 50 31 20 68 6f  f register P1 ho
e420: 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 63  lds an integer c
e430: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 72  onvert it to a r
e440: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a  eal value..**.**
e450: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
e460: 75 73 65 64 20 77 68 65 6e 20 65 78 74 72 61 63  used when extrac
e470: 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ting information
e480: 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74   from a column t
e490: 68 61 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20  hat.** has REAL 
e4a0: 61 66 66 69 6e 69 74 79 2e 20 20 53 75 63 68 20  affinity.  Such 
e4b0: 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61  column values ma
e4c0: 79 20 73 74 69 6c 6c 20 62 65 20 73 74 6f 72 65  y still be store
e4d0: 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73  d as.** integers
e4e0: 2c 20 66 6f 72 20 73 70 61 63 65 20 65 66 66 69  , for space effi
e4f0: 63 69 65 6e 63 79 2c 20 62 75 74 20 61 66 74 65  ciency, but afte
e500: 72 20 65 78 74 72 61 63 74 69 6f 6e 20 77 65 20  r extraction we 
e510: 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20  want them.** to 
e520: 68 61 76 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c  have only a real
e530: 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20   value..*/.case 
e540: 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69 74 79 3a  OP_RealAffinity:
e550: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
e560: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
e570: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
e580: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p1];.  if( pIn
e590: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
e5a0: 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  nt ){.    sqlite
e5b0: 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28  3VdbeMemRealify(
e5c0: 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65  pIn1);.  }.  bre
e5d0: 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
e5e0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
e5f0: 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65  T_CAST./* Opcode
e600: 3a 20 43 61 73 74 20 50 31 20 50 32 20 2a 20 2a  : Cast P1 P2 * *
e610: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
e620: 61 66 66 69 6e 69 74 79 28 72 5b 50 31 5d 29 0a  affinity(r[P1]).
e630: 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20  **.** Force the 
e640: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
e650: 72 20 50 31 20 74 6f 20 62 65 20 74 68 65 20 74  r P1 to be the t
e660: 79 70 65 20 64 65 66 69 6e 65 64 20 62 79 20 50  ype defined by P
e670: 32 2e 0a 2a 2a 20 0a 2a 2a 20 3c 75 6c 3e 0a 2a  2..** .** <ul>.*
e680: 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 39 37 22  * <li value="97"
e690: 3e 20 54 45 58 54 0a 2a 2a 20 3c 6c 69 20 76 61  > TEXT.** <li va
e6a0: 6c 75 65 3d 22 39 38 22 3e 20 42 4c 4f 42 0a 2a  lue="98"> BLOB.*
e6b0: 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 39 39 22  * <li value="99"
e6c0: 3e 20 4e 55 4d 45 52 49 43 0a 2a 2a 20 3c 6c 69  > NUMERIC.** <li
e6d0: 20 76 61 6c 75 65 3d 22 31 30 30 22 3e 20 49 4e   value="100"> IN
e6e0: 54 45 47 45 52 0a 2a 2a 20 3c 6c 69 20 76 61 6c  TEGER.** <li val
e6f0: 75 65 3d 22 31 30 31 22 3e 20 52 45 41 4c 0a 2a  ue="101"> REAL.*
e700: 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 41 20  * </ul>.**.** A 
e710: 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f  NULL value is no
e720: 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69  t changed by thi
e730: 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72  s routine.  It r
e740: 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  emains NULL..*/.
e750: 63 61 73 65 20 4f 50 5f 43 61 73 74 3a 20 7b 20  case OP_Cast: { 
e760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e770: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73   /* in1 */.  ass
e780: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 53 51  ert( pOp->p2>=SQ
e790: 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 26 26  LITE_AFF_BLOB &&
e7a0: 20 70 4f 70 2d 3e 70 32 3c 3d 53 51 4c 49 54 45   pOp->p2<=SQLITE
e7b0: 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20 74  _AFF_REAL );.  t
e7c0: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32  estcase( pOp->p2
e7d0: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  ==SQLITE_AFF_TEX
e7e0: 54 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  T );.  testcase(
e7f0: 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
e800: 5f 41 46 46 5f 42 4c 4f 42 20 29 3b 0a 20 20 74  _AFF_BLOB );.  t
e810: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32  estcase( pOp->p2
e820: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  ==SQLITE_AFF_NUM
e830: 45 52 49 43 20 29 3b 0a 20 20 74 65 73 74 63 61  ERIC );.  testca
e840: 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c  se( pOp->p2==SQL
e850: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20  ITE_AFF_INTEGER 
e860: 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
e870: 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41  Op->p2==SQLITE_A
e880: 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20 70 49 6e  FF_REAL );.  pIn
e890: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
e8a0: 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  1];.  memAboutTo
e8b0: 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b  Change(p, pIn1);
e8c0: 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c  .  rc = ExpandBl
e8d0: 6f 62 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69  ob(pIn1);.  sqli
e8e0: 74 65 33 56 64 62 65 4d 65 6d 43 61 73 74 28 70  te3VdbeMemCast(p
e8f0: 49 6e 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 65 6e  In1, pOp->p2, en
e900: 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54  coding);.  UPDAT
e910: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
e920: 49 6e 31 29 3b 0a 20 20 69 66 28 20 72 63 20 29  In1);.  if( rc )
e930: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
e940: 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
e950: 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
e960: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20  QLITE_OMIT_CAST 
e970: 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  */../* Opcode: L
e980: 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
e990: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
e9a0: 20 72 5b 50 31 5d 3c 72 5b 50 33 5d 20 67 6f 74   r[P1]<r[P3] got
e9b0: 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61  o P2.**.** Compa
e9c0: 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  re the values in
e9d0: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
e9e0: 20 50 33 2e 20 20 49 66 20 72 65 67 28 50 33 29   P3.  If reg(P3)
e9f0: 3c 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a  <reg(P1) then.**
ea00: 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73   jump to address
ea10: 20 50 32 2e 20 20 0a 2a 2a 0a 2a 2a 20 49 66 20   P2.  .**.** If 
ea20: 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  the SQLITE_JUMPI
ea30: 46 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50 35 20  FNULL bit of P5 
ea40: 69 73 20 73 65 74 20 61 6e 64 20 65 69 74 68 65  is set and eithe
ea50: 72 20 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a 20  r reg(P1) or.** 
ea60: 72 65 67 28 50 33 29 20 69 73 20 4e 55 4c 4c 20  reg(P3) is NULL 
ea70: 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
ea80: 6d 70 2e 20 20 49 66 20 74 68 65 20 53 51 4c 49  mp.  If the SQLI
ea90: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a  TE_JUMPIFNULL .*
eaa0: 2a 20 62 69 74 20 69 73 20 63 6c 65 61 72 20 74  * bit is clear t
eab0: 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
eac0: 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   if either opera
ead0: 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  nd is NULL..**.*
eae0: 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46  * The SQLITE_AFF
eaf0: 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66  _MASK portion of
eb00: 20 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20 61   P5 must be an a
eb10: 66 66 69 6e 69 74 79 20 63 68 61 72 61 63 74 65  ffinity characte
eb20: 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  r -.** SQLITE_AF
eb30: 46 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f 41  F_TEXT, SQLITE_A
eb40: 46 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64 20  FF_INTEGER, and 
eb50: 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74 74  so forth. An att
eb60: 65 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a  empt is made .**
eb70: 20 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68 20   to coerce both 
eb80: 69 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e 67  inputs according
eb90: 20 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69 74   to this affinit
eba0: 79 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20  y before the.** 
ebb0: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d 61  comparison is ma
ebc0: 64 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49 54  de. If the SQLIT
ebd0: 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30 78  E_AFF_MASK is 0x
ebe0: 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69 63  00, then numeric
ebf0: 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73 20  .** affinity is 
ec00: 75 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74 20  used. Note that 
ec10: 74 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f 6e  the affinity con
ec20: 76 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74 6f  versions are sto
ec30: 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f  red.** back into
ec40: 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73   the input regis
ec50: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 20  ters P1 and P3. 
ec60: 20 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20   So this opcode 
ec70: 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65 72  can cause.** per
ec80: 73 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73 20  sistent changes 
ec90: 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 31 20  to registers P1 
eca0: 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e  and P3..**.** On
ecb0: 63 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f  ce any conversio
ecc0: 6e 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70 6c  ns have taken pl
ecd0: 61 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65 72  ace, and neither
ece0: 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20   value is NULL, 
ecf0: 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 61  .** the values a
ed00: 72 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66 20  re compared. If 
ed10: 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 20  both values are 
ed20: 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d  blobs then memcm
ed30: 70 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20 74  p() is.** used t
ed40: 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o determine the 
ed50: 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63  results of the c
ed60: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 62  omparison.  If b
ed70: 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72  oth values.** ar
ed80: 65 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68 65  e text, then the
ed90: 20 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f 6c   appropriate col
eda0: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
edb0: 73 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20  specified in.** 
edc0: 50 34 20 69 73 20 20 75 73 65 64 20 74 6f 20 64  P4 is  used to d
edd0: 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  o the comparison
ede0: 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  .  If P4 is not 
edf0: 73 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a 2a  specified then.*
ee00: 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75 73  * memcmp() is us
ee10: 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65  ed to compare te
ee20: 78 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20 62  xt string.  If b
ee30: 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a 2a  oth values are.*
ee40: 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e 20  * numeric, then 
ee50: 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61 72  a numeric compar
ee60: 69 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49 66  ison is used. If
ee70: 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73 0a   the two values.
ee80: 2a 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65 72  ** are of differ
ee90: 65 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e 20  ent types, then 
eea0: 6e 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e 73  numbers are cons
eeb0: 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e  idered less than
eec0: 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64 20  .** strings and 
eed0: 73 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e 73  strings are cons
eee0: 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e  idered less than
eef0: 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66   blobs..**.** If
ef00: 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f 52   the SQLITE_STOR
ef10: 45 50 32 20 62 69 74 20 6f 66 20 50 35 20 69 73  EP2 bit of P5 is
ef20: 20 73 65 74 2c 20 74 68 65 6e 20 64 6f 20 6e 6f   set, then do no
ef30: 74 20 6a 75 6d 70 2e 20 20 49 6e 73 74 65 61 64  t jump.  Instead
ef40: 2c 0a 2a 2a 20 73 74 6f 72 65 20 61 20 62 6f 6f  ,.** store a boo
ef50: 6c 65 61 6e 20 72 65 73 75 6c 74 20 28 65 69 74  lean result (eit
ef60: 68 65 72 20 30 2c 20 6f 72 20 31 2c 20 6f 72 20  her 0, or 1, or 
ef70: 4e 55 4c 4c 29 20 69 6e 20 72 65 67 69 73 74 65  NULL) in registe
ef80: 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  r P2..**.** If t
ef90: 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  he SQLITE_NULLEQ
efa0: 20 62 69 74 20 69 73 20 73 65 74 20 69 6e 20 50   bit is set in P
efb0: 35 2c 20 74 68 65 6e 20 4e 55 4c 4c 20 76 61 6c  5, then NULL val
efc0: 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ues are consider
efd0: 65 64 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 20 6f  ed.** equal to o
efe0: 6e 65 20 61 6e 6f 74 68 65 72 2c 20 70 72 6f 76  ne another, prov
eff0: 69 64 65 64 20 74 68 61 74 20 74 68 65 79 20 64  ided that they d
f000: 6f 20 6e 6f 74 20 68 61 76 65 20 74 68 65 69 72  o not have their
f010: 20 4d 45 4d 5f 43 6c 65 61 72 65 64 0a 2a 2a 20   MEM_Cleared.** 
f020: 62 69 74 20 73 65 74 2e 0a 2a 2f 0a 2f 2a 20 4f  bit set..*/./* O
f030: 70 63 6f 64 65 3a 20 4e 65 20 50 31 20 50 32 20  pcode: Ne P1 P2 
f040: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
f050: 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d  psis: if r[P1]!=
f060: 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a  r[P3] goto P2.**
f070: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
f080: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
f090: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
f0a0: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
f0b0: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f  aken if.** the o
f0c0: 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73  perands in regis
f0d0: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61  ters P1 and P3 a
f0e0: 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53  re not equal.  S
f0f0: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
f100: 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e   for.** addition
f110: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
f120: 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f  **.** If SQLITE_
f130: 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e  NULLEQ is set in
f140: 20 50 35 20 74 68 65 6e 20 74 68 65 20 72 65 73   P5 then the res
f150: 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  ult of compariso
f160: 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69 74 68  n is always eith
f170: 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61  er.** true or fa
f180: 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72  lse and is never
f190: 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20   NULL.  If both 
f1a0: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c  operands are NUL
f1b0: 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  L then the resul
f1c0: 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73  t.** of comparis
f1d0: 6f 6e 20 69 73 20 66 61 6c 73 65 2e 20 20 49 66  on is false.  If
f1e0: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
f1f0: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  is NULL then the
f200: 20 72 65 73 75 6c 74 20 69 73 20 74 72 75 65 2e   result is true.
f210: 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f  .** If neither o
f220: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74  perand is NULL t
f230: 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65  he result is the
f240: 20 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75 6c   same as it woul
f250: 64 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20 53  d be if.** the S
f260: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61  QLITE_NULLEQ fla
f270: 67 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20 66  g were omitted f
f280: 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70  rom P5..*/./* Op
f290: 63 6f 64 65 3a 20 45 71 20 50 31 20 50 32 20 50  code: Eq P1 P2 P
f2a0: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
f2b0: 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3d 3d 72  sis: if r[P1]==r
f2c0: 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  [P3] goto P2.**.
f2d0: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
f2e0: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
f2f0: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
f300: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
f310: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70  ken if.** the op
f320: 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74  erands in regist
f330: 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72  ers P1 and P3 ar
f340: 65 20 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20  e equal..** See 
f350: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
f360: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
f370: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  ormation..**.** 
f380: 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  If SQLITE_NULLEQ
f390: 20 69 73 20 73 65 74 20 69 6e 20 50 35 20 74 68   is set in P5 th
f3a0: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  en the result of
f3b0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61   comparison is a
f3c0: 6c 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20  lways either.** 
f3d0: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e  true or false an
f3e0: 64 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e  d is never NULL.
f3f0: 20 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e    If both operan
f400: 64 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e  ds are NULL then
f410: 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f   the result.** o
f420: 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  f comparison is 
f430: 74 72 75 65 2e 20 20 49 66 20 65 69 74 68 65 72  true.  If either
f440: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
f450: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
f460: 20 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66   is false..** If
f470: 20 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64   neither operand
f480: 20 69 73 20 4e 55 4c 4c 20 74 68 65 20 72 65 73   is NULL the res
f490: 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65 20  ult is the same 
f4a0: 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69  as it would be i
f4b0: 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f  f.** the SQLITE_
f4c0: 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65  NULLEQ flag were
f4d0: 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35   omitted from P5
f4e0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
f4f0: 4c 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Le P1 P2 P3 P4 P
f500: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  5.** Synopsis: i
f510: 66 20 72 5b 50 31 5d 3c 3d 72 5b 50 33 5d 20 67  f r[P1]<=r[P3] g
f520: 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69  oto P2.**.** Thi
f530: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
f540: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
f550: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
f560: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
f570: 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  .** the content 
f580: 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69  of register P3 i
f590: 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  s less than or e
f5a0: 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74  qual to the cont
f5b0: 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74  ent of.** regist
f5c0: 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20  er P1.  See the 
f5d0: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
f5e0: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
f5f0: 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
f600: 64 65 3a 20 47 74 20 50 31 20 50 32 20 50 33 20  de: Gt P1 P2 P3 
f610: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
f620: 73 3a 20 69 66 20 72 5b 50 31 5d 3e 72 5b 50 33  s: if r[P1]>r[P3
f630: 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  ] goto P2.**.** 
f640: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
f650: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
f660: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
f670: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
f680: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   if.** the conte
f690: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
f6a0: 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  3 is greater tha
f6b0: 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  n the content of
f6c0: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e  .** register P1.
f6d0: 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63    See the Lt opc
f6e0: 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
f6f0: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
f700: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65  */./* Opcode: Ge
f710: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
f720: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
f730: 72 5b 50 31 5d 3e 3d 72 5b 50 33 5d 20 67 6f 74  r[P1]>=r[P3] got
f740: 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  o P2.**.** This 
f750: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
f760: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
f770: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
f780: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
f790: 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * the content of
f7a0: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
f7b0: 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
f7c0: 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e  equal to the con
f7d0: 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73  tent of.** regis
f7e0: 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65  ter P1.  See the
f7f0: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61   Lt opcode for a
f800: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
f810: 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ation..*/.case O
f820: 50 5f 45 71 3a 20 20 20 20 20 20 20 20 20 20 20  P_Eq:           
f830: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
f840: 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_EQ, jump, in1,
f850: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
f860: 4e 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Ne:             
f870: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
f880: 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  NE, jump, in1, i
f890: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74  n3 */.case OP_Lt
f8a0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
f8b0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54  /* same as TK_LT
f8c0: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
f8d0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20   */.case OP_Le: 
f8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
f8f0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20   same as TK_LE, 
f900: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
f910: 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20  /.case OP_Gt:   
f920: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
f930: 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75  ame as TK_GT, ju
f940: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
f950: 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20  case OP_Ge: {   
f960: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
f970: 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70  e as TK_GE, jump
f980: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20  , in1, in3 */.  
f990: 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20  int res;        
f9a0: 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66      /* Result of
f9b0: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   the comparison 
f9c0: 6f 66 20 70 49 6e 31 20 61 67 61 69 6e 73 74 20  of pIn1 against 
f9d0: 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20 61  pIn3 */.  char a
f9e0: 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a  ffinity;      /*
f9f0: 20 41 66 66 69 6e 69 74 79 20 74 6f 20 75 73 65   Affinity to use
fa00: 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20   for comparison 
fa10: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 31 3b  */.  u16 flags1;
fa20: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79           /* Copy
fa30: 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75   of initial valu
fa40: 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67 73  e of pIn1->flags
fa50: 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 33   */.  u16 flags3
fa60: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70  ;         /* Cop
fa70: 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c  y of initial val
fa80: 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61 67  ue of pIn3->flag
fa90: 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26  s */..  pIn1 = &
faa0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
fab0: 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
fac0: 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 31  p->p3];.  flags1
fad0: 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a   = pIn1->flags;.
fae0: 20 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d    flags3 = pIn3-
faf0: 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66  >flags;.  if( (f
fb00: 6c 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29 26  lags1 | flags3)&
fb10: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
fb20: 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f  /* One or both o
fb30: 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c  perands are NULL
fb40: 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   */.    if( pOp-
fb50: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c  >p5 & SQLITE_NUL
fb60: 4c 45 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  LEQ ){.      /* 
fb70: 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  If SQLITE_NULLEQ
fb80: 20 69 73 20 73 65 74 20 28 77 68 69 63 68 20 77   is set (which w
fb90: 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20  ill only happen 
fba0: 69 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20  if the operator 
fbb0: 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45  is.      ** OP_E
fbc0: 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e  q or OP_Ne) then
fbd0: 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f   take the jump o
fbe0: 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20  r not depending 
fbf0: 6f 6e 20 77 68 65 74 68 65 72 0a 20 20 20 20 20  on whether.     
fc00: 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20   ** or not both 
fc10: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 75 6c  operands are nul
fc20: 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  l..      */.    
fc30: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
fc40: 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20  pcode==OP_Eq || 
fc50: 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
fc60: 4e 65 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  Ne );.      asse
fc70: 72 74 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45  rt( (flags1 & ME
fc80: 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30 20 29 3b  M_Cleared)==0 );
fc90: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
fca0: 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
fcb0: 5f 4a 55 4d 50 49 46 4e 55 4c 4c 29 3d 3d 30 20  _JUMPIFNULL)==0 
fcc0: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c  );.      if( (fl
fcd0: 61 67 73 31 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  ags1&MEM_Null)!=
fce0: 30 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c 61  0.       && (fla
fcf0: 67 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  gs3&MEM_Null)!=0
fd00: 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c 61 67  .       && (flag
fd10: 73 33 26 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d  s3&MEM_Cleared)=
fd20: 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20  =0.      ){.    
fd30: 20 20 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a      res = 0;  /*
fd40: 20 52 65 73 75 6c 74 73 20 61 72 65 20 65 71 75   Results are equ
fd50: 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73  al */.      }els
fd60: 65 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d  e{.        res =
fd70: 20 31 3b 20 20 2f 2a 20 52 65 73 75 6c 74 73 20   1;  /* Results 
fd80: 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a 2f  are not equal */
fd90: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
fda0: 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 53 51 4c  se{.      /* SQL
fdb0: 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 63 6c  ITE_NULLEQ is cl
fdc0: 65 61 72 20 61 6e 64 20 61 74 20 6c 65 61 73 74  ear and at least
fdd0: 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69 73 20   one operand is 
fde0: 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a 20 74  NULL,.      ** t
fdf0: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
fe00: 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a 20  s always NULL.. 
fe10: 20 20 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70       ** The jump
fe20: 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65   is taken if the
fe30: 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
fe40: 4c 4c 20 62 69 74 20 69 73 20 73 65 74 2e 0a 20  LL bit is set.. 
fe50: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66       */.      if
fe60: 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
fe70: 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20  TE_STOREP2 ){.  
fe80: 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d        pOut = &aM
fe90: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20  em[pOp->p2];.   
fea0: 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
feb0: 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
fec0: 20 20 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79          MemSetTy
fed0: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
fee0: 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20  _Null);.        
fef0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
ff00: 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20  Op->p2, pOut);. 
ff10: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
ff20: 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
ff30: 6b 65 6e 28 32 2c 33 29 3b 0a 20 20 20 20 20 20  ken(2,3);.      
ff40: 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
ff50: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
ff60: 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67  L ){.          g
ff70: 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
ff80: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
ff90: 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  }.      break;. 
ffa0: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
ffb0: 20 20 2f 2a 20 4e 65 69 74 68 65 72 20 6f 70 65    /* Neither ope
ffc0: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 20 20 44  rand is NULL.  D
ffd0: 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  o a comparison. 
ffe0: 2a 2f 0a 20 20 20 20 61 66 66 69 6e 69 74 79 20  */.    affinity 
fff0: 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  = pOp->p5 & SQLI
10000 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a 20 20 20  TE_AFF_MASK;.   
10010 20 69 66 28 20 61 66 66 69 6e 69 74 79 3e 3d 53   if( affinity>=S
10020 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
10030 43 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28  C ){.      if( (
10040 66 6c 61 67 73 31 20 26 20 28 4d 45 4d 5f 49 6e  flags1 & (MEM_In
10050 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53  t|MEM_Real|MEM_S
10060 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b  tr))==MEM_Str ){
10070 0a 20 20 20 20 20 20 20 20 61 70 70 6c 79 4e 75  .        applyNu
10080 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49  mericAffinity(pI
10090 6e 31 2c 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20  n1,0);.      }. 
100a0 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 33       if( (flags3
100b0 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
100c0 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d  Real|MEM_Str))==
100d0 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20  MEM_Str ){.     
100e0 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41     applyNumericA
100f0 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 30 29 3b  ffinity(pIn3,0);
10100 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
10110 73 65 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d  se if( affinity=
10120 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54  =SQLITE_AFF_TEXT
10130 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 66   ){.      if( (f
10140 6c 61 67 73 31 20 26 20 4d 45 4d 5f 53 74 72 29  lags1 & MEM_Str)
10150 3d 3d 30 20 26 26 20 28 66 6c 61 67 73 31 20 26  ==0 && (flags1 &
10160 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65   (MEM_Int|MEM_Re
10170 61 6c 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  al))!=0 ){.     
10180 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e     testcase( pIn
10190 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
101a0 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20 74 65  nt );.        te
101b0 73 74 63 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c  stcase( pIn1->fl
101c0 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29  ags & MEM_Real )
101d0 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
101e0 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66  3VdbeMemStringif
101f0 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67  y(pIn1, encoding
10200 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 74 65  , 1);.        te
10210 73 74 63 61 73 65 28 20 28 66 6c 61 67 73 31 26  stcase( (flags1&
10220 4d 45 4d 5f 44 79 6e 29 20 21 3d 20 28 70 49 6e  MEM_Dyn) != (pIn
10230 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 44 79 6e  1->flags&MEM_Dyn
10240 29 20 29 3b 0a 20 20 20 20 20 20 20 20 66 6c 61  ) );.        fla
10250 67 73 31 20 3d 20 28 70 49 6e 31 2d 3e 66 6c 61  gs1 = (pIn1->fla
10260 67 73 20 26 20 7e 4d 45 4d 5f 54 79 70 65 4d 61  gs & ~MEM_TypeMa
10270 73 6b 29 20 7c 20 28 66 6c 61 67 73 31 20 26 20  sk) | (flags1 & 
10280 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20  MEM_TypeMask);. 
10290 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
102a0 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 53   (flags3 & MEM_S
102b0 74 72 29 3d 3d 30 20 26 26 20 28 66 6c 61 67 73  tr)==0 && (flags
102c0 33 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  3 & (MEM_Int|MEM
102d0 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a 20 20  _Real))!=0 ){.  
102e0 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
102f0 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
10300 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20 20 20  M_Int );.       
10310 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 33 2d   testcase( pIn3-
10320 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61  >flags & MEM_Rea
10330 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  l );.        sql
10340 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e  ite3VdbeMemStrin
10350 67 69 66 79 28 70 49 6e 33 2c 20 65 6e 63 6f 64  gify(pIn3, encod
10360 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20 20 20  ing, 1);.       
10370 20 74 65 73 74 63 61 73 65 28 20 28 66 6c 61 67   testcase( (flag
10380 73 33 26 4d 45 4d 5f 44 79 6e 29 20 21 3d 20 28  s3&MEM_Dyn) != (
10390 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn3->flags&MEM_
103a0 44 79 6e 29 20 29 3b 0a 20 20 20 20 20 20 20 20  Dyn) );.        
103b0 66 6c 61 67 73 33 20 3d 20 28 70 49 6e 33 2d 3e  flags3 = (pIn3->
103c0 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f 54 79 70  flags & ~MEM_Typ
103d0 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73 33  eMask) | (flags3
103e0 20 26 20 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29   & MEM_TypeMask)
103f0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
10400 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
10410 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c  >p4type==P4_COLL
10420 53 45 51 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 70  SEQ || pOp->p4.p
10430 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20 20 20 69  Coll==0 );.    i
10440 66 28 20 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f  f( flags1 & MEM_
10450 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 73 71  Zero ){.      sq
10460 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61  lite3VdbeMemExpa
10470 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20  ndBlob(pIn1);.  
10480 20 20 20 20 66 6c 61 67 73 31 20 26 3d 20 7e 4d      flags1 &= ~M
10490 45 4d 5f 5a 65 72 6f 3b 0a 20 20 20 20 7d 0a 20  EM_Zero;.    }. 
104a0 20 20 20 69 66 28 20 66 6c 61 67 73 33 20 26 20     if( flags3 & 
104b0 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20  MEM_Zero ){.    
104c0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
104d0 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29  ExpandBlob(pIn3)
104e0 3b 0a 20 20 20 20 20 20 66 6c 61 67 73 33 20 26  ;.      flags3 &
104f0 3d 20 7e 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 20  = ~MEM_Zero;.   
10500 20 7d 0a 20 20 20 20 72 65 73 20 3d 20 73 71 6c   }.    res = sql
10510 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 70  ite3MemCompare(p
10520 49 6e 33 2c 20 70 49 6e 31 2c 20 70 4f 70 2d 3e  In3, pIn1, pOp->
10530 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 20  p4.pColl);.  }. 
10540 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
10550 63 6f 64 65 20 29 7b 0a 20 20 20 20 63 61 73 65  code ){.    case
10560 20 4f 50 5f 45 71 3a 20 20 20 20 72 65 73 20 3d   OP_Eq:    res =
10570 20 72 65 73 3d 3d 30 3b 20 20 20 20 20 62 72 65   res==0;     bre
10580 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f  ak;.    case OP_
10590 4e 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73  Ne:    res = res
105a0 21 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  !=0;     break;.
105b0 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 74 3a 20      case OP_Lt: 
105c0 20 20 20 72 65 73 20 3d 20 72 65 73 3c 30 3b 20     res = res<0; 
105d0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
105e0 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 72  case OP_Le:    r
105f0 65 73 20 3d 20 72 65 73 3c 3d 30 3b 20 20 20 20  es = res<=0;    
10600 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
10610 20 4f 50 5f 47 74 3a 20 20 20 20 72 65 73 20 3d   OP_Gt:    res =
10620 20 72 65 73 3e 30 3b 20 20 20 20 20 20 62 72 65   res>0;      bre
10630 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a  ak;.    default:
10640 20 20 20 20 20 20 20 72 65 73 20 3d 20 72 65 73         res = res
10650 3e 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  >=0;     break;.
10660 20 20 7d 0a 0a 20 20 2f 2a 20 55 6e 64 6f 20 61    }..  /* Undo a
10670 6e 79 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20  ny changes made 
10680 62 79 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79  by applyAffinity
10690 28 29 20 74 6f 20 74 68 65 20 69 6e 70 75 74 20  () to the input 
106a0 72 65 67 69 73 74 65 72 73 2e 20 2a 2f 0a 20 20  registers. */.  
106b0 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66  assert( (pIn1->f
106c0 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20  lags & MEM_Dyn) 
106d0 3d 3d 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d  == (flags1 & MEM
106e0 5f 44 79 6e 29 20 29 3b 0a 20 20 70 49 6e 31 2d  _Dyn) );.  pIn1-
106f0 3e 66 6c 61 67 73 20 3d 20 66 6c 61 67 73 31 3b  >flags = flags1;
10700 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 33  .  assert( (pIn3
10710 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79  ->flags & MEM_Dy
10720 6e 29 20 3d 3d 20 28 66 6c 61 67 73 33 20 26 20  n) == (flags3 & 
10730 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 70 49  MEM_Dyn) );.  pI
10740 6e 33 2d 3e 66 6c 61 67 73 20 3d 20 66 6c 61 67  n3->flags = flag
10750 73 33 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e  s3;..  if( pOp->
10760 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52  p5 & SQLITE_STOR
10770 45 50 32 20 29 7b 0a 20 20 20 20 70 4f 75 74 20  EP2 ){.    pOut 
10780 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
10790 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f  ;.    memAboutTo
107a0 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
107b0 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
107c0 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
107d0 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  t);.    pOut->u.
107e0 69 20 3d 20 72 65 73 3b 0a 20 20 20 20 52 45 47  i = res;.    REG
107f0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
10800 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 7d 65  >p2, pOut);.  }e
10810 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61  lse{.    VdbeBra
10820 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c  nchTaken(res!=0,
10830 20 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49   (pOp->p5 & SQLI
10840 54 45 5f 4e 55 4c 4c 45 51 29 3f 32 3a 33 29 3b  TE_NULLEQ)?2:3);
10850 0a 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a  .    if( res ){.
10860 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f        goto jump_
10870 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20 7d  to_p2;.    }.  }
10880 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
10890 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75 74 61 74  Opcode: Permutat
108a0 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a  ion * * * P4 *.*
108b0 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 70 65 72  *.** Set the per
108c0 6d 75 74 61 74 69 6f 6e 20 75 73 65 64 20 62 79  mutation used by
108d0 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 20   the OP_Compare 
108e0 6f 70 65 72 61 74 6f 72 20 74 6f 20 62 65 20 74  operator to be t
108f0 68 65 20 61 72 72 61 79 0a 2a 2a 20 6f 66 20 69  he array.** of i
10900 6e 74 65 67 65 72 73 20 69 6e 20 50 34 2e 0a 2a  ntegers in P4..*
10910 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d 75 74 61  *.** The permuta
10920 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61 6c  tion is only val
10930 69 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78  id until the nex
10940 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 74 68 61  t OP_Compare tha
10950 74 20 68 61 73 0a 2a 2a 20 74 68 65 20 4f 50 46  t has.** the OPF
10960 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20  LAG_PERMUTE bit 
10970 73 65 74 20 69 6e 20 50 35 2e 20 54 79 70 69 63  set in P5. Typic
10980 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50 65 72 6d  ally the OP_Perm
10990 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 0a  utation should .
109a0 2a 2a 20 6f 63 63 75 72 20 69 6d 6d 65 64 69 61  ** occur immedia
109b0 74 65 6c 79 20 70 72 69 6f 72 20 74 6f 20 74 68  tely prior to th
109c0 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2a  e OP_Compare..**
109d0 0a 2a 2a 20 54 68 65 20 66 69 72 73 74 20 69 6e  .** The first in
109e0 74 65 67 65 72 20 69 6e 20 74 68 65 20 50 34 20  teger in the P4 
109f0 69 6e 74 65 67 65 72 20 61 72 72 61 79 20 69 73  integer array is
10a00 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74   the length of t
10a10 68 65 20 61 72 72 61 79 0a 2a 2a 20 61 6e 64 20  he array.** and 
10a20 64 6f 65 73 20 6e 6f 74 20 62 65 63 6f 6d 65 20  does not become 
10a30 70 61 72 74 20 6f 66 20 74 68 65 20 70 65 72 6d  part of the perm
10a40 75 74 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  utation..*/.case
10a50 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 3a   OP_Permutation:
10a60 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
10a70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
10a80 41 52 52 41 59 20 29 3b 0a 20 20 61 73 73 65 72  ARRAY );.  asser
10a90 74 28 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29 3b  t( pOp->p4.ai );
10aa0 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20 70 4f  .  aPermute = pO
10ab0 70 2d 3e 70 34 2e 61 69 20 2b 20 31 3b 0a 20 20  p->p4.ai + 1;.  
10ac0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
10ad0 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20 50 31 20  ode: Compare P1 
10ae0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
10af0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 40 50 33  ynopsis: r[P1@P3
10b00 5d 20 3c 2d 3e 20 72 5b 50 32 40 50 33 5d 0a 2a  ] <-> r[P2@P3].*
10b10 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f  *.** Compare two
10b20 20 76 65 63 74 6f 72 73 20 6f 66 20 72 65 67 69   vectors of regi
10b30 73 74 65 72 73 20 69 6e 20 72 65 67 28 50 31 29  sters in reg(P1)
10b40 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31 29 20 28  ..reg(P1+P3-1) (
10b50 63 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 76 65 63  call this.** vec
10b60 74 6f 72 20 22 41 22 29 20 61 6e 64 20 69 6e 20  tor "A") and in 
10b70 72 65 67 28 50 32 29 2e 2e 72 65 67 28 50 32 2b  reg(P2)..reg(P2+
10b80 50 33 2d 31 29 20 28 22 42 22 29 2e 20 20 53 61  P3-1) ("B").  Sa
10b90 76 65 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  ve the result of
10ba0 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73  .** the comparis
10bb0 6f 6e 20 66 6f 72 20 75 73 65 20 62 79 20 74 68  on for use by th
10bc0 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69  e next OP_Jump i
10bd0 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 49  nstruct..**.** I
10be0 66 20 50 35 20 68 61 73 20 74 68 65 20 4f 50 46  f P5 has the OPF
10bf0 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20  LAG_PERMUTE bit 
10c00 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 6f 72  set, then the or
10c10 64 65 72 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  der of compariso
10c20 6e 20 69 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e  n is.** determin
10c30 65 64 20 62 79 20 74 68 65 20 6d 6f 73 74 20 72  ed by the most r
10c40 65 63 65 6e 74 20 4f 50 5f 50 65 72 6d 75 74 61  ecent OP_Permuta
10c50 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 20 20  tion operator.  
10c60 49 66 20 74 68 65 0a 2a 2a 20 4f 50 46 4c 41 47  If the.** OPFLAG
10c70 5f 50 45 52 4d 55 54 45 20 62 69 74 20 69 73 20  _PERMUTE bit is 
10c80 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 67 69  clear, then regi
10c90 73 74 65 72 20 61 72 65 20 63 6f 6d 70 61 72 65  ster are compare
10ca0 64 20 69 6e 20 73 65 71 75 65 6e 74 69 61 6c 0a  d in sequential.
10cb0 2a 2a 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20  ** order..**.** 
10cc0 50 34 20 69 73 20 61 20 4b 65 79 49 6e 66 6f 20  P4 is a KeyInfo 
10cd0 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64  structure that d
10ce0 65 66 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67  efines collating
10cf0 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64 20 73   sequences and s
10d00 6f 72 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f  ort.** orders fo
10d10 72 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  r the comparison
10d20 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61 74 69  .  The permutati
10d30 6f 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 72 65  on applies to re
10d40 67 69 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e  gisters.** only.
10d50 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c    The KeyInfo el
10d60 65 6d 65 6e 74 73 20 61 72 65 20 75 73 65 64 20  ements are used 
10d70 73 65 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a  sequentially..**
10d80 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 61 72 69 73  .** The comparis
10d90 6f 6e 20 69 73 20 61 20 73 6f 72 74 20 63 6f 6d  on is a sort com
10da0 70 61 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c  parison, so NULL
10db0 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c  s compare equal,
10dc0 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65  .** NULLs are le
10dd0 73 73 20 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c  ss than numbers,
10de0 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6c 65 73   numbers are les
10df0 73 20 74 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a  s than strings,.
10e00 2a 2a 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61  ** and strings a
10e10 72 65 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f  re less than blo
10e20 62 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  bs..*/.case OP_C
10e30 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20  ompare: {.  int 
10e40 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e  n;.  int i;.  in
10e50 74 20 70 31 3b 0a 20 20 69 6e 74 20 70 32 3b 0a  t p1;.  int p2;.
10e60 20 20 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20    const KeyInfo 
10e70 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74  *pKeyInfo;.  int
10e80 20 69 64 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20   idx;.  CollSeq 
10e90 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f  *pColl;    /* Co
10ea0 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
10eb0 20 74 6f 20 75 73 65 20 6f 6e 20 74 68 69 73 20   to use on this 
10ec0 74 65 72 6d 20 2a 2f 0a 20 20 69 6e 74 20 62 52  term */.  int bR
10ed0 65 76 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ev;          /* 
10ee0 54 72 75 65 20 66 6f 72 20 44 45 53 43 45 4e 44  True for DESCEND
10ef0 49 4e 47 20 73 6f 72 74 20 6f 72 64 65 72 20 2a  ING sort order *
10f00 2f 0a 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e 70  /..  if( (pOp->p
10f10 35 20 26 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  5 & OPFLAG_PERMU
10f20 54 45 29 3d 3d 30 20 29 20 61 50 65 72 6d 75 74  TE)==0 ) aPermut
10f30 65 20 3d 20 30 3b 0a 20 20 6e 20 3d 20 70 4f 70  e = 0;.  n = pOp
10f40 2d 3e 70 33 3b 0a 20 20 70 4b 65 79 49 6e 66 6f  ->p3;.  pKeyInfo
10f50 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
10f60 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  nfo;.  assert( n
10f70 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
10f80 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20  pKeyInfo!=0 );. 
10f90 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20   p1 = pOp->p1;. 
10fa0 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 23   p2 = pOp->p2;.#
10fb0 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  if SQLITE_DEBUG.
10fc0 20 20 69 66 28 20 61 50 65 72 6d 75 74 65 20 29    if( aPermute )
10fd0 7b 0a 20 20 20 20 69 6e 74 20 6b 2c 20 6d 78 20  {.    int k, mx 
10fe0 3d 20 30 3b 0a 20 20 20 20 66 6f 72 28 6b 3d 30  = 0;.    for(k=0
10ff0 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28 20  ; k<n; k++) if( 
11000 61 50 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29  aPermute[k]>mx )
11010 20 6d 78 20 3d 20 61 50 65 72 6d 75 74 65 5b 6b   mx = aPermute[k
11020 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ];.    assert( p
11030 31 3e 30 20 26 26 20 70 31 2b 6d 78 3c 3d 28 70  1>0 && p1+mx<=(p
11040 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
11050 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65  r)+1 );.    asse
11060 72 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6d  rt( p2>0 && p2+m
11070 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  x<=(p->nMem-p->n
11080 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d  Cursor)+1 );.  }
11090 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
110a0 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6e 3c 3d  ( p1>0 && p1+n<=
110b0 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
110c0 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73  sor)+1 );.    as
110d0 73 65 72 74 28 20 70 32 3e 30 20 26 26 20 70 32  sert( p2>0 && p2
110e0 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  +n<=(p->nMem-p->
110f0 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
11100 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
11110 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20 66 6f  TE_DEBUG */.  fo
11120 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29  r(i=0; i<n; i++)
11130 7b 0a 20 20 20 20 69 64 78 20 3d 20 61 50 65 72  {.    idx = aPer
11140 6d 75 74 65 20 3f 20 61 50 65 72 6d 75 74 65 5b  mute ? aPermute[
11150 69 5d 20 3a 20 69 3b 0a 20 20 20 20 61 73 73 65  i] : i;.    asse
11160 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
11170 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 20 29 3b  aMem[p1+idx]) );
11180 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
11190 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 32  IsValid(&aMem[p2
111a0 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20 52 45  +idx]) );.    RE
111b0 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 31 2b  GISTER_TRACE(p1+
111c0 69 64 78 2c 20 26 61 4d 65 6d 5b 70 31 2b 69 64  idx, &aMem[p1+id
111d0 78 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  x]);.    REGISTE
111e0 52 5f 54 52 41 43 45 28 70 32 2b 69 64 78 2c 20  R_TRACE(p2+idx, 
111f0 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a  &aMem[p2+idx]);.
11200 20 20 20 20 61 73 73 65 72 74 28 20 69 3c 70 4b      assert( i<pK
11210 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20 29  eyInfo->nField )
11220 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b  ;.    pColl = pK
11230 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d  eyInfo->aColl[i]
11240 3b 0a 20 20 20 20 62 52 65 76 20 3d 20 70 4b 65  ;.    bRev = pKe
11250 79 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65  yInfo->aSortOrde
11260 72 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61  r[i];.    iCompa
11270 72 65 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43  re = sqlite3MemC
11280 6f 6d 70 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b  ompare(&aMem[p1+
11290 69 64 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69  idx], &aMem[p2+i
112a0 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20  dx], pColl);.   
112b0 20 69 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b   if( iCompare ){
112c0 0a 20 20 20 20 20 20 69 66 28 20 62 52 65 76 20  .      if( bRev 
112d0 29 20 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43  ) iCompare = -iC
112e0 6f 6d 70 61 72 65 3b 0a 20 20 20 20 20 20 62 72  ompare;.      br
112f0 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  eak;.    }.  }. 
11300 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20   aPermute = 0;. 
11310 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
11320 63 6f 64 65 3a 20 4a 75 6d 70 20 50 31 20 50 32  code: Jump P1 P2
11330 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75   P3 * *.**.** Ju
11340 6d 70 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75  mp to the instru
11350 63 74 69 6f 6e 20 61 74 20 61 64 64 72 65 73 73  ction at address
11360 20 50 31 2c 20 50 32 2c 20 6f 72 20 50 33 20 64   P1, P2, or P3 d
11370 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
11380 68 65 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f  her.** in the mo
11390 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d  st recent OP_Com
113a0 70 61 72 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  pare instruction
113b0 20 74 68 65 20 50 31 20 76 65 63 74 6f 72 20 77   the P1 vector w
113c0 61 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20  as less than.** 
113d0 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65  equal to, or gre
113e0 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 50 32  ater than the P2
113f0 20 76 65 63 74 6f 72 2c 20 72 65 73 70 65 63 74   vector, respect
11400 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ively..*/.case O
11410 50 5f 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20 20  P_Jump: {       
11420 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
11430 0a 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3c  .  if( iCompare<
11440 30 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61  0 ){.    VdbeBra
11450 6e 63 68 54 61 6b 65 6e 28 30 2c 33 29 3b 20 70  nchTaken(0,3); p
11460 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70  Op = &aOp[pOp->p
11470 31 20 2d 20 31 5d 3b 0a 20 20 7d 65 6c 73 65 20  1 - 1];.  }else 
11480 69 66 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30 20  if( iCompare==0 
11490 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  ){.    VdbeBranc
114a0 68 54 61 6b 65 6e 28 31 2c 33 29 3b 20 70 4f 70  hTaken(1,3); pOp
114b0 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20   = &aOp[pOp->p2 
114c0 2d 20 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  - 1];.  }else{. 
114d0 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
114e0 65 6e 28 32 2c 33 29 3b 20 70 4f 70 20 3d 20 26  en(2,3); pOp = &
114f0 61 4f 70 5b 70 4f 70 2d 3e 70 33 20 2d 20 31 5d  aOp[pOp->p3 - 1]
11500 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
11510 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64  ../* Opcode: And
11520 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
11530 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
11540 3d 28 72 5b 50 31 5d 20 26 26 20 72 5b 50 32 5d  =(r[P1] && r[P2]
11550 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  ).**.** Take the
11560 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66 20   logical AND of 
11570 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
11580 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
11590 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74  2 and.** write t
115a0 68 65 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 72  he result into r
115b0 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a  egister P3..**.*
115c0 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20 6f  * If either P1 o
115d0 72 20 50 32 20 69 73 20 30 20 28 66 61 6c 73 65  r P2 is 0 (false
115e0 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  ) then the resul
115f0 74 20 69 73 20 30 20 65 76 65 6e 20 69 66 0a 2a  t is 0 even if.*
11600 2a 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75  * the other inpu
11610 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55  t is NULL.  A NU
11620 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f 72 20 74  LL and true or t
11630 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a  wo NULLs give.**
11640 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a   a NULL output..
11650 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72  */./* Opcode: Or
11660 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
11670 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
11680 3d 28 72 5b 50 31 5d 20 7c 7c 20 72 5b 50 32 5d  =(r[P1] || r[P2]
11690 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  ).**.** Take the
116a0 20 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74   logical OR of t
116b0 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
116c0 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20  ister P1 and P2 
116d0 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  and.** store the
116e0 20 61 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73   answer in regis
116f0 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P3..**.** If
11700 20 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32   either P1 or P2
11710 20 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75   is nonzero (tru
11720 65 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  e) then the resu
11730 6c 74 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a  lt is 1 (true).*
11740 2a 20 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74  * even if the ot
11750 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
11760 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66  L.  A NULL and f
11770 61 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c  alse or two NULL
11780 73 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c  s.** give a NULL
11790 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65   output..*/.case
117a0 20 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20   OP_And:        
117b0 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
117c0 20 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e   TK_AND, in1, in
117d0 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
117e0 4f 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20  OP_Or: {        
117f0 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
11800 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c  TK_OR, in1, in2,
11810 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76   out3 */.  int v
11820 31 3b 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70  1;    /* Left op
11830 65 72 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45  erand:  0==FALSE
11840 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e  , 1==TRUE, 2==UN
11850 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f  KNOWN or NULL */
11860 0a 20 20 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a  .  int v2;    /*
11870 20 52 69 67 68 74 20 6f 70 65 72 61 6e 64 3a 20   Right operand: 
11880 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55  0==FALSE, 1==TRU
11890 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72  E, 2==UNKNOWN or
118a0 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 70 49 6e 31   NULL */..  pIn1
118b0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
118c0 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
118d0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
118e0 29 7b 0a 20 20 20 20 76 31 20 3d 20 32 3b 0a 20  ){.    v1 = 2;. 
118f0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 31 20 3d   }else{.    v1 =
11900 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
11910 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 20  alue(pIn1)!=0;. 
11920 20 7d 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65   }.  pIn2 = &aMe
11930 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66  m[pOp->p2];.  if
11940 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20  ( pIn2->flags & 
11950 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
11960 76 32 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b  v2 = 2;.  }else{
11970 0a 20 20 20 20 76 32 20 3d 20 73 71 6c 69 74 65  .    v2 = sqlite
11980 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
11990 6e 32 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66  n2)!=0;.  }.  if
119a0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
119b0 50 5f 41 6e 64 20 29 7b 0a 20 20 20 20 73 74 61  P_And ){.    sta
119c0 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  tic const unsign
119d0 65 64 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69  ed char and_logi
119e0 63 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c  c[] = { 0, 0, 0,
119f0 20 30 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20   0, 1, 2, 0, 2, 
11a00 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e  2 };.    v1 = an
11a10 64 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d  d_logic[v1*3+v2]
11a20 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
11a30 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69  tatic const unsi
11a40 67 6e 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67  gned char or_log
11a50 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32  ic[] = { 0, 1, 2
11a60 2c 20 31 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c  , 1, 1, 1, 2, 1,
11a70 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f   2 };.    v1 = o
11a80 72 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d  r_logic[v1*3+v2]
11a90 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26  ;.  }.  pOut = &
11aa0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
11ab0 20 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20   if( v1==2 ){.  
11ac0 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
11ad0 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  (pOut, MEM_Null)
11ae0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
11af0 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20  Out->u.i = v1;. 
11b00 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
11b10 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
11b20 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
11b30 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
11b40 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
11b50 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
11b60 20 21 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e   !r[P1].**.** In
11b70 74 65 72 70 72 65 74 20 74 68 65 20 76 61 6c 75  terpret the valu
11b80 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
11b90 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61   as a boolean va
11ba0 6c 75 65 2e 20 20 53 74 6f 72 65 20 74 68 65 0a  lue.  Store the.
11bb0 2a 2a 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c  ** boolean compl
11bc0 65 6d 65 6e 74 20 69 6e 20 72 65 67 69 73 74 65  ement in registe
11bd0 72 20 50 32 2e 20 20 49 66 20 74 68 65 20 76 61  r P2.  If the va
11be0 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
11bf0 50 31 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20  P1 is .** NULL, 
11c00 74 68 65 6e 20 61 20 4e 55 4c 4c 20 69 73 20 73  then a NULL is s
11c10 74 6f 72 65 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a  tored in P2..*/.
11c20 63 61 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20  case OP_Not: {  
11c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11c40 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c   same as TK_NOT,
11c50 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20   in1, out2 */.  
11c60 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
11c70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p1];.  pOut = 
11c80 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
11c90 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
11ca0 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
11cb0 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
11cc0 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
11cd0 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   ){.    pOut->fl
11ce0 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
11cf0 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 21     pOut->u.i = !
11d00 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
11d10 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20  lue(pIn1);.  }. 
11d20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
11d30 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20 50 31 20  code: BitNot P1 
11d40 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
11d50 70 73 69 73 3a 20 72 5b 50 31 5d 3d 20 7e 72 5b  psis: r[P1]= ~r[
11d60 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70  P1].**.** Interp
11d70 72 65 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ret the content 
11d80 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 61  of register P1 a
11d90 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 53  s an integer.  S
11da0 74 6f 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73  tore the.** ones
11db0 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74  -complement of t
11dc0 68 65 20 50 31 20 76 61 6c 75 65 20 69 6e 74 6f  he P1 value into
11dd0 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49   register P2.  I
11de0 66 20 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20  f P1 holds.** a 
11df0 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20  NULL then store 
11e00 61 20 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f  a NULL in P2..*/
11e10 0a 63 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a  .case OP_BitNot:
11e20 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
11e30 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54  * same as TK_BIT
11e40 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a  NOT, in1, out2 *
11e50 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
11e60 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
11e70 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
11e80 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  2];.  sqlite3Vdb
11e90 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
11ea0 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
11eb0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
11ec0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 4f 75 74  )==0 ){.    pOut
11ed0 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
11ee0 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  t;.    pOut->u.i
11ef0 20 3d 20 7e 73 71 6c 69 74 65 33 56 64 62 65 49   = ~sqlite3VdbeI
11f00 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20  ntValue(pIn1);. 
11f10 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
11f20 2a 20 4f 70 63 6f 64 65 3a 20 4f 6e 63 65 20 50  * Opcode: Once P
11f30 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
11f40 20 43 68 65 63 6b 20 74 68 65 20 22 6f 6e 63 65   Check the "once
11f50 22 20 66 6c 61 67 20 6e 75 6d 62 65 72 20 50 31  " flag number P1
11f60 2e 20 49 66 20 69 74 20 69 73 20 73 65 74 2c 20  . If it is set, 
11f70 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
11f80 69 6f 6e 20 50 32 2e 20 0a 2a 2a 20 4f 74 68 65  ion P2. .** Othe
11f90 72 77 69 73 65 2c 20 73 65 74 20 74 68 65 20 66  rwise, set the f
11fa0 6c 61 67 20 61 6e 64 20 66 61 6c 6c 20 74 68 72  lag and fall thr
11fb0 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
11fc0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
11fd0 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
11fe0 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63 61 75   this opcode cau
11ff0 73 65 73 20 61 6c 6c 20 66 6f 6c 6c 6f 77 69 6e  ses all followin
12000 67 20 6f 70 63 6f 64 65 73 20 75 70 20 74 68 72  g opcodes up thr
12010 6f 75 67 68 20 50 32 0a 2a 2a 20 28 62 75 74 20  ough P2.** (but 
12020 6e 6f 74 20 69 6e 63 6c 75 64 69 6e 67 20 50 32  not including P2
12030 29 20 74 6f 20 72 75 6e 20 6a 75 73 74 20 6f 6e  ) to run just on
12040 63 65 20 61 6e 64 20 74 6f 20 62 65 20 73 6b 69  ce and to be ski
12050 70 70 65 64 20 6f 6e 20 73 75 62 73 65 71 75 65  pped on subseque
12060 6e 74 0a 2a 2a 20 74 69 6d 65 73 20 74 68 72 6f  nt.** times thro
12070 75 67 68 20 74 68 65 20 6c 6f 6f 70 2e 0a 2a 2a  ugh the loop..**
12080 0a 2a 2a 20 41 6c 6c 20 22 6f 6e 63 65 22 20 66  .** All "once" f
12090 6c 61 67 73 20 61 72 65 20 69 6e 69 74 69 61 6c  lags are initial
120a0 6c 79 20 63 6c 65 61 72 65 64 20 77 68 65 6e 65  ly cleared whene
120b0 76 65 72 20 61 20 70 72 65 70 61 72 65 64 20 73  ver a prepared s
120c0 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 66 69 72 73  tatement.** firs
120d0 74 20 62 65 67 69 6e 73 20 74 6f 20 72 75 6e 2e  t begins to run.
120e0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 6e 63 65  .*/.case OP_Once
120f0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
12100 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73  /* jump */.  ass
12110 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  ert( pOp->p1<p->
12120 6e 4f 6e 63 65 46 6c 61 67 20 29 3b 0a 20 20 56  nOnceFlag );.  V
12130 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70  dbeBranchTaken(p
12140 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d  ->aOnceFlag[pOp-
12150 3e 70 31 5d 21 3d 30 2c 20 32 29 3b 0a 20 20 69  >p1]!=0, 2);.  i
12160 66 28 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b  f( p->aOnceFlag[
12170 70 4f 70 2d 3e 70 31 5d 20 29 7b 0a 20 20 20 20  pOp->p1] ){.    
12180 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
12190 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d  .  }else{.    p-
121a0 3e 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e  >aOnceFlag[pOp->
121b0 70 31 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62  p1] = 1;.  }.  b
121c0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
121d0 64 65 3a 20 49 66 20 50 31 20 50 32 20 50 33 20  de: If P1 P2 P3 
121e0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
121f0 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75  o P2 if the valu
12200 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
12210 20 69 73 20 74 72 75 65 2e 20 20 54 68 65 20 76   is true.  The v
12220 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69  alue.** is consi
12230 64 65 72 65 64 20 74 72 75 65 20 69 66 20 69 74  dered true if it
12240 20 69 73 20 6e 75 6d 65 72 69 63 20 61 6e 64 20   is numeric and 
12250 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66 20 74 68  non-zero.  If th
12260 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31  e value.** in P1
12270 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61   is NULL then ta
12280 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61  ke the jump if a
12290 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33 20 69 73  nd only if P3 is
122a0 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 2f 2a   non-zero..*/./*
122b0 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74 20 50   Opcode: IfNot P
122c0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
122d0 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
122e0 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
122f0 69 73 74 65 72 20 50 31 20 69 73 20 46 61 6c 73  ister P1 is Fals
12300 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a  e.  The value.**
12310 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 66   is considered f
12320 61 6c 73 65 20 69 66 20 69 74 20 68 61 73 20 61  alse if it has a
12330 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 20 6f   numeric value o
12340 66 20 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20  f zero.  If the 
12350 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69  value.** in P1 i
12360 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65  s NULL then take
12370 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 64   the jump if and
12380 20 6f 6e 6c 79 20 69 66 20 50 33 20 69 73 20 6e   only if P3 is n
12390 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65  on-zero..*/.case
123a0 20 4f 50 5f 49 66 3a 20 20 20 20 20 20 20 20 20   OP_If:         
123b0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
123c0 20 69 6e 31 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in1 */.case OP_
123d0 49 66 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20  IfNot: {        
123e0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
123f0 20 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a 20 20 70   */.  int c;.  p
12400 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
12410 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31  >p1];.  if( pIn1
12420 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
12430 6c 6c 20 29 7b 0a 20 20 20 20 63 20 3d 20 70 4f  ll ){.    c = pO
12440 70 2d 3e 70 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a  p->p3;.  }else{.
12450 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
12460 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
12470 54 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65  T.    c = sqlite
12480 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
12490 6e 31 29 21 3d 30 3b 0a 23 65 6c 73 65 0a 20 20  n1)!=0;.#else.  
124a0 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62    c = sqlite3Vdb
124b0 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29  eRealValue(pIn1)
124c0 21 3d 30 2e 30 3b 0a 23 65 6e 64 69 66 0a 20 20  !=0.0;.#endif.  
124d0 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
124e0 65 3d 3d 4f 50 5f 49 66 4e 6f 74 20 29 20 63 20  e==OP_IfNot ) c 
124f0 3d 20 21 63 3b 0a 20 20 7d 0a 20 20 56 64 62 65  = !c;.  }.  Vdbe
12500 42 72 61 6e 63 68 54 61 6b 65 6e 28 63 21 3d 30  BranchTaken(c!=0
12510 2c 20 32 29 3b 0a 20 20 69 66 28 20 63 20 29 7b  , 2);.  if( c ){
12520 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  .    goto jump_t
12530 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  o_p2;.  }.  brea
12540 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
12550 20 49 73 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20   IsNull P1 P2 * 
12560 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
12570 20 20 69 66 20 72 5b 50 31 5d 3d 3d 4e 55 4c 4c    if r[P1]==NULL
12580 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a   goto P2.**.** J
12590 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
125a0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
125b0 65 72 20 50 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a  er P1 is NULL..*
125c0 2f 0a 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c  /.case OP_IsNull
125d0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
125e0 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e  * same as TK_ISN
125f0 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a  ULL, jump, in1 *
12600 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
12610 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56 64 62  [pOp->p1];.  Vdb
12620 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 28 70  eBranchTaken( (p
12630 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
12640 5f 4e 75 6c 6c 29 21 3d 30 2c 20 32 29 3b 0a 20  _Null)!=0, 2);. 
12650 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
12660 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  s & MEM_Null)!=0
12670 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d   ){.    goto jum
12680 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62  p_to_p2;.  }.  b
12690 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
126a0 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50 31 20 50  de: NotNull P1 P
126b0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
126c0 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 4e  sis: if r[P1]!=N
126d0 55 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  ULL goto P2.**.*
126e0 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
126f0 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
12700 69 73 74 65 72 20 50 31 20 69 73 20 6e 6f 74 20  ister P1 is not 
12710 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65 20  NULL.  .*/.case 
12720 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20  OP_NotNull: {   
12730 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
12740 20 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20   as TK_NOTNULL, 
12750 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  jump, in1 */.  p
12760 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
12770 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e  >p1];.  VdbeBran
12780 63 68 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e  chTaken( (pIn1->
12790 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
127a0 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20  )==0, 2);.  if( 
127b0 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
127c0 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20  EM_Null)==0 ){. 
127d0 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
127e0 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
127f0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
12800 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20 50  olumn P1 P2 P3 P
12810 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
12820 3a 20 20 72 5b 50 33 5d 3d 50 58 0a 2a 2a 0a 2a  :  r[P3]=PX.**.*
12830 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
12840 64 61 74 61 20 74 68 61 74 20 63 75 72 73 6f 72  data that cursor
12850 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 20 61 73   P1 points to as
12860 20 61 20 73 74 72 75 63 74 75 72 65 20 62 75 69   a structure bui
12870 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20  lt using.** the 
12880 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72  MakeRecord instr
12890 75 63 74 69 6f 6e 2e 20 20 28 53 65 65 20 74 68  uction.  (See th
128a0 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70 63  e MakeRecord opc
128b0 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
128c0 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  al.** informatio
128d0 6e 20 61 62 6f 75 74 20 74 68 65 20 66 6f 72 6d  n about the form
128e0 61 74 20 6f 66 20 74 68 65 20 64 61 74 61 2e 29  at of the data.)
128f0 20 20 45 78 74 72 61 63 74 20 74 68 65 20 50 32    Extract the P2
12900 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72  -th column.** fr
12910 6f 6d 20 74 68 69 73 20 72 65 63 6f 72 64 2e 20  om this record. 
12920 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6c 65   If there are le
12930 73 73 20 74 68 61 74 20 28 50 32 2b 31 29 20 0a  ss that (P2+1) .
12940 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  ** values in the
12950 20 72 65 63 6f 72 64 2c 20 65 78 74 72 61 63 74   record, extract
12960 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54   a NULL..**.** T
12970 68 65 20 76 61 6c 75 65 20 65 78 74 72 61 63 74  he value extract
12980 65 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ed is stored in 
12990 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a  register P3..**.
129a0 2a 2a 20 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ** If the column
129b0 20 63 6f 6e 74 61 69 6e 73 20 66 65 77 65 72 20   contains fewer 
129c0 74 68 61 6e 20 50 32 20 66 69 65 6c 64 73 2c 20  than P2 fields, 
129d0 74 68 65 6e 20 65 78 74 72 61 63 74 20 61 20 4e  then extract a N
129e0 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20 69 66 20  ULL.  Or,.** if 
129f0 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20  the P4 argument 
12a00 69 73 20 61 20 50 34 5f 4d 45 4d 20 75 73 65 20  is a P4_MEM use 
12a10 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
12a20 20 50 34 20 61 72 67 75 6d 65 6e 74 20 61 73 0a   P4 argument as.
12a30 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 2e 0a 2a  ** the result..*
12a40 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
12a50 41 47 5f 43 4c 45 41 52 43 41 43 48 45 20 62 69  AG_CLEARCACHE bi
12a60 74 20 69 73 20 73 65 74 20 6f 6e 20 50 35 20 61  t is set on P5 a
12a70 6e 64 20 50 31 20 69 73 20 61 20 70 73 65 75 64  nd P1 is a pseud
12a80 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 2c 0a  o-table cursor,.
12a90 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 61 63 68  ** then the cach
12aa0 65 20 6f 66 20 74 68 65 20 63 75 72 73 6f 72 20  e of the cursor 
12ab0 69 73 20 72 65 73 65 74 20 70 72 69 6f 72 20 74  is reset prior t
12ac0 6f 20 65 78 74 72 61 63 74 69 6e 67 20 74 68 65  o extracting the
12ad0 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54 68 65 20   column..** The 
12ae0 66 69 72 73 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20  first OP_Column 
12af0 61 67 61 69 6e 73 74 20 61 20 70 73 65 75 64 6f  against a pseudo
12b00 2d 74 61 62 6c 65 20 61 66 74 65 72 20 74 68 65  -table after the
12b10 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f   value of the co
12b20 6e 74 65 6e 74 0a 2a 2a 20 72 65 67 69 73 74 65  ntent.** registe
12b30 72 20 68 61 73 20 63 68 61 6e 67 65 64 20 73 68  r has changed sh
12b40 6f 75 6c 64 20 68 61 76 65 20 74 68 69 73 20 62  ould have this b
12b50 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 49 66  it set..**.** If
12b60 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47   the OPFLAG_LENG
12b70 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47  THARG and OPFLAG
12b80 5f 54 59 50 45 4f 46 41 52 47 20 62 69 74 73 20  _TYPEOFARG bits 
12b90 61 72 65 20 73 65 74 20 6f 6e 20 50 35 20 77 68  are set on P5 wh
12ba0 65 6e 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74  en.** the result
12bb0 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 20 74   is guaranteed t
12bc0 6f 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 61  o only be used a
12bd0 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 6f  s the argument o
12be0 66 20 61 20 6c 65 6e 67 74 68 28 29 0a 2a 2a 20  f a length().** 
12bf0 6f 72 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63  or typeof() func
12c00 74 69 6f 6e 2c 20 72 65 73 70 65 63 74 69 76 65  tion, respective
12c10 6c 79 2e 20 20 54 68 65 20 6c 6f 61 64 69 6e 67  ly.  The loading
12c20 20 6f 66 20 6c 61 72 67 65 20 62 6c 6f 62 73 20   of large blobs 
12c30 63 61 6e 20 62 65 0a 2a 2a 20 73 6b 69 70 70 65  can be.** skippe
12c40 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 61  d for length() a
12c50 6e 64 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20 6c  nd all content l
12c60 6f 61 64 69 6e 67 20 63 61 6e 20 62 65 20 73 6b  oading can be sk
12c70 69 70 70 65 64 20 66 6f 72 20 74 79 70 65 6f 66  ipped for typeof
12c80 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  ()..*/.case OP_C
12c90 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 69 36 34 20 70  olumn: {.  i64 p
12ca0 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 20 2f 2a  ayloadSize64; /*
12cb0 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
12cc0 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a   in the record *
12cd0 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20  /.  int p2;     
12ce0 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e         /* column
12cf0 20 6e 75 6d 62 65 72 20 74 6f 20 72 65 74 72 69   number to retri
12d00 65 76 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  eve */.  VdbeCur
12d10 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54  sor *pC;    /* T
12d20 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 2a  he VDBE cursor *
12d30 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  /.  BtCursor *pC
12d40 72 73 72 3b 20 20 20 2f 2a 20 54 68 65 20 42 54  rsr;   /* The BT
12d50 72 65 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20  ree cursor */.  
12d60 75 33 32 20 2a 61 4f 66 66 73 65 74 3b 20 20 20  u32 *aOffset;   
12d70 20 20 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d     /* aOffset[i]
12d80 20 69 73 20 6f 66 66 73 65 74 20 74 6f 20 73 74   is offset to st
12d90 61 72 74 20 6f 66 20 64 61 74 61 20 66 6f 72 20  art of data for 
12da0 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  i-th column */. 
12db0 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20 20   int len;       
12dc0 20 20 20 20 2f 2a 20 54 68 65 20 6c 65 6e 67 74      /* The lengt
12dd0 68 20 6f 66 20 74 68 65 20 73 65 72 69 61 6c 69  h of the seriali
12de0 7a 65 64 20 64 61 74 61 20 66 6f 72 20 74 68 65  zed data for the
12df0 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74   column */.  int
12e00 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
12e10 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20  /* Loop counter 
12e20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b  */.  Mem *pDest;
12e30 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65 72 65          /* Where
12e40 20 74 6f 20 77 72 69 74 65 20 74 68 65 20 65 78   to write the ex
12e50 74 72 61 63 74 65 64 20 76 61 6c 75 65 20 2a 2f  tracted value */
12e60 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20  .  Mem sMem;    
12e70 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f        /* For sto
12e80 72 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20  ring the record 
12e90 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f  being decoded */
12ea0 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 44 61  .  const u8 *zDa
12eb0 74 61 3b 20 20 20 2f 2a 20 50 61 72 74 20 6f 66  ta;   /* Part of
12ec0 20 74 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e   the record bein
12ed0 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63  g decoded */.  c
12ee0 6f 6e 73 74 20 75 38 20 2a 7a 48 64 72 3b 20 20  onst u8 *zHdr;  
12ef0 20 20 2f 2a 20 4e 65 78 74 20 75 6e 70 61 72 73    /* Next unpars
12f00 65 64 20 62 79 74 65 20 6f 66 20 74 68 65 20 68  ed byte of the h
12f10 65 61 64 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 74  eader */.  const
12f20 20 75 38 20 2a 7a 45 6e 64 48 64 72 3b 20 2f 2a   u8 *zEndHdr; /*
12f30 20 50 6f 69 6e 74 65 72 20 74 6f 20 66 69 72 73   Pointer to firs
12f40 74 20 62 79 74 65 20 61 66 74 65 72 20 74 68 65  t byte after the
12f50 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 75 33 32   header */.  u32
12f60 20 6f 66 66 73 65 74 3b 20 20 20 20 20 20 20 20   offset;        
12f70 2f 2a 20 4f 66 66 73 65 74 20 69 6e 74 6f 20 74  /* Offset into t
12f80 68 65 20 64 61 74 61 20 2a 2f 0a 20 20 75 36 34  he data */.  u64
12f90 20 6f 66 66 73 65 74 36 34 3b 20 20 20 20 20 20   offset64;      
12fa0 2f 2a 20 36 34 2d 62 69 74 20 6f 66 66 73 65 74  /* 64-bit offset
12fb0 20 2a 2f 0a 20 20 75 33 32 20 61 76 61 69 6c 3b   */.  u32 avail;
12fc0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
12fd0 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 61  er of bytes of a
12fe0 76 61 69 6c 61 62 6c 65 20 64 61 74 61 20 2a 2f  vailable data */
12ff0 0a 20 20 75 33 32 20 74 3b 20 20 20 20 20 20 20  .  u32 t;       
13000 20 20 20 20 20 20 2f 2a 20 41 20 74 79 70 65 20        /* A type 
13010 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 72 65  code from the re
13020 63 6f 72 64 20 68 65 61 64 65 72 20 2a 2f 0a 20  cord header */. 
13030 20 4d 65 6d 20 2a 70 52 65 67 3b 20 20 20 20 20   Mem *pReg;     
13040 20 20 20 20 2f 2a 20 50 73 65 75 64 6f 54 61 62      /* PseudoTab
13050 6c 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  le input registe
13060 72 20 2a 2f 0a 0a 20 20 70 43 20 3d 20 70 2d 3e  r */..  pC = p->
13070 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
13080 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a    p2 = pOp->p2;.
13090 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63 75 72  .  /* If the cur
130a0 73 6f 72 20 63 61 63 68 65 20 69 73 20 73 74 61  sor cache is sta
130b0 6c 65 2c 20 62 72 69 6e 67 20 69 74 20 75 70 2d  le, bring it up-
130c0 74 6f 2d 64 61 74 65 20 2a 2f 0a 20 20 72 63 20  to-date */.  rc 
130d0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
130e0 73 6f 72 4d 6f 76 65 74 6f 28 26 70 43 2c 20 26  sorMoveto(&pC, &
130f0 70 32 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  p2);..  assert( 
13100 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
13110 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
13120 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
13130 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f  pDest = &aMem[pO
13140 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p3];.  memAbo
13150 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44  utToChange(p, pD
13160 65 73 74 29 3b 0a 20 20 61 73 73 65 72 74 28 20  est);.  assert( 
13170 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
13180 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
13190 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
131a0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
131b0 20 70 32 3c 70 43 2d 3e 6e 46 69 65 6c 64 20 29   p2<pC->nField )
131c0 3b 0a 20 20 61 4f 66 66 73 65 74 20 3d 20 70 43  ;.  aOffset = pC
131d0 2d 3e 61 4f 66 66 73 65 74 3b 0a 20 20 61 73 73  ->aOffset;.  ass
131e0 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
131f0 65 21 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20  e!=CURTYPE_VTAB 
13200 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
13210 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59  >eCurType!=CURTY
13220 50 45 5f 50 53 45 55 44 4f 20 7c 7c 20 70 43 2d  PE_PSEUDO || pC-
13230 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 61 73  >nullRow );.  as
13240 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
13250 70 65 21 3d 43 55 52 54 59 50 45 5f 53 4f 52 54  pe!=CURTYPE_SORT
13260 45 52 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  ER );.  pCrsr = 
13270 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a  pC->uc.pCursor;.
13280 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
13290 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
132a0 72 6f 72 3b 0a 20 20 69 66 28 20 70 43 2d 3e 63  ror;.  if( pC->c
132b0 61 63 68 65 53 74 61 74 75 73 21 3d 70 2d 3e 63  acheStatus!=p->c
132c0 61 63 68 65 43 74 72 20 29 7b 0a 20 20 20 20 69  acheCtr ){.    i
132d0 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  f( pC->nullRow )
132e0 7b 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e  {.      if( pC->
132f0 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
13300 45 5f 50 53 45 55 44 4f 20 29 7b 0a 20 20 20 20  E_PSEUDO ){.    
13310 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
13320 75 63 2e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  uc.pseudoTableRe
13330 67 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 70  g>0 );.        p
13340 52 65 67 20 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e  Reg = &aMem[pC->
13350 75 63 2e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  uc.pseudoTableRe
13360 67 5d 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  g];.        asse
13370 72 74 28 20 70 52 65 67 2d 3e 66 6c 61 67 73 20  rt( pReg->flags 
13380 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20  & MEM_Blob );.  
13390 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
133a0 6d 49 73 56 61 6c 69 64 28 70 52 65 67 29 20 29  mIsValid(pReg) )
133b0 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70 61  ;.        pC->pa
133c0 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e  yloadSize = pC->
133d0 73 7a 52 6f 77 20 3d 20 61 76 61 69 6c 20 3d 20  szRow = avail = 
133e0 70 52 65 67 2d 3e 6e 3b 0a 20 20 20 20 20 20 20  pReg->n;.       
133f0 20 70 43 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a   pC->aRow = (u8*
13400 29 70 52 65 67 2d 3e 7a 3b 0a 20 20 20 20 20 20  )pReg->z;.      
13410 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73  }else{.        s
13420 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
13430 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20  Null(pDest);.   
13440 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
13450 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d  umn_out;.      }
13460 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
13470 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
13480 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
13490 42 54 52 45 45 20 29 3b 0a 20 20 20 20 20 20 61  BTREE );.      a
134a0 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a  ssert( pCrsr );.
134b0 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73        if( pC->is
134c0 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20  Table==0 ){.    
134d0 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
134e0 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73  te3BtreeCursorIs
134f0 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a  Valid(pCrsr) );.
13500 20 20 20 20 20 20 20 20 56 56 41 5f 4f 4e 4c 59          VVA_ONLY
13510 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74  (rc =) sqlite3Bt
13520 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73 72  reeKeySize(pCrsr
13530 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  , &payloadSize64
13540 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
13550 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
13560 20 29 3b 20 2f 2a 20 54 72 75 65 20 62 65 63 61   ); /* True beca
13570 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76  use of CursorMov
13580 65 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65  eto() call above
13590 20 2a 2f 0a 20 20 20 20 20 20 20 20 2f 2a 20 73   */.        /* s
135a0 71 6c 69 74 65 33 42 74 72 65 65 50 61 72 73 65  qlite3BtreeParse
135b0 43 65 6c 6c 50 74 72 28 29 20 75 73 65 73 20 67  CellPtr() uses g
135c0 65 74 56 61 72 69 6e 74 33 32 28 29 20 74 6f 20  etVarint32() to 
135d0 65 78 74 72 61 63 74 20 74 68 65 0a 20 20 20 20  extract the.    
135e0 20 20 20 20 2a 2a 20 70 61 79 6c 6f 61 64 20 73      ** payload s
135f0 69 7a 65 2c 20 73 6f 20 69 74 20 69 73 20 69 6d  ize, so it is im
13600 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 70 61 79  possible for pay
13610 6c 6f 61 64 53 69 7a 65 36 34 20 74 6f 20 62 65  loadSize64 to be
13620 0a 20 20 20 20 20 20 20 20 2a 2a 20 6c 61 72 67  .        ** larg
13630 65 72 20 74 68 61 6e 20 33 32 20 62 69 74 73 2e  er than 32 bits.
13640 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65   */.        asse
13650 72 74 28 20 28 70 61 79 6c 6f 61 64 53 69 7a 65  rt( (payloadSize
13660 36 34 20 26 20 53 51 4c 49 54 45 5f 4d 41 58 5f  64 & SQLITE_MAX_
13670 55 33 32 29 3d 3d 28 75 36 34 29 70 61 79 6c 6f  U32)==(u64)paylo
13680 61 64 53 69 7a 65 36 34 20 29 3b 0a 20 20 20 20  adSize64 );.    
13690 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 73      pC->aRow = s
136a0 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 46 65  qlite3BtreeKeyFe
136b0 74 63 68 28 70 43 72 73 72 2c 20 26 61 76 61 69  tch(pCrsr, &avai
136c0 6c 29 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e  l);.        pC->
136d0 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 28 75  payloadSize = (u
136e0 33 32 29 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  32)payloadSize64
136f0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
13700 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73         assert( s
13710 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
13720 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20  rIsValid(pCrsr) 
13730 29 3b 0a 20 20 20 20 20 20 20 20 56 56 41 5f 4f  );.        VVA_O
13740 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65  NLY(rc =) sqlite
13750 33 42 74 72 65 65 44 61 74 61 53 69 7a 65 28 70  3BtreeDataSize(p
13760 43 72 73 72 2c 20 26 70 43 2d 3e 70 61 79 6c 6f  Crsr, &pC->paylo
13770 61 64 53 69 7a 65 29 3b 0a 20 20 20 20 20 20 20  adSize);.       
13780 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
13790 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 44  ITE_OK );   /* D
137a0 61 74 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74  ataSize() cannot
137b0 20 66 61 69 6c 20 2a 2f 0a 20 20 20 20 20 20 20   fail */.       
137c0 20 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71 6c 69   pC->aRow = sqli
137d0 74 65 33 42 74 72 65 65 44 61 74 61 46 65 74 63  te3BtreeDataFetc
137e0 68 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29  h(pCrsr, &avail)
137f0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
13800 61 73 73 65 72 74 28 20 61 76 61 69 6c 3c 3d 36  assert( avail<=6
13810 35 35 33 36 20 29 3b 20 20 2f 2a 20 4d 61 78 69  5536 );  /* Maxi
13820 6d 75 6d 20 70 61 67 65 20 73 69 7a 65 20 69 73  mum page size is
13830 20 36 34 4b 69 42 20 2a 2f 0a 20 20 20 20 20 20   64KiB */.      
13840 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53  if( pC->payloadS
13850 69 7a 65 20 3c 3d 20 28 75 33 32 29 61 76 61 69  ize <= (u32)avai
13860 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 70 43 2d  l ){.        pC-
13870 3e 73 7a 52 6f 77 20 3d 20 70 43 2d 3e 70 61 79  >szRow = pC->pay
13880 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20 20 20  loadSize;.      
13890 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 70 61  }else if( pC->pa
138a0 79 6c 6f 61 64 53 69 7a 65 20 3e 20 28 75 33 32  yloadSize > (u32
138b0 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  )db->aLimit[SQLI
138c0 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
138d0 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
138e0 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 20 20   too_big;.      
138f0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70  }else{.        p
13900 43 2d 3e 73 7a 52 6f 77 20 3d 20 61 76 61 69 6c  C->szRow = avail
13910 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
13920 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
13930 74 75 73 20 3d 20 70 2d 3e 63 61 63 68 65 43 74  tus = p->cacheCt
13940 72 3b 0a 20 20 20 20 70 43 2d 3e 69 48 64 72 4f  r;.    pC->iHdrO
13950 66 66 73 65 74 20 3d 20 67 65 74 56 61 72 69 6e  ffset = getVarin
13960 74 33 32 28 70 43 2d 3e 61 52 6f 77 2c 20 6f 66  t32(pC->aRow, of
13970 66 73 65 74 29 3b 0a 20 20 20 20 70 43 2d 3e 6e  fset);.    pC->n
13980 48 64 72 50 61 72 73 65 64 20 3d 20 30 3b 0a 20  HdrParsed = 0;. 
13990 20 20 20 61 4f 66 66 73 65 74 5b 30 5d 20 3d 20     aOffset[0] = 
139a0 6f 66 66 73 65 74 3b 0a 0a 0a 20 20 20 20 69 66  offset;...    if
139b0 28 20 61 76 61 69 6c 3c 6f 66 66 73 65 74 20 29  ( avail<offset )
139c0 7b 0a 20 20 20 20 20 20 2f 2a 20 70 43 2d 3e 61  {.      /* pC->a
139d0 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20 68 61 76  Row does not hav
139e0 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 65 6e  e to hold the en
139f0 74 69 72 65 20 72 6f 77 2c 20 62 75 74 20 69 74  tire row, but it
13a00 20 64 6f 65 73 20 61 74 20 6c 65 61 73 74 0a 20   does at least. 
13a10 20 20 20 20 20 2a 2a 20 6e 65 65 64 20 74 6f 20       ** need to 
13a20 63 6f 76 65 72 20 74 68 65 20 68 65 61 64 65 72  cover the header
13a30 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2e 20   of the record. 
13a40 20 49 66 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65   If pC->aRow doe
13a50 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 0a 20 20  s not contain.  
13a60 20 20 20 20 2a 2a 20 74 68 65 20 63 6f 6d 70 6c      ** the compl
13a70 65 74 65 20 68 65 61 64 65 72 2c 20 74 68 65 6e  ete header, then
13a80 20 73 65 74 20 69 74 20 74 6f 20 7a 65 72 6f 2c   set it to zero,
13a90 20 66 6f 72 63 69 6e 67 20 74 68 65 20 68 65 61   forcing the hea
13aa0 64 65 72 20 74 6f 20 62 65 0a 20 20 20 20 20 20  der to be.      
13ab0 2a 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61  ** dynamically a
13ac0 6c 6c 6f 63 61 74 65 64 2e 20 2a 2f 0a 20 20 20  llocated. */.   
13ad0 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 30 3b     pC->aRow = 0;
13ae0 0a 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77  .      pC->szRow
13af0 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20 2f 2a 20   = 0;..      /* 
13b00 4d 61 6b 65 20 73 75 72 65 20 61 20 63 6f 72 72  Make sure a corr
13b10 75 70 74 20 64 61 74 61 62 61 73 65 20 68 61 73  upt database has
13b20 20 6e 6f 74 20 67 69 76 65 6e 20 75 73 20 61 6e   not given us an
13b30 20 6f 76 65 72 73 69 7a 65 20 68 65 61 64 65 72   oversize header
13b40 2e 0a 20 20 20 20 20 20 2a 2a 20 44 6f 20 74 68  ..      ** Do th
13b50 69 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20  is now to avoid 
13b60 61 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f  an oversize memo
13b70 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20  ry allocation.. 
13b80 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a       **.      **
13b90 20 54 79 70 65 20 65 6e 74 72 69 65 73 20 63 61   Type entries ca
13ba0 6e 20 62 65 20 62 65 74 77 65 65 6e 20 31 20 61  n be between 1 a
13bb0 6e 64 20 35 20 62 79 74 65 73 20 65 61 63 68 2e  nd 5 bytes each.
13bc0 20 20 42 75 74 20 34 20 61 6e 64 20 35 20 62 79    But 4 and 5 by
13bd0 74 65 0a 20 20 20 20 20 20 2a 2a 20 74 79 70 65  te.      ** type
13be0 73 20 75 73 65 20 73 6f 20 6d 75 63 68 20 64 61  s use so much da
13bf0 74 61 20 73 70 61 63 65 20 74 68 61 74 20 74 68  ta space that th
13c00 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20  ere can only be 
13c10 34 30 39 36 20 61 6e 64 20 33 32 20 6f 66 0a 20  4096 and 32 of. 
13c20 20 20 20 20 20 2a 2a 20 74 68 65 6d 2c 20 72 65       ** them, re
13c30 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53 6f 20  spectively.  So 
13c40 74 68 65 20 6d 61 78 69 6d 75 6d 20 68 65 61 64  the maximum head
13c50 65 72 20 6c 65 6e 67 74 68 20 72 65 73 75 6c 74  er length result
13c60 73 20 66 72 6f 6d 20 61 0a 20 20 20 20 20 20 2a  s from a.      *
13c70 2a 20 33 2d 62 79 74 65 20 74 79 70 65 20 66 6f  * 3-byte type fo
13c80 72 20 65 61 63 68 20 6f 66 20 74 68 65 20 6d 61  r each of the ma
13c90 78 69 6d 75 6d 20 6f 66 20 33 32 37 36 38 20 63  ximum of 32768 c
13ca0 6f 6c 75 6d 6e 73 20 70 6c 75 73 20 74 68 72 65  olumns plus thre
13cb0 65 0a 20 20 20 20 20 20 2a 2a 20 65 78 74 72 61  e.      ** extra
13cc0 20 62 79 74 65 73 20 66 6f 72 20 74 68 65 20 68   bytes for the h
13cd0 65 61 64 65 72 20 6c 65 6e 67 74 68 20 69 74 73  eader length its
13ce0 65 6c 66 2e 20 20 33 32 37 36 38 2a 33 20 2b 20  elf.  32768*3 + 
13cf0 33 20 3d 20 39 38 33 30 37 2e 0a 20 20 20 20 20  3 = 98307..     
13d00 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 6f 66   */.      if( of
13d10 66 73 65 74 20 3e 20 39 38 33 30 37 20 7c 7c 20  fset > 98307 || 
13d20 6f 66 66 73 65 74 20 3e 20 70 43 2d 3e 70 61 79  offset > pC->pay
13d30 6c 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20 20 20  loadSize ){.    
13d40 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
13d50 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20  CORRUPT_BKPT;.  
13d60 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
13d70 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
13d80 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20       }.    }..  
13d90 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69    /* The followi
13da0 6e 67 20 67 6f 74 6f 20 69 73 20 61 6e 20 6f 70  ng goto is an op
13db0 74 69 6d 69 7a 61 74 69 6f 6e 2e 20 20 49 74 20  timization.  It 
13dc0 63 61 6e 20 62 65 20 6f 6d 69 74 74 65 64 20 61  can be omitted a
13dd0 6e 64 0a 20 20 20 20 2a 2a 20 65 76 65 72 79 74  nd.    ** everyt
13de0 68 69 6e 67 20 77 69 6c 6c 20 73 74 69 6c 6c 20  hing will still 
13df0 77 6f 72 6b 2e 20 20 42 75 74 20 4f 50 5f 43 6f  work.  But OP_Co
13e00 6c 75 6d 6e 20 69 73 20 6d 65 61 73 75 72 61 62  lumn is measurab
13e10 6c 79 20 66 61 73 74 65 72 0a 20 20 20 20 2a 2a  ly faster.    **
13e20 20 62 79 20 73 6b 69 70 70 69 6e 67 20 74 68 65   by skipping the
13e30 20 73 75 62 73 65 71 75 65 6e 74 20 63 6f 6e 64   subsequent cond
13e40 69 74 69 6f 6e 61 6c 2c 20 77 68 69 63 68 20 69  itional, which i
13e50 73 20 61 6c 77 61 79 73 20 74 72 75 65 2e 0a 20  s always true.. 
13e60 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74     */.    assert
13e70 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64  ( pC->nHdrParsed
13e80 3c 3d 70 32 20 29 3b 20 20 20 20 20 20 20 20 20  <=p2 );         
13e90 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e 61 6c 20 73  /* Conditional s
13ea0 6b 69 70 70 65 64 20 2a 2f 0a 20 20 20 20 67 6f  kipped */.    go
13eb0 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61  to op_column_rea
13ec0 64 5f 68 65 61 64 65 72 3b 0a 20 20 7d 0a 0a 20  d_header;.  }.. 
13ed0 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 74   /* Make sure at
13ee0 20 6c 65 61 73 74 20 74 68 65 20 66 69 72 73 74   least the first
13ef0 20 70 32 2b 31 20 65 6e 74 72 69 65 73 20 6f 66   p2+1 entries of
13f00 20 74 68 65 20 68 65 61 64 65 72 20 68 61 76 65   the header have
13f10 20 62 65 65 6e 0a 20 20 2a 2a 20 70 61 72 73 65   been.  ** parse
13f20 64 20 61 6e 64 20 76 61 6c 69 64 20 69 6e 66 6f  d and valid info
13f30 72 6d 61 74 69 6f 6e 20 69 73 20 69 6e 20 61 4f  rmation is in aO
13f40 66 66 73 65 74 5b 5d 20 61 6e 64 20 70 43 2d 3e  ffset[] and pC->
13f50 61 54 79 70 65 5b 5d 2e 0a 20 20 2a 2f 0a 20 20  aType[]..  */.  
13f60 69 66 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73  if( pC->nHdrPars
13f70 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20 2f 2a  ed<=p2 ){.    /*
13f80 20 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72   If there is mor
13f90 65 20 68 65 61 64 65 72 20 61 76 61 69 6c 61 62  e header availab
13fa0 6c 65 20 66 6f 72 20 70 61 72 73 69 6e 67 20 69  le for parsing i
13fb0 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20 74 72  n the record, tr
13fc0 79 0a 20 20 20 20 2a 2a 20 74 6f 20 65 78 74 72  y.    ** to extr
13fd0 61 63 74 20 61 64 64 69 74 69 6f 6e 61 6c 20 66  act additional f
13fe0 69 65 6c 64 73 20 75 70 20 74 68 72 6f 75 67 68  ields up through
13ff0 20 74 68 65 20 70 32 2b 31 2d 74 68 20 66 69 65   the p2+1-th fie
14000 6c 64 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6f  ld .    */.    o
14010 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68 65  p_column_read_he
14020 61 64 65 72 3a 0a 20 20 20 20 69 66 28 20 70 43  ader:.    if( pC
14030 2d 3e 69 48 64 72 4f 66 66 73 65 74 3c 61 4f 66  ->iHdrOffset<aOf
14040 66 73 65 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20  fset[0] ){.     
14050 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 7a 44   /* Make sure zD
14060 61 74 61 20 70 6f 69 6e 74 73 20 74 6f 20 65 6e  ata points to en
14070 6f 75 67 68 20 6f 66 20 74 68 65 20 72 65 63 6f  ough of the reco
14080 72 64 20 74 6f 20 63 6f 76 65 72 20 74 68 65 20  rd to cover the 
14090 68 65 61 64 65 72 2e 20 2a 2f 0a 20 20 20 20 20  header. */.     
140a0 20 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30   if( pC->aRow==0
140b0 20 29 7b 0a 20 20 20 20 20 20 20 20 6d 65 6d 73   ){.        mems
140c0 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a  et(&sMem, 0, siz
140d0 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 20 20  eof(sMem));.    
140e0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
140f0 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
14100 28 70 43 72 73 72 2c 20 30 2c 20 61 4f 66 66 73  (pCrsr, 0, aOffs
14110 65 74 5b 30 5d 2c 20 21 70 43 2d 3e 69 73 54 61  et[0], !pC->isTa
14120 62 6c 65 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20  ble, &sMem);.   
14130 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
14140 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
14150 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
14160 3b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20  ;.        zData 
14170 3d 20 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20  = (u8*)sMem.z;. 
14180 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
14190 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e      zData = pC->
141a0 61 52 6f 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20  aRow;.      }.  
141b0 0a 20 20 20 20 20 20 2f 2a 20 46 69 6c 6c 20 69  .      /* Fill i
141c0 6e 20 70 43 2d 3e 61 54 79 70 65 5b 69 5d 20 61  n pC->aType[i] a
141d0 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d 20 76 61  nd aOffset[i] va
141e0 6c 75 65 73 20 74 68 72 6f 75 67 68 20 74 68 65  lues through the
141f0 20 70 32 2d 74 68 20 66 69 65 6c 64 2e 20 2a 2f   p2-th field. */
14200 0a 20 20 20 20 20 20 69 20 3d 20 70 43 2d 3e 6e  .      i = pC->n
14210 48 64 72 50 61 72 73 65 64 3b 0a 20 20 20 20 20  HdrParsed;.     
14220 20 6f 66 66 73 65 74 36 34 20 3d 20 61 4f 66 66   offset64 = aOff
14230 73 65 74 5b 69 5d 3b 0a 20 20 20 20 20 20 7a 48  set[i];.      zH
14240 64 72 20 3d 20 7a 44 61 74 61 20 2b 20 70 43 2d  dr = zData + pC-
14250 3e 69 48 64 72 4f 66 66 73 65 74 3b 0a 20 20 20  >iHdrOffset;.   
14260 20 20 20 7a 45 6e 64 48 64 72 20 3d 20 7a 44 61     zEndHdr = zDa
14270 74 61 20 2b 20 61 4f 66 66 73 65 74 5b 30 5d 3b  ta + aOffset[0];
14280 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 69  .      assert( i
14290 3c 3d 70 32 20 26 26 20 7a 48 64 72 3c 7a 45 6e  <=p2 && zHdr<zEn
142a0 64 48 64 72 20 29 3b 0a 20 20 20 20 20 20 64 6f  dHdr );.      do
142b0 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 74  {.        if( (t
142c0 20 3d 20 7a 48 64 72 5b 30 5d 29 3c 30 78 38 30   = zHdr[0])<0x80
142d0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 48   ){.          zH
142e0 64 72 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20  dr++;.          
142f0 6f 66 66 73 65 74 36 34 20 2b 3d 20 73 71 6c 69  offset64 += sqli
14300 74 65 33 56 64 62 65 4f 6e 65 42 79 74 65 53 65  te3VdbeOneByteSe
14310 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a  rialTypeLen(t);.
14320 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
14330 20 20 20 20 20 20 20 20 20 7a 48 64 72 20 2b 3d           zHdr +=
14340 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
14350 74 33 32 28 7a 48 64 72 2c 20 26 74 29 3b 0a 20  t32(zHdr, &t);. 
14360 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 36           offset6
14370 34 20 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65  4 += sqlite3Vdbe
14380 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29  SerialTypeLen(t)
14390 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
143a0 20 20 20 20 70 43 2d 3e 61 54 79 70 65 5b 69 2b      pC->aType[i+
143b0 2b 5d 20 3d 20 74 3b 0a 20 20 20 20 20 20 20 20  +] = t;.        
143c0 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 28 75 33  aOffset[i] = (u3
143d0 32 29 28 6f 66 66 73 65 74 36 34 20 26 20 30 78  2)(offset64 & 0x
143e0 66 66 66 66 66 66 66 66 29 3b 0a 20 20 20 20 20  ffffffff);.     
143f0 20 7d 77 68 69 6c 65 28 20 69 3c 3d 70 32 20 26   }while( i<=p2 &
14400 26 20 7a 48 64 72 3c 7a 45 6e 64 48 64 72 20 29  & zHdr<zEndHdr )
14410 3b 0a 20 20 20 20 20 20 70 43 2d 3e 6e 48 64 72  ;.      pC->nHdr
14420 50 61 72 73 65 64 20 3d 20 69 3b 0a 20 20 20 20  Parsed = i;.    
14430 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74    pC->iHdrOffset
14440 20 3d 20 28 75 33 32 29 28 7a 48 64 72 20 2d 20   = (u32)(zHdr - 
14450 7a 44 61 74 61 29 3b 0a 20 20 20 20 20 20 69 66  zData);.      if
14460 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 20  ( pC->aRow==0 ) 
14470 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
14480 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20  lease(&sMem);.  
14490 0a 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72 65  .      /* The re
144a0 63 6f 72 64 20 69 73 20 63 6f 72 72 75 70 74 20  cord is corrupt 
144b0 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20 66 6f  if any of the fo
144c0 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 72 75 65  llowing are true
144d0 3a 0a 20 20 20 20 20 20 2a 2a 20 28 31 29 20 74  :.      ** (1) t
144e0 68 65 20 62 79 74 65 73 20 6f 66 20 74 68 65 20  he bytes of the 
144f0 68 65 61 64 65 72 20 65 78 74 65 6e 64 20 70 61  header extend pa
14500 73 74 20 74 68 65 20 64 65 63 6c 61 72 65 64 20  st the declared 
14510 68 65 61 64 65 72 20 73 69 7a 65 0a 20 20 20 20  header size.    
14520 20 20 2a 2a 20 28 32 29 20 74 68 65 20 65 6e 74    ** (2) the ent
14530 69 72 65 20 68 65 61 64 65 72 20 77 61 73 20 75  ire header was u
14540 73 65 64 20 62 75 74 20 6e 6f 74 20 61 6c 6c 20  sed but not all 
14550 64 61 74 61 20 77 61 73 20 75 73 65 64 0a 20 20  data was used.  
14560 20 20 20 20 2a 2a 20 28 33 29 20 74 68 65 20 65      ** (3) the e
14570 6e 64 20 6f 66 20 74 68 65 20 64 61 74 61 20 65  nd of the data e
14580 78 74 65 6e 64 73 20 62 65 79 6f 6e 64 20 74 68  xtends beyond th
14590 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63  e end of the rec
145a0 6f 72 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ord..      */.  
145b0 20 20 20 20 69 66 28 20 28 7a 48 64 72 3e 3d 7a      if( (zHdr>=z
145c0 45 6e 64 48 64 72 20 26 26 20 28 7a 48 64 72 3e  EndHdr && (zHdr>
145d0 7a 45 6e 64 48 64 72 20 7c 7c 20 6f 66 66 73 65  zEndHdr || offse
145e0 74 36 34 21 3d 70 43 2d 3e 70 61 79 6c 6f 61 64  t64!=pC->payload
145f0 53 69 7a 65 29 29 0a 20 20 20 20 20 20 20 7c 7c  Size)).       ||
14600 20 28 6f 66 66 73 65 74 36 34 20 3e 20 70 43 2d   (offset64 > pC-
14610 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20  >payloadSize).  
14620 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 72      ){.        r
14630 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  c = SQLITE_CORRU
14640 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 20  PT_BKPT;.       
14650 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
14660 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
14670 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
14680 20 20 20 74 20 3d 20 30 3b 0a 20 20 20 20 7d 0a     t = 0;.    }.
14690 0a 20 20 20 20 2f 2a 20 49 66 20 61 66 74 65 72  .    /* If after
146a0 20 74 72 79 69 6e 67 20 74 6f 20 65 78 74 72 61   trying to extra
146b0 63 74 20 6e 65 77 20 65 6e 74 72 69 65 73 20 66  ct new entries f
146c0 72 6f 6d 20 74 68 65 20 68 65 61 64 65 72 2c 20  rom the header, 
146d0 6e 48 64 72 50 61 72 73 65 64 20 69 73 0a 20 20  nHdrParsed is.  
146e0 20 20 2a 2a 20 73 74 69 6c 6c 20 6e 6f 74 20 75    ** still not u
146f0 70 20 74 6f 20 70 32 2c 20 74 68 61 74 20 6d 65  p to p2, that me
14700 61 6e 73 20 74 68 61 74 20 74 68 65 20 72 65 63  ans that the rec
14710 6f 72 64 20 68 61 73 20 66 65 77 65 72 20 74 68  ord has fewer th
14720 61 6e 20 70 32 0a 20 20 20 20 2a 2a 20 63 6f 6c  an p2.    ** col
14730 75 6d 6e 73 2e 20 20 53 6f 20 74 68 65 20 72 65  umns.  So the re
14740 73 75 6c 74 20 77 69 6c 6c 20 62 65 20 65 69 74  sult will be eit
14750 68 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 20  her the default 
14760 76 61 6c 75 65 20 6f 72 20 61 20 4e 55 4c 4c 2e  value or a NULL.
14770 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
14780 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d  pC->nHdrParsed<=
14790 70 32 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  p2 ){.      if( 
147a0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
147b0 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 20 20 73  MEM ){.        s
147c0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
147d0 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20  llowCopy(pDest, 
147e0 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45  pOp->p4.pMem, ME
147f0 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20 20  M_Static);.     
14800 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
14810 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
14820 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20  tNull(pDest);.  
14830 20 20 20 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f      }.      goto
14840 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a   op_column_out;.
14850 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
14860 20 20 20 74 20 3d 20 70 43 2d 3e 61 54 79 70 65     t = pC->aType
14870 5b 70 32 5d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  [p2];.  }..  /* 
14880 45 78 74 72 61 63 74 20 74 68 65 20 63 6f 6e 74  Extract the cont
14890 65 6e 74 20 66 6f 72 20 74 68 65 20 70 32 2b 31  ent for the p2+1
148a0 2d 74 68 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6e  -th column.  Con
148b0 74 72 6f 6c 20 63 61 6e 20 6f 6e 6c 79 0a 20 20  trol can only.  
148c0 2a 2a 20 72 65 61 63 68 20 74 68 69 73 20 70 6f  ** reach this po
148d0 69 6e 74 20 69 66 20 61 4f 66 66 73 65 74 5b 70  int if aOffset[p
148e0 32 5d 2c 20 61 4f 66 66 73 65 74 5b 70 32 2b 31  2], aOffset[p2+1
148f0 5d 2c 20 61 6e 64 20 70 43 2d 3e 61 54 79 70 65  ], and pC->aType
14900 5b 70 32 5d 20 61 72 65 0a 20 20 2a 2a 20 61 6c  [p2] are.  ** al
14910 6c 20 76 61 6c 69 64 2e 0a 20 20 2a 2f 0a 20 20  l valid..  */.  
14920 61 73 73 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e  assert( p2<pC->n
14930 48 64 72 50 61 72 73 65 64 20 29 3b 0a 20 20 61  HdrParsed );.  a
14940 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
14950 45 5f 4f 4b 20 29 3b 0a 20 20 61 73 73 65 72 74  E_OK );.  assert
14960 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  ( sqlite3VdbeChe
14970 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28  ckMemInvariants(
14980 70 44 65 73 74 29 20 29 3b 0a 20 20 69 66 28 20  pDest) );.  if( 
14990 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70  VdbeMemDynamic(p
149a0 44 65 73 74 29 20 29 20 73 71 6c 69 74 65 33 56  Dest) ) sqlite3V
149b0 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44  dbeMemSetNull(pD
149c0 65 73 74 29 3b 0a 20 20 61 73 73 65 72 74 28 20  est);.  assert( 
149d0 74 3d 3d 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d  t==pC->aType[p2]
149e0 20 29 3b 0a 20 20 70 44 65 73 74 2d 3e 65 6e 63   );.  pDest->enc
149f0 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 69   = encoding;.  i
14a00 66 28 20 70 43 2d 3e 73 7a 52 6f 77 3e 3d 61 4f  f( pC->szRow>=aO
14a10 66 66 73 65 74 5b 70 32 2b 31 5d 20 29 7b 0a 20  ffset[p2+1] ){. 
14a20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68     /* This is th
14a30 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 68  e common case wh
14a40 65 72 65 20 74 68 65 20 64 65 73 69 72 65 64 20  ere the desired 
14a50 63 6f 6e 74 65 6e 74 20 66 69 74 73 20 6f 6e 20  content fits on 
14a60 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 20 20 20  the original.   
14a70 20 2a 2a 20 70 61 67 65 20 2d 20 77 68 65 72 65   ** page - where
14a80 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 20   the content is 
14a90 6e 6f 74 20 6f 6e 20 61 6e 20 6f 76 65 72 66 6c  not on an overfl
14aa0 6f 77 20 70 61 67 65 20 2a 2f 0a 20 20 20 20 7a  ow page */.    z
14ab0 44 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77 20  Data = pC->aRow 
14ac0 2b 20 61 4f 66 66 73 65 74 5b 70 32 5d 3b 0a 20  + aOffset[p2];. 
14ad0 20 20 20 69 66 28 20 74 3c 31 32 20 29 7b 0a 20     if( t<12 ){. 
14ae0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
14af0 53 65 72 69 61 6c 47 65 74 28 7a 44 61 74 61 2c  SerialGet(zData,
14b00 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20   t, pDest);.    
14b10 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20  }else{.      /* 
14b20 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61  If the column va
14b30 6c 75 65 20 69 73 20 61 20 73 74 72 69 6e 67 2c  lue is a string,
14b40 20 77 65 20 6e 65 65 64 20 61 20 70 65 72 73 69   we need a persi
14b50 73 74 65 6e 74 20 76 61 6c 75 65 2c 20 6e 6f 74  stent value, not
14b60 0a 20 20 20 20 20 20 2a 2a 20 61 20 4d 45 4d 5f  .      ** a MEM_
14b70 45 70 68 65 6d 20 76 61 6c 75 65 2e 20 20 54 68  Ephem value.  Th
14b80 69 73 20 62 72 61 6e 63 68 20 69 73 20 61 20 66  is branch is a f
14b90 61 73 74 20 73 68 6f 72 74 2d 63 75 74 20 74 68  ast short-cut th
14ba0 61 74 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74  at is equivalent
14bb0 0a 20 20 20 20 20 20 2a 2a 20 74 6f 20 63 61 6c  .      ** to cal
14bc0 6c 69 6e 67 20 73 71 6c 69 74 65 33 56 64 62 65  ling sqlite3Vdbe
14bd0 53 65 72 69 61 6c 47 65 74 28 29 20 61 6e 64 20  SerialGet() and 
14be0 73 71 6c 69 74 65 33 56 64 62 65 44 65 65 70 68  sqlite3VdbeDeeph
14bf0 65 6d 65 72 61 6c 69 7a 65 28 29 2e 0a 20 20 20  emeralize()..   
14c00 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 74 61 74     */.      stat
14c10 69 63 20 63 6f 6e 73 74 20 75 31 36 20 61 46 6c  ic const u16 aFl
14c20 61 67 5b 5d 20 3d 20 7b 20 4d 45 4d 5f 42 6c 6f  ag[] = { MEM_Blo
14c30 62 2c 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 54  b, MEM_Str|MEM_T
14c40 65 72 6d 20 7d 3b 0a 20 20 20 20 20 20 70 44 65  erm };.      pDe
14c50 73 74 2d 3e 6e 20 3d 20 6c 65 6e 20 3d 20 28 74  st->n = len = (t
14c60 2d 31 32 29 2f 32 3b 0a 20 20 20 20 20 20 69 66  -12)/2;.      if
14c70 28 20 70 44 65 73 74 2d 3e 73 7a 4d 61 6c 6c 6f  ( pDest->szMallo
14c80 63 20 3c 20 6c 65 6e 2b 32 20 29 7b 0a 20 20 20  c < len+2 ){.   
14c90 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67       pDest->flag
14ca0 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
14cb0 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
14cc0 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 44 65  3VdbeMemGrow(pDe
14cd0 73 74 2c 20 6c 65 6e 2b 32 2c 20 30 29 20 29 20  st, len+2, 0) ) 
14ce0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
14cf0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
14d00 20 20 70 44 65 73 74 2d 3e 7a 20 3d 20 70 44 65    pDest->z = pDe
14d10 73 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20  st->zMalloc;.   
14d20 20 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70     }.      memcp
14d30 79 28 70 44 65 73 74 2d 3e 7a 2c 20 7a 44 61 74  y(pDest->z, zDat
14d40 61 2c 20 6c 65 6e 29 3b 0a 20 20 20 20 20 20 70  a, len);.      p
14d50 44 65 73 74 2d 3e 7a 5b 6c 65 6e 5d 20 3d 20 30  Dest->z[len] = 0
14d60 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 7a  ;.      pDest->z
14d70 5b 6c 65 6e 2b 31 5d 20 3d 20 30 3b 0a 20 20 20  [len+1] = 0;.   
14d80 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20     pDest->flags 
14d90 3d 20 61 46 6c 61 67 5b 74 26 31 5d 3b 0a 20 20  = aFlag[t&1];.  
14da0 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
14db0 20 2f 2a 20 54 68 69 73 20 62 72 61 6e 63 68 20   /* This branch 
14dc0 68 61 70 70 65 6e 73 20 6f 6e 6c 79 20 77 68 65  happens only whe
14dd0 6e 20 63 6f 6e 74 65 6e 74 20 69 73 20 6f 6e 20  n content is on 
14de0 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 73 20 2a  overflow pages *
14df0 2f 0a 20 20 20 20 69 66 28 20 28 28 70 4f 70 2d  /.    if( ((pOp-
14e00 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 4c 45  >p5 & (OPFLAG_LE
14e10 4e 47 54 48 41 52 47 7c 4f 50 46 4c 41 47 5f 54  NGTHARG|OPFLAG_T
14e20 59 50 45 4f 46 41 52 47 29 29 21 3d 30 0a 20 20  YPEOFARG))!=0.  
14e30 20 20 20 20 20 20 20 20 26 26 20 28 28 74 3e 3d          && ((t>=
14e40 31 32 20 26 26 20 28 74 26 31 29 3d 3d 30 29 20  12 && (t&1)==0) 
14e50 7c 7c 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50  || (pOp->p5 & OP
14e60 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29 21  FLAG_TYPEOFARG)!
14e70 3d 30 29 29 0a 20 20 20 20 20 7c 7c 20 28 6c 65  =0)).     || (le
14e80 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  n = sqlite3VdbeS
14e90 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29 29  erialTypeLen(t))
14ea0 3d 3d 30 0a 20 20 20 20 29 7b 0a 20 20 20 20 20  ==0.    ){.     
14eb0 20 2f 2a 20 43 6f 6e 74 65 6e 74 20 69 73 20 69   /* Content is i
14ec0 72 72 65 6c 65 76 61 6e 74 20 66 6f 72 0a 20 20  rrelevant for.  
14ed0 20 20 20 20 2a 2a 20 20 20 20 31 2e 20 74 68 65      **    1. the
14ee0 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69   typeof() functi
14ef0 6f 6e 2c 0a 20 20 20 20 20 20 2a 2a 20 20 20 20  on,.      **    
14f00 32 2e 20 74 68 65 20 6c 65 6e 67 74 68 28 58 29  2. the length(X)
14f10 20 66 75 6e 63 74 69 6f 6e 20 69 66 20 58 20 69   function if X i
14f20 73 20 61 20 62 6c 6f 62 2c 20 61 6e 64 0a 20 20  s a blob, and.  
14f30 20 20 20 20 2a 2a 20 20 20 20 33 2e 20 69 66 20      **    3. if 
14f40 74 68 65 20 63 6f 6e 74 65 6e 74 20 6c 65 6e 67  the content leng
14f50 74 68 20 69 73 20 7a 65 72 6f 2e 0a 20 20 20 20  th is zero..    
14f60 20 20 2a 2a 20 53 6f 20 77 65 20 6d 69 67 68 74    ** So we might
14f70 20 61 73 20 77 65 6c 6c 20 75 73 65 20 62 6f 67   as well use bog
14f80 75 73 20 63 6f 6e 74 65 6e 74 20 72 61 74 68 65  us content rathe
14f90 72 20 74 68 61 6e 20 72 65 61 64 69 6e 67 0a 20  r than reading. 
14fa0 20 20 20 20 20 2a 2a 20 63 6f 6e 74 65 6e 74 20       ** content 
14fb0 66 72 6f 6d 20 64 69 73 6b 2e 20 2a 2f 0a 20 20  from disk. */.  
14fc0 20 20 20 20 73 74 61 74 69 63 20 75 38 20 61 5a      static u8 aZ
14fd0 65 72 6f 5b 38 5d 3b 20 20 2f 2a 20 54 68 69 73  ero[8];  /* This
14fe0 20 69 73 20 74 68 65 20 62 6f 67 75 73 20 63 6f   is the bogus co
14ff0 6e 74 65 6e 74 20 2a 2f 0a 20 20 20 20 20 20 73  ntent */.      s
15000 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
15010 47 65 74 28 61 5a 65 72 6f 2c 20 74 2c 20 70 44  Get(aZero, t, pD
15020 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  est);.    }else{
15030 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
15040 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74  te3VdbeMemFromBt
15050 72 65 65 28 70 43 72 73 72 2c 20 61 4f 66 66 73  ree(pCrsr, aOffs
15060 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20 21 70 43  et[p2], len, !pC
15070 2d 3e 69 73 54 61 62 6c 65 2c 0a 20 20 20 20 20  ->isTable,.     
15080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44                pD
150a0 65 73 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20  est);.      if( 
150b0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
150c0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
150d0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 73  o_error;.      s
150e0 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
150f0 47 65 74 28 28 63 6f 6e 73 74 20 75 38 2a 29 70  Get((const u8*)p
15100 44 65 73 74 2d 3e 7a 2c 20 74 2c 20 70 44 65 73  Dest->z, t, pDes
15110 74 29 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d  t);.      pDest-
15120 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 45  >flags &= ~MEM_E
15130 70 68 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  phem;.    }.  }.
15140 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a  .op_column_out:.
15150 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
15160 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 20 20  BSIZE(pDest);.  
15170 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
15180 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a  Op->p3, pDest);.
15190 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
151a0 70 63 6f 64 65 3a 20 41 66 66 69 6e 69 74 79 20  pcode: Affinity 
151b0 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20  P1 P2 * P4 *.** 
151c0 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e 69  Synopsis: affini
151d0 74 79 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a  ty(r[P1@P2]).**.
151e0 2a 2a 20 41 70 70 6c 79 20 61 66 66 69 6e 69 74  ** Apply affinit
151f0 69 65 73 20 74 6f 20 61 20 72 61 6e 67 65 20 6f  ies to a range o
15200 66 20 50 32 20 72 65 67 69 73 74 65 72 73 20 73  f P2 registers s
15210 74 61 72 74 69 6e 67 20 77 69 74 68 20 50 31 2e  tarting with P1.
15220 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 73  .**.** P4 is a s
15230 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32  tring that is P2
15240 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67   characters long
15250 2e 20 54 68 65 20 6e 74 68 20 63 68 61 72 61 63  . The nth charac
15260 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74  ter of the.** st
15270 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74  ring indicates t
15280 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  he column affini
15290 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62  ty that should b
152a0 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 6e  e used for the n
152b0 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c  th.** memory cel
152c0 6c 20 69 6e 20 74 68 65 20 72 61 6e 67 65 2e 0a  l in the range..
152d0 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66 69 6e  */.case OP_Affin
152e0 69 74 79 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63  ity: {.  const c
152f0 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20  har *zAffinity; 
15300 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
15310 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20  y to be applied 
15320 2a 2f 0a 20 20 63 68 61 72 20 63 41 66 66 3b 20  */.  char cAff; 
15330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
15340 20 41 20 73 69 6e 67 6c 65 20 63 68 61 72 61 63   A single charac
15350 74 65 72 20 6f 66 20 61 66 66 69 6e 69 74 79 20  ter of affinity 
15360 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e 69 74 79 20  */..  zAffinity 
15370 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61  = pOp->p4.z;.  a
15380 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79  ssert( zAffinity
15390 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
153a0 20 7a 41 66 66 69 6e 69 74 79 5b 70 4f 70 2d 3e   zAffinity[pOp->
153b0 70 32 5d 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31  p2]==0 );.  pIn1
153c0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
153d0 5d 3b 0a 20 20 77 68 69 6c 65 28 20 28 63 41 66  ];.  while( (cAf
153e0 66 20 3d 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b  f = *(zAffinity+
153f0 2b 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 61 73  +))!=0 ){.    as
15400 73 65 72 74 28 20 70 49 6e 31 20 3c 3d 20 26 70  sert( pIn1 <= &p
15410 2d 3e 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d  ->aMem[(p->nMem-
15420 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a  p->nCursor)] );.
15430 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
15440 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a  sValid(pIn1) );.
15450 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74      applyAffinit
15460 79 28 70 49 6e 31 2c 20 63 41 66 66 2c 20 65 6e  y(pIn1, cAff, en
15470 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 70 49 6e  coding);.    pIn
15480 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  1++;.  }.  break
15490 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
154a0 4d 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50 32  MakeRecord P1 P2
154b0 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
154c0 70 73 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b 72 65  psis: r[P3]=mkre
154d0 63 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a  c(r[P1@P2]).**.*
154e0 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65 67  * Convert P2 reg
154f0 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e 67  isters beginning
15500 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20 74 68   with P1 into th
15510 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61 74  e [record format
15520 5d 0a 2a 2a 20 75 73 65 20 61 73 20 61 20 64 61  ].** use as a da
15530 74 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20 64  ta record in a d
15540 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72  atabase table or
15550 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e 20   as a key.** in 
15560 61 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20 4f  an index.  The O
15570 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20  P_Column opcode 
15580 63 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20 72  can decode the r
15590 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 0a  ecord later..**.
155a0 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 73  ** P4 may be a s
155b0 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32  tring that is P2
155c0 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67   characters long
155d0 2e 20 20 54 68 65 20 6e 74 68 20 63 68 61 72 61  .  The nth chara
155e0 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73  cter of the.** s
155f0 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20  tring indicates 
15600 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e  the column affin
15610 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20  ity that should 
15620 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20  be used for the 
15630 6e 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66 20  nth.** field of 
15640 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a 2a  the index key..*
15650 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e 67  *.** The mapping
15660 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65 72 20   from character 
15670 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73 20 67  to affinity is g
15680 69 76 65 6e 20 62 79 20 74 68 65 20 53 51 4c 49  iven by the SQLI
15690 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f  TE_AFF_.** macro
156a0 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73 71 6c  s defined in sql
156b0 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20  iteInt.h..**.** 
156c0 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20 74 68  If P4 is NULL th
156d0 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66 69 65  en all index fie
156e0 6c 64 73 20 68 61 76 65 20 74 68 65 20 61 66 66  lds have the aff
156f0 69 6e 69 74 79 20 42 4c 4f 42 2e 0a 2a 2f 0a 63  inity BLOB..*/.c
15700 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72  ase OP_MakeRecor
15710 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65 77 52  d: {.  u8 *zNewR
15720 65 63 6f 72 64 3b 20 20 20 20 20 20 20 20 2f 2a  ecord;        /*
15730 20 41 20 62 75 66 66 65 72 20 74 6f 20 68 6f 6c   A buffer to hol
15740 64 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 74  d the data for t
15750 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f  he new record */
15760 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20 20  .  Mem *pRec;   
15770 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
15780 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20   new record */. 
15790 20 75 36 34 20 6e 44 61 74 61 3b 20 20 20 20 20   u64 nData;     
157a0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
157b0 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61  r of bytes of da
157c0 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e  ta space */.  in
157d0 74 20 6e 48 64 72 3b 20 20 20 20 20 20 20 20 20  t nHdr;         
157e0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
157f0 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64 65  f bytes of heade
15800 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 36 34  r space */.  i64
15810 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20 20   nByte;         
15820 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61 63      /* Data spac
15830 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74  e required for t
15840 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  his record */.  
15850 69 36 34 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20  i64 nZero;      
15860 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
15870 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20 61   of zero bytes a
15880 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
15890 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
158a0 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20 20 20   nVarint;       
158b0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
158c0 20 62 79 74 65 73 20 69 6e 20 61 20 76 61 72 69   bytes in a vari
158d0 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65 72 69  nt */.  u32 seri
158e0 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20 20 2f  al_type;       /
158f0 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a 2f 0a  * Type field */.
15900 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20 20    Mem *pData0;  
15910 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
15920 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20 63 6f  t field to be co
15930 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68 65 20  mbined into the 
15940 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20  record */.  Mem 
15950 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20 20  *pLast;         
15960 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c 64     /* Last field
15970 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a   of the record *
15980 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20  /.  int nField; 
15990 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
159a0 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
159b0 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  n the record */.
159c0 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74    char *zAffinit
159d0 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  y;       /* The 
159e0 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e 67 20  affinity string 
159f0 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a  for the record *
15a00 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f 72  /.  int file_for
15a10 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20 46 69  mat;       /* Fi
15a20 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73 65  le format to use
15a30 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a 2f   for encoding */
15a40 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20  .  int i;       
15a50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61            /* Spa
15a60 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77 52  ce used in zNewR
15a70 65 63 6f 72 64 5b 5d 20 68 65 61 64 65 72 20 2a  ecord[] header *
15a80 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20 20  /.  int j;      
15a90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70             /* Sp
15aa0 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77  ace used in zNew
15ab0 52 65 63 6f 72 64 5b 5d 20 63 6f 6e 74 65 6e 74  Record[] content
15ac0 20 2a 2f 0a 20 20 75 33 32 20 6c 65 6e 3b 20 20   */.  u32 len;  
15ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15ae0 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69 65 6c  Length of a fiel
15af0 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75 6d  d */..  /* Assum
15b00 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 63  ing the record c
15b10 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64 73  ontains N fields
15b20 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f 72  , the record for
15b30 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c  mat looks.  ** l
15b40 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a 20  ike this:.  **. 
15b50 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ** ------------
15b60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15b70 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15b80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15b90 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a  ------------.  *
15ba0 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20 74  * | hdr-size | t
15bb0 79 70 65 20 30 20 7c 20 74 79 70 65 20 31 20 7c  ype 0 | type 1 |
15bc0 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31 20   ... | type N-1 
15bd0 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c 20  | data0 | ... | 
15be0 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a  data N-1 | .  **
15bf0 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ---------------
15c00 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15c10 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15c20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15c30 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20  ---------.  **. 
15c40 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20 74   ** Data(0) is t
15c50 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74  aken from regist
15c60 65 72 20 50 31 2e 20 20 44 61 74 61 28 31 29 20  er P1.  Data(1) 
15c70 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69 73  comes from regis
15c80 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61 6e  ter P1+1.  ** an
15c90 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a 2a  d so forth..  **
15ca0 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65 20  .  ** Each type 
15cb0 66 69 65 6c 64 20 69 73 20 61 20 76 61 72 69 6e  field is a varin
15cc0 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74  t representing t
15cd0 68 65 20 73 65 72 69 61 6c 20 74 79 70 65 20 6f  he serial type o
15ce0 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72 72  f the .  ** corr
15cf0 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20 65  esponding data e
15d00 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c 69  lement (see sqli
15d10 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70  te3VdbeSerialTyp
15d20 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20 68  e()). The.  ** h
15d30 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69 73  dr-size field is
15d40 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20 77   also a varint w
15d50 68 69 63 68 20 69 73 20 74 68 65 20 6f 66 66 73  hich is the offs
15d60 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69  et from the begi
15d70 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74 68  nning.  ** of th
15d80 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74 61  e record to data
15d90 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61 20  0..  */.  nData 
15da0 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  = 0;         /* 
15db0 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
15dc0 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a 2f  of data space */
15dd0 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20 20 20  .  nHdr = 0;    
15de0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
15df0 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64  of bytes of head
15e00 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 5a  er space */.  nZ
15e10 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20 20  ero = 0;        
15e20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65   /* Number of ze
15e30 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20  ro bytes at the 
15e40 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72  end of the recor
15e50 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20  d */.  nField = 
15e60 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69  pOp->p1;.  zAffi
15e70 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  nity = pOp->p4.z
15e80 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69 65  ;.  assert( nFie
15e90 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e  ld>0 && pOp->p2>
15ea0 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69  0 && pOp->p2+nFi
15eb0 65 6c 64 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  eld<=(p->nMem-p-
15ec0 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20  >nCursor)+1 );. 
15ed0 20 70 44 61 74 61 30 20 3d 20 26 61 4d 65 6d 5b   pData0 = &aMem[
15ee0 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65 6c  nField];.  nFiel
15ef0 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70  d = pOp->p2;.  p
15f00 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b 6e  Last = &pData0[n
15f10 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c 65  Field-1];.  file
15f20 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69 6e  _format = p->min
15f30 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 3b  WriteFileFormat;
15f40 0a 0a 20 20 2f 2a 20 49 64 65 6e 74 69 66 79 20  ..  /* Identify 
15f50 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73  the output regis
15f60 74 65 72 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ter */.  assert(
15f70 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 31   pOp->p3<pOp->p1
15f80 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70   || pOp->p3>=pOp
15f90 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b 0a  ->p1+pOp->p2 );.
15fa0 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
15fb0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p3];.  memAb
15fc0 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
15fd0 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 41 70 70 6c  Out);..  /* Appl
15fe0 79 20 74 68 65 20 72 65 71 75 65 73 74 65 64 20  y the requested 
15ff0 61 66 66 69 6e 69 74 79 20 74 6f 20 61 6c 6c 20  affinity to all 
16000 69 6e 70 75 74 73 0a 20 20 2a 2f 0a 20 20 61 73  inputs.  */.  as
16010 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70 4c  sert( pData0<=pL
16020 61 73 74 20 29 3b 0a 20 20 69 66 28 20 7a 41 66  ast );.  if( zAf
16030 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 70 52  finity ){.    pR
16040 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20 20  ec = pData0;.   
16050 20 64 6f 7b 0a 20 20 20 20 20 20 61 70 70 6c 79   do{.      apply
16060 41 66 66 69 6e 69 74 79 28 70 52 65 63 2b 2b 2c  Affinity(pRec++,
16070 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 2c   *(zAffinity++),
16080 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
16090 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e    assert( zAffin
160a0 69 74 79 5b 30 5d 3d 3d 30 20 7c 7c 20 70 52 65  ity[0]==0 || pRe
160b0 63 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 20 20  c<=pLast );.    
160c0 7d 77 68 69 6c 65 28 20 7a 41 66 66 69 6e 69 74  }while( zAffinit
160d0 79 5b 30 5d 20 29 3b 0a 20 20 7d 0a 0a 20 20 2f  y[0] );.  }..  /
160e0 2a 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20 74  * Loop through t
160f0 68 65 20 65 6c 65 6d 65 6e 74 73 20 74 68 61 74  he elements that
16100 20 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68   will make up th
16110 65 20 72 65 63 6f 72 64 20 74 6f 20 66 69 67 75  e record to figu
16120 72 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20  re.  ** out how 
16130 6d 75 63 68 20 73 70 61 63 65 20 69 73 20 72 65  much space is re
16140 71 75 69 72 65 64 20 66 6f 72 20 74 68 65 20 6e  quired for the n
16150 65 77 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a  ew record..  */.
16160 20 20 70 52 65 63 20 3d 20 70 4c 61 73 74 3b 0a    pRec = pLast;.
16170 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74    do{.    assert
16180 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65  ( memIsValid(pRe
16190 63 29 20 29 3b 0a 20 20 20 20 70 52 65 63 2d 3e  c) );.    pRec->
161a0 75 54 65 6d 70 20 3d 20 73 65 72 69 61 6c 5f 74  uTemp = serial_t
161b0 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ype = sqlite3Vdb
161c0 65 53 65 72 69 61 6c 54 79 70 65 28 70 52 65 63  eSerialType(pRec
161d0 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 2c 20 26  , file_format, &
161e0 6c 65 6e 29 3b 0a 20 20 20 20 69 66 28 20 70 52  len);.    if( pR
161f0 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ec->flags & MEM_
16200 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 69 66  Zero ){.      if
16210 28 20 6e 44 61 74 61 20 29 7b 0a 20 20 20 20 20  ( nData ){.     
16220 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64     if( sqlite3Vd
16230 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28  beMemExpandBlob(
16240 70 52 65 63 29 20 29 20 67 6f 74 6f 20 6e 6f 5f  pRec) ) goto no_
16250 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  mem;.      }else
16260 7b 0a 20 20 20 20 20 20 20 20 6e 5a 65 72 6f 20  {.        nZero 
16270 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f  += pRec->u.nZero
16280 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e 20 2d 3d  ;.        len -=
16290 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a   pRec->u.nZero;.
162a0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
162b0 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a    nData += len;.
162c0 20 20 20 20 74 65 73 74 63 61 73 65 28 20 73 65      testcase( se
162d0 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32 37 20 29  rial_type==127 )
162e0 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20  ;.    testcase( 
162f0 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32 38  serial_type==128
16300 20 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20   );.    nHdr += 
16310 73 65 72 69 61 6c 5f 74 79 70 65 3c 3d 31 32 37  serial_type<=127
16320 20 3f 20 31 20 3a 20 73 71 6c 69 74 65 33 56 61   ? 1 : sqlite3Va
16330 72 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c 5f 74  rintLen(serial_t
16340 79 70 65 29 3b 0a 20 20 7d 77 68 69 6c 65 28 20  ype);.  }while( 
16350 28 2d 2d 70 52 65 63 29 3e 3d 70 44 61 74 61 30  (--pRec)>=pData0
16360 20 29 3b 0a 0a 20 20 2f 2a 20 45 56 49 44 45 4e   );..  /* EVIDEN
16370 43 45 2d 4f 46 3a 20 52 2d 32 32 35 36 34 2d 31  CE-OF: R-22564-1
16380 31 36 34 37 20 54 68 65 20 68 65 61 64 65 72 20  1647 The header 
16390 62 65 67 69 6e 73 20 77 69 74 68 20 61 20 73 69  begins with a si
163a0 6e 67 6c 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a  ngle varint.  **
163b0 20 77 68 69 63 68 20 64 65 74 65 72 6d 69 6e 65   which determine
163c0 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  s the total numb
163d0 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74  er of bytes in t
163e0 68 65 20 68 65 61 64 65 72 2e 20 54 68 65 20 76  he header. The v
163f0 61 72 69 6e 74 0a 20 20 2a 2a 20 76 61 6c 75 65  arint.  ** value
16400 20 69 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20   is the size of 
16410 74 68 65 20 68 65 61 64 65 72 20 69 6e 20 62 79  the header in by
16420 74 65 73 20 69 6e 63 6c 75 64 69 6e 67 20 74 68  tes including th
16430 65 20 73 69 7a 65 20 76 61 72 69 6e 74 0a 20 20  e size varint.  
16440 2a 2a 20 69 74 73 65 6c 66 2e 20 2a 2f 0a 20 20  ** itself. */.  
16450 74 65 73 74 63 61 73 65 28 20 6e 48 64 72 3d 3d  testcase( nHdr==
16460 31 32 36 20 29 3b 0a 20 20 74 65 73 74 63 61 73  126 );.  testcas
16470 65 28 20 6e 48 64 72 3d 3d 31 32 37 20 29 3b 0a  e( nHdr==127 );.
16480 20 20 69 66 28 20 6e 48 64 72 3c 3d 31 32 36 20    if( nHdr<=126 
16490 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 63 6f  ){.    /* The co
164a0 6d 6d 6f 6e 20 63 61 73 65 20 2a 2f 0a 20 20 20  mmon case */.   
164b0 20 6e 48 64 72 20 2b 3d 20 31 3b 0a 20 20 7d 65   nHdr += 1;.  }e
164c0 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 52 61 72 65  lse{.    /* Rare
164d0 20 63 61 73 65 20 6f 66 20 61 20 72 65 61 6c 6c   case of a reall
164e0 79 20 6c 61 72 67 65 20 68 65 61 64 65 72 20 2a  y large header *
164f0 2f 0a 20 20 20 20 6e 56 61 72 69 6e 74 20 3d 20  /.    nVarint = 
16500 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
16510 28 6e 48 64 72 29 3b 0a 20 20 20 20 6e 48 64 72  (nHdr);.    nHdr
16520 20 2b 3d 20 6e 56 61 72 69 6e 74 3b 0a 20 20 20   += nVarint;.   
16530 20 69 66 28 20 6e 56 61 72 69 6e 74 3c 73 71 6c   if( nVarint<sql
16540 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48  ite3VarintLen(nH
16550 64 72 29 20 29 20 6e 48 64 72 2b 2b 3b 0a 20 20  dr) ) nHdr++;.  
16560 7d 0a 20 20 6e 42 79 74 65 20 3d 20 6e 48 64 72  }.  nByte = nHdr
16570 2b 6e 44 61 74 61 3b 0a 20 20 69 66 28 20 6e 42  +nData;.  if( nB
16580 79 74 65 2b 6e 5a 65 72 6f 3e 64 62 2d 3e 61 4c  yte+nZero>db->aL
16590 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
165a0 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
165b0 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
165c0 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75   }..  /* Make su
165d0 72 65 20 74 68 65 20 6f 75 74 70 75 74 20 72 65  re the output re
165e0 67 69 73 74 65 72 20 68 61 73 20 61 20 62 75 66  gister has a buf
165f0 66 65 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68  fer large enough
16600 20 74 6f 20 73 74 6f 72 65 20 0a 20 20 2a 2a 20   to store .  ** 
16610 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 20  the new record. 
16620 54 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73  The output regis
16630 74 65 72 20 28 70 4f 70 2d 3e 70 33 29 20 69 73  ter (pOp->p3) is
16640 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a   not allowed to.
16650 20 20 2a 2a 20 62 65 20 6f 6e 65 20 6f 66 20 74    ** be one of t
16660 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  he input registe
16670 72 73 20 28 62 65 63 61 75 73 65 20 74 68 65 20  rs (because the 
16680 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 74  following call t
16690 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64  o.  ** sqlite3Vd
166a0 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65 73  beMemClearAndRes
166b0 69 7a 65 28 29 20 63 6f 75 6c 64 20 63 6c 6f 62  ize() could clob
166c0 62 65 72 20 74 68 65 20 76 61 6c 75 65 20 62 65  ber the value be
166d0 66 6f 72 65 20 69 74 20 69 73 20 75 73 65 64 29  fore it is used)
166e0 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c  ..  */.  if( sql
166f0 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72  ite3VdbeMemClear
16700 41 6e 64 52 65 73 69 7a 65 28 70 4f 75 74 2c 20  AndResize(pOut, 
16710 28 69 6e 74 29 6e 42 79 74 65 29 20 29 7b 0a 20  (int)nByte) ){. 
16720 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
16730 20 20 7d 0a 20 20 7a 4e 65 77 52 65 63 6f 72 64    }.  zNewRecord
16740 20 3d 20 28 75 38 20 2a 29 70 4f 75 74 2d 3e 7a   = (u8 *)pOut->z
16750 3b 0a 0a 20 20 2f 2a 20 57 72 69 74 65 20 74 68  ;..  /* Write th
16760 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 20  e record */.  i 
16770 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28 7a 4e  = putVarint32(zN
16780 65 77 52 65 63 6f 72 64 2c 20 6e 48 64 72 29 3b  ewRecord, nHdr);
16790 0a 20 20 6a 20 3d 20 6e 48 64 72 3b 0a 20 20 61  .  j = nHdr;.  a
167a0 73 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70  ssert( pData0<=p
167b0 4c 61 73 74 20 29 3b 0a 20 20 70 52 65 63 20 3d  Last );.  pRec =
167c0 20 70 44 61 74 61 30 3b 0a 20 20 64 6f 7b 0a 20   pData0;.  do{. 
167d0 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d     serial_type =
167e0 20 70 52 65 63 2d 3e 75 54 65 6d 70 3b 0a 20 20   pRec->uTemp;.  
167f0 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46    /* EVIDENCE-OF
16800 3a 20 52 2d 30 36 35 32 39 2d 34 37 33 36 32 20  : R-06529-47362 
16810 46 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 73 69  Following the si
16820 7a 65 20 76 61 72 69 6e 74 20 61 72 65 20 6f 6e  ze varint are on
16830 65 20 6f 72 20 6d 6f 72 65 0a 20 20 20 20 2a 2a  e or more.    **
16840 20 61 64 64 69 74 69 6f 6e 61 6c 20 76 61 72 69   additional vari
16850 6e 74 73 2c 20 6f 6e 65 20 70 65 72 20 63 6f 6c  nts, one per col
16860 75 6d 6e 2e 20 2a 2f 0a 20 20 20 20 69 20 2b 3d  umn. */.    i +=
16870 20 70 75 74 56 61 72 69 6e 74 33 32 28 26 7a 4e   putVarint32(&zN
16880 65 77 52 65 63 6f 72 64 5b 69 5d 2c 20 73 65 72  ewRecord[i], ser
16890 69 61 6c 5f 74 79 70 65 29 3b 20 20 20 20 20 20  ial_type);      
168a0 20 20 20 20 20 20 2f 2a 20 73 65 72 69 61 6c 20        /* serial 
168b0 74 79 70 65 20 2a 2f 0a 20 20 20 20 2f 2a 20 45  type */.    /* E
168c0 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 36 34  VIDENCE-OF: R-64
168d0 35 33 36 2d 35 31 37 32 38 20 54 68 65 20 76 61  536-51728 The va
168e0 6c 75 65 73 20 66 6f 72 20 65 61 63 68 20 63 6f  lues for each co
168f0 6c 75 6d 6e 20 69 6e 20 74 68 65 20 72 65 63 6f  lumn in the reco
16900 72 64 0a 20 20 20 20 2a 2a 20 69 6d 6d 65 64 69  rd.    ** immedi
16910 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20 74 68 65  ately follow the
16920 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20 20 20 20   header. */.    
16930 6a 20 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65  j += sqlite3Vdbe
16940 53 65 72 69 61 6c 50 75 74 28 26 7a 4e 65 77 52  SerialPut(&zNewR
16950 65 63 6f 72 64 5b 6a 5d 2c 20 70 52 65 63 2c 20  ecord[j], pRec, 
16960 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 2f 2a  serial_type); /*
16970 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 7d 77   content */.  }w
16980 68 69 6c 65 28 20 28 2b 2b 70 52 65 63 29 3c 3d  hile( (++pRec)<=
16990 70 4c 61 73 74 20 29 3b 0a 20 20 61 73 73 65 72  pLast );.  asser
169a0 74 28 20 69 3d 3d 6e 48 64 72 20 29 3b 0a 20 20  t( i==nHdr );.  
169b0 61 73 73 65 72 74 28 20 6a 3d 3d 6e 42 79 74 65  assert( j==nByte
169c0 20 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70   );..  assert( p
169d0 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d  Op->p3>0 && pOp-
169e0 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p3<=(p->nMem-p-
169f0 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
16a00 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42  Out->n = (int)nB
16a10 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  yte;.  pOut->fla
16a20 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 3b 0a 20  gs = MEM_Blob;. 
16a30 20 69 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20   if( nZero ){.  
16a40 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20    pOut->u.nZero 
16a50 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75  = nZero;.    pOu
16a60 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f  t->flags |= MEM_
16a70 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  Zero;.  }.  pOut
16a80 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55  ->enc = SQLITE_U
16a90 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65  TF8;  /* In case
16aa0 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65   the blob is eve
16ab0 72 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 74  r converted to t
16ac0 65 78 74 20 2a 2f 0a 20 20 52 45 47 49 53 54 45  ext */.  REGISTE
16ad0 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
16ae0 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45   pOut);.  UPDATE
16af0 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
16b00 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
16b10 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 75 6e  ./* Opcode: Coun
16b20 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
16b30 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
16b40 3d 63 6f 75 6e 74 28 29 0a 2a 2a 0a 2a 2a 20 53  =count().**.** S
16b50 74 6f 72 65 20 74 68 65 20 6e 75 6d 62 65 72 20  tore the number 
16b60 6f 66 20 65 6e 74 72 69 65 73 20 28 61 6e 20 69  of entries (an i
16b70 6e 74 65 67 65 72 20 76 61 6c 75 65 29 20 69 6e  nteger value) in
16b80 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
16b90 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64 20 62  dex .** opened b
16ba0 79 20 63 75 72 73 6f 72 20 50 31 20 69 6e 20 72  y cursor P1 in r
16bb0 65 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a 23 69  egister P2.*/.#i
16bc0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
16bd0 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63 61 73  T_BTREECOUNT.cas
16be0 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20 20 20  e OP_Count: {   
16bf0 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
16c00 0a 20 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20  .  i64 nEntry;. 
16c10 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
16c20 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  ;..  assert( p->
16c30 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e  apCsr[pOp->p1]->
16c40 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
16c50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43 72  E_BTREE );.  pCr
16c60 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  sr = p->apCsr[pO
16c70 70 2d 3e 70 31 5d 2d 3e 75 63 2e 70 43 75 72 73  p->p1]->uc.pCurs
16c80 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  or;.  assert( pC
16c90 72 73 72 20 29 3b 0a 20 20 6e 45 6e 74 72 79 20  rsr );.  nEntry 
16ca0 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65  = 0;  /* Not nee
16cb0 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20  ded.  Only used 
16cc0 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72  to silence a war
16cd0 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d 20  ning. */.  rc = 
16ce0 73 71 6c 69 74 65 33 42 74 72 65 65 43 6f 75 6e  sqlite3BtreeCoun
16cf0 74 28 70 43 72 73 72 2c 20 26 6e 45 6e 74 72 79  t(pCrsr, &nEntry
16d00 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
16d10 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
16d20 65 72 72 6f 72 3b 0a 20 20 70 4f 75 74 20 3d 20  error;.  pOut = 
16d30 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
16d40 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e  , pOp);.  pOut->
16d50 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20  u.i = nEntry;.  
16d60 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
16d70 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76 65  ./* Opcode: Save
16d80 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20  point P1 * * P4 
16d90 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65  *.**.** Open, re
16da0 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63  lease or rollbac
16db0 6b 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  k the savepoint 
16dc0 6e 61 6d 65 64 20 62 79 20 70 61 72 61 6d 65 74  named by paramet
16dd0 65 72 20 50 34 2c 20 64 65 70 65 6e 64 69 6e 67  er P4, depending
16de0 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75 65  .** on the value
16df0 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20   of P1. To open 
16e00 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 2c  a new savepoint,
16e10 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61   P1==0. To relea
16e20 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a  se (commit) an.*
16e30 2a 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70  * existing savep
16e40 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20  oint, P1==1, or 
16e50 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65  to rollback an e
16e60 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e  xisting savepoin
16e70 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65  t P1==2..*/.case
16e80 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b   OP_Savepoint: {
16e90 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20  .  int p1;      
16ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16eb0 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50     /* Value of P
16ec0 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63  1 operand */.  c
16ed0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
16ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
16ef0 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76 65 70 6f  * Name of savepo
16f00 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61  int */.  int nNa
16f10 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20  me;.  Savepoint 
16f20 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f 69  *pNew;.  Savepoi
16f30 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a  nt *pSavepoint;.
16f40 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d    Savepoint *pTm
16f50 70 3b 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f  p;.  int iSavepo
16f60 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a  int;.  int ii;..
16f70 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a    p1 = pOp->p1;.
16f80 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70    zName = pOp->p
16f90 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72  4.z;..  /* Asser
16fa0 74 20 74 68 61 74 20 74 68 65 20 70 31 20 70 61  t that the p1 pa
16fb0 72 61 6d 65 74 65 72 20 69 73 20 76 61 6c 69 64  rameter is valid
16fc0 2e 20 41 6c 73 6f 20 74 68 61 74 20 69 66 20 74  . Also that if t
16fd0 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a  here is no open.
16fe0 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e    ** transaction
16ff0 2c 20 74 68 65 6e 20 74 68 65 72 65 20 63 61 6e  , then there can
17000 6e 6f 74 20 62 65 20 61 6e 79 20 73 61 76 65 70  not be any savep
17010 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61  oints. .  */.  a
17020 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65  ssert( db->pSave
17030 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e  point==0 || db->
17040 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b  autoCommit==0 );
17050 0a 20 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53  .  assert( p1==S
17060 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c  AVEPOINT_BEGIN||
17070 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
17080 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50  LEASE||p1==SAVEP
17090 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b  OINT_ROLLBACK );
170a0 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70  .  assert( db->p
170b0 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d  Savepoint || db-
170c0 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
170d0 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20  vepoint==0 );.  
170e0 61 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76  assert( checkSav
170f0 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20  epointCount(db) 
17100 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
17110 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a 20 20  bIsReader );..  
17120 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  if( p1==SAVEPOIN
17130 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20 20 20 69  T_BEGIN ){.    i
17140 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74  f( db->nVdbeWrit
17150 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  e>0 ){.      /* 
17160 41 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20  A new savepoint 
17170 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61 74 65  cannot be create
17180 64 20 69 66 20 74 68 65 72 65 20 61 72 65 20 61  d if there are a
17190 63 74 69 76 65 20 77 72 69 74 65 20 0a 20 20 20  ctive write .   
171a0 20 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73     ** statements
171b0 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64   (i.e. open read
171c0 2f 77 72 69 74 65 20 69 6e 63 72 65 6d 65 6e 74  /write increment
171d0 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29  al blob handles)
171e0 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
171f0 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
17200 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 6f 70 65  r(p, "cannot ope
17210 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 53 51  n savepoint - SQ
17220 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
17230 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
17240 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55    rc = SQLITE_BU
17250 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  SY;.    }else{. 
17260 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c       nName = sql
17270 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61  ite3Strlen30(zNa
17280 6d 65 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  me);..#ifndef SQ
17290 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
172a0 4c 54 41 42 4c 45 0a 20 20 20 20 20 20 2f 2a 20  LTABLE.      /* 
172b0 54 68 69 73 20 63 61 6c 6c 20 69 73 20 4f 6b 20  This call is Ok 
172c0 65 76 65 6e 20 69 66 20 74 68 69 73 20 73 61 76  even if this sav
172d0 65 70 6f 69 6e 74 20 69 73 20 61 63 74 75 61 6c  epoint is actual
172e0 6c 79 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ly a transaction
172f0 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f  .      ** savepo
17300 69 6e 74 20 28 61 6e 64 20 74 68 65 72 65 66 6f  int (and therefo
17310 72 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 70 72  re should not pr
17320 6f 6d 70 74 20 78 53 61 76 65 70 6f 69 6e 74 28  ompt xSavepoint(
17330 29 29 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 20 20  )) callbacks..  
17340 20 20 20 20 2a 2a 20 49 66 20 74 68 69 73 20 69      ** If this i
17350 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  s a transaction 
17360 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20  savepoint being 
17370 6f 70 65 6e 65 64 2c 20 69 74 20 69 73 20 67 75  opened, it is gu
17380 61 72 61 6e 74 65 65 64 0a 20 20 20 20 20 20 2a  aranteed.      *
17390 2a 20 74 68 61 74 20 74 68 65 20 64 62 2d 3e 61  * that the db->a
173a0 56 54 72 61 6e 73 5b 5d 20 61 72 72 61 79 20 69  VTrans[] array i
173b0 73 20 65 6d 70 74 79 2e 20 20 2a 2f 0a 20 20 20  s empty.  */.   
173c0 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61     assert( db->a
173d0 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20  utoCommit==0 || 
173e0 64 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30 20 29  db->nVTrans==0 )
173f0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
17400 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
17410 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f  t(db, SAVEPOINT_
17420 42 45 47 49 4e 2c 0a 20 20 20 20 20 20 20 20 20  BEGIN,.         
17430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17440 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74         db->nStat
17450 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61 76 65 70  ement+db->nSavep
17460 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 69 66 28  oint);.      if(
17470 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
17480 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
17490 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66  to_error;.#endif
174a0 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72 65 61 74  ..      /* Creat
174b0 65 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  e a new savepoin
174c0 74 20 73 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a  t structure. */.
174d0 20 20 20 20 20 20 70 4e 65 77 20 3d 20 73 71 6c        pNew = sql
174e0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e  ite3DbMallocRawN
174f0 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28 53 61 76  N(db, sizeof(Sav
17500 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29  epoint)+nName+1)
17510 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4e 65 77  ;.      if( pNew
17520 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4e 65 77   ){.        pNew
17530 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68 61 72 20  ->zName = (char 
17540 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20 20 20 20  *)&pNew[1];.    
17550 20 20 20 20 6d 65 6d 63 70 79 28 70 4e 65 77 2d      memcpy(pNew-
17560 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e  >zName, zName, n
17570 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 0a 20 20  Name+1);.    .  
17580 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72        /* If ther
17590 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20 74 72 61  e is no open tra
175a0 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 6d  nsaction, then m
175b0 61 72 6b 20 74 68 69 73 20 61 73 20 61 20 73 70  ark this as a sp
175c0 65 63 69 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a  ecial.        **
175d0 20 22 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61   "transaction sa
175e0 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20 20  vepoint". */.   
175f0 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74       if( db->aut
17600 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20  oCommit ){.     
17610 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
17620 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  mit = 0;.       
17630 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63     db->isTransac
17640 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20  tionSavepoint = 
17650 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  1;.        }else
17660 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  {.          db->
17670 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20  nSavepoint++;.  
17680 20 20 20 20 20 20 7d 0a 20 20 20 20 0a 20 20 20        }.    .   
17690 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68 65       /* Link the
176a0 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 69   new savepoint i
176b0 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65  nto the database
176c0 20 68 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e 20   handle's list. 
176d0 2a 2f 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d  */.        pNew-
176e0 3e 70 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53 61  >pNext = db->pSa
176f0 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20  vepoint;.       
17700 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20   db->pSavepoint 
17710 3d 20 70 4e 65 77 3b 0a 20 20 20 20 20 20 20 20  = pNew;.        
17720 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 43  pNew->nDeferredC
17730 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72  ons = db->nDefer
17740 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20  redCons;.       
17750 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64   pNew->nDeferred
17760 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44  ImmCons = db->nD
17770 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a  eferredImmCons;.
17780 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
17790 7d 65 6c 73 65 7b 0a 20 20 20 20 69 53 61 76 65  }else{.    iSave
177a0 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20  point = 0;..    
177b0 2f 2a 20 46 69 6e 64 20 74 68 65 20 6e 61 6d 65  /* Find the name
177c0 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20  d savepoint. If 
177d0 74 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68  there is no such
177e0 20 73 61 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e   savepoint, then
177f0 20 61 6e 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72   an.    ** an er
17800 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64 20  ror is returned 
17810 74 6f 20 74 68 65 20 75 73 65 72 2e 20 20 2a 2f  to the user.  */
17820 0a 20 20 20 20 66 6f 72 28 0a 20 20 20 20 20 20  .    for(.      
17830 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d  pSavepoint = db-
17840 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20  >pSavepoint; .  
17850 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 26      pSavepoint &
17860 26 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  & sqlite3StrICmp
17870 28 70 53 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61  (pSavepoint->zNa
17880 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  me, zName);.    
17890 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70    pSavepoint = p
178a0 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74  Savepoint->pNext
178b0 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 69 53  .    ){.      iS
178c0 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20  avepoint++;.    
178d0 7d 0a 20 20 20 20 69 66 28 20 21 70 53 61 76 65  }.    if( !pSave
178e0 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73  point ){.      s
178f0 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
17900 70 2c 20 22 6e 6f 20 73 75 63 68 20 73 61 76 65  p, "no such save
17910 70 6f 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61 6d  point: %s", zNam
17920 65 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53  e);.      rc = S
17930 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
17940 20 7d 65 6c 73 65 20 69 66 28 20 64 62 2d 3e 6e   }else if( db->n
17950 56 64 62 65 57 72 69 74 65 3e 30 20 26 26 20 70  VdbeWrite>0 && p
17960 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  1==SAVEPOINT_REL
17970 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 2f 2a  EASE ){.      /*
17980 20 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69   It is not possi
17990 62 6c 65 20 74 6f 20 72 65 6c 65 61 73 65 20 28  ble to release (
179a0 63 6f 6d 6d 69 74 29 20 61 20 73 61 76 65 70 6f  commit) a savepo
179b0 69 6e 74 20 69 66 20 74 68 65 72 65 20 61 72 65  int if there are
179c0 20 0a 20 20 20 20 20 20 2a 2a 20 61 63 74 69 76   .      ** activ
179d0 65 20 77 72 69 74 65 20 73 74 61 74 65 6d 65 6e  e write statemen
179e0 74 73 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  ts..      */.   
179f0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
17a00 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 72  ror(p, "cannot r
17a10 65 6c 65 61 73 65 20 73 61 76 65 70 6f 69 6e 74  elease savepoint
17a20 20 2d 20 22 0a 20 20 20 20 20 20 20 20 20 20 20   - ".           
17a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
17a40 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69  SQL statements i
17a50 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20  n progress");.  
17a60 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
17a70 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  BUSY;.    }else{
17a80 0a 0a 20 20 20 20 20 20 2f 2a 20 44 65 74 65 72  ..      /* Deter
17a90 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20  mine whether or 
17aa0 6e 6f 74 20 74 68 69 73 20 69 73 20 61 20 74 72  not this is a tr
17ab0 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f  ansaction savepo
17ac0 69 6e 74 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20  int. If so,.    
17ad0 20 20 2a 2a 20 61 6e 64 20 74 68 69 73 20 69 73    ** and this is
17ae0 20 61 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61   a RELEASE comma
17af0 6e 64 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72  nd, then the cur
17b00 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  rent transaction
17b10 20 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 63 6f   .      ** is co
17b20 6d 6d 69 74 74 65 64 2e 20 0a 20 20 20 20 20 20  mmitted. .      
17b30 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20 69 73 54  */.      int isT
17b40 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20 70 53 61  ransaction = pSa
17b50 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d  vepoint->pNext==
17b60 30 20 26 26 20 64 62 2d 3e 69 73 54 72 61 6e 73  0 && db->isTrans
17b70 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b  actionSavepoint;
17b80 0a 20 20 20 20 20 20 69 66 28 20 69 73 54 72 61  .      if( isTra
17b90 6e 73 61 63 74 69 6f 6e 20 26 26 20 70 31 3d 3d  nsaction && p1==
17ba0 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
17bb0 45 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  E ){.        if(
17bc0 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64   (rc = sqlite3Vd
17bd0 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29  beCheckFk(p, 1))
17be0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
17bf0 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64           goto vd
17c00 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20  be_return;.     
17c10 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d     }.        db-
17c20 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b  >autoCommit = 1;
17c30 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c  .        if( sql
17c40 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d  ite3VdbeHalt(p)=
17c50 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
17c60 20 20 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20            p->pc 
17c70 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f  = (int)(pOp - aO
17c80 70 29 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62  p);.          db
17c90 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30  ->autoCommit = 0
17ca0 3b 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 72  ;.          p->r
17cb0 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  c = rc = SQLITE_
17cc0 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20 20 20  BUSY;.          
17cd0 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
17ce0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
17cf0 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61      db->isTransa
17d00 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d  ctionSavepoint =
17d10 20 30 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   0;.        rc =
17d20 20 70 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d 65   p->rc;.      }e
17d30 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69 6e 74  lse{.        int
17d40 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 3b   isSchemaChange;
17d50 0a 20 20 20 20 20 20 20 20 69 53 61 76 65 70 6f  .        iSavepo
17d60 69 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70  int = db->nSavep
17d70 6f 69 6e 74 20 2d 20 69 53 61 76 65 70 6f 69 6e  oint - iSavepoin
17d80 74 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 69  t - 1;.        i
17d90 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  f( p1==SAVEPOINT
17da0 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20  _ROLLBACK ){.   
17db0 20 20 20 20 20 20 20 69 73 53 63 68 65 6d 61 43         isSchemaC
17dc0 68 61 6e 67 65 20 3d 20 28 64 62 2d 3e 66 6c 61  hange = (db->fla
17dd0 67 73 20 26 20 53 51 4c 49 54 45 5f 49 6e 74 65  gs & SQLITE_Inte
17de0 72 6e 43 68 61 6e 67 65 73 29 21 3d 30 3b 0a 20  rnChanges)!=0;. 
17df0 20 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d           for(ii=
17e00 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  0; ii<db->nDb; i
17e10 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  i++){.          
17e20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
17e30 72 65 65 54 72 69 70 41 6c 6c 43 75 72 73 6f 72  reeTripAllCursor
17e40 73 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42  s(db->aDb[ii].pB
17e50 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t,.             
17e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e70 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
17e80 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 2c  _ABORT_ROLLBACK,
17e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17eb0 20 20 20 20 20 20 20 20 69 73 53 63 68 65 6d 61          isSchema
17ec0 43 68 61 6e 67 65 3d 3d 30 29 3b 0a 20 20 20 20  Change==0);.    
17ed0 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
17ee0 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
17ef0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
17f00 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  ror;.          }
17f10 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
17f20 20 20 20 20 20 20 20 20 20 20 69 73 53 63 68 65            isSche
17f30 6d 61 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20  maChange = 0;.  
17f40 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
17f50 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d  for(ii=0; ii<db-
17f60 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20  >nDb; ii++){.   
17f70 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
17f80 74 65 33 42 74 72 65 65 53 61 76 65 70 6f 69 6e  te3BtreeSavepoin
17f90 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42  t(db->aDb[ii].pB
17fa0 74 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e  t, p1, iSavepoin
17fb0 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  t);.          if
17fc0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
17fd0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 67  ){.            g
17fe0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
17ff0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
18000 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
18010 20 20 20 20 20 20 69 66 28 20 69 73 53 63 68 65        if( isSche
18020 6d 61 43 68 61 6e 67 65 20 29 7b 0a 20 20 20 20  maChange ){.    
18030 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70        sqlite3Exp
18040 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
18050 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 20  ments(db);.     
18060 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65       sqlite3Rese
18070 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e  tAllSchemasOfCon
18080 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 20  nection(db);.   
18090 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73         db->flags
180a0 20 3d 20 28 64 62 2d 3e 66 6c 61 67 73 20 7c 20   = (db->flags | 
180b0 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61  SQLITE_InternCha
180c0 6e 67 65 73 29 3b 0a 20 20 20 20 20 20 20 20 7d  nges);.        }
180d0 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20  .      }.  .    
180e0 20 20 2f 2a 20 52 65 67 61 72 64 6c 65 73 73 20    /* Regardless 
180f0 6f 66 20 77 68 65 74 68 65 72 20 74 68 69 73 20  of whether this 
18100 69 73 20 61 20 52 45 4c 45 41 53 45 20 6f 72 20  is a RELEASE or 
18110 52 4f 4c 4c 42 41 43 4b 2c 20 64 65 73 74 72 6f  ROLLBACK, destro
18120 79 20 61 6c 6c 20 0a 20 20 20 20 20 20 2a 2a 20  y all .      ** 
18130 73 61 76 65 70 6f 69 6e 74 73 20 6e 65 73 74 65  savepoints neste
18140 64 20 69 6e 73 69 64 65 20 6f 66 20 74 68 65 20  d inside of the 
18150 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20  savepoint being 
18160 6f 70 65 72 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a  operated on. */.
18170 20 20 20 20 20 20 77 68 69 6c 65 28 20 64 62 2d        while( db-
18180 3e 70 53 61 76 65 70 6f 69 6e 74 21 3d 70 53 61  >pSavepoint!=pSa
18190 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20  vepoint ){.     
181a0 20 20 20 70 54 6d 70 20 3d 20 64 62 2d 3e 70 53     pTmp = db->pS
181b0 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20  avepoint;.      
181c0 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74    db->pSavepoint
181d0 20 3d 20 70 54 6d 70 2d 3e 70 4e 65 78 74 3b 0a   = pTmp->pNext;.
181e0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44          sqlite3D
181f0 62 46 72 65 65 28 64 62 2c 20 70 54 6d 70 29 3b  bFree(db, pTmp);
18200 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61  .        db->nSa
18210 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20  vepoint--;.     
18220 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20   }..      /* If 
18230 69 74 20 69 73 20 61 20 52 45 4c 45 41 53 45 2c  it is a RELEASE,
18240 20 74 68 65 6e 20 64 65 73 74 72 6f 79 20 74 68   then destroy th
18250 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e  e savepoint bein
18260 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 0a 20  g operated on . 
18270 20 20 20 20 20 2a 2a 20 74 6f 6f 2e 20 49 66 20       ** too. If 
18280 69 74 20 69 73 20 61 20 52 4f 4c 4c 42 41 43 4b  it is a ROLLBACK
18290 20 54 4f 2c 20 74 68 65 6e 20 73 65 74 20 74 68   TO, then set th
182a0 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 65 66 65  e number of defe
182b0 72 72 65 64 20 0a 20 20 20 20 20 20 2a 2a 20 63  rred .      ** c
182c0 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
182d0 69 6f 6e 73 20 70 72 65 73 65 6e 74 20 69 6e 20  ions present in 
182e0 74 68 65 20 64 61 74 61 62 61 73 65 20 74 6f 20  the database to 
182f0 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64  the value stored
18300 0a 20 20 20 20 20 20 2a 2a 20 77 68 65 6e 20 74  .      ** when t
18310 68 65 20 73 61 76 65 70 6f 69 6e 74 20 77 61 73  he savepoint was
18320 20 63 72 65 61 74 65 64 2e 20 20 2a 2f 0a 20 20   created.  */.  
18330 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45      if( p1==SAVE
18340 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b  POINT_RELEASE ){
18350 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
18360 20 70 53 61 76 65 70 6f 69 6e 74 3d 3d 64 62 2d   pSavepoint==db-
18370 3e 70 53 61 76 65 70 6f 69 6e 74 20 29 3b 0a 20  >pSavepoint );. 
18380 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65         db->pSave
18390 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69  point = pSavepoi
183a0 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20  nt->pNext;.     
183b0 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
183c0 28 64 62 2c 20 70 53 61 76 65 70 6f 69 6e 74 29  (db, pSavepoint)
183d0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 21 69  ;.        if( !i
183e0 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a  sTransaction ){.
183f0 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53            db->nS
18400 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20  avepoint--;.    
18410 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73      }.      }els
18420 65 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  e{.        db->n
18430 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 70  DeferredCons = p
18440 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65  Savepoint->nDefe
18450 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20  rredCons;.      
18460 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49    db->nDeferredI
18470 6d 6d 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f  mmCons = pSavepo
18480 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d  int->nDeferredIm
18490 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 0a  mCons;.      }..
184a0 20 20 20 20 20 20 69 66 28 20 21 69 73 54 72 61        if( !isTra
184b0 6e 73 61 63 74 69 6f 6e 20 7c 7c 20 70 31 3d 3d  nsaction || p1==
184c0 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
184d0 43 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  CK ){.        rc
184e0 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53 61   = sqlite3VtabSa
184f0 76 65 70 6f 69 6e 74 28 64 62 2c 20 70 31 2c 20  vepoint(db, p1, 
18500 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20  iSavepoint);.   
18510 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
18520 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
18530 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
18540 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
18550 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67    }.  if( rc ) g
18560 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
18570 5f 65 72 72 6f 72 3b 0a 0a 20 20 62 72 65 61 6b  _error;..  break
18580 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
18590 41 75 74 6f 43 6f 6d 6d 69 74 20 50 31 20 50 32  AutoCommit P1 P2
185a0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74   * * *.**.** Set
185b0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 75   the database au
185c0 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 20 74  to-commit flag t
185d0 6f 20 50 31 20 28 31 20 6f 72 20 30 29 2e 20 49  o P1 (1 or 0). I
185e0 66 20 50 32 20 69 73 20 74 72 75 65 2c 20 72 6f  f P2 is true, ro
185f0 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e 79 20 63  ll.** back any c
18600 75 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65 20  urrently active 
18610 62 74 72 65 65 20 74 72 61 6e 73 61 63 74 69 6f  btree transactio
18620 6e 73 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ns. If there are
18630 20 61 6e 79 20 61 63 74 69 76 65 0a 2a 2a 20 56   any active.** V
18640 4d 73 20 28 61 70 61 72 74 20 66 72 6f 6d 20 74  Ms (apart from t
18650 68 69 73 20 6f 6e 65 29 2c 20 74 68 65 6e 20 61  his one), then a
18660 20 52 4f 4c 4c 42 41 43 4b 20 66 61 69 6c 73 2e   ROLLBACK fails.
18670 20 20 41 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73    A COMMIT fails
18680 20 69 66 0a 2a 2a 20 74 68 65 72 65 20 61 72 65   if.** there are
18690 20 61 63 74 69 76 65 20 77 72 69 74 69 6e 67 20   active writing 
186a0 56 4d 73 20 6f 72 20 61 63 74 69 76 65 20 56 4d  VMs or active VM
186b0 73 20 74 68 61 74 20 75 73 65 20 73 68 61 72 65  s that use share
186c0 64 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 54  d cache..**.** T
186d0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
186e0 63 61 75 73 65 73 20 74 68 65 20 56 4d 20 74 6f  causes the VM to
186f0 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f   halt..*/.case O
18700 50 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a  P_AutoCommit: {.
18710 20 20 69 6e 74 20 64 65 73 69 72 65 64 41 75 74    int desiredAut
18720 6f 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e 74 20 69  oCommit;.  int i
18730 52 6f 6c 6c 62 61 63 6b 3b 0a 0a 20 20 64 65 73  Rollback;..  des
18740 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 3d  iredAutoCommit =
18750 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c   pOp->p1;.  iRol
18760 6c 62 61 63 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b  lback = pOp->p2;
18770 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72  .  assert( desir
18780 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20  edAutoCommit==1 
18790 7c 7c 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  || desiredAutoCo
187a0 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73  mmit==0 );.  ass
187b0 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f  ert( desiredAuto
187c0 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69 52 6f  Commit==1 || iRo
187d0 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a 20 20 61  llback==0 );.  a
187e0 73 73 65 72 74 28 20 64 62 2d 3e 6e 56 64 62 65  ssert( db->nVdbe
187f0 41 63 74 69 76 65 3e 30 20 29 3b 20 20 2f 2a 20  Active>0 );  /* 
18800 41 74 20 6c 65 61 73 74 20 74 68 69 73 20 6f 6e  At least this on
18810 65 20 56 4d 20 69 73 20 61 63 74 69 76 65 20 2a  e VM is active *
18820 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  /.  assert( p->b
18830 49 73 52 65 61 64 65 72 20 29 3b 0a 0a 20 20 69  IsReader );..  i
18840 66 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  f( desiredAutoCo
18850 6d 6d 69 74 21 3d 64 62 2d 3e 61 75 74 6f 43 6f  mmit!=db->autoCo
18860 6d 6d 69 74 20 29 7b 0a 20 20 20 20 69 66 28 20  mmit ){.    if( 
18870 69 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20 20 20  iRollback ){.   
18880 20 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72     assert( desir
18890 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20  edAutoCommit==1 
188a0 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
188b0 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 2c 20  RollbackAll(db, 
188c0 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c  SQLITE_ABORT_ROL
188d0 4c 42 41 43 4b 29 3b 0a 20 20 20 20 20 20 64 62  LBACK);.      db
188e0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31  ->autoCommit = 1
188f0 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
18900 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
18910 74 20 26 26 20 64 62 2d 3e 6e 56 64 62 65 57 72  t && db->nVdbeWr
18920 69 74 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f  ite>0 ){.      /
18930 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75  * If this instru
18940 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73  ction implements
18950 20 61 20 43 4f 4d 4d 49 54 20 61 6e 64 20 6f 74   a COMMIT and ot
18960 68 65 72 20 56 4d 73 20 61 72 65 20 77 72 69 74  her VMs are writ
18970 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 72 65 74  ing.      ** ret
18980 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64  urn an error ind
18990 69 63 61 74 69 6e 67 20 74 68 61 74 20 74 68 65  icating that the
189a0 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20   other VMs must 
189b0 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20  complete first. 
189c0 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
189d0 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
189e0 28 70 2c 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d  (p, "cannot comm
189f0 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d  it transaction -
18a00 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   ".             
18a10 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 51               "SQ
18a20 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
18a30 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
18a40 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55    rc = SQLITE_BU
18a50 53 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61  SY;.      goto a
18a60 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
18a70 72 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  r;.    }else if(
18a80 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64   (rc = sqlite3Vd
18a90 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29  beCheckFk(p, 1))
18aa0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
18ab0 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
18ac0 65 74 75 72 6e 3b 0a 20 20 20 20 7d 65 6c 73 65  eturn;.    }else
18ad0 7b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f  {.      db->auto
18ae0 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 64 65 73  Commit = (u8)des
18af0 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a  iredAutoCommit;.
18b00 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73 71      }.    if( sq
18b10 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29  lite3VdbeHalt(p)
18b20 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b  ==SQLITE_BUSY ){
18b30 0a 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28  .      p->pc = (
18b40 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b  int)(pOp - aOp);
18b50 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43  .      db->autoC
18b60 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28 31 2d 64  ommit = (u8)(1-d
18b70 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
18b80 29 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20 3d  );.      p->rc =
18b90 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
18ba0 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64  Y;.      goto vd
18bb0 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d  be_return;.    }
18bc0 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d  .    assert( db-
18bd0 3e 6e 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29  >nStatement==0 )
18be0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6c 6f  ;.    sqlite3Clo
18bf0 73 65 53 61 76 65 70 6f 69 6e 74 73 28 64 62 29  seSavepoints(db)
18c00 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 72 63 3d  ;.    if( p->rc=
18c10 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
18c20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
18c30 44 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  DONE;.    }else{
18c40 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
18c50 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a  TE_ERROR;.    }.
18c60 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
18c70 74 75 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  turn;.  }else{. 
18c80 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
18c90 72 6f 72 28 70 2c 0a 20 20 20 20 20 20 20 20 28  ror(p,.        (
18ca0 21 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d  !desiredAutoComm
18cb0 69 74 29 3f 22 63 61 6e 6e 6f 74 20 73 74 61 72  it)?"cannot star
18cc0 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  t a transaction 
18cd0 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63  within a transac
18ce0 74 69 6f 6e 22 3a 28 0a 20 20 20 20 20 20 20 20  tion":(.        
18cf0 28 69 52 6f 6c 6c 62 61 63 6b 29 3f 22 63 61 6e  (iRollback)?"can
18d00 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e  not rollback - n
18d10 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  o transaction is
18d20 20 61 63 74 69 76 65 22 3a 0a 20 20 20 20 20 20   active":.      
18d30 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 61               "ca
18d40 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f  nnot commit - no
18d50 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
18d60 61 63 74 69 76 65 22 29 29 3b 0a 20 20 20 20 20  active"));.     
18d70 20 20 20 20 0a 20 20 20 20 72 63 20 3d 20 53 51      .    rc = SQ
18d80 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
18d90 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
18da0 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 62  o_error;.  }.  b
18db0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
18dc0 64 65 3a 20 54 72 61 6e 73 61 63 74 69 6f 6e 20  de: Transaction 
18dd0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
18de0 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 20 74 72 61  *.** Begin a tra
18df0 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 64 61 74 61  nsaction on data
18e00 62 61 73 65 20 50 31 20 69 66 20 61 20 74 72 61  base P1 if a tra
18e10 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20  nsaction is not 
18e20 61 6c 72 65 61 64 79 0a 2a 2a 20 61 63 74 69 76  already.** activ
18e30 65 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e  e..** If P2 is n
18e40 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20  on-zero, then a 
18e50 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f  write-transactio
18e60 6e 20 69 73 20 73 74 61 72 74 65 64 2c 20 6f 72  n is started, or
18e70 20 69 66 20 61 20 0a 2a 2a 20 72 65 61 64 2d 74   if a .** read-t
18e80 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 6c  ransaction is al
18e90 72 65 61 64 79 20 61 63 74 69 76 65 2c 20 69 74  ready active, it
18ea0 20 69 73 20 75 70 67 72 61 64 65 64 20 74 6f 20   is upgraded to 
18eb0 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74  a write-transact
18ec0 69 6f 6e 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73  ion..** If P2 is
18ed0 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 72 65   zero, then a re
18ee0 61 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  ad-transaction i
18ef0 73 20 73 74 61 72 74 65 64 2e 0a 2a 2a 0a 2a 2a  s started..**.**
18f00 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78   P1 is the index
18f10 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
18f20 20 66 69 6c 65 20 6f 6e 20 77 68 69 63 68 20 74   file on which t
18f30 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  he transaction i
18f40 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e 20 20 49  s.** started.  I
18f50 6e 64 65 78 20 30 20 69 73 20 74 68 65 20 6d 61  ndex 0 is the ma
18f60 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
18f70 20 61 6e 64 20 69 6e 64 65 78 20 31 20 69 73 20   and index 1 is 
18f80 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64  the.** file used
18f90 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 74   for temporary t
18fa0 61 62 6c 65 73 2e 20 20 49 6e 64 69 63 65 73 20  ables.  Indices 
18fb0 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 65  of 2 or more are
18fc0 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74   used for.** att
18fd0 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e  ached databases.
18fe0 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20 77 72 69 74  .**.** If a writ
18ff0 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e-transaction is
19000 20 73 74 61 72 74 65 64 20 61 6e 64 20 74 68 65   started and the
19010 20 56 64 62 65 2e 75 73 65 73 53 74 6d 74 4a 6f   Vdbe.usesStmtJo
19020 75 72 6e 61 6c 20 66 6c 61 67 20 69 73 0a 2a 2a  urnal flag is.**
19030 20 74 72 75 65 20 28 74 68 69 73 20 66 6c 61 67   true (this flag
19040 20 69 73 20 73 65 74 20 69 66 20 74 68 65 20 56   is set if the V
19050 64 62 65 20 6d 61 79 20 6d 6f 64 69 66 79 20 6d  dbe may modify m
19060 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77  ore than one row
19070 20 61 6e 64 20 6d 61 79 0a 2a 2a 20 74 68 72 6f   and may.** thro
19080 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70  w an ABORT excep
19090 74 69 6f 6e 29 2c 20 61 20 73 74 61 74 65 6d 65  tion), a stateme
190a0 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d  nt transaction m
190b0 61 79 20 61 6c 73 6f 20 62 65 20 6f 70 65 6e 65  ay also be opene
190c0 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70 65 63 69  d..** More speci
190d0 66 69 63 61 6c 6c 79 2c 20 61 20 73 74 61 74 65  fically, a state
190e0 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
190f0 20 69 73 20 6f 70 65 6e 65 64 20 69 66 66 20 74   is opened iff t
19100 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63  he database.** c
19110 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72  onnection is cur
19120 72 65 6e 74 6c 79 20 6e 6f 74 20 69 6e 20 61 75  rently not in au
19130 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f  tocommit mode, o
19140 72 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6f  r if there are o
19150 74 68 65 72 0a 2a 2a 20 61 63 74 69 76 65 20 73  ther.** active s
19160 74 61 74 65 6d 65 6e 74 73 2e 20 41 20 73 74 61  tatements. A sta
19170 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
19180 6f 6e 20 61 6c 6c 6f 77 73 20 74 68 65 20 63 68  on allows the ch
19190 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 74 68  anges made by th
191a0 69 73 0a 2a 2a 20 56 44 42 45 20 74 6f 20 62 65  is.** VDBE to be
191b0 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 66 74   rolled back aft
191c0 65 72 20 61 6e 20 65 72 72 6f 72 20 77 69 74 68  er an error with
191d0 6f 75 74 20 68 61 76 69 6e 67 20 74 6f 20 72 6f  out having to ro
191e0 6c 6c 20 62 61 63 6b 20 74 68 65 0a 2a 2a 20 65  ll back the.** e
191f0 6e 74 69 72 65 20 74 72 61 6e 73 61 63 74 69 6f  ntire transactio
19200 6e 2e 20 49 66 20 6e 6f 20 65 72 72 6f 72 20 69  n. If no error i
19210 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2c 20 74  s encountered, t
19220 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  he statement tra
19230 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 77 69 6c 6c  nsaction.** will
19240 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63   automatically c
19250 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68 65 20 56  ommit when the V
19260 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a  DBE halts..**.**
19270 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20 74   If P5!=0 then t
19280 68 69 73 20 6f 70 63 6f 64 65 20 61 6c 73 6f 20  his opcode also 
19290 63 68 65 63 6b 73 20 74 68 65 20 73 63 68 65 6d  checks the schem
192a0 61 20 63 6f 6f 6b 69 65 20 61 67 61 69 6e 73 74  a cookie against
192b0 20 50 33 0a 2a 2a 20 61 6e 64 20 74 68 65 20 73   P3.** and the s
192c0 63 68 65 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e  chema generation
192d0 20 63 6f 75 6e 74 65 72 20 61 67 61 69 6e 73 74   counter against
192e0 20 50 34 2e 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b   P4..** The cook
192f0 69 65 20 63 68 61 6e 67 65 73 20 69 74 73 20 76  ie changes its v
19300 61 6c 75 65 20 77 68 65 6e 65 76 65 72 20 74 68  alue whenever th
19310 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
19320 61 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68  a changes..** Th
19330 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  is operation is 
19340 75 73 65 64 20 74 6f 20 64 65 74 65 63 74 20 77  used to detect w
19350 68 65 6e 20 74 68 61 74 20 74 68 65 20 63 6f 6f  hen that the coo
19360 6b 69 65 20 68 61 73 20 63 68 61 6e 67 65 64 0a  kie has changed.
19370 2a 2a 20 61 6e 64 20 74 68 61 74 20 74 68 65 20  ** and that the 
19380 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20  current process 
19390 6e 65 65 64 73 20 74 6f 20 72 65 72 65 61 64 20  needs to reread 
193a0 74 68 65 20 73 63 68 65 6d 61 2e 20 20 49 66 20  the schema.  If 
193b0 74 68 65 20 73 63 68 65 6d 61 0a 2a 2a 20 63 6f  the schema.** co
193c0 6f 6b 69 65 20 69 6e 20 50 33 20 64 69 66 66 65  okie in P3 diffe
193d0 72 73 20 66 72 6f 6d 20 74 68 65 20 73 63 68 65  rs from the sche
193e0 6d 61 20 63 6f 6f 6b 69 65 20 69 6e 20 74 68 65  ma cookie in the
193f0 20 64 61 74 61 62 61 73 65 20 68 65 61 64 65 72   database header
19400 20 6f 72 0a 2a 2a 20 69 66 20 74 68 65 20 73 63   or.** if the sc
19410 68 65 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e 20  hema generation 
19420 63 6f 75 6e 74 65 72 20 69 6e 20 50 34 20 64 69  counter in P4 di
19430 66 66 65 72 73 20 66 72 6f 6d 20 74 68 65 20 63  ffers from the c
19440 75 72 72 65 6e 74 0a 2a 2a 20 67 65 6e 65 72 61  urrent.** genera
19450 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2c 20 74 68  tion counter, th
19460 65 6e 20 61 6e 20 53 51 4c 49 54 45 5f 53 43 48  en an SQLITE_SCH
19470 45 4d 41 20 65 72 72 6f 72 20 69 73 20 72 61 69  EMA error is rai
19480 73 65 64 20 61 6e 64 20 65 78 65 63 75 74 69 6f  sed and executio
19490 6e 0a 2a 2a 20 68 61 6c 74 73 2e 20 20 54 68 65  n.** halts.  The
194a0 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
194b0 77 72 61 70 70 65 72 20 66 75 6e 63 74 69 6f 6e  wrapper function
194c0 20 6d 69 67 68 74 20 74 68 65 6e 20 72 65 70 72   might then repr
194d0 65 70 61 72 65 20 74 68 65 0a 2a 2a 20 73 74 61  epare the.** sta
194e0 74 65 6d 65 6e 74 20 61 6e 64 20 72 65 72 75 6e  tement and rerun
194f0 20 69 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67   it from the beg
19500 69 6e 6e 69 6e 67 2e 0a 2a 2f 0a 63 61 73 65 20  inning..*/.case 
19510 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a 20  OP_Transaction: 
19520 7b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a  {.  Btree *pBt;.
19530 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69    int iMeta;.  i
19540 6e 74 20 69 47 65 6e 3b 0a 0a 20 20 61 73 73 65  nt iGen;..  asse
19550 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
19560 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
19570 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 7c 7c 20  >readOnly==0 || 
19580 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20 20  pOp->p2==0 );.  
19590 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
195a0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
195b0 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
195c0 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
195d0 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d  >btreeMask, pOp-
195e0 3e 70 31 29 20 29 3b 0a 20 20 69 66 28 20 70 4f  >p1) );.  if( pO
195f0 70 2d 3e 70 32 20 26 26 20 28 64 62 2d 3e 66 6c  p->p2 && (db->fl
19600 61 67 73 20 26 20 53 51 4c 49 54 45 5f 51 75 65  ags & SQLITE_Que
19610 72 79 4f 6e 6c 79 29 21 3d 30 20 29 7b 0a 20 20  ryOnly)!=0 ){.  
19620 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 45    rc = SQLITE_RE
19630 41 44 4f 4e 4c 59 3b 0a 20 20 20 20 67 6f 74 6f  ADONLY;.    goto
19640 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
19650 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 42 74 20 3d  ror;.  }.  pBt =
19660 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
19670 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20 70 42  ].pBt;..  if( pB
19680 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  t ){.    rc = sq
19690 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54  lite3BtreeBeginT
196a0 72 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e 70  rans(pBt, pOp->p
196b0 32 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65  2);.    testcase
196c0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
196d0 59 5f 53 4e 41 50 53 48 4f 54 20 29 3b 0a 20 20  Y_SNAPSHOT );.  
196e0 20 20 74 65 73 74 63 61 73 65 28 20 72 63 3d 3d    testcase( rc==
196f0 53 51 4c 49 54 45 5f 42 55 53 59 5f 52 45 43 4f  SQLITE_BUSY_RECO
19700 56 45 52 59 20 29 3b 0a 20 20 20 20 69 66 28 20  VERY );.    if( 
19710 28 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54  (rc&0xff)==SQLIT
19720 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20  E_BUSY ){.      
19730 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f  p->pc = (int)(pO
19740 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20 20  p - aOp);.      
19750 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 20 20  p->rc = rc;.    
19760 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
19770 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  rn;.    }.    if
19780 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
19790 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  ){.      goto ab
197a0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
197b0 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28  ;.    }..    if(
197c0 20 70 4f 70 2d 3e 70 32 20 26 26 20 70 2d 3e 75   pOp->p2 && p->u
197d0 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a  sesStmtJournal .
197e0 20 20 20 20 20 26 26 20 28 64 62 2d 3e 61 75 74       && (db->aut
197f0 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62  oCommit==0 || db
19800 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31 29 20 0a  ->nVdbeRead>1) .
19810 20 20 20 20 29 7b 0a 20 20 20 20 20 20 61 73 73      ){.      ass
19820 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
19830 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29 20  eIsInTrans(pBt) 
19840 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e  );.      if( p->
19850 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 7b  iStatement==0 ){
19860 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
19870 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3e   db->nStatement>
19880 3d 30 20 26 26 20 64 62 2d 3e 6e 53 61 76 65 70  =0 && db->nSavep
19890 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20 20 20 20 20  oint>=0 );.     
198a0 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e     db->nStatemen
198b0 74 2b 2b 3b 20 0a 20 20 20 20 20 20 20 20 70 2d  t++; .        p-
198c0 3e 69 53 74 61 74 65 6d 65 6e 74 20 3d 20 64 62  >iStatement = db
198d0 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64  ->nSavepoint + d
198e0 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3b 0a 20  b->nStatement;. 
198f0 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 72 63       }..      rc
19900 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53 61   = sqlite3VtabSa
19910 76 65 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45  vepoint(db, SAVE
19920 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 20 70 2d 3e  POINT_BEGIN, p->
19930 69 53 74 61 74 65 6d 65 6e 74 2d 31 29 3b 0a 20  iStatement-1);. 
19940 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
19950 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
19960 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
19970 72 65 65 42 65 67 69 6e 53 74 6d 74 28 70 42 74  reeBeginStmt(pBt
19980 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 29  , p->iStatement)
19990 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
199a0 20 2f 2a 20 53 74 6f 72 65 20 74 68 65 20 63 75   /* Store the cu
199b0 72 72 65 6e 74 20 76 61 6c 75 65 20 6f 66 20 74  rrent value of t
199c0 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
199d0 6c 65 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e  les deferred con
199e0 73 74 72 61 69 6e 74 0a 20 20 20 20 20 20 2a 2a  straint.      **
199f0 20 63 6f 75 6e 74 65 72 2e 20 49 66 20 74 68 65   counter. If the
19a00 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
19a10 61 63 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20  action needs to 
19a20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a  be rolled back,.
19a30 20 20 20 20 20 20 2a 2a 20 74 68 65 20 76 61 6c        ** the val
19a40 75 65 20 6f 66 20 74 68 69 73 20 63 6f 75 6e 74  ue of this count
19a50 65 72 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72  er needs to be r
19a60 65 73 74 6f 72 65 64 20 74 6f 6f 2e 20 20 2a 2f  estored too.  */
19a70 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44  .      p->nStmtD
19a80 65 66 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65  efCons = db->nDe
19a90 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20  ferredCons;.    
19aa0 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 49 6d 6d    p->nStmtDefImm
19ab0 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65  Cons = db->nDefe
19ac0 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20  rredImmCons;.   
19ad0 20 7d 0a 0a 20 20 20 20 2f 2a 20 47 61 74 68 65   }..    /* Gathe
19ae0 72 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72  r the schema ver
19af0 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20  sion number for 
19b00 63 68 65 63 6b 69 6e 67 3a 0a 20 20 20 20 2a 2a  checking:.    **
19b10 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d   IMPLEMENTATION-
19b20 4f 46 3a 20 52 2d 33 32 31 39 35 2d 31 39 34 36  OF: R-32195-1946
19b30 35 20 54 68 65 20 73 63 68 65 6d 61 20 76 65 72  5 The schema ver
19b40 73 69 6f 6e 20 69 73 20 75 73 65 64 20 62 79 20  sion is used by 
19b50 53 51 4c 69 74 65 0a 20 20 20 20 2a 2a 20 65 61  SQLite.    ** ea
19b60 63 68 20 74 69 6d 65 20 61 20 71 75 65 72 79 20  ch time a query 
19b70 69 73 20 65 78 65 63 75 74 65 64 20 74 6f 20 65  is executed to e
19b80 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 69  nsure that the i
19b90 6e 74 65 72 6e 61 6c 20 63 61 63 68 65 20 6f 66  nternal cache of
19ba0 20 74 68 65 0a 20 20 20 20 2a 2a 20 73 63 68 65   the.    ** sche
19bb0 6d 61 20 75 73 65 64 20 77 68 65 6e 20 63 6f 6d  ma used when com
19bc0 70 69 6c 69 6e 67 20 74 68 65 20 53 51 4c 20 71  piling the SQL q
19bd0 75 65 72 79 20 6d 61 74 63 68 65 73 20 74 68 65  uery matches the
19be0 20 73 63 68 65 6d 61 20 6f 66 20 74 68 65 0a 20   schema of the. 
19bf0 20 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 61     ** database a
19c00 67 61 69 6e 73 74 20 77 68 69 63 68 20 74 68 65  gainst which the
19c10 20 63 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 20   compiled query 
19c20 69 73 20 61 63 74 75 61 6c 6c 79 20 65 78 65 63  is actually exec
19c30 75 74 65 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  uted..    */.   
19c40 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74   sqlite3BtreeGet
19c50 4d 65 74 61 28 70 42 74 2c 20 42 54 52 45 45 5f  Meta(pBt, BTREE_
19c60 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 2c 20  SCHEMA_VERSION, 
19c70 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a  (u32 *)&iMeta);.
19c80 20 20 20 20 69 47 65 6e 20 3d 20 64 62 2d 3e 61      iGen = db->a
19c90 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68  Db[pOp->p1].pSch
19ca0 65 6d 61 2d 3e 69 47 65 6e 65 72 61 74 69 6f 6e  ema->iGeneration
19cb0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  ;.  }else{.    i
19cc0 47 65 6e 20 3d 20 69 4d 65 74 61 20 3d 20 30 3b  Gen = iMeta = 0;
19cd0 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
19ce0 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70  Op->p5==0 || pOp
19cf0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
19d00 33 32 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  32 );.  if( pOp-
19d10 3e 70 35 20 26 26 20 28 69 4d 65 74 61 21 3d 70  >p5 && (iMeta!=p
19d20 4f 70 2d 3e 70 33 20 7c 7c 20 69 47 65 6e 21 3d  Op->p3 || iGen!=
19d30 70 4f 70 2d 3e 70 34 2e 69 29 20 29 7b 0a 20 20  pOp->p4.i) ){.  
19d40 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
19d50 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  db, p->zErrMsg);
19d60 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20  .    p->zErrMsg 
19d70 3d 20 73 71 6c 69 74 65 33 44 62 53 74 72 44 75  = sqlite3DbStrDu
19d80 70 28 64 62 2c 20 22 64 61 74 61 62 61 73 65 20  p(db, "database 
19d90 73 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67  schema has chang
19da0 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20  ed");.    /* If 
19db0 74 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69  the schema-cooki
19dc0 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  e from the datab
19dd0 61 73 65 20 66 69 6c 65 20 6d 61 74 63 68 65 73  ase file matches
19de0 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20 20   the cookie .   
19df0 20 2a 2a 20 73 74 6f 72 65 64 20 77 69 74 68 20   ** stored with 
19e00 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72 65  the in-memory re
19e10 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
19e20 74 68 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a 20  the schema, do. 
19e30 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61 64     ** not reload
19e40 20 74 68 65 20 73 63 68 65 6d 61 20 66 72 6f 6d   the schema from
19e50 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
19e60 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  le..    **.    *
19e70 2a 20 49 66 20 76 69 72 74 75 61 6c 2d 74 61 62  * If virtual-tab
19e80 6c 65 73 20 61 72 65 20 69 6e 20 75 73 65 2c 20  les are in use, 
19e90 74 68 69 73 20 69 73 20 6e 6f 74 20 6a 75 73 74  this is not just
19ea0 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e   an optimization
19eb0 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c 20  ..    ** Often, 
19ec0 76 2d 74 61 62 6c 65 73 20 73 74 6f 72 65 20 74  v-tables store t
19ed0 68 65 69 72 20 64 61 74 61 20 69 6e 20 6f 74 68  heir data in oth
19ee0 65 72 20 53 51 4c 69 74 65 20 74 61 62 6c 65 73  er SQLite tables
19ef0 2c 20 77 68 69 63 68 0a 20 20 20 20 2a 2a 20 61  , which.    ** a
19f00 72 65 20 71 75 65 72 69 65 64 20 66 72 6f 6d 20  re queried from 
19f10 77 69 74 68 69 6e 20 78 4e 65 78 74 28 29 20 61  within xNext() a
19f20 6e 64 20 6f 74 68 65 72 20 76 2d 74 61 62 6c 65  nd other v-table
19f30 20 6d 65 74 68 6f 64 73 20 75 73 69 6e 67 0a 20   methods using. 
19f40 20 20 20 2a 2a 20 70 72 65 70 61 72 65 64 20 71     ** prepared q
19f50 75 65 72 69 65 73 2e 20 49 66 20 73 75 63 68 20  ueries. If such 
19f60 61 20 71 75 65 72 79 20 69 73 20 6f 75 74 2d 6f  a query is out-o
19f70 66 2d 64 61 74 65 2c 20 77 65 20 64 6f 20 6e 6f  f-date, we do no
19f80 74 20 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a 2a  t want to.    **
19f90 20 64 69 73 63 61 72 64 20 74 68 65 20 64 61 74   discard the dat
19fa0 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20 61 73  abase schema, as
19fb0 20 74 68 65 20 75 73 65 72 20 63 6f 64 65 20 69   the user code i
19fc0 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 0a  mplementing the.
19fd0 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20 77      ** v-table w
19fe0 6f 75 6c 64 20 68 61 76 65 20 74 6f 20 62 65 20  ould have to be 
19ff0 72 65 61 64 79 20 66 6f 72 20 74 68 65 20 73 71  ready for the sq
1a000 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63  lite3_vtab struc
1a010 74 75 72 65 20 69 74 73 65 6c 66 0a 20 20 20 20  ture itself.    
1a020 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61 6c 69 64  ** to be invalid
1a030 61 74 65 64 20 77 68 65 6e 65 76 65 72 20 73 71  ated whenever sq
1a040 6c 69 74 65 33 5f 73 74 65 70 28 29 20 69 73 20  lite3_step() is 
1a050 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
1a060 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d 74  in .    ** a v-t
1a070 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20 20  able method..   
1a080 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   */.    if( db->
1a090 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63  aDb[pOp->p1].pSc
1a0a0 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f  hema->schema_coo
1a0b0 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20 20  kie!=iMeta ){.  
1a0c0 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
1a0d0 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c 20 70 4f  OneSchema(db, pO
1a0e0 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 20 20  p->p1);.    }.  
1a0f0 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31    p->expired = 1
1a100 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
1a110 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20 20  E_SCHEMA;.  }.  
1a120 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
1a130 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1a140 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1a150 20 4f 70 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f   Opcode: ReadCoo
1a160 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  kie P1 P2 P3 * *
1a170 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b  .**.** Read cook
1a180 69 65 20 6e 75 6d 62 65 72 20 50 33 20 66 72 6f  ie number P3 fro
1a190 6d 20 64 61 74 61 62 61 73 65 20 50 31 20 61 6e  m database P1 an
1a1a0 64 20 77 72 69 74 65 20 69 74 20 69 6e 74 6f 20  d write it into 
1a1b0 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20  register P2..** 
1a1c0 50 33 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68  P3==1 is the sch
1a1d0 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 33  ema version.  P3
1a1e0 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61 62  ==2 is the datab
1a1f0 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50  ase format..** P
1a200 33 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f  3==3 is the reco
1a210 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63 61  mmended pager ca
1a220 63 68 65 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f  che size, and so
1a230 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69   forth.  P1==0 i
1a240 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61  s.** the main da
1a250 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20  tabase file and 
1a260 50 31 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74  P1==1 is the dat
1a270 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20  abase file used 
1a280 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70  to store.** temp
1a290 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a  orary tables..**
1a2a0 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73 74 20 62  .** There must b
1a2b0 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e  e a read-lock on
1a2c0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 28 65   the database (e
1a2d0 69 74 68 65 72 20 61 20 74 72 61 6e 73 61 63 74  ither a transact
1a2e0 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20 73  ion.** must be s
1a2f0 74 61 72 74 65 64 20 6f 72 20 74 68 65 72 65 20  tarted or there 
1a300 6d 75 73 74 20 62 65 20 61 6e 20 6f 70 65 6e 20  must be an open 
1a310 63 75 72 73 6f 72 29 20 62 65 66 6f 72 65 0a 2a  cursor) before.*
1a320 2a 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73  * executing this
1a330 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
1a340 0a 63 61 73 65 20 4f 50 5f 52 65 61 64 43 6f 6f  .case OP_ReadCoo
1a350 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  kie: {          
1a360 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
1a370 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69    int iMeta;.  i
1a380 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 69 43  nt iDb;.  int iC
1a390 6f 6f 6b 69 65 3b 0a 0a 20 20 61 73 73 65 72 74  ookie;..  assert
1a3a0 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
1a3b0 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70  ;.  iDb = pOp->p
1a3c0 31 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20 70  1;.  iCookie = p
1a3d0 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74  Op->p3;.  assert
1a3e0 28 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54 45  ( pOp->p3<SQLITE
1a3f0 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b  _N_BTREE_META );
1a400 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d  .  assert( iDb>=
1a410 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62  0 && iDb<db->nDb
1a420 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62   );.  assert( db
1a430 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 21 3d  ->aDb[iDb].pBt!=
1a440 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44  0 );.  assert( D
1a450 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
1a460 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a  eeMask, iDb) );.
1a470 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47  .  sqlite3BtreeG
1a480 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b 69  etMeta(db->aDb[i
1a490 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69 65  Db].pBt, iCookie
1a4a0 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29  , (u32 *)&iMeta)
1a4b0 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
1a4c0 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
1a4d0 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
1a4e0 20 69 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b 3b   iMeta;.  break;
1a4f0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
1a500 65 74 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50  etCookie P1 P2 P
1a510 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74  3 * *.**.** Writ
1a520 65 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61  e the integer va
1a530 6c 75 65 20 50 33 20 69 6e 74 6f 20 63 6f 6f 6b  lue P3 into cook
1a540 69 65 20 6e 75 6d 62 65 72 20 50 32 20 6f 66 20  ie number P2 of 
1a550 64 61 74 61 62 61 73 65 20 50 31 2e 0a 2a 2a 20  database P1..** 
1a560 50 32 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68  P2==1 is the sch
1a570 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 32  ema version.  P2
1a580 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61 62  ==2 is the datab
1a590 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50  ase format..** P
1a5a0 32 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f  2==3 is the reco
1a5b0 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63 61  mmended pager ca
1a5c0 63 68 65 20 0a 2a 2a 20 73 69 7a 65 2c 20 61 6e  che .** size, an
1a5d0 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d  d so forth.  P1=
1a5e0 3d 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64  =0 is the main d
1a5f0 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
1a600 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20 0a 2a   P1==1 is the .*
1a610 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  * database file 
1a620 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 65  used to store te
1a630 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a  mporary tables..
1a640 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73 61 63 74  **.** A transact
1a650 69 6f 6e 20 6d 75 73 74 20 62 65 20 73 74 61 72  ion must be star
1a660 74 65 64 20 62 65 66 6f 72 65 20 65 78 65 63 75  ted before execu
1a670 74 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65  ting this opcode
1a680 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74  ..*/.case OP_Set
1a690 43 6f 6f 6b 69 65 3a 20 7b 0a 20 20 44 62 20 2a  Cookie: {.  Db *
1a6a0 70 44 62 3b 0a 20 20 61 73 73 65 72 74 28 20 70  pDb;.  assert( p
1a6b0 4f 70 2d 3e 70 32 3c 53 51 4c 49 54 45 5f 4e 5f  Op->p2<SQLITE_N_
1a6c0 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20  BTREE_META );.  
1a6d0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1a6e0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
1a6f0 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
1a700 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
1a710 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d  >btreeMask, pOp-
1a720 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74  >p1) );.  assert
1a730 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
1a740 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d   );.  pDb = &db-
1a750 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  >aDb[pOp->p1];. 
1a760 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42   assert( pDb->pB
1a770 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  t!=0 );.  assert
1a780 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d  ( sqlite3SchemaM
1a790 75 74 65 78 48 65 6c 64 28 64 62 2c 20 70 4f 70  utexHeld(db, pOp
1a7a0 2d 3e 70 31 2c 20 30 29 20 29 3b 0a 20 20 2f 2a  ->p1, 0) );.  /*
1a7b0 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 75 74 20   See note about 
1a7c0 69 6e 64 65 78 20 73 68 69 66 74 69 6e 67 20 6f  index shifting o
1a7d0 6e 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 20  n OP_ReadCookie 
1a7e0 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
1a7f0 33 42 74 72 65 65 55 70 64 61 74 65 4d 65 74 61  3BtreeUpdateMeta
1a800 28 70 44 62 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e  (pDb->pBt, pOp->
1a810 70 32 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a 20 20  p2, pOp->p3);.  
1a820 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52  if( pOp->p2==BTR
1a830 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f  EE_SCHEMA_VERSIO
1a840 4e 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e  N ){.    /* When
1a850 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b   the schema cook
1a860 69 65 20 63 68 61 6e 67 65 73 2c 20 72 65 63 6f  ie changes, reco
1a870 72 64 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69  rd the new cooki
1a880 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a  e internally */.
1a890 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61      pDb->pSchema
1a8a0 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20  ->schema_cookie 
1a8b0 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 64  = pOp->p3;.    d
1a8c0 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49  b->flags |= SQLI
1a8d0 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73  TE_InternChanges
1a8e0 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f  ;.  }else if( pO
1a8f0 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 46 49 4c  p->p2==BTREE_FIL
1a900 45 5f 46 4f 52 4d 41 54 20 29 7b 0a 20 20 20 20  E_FORMAT ){.    
1a910 2f 2a 20 52 65 63 6f 72 64 20 63 68 61 6e 67 65  /* Record change
1a920 73 20 69 6e 20 74 68 65 20 66 69 6c 65 20 66 6f  s in the file fo
1a930 72 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44 62 2d  rmat */.    pDb-
1a940 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66  >pSchema->file_f
1a950 6f 72 6d 61 74 20 3d 20 70 4f 70 2d 3e 70 33 3b  ormat = pOp->p3;
1a960 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
1a970 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f 2a 20  p1==1 ){.    /* 
1a980 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 70  Invalidate all p
1a990 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
1a9a0 74 73 20 77 68 65 6e 65 76 65 72 20 74 68 65 20  ts whenever the 
1a9b0 54 45 4d 50 20 64 61 74 61 62 61 73 65 0a 20 20  TEMP database.  
1a9c0 20 20 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 63    ** schema is c
1a9d0 68 61 6e 67 65 64 2e 20 20 54 69 63 6b 65 74 20  hanged.  Ticket 
1a9e0 23 31 36 34 34 20 2a 2f 0a 20 20 20 20 73 71 6c  #1644 */.    sql
1a9f0 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72  ite3ExpirePrepar
1aa00 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29  edStatements(db)
1aa10 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64  ;.    p->expired
1aa20 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20   = 0;.  }.  if( 
1aa30 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
1aa40 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1aa50 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1aa60 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64 20 50 31  ode: OpenRead P1
1aa70 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
1aa80 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50  Synopsis: root=P
1aa90 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f  2 iDb=P3.**.** O
1aaa0 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e 6c 79 20  pen a read-only 
1aab0 63 75 72 73 6f 72 20 66 6f 72 20 74 68 65 20 64  cursor for the d
1aac0 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 77 68  atabase table wh
1aad0 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 73  ose root page is
1aae0 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64 61 74 61  .** P2 in a data
1aaf0 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65 20  base file.  The 
1ab00 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73  database file is
1ab10 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 50   determined by P
1ab20 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65 61  3. .** P3==0 mea
1ab30 6e 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ns the main data
1ab40 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d 65 61 6e  base, P3==1 mean
1ab50 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75  s the database u
1ab60 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74 65 6d 70  sed for .** temp
1ab70 6f 72 61 72 79 20 74 61 62 6c 65 73 2c 20 61 6e  orary tables, an
1ab80 64 20 50 33 3e 31 20 6d 65 61 6e 73 20 75 73 65  d P3>1 means use
1ab90 64 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  d the correspond
1aba0 69 6e 67 20 61 74 74 61 63 68 65 64 0a 2a 2a 20  ing attached.** 
1abb0 64 61 74 61 62 61 73 65 2e 20 20 47 69 76 65 20  database.  Give 
1abc0 74 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20 61  the new cursor a
1abd0 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6f 66 20  n identifier of 
1abe0 50 31 2e 20 20 54 68 65 20 50 31 0a 2a 2a 20 76  P1.  The P1.** v
1abf0 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f 74 20 62  alues need not b
1ac00 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 62 75 74  e contiguous but
1ac10 20 61 6c 6c 20 50 31 20 76 61 6c 75 65 73 20 73   all P1 values s
1ac20 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c 6c 20 69  hould be small i
1ac30 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49 74 20 69  ntegers..** It i
1ac40 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 50  s an error for P
1ac50 31 20 74 6f 20 62 65 20 6e 65 67 61 74 69 76 65  1 to be negative
1ac60 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30  ..**.** If P5!=0
1ac70 20 74 68 65 6e 20 75 73 65 20 74 68 65 20 63 6f   then use the co
1ac80 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
1ac90 72 20 50 32 20 61 73 20 74 68 65 20 72 6f 6f 74  r P2 as the root
1aca0 20 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a 20 74 68   page, not.** th
1acb0 65 20 76 61 6c 75 65 20 6f 66 20 50 32 20 69 74  e value of P2 it
1acc0 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72  self..**.** Ther
1acd0 65 20 77 69 6c 6c 20 62 65 20 61 20 72 65 61 64  e will be a read
1ace0 20 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74   lock on the dat
1acf0 61 62 61 73 65 20 77 68 65 6e 65 76 65 72 20 74  abase whenever t
1ad00 68 65 72 65 20 69 73 20 61 6e 0a 2a 2a 20 6f 70  here is an.** op
1ad10 65 6e 20 63 75 72 73 6f 72 2e 20 20 49 66 20 74  en cursor.  If t
1ad20 68 65 20 64 61 74 61 62 61 73 65 20 77 61 73 20  he database was 
1ad30 75 6e 6c 6f 63 6b 65 64 20 70 72 69 6f 72 20 74  unlocked prior t
1ad40 6f 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  o this instructi
1ad50 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61 20 72 65 61  on.** then a rea
1ad60 64 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72  d lock is acquir
1ad70 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68  ed as part of th
1ad80 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  is instruction. 
1ad90 20 41 20 72 65 61 64 0a 2a 2a 20 6c 6f 63 6b 20   A read.** lock 
1ada0 61 6c 6c 6f 77 73 20 6f 74 68 65 72 20 70 72 6f  allows other pro
1adb0 63 65 73 73 65 73 20 74 6f 20 72 65 61 64 20 74  cesses to read t
1adc0 68 65 20 64 61 74 61 62 61 73 65 20 62 75 74 20  he database but 
1add0 70 72 6f 68 69 62 69 74 73 0a 2a 2a 20 61 6e 79  prohibits.** any
1ade0 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 20 66   other process f
1adf0 72 6f 6d 20 6d 6f 64 69 66 79 69 6e 67 20 74 68  rom modifying th
1ae00 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65  e database.  The
1ae10 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 0a 2a 2a   read lock is.**
1ae20 20 72 65 6c 65 61 73 65 64 20 77 68 65 6e 20 61   released when a
1ae30 6c 6c 20 63 75 72 73 6f 72 73 20 61 72 65 20 63  ll cursors are c
1ae40 6c 6f 73 65 64 2e 20 20 49 66 20 74 68 69 73 20  losed.  If this 
1ae50 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 74 65  instruction atte
1ae60 6d 70 74 73 0a 2a 2a 20 74 6f 20 67 65 74 20 61  mpts.** to get a
1ae70 20 72 65 61 64 20 6c 6f 63 6b 20 62 75 74 20 66   read lock but f
1ae80 61 69 6c 73 2c 20 74 68 65 20 73 63 72 69 70 74  ails, the script
1ae90 20 74 65 72 6d 69 6e 61 74 65 73 20 77 69 74 68   terminates with
1aea0 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55   an.** SQLITE_BU
1aeb0 53 59 20 65 72 72 6f 72 20 63 6f 64 65 2e 0a 2a  SY error code..*
1aec0 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75  *.** The P4 valu
1aed0 65 20 6d 61 79 20 62 65 20 65 69 74 68 65 72 20  e may be either 
1aee0 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49  an integer (P4_I
1aef0 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74  NT32) or a point
1af00 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e  er to.** a KeyIn
1af10 66 6f 20 73 74 72 75 63 74 75 72 65 20 28 50 34  fo structure (P4
1af20 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74  _KEYINFO). If it
1af30 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
1af40 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73   a KeyInfo .** s
1af50 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20 73  tructure, then s
1af60 61 69 64 20 73 74 72 75 63 74 75 72 65 20 64 65  aid structure de
1af70 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e  fines the conten
1af80 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20  t and collating 
1af90 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20  .** sequence of 
1afa0 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67 20  the index being 
1afb0 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69 73  opened. Otherwis
1afc0 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20 69  e, if P4 is an i
1afd0 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65  nteger .** value
1afe0 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74  , it is set to t
1aff0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
1b000 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
1b010 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  e..**.** See als
1b020 6f 3a 20 4f 70 65 6e 57 72 69 74 65 2c 20 52 65  o: OpenWrite, Re
1b030 6f 70 65 6e 49 64 78 0a 2a 2f 0a 2f 2a 20 4f 70  openIdx.*/./* Op
1b040 63 6f 64 65 3a 20 52 65 6f 70 65 6e 49 64 78 20  code: ReopenIdx 
1b050 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
1b060 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74  * Synopsis: root
1b070 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a  =P2 iDb=P3.**.**
1b080 20 54 68 65 20 52 65 6f 70 65 6e 49 64 78 20 6f   The ReopenIdx o
1b090 70 63 6f 64 65 20 77 6f 72 6b 73 20 65 78 61 63  pcode works exac
1b0a0 74 6c 79 20 6c 69 6b 65 20 52 65 61 64 4f 70 65  tly like ReadOpe
1b0b0 6e 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74  n except that it
1b0c0 20 66 69 72 73 74 0a 2a 2a 20 63 68 65 63 6b 73   first.** checks
1b0d0 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 63   to see if the c
1b0e0 75 72 73 6f 72 20 6f 6e 20 50 31 20 69 73 20 61  ursor on P1 is a
1b0f0 6c 72 65 61 64 79 20 6f 70 65 6e 20 77 69 74 68  lready open with
1b100 20 61 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20   a root page.** 
1b110 6e 75 6d 62 65 72 20 6f 66 20 50 32 20 61 6e 64  number of P2 and
1b120 20 69 66 20 69 74 20 69 73 20 74 68 69 73 20 6f   if it is this o
1b130 70 63 6f 64 65 20 62 65 63 6f 6d 65 73 20 61 20  pcode becomes a 
1b140 6e 6f 2d 6f 70 2e 20 20 49 6e 20 6f 74 68 65 72  no-op.  In other
1b150 20 77 6f 72 64 73 2c 0a 2a 2a 20 69 66 20 74 68   words,.** if th
1b160 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c 72 65  e cursor is alre
1b170 61 64 79 20 6f 70 65 6e 2c 20 64 6f 20 6e 6f 74  ady open, do not
1b180 20 72 65 6f 70 65 6e 20 69 74 2e 0a 2a 2a 0a 2a   reopen it..**.*
1b190 2a 20 54 68 65 20 52 65 6f 70 65 6e 49 64 78 20  * The ReopenIdx 
1b1a0 6f 70 63 6f 64 65 20 6d 61 79 20 6f 6e 6c 79 20  opcode may only 
1b1b0 62 65 20 75 73 65 64 20 77 69 74 68 20 50 35 3d  be used with P5=
1b1c0 3d 30 20 61 6e 64 20 77 69 74 68 20 50 34 20 62  =0 and with P4 b
1b1d0 65 69 6e 67 0a 2a 2a 20 61 20 50 34 5f 4b 45 59  eing.** a P4_KEY
1b1e0 49 4e 46 4f 20 6f 62 6a 65 63 74 2e 20 20 46 75  INFO object.  Fu
1b1f0 72 74 68 65 72 6d 6f 72 65 2c 20 74 68 65 20 50  rthermore, the P
1b200 33 20 76 61 6c 75 65 20 6d 75 73 74 20 62 65 20  3 value must be 
1b210 74 68 65 20 73 61 6d 65 20 61 73 0a 2a 2a 20 65  the same as.** e
1b220 76 65 72 79 20 6f 74 68 65 72 20 52 65 6f 70 65  very other Reope
1b230 6e 49 64 78 20 6f 72 20 4f 70 65 6e 52 65 61 64  nIdx or OpenRead
1b240 20 66 6f 72 20 74 68 65 20 73 61 6d 65 20 63 75   for the same cu
1b250 72 73 6f 72 20 6e 75 6d 62 65 72 2e 0a 2a 2a 0a  rsor number..**.
1b260 2a 2a 20 53 65 65 20 74 68 65 20 4f 70 65 6e 52  ** See the OpenR
1b270 65 61 64 20 6f 70 63 6f 64 65 20 64 6f 63 75 6d  ead opcode docum
1b280 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 61 64 64  entation for add
1b290 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
1b2a0 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
1b2b0 65 3a 20 4f 70 65 6e 57 72 69 74 65 20 50 31 20  e: OpenWrite P1 
1b2c0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
1b2d0 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32  ynopsis: root=P2
1b2e0 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70   iDb=P3.**.** Op
1b2f0 65 6e 20 61 20 72 65 61 64 2f 77 72 69 74 65 20  en a read/write 
1b300 63 75 72 73 6f 72 20 6e 61 6d 65 64 20 50 31 20  cursor named P1 
1b310 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  on the table or 
1b320 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74  index whose root
1b330 0a 2a 2a 20 70 61 67 65 20 69 73 20 50 32 2e 20  .** page is P2. 
1b340 20 4f 72 20 69 66 20 50 35 21 3d 30 20 75 73 65   Or if P5!=0 use
1b350 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
1b360 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 66  register P2 to f
1b370 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74 20  ind the.** root 
1b380 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  page..**.** The 
1b390 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20  P4 value may be 
1b3a0 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65  either an intege
1b3b0 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20  r (P4_INT32) or 
1b3c0 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20  a pointer to.** 
1b3d0 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74  a KeyInfo struct
1b3e0 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29  ure (P4_KEYINFO)
1b3f0 2e 20 49 66 20 69 74 20 69 73 20 61 20 70 6f 69  . If it is a poi
1b400 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66  nter to a KeyInf
1b410 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c  o .** structure,
1b420 20 74 68 65 6e 20 73 61 69 64 20 73 74 72 75 63   then said struc
1b430 74 75 72 65 20 64 65 66 69 6e 65 73 20 74 68 65  ture defines the
1b440 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c   content and col
1b450 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65  lating .** seque
1b460 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78  nce of the index
1b470 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f   being opened. O
1b480 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34 20  therwise, if P4 
1b490 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a  is an integer .*
1b4a0 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73  * value, it is s
1b4b0 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  et to the number
1b4c0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
1b4d0 68 65 20 74 61 62 6c 65 2c 20 6f 72 20 74 6f 20  he table, or to 
1b4e0 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73 74 20 69  the.** largest i
1b4f0 6e 64 65 78 20 6f 66 20 61 6e 79 20 63 6f 6c 75  ndex of any colu
1b500 6d 6e 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  mn of the table 
1b510 74 68 61 74 20 69 73 20 61 63 74 75 61 6c 6c 79  that is actually
1b520 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69   used..**.** Thi
1b530 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 6f  s instruction wo
1b540 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f 70  rks just like Op
1b550 65 6e 52 65 61 64 20 65 78 63 65 70 74 20 74 68  enRead except th
1b560 61 74 20 69 74 20 6f 70 65 6e 73 20 74 68 65 20  at it opens the 
1b570 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65 61  cursor.** in rea
1b580 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e 20 20 46  d/write mode.  F
1b590 6f 72 20 61 20 67 69 76 65 6e 20 74 61 62 6c 65  or a given table
1b5a0 2c 20 74 68 65 72 65 20 63 61 6e 20 62 65 20 6f  , there can be o
1b5b0 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65 61 64 2d  ne or more read-
1b5c0 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73 20  only.** cursors 
1b5d0 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 65 61 64  or a single read
1b5e0 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 62 75  /write cursor bu
1b5f0 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a 2a  t not both..**.*
1b600 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 52  * See also OpenR
1b610 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ead..*/.case OP_
1b620 52 65 6f 70 65 6e 49 64 78 3a 20 7b 0a 20 20 69  ReopenIdx: {.  i
1b630 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 4b 65 79  nt nField;.  Key
1b640 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a  Info *pKeyInfo;.
1b650 20 20 69 6e 74 20 70 32 3b 0a 20 20 69 6e 74 20    int p2;.  int 
1b660 69 44 62 3b 0a 20 20 69 6e 74 20 77 72 46 6c 61  iDb;.  int wrFla
1b670 67 3b 0a 20 20 42 74 72 65 65 20 2a 70 58 3b 0a  g;.  Btree *pX;.
1b680 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1b690 75 72 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a  ur;.  Db *pDb;..
1b6a0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1b6b0 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  5==0 || pOp->p5=
1b6c0 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29  =OPFLAG_SEEKEQ )
1b6d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1b6e0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49  >p4type==P4_KEYI
1b6f0 4e 46 4f 20 29 3b 0a 20 20 70 43 75 72 20 3d 20  NFO );.  pCur = 
1b700 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1b710 5d 3b 0a 20 20 69 66 28 20 70 43 75 72 20 26 26  ];.  if( pCur &&
1b720 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74 3d   pCur->pgnoRoot=
1b730 3d 28 75 33 32 29 70 4f 70 2d 3e 70 32 20 29 7b  =(u32)pOp->p2 ){
1b740 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 75  .    assert( pCu
1b750 72 2d 3e 69 44 62 3d 3d 70 4f 70 2d 3e 70 33 20  r->iDb==pOp->p3 
1b760 29 3b 20 20 20 20 20 20 2f 2a 20 47 75 61 72 61  );      /* Guara
1b770 6e 74 65 65 64 20 62 79 20 74 68 65 20 63 6f 64  nteed by the cod
1b780 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20  e generator */. 
1b790 20 20 20 67 6f 74 6f 20 6f 70 65 6e 5f 63 75 72     goto open_cur
1b7a0 73 6f 72 5f 73 65 74 5f 68 69 6e 74 73 3b 0a 20  sor_set_hints;. 
1b7b0 20 7d 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63   }.  /* If the c
1b7c0 75 72 73 6f 72 20 69 73 20 6e 6f 74 20 63 75 72  ursor is not cur
1b7d0 72 65 6e 74 6c 79 20 6f 70 65 6e 20 6f 72 20 69  rently open or i
1b7e0 73 20 6f 70 65 6e 20 6f 6e 20 61 20 64 69 66 66  s open on a diff
1b7f0 65 72 65 6e 74 0a 20 20 2a 2a 20 69 6e 64 65 78  erent.  ** index
1b800 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  , then fall thro
1b810 75 67 68 20 69 6e 74 6f 20 4f 50 5f 4f 70 65 6e  ugh into OP_Open
1b820 52 65 61 64 20 74 6f 20 66 6f 72 63 65 20 61 20  Read to force a 
1b830 72 65 6f 70 65 6e 20 2a 2f 0a 63 61 73 65 20 4f  reopen */.case O
1b840 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73 65  P_OpenRead:.case
1b850 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a 0a 0a   OP_OpenWrite:..
1b860 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
1b870 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72  pcode==OP_OpenWr
1b880 69 74 65 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d  ite || pOp->p5==
1b890 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50  0 || pOp->p5==OP
1b8a0 46 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a 20  FLAG_SEEKEQ );. 
1b8b0 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52   assert( p->bIsR
1b8c0 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73 65 72  eader );.  asser
1b8d0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
1b8e0 4f 50 5f 4f 70 65 6e 52 65 61 64 20 7c 7c 20 70  OP_OpenRead || p
1b8f0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52  Op->opcode==OP_R
1b900 65 6f 70 65 6e 49 64 78 0a 20 20 20 20 20 20 20  eopenIdx.       
1b910 20 20 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c     || p->readOnl
1b920 79 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28 20 70  y==0 );..  if( p
1b930 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a 20 20 20  ->expired ){.   
1b940 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 41 42 4f   rc = SQLITE_ABO
1b950 52 54 5f 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20  RT_ROLLBACK;.   
1b960 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1b970 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20  to_error;.  }.. 
1b980 20 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20 70   nField = 0;.  p
1b990 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20 70  KeyInfo = 0;.  p
1b9a0 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69  2 = pOp->p2;.  i
1b9b0 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  Db = pOp->p3;.  
1b9c0 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26  assert( iDb>=0 &
1b9d0 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b  & iDb<db->nDb );
1b9e0 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73  .  assert( DbMas
1b9f0 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
1ba00 73 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20 70 44  sk, iDb) );.  pD
1ba10 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44 62  b = &db->aDb[iDb
1ba20 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e 70  ];.  pX = pDb->p
1ba30 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 58  Bt;.  assert( pX
1ba40 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  !=0 );.  if( pOp
1ba50 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65  ->opcode==OP_Ope
1ba60 6e 57 72 69 74 65 20 29 7b 0a 20 20 20 20 61 73  nWrite ){.    as
1ba70 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 46 4f 52  sert( OPFLAG_FOR
1ba80 44 45 4c 45 54 45 3d 3d 42 54 52 45 45 5f 46 4f  DELETE==BTREE_FO
1ba90 52 44 45 4c 45 54 45 20 29 3b 0a 20 20 20 20 77  RDELETE );.    w
1baa0 72 46 6c 61 67 20 3d 20 42 54 52 45 45 5f 57 52  rFlag = BTREE_WR
1bab0 43 53 52 20 7c 20 28 70 4f 70 2d 3e 70 35 20 26  CSR | (pOp->p5 &
1bac0 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54   OPFLAG_FORDELET
1bad0 45 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  E);.    assert( 
1bae0 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74  sqlite3SchemaMut
1baf0 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20  exHeld(db, iDb, 
1bb00 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20 70 44  0) );.    if( pD
1bb10 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65  b->pSchema->file
1bb20 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e  _format < p->min
1bb30 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20  WriteFileFormat 
1bb40 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e 57  ){.      p->minW
1bb50 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 3d  riteFileFormat =
1bb60 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66   pDb->pSchema->f
1bb70 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20 20  ile_format;.    
1bb80 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77  }.  }else{.    w
1bb90 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a 20  rFlag = 0;.  }. 
1bba0 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f   if( pOp->p5 & O
1bbb0 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 29 7b  PFLAG_P2ISREG ){
1bbc0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e  .    assert( p2>
1bbd0 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
1bbe0 20 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d   p2<=(p->nMem-p-
1bbf0 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
1bc00 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 32   pIn2 = &aMem[p2
1bc10 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  ];.    assert( m
1bc20 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 32 29 20  emIsValid(pIn2) 
1bc30 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28  );.    assert( (
1bc40 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
1bc50 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 20  M_Int)!=0 );.   
1bc60 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
1bc70 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b  ntegerify(pIn2);
1bc80 0a 20 20 20 20 70 32 20 3d 20 28 69 6e 74 29 70  .    p2 = (int)p
1bc90 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 2f 2a  In2->u.i;.    /*
1bca0 20 54 68 65 20 70 32 20 76 61 6c 75 65 20 61 6c   The p2 value al
1bcb0 77 61 79 73 20 63 6f 6d 65 73 20 66 72 6f 6d 20  ways comes from 
1bcc0 61 20 70 72 69 6f 72 20 4f 50 5f 43 72 65 61 74  a prior OP_Creat
1bcd0 65 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 61 6e  eTable opcode an
1bce0 64 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 6f 70  d.    ** that op
1bcf0 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73  code will always
1bd00 20 73 65 74 20 74 68 65 20 70 32 20 76 61 6c 75   set the p2 valu
1bd10 65 20 74 6f 20 32 20 6f 72 20 6d 6f 72 65 20 6f  e to 2 or more o
1bd20 72 20 65 6c 73 65 20 66 61 69 6c 2e 0a 20 20 20  r else fail..   
1bd30 20 2a 2a 20 49 66 20 74 68 65 72 65 20 77 65 72   ** If there wer
1bd40 65 20 61 20 66 61 69 6c 75 72 65 2c 20 74 68 65  e a failure, the
1bd50 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
1bd60 65 6e 74 20 77 6f 75 6c 64 20 68 61 76 65 20 68  ent would have h
1bd70 61 6c 74 65 64 0a 20 20 20 20 2a 2a 20 62 65 66  alted.    ** bef
1bd80 6f 72 65 20 72 65 61 63 68 69 6e 67 20 74 68 69  ore reaching thi
1bd90 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 2a  s instruction. *
1bda0 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32  /.    assert( p2
1bdb0 3e 3d 32 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28  >=2 );.  }.  if(
1bdc0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1bdd0 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a 20 20 20 20  _KEYINFO ){.    
1bde0 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e  pKeyInfo = pOp->
1bdf0 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  p4.pKeyInfo;.   
1be00 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66   assert( pKeyInf
1be10 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20  o->enc==ENC(db) 
1be20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
1be30 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20  KeyInfo->db==db 
1be40 29 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20  );.    nField = 
1be50 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64  pKeyInfo->nField
1be60 2b 70 4b 65 79 49 6e 66 6f 2d 3e 6e 58 46 69 65  +pKeyInfo->nXFie
1be70 6c 64 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ld;.  }else if( 
1be80 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1be90 49 4e 54 33 32 20 29 7b 0a 20 20 20 20 6e 46 69  INT32 ){.    nFi
1bea0 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  eld = pOp->p4.i;
1beb0 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
1bec0 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61  Op->p1>=0 );.  a
1bed0 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 3d 30  ssert( nField>=0
1bee0 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
1bef0 6e 46 69 65 6c 64 3d 3d 30 20 29 3b 20 20 2f 2a  nField==0 );  /*
1bf00 20 54 61 62 6c 65 20 77 69 74 68 20 49 4e 54 45   Table with INTE
1bf10 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20  GER PRIMARY KEY 
1bf20 61 6e 64 20 6e 6f 74 68 69 6e 67 20 65 6c 73 65  and nothing else
1bf30 20 2a 2f 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c   */.  pCur = all
1bf40 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70  ocateCursor(p, p
1bf50 4f 70 2d 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20  Op->p1, nField, 
1bf60 69 44 62 2c 20 43 55 52 54 59 50 45 5f 42 54 52  iDb, CURTYPE_BTR
1bf70 45 45 29 3b 0a 20 20 69 66 28 20 70 43 75 72 3d  EE);.  if( pCur=
1bf80 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1bf90 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f  ;.  pCur->nullRo
1bfa0 77 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e 69  w = 1;.  pCur->i
1bfb0 73 4f 72 64 65 72 65 64 20 3d 20 31 3b 0a 20 20  sOrdered = 1;.  
1bfc0 70 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d  pCur->pgnoRoot =
1bfd0 20 70 32 3b 0a 23 69 66 64 65 66 20 53 51 4c 49   p2;.#ifdef SQLI
1bfe0 54 45 5f 44 45 42 55 47 0a 20 20 70 43 75 72 2d  TE_DEBUG.  pCur-
1bff0 3e 77 72 46 6c 61 67 20 3d 20 77 72 46 6c 61 67  >wrFlag = wrFlag
1c000 3b 0a 23 65 6e 64 69 66 0a 20 20 72 63 20 3d 20  ;.#endif.  rc = 
1c010 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
1c020 6f 72 28 70 58 2c 20 70 32 2c 20 77 72 46 6c 61  or(pX, p2, wrFla
1c030 67 2c 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75  g, pKeyInfo, pCu
1c040 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a  r->uc.pCursor);.
1c050 20 20 70 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f    pCur->pKeyInfo
1c060 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 2f   = pKeyInfo;.  /
1c070 2a 20 53 65 74 20 74 68 65 20 56 64 62 65 43 75  * Set the VdbeCu
1c080 72 73 6f 72 2e 69 73 54 61 62 6c 65 20 76 61 72  rsor.isTable var
1c090 69 61 62 6c 65 2e 20 50 72 65 76 69 6f 75 73 20  iable. Previous 
1c0a0 76 65 72 73 69 6f 6e 73 20 6f 66 0a 20 20 2a 2a  versions of.  **
1c0b0 20 53 51 4c 69 74 65 20 75 73 65 64 20 74 6f 20   SQLite used to 
1c0c0 63 68 65 63 6b 20 69 66 20 74 68 65 20 72 6f 6f  check if the roo
1c0d0 74 2d 70 61 67 65 20 66 6c 61 67 73 20 77 65 72  t-page flags wer
1c0e0 65 20 73 61 6e 65 20 61 74 20 74 68 69 73 20 70  e sane at this p
1c0f0 6f 69 6e 74 0a 20 20 2a 2a 20 61 6e 64 20 72 65  oint.  ** and re
1c100 70 6f 72 74 20 64 61 74 61 62 61 73 65 20 63 6f  port database co
1c110 72 72 75 70 74 69 6f 6e 20 69 66 20 74 68 65 79  rruption if they
1c120 20 77 65 72 65 20 6e 6f 74 2c 20 62 75 74 20 74   were not, but t
1c130 68 69 73 20 63 68 65 63 6b 20 68 61 73 0a 20 20  his check has.  
1c140 2a 2a 20 73 69 6e 63 65 20 6d 6f 76 65 64 20 69  ** since moved i
1c150 6e 74 6f 20 74 68 65 20 62 74 72 65 65 20 6c 61  nto the btree la
1c160 79 65 72 2e 20 20 2a 2f 20 20 0a 20 20 70 43 75  yer.  */  .  pCu
1c170 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f 70  r->isTable = pOp
1c180 2d 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b 45 59  ->p4type!=P4_KEY
1c190 49 4e 46 4f 3b 0a 0a 6f 70 65 6e 5f 63 75 72 73  INFO;..open_curs
1c1a0 6f 72 5f 73 65 74 5f 68 69 6e 74 73 3a 0a 20 20  or_set_hints:.  
1c1b0 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 42  assert( OPFLAG_B
1c1c0 55 4c 4b 43 53 52 3d 3d 42 54 52 45 45 5f 42 55  ULKCSR==BTREE_BU
1c1d0 4c 4b 4c 4f 41 44 20 29 3b 0a 20 20 61 73 73 65  LKLOAD );.  asse
1c1e0 72 74 28 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45  rt( OPFLAG_SEEKE
1c1f0 51 3d 3d 42 54 52 45 45 5f 53 45 45 4b 5f 45 51  Q==BTREE_SEEK_EQ
1c200 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
1c210 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
1c220 5f 42 55 4c 4b 43 53 52 20 29 3b 0a 23 69 66 64  _BULKCSR );.#ifd
1c230 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
1c240 5f 43 55 52 53 4f 52 5f 48 49 4e 54 53 0a 20 20  _CURSOR_HINTS.  
1c250 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
1c260 32 20 26 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45  2 & OPFLAG_SEEKE
1c270 51 20 29 3b 0a 23 65 6e 64 69 66 0a 20 20 73 71  Q );.#endif.  sq
1c280 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
1c290 48 69 6e 74 46 6c 61 67 73 28 70 43 75 72 2d 3e  HintFlags(pCur->
1c2a0 75 63 2e 70 43 75 72 73 6f 72 2c 0a 20 20 20 20  uc.pCursor,.    
1c2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2c0 20 20 20 20 20 20 20 20 20 20 20 28 70 4f 70 2d             (pOp-
1c2d0 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 42 55  >p5 & (OPFLAG_BU
1c2e0 4c 4b 43 53 52 7c 4f 50 46 4c 41 47 5f 53 45 45  LKCSR|OPFLAG_SEE
1c2f0 4b 45 51 29 29 29 3b 0a 20 20 69 66 28 20 72 63  KEQ)));.  if( rc
1c300 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1c310 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
1c320 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1c330 65 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  e: OpenEphemeral
1c340 20 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a 2a   P1 P2 * P4 P5.*
1c350 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c  * Synopsis: nCol
1c360 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 4f 70 65  umn=P2.**.** Ope
1c370 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 50  n a new cursor P
1c380 31 20 74 6f 20 61 20 74 72 61 6e 73 69 65 6e 74  1 to a transient
1c390 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63   table..** The c
1c3a0 75 72 73 6f 72 20 69 73 20 61 6c 77 61 79 73 20  ursor is always 
1c3b0 6f 70 65 6e 65 64 20 72 65 61 64 2f 77 72 69 74  opened read/writ
1c3c0 65 20 65 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68  e even if .** th
1c3d0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
1c3e0 69 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54  is read-only.  T
1c3f0 68 65 20 65 70 68 65 6d 65 72 61 6c 0a 2a 2a 20  he ephemeral.** 
1c400 74 61 62 6c 65 20 69 73 20 64 65 6c 65 74 65 64  table is deleted
1c410 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77   automatically w
1c420 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69  hen the cursor i
1c430 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  s closed..**.** 
1c440 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72  P2 is the number
1c450 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
1c460 68 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62  he ephemeral tab
1c470 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f  le..** The curso
1c480 72 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 42 54  r points to a BT
1c490 72 65 65 20 74 61 62 6c 65 20 69 66 20 50 34 3d  ree table if P4=
1c4a0 3d 30 20 61 6e 64 20 74 6f 20 61 20 42 54 72 65  =0 and to a BTre
1c4b0 65 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34  e index.** if P4
1c4c0 20 69 73 20 6e 6f 74 20 30 2e 20 20 49 66 20 50   is not 0.  If P
1c4d0 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69  4 is not NULL, i
1c4e0 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65  t points to a Ke
1c4f0 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 0a  yInfo structure.
1c500 2a 2a 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  ** that defines 
1c510 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65  the format of ke
1c520 79 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e  ys in the index.
1c530 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 70 61  .**.** The P5 pa
1c540 72 61 6d 65 74 65 72 20 63 61 6e 20 62 65 20 61  rameter can be a
1c550 20 6d 61 73 6b 20 6f 66 20 74 68 65 20 42 54 52   mask of the BTR
1c560 45 45 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e  EE_* flags defin
1c570 65 64 0a 2a 2a 20 69 6e 20 62 74 72 65 65 2e 68  ed.** in btree.h
1c580 2e 20 20 54 68 65 73 65 20 66 6c 61 67 73 20 63  .  These flags c
1c590 6f 6e 74 72 6f 6c 20 61 73 70 65 63 74 73 20 6f  ontrol aspects o
1c5a0 66 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  f the operation 
1c5b0 6f 66 0a 2a 2a 20 74 68 65 20 62 74 72 65 65 2e  of.** the btree.
1c5c0 20 20 54 68 65 20 42 54 52 45 45 5f 4f 4d 49 54    The BTREE_OMIT
1c5d0 5f 4a 4f 55 52 4e 41 4c 20 61 6e 64 20 42 54 52  _JOURNAL and BTR
1c5e0 45 45 5f 53 49 4e 47 4c 45 20 66 6c 61 67 73 20  EE_SINGLE flags 
1c5f0 61 72 65 0a 2a 2a 20 61 64 64 65 64 20 61 75 74  are.** added aut
1c600 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f  omatically..*/./
1c610 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 41 75  * Opcode: OpenAu
1c620 74 6f 69 6e 64 65 78 20 50 31 20 50 32 20 2a 20  toindex P1 P2 * 
1c630 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
1c640 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a  : nColumn=P2.**.
1c650 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  ** This opcode w
1c660 6f 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61 73  orks the same as
1c670 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1c680 6c 2e 20 20 49 74 20 68 61 73 20 61 0a 2a 2a 20  l.  It has a.** 
1c690 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 74  different name t
1c6a0 6f 20 64 69 73 74 69 6e 67 75 69 73 68 20 69 74  o distinguish it
1c6b0 73 20 75 73 65 2e 20 20 54 61 62 6c 65 73 20 63  s use.  Tables c
1c6c0 72 65 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20  reated using.** 
1c6d0 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77  by this opcode w
1c6e0 69 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20  ill be used for 
1c6f0 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72  automatically cr
1c700 65 61 74 65 64 20 74 72 61 6e 73 69 65 6e 74 0a  eated transient.
1c710 2a 2a 20 69 6e 64 69 63 65 73 20 69 6e 20 6a 6f  ** indices in jo
1c720 69 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ins..*/.case OP_
1c730 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 3a 20 0a  OpenAutoindex: .
1c740 63 61 73 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65  case OP_OpenEphe
1c750 6d 65 72 61 6c 3a 20 7b 0a 20 20 56 64 62 65 43  meral: {.  VdbeC
1c760 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 4b 65  ursor *pCx;.  Ke
1c770 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
1c780 0a 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74  ..  static const
1c790 20 69 6e 74 20 76 66 73 46 6c 61 67 73 20 3d 20   int vfsFlags = 
1c7a0 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
1c7b0 45 4e 5f 52 45 41 44 57 52 49 54 45 20 7c 0a 20  EN_READWRITE |. 
1c7c0 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
1c7d0 5f 43 52 45 41 54 45 20 7c 0a 20 20 20 20 20 20  _CREATE |.      
1c7e0 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c  SQLITE_OPEN_EXCL
1c7f0 55 53 49 56 45 20 7c 0a 20 20 20 20 20 20 53 51  USIVE |.      SQ
1c800 4c 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45  LITE_OPEN_DELETE
1c810 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20  ONCLOSE |.      
1c820 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e  SQLITE_OPEN_TRAN
1c830 53 49 45 4e 54 5f 44 42 3b 0a 20 20 61 73 73 65  SIENT_DB;.  asse
1c840 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
1c850 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1c860 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20  >p2>=0 );.  pCx 
1c870 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
1c880 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  (p, pOp->p1, pOp
1c890 2d 3e 70 32 2c 20 2d 31 2c 20 43 55 52 54 59 50  ->p2, -1, CURTYP
1c8a0 45 5f 42 54 52 45 45 29 3b 0a 20 20 69 66 28 20  E_BTREE);.  if( 
1c8b0 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  pCx==0 ) goto no
1c8c0 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c  _mem;.  pCx->nul
1c8d0 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d  lRow = 1;.  pCx-
1c8e0 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 3d 20 31  >isEphemeral = 1
1c8f0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
1c900 42 74 72 65 65 4f 70 65 6e 28 64 62 2d 3e 70 56  BtreeOpen(db->pV
1c910 66 73 2c 20 30 2c 20 64 62 2c 20 26 70 43 78 2d  fs, 0, db, &pCx-
1c920 3e 70 42 74 2c 20 0a 20 20 20 20 20 20 20 20 20  >pBt, .         
1c930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42                 B
1c940 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41  TREE_OMIT_JOURNA
1c950 4c 20 7c 20 42 54 52 45 45 5f 53 49 4e 47 4c 45  L | BTREE_SINGLE
1c960 20 7c 20 70 4f 70 2d 3e 70 35 2c 20 76 66 73 46   | pOp->p5, vfsF
1c970 6c 61 67 73 29 3b 0a 20 20 69 66 28 20 72 63 3d  lags);.  if( rc=
1c980 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1c990 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1c9a0 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 43  reeBeginTrans(pC
1c9b0 78 2d 3e 70 42 74 2c 20 31 29 3b 0a 20 20 7d 0a  x->pBt, 1);.  }.
1c9c0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1c9d0 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  _OK ){.    /* If
1c9e0 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64   a transient ind
1c9f0 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2c 20  ex is required, 
1ca00 63 72 65 61 74 65 20 69 74 20 62 79 20 63 61 6c  create it by cal
1ca10 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c 69  ling.    ** sqli
1ca20 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61  te3BtreeCreateTa
1ca30 62 6c 65 28 29 20 77 69 74 68 20 74 68 65 20 42  ble() with the B
1ca40 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 66 6c 61  TREE_BLOBKEY fla
1ca50 67 20 62 65 66 6f 72 65 0a 20 20 20 20 2a 2a 20  g before.    ** 
1ca60 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49 66 20 61  opening it. If a
1ca70 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65   transient table
1ca80 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 6a 75   is required, ju
1ca90 73 74 20 75 73 65 20 74 68 65 0a 20 20 20 20 2a  st use the.    *
1caa0 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  * automatically 
1cab0 63 72 65 61 74 65 64 20 74 61 62 6c 65 20 77 69  created table wi
1cac0 74 68 20 72 6f 6f 74 2d 70 61 67 65 20 31 20 28  th root-page 1 (
1cad0 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45 59 20 74  an BLOB_INTKEY t
1cae0 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20  able)..    */.  
1caf0 20 20 69 66 28 20 28 70 4b 65 79 49 6e 66 6f 20    if( (pKeyInfo 
1cb00 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  = pOp->p4.pKeyIn
1cb10 66 6f 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  fo)!=0 ){.      
1cb20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 20 20 20 20  int pgno;.      
1cb30 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
1cb40 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20  ype==P4_KEYINFO 
1cb50 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  );.      rc = sq
1cb60 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65  lite3BtreeCreate
1cb70 54 61 62 6c 65 28 70 43 78 2d 3e 70 42 74 2c 20  Table(pCx->pBt, 
1cb80 26 70 67 6e 6f 2c 20 42 54 52 45 45 5f 42 4c 4f  &pgno, BTREE_BLO
1cb90 42 4b 45 59 20 7c 20 70 4f 70 2d 3e 70 35 29 3b  BKEY | pOp->p5);
1cba0 20 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d   .      if( rc==
1cbb0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1cbc0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 67 6e       assert( pgn
1cbd0 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f 54 2b 31  o==MASTER_ROOT+1
1cbe0 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
1cbf0 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62  rt( pKeyInfo->db
1cc00 3d 3d 64 62 20 29 3b 0a 20 20 20 20 20 20 20 20  ==db );.        
1cc10 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f  assert( pKeyInfo
1cc20 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29  ->enc==ENC(db) )
1cc30 3b 0a 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70  ;.        pCx->p
1cc40 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e  KeyInfo = pKeyIn
1cc50 66 6f 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  fo;.        rc =
1cc60 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
1cc70 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20 70 67  sor(pCx->pBt, pg
1cc80 6e 6f 2c 20 42 54 52 45 45 5f 57 52 43 53 52 2c  no, BTREE_WRCSR,
1cc90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ccb0 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 78 2d 3e   pKeyInfo, pCx->
1ccc0 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  uc.pCursor);.   
1ccd0 20 20 20 7d 0a 20 20 20 20 20 20 70 43 78 2d 3e     }.      pCx->
1cce0 69 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20 20 20  isTable = 0;.   
1ccf0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63   }else{.      rc
1cd00 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
1cd10 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20  ursor(pCx->pBt, 
1cd20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20 42 54 52  MASTER_ROOT, BTR
1cd30 45 45 5f 57 52 43 53 52 2c 0a 20 20 20 20 20 20  EE_WRCSR,.      
1cd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd50 20 20 20 20 20 20 20 20 30 2c 20 70 43 78 2d 3e          0, pCx->
1cd60 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  uc.pCursor);.   
1cd70 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20     pCx->isTable 
1cd80 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  = 1;.    }.  }. 
1cd90 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
1cda0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1cdb0 72 3b 0a 20 20 70 43 78 2d 3e 69 73 4f 72 64 65  r;.  pCx->isOrde
1cdc0 72 65 64 20 3d 20 28 70 4f 70 2d 3e 70 35 21 3d  red = (pOp->p5!=
1cdd0 42 54 52 45 45 5f 55 4e 4f 52 44 45 52 45 44 29  BTREE_UNORDERED)
1cde0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1cdf0 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 4f   Opcode: SorterO
1ce00 70 65 6e 20 50 31 20 50 32 20 50 33 20 50 34 20  pen P1 P2 P3 P4 
1ce10 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  *.**.** This opc
1ce20 6f 64 65 20 77 6f 72 6b 73 20 6c 69 6b 65 20 4f  ode works like O
1ce30 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  P_OpenEphemeral 
1ce40 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20 6f  except that it o
1ce50 70 65 6e 73 0a 2a 2a 20 61 20 74 72 61 6e 73 69  pens.** a transi
1ce60 65 6e 74 20 69 6e 64 65 78 20 74 68 61 74 20 69  ent index that i
1ce70 73 20 73 70 65 63 69 66 69 63 61 6c 6c 79 20 64  s specifically d
1ce80 65 73 69 67 6e 65 64 20 74 6f 20 73 6f 72 74 20  esigned to sort 
1ce90 6c 61 72 67 65 0a 2a 2a 20 74 61 62 6c 65 73 20  large.** tables 
1cea0 75 73 69 6e 67 20 61 6e 20 65 78 74 65 72 6e 61  using an externa
1ceb0 6c 20 6d 65 72 67 65 2d 73 6f 72 74 20 61 6c 67  l merge-sort alg
1cec0 6f 72 69 74 68 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66  orithm..**.** If
1ced0 20 61 72 67 75 6d 65 6e 74 20 50 33 20 69 73 20   argument P3 is 
1cee0 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 69  non-zero, then i
1cef0 74 20 69 6e 64 69 63 61 74 65 73 20 74 68 61 74  t indicates that
1cf00 20 74 68 65 20 73 6f 72 74 65 72 20 6d 61 79 0a   the sorter may.
1cf10 2a 2a 20 61 73 73 75 6d 65 20 74 68 61 74 20 61  ** assume that a
1cf20 20 73 74 61 62 6c 65 20 73 6f 72 74 20 63 6f 6e   stable sort con
1cf30 73 69 64 65 72 69 6e 67 20 74 68 65 20 66 69 72  sidering the fir
1cf40 73 74 20 50 33 20 66 69 65 6c 64 73 20 6f 66 20  st P3 fields of 
1cf50 65 61 63 68 0a 2a 2a 20 6b 65 79 20 69 73 20 73  each.** key is s
1cf60 75 66 66 69 63 69 65 6e 74 20 74 6f 20 70 72 6f  ufficient to pro
1cf70 64 75 63 65 20 74 68 65 20 72 65 71 75 69 72 65  duce the require
1cf80 64 20 72 65 73 75 6c 74 73 2e 0a 2a 2f 0a 63 61  d results..*/.ca
1cf90 73 65 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e  se OP_SorterOpen
1cfa0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
1cfb0 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74   *pCx;..  assert
1cfc0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a  ( pOp->p1>=0 );.
1cfd0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1cfe0 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20  2>=0 );.  pCx = 
1cff0 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
1d000 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
1d010 70 32 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f  p2, -1, CURTYPE_
1d020 53 4f 52 54 45 52 29 3b 0a 20 20 69 66 28 20 70  SORTER);.  if( p
1d030 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  Cx==0 ) goto no_
1d040 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 70 4b 65 79  mem;.  pCx->pKey
1d050 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
1d060 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72  KeyInfo;.  asser
1d070 74 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f  t( pCx->pKeyInfo
1d080 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 61 73  ->db==db );.  as
1d090 73 65 72 74 28 20 70 43 78 2d 3e 70 4b 65 79 49  sert( pCx->pKeyI
1d0a0 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62  nfo->enc==ENC(db
1d0b0 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ) );.  rc = sqli
1d0c0 74 65 33 56 64 62 65 53 6f 72 74 65 72 49 6e 69  te3VdbeSorterIni
1d0d0 74 28 64 62 2c 20 70 4f 70 2d 3e 70 33 2c 20 70  t(db, pOp->p3, p
1d0e0 43 78 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  Cx);.  if( rc ) 
1d0f0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1d100 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
1d110 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1d120 53 65 71 75 65 6e 63 65 54 65 73 74 20 50 31 20  SequenceTest P1 
1d130 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
1d140 70 73 69 73 3a 20 69 66 28 20 63 75 72 73 6f 72  psis: if( cursor
1d150 5b 50 31 5d 2e 63 74 72 2b 2b 20 29 20 70 63 20  [P1].ctr++ ) pc 
1d160 3d 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  = P2.**.** P1 is
1d170 20 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72   a sorter cursor
1d180 2e 20 49 66 20 74 68 65 20 73 65 71 75 65 6e 63  . If the sequenc
1d190 65 20 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72  e counter is cur
1d1a0 72 65 6e 74 6c 79 20 7a 65 72 6f 2c 20 6a 75 6d  rently zero, jum
1d1b0 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 52 65 67 61  p.** to P2. Rega
1d1c0 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65  rdless of whethe
1d1d0 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6a 75 6d  r or not the jum
1d1e0 70 20 69 73 20 74 61 6b 65 6e 2c 20 69 6e 63 72  p is taken, incr
1d1f0 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 74 68 65  ement the.** the
1d200 20 73 65 71 75 65 6e 63 65 20 76 61 6c 75 65 2e   sequence value.
1d210 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75  .*/.case OP_Sequ
1d220 65 6e 63 65 54 65 73 74 3a 20 7b 0a 20 20 56 64  enceTest: {.  Vd
1d230 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
1d240 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1d250 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1d260 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
1d270 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1d280 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1d290 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a  isSorter(pC) );.
1d2a0 20 20 69 66 28 20 28 70 43 2d 3e 73 65 71 43 6f    if( (pC->seqCo
1d2b0 75 6e 74 2b 2b 29 3d 3d 30 20 29 7b 0a 20 20 20  unt++)==0 ){.   
1d2c0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
1d2d0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
1d2e0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  ../* Opcode: Ope
1d2f0 6e 50 73 65 75 64 6f 20 50 31 20 50 32 20 50 33  nPseudo P1 P2 P3
1d300 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
1d310 3a 20 50 33 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  : P3 columns in 
1d320 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  r[P2].**.** Open
1d330 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 74 68   a new cursor th
1d340 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66  at points to a f
1d350 61 6b 65 20 74 61 62 6c 65 20 74 68 61 74 20 63  ake table that c
1d360 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65  ontains a single
1d370 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74 61 2e  .** row of data.
1d380 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66    The content of
1d390 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 20 69 73   that one row is
1d3a0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
1d3b0 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69 73 74  memory.** regist
1d3c0 65 72 20 50 32 2e 20 20 49 6e 20 6f 74 68 65 72  er P2.  In other
1d3d0 20 77 6f 72 64 73 2c 20 63 75 72 73 6f 72 20 50   words, cursor P
1d3e0 31 20 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69  1 becomes an ali
1d3f0 61 73 20 66 6f 72 20 74 68 65 20 0a 2a 2a 20 4d  as for the .** M
1d400 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 20  EM_Blob content 
1d410 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 72 65 67  contained in reg
1d420 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
1d430 41 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63  A pseudo-table c
1d440 72 65 61 74 65 64 20 62 79 20 74 68 69 73 20 6f  reated by this o
1d450 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f  pcode is used to
1d460 20 68 6f 6c 64 20 61 20 73 69 6e 67 6c 65 0a 2a   hold a single.*
1d470 2a 20 72 6f 77 20 6f 75 74 70 75 74 20 66 72 6f  * row output fro
1d480 6d 20 74 68 65 20 73 6f 72 74 65 72 20 73 6f 20  m the sorter so 
1d490 74 68 61 74 20 74 68 65 20 72 6f 77 20 63 61 6e  that the row can
1d4a0 20 62 65 20 64 65 63 6f 6d 70 6f 73 65 64 20 69   be decomposed i
1d4b0 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61  nto.** individua
1d4c0 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20  l columns using 
1d4d0 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  the OP_Column op
1d4e0 63 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f  code.  The OP_Co
1d4f0 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69  lumn opcode.** i
1d500 73 20 74 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f  s the only curso
1d510 72 20 6f 70 63 6f 64 65 20 74 68 61 74 20 77 6f  r opcode that wo
1d520 72 6b 73 20 77 69 74 68 20 61 20 70 73 65 75 64  rks with a pseud
1d530 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50  o-table..**.** P
1d540 33 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  3 is the number 
1d550 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65  of fields in the
1d560 20 72 65 63 6f 72 64 73 20 74 68 61 74 20 77 69   records that wi
1d570 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 62 79 0a  ll be stored by.
1d580 2a 2a 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61  ** the pseudo-ta
1d590 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ble..*/.case OP_
1d5a0 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20  OpenPseudo: {.  
1d5b0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b  VdbeCursor *pCx;
1d5c0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
1d5d0 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p1>=0 );.  asse
1d5e0 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 29  rt( pOp->p3>=0 )
1d5f0 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61  ;.  pCx = alloca
1d600 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
1d610 3e 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31  >p1, pOp->p3, -1
1d620 2c 20 43 55 52 54 59 50 45 5f 50 53 45 55 44 4f  , CURTYPE_PSEUDO
1d630 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20  );.  if( pCx==0 
1d640 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
1d650 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20   pCx->nullRow = 
1d660 31 3b 0a 20 20 70 43 78 2d 3e 75 63 2e 70 73 65  1;.  pCx->uc.pse
1d670 75 64 6f 54 61 62 6c 65 52 65 67 20 3d 20 70 4f  udoTableReg = pO
1d680 70 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73  p->p2;.  pCx->is
1d690 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 61 73 73  Table = 1;.  ass
1d6a0 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  ert( pOp->p5==0 
1d6b0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
1d6c0 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20  * Opcode: Close 
1d6d0 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
1d6e0 20 43 6c 6f 73 65 20 61 20 63 75 72 73 6f 72 20   Close a cursor 
1d6f0 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65  previously opene
1d700 64 20 61 73 20 50 31 2e 20 20 49 66 20 50 31 20  d as P1.  If P1 
1d710 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e  is not.** curren
1d720 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73 20 69  tly open, this i
1d730 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61 20  nstruction is a 
1d740 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f  no-op..*/.case O
1d750 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61 73 73  P_Close: {.  ass
1d760 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1d770 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1d780 75 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69 74  ursor );.  sqlit
1d790 65 33 56 64 62 65 46 72 65 65 43 75 72 73 6f 72  e3VdbeFreeCursor
1d7a0 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  (p, p->apCsr[pOp
1d7b0 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61 70 43  ->p1]);.  p->apC
1d7c0 73 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b  sr[pOp->p1] = 0;
1d7d0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
1d7e0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
1d7f0 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f 4d 41  E_COLUMN_USED_MA
1d800 53 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  SK./* Opcode: Co
1d810 6c 75 6d 6e 73 55 73 65 64 20 50 31 20 2a 20 2a  lumnsUsed P1 * *
1d820 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73   P4 *.**.** This
1d830 20 6f 70 63 6f 64 65 20 28 77 68 69 63 68 20 6f   opcode (which o
1d840 6e 6c 79 20 65 78 69 73 74 73 20 69 66 20 53 51  nly exists if SQ
1d850 4c 69 74 65 20 77 61 73 20 63 6f 6d 70 69 6c 65  Lite was compile
1d860 64 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45  d with.** SQLITE
1d870 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55  _ENABLE_COLUMN_U
1d880 53 45 44 5f 4d 41 53 4b 29 20 69 64 65 6e 74 69  SED_MASK) identi
1d890 66 69 65 73 20 77 68 69 63 68 20 63 6f 6c 75 6d  fies which colum
1d8a0 6e 73 20 6f 66 20 74 68 65 0a 2a 2a 20 74 61 62  ns of the.** tab
1d8b0 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 6f 72 20  le or index for 
1d8c0 63 75 72 73 6f 72 20 50 31 20 61 72 65 20 75 73  cursor P1 are us
1d8d0 65 64 2e 20 20 50 34 20 69 73 20 61 20 36 34 2d  ed.  P4 is a 64-
1d8e0 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20 28  bit integer.** (
1d8f0 50 34 5f 49 4e 54 36 34 29 20 69 6e 20 77 68 69  P4_INT64) in whi
1d900 63 68 20 74 68 65 20 66 69 72 73 74 20 36 33 20  ch the first 63 
1d910 62 69 74 73 20 61 72 65 20 6f 6e 65 20 66 6f 72  bits are one for
1d920 20 65 61 63 68 20 6f 66 20 74 68 65 0a 2a 2a 20   each of the.** 
1d930 66 69 72 73 74 20 36 33 20 63 6f 6c 75 6d 6e 73  first 63 columns
1d940 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   of the table or
1d950 20 69 6e 64 65 78 20 74 68 61 74 20 61 72 65 20   index that are 
1d960 61 63 74 75 61 6c 6c 79 20 75 73 65 64 0a 2a 2a  actually used.**
1d970 20 62 79 20 74 68 65 20 63 75 72 73 6f 72 2e 20   by the cursor. 
1d980 20 54 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20   The high-order 
1d990 62 69 74 20 69 73 20 73 65 74 20 69 66 20 61 6e  bit is set if an
1d9a0 79 20 63 6f 6c 75 6d 6e 20 61 66 74 65 72 0a 2a  y column after.*
1d9b0 2a 20 74 68 65 20 36 34 74 68 20 69 73 20 75 73  * the 64th is us
1d9c0 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  ed..*/.case OP_C
1d9d0 6f 6c 75 6d 6e 73 55 73 65 64 3a 20 7b 0a 20 20  olumnsUsed: {.  
1d9e0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1d9f0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1da00 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1da10 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
1da20 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
1da30 29 3b 0a 20 20 70 43 2d 3e 6d 61 73 6b 55 73 65  );.  pC->maskUse
1da40 64 20 3d 20 2a 28 75 36 34 2a 29 70 4f 70 2d 3e  d = *(u64*)pOp->
1da50 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b  p4.pI64;.  break
1da60 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f  ;.}.#endif../* O
1da70 70 63 6f 64 65 3a 20 53 65 65 6b 47 45 20 50 31  pcode: SeekGE P1
1da80 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
1da90 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
1daa0 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63  3@P4].**.** If c
1dab0 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1dac0 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
1dad0 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
1dae0 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
1daf0 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
1db00 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
1db10 33 20 61 73 20 74 68 65 20 6b 65 79 2e 20 20 49  3 as the key.  I
1db20 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1db30 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c  rs .** to an SQL
1db40 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20   index, then P3 
1db50 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
1db60 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72  an array of P4 r
1db70 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61  egisters .** tha
1db80 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e  t are used as an
1db90 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
1dba0 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  key. .**.** Repo
1dbb0 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
1dbc0 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69   so that  it poi
1dbd0 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c  nts to the small
1dbe0 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a  est entry that .
1dbf0 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ** is greater th
1dc00 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
1dc10 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
1dc20 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
1dc30 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61 74 65  cords .** greate
1dc40 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
1dc50 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  to the key and P
1dc60 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
1dc70 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
1dc80 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 75 72  **.** If the cur
1dc90 73 6f 72 20 50 31 20 77 61 73 20 6f 70 65 6e 65  sor P1 was opene
1dca0 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50 46 4c  d using the OPFL
1dcb0 41 47 5f 53 45 45 4b 45 51 20 66 6c 61 67 2c 20  AG_SEEKEQ flag, 
1dcc0 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 63  then this.** opc
1dcd0 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20  ode will always 
1dce0 6c 61 6e 64 20 6f 6e 20 61 20 72 65 63 6f 72 64  land on a record
1dcf0 20 74 68 61 74 20 65 71 75 61 6c 6c 79 20 65 71   that equally eq
1dd00 75 61 6c 73 20 74 68 65 20 6b 65 79 2c 20 6f 72  uals the key, or
1dd10 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d 70 20 69 6d  .** else jump im
1dd20 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
1dd30 20 20 57 68 65 6e 20 74 68 65 20 63 75 72 73 6f    When the curso
1dd40 72 20 69 73 20 4f 50 46 4c 41 47 5f 53 45 45 4b  r is OPFLAG_SEEK
1dd50 45 51 2c 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f  EQ, this.** opco
1dd60 64 65 20 6d 75 73 74 20 62 65 20 66 6f 6c 6c 6f  de must be follo
1dd70 77 65 64 20 62 79 20 61 6e 20 49 64 78 4c 45 20  wed by an IdxLE 
1dd80 6f 70 63 6f 64 65 20 77 69 74 68 20 74 68 65 20  opcode with the 
1dd90 73 61 6d 65 20 61 72 67 75 6d 65 6e 74 73 2e 0a  same arguments..
1dda0 2a 2a 20 54 68 65 20 49 64 78 4c 45 20 6f 70 63  ** The IdxLE opc
1ddb0 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 6b 69 70  ode will be skip
1ddc0 70 65 64 20 69 66 20 74 68 69 73 20 6f 70 63 6f  ped if this opco
1ddd0 64 65 20 73 75 63 63 65 65 64 73 2c 20 62 75 74  de succeeds, but
1dde0 20 74 68 65 0a 2a 2a 20 49 64 78 4c 45 20 6f 70   the.** IdxLE op
1ddf0 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65  code will be use
1de00 64 20 6f 6e 20 73 75 62 73 65 71 75 65 6e 74 20  d on subsequent 
1de10 6c 6f 6f 70 20 69 74 65 72 61 74 69 6f 6e 73 2e  loop iterations.
1de20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
1de30 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
1de40 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20  rsor configured 
1de50 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61  to move in forwa
1de60 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f  rd order,.** fro
1de70 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  m the beginning 
1de80 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20  toward the end. 
1de90 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1dea0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
1deb0 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  * configured to 
1dec0 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72  use Next, not Pr
1ded0 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ev..**.** See al
1dee0 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
1def0 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65  und, SeekLt, See
1df00 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f  kGt, SeekLe.*/./
1df10 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 54  * Opcode: SeekGT
1df20 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
1df30 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
1df40 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49  r[P3@P4].**.** I
1df50 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1df60 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62  rs to an SQL tab
1df70 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20  le (B-Tree that 
1df80 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79  uses integer key
1df90 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20  s), .** use the 
1dfa0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
1dfb0 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49  r P3 as a key. I
1dfc0 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1dfd0 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c  rs .** to an SQL
1dfe0 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20   index, then P3 
1dff0 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
1e000 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72  an array of P4 r
1e010 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61  egisters .** tha
1e020 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e  t are used as an
1e030 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
1e040 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  key. .**.** Repo
1e050 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
1e060 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69   so that  it poi
1e070 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c  nts to the small
1e080 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a  est entry that .
1e090 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ** is greater th
1e0a0 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  an the key value
1e0b0 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  . If there are n
1e0c0 6f 20 72 65 63 6f 72 64 73 20 67 72 65 61 74 65  o records greate
1e0d0 72 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b  r than .** the k
1e0e0 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74  ey and P2 is not
1e0f0 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70   zero, then jump
1e100 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68   to P2..**.** Th
1e110 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
1e120 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66   the cursor conf
1e130 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69  igured to move i
1e140 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c  n forward order,
1e150 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67  .** from the beg
1e160 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68  inning toward th
1e170 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72  e end.  In other
1e180 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73   words, the curs
1e190 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  or is.** configu
1e1a0 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c  red to use Next,
1e1b0 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a   not Prev..**.**
1e1c0 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
1e1d0 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b  , NotFound, Seek
1e1e0 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b  Lt, SeekGe, Seek
1e1f0 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  Le.*/./* Opcode:
1e200 20 53 65 65 6b 4c 54 20 50 31 20 50 32 20 50 33   SeekLT P1 P2 P3
1e210 20 50 34 20 2a 20 0a 2a 2a 20 53 79 6e 6f 70 73   P4 * .** Synops
1e220 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
1e230 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  .**.** If cursor
1e240 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e   P1 refers to an
1e250 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72   SQL table (B-Tr
1e260 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74  ee that uses int
1e270 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20  eger keys), .** 
1e280 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  use the value in
1e290 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20   register P3 as 
1e2a0 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72  a key. If cursor
1e2b0 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74   P1 refers .** t
1e2c0 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20  o an SQL index, 
1e2d0 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66  then P3 is the f
1e2e0 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79  irst in an array
1e2f0 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
1e300 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73   .** that are us
1e310 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65  ed as an unpacke
1e320 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a  d index key. .**
1e330 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63  .** Reposition c
1e340 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
1e350 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74    it points to t
1e360 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79  he largest entry
1e370 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73   that .** is les
1e380 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76  s than the key v
1e390 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
1e3a0 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c 65  re no records le
1e3b0 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20  ss than .** the 
1e3c0 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f  key and P2 is no
1e3d0 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  t zero, then jum
1e3e0 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  p to P2..**.** T
1e3f0 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
1e400 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e  s the cursor con
1e410 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20  figured to move 
1e420 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72  in reverse order
1e430 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e  ,.** from the en
1e440 64 20 74 6f 77 61 72 64 20 74 68 65 20 62 65 67  d toward the beg
1e450 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65  inning.  In othe
1e460 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72  r words, the cur
1e470 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67  sor is.** config
1e480 75 72 65 64 20 74 6f 20 75 73 65 20 50 72 65 76  ured to use Prev
1e490 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a  , not Next..**.*
1e4a0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
1e4b0 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65  d, NotFound, See
1e4c0 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65  kGt, SeekGe, See
1e4d0 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  kLe.*/./* Opcode
1e4e0 3a 20 53 65 65 6b 4c 45 20 50 31 20 50 32 20 50  : SeekLE P1 P2 P
1e4f0 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
1e500 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
1e510 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  .**.** If cursor
1e520 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e   P1 refers to an
1e530 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72   SQL table (B-Tr
1e540 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74  ee that uses int
1e550 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20  eger keys), .** 
1e560 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  use the value in
1e570 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20   register P3 as 
1e580 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72  a key. If cursor
1e590 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74   P1 refers .** t
1e5a0 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20  o an SQL index, 
1e5b0 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66  then P3 is the f
1e5c0 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79  irst in an array
1e5d0 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
1e5e0 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73   .** that are us
1e5f0 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65  ed as an unpacke
1e600 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a  d index key. .**
1e610 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63  .** Reposition c
1e620 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
1e630 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
1e640 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20  e largest entry 
1e650 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73  that .** is less
1e660 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
1e670 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e  o the key value.
1e680 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
1e690 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65 73   records .** les
1e6a0 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
1e6b0 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  to the key and P
1e6c0 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
1e6d0 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
1e6e0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
1e6f0 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  e leaves the cur
1e700 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74  sor configured t
1e710 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72 73  o move in revers
1e720 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d  e order,.** from
1e730 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64 20   the end toward 
1e740 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20  the beginning.  
1e750 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
1e760 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a  the cursor is.**
1e770 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75   configured to u
1e780 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78  se Prev, not Nex
1e790 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  t..**.** If the 
1e7a0 63 75 72 73 6f 72 20 50 31 20 77 61 73 20 6f 70  cursor P1 was op
1e7b0 65 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20 4f  ened using the O
1e7c0 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 66 6c 61  PFLAG_SEEKEQ fla
1e7d0 67 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20  g, then this.** 
1e7e0 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61  opcode will alwa
1e7f0 79 73 20 6c 61 6e 64 20 6f 6e 20 61 20 72 65 63  ys land on a rec
1e800 6f 72 64 20 74 68 61 74 20 65 71 75 61 6c 6c 79  ord that equally
1e810 20 65 71 75 61 6c 73 20 74 68 65 20 6b 65 79 2c   equals the key,
1e820 20 6f 72 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d 70   or.** else jump
1e830 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
1e840 50 32 2e 20 20 57 68 65 6e 20 74 68 65 20 63 75  P2.  When the cu
1e850 72 73 6f 72 20 69 73 20 4f 50 46 4c 41 47 5f 53  rsor is OPFLAG_S
1e860 45 45 4b 45 51 2c 20 74 68 69 73 0a 2a 2a 20 6f  EEKEQ, this.** o
1e870 70 63 6f 64 65 20 6d 75 73 74 20 62 65 20 66 6f  pcode must be fo
1e880 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 49 64 78  llowed by an Idx
1e890 47 45 20 6f 70 63 6f 64 65 20 77 69 74 68 20 74  GE opcode with t
1e8a0 68 65 20 73 61 6d 65 20 61 72 67 75 6d 65 6e 74  he same argument
1e8b0 73 2e 0a 2a 2a 20 54 68 65 20 49 64 78 47 45 20  s..** The IdxGE 
1e8c0 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73  opcode will be s
1e8d0 6b 69 70 70 65 64 20 69 66 20 74 68 69 73 20 6f  kipped if this o
1e8e0 70 63 6f 64 65 20 73 75 63 63 65 65 64 73 2c 20  pcode succeeds, 
1e8f0 62 75 74 20 74 68 65 0a 2a 2a 20 49 64 78 47 45  but the.** IdxGE
1e900 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20   opcode will be 
1e910 75 73 65 64 20 6f 6e 20 73 75 62 73 65 71 75 65  used on subseque
1e920 6e 74 20 6c 6f 6f 70 20 69 74 65 72 61 74 69 6f  nt loop iteratio
1e930 6e 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ns..**.** See al
1e940 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
1e950 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53 65 65  und, SeekGt, See
1e960 6b 47 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63  kGe, SeekLt.*/.c
1e970 61 73 65 20 4f 50 5f 53 65 65 6b 4c 54 3a 20 20  ase OP_SeekLT:  
1e980 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1e990 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  in3 */.case OP_S
1e9a0 65 65 6b 4c 45 3a 20 20 20 20 20 20 20 20 20 2f  eekLE:         /
1e9b0 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
1e9c0 61 73 65 20 4f 50 5f 53 65 65 6b 47 45 3a 20 20  ase OP_SeekGE:  
1e9d0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1e9e0 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  in3 */.case OP_S
1e9f0 65 65 6b 47 54 3a 20 7b 20 20 20 20 20 20 20 2f  eekGT: {       /
1ea00 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20  * jump, in3 */. 
1ea10 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20   int res;       
1ea20 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f      /* Compariso
1ea30 6e 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 69 6e  n result */.  in
1ea40 74 20 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20  t oc;           
1ea50 20 2f 2a 20 4f 70 63 6f 64 65 20 2a 2f 0a 20 20   /* Opcode */.  
1ea60 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
1ea70 20 20 20 2f 2a 20 54 68 65 20 63 75 72 73 6f 72     /* The cursor
1ea80 20 74 6f 20 73 65 65 6b 20 2a 2f 0a 20 20 55 6e   to seek */.  Un
1ea90 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 20  packedRecord r; 
1eaa0 20 2f 2a 20 54 68 65 20 6b 65 79 20 74 6f 20 73   /* The key to s
1eab0 65 65 6b 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74  eek for */.  int
1eac0 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20   nField;        
1ead0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
1eae0 75 6d 6e 73 20 6f 72 20 66 69 65 6c 64 73 20 69  umns or fields i
1eaf0 6e 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20 69  n the key */.  i
1eb00 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20 20 20  64 iKey;        
1eb10 20 20 2f 2a 20 54 68 65 20 72 6f 77 69 64 20 77    /* The rowid w
1eb20 65 20 61 72 65 20 74 6f 20 73 65 65 6b 20 74 6f  e are to seek to
1eb30 20 2a 2f 0a 20 20 69 6e 74 20 65 71 4f 6e 6c 79   */.  int eqOnly
1eb40 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79  ;        /* Only
1eb50 20 69 6e 74 65 72 65 73 74 65 64 20 69 6e 20 3d   interested in =
1eb60 3d 20 72 65 73 75 6c 74 73 20 2a 2f 0a 0a 20 20  = results */..  
1eb70 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1eb80 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1eb90 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
1eba0 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 21 3d 30  sert( pOp->p2!=0
1ebb0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
1ebc0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
1ebd0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
1ebe0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
1ebf0 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
1ec00 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65  _BTREE );.  asse
1ec10 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 20 3d 3d  rt( OP_SeekLE ==
1ec20 20 4f 50 5f 53 65 65 6b 4c 54 2b 31 20 29 3b 0a   OP_SeekLT+1 );.
1ec30 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
1ec40 6b 47 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54  kGE == OP_SeekLT
1ec50 2b 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  +2 );.  assert( 
1ec60 4f 50 5f 53 65 65 6b 47 54 20 3d 3d 20 4f 50 5f  OP_SeekGT == OP_
1ec70 53 65 65 6b 4c 54 2b 33 20 29 3b 0a 20 20 61 73  SeekLT+3 );.  as
1ec80 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64 65  sert( pC->isOrde
1ec90 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28  red );.  assert(
1eca0 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21   pC->uc.pCursor!
1ecb0 3d 30 20 29 3b 0a 20 20 6f 63 20 3d 20 70 4f 70  =0 );.  oc = pOp
1ecc0 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 65 71 4f 6e  ->opcode;.  eqOn
1ecd0 6c 79 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 6e 75  ly = 0;.  pC->nu
1ece0 6c 6c 52 6f 77 20 3d 20 30 3b 0a 23 69 66 64 65  llRow = 0;.#ifde
1ecf0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
1ed00 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f   pC->seekOp = pO
1ed10 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69  p->opcode;.#endi
1ed20 66 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 54  f..  if( pC->isT
1ed30 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 54  able ){.    /* T
1ed40 68 65 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51  he BTREE_SEEK_EQ
1ed50 20 66 6c 61 67 20 69 73 20 6f 6e 6c 79 20 73 65   flag is only se
1ed60 74 20 6f 6e 20 69 6e 64 65 78 20 63 75 72 73 6f  t on index curso
1ed70 72 73 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74  rs */.    assert
1ed80 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  ( sqlite3BtreeCu
1ed90 72 73 6f 72 48 61 73 48 69 6e 74 28 70 43 2d 3e  rsorHasHint(pC->
1eda0 75 63 2e 70 43 75 72 73 6f 72 2c 20 42 54 52 45  uc.pCursor, BTRE
1edb0 45 5f 53 45 45 4b 5f 45 51 29 3d 3d 30 20 29 3b  E_SEEK_EQ)==0 );
1edc0 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 70  ..    /* The inp
1edd0 75 74 20 76 61 6c 75 65 20 69 6e 20 50 33 20 6d  ut value in P3 m
1ede0 69 67 68 74 20 62 65 20 6f 66 20 61 6e 79 20 74  ight be of any t
1edf0 79 70 65 3a 20 69 6e 74 65 67 65 72 2c 20 72 65  ype: integer, re
1ee00 61 6c 2c 20 73 74 72 69 6e 67 2c 0a 20 20 20 20  al, string,.    
1ee10 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c  ** blob, or NULL
1ee20 2e 20 20 42 75 74 20 69 74 20 6e 65 65 64 73 20  .  But it needs 
1ee30 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72  to be an integer
1ee40 20 62 65 66 6f 72 65 20 77 65 20 63 61 6e 20 64   before we can d
1ee50 6f 0a 20 20 20 20 2a 2a 20 74 68 65 20 73 65 65  o.    ** the see
1ee60 6b 2c 20 73 6f 20 63 6f 6e 76 65 72 74 20 69 74  k, so convert it
1ee70 2e 20 2a 2f 0a 20 20 20 20 70 49 6e 33 20 3d 20  . */.    pIn3 = 
1ee80 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
1ee90 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66      if( (pIn3->f
1eea0 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c  lags & (MEM_Int|
1eeb0 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72  MEM_Real|MEM_Str
1eec0 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20  ))==MEM_Str ){. 
1eed0 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69       applyNumeri
1eee0 63 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 20  cAffinity(pIn3, 
1eef0 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 4b  0);.    }.    iK
1ef00 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  ey = sqlite3Vdbe
1ef10 49 6e 74 56 61 6c 75 65 28 70 49 6e 33 29 3b 0a  IntValue(pIn3);.
1ef20 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50  .    /* If the P
1ef30 33 20 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f  3 value could no
1ef40 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69  t be converted i
1ef50 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 77  nto an integer w
1ef60 69 74 68 6f 75 74 0a 20 20 20 20 2a 2a 20 6c 6f  ithout.    ** lo
1ef70 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f  ss of informatio
1ef80 6e 2c 20 74 68 65 6e 20 73 70 65 63 69 61 6c 20  n, then special 
1ef90 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 72 65  processing is re
1efa0 71 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20  quired... */.   
1efb0 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67   if( (pIn3->flag
1efc0 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20  s & MEM_Int)==0 
1efd0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 70 49  ){.      if( (pI
1efe0 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
1eff0 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Real)==0 ){.    
1f000 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33      /* If the P3
1f010 20 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65   value cannot be
1f020 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20   converted into 
1f030 61 6e 79 20 6b 69 6e 64 20 6f 66 20 61 20 6e 75  any kind of a nu
1f040 6d 62 65 72 2c 0a 20 20 20 20 20 20 20 20 2a 2a  mber,.        **
1f050 20 74 68 65 6e 20 74 68 65 20 73 65 65 6b 20 69   then the seek i
1f060 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20  s not possible, 
1f070 73 6f 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f  so jump to P2 */
1f080 0a 20 20 20 20 20 20 20 20 56 64 62 65 42 72 61  .        VdbeBra
1f090 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 20 67  nchTaken(1,2); g
1f0a0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
1f0b0 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1f0c0 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
1f0d0 20 49 66 20 74 68 65 20 61 70 70 72 6f 78 69 6d   If the approxim
1f0e0 61 74 69 6f 6e 20 69 4b 65 79 20 69 73 20 6c 61  ation iKey is la
1f0f0 72 67 65 72 20 74 68 61 6e 20 74 68 65 20 61 63  rger than the ac
1f100 74 75 61 6c 20 72 65 61 6c 20 73 65 61 72 63 68  tual real search
1f110 0a 20 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20  .      ** term, 
1f120 73 75 62 73 74 69 74 75 74 65 20 3e 3d 20 66 6f  substitute >= fo
1f130 72 20 3e 20 61 6e 64 20 3c 20 66 6f 72 20 3c 3d  r > and < for <=
1f140 2e 20 65 2e 67 2e 20 69 66 20 74 68 65 20 73 65  . e.g. if the se
1f150 61 72 63 68 20 74 65 72 6d 0a 20 20 20 20 20 20  arch term.      
1f160 2a 2a 20 69 73 20 34 2e 39 20 61 6e 64 20 74 68  ** is 4.9 and th
1f170 65 20 69 6e 74 65 67 65 72 20 61 70 70 72 6f 78  e integer approx
1f180 69 6d 61 74 69 6f 6e 20 35 3a 0a 20 20 20 20 20  imation 5:.     
1f190 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 20 20 20   **.      **    
1f1a0 20 20 20 20 28 78 20 3e 20 20 34 2e 39 29 20 20      (x >  4.9)  
1f1b0 20 20 2d 3e 20 20 20 20 20 28 78 20 3e 3d 20 35    ->     (x >= 5
1f1c0 29 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20  ).      **      
1f1d0 20 20 28 78 20 3c 3d 20 34 2e 39 29 20 20 20 20    (x <= 4.9)    
1f1e0 2d 3e 20 20 20 20 20 28 78 20 3c 20 20 35 29 0a  ->     (x <  5).
1f1f0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
1f200 66 28 20 70 49 6e 33 2d 3e 75 2e 72 3c 28 64 6f  f( pIn3->u.r<(do
1f210 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20 20  uble)iKey ){.   
1f220 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f       assert( OP_
1f230 53 65 65 6b 47 45 3d 3d 28 4f 50 5f 53 65 65 6b  SeekGE==(OP_Seek
1f240 47 54 2d 31 29 20 29 3b 0a 20 20 20 20 20 20 20  GT-1) );.       
1f250 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
1f260 4c 54 3d 3d 28 4f 50 5f 53 65 65 6b 4c 45 2d 31  LT==(OP_SeekLE-1
1f270 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ) );.        ass
1f280 65 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c 45 20  ert( (OP_SeekLE 
1f290 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53  & 0x0001)==(OP_S
1f2a0 65 65 6b 47 54 20 26 20 30 78 30 30 30 31 29 20  eekGT & 0x0001) 
1f2b0 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28  );.        if( (
1f2c0 6f 63 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f  oc & 0x0001)==(O
1f2d0 50 5f 53 65 65 6b 47 54 20 26 20 30 78 30 30 30  P_SeekGT & 0x000
1f2e0 31 29 20 29 20 6f 63 2d 2d 3b 0a 20 20 20 20 20  1) ) oc--;.     
1f2f0 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20   }..      /* If 
1f300 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f  the approximatio
1f310 6e 20 69 4b 65 79 20 69 73 20 73 6d 61 6c 6c 65  n iKey is smalle
1f320 72 20 74 68 61 6e 20 74 68 65 20 61 63 74 75 61  r than the actua
1f330 6c 20 72 65 61 6c 20 73 65 61 72 63 68 0a 20 20  l real search.  
1f340 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62      ** term, sub
1f350 73 74 69 74 75 74 65 20 3c 3d 20 66 6f 72 20 3c  stitute <= for <
1f360 20 61 6e 64 20 3e 20 66 6f 72 20 3e 3d 2e 20 20   and > for >=.  
1f370 2a 2f 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66  */.      else if
1f380 28 20 70 49 6e 33 2d 3e 75 2e 72 3e 28 64 6f 75  ( pIn3->u.r>(dou
1f390 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20 20 20  ble)iKey ){.    
1f3a0 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53      assert( OP_S
1f3b0 65 65 6b 4c 45 3d 3d 28 4f 50 5f 53 65 65 6b 4c  eekLE==(OP_SeekL
1f3c0 54 2b 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20  T+1) );.        
1f3d0 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47  assert( OP_SeekG
1f3e0 54 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 2b 31 29  T==(OP_SeekGE+1)
1f3f0 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
1f400 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c 54 20 26  rt( (OP_SeekLT &
1f410 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65   0x0001)==(OP_Se
1f420 65 6b 47 45 20 26 20 30 78 30 30 30 31 29 20 29  ekGE & 0x0001) )
1f430 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 6f  ;.        if( (o
1f440 63 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50  c & 0x0001)==(OP
1f450 5f 53 65 65 6b 4c 54 20 26 20 30 78 30 30 30 31  _SeekLT & 0x0001
1f460 29 20 29 20 6f 63 2b 2b 3b 0a 20 20 20 20 20 20  ) ) oc++;.      
1f470 7d 0a 20 20 20 20 7d 20 0a 20 20 20 20 72 63 20  }.    } .    rc 
1f480 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
1f490 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
1f4a0 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20  >uc.pCursor, 0, 
1f4b0 28 75 36 34 29 69 4b 65 79 2c 20 30 2c 20 26 72  (u64)iKey, 0, &r
1f4c0 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6d 6f 76  es);.    pC->mov
1f4d0 65 74 6f 54 61 72 67 65 74 20 3d 20 69 4b 65 79  etoTarget = iKey
1f4e0 3b 20 20 2f 2a 20 55 73 65 64 20 62 79 20 4f 50  ;  /* Used by OP
1f4f0 5f 44 65 6c 65 74 65 20 2a 2f 0a 20 20 20 20 69  _Delete */.    i
1f500 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1f510 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   ){.      goto a
1f520 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1f530 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  r;.    }.  }else
1f540 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20 61 20 63  {.    /* For a c
1f550 75 72 73 6f 72 20 77 69 74 68 20 74 68 65 20 42  ursor with the B
1f560 54 52 45 45 5f 53 45 45 4b 5f 45 51 20 68 69 6e  TREE_SEEK_EQ hin
1f570 74 2c 20 6f 6e 6c 79 20 74 68 65 20 4f 50 5f 53  t, only the OP_S
1f580 65 65 6b 47 45 20 61 6e 64 0a 20 20 20 20 2a 2a  eekGE and.    **
1f590 20 4f 50 5f 53 65 65 6b 4c 45 20 6f 70 63 6f 64   OP_SeekLE opcod
1f5a0 65 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 2c 20  es are allowed, 
1f5b0 61 6e 64 20 74 68 65 73 65 20 6d 75 73 74 20 62  and these must b
1f5c0 65 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f  e immediately fo
1f5d0 6c 6c 6f 77 65 64 0a 20 20 20 20 2a 2a 20 62 79  llowed.    ** by
1f5e0 20 61 6e 20 4f 50 5f 49 64 78 47 54 20 6f 72 20   an OP_IdxGT or 
1f5f0 4f 50 5f 49 64 78 4c 54 20 6f 70 63 6f 64 65 2c  OP_IdxLT opcode,
1f600 20 72 65 73 70 65 63 74 69 76 65 6c 79 2c 20 77   respectively, w
1f610 69 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65 79  ith the same key
1f620 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
1f630 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
1f640 73 6f 72 48 61 73 48 69 6e 74 28 70 43 2d 3e 75  sorHasHint(pC->u
1f650 63 2e 70 43 75 72 73 6f 72 2c 20 42 54 52 45 45  c.pCursor, BTREE
1f660 5f 53 45 45 4b 5f 45 51 29 20 29 7b 0a 20 20 20  _SEEK_EQ) ){.   
1f670 20 20 20 65 71 4f 6e 6c 79 20 3d 20 31 3b 0a 20     eqOnly = 1;. 
1f680 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
1f690 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65  ->opcode==OP_See
1f6a0 6b 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  kGE || pOp->opco
1f6b0 64 65 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b  de==OP_SeekLE );
1f6c0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
1f6d0 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  Op[1].opcode==OP
1f6e0 5f 49 64 78 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d  _IdxLT || pOp[1]
1f6f0 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47  .opcode==OP_IdxG
1f700 54 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  T );.      asser
1f710 74 28 20 70 4f 70 5b 31 5d 2e 70 31 3d 3d 70 4f  t( pOp[1].p1==pO
1f720 70 5b 30 5d 2e 70 31 20 29 3b 0a 20 20 20 20 20  p[0].p1 );.     
1f730 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e   assert( pOp[1].
1f740 70 32 3d 3d 70 4f 70 5b 30 5d 2e 70 32 20 29 3b  p2==pOp[0].p2 );
1f750 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
1f760 4f 70 5b 31 5d 2e 70 33 3d 3d 70 4f 70 5b 30 5d  Op[1].p3==pOp[0]
1f770 2e 70 33 20 29 3b 0a 20 20 20 20 20 20 61 73 73  .p3 );.      ass
1f780 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 34 2e 69  ert( pOp[1].p4.i
1f790 3d 3d 70 4f 70 5b 30 5d 2e 70 34 2e 69 20 29 3b  ==pOp[0].p4.i );
1f7a0 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6e 46 69 65  .    }..    nFie
1f7b0 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a  ld = pOp->p4.i;.
1f7c0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
1f7d0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
1f7e0 32 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  2 );.    assert(
1f7f0 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20   nField>0 );.   
1f800 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
1f810 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  ->pKeyInfo;.    
1f820 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
1f830 6e 46 69 65 6c 64 3b 0a 0a 20 20 20 20 2f 2a 20  nField;..    /* 
1f840 54 68 65 20 6e 65 78 74 20 6c 69 6e 65 20 6f 66  The next line of
1f850 20 63 6f 64 65 20 63 6f 6d 70 75 74 65 73 20 61   code computes a
1f860 73 20 66 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20  s follows, only 
1f870 66 61 73 74 65 72 3a 0a 20 20 20 20 2a 2a 20 20  faster:.    **  
1f880 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b   if( oc==OP_Seek
1f890 47 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  GT || oc==OP_See
1f8a0 6b 4c 45 20 29 7b 0a 20 20 20 20 2a 2a 20 20 20  kLE ){.    **   
1f8b0 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d    r.default_rc =
1f8c0 20 2d 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 65   -1;.    **   }e
1f8d0 6c 73 65 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20  lse{.    **     
1f8e0 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2b  r.default_rc = +
1f8f0 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 0a 20 20  1;.    **   }.  
1f900 20 20 2a 2f 0a 20 20 20 20 72 2e 64 65 66 61 75    */.    r.defau
1f910 6c 74 5f 72 63 20 3d 20 28 28 31 20 26 20 28 6f  lt_rc = ((1 & (o
1f920 63 20 2d 20 4f 50 5f 53 65 65 6b 4c 54 29 29 20  c - OP_SeekLT)) 
1f930 3f 20 2d 31 20 3a 20 2b 31 29 3b 0a 20 20 20 20  ? -1 : +1);.    
1f940 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53  assert( oc!=OP_S
1f950 65 65 6b 47 54 20 7c 7c 20 72 2e 64 65 66 61 75  eekGT || r.defau
1f960 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20  lt_rc==-1 );.   
1f970 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f   assert( oc!=OP_
1f980 53 65 65 6b 4c 45 20 7c 7c 20 72 2e 64 65 66 61  SeekLE || r.defa
1f990 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20  ult_rc==-1 );.  
1f9a0 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50    assert( oc!=OP
1f9b0 5f 53 65 65 6b 47 45 20 7c 7c 20 72 2e 64 65 66  _SeekGE || r.def
1f9c0 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 20  ault_rc==+1 );. 
1f9d0 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f     assert( oc!=O
1f9e0 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 72 2e 64 65  P_SeekLT || r.de
1f9f0 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a  fault_rc==+1 );.
1fa00 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61  .    r.aMem = &a
1fa10 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69  Mem[pOp->p3];.#i
1fa20 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
1fa30 47 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66  G.    { int i; f
1fa40 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65  or(i=0; i<r.nFie
1fa50 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28  ld; i++) assert(
1fa60 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61   memIsValid(&r.a
1fa70 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e  Mem[i]) ); }.#en
1fa80 64 69 66 0a 20 20 20 20 45 78 70 61 6e 64 42 6c  dif.    ExpandBl
1fa90 6f 62 28 72 2e 61 4d 65 6d 29 3b 0a 20 20 20 20  ob(r.aMem);.    
1faa0 72 2e 65 71 53 65 65 6e 20 3d 20 30 3b 0a 20 20  r.eqSeen = 0;.  
1fab0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1fac0 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
1fad0 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  d(pC->uc.pCursor
1fae0 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73  , &r, 0, 0, &res
1faf0 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53  );.    if( rc!=S
1fb00 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1fb10 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1fb20 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
1fb30 0a 20 20 20 20 69 66 28 20 65 71 4f 6e 6c 79 20  .    if( eqOnly 
1fb40 26 26 20 72 2e 65 71 53 65 65 6e 3d 3d 30 20 29  && r.eqSeen==0 )
1fb50 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
1fb60 72 65 73 21 3d 30 20 29 3b 0a 20 20 20 20 20 20  res!=0 );.      
1fb70 67 6f 74 6f 20 73 65 65 6b 5f 6e 6f 74 5f 66 6f  goto seek_not_fo
1fb80 75 6e 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  und;.    }.  }. 
1fb90 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
1fba0 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  eto = 0;.  pC->c
1fbb0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
1fbc0 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65 66  HE_STALE;.#ifdef
1fbd0 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73   SQLITE_TEST.  s
1fbe0 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f  qlite3_search_co
1fbf0 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20  unt++;.#endif.  
1fc00 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47  if( oc>=OP_SeekG
1fc10 45 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63  E ){  assert( oc
1fc20 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20 6f  ==OP_SeekGE || o
1fc30 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 29 3b 0a  c==OP_SeekGT );.
1fc40 20 20 20 20 69 66 28 20 72 65 73 3c 30 20 7c 7c      if( res<0 ||
1fc50 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d   (res==0 && oc==
1fc60 4f 50 5f 53 65 65 6b 47 54 29 20 29 7b 0a 20 20  OP_SeekGT) ){.  
1fc70 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20      res = 0;.   
1fc80 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1fc90 74 72 65 65 4e 65 78 74 28 70 43 2d 3e 75 63 2e  treeNext(pC->uc.
1fca0 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
1fcb0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
1fcc0 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
1fcd0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1fce0 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  r;.    }else{.  
1fcf0 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20      res = 0;.   
1fd00 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
1fd10 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53  assert( oc==OP_S
1fd20 65 65 6b 4c 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekLT || oc==OP_
1fd30 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20 69 66  SeekLE );.    if
1fd40 28 20 72 65 73 3e 30 20 7c 7c 20 28 72 65 73 3d  ( res>0 || (res=
1fd50 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65  =0 && oc==OP_See
1fd60 6b 4c 54 29 20 29 7b 0a 20 20 20 20 20 20 72 65  kLT) ){.      re
1fd70 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20  s = 0;.      rc 
1fd80 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72  = sqlite3BtreePr
1fd90 65 76 69 6f 75 73 28 70 43 2d 3e 75 63 2e 70 43  evious(pC->uc.pC
1fda0 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20  ursor, &res);.  
1fdb0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1fdc0 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
1fdd0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1fde0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
1fdf0 20 20 2f 2a 20 72 65 73 20 6d 69 67 68 74 20 62    /* res might b
1fe00 65 20 6e 65 67 61 74 69 76 65 20 62 65 63 61 75  e negative becau
1fe10 73 65 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  se the table is 
1fe20 65 6d 70 74 79 2e 20 20 43 68 65 63 6b 20 74 6f  empty.  Check to
1fe30 0a 20 20 20 20 20 20 2a 2a 20 73 65 65 20 69 66  .      ** see if
1fe40 20 74 68 69 73 20 69 73 20 74 68 65 20 63 61 73   this is the cas
1fe50 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  e..      */.    
1fe60 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 42    res = sqlite3B
1fe70 74 72 65 65 45 6f 66 28 70 43 2d 3e 75 63 2e 70  treeEof(pC->uc.p
1fe80 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20  Cursor);.    }. 
1fe90 20 7d 0a 73 65 65 6b 5f 6e 6f 74 5f 66 6f 75 6e   }.seek_not_foun
1fea0 64 3a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  d:.  assert( pOp
1feb0 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 56 64 62 65  ->p2>0 );.  Vdbe
1fec0 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21  BranchTaken(res!
1fed0 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73  =0,2);.  if( res
1fee0 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d   ){.    goto jum
1fef0 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65  p_to_p2;.  }else
1ff00 20 69 66 28 20 65 71 4f 6e 6c 79 20 29 7b 0a 20   if( eqOnly ){. 
1ff10 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31     assert( pOp[1
1ff20 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ].opcode==OP_Idx
1ff30 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63  LT || pOp[1].opc
1ff40 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b  ode==OP_IdxGT );
1ff50 0a 20 20 20 20 70 4f 70 2b 2b 3b 20 2f 2a 20 53  .    pOp++; /* S
1ff60 6b 69 70 20 74 68 65 20 4f 50 5f 49 64 78 4c 74  kip the OP_IdxLt
1ff70 20 6f 72 20 4f 50 5f 49 64 78 47 54 20 74 68 61   or OP_IdxGT tha
1ff80 74 20 66 6f 6c 6c 6f 77 73 20 2a 2f 0a 20 20 7d  t follows */.  }
1ff90 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 20 20 0a 0a  .  break;.}.  ..
1ffa0 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6f 75 6e 64  /* Opcode: Found
1ffb0 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
1ffc0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
1ffd0 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49  r[P3@P4].**.** I
1ffe0 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67  f P4==0 then reg
1fff0 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61  ister P3 holds a
20000 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65   blob constructe
20010 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e  d by MakeRecord.
20020 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65    If.** P4>0 the
20030 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  n register P3 is
20040 20 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34   the first of P4
20050 20 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20   registers that 
20060 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
20070 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a  .** record..**.*
20080 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f  * Cursor P1 is o
20090 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65  n an index btree
200a0 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64  .  If the record
200b0 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50   identified by P
200c0 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 61  3 and P4.** is a
200d0 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65   prefix of any e
200e0 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20  ntry in P1 then 
200f0 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74  a jump is made t
20100 6f 20 50 32 20 61 6e 64 0a 2a 2a 20 50 31 20 69  o P2 and.** P1 i
20110 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20  s left pointing 
20120 61 74 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20  at the matching 
20130 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  entry..**.** Thi
20140 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76  s operation leav
20150 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e  es the cursor in
20160 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69   a state where i
20170 74 20 63 61 6e 20 62 65 0a 2a 2a 20 61 64 76 61  t can be.** adva
20180 6e 63 65 64 20 69 6e 20 74 68 65 20 66 6f 72 77  nced in the forw
20190 61 72 64 20 64 69 72 65 63 74 69 6f 6e 2e 20 20  ard direction.  
201a0 54 68 65 20 4e 65 78 74 20 69 6e 73 74 72 75 63  The Next instruc
201b0 74 69 6f 6e 20 77 69 6c 6c 20 77 6f 72 6b 2c 0a  tion will work,.
201c0 2a 2a 20 62 75 74 20 6e 6f 74 20 74 68 65 20 50  ** but not the P
201d0 72 65 76 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  rev instruction.
201e0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
201f0 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e   NotFound, NoCon
20200 66 6c 69 63 74 2c 20 4e 6f 74 45 78 69 73 74 73  flict, NotExists
20210 2e 20 53 65 65 6b 47 65 0a 2a 2f 0a 2f 2a 20 4f  . SeekGe.*/./* O
20220 70 63 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20  pcode: NotFound 
20230 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
20240 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
20250 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
20260 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69   P4==0 then regi
20270 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20  ster P3 holds a 
20280 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64  blob constructed
20290 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20   by MakeRecord. 
202a0 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e   If.** P4>0 then
202b0 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
202c0 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20  the first of P4 
202d0 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66  registers that f
202e0 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a  orm an unpacked.
202f0 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a  ** record..** .*
20300 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f  * Cursor P1 is o
20310 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65  n an index btree
20320 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64  .  If the record
20330 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50   identified by P
20340 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 6e  3 and P4.** is n
20350 6f 74 20 74 68 65 20 70 72 65 66 69 78 20 6f 66  ot the prefix of
20360 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31   any entry in P1
20370 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20   then a jump is 
20380 6d 61 64 65 20 74 6f 20 50 32 2e 20 20 49 66 20  made to P2.  If 
20390 50 31 20 0a 2a 2a 20 64 6f 65 73 20 63 6f 6e 74  P1 .** does cont
203a0 61 69 6e 20 61 6e 20 65 6e 74 72 79 20 77 68 6f  ain an entry who
203b0 73 65 20 70 72 65 66 69 78 20 6d 61 74 63 68 65  se prefix matche
203c0 73 20 74 68 65 20 50 33 2f 50 34 20 72 65 63 6f  s the P3/P4 reco
203d0 72 64 20 74 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a  rd then control.
203e0 2a 2a 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68  ** falls through
203f0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
20400 74 72 75 63 74 69 6f 6e 20 61 6e 64 20 50 31 20  truction and P1 
20410 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67  is left pointing
20420 20 61 74 20 74 68 65 0a 2a 2a 20 6d 61 74 63 68   at the.** match
20430 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a  ing entry..**.**
20440 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20   This operation 
20450 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
20460 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65  r in a state whe
20470 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a  re it cannot be.
20480 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20 65  ** advanced in e
20490 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e  ither direction.
204a0 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
204b0 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50  , the Next and P
204c0 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64  rev.** opcodes d
204d0 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65 72  o not work after
204e0 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e   this operation.
204f0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
20500 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74   Found, NotExist
20510 73 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f  s, NoConflict.*/
20520 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 43 6f  ./* Opcode: NoCo
20530 6e 66 6c 69 63 74 20 50 31 20 50 32 20 50 33 20  nflict P1 P2 P3 
20540 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
20550 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
20560 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68  *.** If P4==0 th
20570 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 68  en register P3 h
20580 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73  olds a blob cons
20590 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52  tructed by MakeR
205a0 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34  ecord.  If.** P4
205b0 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  >0 then register
205c0 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
205d0 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
205e0 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e   that form an un
205f0 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64  packed.** record
20600 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20  ..** .** Cursor 
20610 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65  P1 is on an inde
20620 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65  x btree.  If the
20630 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69   record identifi
20640 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a  ed by P3 and P4.
20650 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 6e 79 20  ** contains any 
20660 4e 55 4c 4c 20 76 61 6c 75 65 2c 20 6a 75 6d 70  NULL value, jump
20670 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
20680 50 32 2e 20 20 49 66 20 61 6c 6c 20 74 65 72 6d  P2.  If all term
20690 73 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f  s of the.** reco
206a0 72 64 20 61 72 65 20 6e 6f 74 2d 4e 55 4c 4c 20  rd are not-NULL 
206b0 74 68 65 6e 20 61 20 63 68 65 63 6b 20 69 73 20  then a check is 
206c0 64 6f 6e 65 20 74 6f 20 64 65 74 65 72 6d 69 6e  done to determin
206d0 65 20 69 66 20 61 6e 79 20 72 6f 77 20 69 6e 20  e if any row in 
206e0 74 68 65 0a 2a 2a 20 50 31 20 69 6e 64 65 78 20  the.** P1 index 
206f0 62 74 72 65 65 20 68 61 73 20 61 20 6d 61 74 63  btree has a matc
20700 68 69 6e 67 20 6b 65 79 20 70 72 65 66 69 78 2e  hing key prefix.
20710 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e    If there are n
20720 6f 20 6d 61 74 63 68 65 73 2c 20 6a 75 6d 70 0a  o matches, jump.
20730 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  ** immediately t
20740 6f 20 50 32 2e 20 20 49 66 20 74 68 65 72 65 20  o P2.  If there 
20750 69 73 20 61 20 6d 61 74 63 68 2c 20 66 61 6c 6c  is a match, fall
20760 20 74 68 72 6f 75 67 68 20 61 6e 64 20 6c 65 61   through and lea
20770 76 65 20 74 68 65 20 50 31 0a 2a 2a 20 63 75 72  ve the P1.** cur
20780 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20  sor pointing to 
20790 74 68 65 20 6d 61 74 63 68 69 6e 67 20 72 6f 77  the matching row
207a0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
207b0 6f 64 65 20 69 73 20 73 69 6d 69 6c 61 72 20 74  ode is similar t
207c0 6f 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 77 69  o OP_NotFound wi
207d0 74 68 20 74 68 65 20 65 78 63 65 70 74 69 6f 6e  th the exception
207e0 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 62 72  s that the.** br
207f0 61 6e 63 68 20 69 73 20 61 6c 77 61 79 73 20 74  anch is always t
20800 61 6b 65 6e 20 69 66 20 61 6e 79 20 70 61 72 74  aken if any part
20810 20 6f 66 20 74 68 65 20 73 65 61 72 63 68 20 6b   of the search k
20820 65 79 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  ey input is NULL
20830 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65  ..**.** This ope
20840 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68  ration leaves th
20850 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74  e cursor in a st
20860 61 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e  ate where it can
20870 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63  not be.** advanc
20880 65 64 20 69 6e 20 65 69 74 68 65 72 20 64 69 72  ed in either dir
20890 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65  ection.  In othe
208a0 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78  r words, the Nex
208b0 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70  t and Prev.** op
208c0 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72  codes do not wor
208d0 6b 20 61 66 74 65 72 20 74 68 69 73 20 6f 70 65  k after this ope
208e0 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65  ration..**.** Se
208f0 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64  e also: NotFound
20900 2c 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73  , Found, NotExis
20910 74 73 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f  ts.*/.case OP_No
20920 43 6f 6e 66 6c 69 63 74 3a 20 20 20 20 20 2f 2a  Conflict:     /*
20930 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61   jump, in3 */.ca
20940 73 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20  se OP_NotFound: 
20950 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
20960 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6f  n3 */.case OP_Fo
20970 75 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  und: {        /*
20980 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
20990 69 6e 74 20 61 6c 72 65 61 64 79 45 78 69 73 74  int alreadyExist
209a0 73 3b 0a 20 20 69 6e 74 20 74 61 6b 65 4a 75 6d  s;.  int takeJum
209b0 70 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 20 20 56  p;.  int ii;.  V
209c0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
209d0 20 69 6e 74 20 72 65 73 3b 0a 20 20 63 68 61 72   int res;.  char
209e0 20 2a 70 46 72 65 65 3b 0a 20 20 55 6e 70 61 63   *pFree;.  Unpac
209f0 6b 65 64 52 65 63 6f 72 64 20 2a 70 49 64 78 4b  kedRecord *pIdxK
20a00 65 79 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  ey;.  UnpackedRe
20a10 63 6f 72 64 20 72 3b 0a 20 20 63 68 61 72 20 61  cord r;.  char a
20a20 54 65 6d 70 52 65 63 5b 52 4f 55 4e 44 38 28 73  TempRec[ROUND8(s
20a30 69 7a 65 6f 66 28 55 6e 70 61 63 6b 65 64 52 65  izeof(UnpackedRe
20a40 63 6f 72 64 29 29 20 2b 20 73 69 7a 65 6f 66 28  cord)) + sizeof(
20a50 4d 65 6d 29 2a 34 20 2b 20 37 5d 3b 0a 0a 23 69  Mem)*4 + 7];..#i
20a60 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
20a70 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
20a80 64 65 21 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63  de!=OP_NoConflic
20a90 74 20 29 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e  t ) sqlite3_foun
20aa0 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69  d_count++;.#endi
20ab0 66 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  f..  assert( pOp
20ac0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
20ad0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
20ae0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
20af0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
20b00 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
20b10 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
20b20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
20b30 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
20b40 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f  EBUG.  pC->seekO
20b50 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b  p = pOp->opcode;
20b60 0a 23 65 6e 64 69 66 0a 20 20 70 49 6e 33 20 3d  .#endif.  pIn3 =
20b70 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
20b80 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
20b90 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
20ba0 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65  _BTREE );.  asse
20bb0 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  rt( pC->uc.pCurs
20bc0 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  or!=0 );.  asser
20bd0 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  t( pC->isTable==
20be0 30 20 29 3b 0a 20 20 70 46 72 65 65 20 3d 20 30  0 );.  pFree = 0
20bf0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e  ;.  if( pOp->p4.
20c00 69 3e 30 20 29 7b 0a 20 20 20 20 72 2e 70 4b 65  i>0 ){.    r.pKe
20c10 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79  yInfo = pC->pKey
20c20 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65  Info;.    r.nFie
20c30 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70  ld = (u16)pOp->p
20c40 34 2e 69 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20  4.i;.    r.aMem 
20c50 3d 20 70 49 6e 33 3b 0a 20 20 20 20 66 6f 72 28  = pIn3;.    for(
20c60 69 69 3d 30 3b 20 69 69 3c 72 2e 6e 46 69 65 6c  ii=0; ii<r.nFiel
20c70 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20  d; ii++){.      
20c80 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
20c90 69 64 28 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 20  id(&r.aMem[ii]) 
20ca0 29 3b 0a 20 20 20 20 20 20 45 78 70 61 6e 64 42  );.      ExpandB
20cb0 6c 6f 62 28 26 72 2e 61 4d 65 6d 5b 69 69 5d 29  lob(&r.aMem[ii])
20cc0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
20cd0 44 45 42 55 47 0a 20 20 20 20 20 20 69 66 28 20  DEBUG.      if( 
20ce0 69 69 20 29 20 52 45 47 49 53 54 45 52 5f 54 52  ii ) REGISTER_TR
20cf0 41 43 45 28 70 4f 70 2d 3e 70 33 2b 69 69 2c 20  ACE(pOp->p3+ii, 
20d00 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 23 65  &r.aMem[ii]);.#e
20d10 6e 64 69 66 0a 20 20 20 20 7d 0a 20 20 20 20 70  ndif.    }.    p
20d20 49 64 78 4b 65 79 20 3d 20 26 72 3b 0a 20 20 7d  IdxKey = &r;.  }
20d30 65 6c 73 65 7b 0a 20 20 20 20 70 49 64 78 4b 65  else{.    pIdxKe
20d40 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  y = sqlite3VdbeA
20d50 6c 6c 6f 63 55 6e 70 61 63 6b 65 64 52 65 63 6f  llocUnpackedReco
20d60 72 64 28 0a 20 20 20 20 20 20 20 20 70 43 2d 3e  rd(.        pC->
20d70 70 4b 65 79 49 6e 66 6f 2c 20 61 54 65 6d 70 52  pKeyInfo, aTempR
20d80 65 63 2c 20 73 69 7a 65 6f 66 28 61 54 65 6d 70  ec, sizeof(aTemp
20d90 52 65 63 29 2c 20 26 70 46 72 65 65 0a 20 20 20  Rec), &pFree.   
20da0 20 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64 78   );.    if( pIdx
20db0 4b 65 79 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  Key==0 ) goto no
20dc0 5f 6d 65 6d 3b 0a 20 20 20 20 61 73 73 65 72 74  _mem;.    assert
20dd0 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20  ( pIn3->flags & 
20de0 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20  MEM_Blob );.    
20df0 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29  ExpandBlob(pIn3)
20e00 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
20e10 65 52 65 63 6f 72 64 55 6e 70 61 63 6b 28 70 43  eRecordUnpack(pC
20e20 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 49 6e 33  ->pKeyInfo, pIn3
20e30 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 20 70 49  ->n, pIn3->z, pI
20e40 64 78 4b 65 79 29 3b 0a 20 20 7d 0a 20 20 70 49  dxKey);.  }.  pI
20e50 64 78 4b 65 79 2d 3e 64 65 66 61 75 6c 74 5f 72  dxKey->default_r
20e60 63 20 3d 20 30 3b 0a 20 20 74 61 6b 65 4a 75 6d  c = 0;.  takeJum
20e70 70 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f 70  p = 0;.  if( pOp
20e80 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 43  ->opcode==OP_NoC
20e90 6f 6e 66 6c 69 63 74 20 29 7b 0a 20 20 20 20 2f  onflict ){.    /
20ea0 2a 20 46 6f 72 20 74 68 65 20 4f 50 5f 4e 6f 43  * For the OP_NoC
20eb0 6f 6e 66 6c 69 63 74 20 6f 70 63 6f 64 65 2c 20  onflict opcode, 
20ec0 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66  take the jump if
20ed0 20 61 6e 79 20 6f 66 20 74 68 65 0a 20 20 20 20   any of the.    
20ee0 2a 2a 20 69 6e 70 75 74 20 66 69 65 6c 64 73 20  ** input fields 
20ef0 61 72 65 20 4e 55 4c 4c 2c 20 73 69 6e 63 65 20  are NULL, since 
20f00 61 6e 79 20 6b 65 79 20 77 69 74 68 20 61 20 4e  any key with a N
20f10 55 4c 4c 20 77 69 6c 6c 20 6e 6f 74 0a 20 20 20  ULL will not.   
20f20 20 2a 2a 20 63 6f 6e 66 6c 69 63 74 20 2a 2f 0a   ** conflict */.
20f30 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69      for(ii=0; ii
20f40 3c 70 49 64 78 4b 65 79 2d 3e 6e 46 69 65 6c 64  <pIdxKey->nField
20f50 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69  ; ii++){.      i
20f60 66 28 20 70 49 64 78 4b 65 79 2d 3e 61 4d 65 6d  f( pIdxKey->aMem
20f70 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d  [ii].flags & MEM
20f80 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20 20  _Null ){.       
20f90 20 74 61 6b 65 4a 75 6d 70 20 3d 20 31 3b 0a 20   takeJump = 1;. 
20fa0 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
20fb0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
20fc0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
20fd0 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
20fe0 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  d(pC->uc.pCursor
20ff0 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c  , pIdxKey, 0, 0,
21000 20 26 72 65 73 29 3b 0a 20 20 73 71 6c 69 74 65   &res);.  sqlite
21010 33 44 62 46 72 65 65 28 64 62 2c 20 70 46 72 65  3DbFree(db, pFre
21020 65 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51  e);.  if( rc!=SQ
21030 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 67  LITE_OK ){.    g
21040 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
21050 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 43  _error;.  }.  pC
21060 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72  ->seekResult = r
21070 65 73 3b 0a 20 20 61 6c 72 65 61 64 79 45 78 69  es;.  alreadyExi
21080 73 74 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b 0a  sts = (res==0);.
21090 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
210a0 31 2d 61 6c 72 65 61 64 79 45 78 69 73 74 73 3b  1-alreadyExists;
210b0 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  .  pC->deferredM
210c0 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d  oveto = 0;.  pC-
210d0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
210e0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66  ACHE_STALE;.  if
210f0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
21100 50 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20 56  P_Found ){.    V
21110 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 61  dbeBranchTaken(a
21120 6c 72 65 61 64 79 45 78 69 73 74 73 21 3d 30 2c  lreadyExists!=0,
21130 32 29 3b 0a 20 20 20 20 69 66 28 20 61 6c 72 65  2);.    if( alre
21140 61 64 79 45 78 69 73 74 73 20 29 20 67 6f 74 6f  adyExists ) goto
21150 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
21160 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72  else{.    VdbeBr
21170 61 6e 63 68 54 61 6b 65 6e 28 74 61 6b 65 4a 75  anchTaken(takeJu
21180 6d 70 7c 7c 61 6c 72 65 61 64 79 45 78 69 73 74  mp||alreadyExist
21190 73 3d 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28  s==0,2);.    if(
211a0 20 74 61 6b 65 4a 75 6d 70 20 7c 7c 20 21 61 6c   takeJump || !al
211b0 72 65 61 64 79 45 78 69 73 74 73 20 29 20 67 6f  readyExists ) go
211c0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
211d0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
211e0 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69  * Opcode: NotExi
211f0 73 74 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a  sts P1 P2 P3 * *
21200 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e  .** Synopsis: in
21210 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a  tkey=r[P3].**.**
21220 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78   P1 is the index
21230 20 6f 66 20 61 20 63 75 72 73 6f 72 20 6f 70 65   of a cursor ope
21240 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c  n on an SQL tabl
21250 65 20 62 74 72 65 65 20 28 77 69 74 68 20 69 6e  e btree (with in
21260 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29 2e 20  teger.** keys). 
21270 20 50 33 20 69 73 20 61 6e 20 69 6e 74 65 67 65   P3 is an intege
21280 72 20 72 6f 77 69 64 2e 20 20 49 66 20 50 31 20  r rowid.  If P1 
21290 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e  does not contain
212a0 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 0a 2a   a record with.*
212b0 2a 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20  * rowid P3 then 
212c0 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
212d0 20 74 6f 20 50 32 2e 20 20 4f 72 2c 20 69 66 20   to P2.  Or, if 
212e0 50 32 20 69 73 20 30 2c 20 72 61 69 73 65 20 61  P2 is 0, raise a
212f0 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 43 4f 52 52  n.** SQLITE_CORR
21300 55 50 54 20 65 72 72 6f 72 2e 20 49 66 20 50 31  UPT error. If P1
21310 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 20   does contain a 
21320 72 65 63 6f 72 64 20 77 69 74 68 20 72 6f 77 69  record with rowi
21330 64 20 50 33 20 74 68 65 6e 20 0a 2a 2a 20 6c 65  d P3 then .** le
21340 61 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 70  ave the cursor p
21350 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 61 74 20  ointing at that 
21360 72 65 63 6f 72 64 20 61 6e 64 20 66 61 6c 6c 20  record and fall 
21370 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
21380 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69  ext.** instructi
21390 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50  on..**.** The OP
213a0 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64 65  _NotFound opcode
213b0 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73 61   performs the sa
213c0 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20  me operation on 
213d0 69 6e 64 65 78 20 62 74 72 65 65 73 0a 2a 2a 20  index btrees.** 
213e0 28 77 69 74 68 20 61 72 62 69 74 72 61 72 79 20  (with arbitrary 
213f0 6d 75 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79 73  multi-value keys
21400 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  )..**.** This op
21410 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20  code leaves the 
21420 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74  cursor in a stat
21430 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f  e where it canno
21440 74 20 62 65 20 61 64 76 61 6e 63 65 64 0a 2a 2a  t be advanced.**
21450 20 69 6e 20 65 69 74 68 65 72 20 64 69 72 65 63   in either direc
21460 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20  tion.  In other 
21470 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20  words, the Next 
21480 61 6e 64 20 50 72 65 76 20 6f 70 63 6f 64 65 73  and Prev opcodes
21490 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72   will.** not wor
214a0 6b 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 69 73  k following this
214b0 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53   opcode..**.** S
214c0 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
214d0 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66  NotFound, NoConf
214e0 6c 69 63 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lict.*/.case OP_
214f0 4e 6f 74 45 78 69 73 74 73 3a 20 7b 20 20 20 20  NotExists: {    
21500 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
21510 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
21520 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
21530 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
21540 65 73 3b 0a 20 20 75 36 34 20 69 4b 65 79 3b 0a  es;.  u64 iKey;.
21550 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
21560 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65  pOp->p3];.  asse
21570 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  rt( pIn3->flags 
21580 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61  & MEM_Int );.  a
21590 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
215a0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
215b0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
215c0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
215d0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
215e0 43 21 3d 30 20 29 3b 0a 23 69 66 64 65 66 20 53  C!=0 );.#ifdef S
215f0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43  QLITE_DEBUG.  pC
21600 2d 3e 73 65 65 6b 4f 70 20 3d 20 30 3b 0a 23 65  ->seekOp = 0;.#e
21610 6e 64 69 66 0a 20 20 61 73 73 65 72 74 28 20 70  ndif.  assert( p
21620 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
21630 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
21640 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
21650 52 45 45 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  REE );.  pCrsr =
21660 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b   pC->uc.pCursor;
21670 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72  .  assert( pCrsr
21680 21 3d 30 20 29 3b 0a 20 20 72 65 73 20 3d 20 30  !=0 );.  res = 0
21690 3b 0a 20 20 69 4b 65 79 20 3d 20 70 49 6e 33 2d  ;.  iKey = pIn3-
216a0 3e 75 2e 69 3b 0a 20 20 72 63 20 3d 20 73 71 6c  >u.i;.  rc = sql
216b0 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
216c0 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 30  npacked(pCrsr, 0
216d0 2c 20 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29  , iKey, 0, &res)
216e0 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d  ;.  assert( rc==
216f0 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73  SQLITE_OK || res
21700 3d 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6d 6f 76  ==0 );.  pC->mov
21710 65 74 6f 54 61 72 67 65 74 20 3d 20 69 4b 65 79  etoTarget = iKey
21720 3b 20 20 2f 2a 20 55 73 65 64 20 62 79 20 4f 50  ;  /* Used by OP
21730 5f 44 65 6c 65 74 65 20 2a 2f 0a 20 20 70 43 2d  _Delete */.  pC-
21740 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20  >nullRow = 0;.  
21750 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
21760 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
21770 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
21780 65 74 6f 20 3d 20 30 3b 0a 20 20 56 64 62 65 42  eto = 0;.  VdbeB
21790 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d  ranchTaken(res!=
217a0 30 2c 32 29 3b 0a 20 20 70 43 2d 3e 73 65 65 6b  0,2);.  pC->seek
217b0 52 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20  Result = res;.  
217c0 69 66 28 20 72 65 73 21 3d 30 20 29 7b 0a 20 20  if( res!=0 ){.  
217d0 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
217e0 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 20 20 69  LITE_OK );.    i
217f0 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b  f( pOp->p2==0 ){
21800 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
21810 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b  TE_CORRUPT_BKPT;
21820 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
21830 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
21840 32 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  2;.    }.  }.  i
21850 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
21860 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
21870 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
21880 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63 65  Opcode: Sequence
21890 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
218a0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
218b0 63 75 72 73 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b  cursor[P1].ctr++
218c0 0a 2a 2a 0a 2a 2a 20 46 69 6e 64 20 74 68 65 20  .**.** Find the 
218d0 6e 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73  next available s
218e0 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 66  equence number f
218f0 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a  or cursor P1..**
21900 20 57 72 69 74 65 20 74 68 65 20 73 65 71 75 65   Write the seque
21910 6e 63 65 20 6e 75 6d 62 65 72 20 69 6e 74 6f 20  nce number into 
21920 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20  register P2..** 
21930 54 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  The sequence num
21940 62 65 72 20 6f 6e 20 74 68 65 20 63 75 72 73 6f  ber on the curso
21950 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  r is incremented
21960 20 61 66 74 65 72 20 74 68 69 73 0a 2a 2a 20 69   after this.** i
21970 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f  nstruction.  .*/
21980 0a 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e 63  .case OP_Sequenc
21990 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  e: {           /
219a0 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65  * out2 */.  asse
219b0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
219c0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
219d0 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
219e0 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  ( p->apCsr[pOp->
219f0 70 31 5d 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  p1]!=0 );.  asse
21a00 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  rt( p->apCsr[pOp
21a10 2d 3e 70 31 5d 2d 3e 65 43 75 72 54 79 70 65 21  ->p1]->eCurType!
21a20 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20 29 3b  =CURTYPE_VTAB );
21a30 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
21a40 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
21a50 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
21a60 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
21a70 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20  ]->seqCount++;. 
21a80 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f   break;.}.../* O
21a90 70 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64 20  pcode: NewRowid 
21aa0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
21ab0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
21ac0 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 47 65 74 20  rowid.**.** Get 
21ad0 61 20 6e 65 77 20 69 6e 74 65 67 65 72 20 72 65  a new integer re
21ae0 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b  cord number (a.k
21af0 2e 61 20 22 72 6f 77 69 64 22 29 20 75 73 65 64  .a "rowid") used
21b00 20 61 73 20 74 68 65 20 6b 65 79 20 74 6f 20 61   as the key to a
21b10 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72   table..** The r
21b20 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20  ecord number is 
21b30 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75  not previously u
21b40 73 65 64 20 61 73 20 61 20 6b 65 79 20 69 6e 20  sed as a key in 
21b50 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
21b60 74 61 62 6c 65 20 74 68 61 74 20 63 75 72 73 6f  table that curso
21b70 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20  r P1 points to. 
21b80 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20   The new record 
21b90 6e 75 6d 62 65 72 20 69 73 20 77 72 69 74 74 65  number is writte
21ba0 6e 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f 20  n.** written to 
21bb0 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
21bc0 2a 2a 20 49 66 20 50 33 3e 30 20 74 68 65 6e 20  ** If P3>0 then 
21bd0 50 33 20 69 73 20 61 20 72 65 67 69 73 74 65 72  P3 is a register
21be0 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61   in the root fra
21bf0 6d 65 20 6f 66 20 74 68 69 73 20 56 44 42 45 20  me of this VDBE 
21c00 74 68 61 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74  that holds .** t
21c10 68 65 20 6c 61 72 67 65 73 74 20 70 72 65 76 69  he largest previ
21c20 6f 75 73 6c 79 20 67 65 6e 65 72 61 74 65 64 20  ously generated 
21c30 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e  record number. N
21c40 6f 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d  o new record num
21c50 62 65 72 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f  bers are.** allo
21c60 77 65 64 20 74 6f 20 62 65 20 6c 65 73 73 20 74  wed to be less t
21c70 68 61 6e 20 74 68 69 73 20 76 61 6c 75 65 2e 20  han this value. 
21c80 57 68 65 6e 20 74 68 69 73 20 76 61 6c 75 65 20  When this value 
21c90 72 65 61 63 68 65 73 20 69 74 73 20 6d 61 78 69  reaches its maxi
21ca0 6d 75 6d 2c 20 0a 2a 2a 20 61 6e 20 53 51 4c 49  mum, .** an SQLI
21cb0 54 45 5f 46 55 4c 4c 20 65 72 72 6f 72 20 69 73  TE_FULL error is
21cc0 20 67 65 6e 65 72 61 74 65 64 2e 20 54 68 65 20   generated. The 
21cd0 50 33 20 72 65 67 69 73 74 65 72 20 69 73 20 75  P3 register is u
21ce0 70 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20  pdated with the 
21cf0 27 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 72  '.** generated r
21d00 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 54 68  ecord number. Th
21d10 69 73 20 50 33 20 6d 65 63 68 61 6e 69 73 6d 20  is P3 mechanism 
21d20 69 73 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20  is used to help 
21d30 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a  implement the.**
21d40 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66   AUTOINCREMENT f
21d50 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20  eature..*/.case 
21d60 4f 50 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20  OP_NewRowid: {  
21d70 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
21d80 20 2a 2f 0a 20 20 69 36 34 20 76 3b 20 20 20 20   */.  i64 v;    
21d90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21da0 54 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f  The new rowid */
21db0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
21dc0 43 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72  C;        /* Cur
21dd0 73 6f 72 20 6f 66 20 74 61 62 6c 65 20 74 6f 20  sor of table to 
21de0 67 65 74 20 74 68 65 20 6e 65 77 20 72 6f 77 69  get the new rowi
21df0 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20  d */.  int res; 
21e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
21e10 20 52 65 73 75 6c 74 20 6f 66 20 61 6e 20 73 71   Result of an sq
21e20 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 29  lite3BtreeLast()
21e30 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 20 20   */.  int cnt;  
21e40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21e50 43 6f 75 6e 74 65 72 20 74 6f 20 6c 69 6d 69 74  Counter to limit
21e60 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73   the number of s
21e70 65 61 72 63 68 65 73 20 2a 2f 0a 20 20 4d 65 6d  earches */.  Mem
21e80 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *pMem;         
21e90 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
21ea0 68 6f 6c 64 69 6e 67 20 6c 61 72 67 65 73 74 20  holding largest 
21eb0 72 6f 77 69 64 20 66 6f 72 20 41 55 54 4f 49 4e  rowid for AUTOIN
21ec0 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 56 64 62  CREMENT */.  Vdb
21ed0 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20  eFrame *pFrame; 
21ee0 20 20 20 20 2f 2a 20 52 6f 6f 74 20 66 72 61 6d      /* Root fram
21ef0 65 20 6f 66 20 56 44 42 45 20 2a 2f 0a 0a 20 20  e of VDBE */..  
21f00 76 20 3d 20 30 3b 0a 20 20 72 65 73 20 3d 20 30  v = 0;.  res = 0
21f10 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
21f20 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
21f30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
21f40 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
21f50 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
21f60 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
21f70 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
21f80 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
21f90 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
21fa0 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
21fb0 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28  REE );.  assert(
21fc0 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21   pC->uc.pCursor!
21fd0 3d 30 20 29 3b 0a 20 20 7b 0a 20 20 20 20 2f 2a  =0 );.  {.    /*
21fe0 20 54 68 65 20 6e 65 78 74 20 72 6f 77 69 64 20   The next rowid 
21ff0 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  or record number
22000 20 28 64 69 66 66 65 72 65 6e 74 20 74 65 72 6d   (different term
22010 73 20 66 6f 72 20 74 68 65 20 73 61 6d 65 0a 20  s for the same. 
22020 20 20 20 2a 2a 20 74 68 69 6e 67 29 20 69 73 20     ** thing) is 
22030 6f 62 74 61 69 6e 65 64 20 69 6e 20 61 20 74 77  obtained in a tw
22040 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69 74 68 6d  o-step algorithm
22050 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
22060 46 69 72 73 74 20 77 65 20 61 74 74 65 6d 70 74  First we attempt
22070 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 72   to find the lar
22080 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f  gest existing ro
22090 77 69 64 20 61 6e 64 20 61 64 64 20 6f 6e 65 0a  wid and add one.
220a0 20 20 20 20 2a 2a 20 74 6f 20 74 68 61 74 2e 20      ** to that. 
220b0 20 42 75 74 20 69 66 20 74 68 65 20 6c 61 72 67   But if the larg
220c0 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77  est existing row
220d0 69 64 20 69 73 20 61 6c 72 65 61 64 79 20 74 68  id is already th
220e0 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20 2a 2a  e maximum.    **
220f0 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65   positive intege
22100 72 2c 20 77 65 20 68 61 76 65 20 74 6f 20 66 61  r, we have to fa
22110 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
22120 65 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a 2a 20  e second.    ** 
22130 70 72 6f 62 61 62 69 6c 69 73 74 69 63 20 61 6c  probabilistic al
22140 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a 0a 20  gorithm.    **. 
22150 20 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64     ** The second
22160 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 74 6f   algorithm is to
22170 20 73 65 6c 65 63 74 20 61 20 72 6f 77 69 64 20   select a rowid 
22180 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 73 65  at random and se
22190 65 20 69 66 0a 20 20 20 20 2a 2a 20 69 74 20 61  e if.    ** it a
221a0 6c 72 65 61 64 79 20 65 78 69 73 74 73 20 69 6e  lready exists in
221b0 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20   the table.  If 
221c0 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  it does not exis
221d0 74 2c 20 77 65 20 68 61 76 65 0a 20 20 20 20 2a  t, we have.    *
221e0 2a 20 73 75 63 63 65 65 64 65 64 2e 20 20 49 66  * succeeded.  If
221f0 20 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f 77 69   the random rowi
22200 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20 77 65  d does exist, we
22210 20 73 65 6c 65 63 74 20 61 20 6e 65 77 20 6f 6e   select a new on
22220 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74 72 79  e.    ** and try
22230 20 61 67 61 69 6e 2c 20 75 70 20 74 6f 20 31 30   again, up to 10
22240 30 20 74 69 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a  0 times..    */.
22250 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
22260 69 73 54 61 62 6c 65 20 29 3b 0a 0a 23 69 66 64  isTable );..#ifd
22270 65 66 20 53 51 4c 49 54 45 5f 33 32 42 49 54 5f  ef SQLITE_32BIT_
22280 52 4f 57 49 44 0a 23 20 20 20 64 65 66 69 6e 65  ROWID.#   define
22290 20 4d 41 58 5f 52 4f 57 49 44 20 30 78 37 66 66   MAX_ROWID 0x7ff
222a0 66 66 66 66 66 0a 23 65 6c 73 65 0a 20 20 20 20  fffff.#else.    
222b0 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72  /* Some compiler
222c0 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74  s complain about
222d0 20 63 6f 6e 73 74 61 6e 74 73 20 6f 66 20 74 68   constants of th
222e0 65 20 66 6f 72 6d 20 30 78 37 66 66 66 66 66 66  e form 0x7ffffff
222f0 66 66 66 66 66 66 66 66 66 2e 0a 20 20 20 20 2a  fffffffff..    *
22300 2a 20 4f 74 68 65 72 73 20 63 6f 6d 70 6c 61 69  * Others complai
22310 6e 20 61 62 6f 75 74 20 30 78 37 66 66 66 66 66  n about 0x7fffff
22320 66 66 66 66 66 66 66 66 66 66 66 4c 4c 2e 20 20  fffffffffffLL.  
22330 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
22340 63 72 6f 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a  cro seems.    **
22350 20 74 6f 20 70 72 6f 76 69 64 65 20 74 68 65 20   to provide the 
22360 63 6f 6e 73 74 61 6e 74 20 77 68 69 6c 65 20 6d  constant while m
22370 61 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c  aking all compil
22380 65 72 73 20 68 61 70 70 79 2e 0a 20 20 20 20 2a  ers happy..    *
22390 2f 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58  /.#   define MAX
223a0 5f 52 4f 57 49 44 20 20 28 69 36 34 29 28 20 28  _ROWID  (i64)( (
223b0 28 28 75 36 34 29 30 78 37 66 66 66 66 66 66 66  ((u64)0x7fffffff
223c0 29 3c 3c 33 32 29 20 7c 20 28 75 36 34 29 30 78  )<<32) | (u64)0x
223d0 66 66 66 66 66 66 66 66 20 29 0a 23 65 6e 64 69  ffffffff ).#endi
223e0 66 0a 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e  f..    if( !pC->
223f0 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29  useRandomRowid )
22400 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
22410 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43  ite3BtreeLast(pC
22420 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72  ->uc.pCursor, &r
22430 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  es);.      if( r
22440 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
22450 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
22460 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
22470 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
22480 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20  f( res ){.      
22490 20 20 76 20 3d 20 31 3b 20 20 20 2f 2a 20 49 4d    v = 1;   /* IM
224a0 50 3a 20 52 2d 36 31 39 31 34 2d 34 38 30 37 34  P: R-61914-48074
224b0 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   */.      }else{
224c0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
224d0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
224e0 73 6f 72 49 73 56 61 6c 69 64 28 70 43 2d 3e 75  sorIsValid(pC->u
224f0 63 2e 70 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  c.pCursor) );.  
22500 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
22510 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
22520 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26  C->uc.pCursor, &
22530 76 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  v);.        asse
22540 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
22550 4b 20 29 3b 20 20 20 2f 2a 20 43 61 6e 6e 6f 74  K );   /* Cannot
22560 20 66 61 69 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20   fail following 
22570 42 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20  BtreeLast() */. 
22580 20 20 20 20 20 20 20 69 66 28 20 76 3e 3d 4d 41         if( v>=MA
22590 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20 20 20  X_ROWID ){.     
225a0 20 20 20 20 20 70 43 2d 3e 75 73 65 52 61 6e 64       pC->useRand
225b0 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20  omRowid = 1;.   
225c0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
225d0 20 20 20 20 20 20 76 2b 2b 3b 20 20 20 2f 2a 20        v++;   /* 
225e0 49 4d 50 3a 20 52 2d 32 39 35 33 38 2d 33 34 39  IMP: R-29538-349
225f0 38 37 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a  87 */.        }.
22600 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 23        }.    }..#
22610 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
22620 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
22630 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  .    if( pOp->p3
22640 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 73 73   ){.      /* Ass
22650 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61  ert that P3 is a
22660 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65   valid memory ce
22670 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  ll. */.      ass
22680 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
22690 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 70  ;.      if( p->p
226a0 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20  Frame ){.       
226b0 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70   for(pFrame=p->p
226c0 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70  Frame; pFrame->p
226d0 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70  Parent; pFrame=p
226e0 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b  Frame->pParent);
226f0 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65  .        /* Asse
22700 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20  rt that P3 is a 
22710 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c  valid memory cel
22720 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73  l. */.        as
22730 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70  sert( pOp->p3<=p
22740 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  Frame->nMem );. 
22750 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 70         pMem = &p
22760 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d  Frame->aMem[pOp-
22770 3e 70 33 5d 3b 0a 20 20 20 20 20 20 7d 65 6c 73  >p3];.      }els
22780 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73  e{.        /* As
22790 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20  sert that P3 is 
227a0 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63  a valid memory c
227b0 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  ell. */.        
227c0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
227d0 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
227e0 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20  rsor) );.       
227f0 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f   pMem = &aMem[pO
22800 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20  p->p3];.        
22810 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
22820 28 70 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20  (p, pMem);.     
22830 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28   }.      assert(
22840 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4d 65 6d   memIsValid(pMem
22850 29 20 29 3b 0a 0a 20 20 20 20 20 20 52 45 47 49  ) );..      REGI
22860 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
22870 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20  p3, pMem);.     
22880 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
22890 6e 74 65 67 65 72 69 66 79 28 70 4d 65 6d 29 3b  ntegerify(pMem);
228a0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
228b0 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pMem->flags & ME
228c0 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f 2a  M_Int)!=0 );  /*
228d0 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73 20 61   mem(P3) holds a
228e0 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20 20  n integer */.   
228f0 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e 69     if( pMem->u.i
22900 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20 70  ==MAX_ROWID || p
22910 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
22920 64 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  d ){.        rc 
22930 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20  = SQLITE_FULL;  
22940 20 2f 2a 20 49 4d 50 3a 20 52 2d 31 32 32 37 35   /* IMP: R-12275
22950 2d 36 31 33 33 38 20 2a 2f 0a 20 20 20 20 20 20  -61338 */.      
22960 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
22970 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
22980 20 7d 0a 20 20 20 20 20 20 69 66 28 20 76 3c 70   }.      if( v<p
22990 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20  Mem->u.i+1 ){.  
229a0 20 20 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e        v = pMem->
229b0 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 7d  u.i + 1;.      }
229c0 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69  .      pMem->u.i
229d0 20 3d 20 76 3b 0a 20 20 20 20 7d 0a 23 65 6e 64   = v;.    }.#end
229e0 69 66 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 75  if.    if( pC->u
229f0 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b  seRandomRowid ){
22a00 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50 4c 45 4d  .      /* IMPLEM
22a10 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30  ENTATION-OF: R-0
22a20 37 36 37 37 2d 34 31 38 38 31 20 49 66 20 74 68  7677-41881 If th
22a30 65 20 6c 61 72 67 65 73 74 20 52 4f 57 49 44 20  e largest ROWID 
22a40 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65 0a  is equal to the.
22a50 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 73 74        ** largest
22a60 20 70 6f 73 73 69 62 6c 65 20 69 6e 74 65 67 65   possible intege
22a70 72 20 28 39 32 32 33 33 37 32 30 33 36 38 35 34  r (9223372036854
22a80 37 37 35 38 30 37 29 20 74 68 65 6e 20 74 68 65  775807) then the
22a90 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 20   database.      
22aa0 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61 72 74 73  ** engine starts
22ab0 20 70 69 63 6b 69 6e 67 20 70 6f 73 69 74 69 76   picking positiv
22ac0 65 20 63 61 6e 64 69 64 61 74 65 20 52 4f 57 49  e candidate ROWI
22ad0 44 73 20 61 74 20 72 61 6e 64 6f 6d 20 75 6e 74  Ds at random unt
22ae0 69 6c 0a 20 20 20 20 20 20 2a 2a 20 69 74 20 66  il.      ** it f
22af0 69 6e 64 73 20 6f 6e 65 20 74 68 61 74 20 69 73  inds one that is
22b00 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20   not previously 
22b10 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 61  used. */.      a
22b20 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d  ssert( pOp->p3==
22b30 30 20 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e 6e  0 );  /* We cann
22b40 6f 74 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d 20  ot be in random 
22b50 72 6f 77 69 64 20 6d 6f 64 65 20 69 66 20 74 68  rowid mode if th
22b60 69 73 20 69 73 0a 20 20 20 20 20 20 20 20 20 20  is is.          
22b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b80 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e 43     ** an AUTOINC
22b90 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a 2f  REMENT table. */
22ba0 0a 20 20 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a  .      cnt = 0;.
22bb0 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20        do{.      
22bc0 20 20 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d    sqlite3_random
22bd0 6e 65 73 73 28 73 69 7a 65 6f 66 28 76 29 2c 20  ness(sizeof(v), 
22be0 26 76 29 3b 0a 20 20 20 20 20 20 20 20 76 20 26  &v);.        v &
22bf0 3d 20 28 4d 41 58 5f 52 4f 57 49 44 3e 3e 31 29  = (MAX_ROWID>>1)
22c00 3b 20 76 2b 2b 3b 20 20 2f 2a 20 45 6e 73 75 72  ; v++;  /* Ensur
22c10 65 20 74 68 61 74 20 76 20 69 73 20 67 72 65 61  e that v is grea
22c20 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 20 2a 2f  ter than zero */
22c30 0a 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20 20  .      }while(  
22c40 28 28 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74  ((rc = sqlite3Bt
22c50 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
22c60 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  d(pC->uc.pCursor
22c70 2c 20 30 2c 20 28 75 36 34 29 76 2c 0a 20 20 20  , 0, (u64)v,.   
22c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 2c                0,
22cb0 20 26 72 65 73 29 29 3d 3d 53 51 4c 49 54 45 5f   &res))==SQLITE_
22cc0 4f 4b 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  OK).            
22cd0 26 26 20 28 72 65 73 3d 3d 30 29 0a 20 20 20 20  && (res==0).    
22ce0 20 20 20 20 20 20 20 20 26 26 20 28 2b 2b 63 6e          && (++cn
22cf0 74 3c 31 30 30 29 29 3b 0a 20 20 20 20 20 20 69  t<100));.      i
22d00 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
22d10 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
22d20 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 3d 3d  .      if( res==
22d30 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  0 ){.        rc 
22d40 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20  = SQLITE_FULL;  
22d50 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 38 32 31 39   /* IMP: R-38219
22d60 2d 35 33 30 30 32 20 2a 2f 0a 20 20 20 20 20 20  -53002 */.      
22d70 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
22d80 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
22d90 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28   }.      assert(
22da0 20 76 3e 30 20 29 3b 20 20 2f 2a 20 45 56 3a 20   v>0 );  /* EV: 
22db0 52 2d 34 30 38 31 32 2d 30 33 35 37 30 20 2a 2f  R-40812-03570 */
22dc0 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64  .    }.    pC->d
22dd0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
22de0 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  0;.    pC->cache
22df0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
22e00 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  TALE;.  }.  pOut
22e10 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65  ->u.i = v;.  bre
22e20 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
22e30 3a 20 49 6e 73 65 72 74 20 50 31 20 50 32 20 50  : Insert P1 P2 P
22e40 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
22e50 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33  sis: intkey=r[P3
22e60 5d 20 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a  ] data=r[P2].**.
22e70 2a 2a 20 57 72 69 74 65 20 61 6e 20 65 6e 74 72  ** Write an entr
22e80 79 20 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65  y into the table
22e90 20 6f 66 20 63 75 72 73 6f 72 20 50 31 2e 20 20   of cursor P1.  
22ea0 41 20 6e 65 77 20 65 6e 74 72 79 20 69 73 0a 2a  A new entry is.*
22eb0 2a 20 63 72 65 61 74 65 64 20 69 66 20 69 74 20  * created if it 
22ec0 64 6f 65 73 6e 27 74 20 61 6c 72 65 61 64 79 20  doesn't already 
22ed0 65 78 69 73 74 20 6f 72 20 74 68 65 20 64 61 74  exist or the dat
22ee0 61 20 66 6f 72 20 61 6e 20 65 78 69 73 74 69 6e  a for an existin
22ef0 67 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20 6f 76  g.** entry is ov
22f00 65 72 77 72 69 74 74 65 6e 2e 20 20 54 68 65 20  erwritten.  The 
22f10 64 61 74 61 20 69 73 20 74 68 65 20 76 61 6c 75  data is the valu
22f20 65 20 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f 72 65  e MEM_Blob store
22f30 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a  d in register.**
22f40 20 6e 75 6d 62 65 72 20 50 32 2e 20 54 68 65 20   number P2. The 
22f50 6b 65 79 20 69 73 20 73 74 6f 72 65 64 20 69 6e  key is stored in
22f60 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 54 68   register P3. Th
22f70 65 20 6b 65 79 20 6d 75 73 74 0a 2a 2a 20 62 65  e key must.** be
22f80 20 61 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a   a MEM_Int..**.*
22f90 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
22fa0 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20  NCHANGE flag of 
22fb0 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  P5 is set, then 
22fc0 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63  the row change c
22fd0 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65  ount is.** incre
22fe0 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73  mented (otherwis
22ff0 65 20 6e 6f 74 29 2e 20 20 49 66 20 74 68 65 20  e not).  If the 
23000 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44  OPFLAG_LASTROWID
23010 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73   flag of P5 is s
23020 65 74 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f 77 69  et,.** then rowi
23030 64 20 69 73 20 73 74 6f 72 65 64 20 66 6f 72 20  d is stored for 
23040 73 75 62 73 65 71 75 65 6e 74 20 72 65 74 75 72  subsequent retur
23050 6e 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69  n by the.** sqli
23060 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f  te3_last_insert_
23070 72 6f 77 69 64 28 29 20 66 75 6e 63 74 69 6f 6e  rowid() function
23080 20 28 6f 74 68 65 72 77 69 73 65 20 69 74 20 69   (otherwise it i
23090 73 20 75 6e 6d 6f 64 69 66 69 65 64 29 2e 0a 2a  s unmodified)..*
230a0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
230b0 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
230c0 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73   flag of P5 is s
230d0 65 74 20 61 6e 64 20 69 66 20 74 68 65 20 72 65  et and if the re
230e0 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 6c  sult of.** the l
230f0 61 73 74 20 73 65 65 6b 20 6f 70 65 72 61 74 69  ast seek operati
23100 6f 6e 20 28 4f 50 5f 4e 6f 74 45 78 69 73 74 73  on (OP_NotExists
23110 29 20 77 61 73 20 61 20 73 75 63 63 65 73 73 2c  ) was a success,
23120 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70   then this.** op
23130 65 72 61 74 69 6f 6e 20 77 69 6c 6c 20 6e 6f 74  eration will not
23140 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64   attempt to find
23150 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65   the appropriate
23160 20 72 6f 77 20 62 65 66 6f 72 65 20 64 6f 69 6e   row before doin
23170 67 0a 2a 2a 20 74 68 65 20 69 6e 73 65 72 74 20  g.** the insert 
23180 62 75 74 20 77 69 6c 6c 20 69 6e 73 74 65 61 64  but will instead
23190 20 6f 76 65 72 77 72 69 74 65 20 74 68 65 20 72   overwrite the r
231a0 6f 77 20 74 68 61 74 20 74 68 65 20 63 75 72 73  ow that the curs
231b0 6f 72 20 69 73 0a 2a 2a 20 63 75 72 72 65 6e 74  or is.** current
231c0 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20  ly pointing to. 
231d0 20 50 72 65 73 75 6d 61 62 6c 79 2c 20 74 68 65   Presumably, the
231e0 20 70 72 69 6f 72 20 4f 50 5f 4e 6f 74 45 78 69   prior OP_NotExi
231f0 73 74 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 68 61  sts opcode.** ha
23200 73 20 61 6c 72 65 61 64 79 20 70 6f 73 69 74 69  s already positi
23210 6f 6e 65 64 20 74 68 65 20 63 75 72 73 6f 72 20  oned the cursor 
23220 63 6f 72 72 65 63 74 6c 79 2e 20 20 54 68 69 73  correctly.  This
23230 20 69 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74   is an optimizat
23240 69 6f 6e 0a 2a 2a 20 74 68 61 74 20 62 6f 6f 73  ion.** that boos
23250 74 73 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 62  ts performance b
23260 79 20 61 76 6f 69 64 69 6e 67 20 72 65 64 75 6e  y avoiding redun
23270 64 61 6e 74 20 73 65 65 6b 73 2e 0a 2a 2a 0a 2a  dant seeks..**.*
23280 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
23290 49 53 55 50 44 41 54 45 20 66 6c 61 67 20 69 73  ISUPDATE flag is
232a0 20 73 65 74 2c 20 74 68 65 6e 20 74 68 69 73 20   set, then this 
232b0 6f 70 63 6f 64 65 20 69 73 20 70 61 72 74 20 6f  opcode is part o
232c0 66 20 61 6e 0a 2a 2a 20 55 50 44 41 54 45 20 6f  f an.** UPDATE o
232d0 70 65 72 61 74 69 6f 6e 2e 20 20 4f 74 68 65 72  peration.  Other
232e0 77 69 73 65 20 28 69 66 20 74 68 65 20 66 6c 61  wise (if the fla
232f0 67 20 69 73 20 63 6c 65 61 72 29 20 74 68 65 6e  g is clear) then
23300 20 74 68 69 73 20 6f 70 63 6f 64 65 0a 2a 2a 20   this opcode.** 
23310 69 73 20 70 61 72 74 20 6f 66 20 61 6e 20 49 4e  is part of an IN
23320 53 45 52 54 20 6f 70 65 72 61 74 69 6f 6e 2e 20  SERT operation. 
23330 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   The difference 
23340 69 73 20 6f 6e 6c 79 20 69 6d 70 6f 72 74 61 6e  is only importan
23350 74 20 74 6f 0a 2a 2a 20 74 68 65 20 75 70 64 61  t to.** the upda
23360 74 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50  te hook..**.** P
23370 61 72 61 6d 65 74 65 72 20 50 34 20 6d 61 79 20  arameter P4 may 
23380 70 6f 69 6e 74 20 74 6f 20 61 20 73 74 72 69 6e  point to a strin
23390 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  g containing the
233a0 20 74 61 62 6c 65 2d 6e 61 6d 65 2c 20 6f 72 0a   table-name, or.
233b0 2a 2a 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20  ** may be NULL. 
233c0 49 66 20 69 74 20 69 73 20 6e 6f 74 20 4e 55 4c  If it is not NUL
233d0 4c 2c 20 74 68 65 6e 20 74 68 65 20 75 70 64 61  L, then the upda
233e0 74 65 2d 68 6f 6f 6b 20 0a 2a 2a 20 28 73 71 6c  te-hook .** (sql
233f0 69 74 65 33 2e 78 55 70 64 61 74 65 43 61 6c 6c  ite3.xUpdateCall
23400 62 61 63 6b 29 20 69 73 20 69 6e 76 6f 6b 65 64  back) is invoked
23410 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63   following a suc
23420 63 65 73 73 66 75 6c 20 69 6e 73 65 72 74 2e 0a  cessful insert..
23430 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e 47 2f 54  **.** (WARNING/T
23440 4f 44 4f 3a 20 49 66 20 50 31 20 69 73 20 61 20  ODO: If P1 is a 
23450 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 20 61 6e  pseudo-cursor an
23460 64 20 50 32 20 69 73 20 64 79 6e 61 6d 69 63 61  d P2 is dynamica
23470 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64  lly.** allocated
23480 2c 20 74 68 65 6e 20 6f 77 6e 65 72 73 68 69 70  , then ownership
23490 20 6f 66 20 50 32 20 69 73 20 74 72 61 6e 73 66   of P2 is transf
234a0 65 72 72 65 64 20 74 6f 20 74 68 65 20 70 73 65  erred to the pse
234b0 75 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20 61 6e  udo-cursor.** an
234c0 64 20 72 65 67 69 73 74 65 72 20 50 32 20 62 65  d register P2 be
234d0 63 6f 6d 65 73 20 65 70 68 65 6d 65 72 61 6c 2e  comes ephemeral.
234e0 20 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20    If the cursor 
234f0 69 73 20 63 68 61 6e 67 65 64 2c 20 74 68 65 0a  is changed, the.
23500 2a 2a 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  ** value of regi
23510 73 74 65 72 20 50 32 20 77 69 6c 6c 20 74 68 65  ster P2 will the
23520 6e 20 63 68 61 6e 67 65 2e 20 20 4d 61 6b 65 20  n change.  Make 
23530 73 75 72 65 20 74 68 69 73 20 64 6f 65 73 20 6e  sure this does n
23540 6f 74 0a 2a 2a 20 63 61 75 73 65 20 61 6e 79 20  ot.** cause any 
23550 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a  problems.).**.**
23560 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
23570 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20  n only works on 
23580 74 61 62 6c 65 73 2e 20 20 54 68 65 20 65 71 75  tables.  The equ
23590 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74  ivalent instruct
235a0 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64 69 63  ion.** for indic
235b0 65 73 20 69 73 20 4f 50 5f 49 64 78 49 6e 73 65  es is OP_IdxInse
235c0 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  rt..*/./* Opcode
235d0 3a 20 49 6e 73 65 72 74 49 6e 74 20 50 31 20 50  : InsertInt P1 P
235e0 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
235f0 6e 6f 70 73 69 73 3a 20 20 69 6e 74 6b 65 79 3d  nopsis:  intkey=
23600 50 33 20 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a  P3 data=r[P2].**
23610 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 65  .** This works e
23620 78 61 63 74 6c 79 20 6c 69 6b 65 20 4f 50 5f 49  xactly like OP_I
23630 6e 73 65 72 74 20 65 78 63 65 70 74 20 74 68 61  nsert except tha
23640 74 20 74 68 65 20 6b 65 79 20 69 73 20 74 68 65  t the key is the
23650 0a 2a 2a 20 69 6e 74 65 67 65 72 20 76 61 6c 75  .** integer valu
23660 65 20 50 33 2c 20 6e 6f 74 20 74 68 65 20 76 61  e P3, not the va
23670 6c 75 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67  lue of the integ
23680 65 72 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  er stored in reg
23690 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73  ister P3..*/.cas
236a0 65 20 4f 50 5f 49 6e 73 65 72 74 3a 20 0a 63 61  e OP_Insert: .ca
236b0 73 65 20 4f 50 5f 49 6e 73 65 72 74 49 6e 74 3a  se OP_InsertInt:
236c0 20 7b 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 3b   {.  Mem *pData;
236d0 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65         /* MEM ce
236e0 6c 6c 20 68 6f 6c 64 69 6e 67 20 64 61 74 61 20  ll holding data 
236f0 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 74  for the record t
23700 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f  o be inserted */
23710 0a 20 20 4d 65 6d 20 2a 70 4b 65 79 3b 20 20 20  .  Mem *pKey;   
23720 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c       /* MEM cell
23730 20 68 6f 6c 64 69 6e 67 20 6b 65 79 20 20 66 6f   holding key  fo
23740 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  r the record */.
23750 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20    i64 iKey;     
23760 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 74 65 67      /* The integ
23770 65 72 20 52 4f 57 49 44 20 6f 72 20 6b 65 79 20  er ROWID or key 
23780 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 74  for the record t
23790 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f  o be inserted */
237a0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
237b0 43 3b 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 74  C;   /* Cursor t
237c0 6f 20 74 61 62 6c 65 20 69 6e 74 6f 20 77 68 69  o table into whi
237d0 63 68 20 69 6e 73 65 72 74 20 69 73 20 77 72 69  ch insert is wri
237e0 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a  tten */.  int nZ
237f0 65 72 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  ero;        /* N
23800 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 2d 62 79  umber of zero-by
23810 74 65 73 20 74 6f 20 61 70 70 65 6e 64 20 2a 2f  tes to append */
23820 0a 20 20 69 6e 74 20 73 65 65 6b 52 65 73 75 6c  .  int seekResul
23830 74 3b 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f  t;   /* Result o
23840 66 20 70 72 69 6f 72 20 73 65 65 6b 20 6f 72 20  f prior seek or 
23850 30 20 69 66 20 6e 6f 20 55 53 45 53 45 45 4b 52  0 if no USESEEKR
23860 45 53 55 4c 54 20 66 6c 61 67 20 2a 2f 0a 20 20  ESULT flag */.  
23870 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b  const char *zDb;
23880 20 20 2f 2a 20 64 61 74 61 62 61 73 65 20 6e 61    /* database na
23890 6d 65 20 2d 20 75 73 65 64 20 62 79 20 74 68 65  me - used by the
238a0 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a   update hook */.
238b0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
238c0 62 6c 3b 20 2f 2a 20 54 61 62 6c 65 20 6e 61 6d  bl; /* Table nam
238d0 65 20 2d 20 75 73 65 64 20 62 79 20 74 68 65 20  e - used by the 
238e0 6f 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20  opdate hook */. 
238f0 20 69 6e 74 20 6f 70 3b 20 20 20 20 20 20 20 20   int op;        
23900 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20 66 6f 72     /* Opcode for
23910 20 75 70 64 61 74 65 20 68 6f 6f 6b 3a 20 53 51   update hook: SQ
23920 4c 49 54 45 5f 55 50 44 41 54 45 20 6f 72 20 53  LITE_UPDATE or S
23930 51 4c 49 54 45 5f 49 4e 53 45 52 54 20 2a 2f 0a  QLITE_INSERT */.
23940 0a 20 20 70 44 61 74 61 20 3d 20 26 61 4d 65 6d  .  pData = &aMem
23950 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
23960 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
23970 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
23980 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
23990 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 44  t( memIsValid(pD
239a0 61 74 61 29 20 29 3b 0a 20 20 70 43 20 3d 20 70  ata) );.  pC = p
239b0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
239c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
239d0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
239e0 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
239f0 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
23a00 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
23a10 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61  Cursor!=0 );.  a
23a20 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
23a30 6c 65 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52  le );.  REGISTER
23a40 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
23a50 70 44 61 74 61 29 3b 0a 0a 20 20 69 66 28 20 70  pData);..  if( p
23a60 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
23a70 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 70 4b 65  nsert ){.    pKe
23a80 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  y = &aMem[pOp->p
23a90 33 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  3];.    assert( 
23aa0 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pKey->flags & ME
23ab0 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 61 73 73  M_Int );.    ass
23ac0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
23ad0 70 4b 65 79 29 20 29 3b 0a 20 20 20 20 52 45 47  pKey) );.    REG
23ae0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
23af0 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 20 20 20 20  >p3, pKey);.    
23b00 69 4b 65 79 20 3d 20 70 4b 65 79 2d 3e 75 2e 69  iKey = pKey->u.i
23b10 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
23b20 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
23b30 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 49 6e 74  de==OP_InsertInt
23b40 20 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70   );.    iKey = p
23b50 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69  Op->p3;.  }..  i
23b60 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  f( pOp->p5 & OPF
23b70 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d  LAG_NCHANGE ) p-
23b80 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66  >nChange++;.  if
23b90 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ( pOp->p5 & OPFL
23ba0 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 29 20 64  AG_LASTROWID ) d
23bb0 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c  b->lastRowid = l
23bc0 61 73 74 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b  astRowid = iKey;
23bd0 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c  .  if( pData->fl
23be0 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
23bf0 7b 0a 20 20 20 20 70 44 61 74 61 2d 3e 7a 20 3d  {.    pData->z =
23c00 20 30 3b 0a 20 20 20 20 70 44 61 74 61 2d 3e 6e   0;.    pData->n
23c10 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 0;.  }else{. 
23c20 20 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61     assert( pData
23c30 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42  ->flags & (MEM_B
23c40 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a  lob|MEM_Str) );.
23c50 20 20 7d 0a 20 20 73 65 65 6b 52 65 73 75 6c 74    }.  seekResult
23c60 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f   = ((pOp->p5 & O
23c70 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
23c80 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52  ULT) ? pC->seekR
23c90 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20 69 66  esult : 0);.  if
23ca0 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26  ( pData->flags &
23cb0 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
23cc0 20 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d 3e   nZero = pData->
23cd0 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73 65  u.nZero;.  }else
23ce0 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30 3b  {.    nZero = 0;
23cf0 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
23d00 74 65 33 42 74 72 65 65 49 6e 73 65 72 74 28 70  te3BtreeInsert(p
23d10 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30  C->uc.pCursor, 0
23d20 2c 20 69 4b 65 79 2c 0a 20 20 20 20 20 20 20 20  , iKey,.        
23d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d40 20 20 70 44 61 74 61 2d 3e 7a 2c 20 70 44 61 74    pData->z, pDat
23d50 61 2d 3e 6e 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20  a->n, nZero,.   
23d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d70 20 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20         (pOp->p5 
23d80 26 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 29  & OPFLAG_APPEND)
23d90 21 3d 30 2c 20 73 65 65 6b 52 65 73 75 6c 74 0a  !=0, seekResult.
23da0 20 20 29 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72    );.  pC->defer
23db0 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
23dc0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
23dd0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
23de0 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
23df0 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20   update-hook if 
23e00 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69  required. */.  i
23e10 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
23e20 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
23e30 0a 20 20 69 66 28 20 64 62 2d 3e 78 55 70 64 61  .  if( db->xUpda
23e40 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f  teCallback && pO
23e50 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 7a  p->p4.z ){.    z
23e60 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d  Db = db->aDb[pC-
23e70 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20  >iDb].zName;.   
23e80 20 7a 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e   zTbl = pOp->p4.
23e90 7a 3b 0a 20 20 20 20 6f 70 20 3d 20 28 28 70 4f  z;.    op = ((pO
23ea0 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49  p->p5 & OPFLAG_I
23eb0 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54  SUPDATE) ? SQLIT
23ec0 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54  E_UPDATE : SQLIT
23ed0 45 5f 49 4e 53 45 52 54 29 3b 0a 20 20 20 20 61  E_INSERT);.    a
23ee0 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
23ef0 6c 65 20 29 3b 0a 20 20 20 20 64 62 2d 3e 78 55  le );.    db->xU
23f00 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62  pdateCallback(db
23f10 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20 6f 70  ->pUpdateArg, op
23f20 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65  , zDb, zTbl, iKe
23f30 79 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  y);.    assert( 
23f40 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20  pC->iDb>=0 );.  
23f50 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
23f60 20 4f 70 63 6f 64 65 3a 20 44 65 6c 65 74 65 20   Opcode: Delete 
23f70 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a  P1 P2 * P4 P5.**
23f80 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68 65 20 72  .** Delete the r
23f90 65 63 6f 72 64 20 61 74 20 77 68 69 63 68 20 74  ecord at which t
23fa0 68 65 20 50 31 20 63 75 72 73 6f 72 20 69 73 20  he P1 cursor is 
23fb0 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
23fc0 6e 67 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ng..**.** If the
23fd0 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49   OPFLAG_SAVEPOSI
23fe0 54 49 4f 4e 20 62 69 74 20 6f 66 20 74 68 65 20  TION bit of the 
23ff0 50 35 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  P5 parameter is 
24000 73 65 74 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65  set, then.** the
24010 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 20   cursor will be 
24020 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
24030 20 20 65 69 74 68 65 72 20 74 68 65 20 6e 65 78    either the nex
24040 74 20 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75  t or the previou
24050 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20 74  s.** record in t
24060 68 65 20 74 61 62 6c 65 2e 20 49 66 20 69 74 20  he table. If it 
24070 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67  is left pointing
24080 20 61 74 20 74 68 65 20 6e 65 78 74 20 72 65 63   at the next rec
24090 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65  ord, then.** the
240a0 20 6e 65 78 74 20 4e 65 78 74 20 69 6e 73 74 72   next Next instr
240b0 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61  uction will be a
240c0 20 6e 6f 2d 6f 70 2e 20 41 73 20 61 20 72 65 73   no-op. As a res
240d0 75 6c 74 2c 20 69 6e 20 74 68 69 73 20 63 61 73  ult, in this cas
240e0 65 0a 2a 2a 20 69 74 20 69 73 20 6f 6b 20 74 6f  e.** it is ok to
240f0 20 64 65 6c 65 74 65 20 61 20 72 65 63 6f 72 64   delete a record
24100 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 4e   from within a N
24110 65 78 74 20 6c 6f 6f 70 2e 20 49 66 20 0a 2a 2a  ext loop. If .**
24120 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49   OPFLAG_SAVEPOSI
24130 54 49 4f 4e 20 62 69 74 20 6f 66 20 50 35 20 69  TION bit of P5 i
24140 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 74 68  s clear, then th
24150 65 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65  e cursor will be
24160 0a 2a 2a 20 6c 65 66 74 20 69 6e 20 61 6e 20 75  .** left in an u
24170 6e 64 65 66 69 6e 65 64 20 73 74 61 74 65 2e 0a  ndefined state..
24180 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
24190 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20 62 69  LAG_AUXDELETE bi
241a0 74 20 69 73 20 73 65 74 20 6f 6e 20 50 35 2c 20  t is set on P5, 
241b0 74 68 61 74 20 69 6e 64 69 63 61 74 65 73 20 74  that indicates t
241c0 68 61 74 20 74 68 69 73 0a 2a 2a 20 64 65 6c 65  hat this.** dele
241d0 74 65 20 6f 6e 65 20 6f 66 20 73 65 76 65 72 61  te one of severa
241e0 6c 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  l associated wit
241f0 68 20 64 65 6c 65 74 69 6e 67 20 61 20 74 61 62  h deleting a tab
24200 6c 65 20 72 6f 77 20 61 6e 64 20 61 6c 6c 20 69  le row and all i
24210 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64  ts.** associated
24220 20 69 6e 64 65 78 20 65 6e 74 72 69 65 73 2e 20   index entries. 
24230 20 45 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66 20   Exactly one of 
24240 74 68 6f 73 65 20 64 65 6c 65 74 65 73 20 69 73  those deletes is
24250 20 74 68 65 20 22 70 72 69 6d 61 72 79 22 0a 2a   the "primary".*
24260 2a 20 64 65 6c 65 74 65 2e 20 20 54 68 65 20 6f  * delete.  The o
24270 74 68 65 72 73 20 61 72 65 20 61 6c 6c 20 6f 6e  thers are all on
24280 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54   OPFLAG_FORDELET
24290 45 20 63 75 72 73 6f 72 73 20 6f 72 20 65 6c 73  E cursors or els
242a0 65 20 61 72 65 0a 2a 2a 20 6d 61 72 6b 65 64 20  e are.** marked 
242b0 77 69 74 68 20 74 68 65 20 41 55 58 44 45 4c 45  with the AUXDELE
242c0 54 45 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 49  TE flag..**.** I
242d0 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48  f the OPFLAG_NCH
242e0 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 32 20  ANGE flag of P2 
242f0 28 4e 42 3a 20 50 32 20 6e 6f 74 20 50 35 29 20  (NB: P2 not P5) 
24300 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65  is set, then the
24310 20 72 6f 77 0a 2a 2a 20 63 68 61 6e 67 65 20 63   row.** change c
24320 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e  ount is incremen
24330 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e  ted (otherwise n
24340 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75  ot)..**.** P1 mu
24350 73 74 20 6e 6f 74 20 62 65 20 70 73 65 75 64 6f  st not be pseudo
24360 2d 74 61 62 6c 65 2e 20 20 49 74 20 68 61 73 20  -table.  It has 
24370 74 6f 20 62 65 20 61 20 72 65 61 6c 20 74 61 62  to be a real tab
24380 6c 65 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69  le with.** multi
24390 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20  ple rows..**.** 
243a0 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c  If P4 is not NUL
243b0 4c 2c 20 74 68 65 6e 20 69 74 20 69 73 20 74 68  L, then it is th
243c0 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
243d0 62 6c 65 20 74 68 61 74 20 50 31 20 69 73 0a 2a  ble that P1 is.*
243e0 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20  * pointing to.  
243f0 54 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20  The update hook 
24400 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c  will be invoked,
24410 20 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a 2a   if it exists..*
24420 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e  * If P4 is not N
24430 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 50 31 20  ULL then the P1 
24440 63 75 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65  cursor must have
24450 20 62 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64   been positioned
24460 0a 2a 2a 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74  .** using OP_Not
24470 46 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f 20 69  Found prior to i
24480 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70 63  nvoking this opc
24490 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ode..*/.case OP_
244a0 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62 65  Delete: {.  Vdbe
244b0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 75 38  Cursor *pC;.  u8
244c0 20 68 61 73 55 70 64 61 74 65 43 61 6c 6c 62 61   hasUpdateCallba
244d0 63 6b 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  ck;..  assert( p
244e0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
244f0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
24500 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
24510 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
24520 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
24530 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
24540 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
24550 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72  BTREE );.  asser
24560 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
24570 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
24580 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
24590 76 65 74 6f 3d 3d 30 20 29 3b 0a 0a 20 20 68 61  veto==0 );..  ha
245a0 73 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  sUpdateCallback 
245b0 3d 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c  = db->xUpdateCal
245c0 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34  lback && pOp->p4
245d0 2e 7a 20 26 26 20 70 43 2d 3e 69 73 54 61 62 6c  .z && pC->isTabl
245e0 65 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  e;.  if( pOp->p5
245f0 20 26 26 20 68 61 73 55 70 64 61 74 65 43 61 6c   && hasUpdateCal
24600 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20 73 71 6c  lback ){.    sql
24610 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65  ite3BtreeKeySize
24620 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
24630 20 26 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67   &pC->movetoTarg
24640 65 74 29 3b 0a 20 20 7d 0a 0a 23 69 66 64 65 66  et);.  }..#ifdef
24650 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
24660 2f 2a 20 54 68 65 20 73 65 65 6b 20 6f 70 65 72  /* The seek oper
24670 61 74 69 6f 6e 20 74 68 61 74 20 70 6f 73 69 74  ation that posit
24680 69 6f 6e 65 64 20 74 68 65 20 63 75 72 73 6f 72  ioned the cursor
24690 20 70 72 69 6f 72 20 74 6f 20 4f 50 5f 44 65 6c   prior to OP_Del
246a0 65 74 65 20 77 69 6c 6c 0a 20 20 2a 2a 20 68 61  ete will.  ** ha
246b0 76 65 20 61 6c 73 6f 20 73 65 74 20 74 68 65 20  ve also set the 
246c0 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
246d0 20 66 69 65 6c 64 20 74 6f 20 74 68 65 20 72 6f   field to the ro
246e0 77 69 64 20 6f 66 20 74 68 65 20 72 6f 77 20 74  wid of the row t
246f0 68 61 74 0a 20 20 2a 2a 20 69 73 20 62 65 69 6e  hat.  ** is bein
24700 67 20 64 65 6c 65 74 65 64 20 2a 2f 0a 20 20 69  g deleted */.  i
24710 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20 26 26 20  f( pOp->p4.z && 
24720 70 43 2d 3e 69 73 54 61 62 6c 65 20 26 26 20 70  pC->isTable && p
24730 4f 70 2d 3e 70 35 3d 3d 30 20 29 7b 0a 20 20 20  Op->p5==0 ){.   
24740 20 69 36 34 20 69 4b 65 79 20 3d 20 30 3b 0a 20   i64 iKey = 0;. 
24750 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b     sqlite3BtreeK
24760 65 79 53 69 7a 65 28 70 43 2d 3e 75 63 2e 70 43  eySize(pC->uc.pC
24770 75 72 73 6f 72 2c 20 26 69 4b 65 79 29 3b 0a 20  ursor, &iKey);. 
24780 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6d     assert( pC->m
24790 6f 76 65 74 6f 54 61 72 67 65 74 3d 3d 69 4b 65  ovetoTarget==iKe
247a0 79 20 29 3b 20 0a 20 20 7d 0a 23 65 6e 64 69 66  y ); .  }.#endif
247b0 0a 0a 20 20 2f 2a 20 4f 6e 6c 79 20 66 6c 61 67  ..  /* Only flag
247c0 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 73 65  s that can be se
247d0 74 20 61 72 65 20 53 41 56 45 50 4f 49 53 54 49  t are SAVEPOISTI
247e0 4f 4e 20 61 6e 64 20 41 55 58 44 45 4c 45 54 45  ON and AUXDELETE
247f0 20 2a 2f 20 0a 20 20 61 73 73 65 72 74 28 20 28   */ .  assert( (
24800 70 4f 70 2d 3e 70 35 20 26 20 7e 28 4f 50 46 4c  pOp->p5 & ~(OPFL
24810 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 7c  AG_SAVEPOSITION|
24820 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45  OPFLAG_AUXDELETE
24830 29 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ))==0 );.  asser
24840 74 28 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f  t( OPFLAG_SAVEPO
24850 53 49 54 49 4f 4e 3d 3d 42 54 52 45 45 5f 53 41  SITION==BTREE_SA
24860 56 45 50 4f 53 49 54 49 4f 4e 20 29 3b 0a 20 20  VEPOSITION );.  
24870 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 41  assert( OPFLAG_A
24880 55 58 44 45 4c 45 54 45 3d 3d 42 54 52 45 45 5f  UXDELETE==BTREE_
24890 41 55 58 44 45 4c 45 54 45 20 29 3b 0a 0a 23 69  AUXDELETE );..#i
248a0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
248b0 47 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d  G.  if( p->pFram
248c0 65 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  e==0 ){.    if( 
248d0 70 43 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 3d  pC->isEphemeral=
248e0 3d 30 0a 20 20 20 20 20 20 20 20 26 26 20 28 70  =0.        && (p
248f0 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
24900 41 55 58 44 45 4c 45 54 45 29 3d 3d 30 0a 20 20  AUXDELETE)==0.  
24910 20 20 20 20 20 20 26 26 20 28 70 43 2d 3e 77 72        && (pC->wr
24920 46 6c 61 67 20 26 20 4f 50 46 4c 41 47 5f 46 4f  Flag & OPFLAG_FO
24930 52 44 45 4c 45 54 45 29 3d 3d 30 0a 20 20 20 20  RDELETE)==0.    
24940 20 20 29 7b 0a 20 20 20 20 20 20 6e 45 78 74 72    ){.      nExtr
24950 61 44 65 6c 65 74 65 2b 2b 3b 0a 20 20 20 20 7d  aDelete++;.    }
24960 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  .    if( pOp->p2
24970 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47   & OPFLAG_NCHANG
24980 45 20 29 7b 0a 20 20 20 20 20 20 6e 45 78 74 72  E ){.      nExtr
24990 61 44 65 6c 65 74 65 2d 2d 3b 0a 20 20 20 20 7d  aDelete--;.    }
249a0 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 72  .  }.#endif..  r
249b0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
249c0 44 65 6c 65 74 65 28 70 43 2d 3e 75 63 2e 70 43  Delete(pC->uc.pC
249d0 75 72 73 6f 72 2c 20 70 4f 70 2d 3e 70 35 29 3b  ursor, pOp->p5);
249e0 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
249f0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
24a00 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  ;..  /* Invoke t
24a10 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69  he update-hook i
24a20 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20  f required. */. 
24a30 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
24a40 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
24a50 72 3b 0a 20 20 69 66 28 20 68 61 73 55 70 64 61  r;.  if( hasUpda
24a60 74 65 43 61 6c 6c 62 61 63 6b 20 29 7b 0a 20 20  teCallback ){.  
24a70 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c    db->xUpdateCal
24a80 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74  lback(db->pUpdat
24a90 65 41 72 67 2c 20 53 51 4c 49 54 45 5f 44 45 4c  eArg, SQLITE_DEL
24aa0 45 54 45 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ETE,.           
24ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 62 2d               db-
24ac0 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e  >aDb[pC->iDb].zN
24ad0 61 6d 65 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20  ame, pOp->p4.z, 
24ae0 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
24af0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
24b00 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d  C->iDb>=0 );.  }
24b10 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26  .  if( pOp->p2 &
24b20 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
24b30 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a  ) p->nChange++;.
24b40 20 20 62 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70    break;.}./* Op
24b50 63 6f 64 65 3a 20 52 65 73 65 74 43 6f 75 6e 74  code: ResetCount
24b60 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a   * * * * *.**.**
24b70 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   The value of th
24b80 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  e change counter
24b90 20 69 73 20 63 6f 70 69 65 64 20 74 6f 20 74 68   is copied to th
24ba0 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
24bb0 65 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e  e.** change coun
24bc0 74 65 72 20 28 72 65 74 75 72 6e 65 64 20 62 79  ter (returned by
24bd0 20 73 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c   subsequent call
24be0 73 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 68 61  s to sqlite3_cha
24bf0 6e 67 65 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e  nges())..** Then
24c00 20 74 68 65 20 56 4d 73 20 69 6e 74 65 72 6e 61   the VMs interna
24c10 6c 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  l change counter
24c20 20 72 65 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a   resets to 0..**
24c30 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79   This is used by
24c40 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
24c50 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  s..*/.case OP_Re
24c60 73 65 74 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71  setCount: {.  sq
24c70 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e  lite3VdbeSetChan
24c80 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e  ges(db, p->nChan
24c90 67 65 29 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67  ge);.  p->nChang
24ca0 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  e = 0;.  break;.
24cb0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  }../* Opcode: So
24cc0 72 74 65 72 43 6f 6d 70 61 72 65 20 50 31 20 50  rterCompare P1 P
24cd0 32 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70  2 P3 P4.** Synop
24ce0 73 69 73 3a 20 20 69 66 20 6b 65 79 28 50 31 29  sis:  if key(P1)
24cf0 21 3d 74 72 69 6d 28 72 5b 50 33 5d 2c 50 34 29  !=trim(r[P3],P4)
24d00 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 50   goto P2.**.** P
24d10 31 20 69 73 20 61 20 73 6f 72 74 65 72 20 63 75  1 is a sorter cu
24d20 72 73 6f 72 2e 20 54 68 69 73 20 69 6e 73 74 72  rsor. This instr
24d30 75 63 74 69 6f 6e 20 63 6f 6d 70 61 72 65 73 20  uction compares 
24d40 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 0a  a prefix of the.
24d50 2a 2a 20 72 65 63 6f 72 64 20 62 6c 6f 62 20 69  ** record blob i
24d60 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 67  n register P3 ag
24d70 61 69 6e 73 74 20 61 20 70 72 65 66 69 78 20 6f  ainst a prefix o
24d80 66 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74  f the entry that
24d90 20 0a 2a 2a 20 74 68 65 20 73 6f 72 74 65 72 20   .** the sorter 
24da0 63 75 72 73 6f 72 20 63 75 72 72 65 6e 74 6c 79  cursor currently
24db0 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 4f 6e 6c   points to.  Onl
24dc0 79 20 74 68 65 20 66 69 72 73 74 20 50 34 20 66  y the first P4 f
24dd0 69 65 6c 64 73 0a 2a 2a 20 6f 66 20 72 5b 50 33  ields.** of r[P3
24de0 5d 20 61 6e 64 20 74 68 65 20 73 6f 72 74 65 72  ] and the sorter
24df0 20 72 65 63 6f 72 64 20 61 72 65 20 63 6f 6d 70   record are comp
24e00 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65  ared..**.** If e
24e10 69 74 68 65 72 20 50 33 20 6f 72 20 74 68 65 20  ither P3 or the 
24e20 73 6f 72 74 65 72 20 63 6f 6e 74 61 69 6e 73 20  sorter contains 
24e30 61 20 4e 55 4c 4c 20 69 6e 20 6f 6e 65 20 6f 66  a NULL in one of
24e40 20 74 68 65 69 72 20 73 69 67 6e 69 66 69 63 61   their significa
24e50 6e 74 0a 2a 2a 20 66 69 65 6c 64 73 20 28 6e 6f  nt.** fields (no
24e60 74 20 63 6f 75 6e 74 69 6e 67 20 74 68 65 20 50  t counting the P
24e70 34 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20  4 fields at the 
24e80 65 6e 64 20 77 68 69 63 68 20 61 72 65 20 69 67  end which are ig
24e90 6e 6f 72 65 64 29 20 74 68 65 6e 0a 2a 2a 20 74  nored) then.** t
24ea0 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  he comparison is
24eb0 20 61 73 73 75 6d 65 64 20 74 6f 20 62 65 20 65   assumed to be e
24ec0 71 75 61 6c 2e 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c  qual..**.** Fall
24ed0 20 74 68 72 6f 75 67 68 20 74 6f 20 6e 65 78 74   through to next
24ee0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 66 20   instruction if 
24ef0 74 68 65 20 74 77 6f 20 72 65 63 6f 72 64 73 20  the two records 
24f00 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 74 6f  compare equal to
24f10 0a 2a 2a 20 65 61 63 68 20 6f 74 68 65 72 2e 20  .** each other. 
24f20 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
24f30 68 65 79 20 61 72 65 20 64 69 66 66 65 72 65 6e  hey are differen
24f40 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  t..*/.case OP_So
24f50 72 74 65 72 43 6f 6d 70 61 72 65 3a 20 7b 0a 20  rterCompare: {. 
24f60 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
24f70 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e  .  int res;.  in
24f80 74 20 6e 4b 65 79 43 6f 6c 3b 0a 0a 20 20 70 43  t nKeyCol;..  pC
24f90 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
24fa0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
24fb0 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a  isSorter(pC) );.
24fc0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
24fd0 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
24fe0 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  );.  pIn3 = &aMe
24ff0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6e 4b  m[pOp->p3];.  nK
25000 65 79 43 6f 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e  eyCol = pOp->p4.
25010 69 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  i;.  res = 0;.  
25020 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
25030 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 28 70 43  SorterCompare(pC
25040 2c 20 70 49 6e 33 2c 20 6e 4b 65 79 43 6f 6c 2c  , pIn3, nKeyCol,
25050 20 26 72 65 73 29 3b 0a 20 20 56 64 62 65 42 72   &res);.  VdbeBr
25060 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
25070 2c 32 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  ,2);.  if( rc ) 
25080 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
25090 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 72  o_error;.  if( r
250a0 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  es ) goto jump_t
250b0 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  o_p2;.  break;.}
250c0 3b 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  ;../* Opcode: So
250d0 72 74 65 72 44 61 74 61 20 50 31 20 50 32 20 50  rterData P1 P2 P
250e0 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
250f0 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a  s: r[P2]=data.**
25100 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72  .** Write into r
25110 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63  egister P2 the c
25120 75 72 72 65 6e 74 20 73 6f 72 74 65 72 20 64 61  urrent sorter da
25130 74 61 20 66 6f 72 20 73 6f 72 74 65 72 20 63 75  ta for sorter cu
25140 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 6e  rsor P1..** Then
25150 20 63 6c 65 61 72 20 74 68 65 20 63 6f 6c 75 6d   clear the colum
25160 6e 20 68 65 61 64 65 72 20 63 61 63 68 65 20 6f  n header cache o
25170 6e 20 63 75 72 73 6f 72 20 50 33 2e 0a 2a 2a 0a  n cursor P3..**.
25180 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
25190 73 20 6e 6f 72 6d 61 6c 6c 79 20 75 73 65 20 74  s normally use t
251a0 6f 20 6d 6f 76 65 20 61 20 72 65 63 6f 72 64 20  o move a record 
251b0 6f 75 74 20 6f 66 20 74 68 65 20 73 6f 72 74 65  out of the sorte
251c0 72 20 61 6e 64 20 69 6e 74 6f 0a 2a 2a 20 61 20  r and into.** a 
251d0 72 65 67 69 73 74 65 72 20 74 68 61 74 20 69 73  register that is
251e0 20 74 68 65 20 73 6f 75 72 63 65 20 66 6f 72 20   the source for 
251f0 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63  a pseudo-table c
25200 75 72 73 6f 72 20 63 72 65 61 74 65 64 20 75 73  ursor created us
25210 69 6e 67 0a 2a 2a 20 4f 70 65 6e 50 73 65 75 64  ing.** OpenPseud
25220 6f 2e 20 20 54 68 61 74 20 70 73 65 75 64 6f 2d  o.  That pseudo-
25230 74 61 62 6c 65 20 63 75 72 73 6f 72 20 69 73 20  table cursor is 
25240 74 68 65 20 6f 6e 65 20 74 68 61 74 20 69 73 20  the one that is 
25250 69 64 65 6e 74 69 66 69 65 64 20 62 79 0a 2a 2a  identified by.**
25260 20 70 61 72 61 6d 65 74 65 72 20 50 33 2e 20 20   parameter P3.  
25270 43 6c 65 61 72 69 6e 67 20 74 68 65 20 50 33 20  Clearing the P3 
25280 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 61 73 20  column cache as 
25290 70 61 72 74 20 6f 66 20 74 68 69 73 20 6f 70 63  part of this opc
252a0 6f 64 65 20 73 61 76 65 73 0a 2a 2a 20 75 73 20  ode saves.** us 
252b0 66 72 6f 6d 20 68 61 76 69 6e 67 20 74 6f 20 69  from having to i
252c0 73 73 75 65 20 61 20 73 65 70 61 72 61 74 65 20  ssue a separate 
252d0 4e 75 6c 6c 52 6f 77 20 69 6e 73 74 72 75 63 74  NullRow instruct
252e0 69 6f 6e 20 74 6f 20 63 6c 65 61 72 20 74 68 61  ion to clear tha
252f0 74 20 63 61 63 68 65 2e 0a 2a 2f 0a 63 61 73 65  t cache..*/.case
25300 20 4f 50 5f 53 6f 72 74 65 72 44 61 74 61 3a 20   OP_SorterData: 
25310 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
25320 70 43 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61  pC;..  pOut = &a
25330 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
25340 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
25350 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
25360 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
25370 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
25380 56 64 62 65 53 6f 72 74 65 72 52 6f 77 6b 65 79  VdbeSorterRowkey
25390 28 70 43 2c 20 70 4f 75 74 29 3b 0a 20 20 61 73  (pC, pOut);.  as
253a0 73 65 72 74 28 20 72 63 21 3d 53 51 4c 49 54 45  sert( rc!=SQLITE
253b0 5f 4f 4b 20 7c 7c 20 28 70 4f 75 74 2d 3e 66 6c  _OK || (pOut->fl
253c0 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 20  ags & MEM_Blob) 
253d0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
253e0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
253f0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
25400 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
25410 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
25420 72 6f 72 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b  ror;.  p->apCsr[
25430 70 4f 70 2d 3e 70 33 5d 2d 3e 63 61 63 68 65 53  pOp->p3]->cacheS
25440 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
25450 41 4c 45 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ALE;.  break;.}.
25460 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44  ./* Opcode: RowD
25470 61 74 61 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ata P1 P2 * * *.
25480 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
25490 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72  2]=data.**.** Wr
254a0 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ite into registe
254b0 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74  r P2 the complet
254c0 65 20 72 6f 77 20 64 61 74 61 20 66 6f 72 20 63  e row data for c
254d0 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65  ursor P1..** The
254e0 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72  re is no interpr
254f0 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64  etation of the d
25500 61 74 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20  ata.  .** It is 
25510 6a 75 73 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f  just copied onto
25520 20 74 68 65 20 50 32 20 72 65 67 69 73 74 65 72   the P2 register
25530 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20   exactly as .** 
25540 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74  it is found in t
25550 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
25560 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
25570 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
25580 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76   pointing to a v
25590 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20  alid row (not a 
255a0 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20  NULL row).** of 
255b0 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
255c0 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
255d0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
255e0 52 6f 77 4b 65 79 20 50 31 20 50 32 20 2a 20 2a  RowKey P1 P2 * *
255f0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
25600 72 5b 50 32 5d 3d 6b 65 79 0a 2a 2a 0a 2a 2a 20  r[P2]=key.**.** 
25610 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73  Write into regis
25620 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c  ter P2 the compl
25630 65 74 65 20 72 6f 77 20 6b 65 79 20 66 6f 72 20  ete row key for 
25640 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68  cursor P1..** Th
25650 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70  ere is no interp
25660 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  retation of the 
25670 64 61 74 61 2e 20 20 0a 2a 2a 20 54 68 65 20 6b  data.  .** The k
25680 65 79 20 69 73 20 63 6f 70 69 65 64 20 6f 6e 74  ey is copied ont
25690 6f 20 74 68 65 20 50 32 20 72 65 67 69 73 74 65  o the P2 registe
256a0 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a  r exactly as .**
256b0 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20   it is found in 
256c0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
256d0 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
256e0 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
256f0 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20  e pointing to a 
25700 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61  valid row (not a
25710 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66   NULL row).** of
25720 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
25730 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
25740 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  e..*/.case OP_Ro
25750 77 4b 65 79 3a 0a 63 61 73 65 20 4f 50 5f 52 6f  wKey:.case OP_Ro
25760 77 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43  wData: {.  VdbeC
25770 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
25780 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
25790 75 33 32 20 6e 3b 0a 20 20 69 36 34 20 6e 36 34  u32 n;.  i64 n64
257a0 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ;..  pOut = &aMe
257b0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65  m[pOp->p2];.  me
257c0 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
257d0 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 4e  , pOut);..  /* N
257e0 6f 74 65 20 74 68 61 74 20 52 6f 77 4b 65 79 20  ote that RowKey 
257f0 61 6e 64 20 52 6f 77 44 61 74 61 20 61 72 65 20  and RowData are 
25800 72 65 61 6c 6c 79 20 65 78 61 63 74 6c 79 20 74  really exactly t
25810 68 65 20 73 61 6d 65 20 69 6e 73 74 72 75 63 74  he same instruct
25820 69 6f 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ion */.  assert(
25830 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
25840 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
25850 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
25860 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
25870 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
25880 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
25890 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
258a0 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
258b0 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
258c0 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )==0 );.  assert
258d0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 7c 7c  ( pC->isTable ||
258e0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
258f0 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61 73  _RowData );.  as
25900 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
25910 65 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  e==0 || pOp->opc
25920 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44 61 74 61 20  ode==OP_RowData 
25930 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
25940 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20  >nullRow==0 );. 
25950 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e   assert( pC->uc.
25960 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
25970 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70  pCrsr = pC->uc.p
25980 43 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a 20 54 68  Cursor;..  /* Th
25990 65 20 4f 50 5f 52 6f 77 4b 65 79 20 61 6e 64 20  e OP_RowKey and 
259a0 4f 50 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f 64  OP_RowData opcod
259b0 65 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77  es always follow
259c0 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72   OP_NotExists or
259d0 0a 20 20 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 2f  .  ** OP_Rewind/
259e0 4f 70 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f 20  Op_Next with no 
259f0 69 6e 74 65 72 76 65 6e 69 6e 67 20 69 6e 73 74  intervening inst
25a00 72 75 63 74 69 6f 6e 73 20 74 68 61 74 20 6d 69  ructions that mi
25a10 67 68 74 20 69 6e 76 61 6c 69 64 61 74 65 0a 20  ght invalidate. 
25a20 20 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 2e 20   ** the cursor. 
25a30 20 49 66 20 74 68 69 73 20 77 68 65 72 65 20 6e   If this where n
25a40 6f 74 20 74 68 65 20 63 61 73 65 2c 20 6f 6e 20  ot the case, on 
25a50 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
25a60 20 61 73 73 65 72 74 28 29 73 0a 20 20 2a 2a 20   assert()s.  ** 
25a70 77 6f 75 6c 64 20 66 61 69 6c 2e 20 20 53 68 6f  would fail.  Sho
25a80 75 6c 64 20 74 68 69 73 20 65 76 65 72 20 63 68  uld this ever ch
25a90 61 6e 67 65 20 28 62 65 63 61 75 73 65 20 6f 66  ange (because of
25aa0 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20   changes in the 
25ab0 63 6f 64 65 0a 20 20 2a 2a 20 67 65 6e 65 72 61  code.  ** genera
25ac0 74 6f 72 29 20 74 68 65 6e 20 74 68 65 20 66 69  tor) then the fi
25ad0 78 20 77 6f 75 6c 64 20 62 65 20 74 6f 20 69 6e  x would be to in
25ae0 73 65 72 74 20 61 20 63 61 6c 6c 20 74 6f 0a 20  sert a call to. 
25af0 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 43   ** sqlite3VdbeC
25b00 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 2e 0a 20  ursorMoveto().. 
25b10 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43   */.  assert( pC
25b20 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
25b30 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
25b40 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
25b50 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72  sorIsValid(pCrsr
25b60 29 20 29 3b 0a 23 69 66 20 30 20 20 2f 2a 20 4e  ) );.#if 0  /* N
25b70 6f 74 20 72 65 71 75 69 72 65 64 20 64 75 65 20  ot required due 
25b80 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  to the previous 
25b90 74 6f 20 61 73 73 65 72 74 28 29 20 73 74 61 74  to assert() stat
25ba0 65 6d 65 6e 74 73 20 2a 2f 0a 20 20 72 63 20 3d  ements */.  rc =
25bb0 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
25bc0 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20  orMoveto(pC);.  
25bd0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
25be0 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
25bf0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e  ue_to_error;.#en
25c00 64 69 66 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69  dif..  if( pC->i
25c10 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20  sTable==0 ){.   
25c20 20 61 73 73 65 72 74 28 20 21 70 43 2d 3e 69 73   assert( !pC->is
25c30 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 56 56 41  Table );.    VVA
25c40 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69  _ONLY(rc =) sqli
25c50 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28  te3BtreeKeySize(
25c60 70 43 72 73 72 2c 20 26 6e 36 34 29 3b 0a 20 20  pCrsr, &n64);.  
25c70 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
25c80 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a  LITE_OK );    /*
25c90 20 54 72 75 65 20 62 65 63 61 75 73 65 20 6f 66   True because of
25ca0 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20   CursorMoveto() 
25cb0 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20  call above */.  
25cc0 20 20 69 66 28 20 6e 36 34 3e 64 62 2d 3e 61 4c    if( n64>db->aL
25cd0 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
25ce0 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
25cf0 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
25d00 0a 20 20 20 20 7d 0a 20 20 20 20 6e 20 3d 20 28  .    }.    n = (
25d10 75 33 32 29 6e 36 34 3b 0a 20 20 7d 65 6c 73 65  u32)n64;.  }else
25d20 7b 0a 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72  {.    VVA_ONLY(r
25d30 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65  c =) sqlite3Btre
25d40 65 44 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c  eDataSize(pCrsr,
25d50 20 26 6e 29 3b 0a 20 20 20 20 61 73 73 65 72 74   &n);.    assert
25d60 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
25d70 29 3b 20 20 20 20 2f 2a 20 44 61 74 61 53 69 7a  );    /* DataSiz
25d80 65 28 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20  e() cannot fail 
25d90 2a 2f 0a 20 20 20 20 69 66 28 20 6e 3e 28 75 33  */.    if( n>(u3
25da0 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  2)db->aLimit[SQL
25db0 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
25dc0 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  ] ){.      goto 
25dd0 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20  too_big;.    }. 
25de0 20 7d 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e   }.  testcase( n
25df0 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 73 71 6c  ==0 );.  if( sql
25e00 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72  ite3VdbeMemClear
25e10 41 6e 64 52 65 73 69 7a 65 28 70 4f 75 74 2c 20  AndResize(pOut, 
25e20 4d 41 58 28 6e 2c 33 32 29 29 20 29 7b 0a 20 20  MAX(n,32)) ){.  
25e30 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
25e40 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e   }.  pOut->n = n
25e50 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
25e60 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f  ag(pOut, MEM_Blo
25e70 62 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69 73  b);.  if( pC->is
25e80 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20  Table==0 ){.    
25e90 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
25ea0 65 4b 65 79 28 70 43 72 73 72 2c 20 30 2c 20 6e  eKey(pCrsr, 0, n
25eb0 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65  , pOut->z);.  }e
25ec0 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  lse{.    rc = sq
25ed0 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 28 70  lite3BtreeData(p
25ee0 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74  Crsr, 0, n, pOut
25ef0 2d 3e 7a 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  ->z);.  }.  if( 
25f00 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
25f10 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
25f20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49  pOut->enc = SQLI
25f30 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20  TE_UTF8;  /* In 
25f40 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73  case the blob is
25f50 20 65 76 65 72 20 63 61 73 74 20 74 6f 20 74 65   ever cast to te
25f60 78 74 20 2a 2f 0a 20 20 55 50 44 41 54 45 5f 4d  xt */.  UPDATE_M
25f70 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
25f80 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
25f90 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75  ACE(pOp->p2, pOu
25fa0 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
25fb0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64  /* Opcode: Rowid
25fc0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
25fd0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
25fe0 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72  rowid.**.** Stor
25ff0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
26000 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63   an integer whic
26010 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20  h is the key of 
26020 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20  the table entry 
26030 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75  that.** P1 is cu
26040 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f  rrently point to
26050 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62  ..**.** P1 can b
26060 65 20 65 69 74 68 65 72 20 61 6e 20 6f 72 64 69  e either an ordi
26070 6e 61 72 79 20 74 61 62 6c 65 20 6f 72 20 61 20  nary table or a 
26080 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20  virtual table.  
26090 54 68 65 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a  There used to.**
260a0 20 62 65 20 61 20 73 65 70 61 72 61 74 65 20 4f   be a separate O
260b0 50 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64 65 20  P_VRowid opcode 
260c0 66 6f 72 20 75 73 65 20 77 69 74 68 20 76 69 72  for use with vir
260d0 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 62 75 74  tual tables, but
260e0 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63   this.** one opc
260f0 6f 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f  ode now works fo
26100 72 20 62 6f 74 68 20 74 61 62 6c 65 20 74 79 70  r both table typ
26110 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  es..*/.case OP_R
26120 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20  owid: {         
26130 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
26140 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
26150 2a 70 43 3b 0a 20 20 69 36 34 20 76 3b 0a 20 20  *pC;.  i64 v;.  
26160 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
26170 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  tab;.  const sql
26180 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
26190 64 75 6c 65 3b 0a 0a 20 20 70 4f 75 74 20 3d 20  dule;..  pOut = 
261a0 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
261b0 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74  , pOp);.  assert
261c0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
261d0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
261e0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
261f0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
26200 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
26210 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
26220 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59  >eCurType!=CURTY
26230 50 45 5f 50 53 45 55 44 4f 20 7c 7c 20 70 43 2d  PE_PSEUDO || pC-
26240 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 69 66  >nullRow );.  if
26250 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  ( pC->nullRow ){
26260 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
26270 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20   = MEM_Null;.   
26280 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20   break;.  }else 
26290 69 66 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  if( pC->deferred
262a0 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20 76 20  Moveto ){.    v 
262b0 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67  = pC->movetoTarg
262c0 65 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  et;.#ifndef SQLI
262d0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
262e0 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66 28  ABLE.  }else if(
262f0 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
26300 55 52 54 59 50 45 5f 56 54 41 42 20 29 7b 0a 20  URTYPE_VTAB ){. 
26310 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75     assert( pC->u
26320 63 2e 70 56 43 75 72 21 3d 30 20 29 3b 0a 20 20  c.pVCur!=0 );.  
26330 20 20 70 56 74 61 62 20 3d 20 70 43 2d 3e 75 63    pVtab = pC->uc
26340 2e 70 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20  .pVCur->pVtab;. 
26350 20 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74     pModule = pVt
26360 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20  ab->pModule;.   
26370 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65   assert( pModule
26380 2d 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20 20 20  ->xRowid );.    
26390 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52  rc = pModule->xR
263a0 6f 77 69 64 28 70 43 2d 3e 75 63 2e 70 56 43 75  owid(pC->uc.pVCu
263b0 72 2c 20 26 76 29 3b 0a 20 20 20 20 73 71 6c 69  r, &v);.    sqli
263c0 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
263d0 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  msg(p, pVtab);. 
263e0 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
263f0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
26400 72 6f 72 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  ror;.#endif /* S
26410 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
26420 41 4c 54 41 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c  ALTABLE */.  }el
26430 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
26440 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
26450 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
26460 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75     assert( pC->u
26470 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  c.pCursor!=0 );.
26480 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
26490 56 64 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72  VdbeCursorRestor
264a0 65 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20 72  e(pC);.    if( r
264b0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
264c0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
264d0 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77   if( pC->nullRow
264e0 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e   ){.      pOut->
264f0 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
26500 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
26510 20 20 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71     }.    rc = sq
26520 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a  lite3BtreeKeySiz
26530 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  e(pC->uc.pCursor
26540 2c 20 26 76 29 3b 0a 20 20 20 20 61 73 73 65 72  , &v);.    asser
26550 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
26560 20 29 3b 20 20 2f 2a 20 41 6c 77 61 79 73 20 73   );  /* Always s
26570 6f 20 62 65 63 61 75 73 65 20 6f 66 20 43 75 72  o because of Cur
26580 73 6f 72 52 65 73 74 6f 72 65 28 29 20 61 62 6f  sorRestore() abo
26590 76 65 20 2a 2f 0a 20 20 7d 0a 20 20 70 4f 75 74  ve */.  }.  pOut
265a0 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65  ->u.i = v;.  bre
265b0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
265c0 3a 20 4e 75 6c 6c 52 6f 77 20 50 31 20 2a 20 2a  : NullRow P1 * *
265d0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20   * *.**.** Move 
265e0 74 68 65 20 63 75 72 73 6f 72 20 50 31 20 74 6f  the cursor P1 to
265f0 20 61 20 6e 75 6c 6c 20 72 6f 77 2e 20 20 41 6e   a null row.  An
26600 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72  y OP_Column oper
26610 61 74 69 6f 6e 73 0a 2a 2a 20 74 68 61 74 20 6f  ations.** that o
26620 63 63 75 72 20 77 68 69 6c 65 20 74 68 65 20 63  ccur while the c
26630 75 72 73 6f 72 20 69 73 20 6f 6e 20 74 68 65 20  ursor is on the 
26640 6e 75 6c 6c 20 72 6f 77 20 77 69 6c 6c 20 61 6c  null row will al
26650 77 61 79 73 0a 2a 2a 20 77 72 69 74 65 20 61 20  ways.** write a 
26660 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
26670 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56 64  _NullRow: {.  Vd
26680 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20  beCursor *pC;.. 
26690 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
266a0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
266b0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
266c0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
266d0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
266e0 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d 3e   pC!=0 );.  pC->
266f0 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70  nullRow = 1;.  p
26700 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
26710 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
26720 69 66 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  if( pC->eCurType
26730 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
26740 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
26750 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30  C->uc.pCursor!=0
26760 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 42   );.    sqlite3B
26770 74 72 65 65 43 6c 65 61 72 43 75 72 73 6f 72 28  treeClearCursor(
26780 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  pC->uc.pCursor);
26790 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
267a0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 61 73 74  ./* Opcode: Last
267b0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
267c0 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65  .** The next use
267d0 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72   of the Rowid or
267e0 20 43 6f 6c 75 6d 6e 20 6f 72 20 50 72 65 76 20   Column or Prev 
267f0 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20  instruction for 
26800 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65  P1 .** will refe
26810 72 20 74 6f 20 74 68 65 20 6c 61 73 74 20 65 6e  r to the last en
26820 74 72 79 20 69 6e 20 74 68 65 20 64 61 74 61 62  try in the datab
26830 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  ase table or ind
26840 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61  ex..** If the ta
26850 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
26860 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20  empty and P2>0, 
26870 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69  then jump immedi
26880 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20  ately to P2..** 
26890 49 66 20 50 32 20 69 73 20 30 20 6f 72 20 69 66  If P2 is 0 or if
268a0 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
268b0 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  dex is not empty
268c0 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a  , fall through.*
268d0 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * to the followi
268e0 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ng instruction..
268f0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
26900 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  e leaves the cur
26910 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74  sor configured t
26920 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72 73  o move in revers
26930 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d  e order,.** from
26940 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64 20   the end toward 
26950 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20  the beginning.  
26960 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
26970 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a  the cursor is.**
26980 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75   configured to u
26990 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78  se Prev, not Nex
269a0 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 61  t..*/.case OP_La
269b0 73 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  st: {        /* 
269c0 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75  jump */.  VdbeCu
269d0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
269e0 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
269f0 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72  nt res;..  asser
26a00 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
26a10 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
26a20 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
26a30 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
26a40 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
26a50 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
26a60 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
26a70 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70  YPE_BTREE );.  p
26a80 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43  Crsr = pC->uc.pC
26a90 75 72 73 6f 72 3b 0a 20 20 72 65 73 20 3d 20 30  ursor;.  res = 0
26aa0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73  ;.  assert( pCrs
26ab0 72 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73  r!=0 );.  rc = s
26ac0 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28  qlite3BtreeLast(
26ad0 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20  pCrsr, &res);.  
26ae0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75  pC->nullRow = (u
26af0 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e 64 65 66  8)res;.  pC->def
26b00 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
26b10 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
26b20 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
26b30 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75  ;.  pC->seekResu
26b40 6c 74 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 23 69  lt = pOp->p3;.#i
26b50 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
26b60 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d  G.  pC->seekOp =
26b70 20 4f 50 5f 4c 61 73 74 3b 0a 23 65 6e 64 69 66   OP_Last;.#endif
26b80 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
26b90 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
26ba0 72 6f 72 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  ror;.  if( pOp->
26bb0 70 32 3e 30 20 29 7b 0a 20 20 20 20 56 64 62 65  p2>0 ){.    Vdbe
26bc0 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21  BranchTaken(res!
26bd0 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 72  =0,2);.    if( r
26be0 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  es ) goto jump_t
26bf0 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  o_p2;.  }.  brea
26c00 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.}.../* Opcode
26c10 3a 20 53 6f 72 74 20 50 31 20 50 32 20 2a 20 2a  : Sort P1 P2 * *
26c20 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70   *.**.** This op
26c30 63 6f 64 65 20 64 6f 65 73 20 65 78 61 63 74 6c  code does exactl
26c40 79 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67  y the same thing
26c50 20 61 73 20 4f 50 5f 52 65 77 69 6e 64 20 65 78   as OP_Rewind ex
26c60 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 69 74 20  cept that.** it 
26c70 69 6e 63 72 65 6d 65 6e 74 73 20 61 6e 20 75 6e  increments an un
26c80 64 6f 63 75 6d 65 6e 74 65 64 20 67 6c 6f 62 61  documented globa
26c90 6c 20 76 61 72 69 61 62 6c 65 20 75 73 65 64 20  l variable used 
26ca0 66 6f 72 20 74 65 73 74 69 6e 67 2e 0a 2a 2a 0a  for testing..**.
26cb0 2a 2a 20 53 6f 72 74 69 6e 67 20 69 73 20 61 63  ** Sorting is ac
26cc0 63 6f 6d 70 6c 69 73 68 65 64 20 62 79 20 77 72  complished by wr
26cd0 69 74 69 6e 67 20 72 65 63 6f 72 64 73 20 69 6e  iting records in
26ce0 74 6f 20 61 20 73 6f 72 74 69 6e 67 20 69 6e 64  to a sorting ind
26cf0 65 78 2c 0a 2a 2a 20 74 68 65 6e 20 72 65 77 69  ex,.** then rewi
26d00 6e 64 69 6e 67 20 74 68 61 74 20 69 6e 64 65 78  nding that index
26d10 20 61 6e 64 20 70 6c 61 79 69 6e 67 20 69 74 20   and playing it 
26d20 62 61 63 6b 20 66 72 6f 6d 20 62 65 67 69 6e 6e  back from beginn
26d30 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20 20  ing to.** end.  
26d40 57 65 20 75 73 65 20 74 68 65 20 4f 50 5f 53 6f  We use the OP_So
26d50 72 74 20 6f 70 63 6f 64 65 20 69 6e 73 74 65 61  rt opcode instea
26d60 64 20 6f 66 20 4f 50 5f 52 65 77 69 6e 64 20 74  d of OP_Rewind t
26d70 6f 20 64 6f 20 74 68 65 0a 2a 2a 20 72 65 77 69  o do the.** rewi
26d80 6e 64 69 6e 67 20 73 6f 20 74 68 61 74 20 74 68  nding so that th
26d90 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  e global variabl
26da0 65 20 77 69 6c 6c 20 62 65 20 69 6e 63 72 65 6d  e will be increm
26db0 65 6e 74 65 64 20 61 6e 64 0a 2a 2a 20 72 65 67  ented and.** reg
26dc0 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20 63 61  ression tests ca
26dd0 6e 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74  n determine whet
26de0 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6f  her or not the o
26df0 70 74 69 6d 69 7a 65 72 20 69 73 0a 2a 2a 20 63  ptimizer is.** c
26e00 6f 72 72 65 63 74 6c 79 20 6f 70 74 69 6d 69 7a  orrectly optimiz
26e10 69 6e 67 20 6f 75 74 20 73 6f 72 74 73 2e 0a 2a  ing out sorts..*
26e20 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
26e30 53 6f 72 74 3a 20 20 20 20 2f 2a 20 6a 75 6d 70  Sort:    /* jump
26e40 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74   */.case OP_Sort
26e50 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
26e60 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  mp */.#ifdef SQL
26e70 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74  ITE_TEST.  sqlit
26e80 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b 3b  e3_sort_count++;
26e90 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63  .  sqlite3_searc
26ea0 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64 69  h_count--;.#endi
26eb0 66 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b  f.  p->aCounter[
26ec0 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55  SQLITE_STMTSTATU
26ed0 53 5f 53 4f 52 54 5d 2b 2b 3b 0a 20 20 2f 2a 20  S_SORT]++;.  /* 
26ee0 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74  Fall through int
26ef0 6f 20 4f 50 5f 52 65 77 69 6e 64 20 2a 2f 0a 7d  o OP_Rewind */.}
26f00 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 77 69  ./* Opcode: Rewi
26f10 6e 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  nd P1 P2 * * *.*
26f20 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73  *.** The next us
26f30 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f  e of the Rowid o
26f40 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74  r Column or Next
26f50 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72   instruction for
26f60 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66   P1 .** will ref
26f70 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  er to the first 
26f80 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61 74  entry in the dat
26f90 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69  abase table or i
26fa0 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20  ndex..** If the 
26fb0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69  table or index i
26fc0 73 20 65 6d 70 74 79 2c 20 6a 75 6d 70 20 69 6d  s empty, jump im
26fd0 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
26fe0 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65  .** If the table
26ff0 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74   or index is not
27000 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72   empty, fall thr
27010 6f 75 67 68 20 74 6f 20 74 68 65 20 66 6f 6c 6c  ough to the foll
27020 6f 77 69 6e 67 20 0a 2a 2a 20 69 6e 73 74 72 75  owing .** instru
27030 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ction..**.** Thi
27040 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20  s opcode leaves 
27050 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69  the cursor confi
27060 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e  gured to move in
27070 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a   forward order,.
27080 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69  ** from the begi
27090 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65  nning toward the
270a0 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20   end.  In other 
270b0 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f  words, the curso
270c0 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72  r is.** configur
270d0 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20  ed to use Next, 
270e0 6e 6f 74 20 50 72 65 76 2e 0a 2a 2f 0a 63 61 73  not Prev..*/.cas
270f0 65 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20  e OP_Rewind: {  
27100 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
27110 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
27120 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
27130 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
27140 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
27150 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
27160 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
27170 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
27180 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
27190 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
271a0 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
271b0 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64  pC)==(pOp->opcod
271c0 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74  e==OP_SorterSort
271d0 29 20 29 3b 0a 20 20 72 65 73 20 3d 20 31 3b 0a  ) );.  res = 1;.
271e0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
271f0 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70  BUG.  pC->seekOp
27200 20 3d 20 4f 50 5f 52 65 77 69 6e 64 3b 0a 23 65   = OP_Rewind;.#e
27210 6e 64 69 66 0a 20 20 69 66 28 20 69 73 53 6f 72  ndif.  if( isSor
27220 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20 72  ter(pC) ){.    r
27230 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
27240 6f 72 74 65 72 52 65 77 69 6e 64 28 70 43 2c 20  orterRewind(pC, 
27250 26 72 65 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  &res);.  }else{.
27260 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
27270 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
27280 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20 70  E_BTREE );.    p
27290 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43  Crsr = pC->uc.pC
272a0 75 72 73 6f 72 3b 0a 20 20 20 20 61 73 73 65 72  ursor;.    asser
272b0 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20 20  t( pCrsr );.    
272c0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
272d0 65 46 69 72 73 74 28 70 43 72 73 72 2c 20 26 72  eFirst(pCrsr, &r
272e0 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66  es);.    pC->def
272f0 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
27300 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
27310 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
27320 4c 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63  LE;.  }.  if( rc
27330 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
27340 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 43  e_to_error;.  pC
27350 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29  ->nullRow = (u8)
27360 72 65 73 3b 0a 20 20 61 73 73 65 72 74 28 20 70  res;.  assert( p
27370 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d  Op->p2>0 && pOp-
27380 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20  >p2<p->nOp );.  
27390 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
273a0 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28  res!=0,2);.  if(
273b0 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70   res ) goto jump
273c0 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b  _to_p2;.  break;
273d0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
273e0 65 78 74 20 50 31 20 50 32 20 50 33 20 50 34 20  ext P1 P2 P3 P4 
273f0 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65  P5.**.** Advance
27400 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
27410 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  at it points to 
27420 74 68 65 20 6e 65 78 74 20 6b 65 79 2f 64 61 74  the next key/dat
27430 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a  a pair in its.**
27440 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
27450 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e    If there are n
27460 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61 6c 75 65  o more key/value
27470 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c   pairs then fall
27480 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74   through.** to t
27490 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73  he following ins
274a0 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69  truction.  But i
274b0 66 20 74 68 65 20 63 75 72 73 6f 72 20 61 64 76  f the cursor adv
274c0 61 6e 63 65 20 77 61 73 20 73 75 63 63 65 73 73  ance was success
274d0 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d  ful,.** jump imm
274e0 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
274f0 2a 2a 0a 2a 2a 20 54 68 65 20 4e 65 78 74 20 6f  **.** The Next o
27500 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61  pcode is only va
27510 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e  lid following an
27520 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c   SeekGT, SeekGE,
27530 20 6f 72 0a 2a 2a 20 4f 50 5f 52 65 77 69 6e 64   or.** OP_Rewind
27540 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74 6f 20   opcode used to 
27550 70 6f 73 69 74 69 6f 6e 20 74 68 65 20 63 75 72  position the cur
27560 73 6f 72 2e 20 20 4e 65 78 74 20 69 73 20 6e 6f  sor.  Next is no
27570 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20  t allowed.** to 
27580 66 6f 6c 6c 6f 77 20 53 65 65 6b 4c 54 2c 20 53  follow SeekLT, S
27590 65 65 6b 4c 45 2c 20 6f 72 20 4f 50 5f 4c 61 73  eekLE, or OP_Las
275a0 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20  t..**.** The P1 
275b0 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66  cursor must be f
275c0 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c  or a real table,
275d0 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61   not a pseudo-ta
275e0 62 6c 65 2e 20 20 50 31 20 6d 75 73 74 20 68 61  ble.  P1 must ha
275f0 76 65 0a 2a 2a 20 62 65 65 6e 20 6f 70 65 6e 65  ve.** been opene
27600 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20  d prior to this 
27610 6f 70 63 6f 64 65 20 6f 72 20 74 68 65 20 70 72  opcode or the pr
27620 6f 67 72 61 6d 20 77 69 6c 6c 20 73 65 67 66 61  ogram will segfa
27630 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ult..**.** The P
27640 33 20 76 61 6c 75 65 20 69 73 20 61 20 68 69 6e  3 value is a hin
27650 74 20 74 6f 20 74 68 65 20 62 74 72 65 65 20 69  t to the btree i
27660 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49  mplementation. I
27670 66 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a  f P3==1, that.**
27680 20 6d 65 61 6e 73 20 50 31 20 69 73 20 61 6e 20   means P1 is an 
27690 53 51 4c 20 69 6e 64 65 78 20 61 6e 64 20 74 68  SQL index and th
276a0 61 74 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  at this instruct
276b0 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65 20 62  ion could have b
276c0 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69  een.** omitted i
276d0 66 20 74 68 61 74 20 69 6e 64 65 78 20 68 61 64  f that index had
276e0 20 62 65 65 6e 20 75 6e 69 71 75 65 2e 20 20 50   been unique.  P
276f0 33 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e 20  3 is usually 0. 
27700 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73   P3 is.** always
27710 20 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a   either 0 or 1..
27720 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77 61  **.** P4 is alwa
27730 79 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41 44  ys of type P4_AD
27740 56 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63 74  VANCE. The funct
27750 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e  ion pointer poin
27760 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33  ts to.** sqlite3
27770 42 74 72 65 65 4e 65 78 74 28 29 2e 0a 2a 2a 0a  BtreeNext()..**.
27780 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73 69  ** If P5 is posi
27790 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d  tive and the jum
277a0 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e  p is taken, then
277b0 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a   event counter.*
277c0 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e  * number P5-1 in
277d0 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74   the prepared st
277e0 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65  atement is incre
277f0 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65  mented..**.** Se
27800 65 20 61 6c 73 6f 3a 20 50 72 65 76 2c 20 4e 65  e also: Prev, Ne
27810 78 74 49 66 4f 70 65 6e 0a 2a 2f 0a 2f 2a 20 4f  xtIfOpen.*/./* O
27820 70 63 6f 64 65 3a 20 4e 65 78 74 49 66 4f 70 65  pcode: NextIfOpe
27830 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  n P1 P2 P3 P4 P5
27840 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
27850 64 65 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  de works just li
27860 6b 65 20 4e 65 78 74 20 65 78 63 65 70 74 20 74  ke Next except t
27870 68 61 74 20 69 66 20 63 75 72 73 6f 72 20 50 31  hat if cursor P1
27880 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70 65 6e 20   is not.** open 
27890 69 74 20 62 65 68 61 76 65 73 20 61 20 6e 6f 2d  it behaves a no-
278a0 6f 70 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  op..*/./* Opcode
278b0 3a 20 50 72 65 76 20 50 31 20 50 32 20 50 33 20  : Prev P1 P2 P3 
278c0 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 61 63 6b  P4 P5.**.** Back
278d0 20 75 70 20 63 75 72 73 6f 72 20 50 31 20 73 6f   up cursor P1 so
278e0 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
278f0 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  to the previous 
27900 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e  key/data pair in
27910 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72   its.** table or
27920 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72   index.  If ther
27930 65 20 69 73 20 6e 6f 20 70 72 65 76 69 6f 75 73  e is no previous
27940 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73   key/value pairs
27950 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
27960 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c  gh.** to the fol
27970 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69  lowing instructi
27980 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20  on.  But if the 
27990 63 75 72 73 6f 72 20 62 61 63 6b 75 70 20 77 61  cursor backup wa
279a0 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a  s successful,.**
279b0 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
279c0 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 0a 2a  y to P2..**.**.*
279d0 2a 20 54 68 65 20 50 72 65 76 20 6f 70 63 6f 64  * The Prev opcod
279e0 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20  e is only valid 
279f0 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53 65 65  following an See
27a00 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 0a  kLT, SeekLE, or.
27a10 2a 2a 20 4f 50 5f 4c 61 73 74 20 6f 70 63 6f 64  ** OP_Last opcod
27a20 65 20 75 73 65 64 20 74 6f 20 70 6f 73 69 74 69  e used to positi
27a30 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20  on the cursor.  
27a40 50 72 65 76 20 69 73 20 6e 6f 74 20 61 6c 6c 6f  Prev is not allo
27a50 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77  wed.** to follow
27a60 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c   SeekGT, SeekGE,
27a70 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64 2e 0a 2a   or OP_Rewind..*
27a80 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73  *.** The P1 curs
27a90 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61  or must be for a
27aa0 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
27ab0 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
27ac0 20 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 6e 6f    If P1 is.** no
27ad0 74 20 6f 70 65 6e 20 74 68 65 6e 20 74 68 65 20  t open then the 
27ae0 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65  behavior is unde
27af0 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  fined..**.** The
27b00 20 50 33 20 76 61 6c 75 65 20 69 73 20 61 20 68   P3 value is a h
27b10 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65 65  int to the btree
27b20 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
27b30 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a   If P3==1, that.
27b40 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20 61  ** means P1 is a
27b50 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64 20  n SQL index and 
27b60 74 68 61 74 20 74 68 69 73 20 69 6e 73 74 72 75  that this instru
27b70 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65  ction could have
27b80 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64   been.** omitted
27b90 20 69 66 20 74 68 61 74 20 69 6e 64 65 78 20 68   if that index h
27ba0 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e 20  ad been unique. 
27bb0 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20 30   P3 is usually 0
27bc0 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61  .  P3 is.** alwa
27bd0 79 73 20 65 69 74 68 65 72 20 30 20 6f 72 20 31  ys either 0 or 1
27be0 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c  ..**.** P4 is al
27bf0 77 61 79 73 20 6f 66 20 74 79 70 65 20 50 34 5f  ways of type P4_
27c00 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75 6e  ADVANCE. The fun
27c10 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f  ction pointer po
27c20 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74  ints to.** sqlit
27c30 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 28  e3BtreePrevious(
27c40 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  )..**.** If P5 i
27c50 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74  s positive and t
27c60 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
27c70 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75  , then event cou
27c80 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50  nter.** number P
27c90 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70 61  5-1 in the prepa
27ca0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73  red statement is
27cb0 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2f   incremented..*/
27cc0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76  ./* Opcode: Prev
27cd0 49 66 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20  IfOpen P1 P2 P3 
27ce0 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73  P4 P5.**.** This
27cf0 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75   opcode works ju
27d00 73 74 20 6c 69 6b 65 20 50 72 65 76 20 65 78 63  st like Prev exc
27d10 65 70 74 20 74 68 61 74 20 69 66 20 63 75 72 73  ept that if curs
27d20 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20  or P1 is not.** 
27d30 6f 70 65 6e 20 69 74 20 62 65 68 61 76 65 73 20  open it behaves 
27d40 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65  a no-op..*/.case
27d50 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 3a 20   OP_SorterNext: 
27d60 7b 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20  {  /* jump */.  
27d70 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
27d80 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 70 43    int res;..  pC
27d90 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
27da0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
27db0 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a  isSorter(pC) );.
27dc0 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 72 63 20    res = 0;.  rc 
27dd0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
27de0 74 65 72 4e 65 78 74 28 64 62 2c 20 70 43 2c 20  terNext(db, pC, 
27df0 26 72 65 73 29 3b 0a 20 20 67 6f 74 6f 20 6e 65  &res);.  goto ne
27e00 78 74 5f 74 61 69 6c 3b 0a 63 61 73 65 20 4f 50  xt_tail;.case OP
27e10 5f 50 72 65 76 49 66 4f 70 65 6e 3a 20 20 20 20  _PrevIfOpen:    
27e20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
27e30 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 3a 20 20  OP_NextIfOpen:  
27e40 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
27e50 66 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  f( p->apCsr[pOp-
27e60 3e 70 31 5d 3d 3d 30 20 29 20 62 72 65 61 6b 3b  >p1]==0 ) break;
27e70 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
27e80 67 68 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72  gh */.case OP_Pr
27e90 65 76 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ev:          /* 
27ea0 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
27eb0 4e 65 78 74 3a 20 20 20 20 20 20 20 20 20 20 2f  Next:          /
27ec0 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65  * jump */.  asse
27ed0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
27ee0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
27ef0 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
27f00 28 20 70 4f 70 2d 3e 70 35 3c 41 72 72 61 79 53  ( pOp->p5<ArrayS
27f10 69 7a 65 28 70 2d 3e 61 43 6f 75 6e 74 65 72 29  ize(p->aCounter)
27f20 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
27f30 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
27f40 72 65 73 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  res = pOp->p3;. 
27f50 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
27f60 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
27f70 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
27f80 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
27f90 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
27fa0 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
27fb0 61 73 73 65 72 74 28 20 72 65 73 3d 3d 30 20 7c  assert( res==0 |
27fc0 7c 20 28 72 65 73 3d 3d 31 20 26 26 20 70 43 2d  | (res==1 && pC-
27fd0 3e 69 73 54 61 62 6c 65 3d 3d 30 29 20 29 3b 0a  >isTable==0) );.
27fe0 20 20 74 65 73 74 63 61 73 65 28 20 72 65 73 3d    testcase( res=
27ff0 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =1 );.  assert( 
28000 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
28010 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  Next || pOp->p4.
28020 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65  xAdvance==sqlite
28030 33 42 74 72 65 65 4e 65 78 74 20 29 3b 0a 20 20  3BtreeNext );.  
28040 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
28050 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20  ode!=OP_Prev || 
28060 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65  pOp->p4.xAdvance
28070 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 50 72  ==sqlite3BtreePr
28080 65 76 69 6f 75 73 20 29 3b 0a 20 20 61 73 73 65  evious );.  asse
28090 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21  rt( pOp->opcode!
280a0 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 20 7c  =OP_NextIfOpen |
280b0 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e  | pOp->p4.xAdvan
280c0 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65  ce==sqlite3Btree
280d0 4e 65 78 74 20 29 3b 0a 20 20 61 73 73 65 72 74  Next );.  assert
280e0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  ( pOp->opcode!=O
280f0 50 5f 50 72 65 76 49 66 4f 70 65 6e 20 7c 7c 20  P_PrevIfOpen || 
28100 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65  pOp->p4.xAdvance
28110 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 50 72  ==sqlite3BtreePr
28120 65 76 69 6f 75 73 29 3b 0a 0a 20 20 2f 2a 20 54  evious);..  /* T
28130 68 65 20 4e 65 78 74 20 6f 70 63 6f 64 65 20 69  he Next opcode i
28140 73 20 6f 6e 6c 79 20 75 73 65 64 20 61 66 74 65  s only used afte
28150 72 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45  r SeekGT, SeekGE
28160 2c 20 61 6e 64 20 52 65 77 69 6e 64 2e 0a 20 20  , and Rewind..  
28170 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70 63 6f  ** The Prev opco
28180 64 65 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20  de is only used 
28190 61 66 74 65 72 20 53 65 65 6b 4c 54 2c 20 53 65  after SeekLT, Se
281a0 65 6b 4c 45 2c 20 61 6e 64 20 4c 61 73 74 2e 20  ekLE, and Last. 
281b0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
281c0 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78  ->opcode!=OP_Nex
281d0 74 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  t || pOp->opcode
281e0 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 0a  !=OP_NextIfOpen.
281f0 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65         || pC->se
28200 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 54 20  ekOp==OP_SeekGT 
28210 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f  || pC->seekOp==O
28220 50 5f 53 65 65 6b 47 45 0a 20 20 20 20 20 20 20  P_SeekGE.       
28230 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f  || pC->seekOp==O
28240 50 5f 52 65 77 69 6e 64 20 7c 7c 20 70 43 2d 3e  P_Rewind || pC->
28250 73 65 65 6b 4f 70 3d 3d 4f 50 5f 46 6f 75 6e 64  seekOp==OP_Found
28260 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
28270 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65  ->opcode!=OP_Pre
28280 76 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  v || pOp->opcode
28290 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 0a  !=OP_PrevIfOpen.
282a0 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65         || pC->se
282b0 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20  ekOp==OP_SeekLT 
282c0 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f  || pC->seekOp==O
282d0 50 5f 53 65 65 6b 4c 45 0a 20 20 20 20 20 20 20  P_SeekLE.       
282e0 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f  || pC->seekOp==O
282f0 50 5f 4c 61 73 74 20 29 3b 0a 0a 20 20 72 63 20  P_Last );..  rc 
28300 3d 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e  = pOp->p4.xAdvan
28310 63 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  ce(pC->uc.pCurso
28320 72 2c 20 26 72 65 73 29 3b 0a 6e 65 78 74 5f 74  r, &res);.next_t
28330 61 69 6c 3a 0a 20 20 70 43 2d 3e 63 61 63 68 65  ail:.  pC->cache
28340 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
28350 54 41 4c 45 3b 0a 20 20 56 64 62 65 42 72 61 6e  TALE;.  VdbeBran
28360 63 68 54 61 6b 65 6e 28 72 65 73 3d 3d 30 2c 32  chTaken(res==0,2
28370 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
28380 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
28390 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73  error;.  if( res
283a0 3d 3d 30 20 29 7b 0a 20 20 20 20 70 43 2d 3e 6e  ==0 ){.    pC->n
283b0 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20  ullRow = 0;.    
283c0 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d  p->aCounter[pOp-
283d0 3e 70 35 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53  >p5]++;.#ifdef S
283e0 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73  QLITE_TEST.    s
283f0 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f  qlite3_search_co
28400 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20  unt++;.#endif.  
28410 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
28420 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f  2_and_check_for_
28430 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 65 6c  interrupt;.  }el
28440 73 65 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c  se{.    pC->null
28450 52 6f 77 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 67  Row = 1;.  }.  g
28460 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e  oto check_for_in
28470 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f  terrupt;.}../* O
28480 70 63 6f 64 65 3a 20 49 64 78 49 6e 73 65 72 74  pcode: IdxInsert
28490 20 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a   P1 P2 P3 * P5.*
284a0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
284b0 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69  r[P2].**.** Regi
284c0 73 74 65 72 20 50 32 20 68 6f 6c 64 73 20 61 6e  ster P2 holds an
284d0 20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d   SQL index key m
284e0 61 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  ade using the.**
284f0 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74   MakeRecord inst
28500 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73 20  ructions.  This 
28510 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20 74 68  opcode writes th
28520 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74  at key.** into t
28530 68 65 20 69 6e 64 65 78 20 50 31 2e 20 20 44 61  he index P1.  Da
28540 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74 72 79  ta for the entry
28550 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50   is nil..**.** P
28560 33 20 69 73 20 61 20 66 6c 61 67 20 74 68 61 74  3 is a flag that
28570 20 70 72 6f 76 69 64 65 73 20 61 20 68 69 6e 74   provides a hint
28580 20 74 6f 20 74 68 65 20 62 2d 74 72 65 65 20 6c   to the b-tree l
28590 61 79 65 72 20 74 68 61 74 20 74 68 69 73 0a 2a  ayer that this.*
285a0 2a 20 69 6e 73 65 72 74 20 69 73 20 6c 69 6b 65  * insert is like
285b0 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65  ly to be an appe
285c0 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  nd..**.** If P5 
285d0 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e  has the OPFLAG_N
285e0 43 48 41 4e 47 45 20 62 69 74 20 73 65 74 2c 20  CHANGE bit set, 
285f0 74 68 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20  then the change 
28600 63 6f 75 6e 74 65 72 20 69 73 0a 2a 2a 20 69 6e  counter is.** in
28610 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 69  cremented by thi
28620 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  s instruction.  
28630 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  If the OPFLAG_NC
28640 48 41 4e 47 45 20 62 69 74 20 69 73 20 63 6c 65  HANGE bit is cle
28650 61 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20  ar,.** then the 
28660 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69  change counter i
28670 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2a 0a  s unchanged..**.
28680 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68 65  ** If P5 has the
28690 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
286a0 45 53 55 4c 54 20 62 69 74 20 73 65 74 2c 20 74  ESULT bit set, t
286b0 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6d  hen the cursor m
286c0 75 73 74 20 68 61 76 65 0a 2a 2a 20 6a 75 73 74  ust have.** just
286d0 20 64 6f 6e 65 20 61 20 73 65 65 6b 20 74 6f 20   done a seek to 
286e0 74 68 65 20 73 70 6f 74 20 77 68 65 72 65 20 74  the spot where t
286f0 68 65 20 6e 65 77 20 65 6e 74 72 79 20 69 73 20  he new entry is 
28700 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 0a  to be inserted..
28710 2a 2a 20 54 68 69 73 20 66 6c 61 67 20 61 76 6f  ** This flag avo
28720 69 64 73 20 64 6f 69 6e 67 20 61 6e 20 65 78 74  ids doing an ext
28730 72 61 20 73 65 65 6b 2e 0a 2a 2a 0a 2a 2a 20 54  ra seek..**.** T
28740 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
28750 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69  only works for i
28760 6e 64 69 63 65 73 2e 20 20 54 68 65 20 65 71 75  ndices.  The equ
28770 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74  ivalent instruct
28780 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65  ion.** for table
28790 73 20 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a  s is OP_Insert..
287a0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
287b0 72 49 6e 73 65 72 74 3a 20 20 20 20 20 20 20 2f  rInsert:       /
287c0 2a 20 69 6e 32 20 2a 2f 0a 63 61 73 65 20 4f 50  * in2 */.case OP
287d0 5f 49 64 78 49 6e 73 65 72 74 3a 20 7b 20 20 20  _IdxInsert: {   
287e0 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20       /* in2 */. 
287f0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
28800 0a 20 20 69 6e 74 20 6e 4b 65 79 3b 0a 20 20 63  .  int nKey;.  c
28810 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65 79 3b  onst char *zKey;
28820 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
28830 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
28840 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
28850 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
28860 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
28870 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
28880 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
28890 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64  pC)==(pOp->opcod
288a0 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65  e==OP_SorterInse
288b0 72 74 29 20 29 3b 0a 20 20 70 49 6e 32 20 3d 20  rt) );.  pIn2 = 
288c0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
288d0 20 20 61 73 73 65 72 74 28 20 70 49 6e 32 2d 3e    assert( pIn2->
288e0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
288f0 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   );.  if( pOp->p
28900 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  5 & OPFLAG_NCHAN
28910 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b  GE ) p->nChange+
28920 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  +;.  assert( pC-
28930 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
28940 50 45 5f 42 54 52 45 45 20 7c 7c 20 70 4f 70 2d  PE_BTREE || pOp-
28950 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74  >opcode==OP_Sort
28960 65 72 49 6e 73 65 72 74 20 29 3b 0a 20 20 61 73  erInsert );.  as
28970 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
28980 65 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 45  e==0 );.  rc = E
28990 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b  xpandBlob(pIn2);
289a0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
289b0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
289c0 72 6f 72 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  ror;.  if( pOp->
289d0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65  opcode==OP_Sorte
289e0 72 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 72  rInsert ){.    r
289f0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
28a00 6f 72 74 65 72 57 72 69 74 65 28 70 43 2c 20 70  orterWrite(pC, p
28a10 49 6e 32 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  In2);.  }else{. 
28a20 20 20 20 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e     nKey = pIn2->
28a30 6e 3b 0a 20 20 20 20 7a 4b 65 79 20 3d 20 70 49  n;.    zKey = pI
28a40 6e 32 2d 3e 7a 3b 0a 20 20 20 20 72 63 20 3d 20  n2->z;.    rc = 
28a50 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65  sqlite3BtreeInse
28a60 72 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  rt(pC->uc.pCurso
28a70 72 2c 20 7a 4b 65 79 2c 20 6e 4b 65 79 2c 20 22  r, zKey, nKey, "
28a80 22 2c 20 30 2c 20 30 2c 20 70 4f 70 2d 3e 70 33  ", 0, 0, pOp->p3
28a90 2c 20 0a 20 20 20 20 20 20 20 20 28 28 70 4f 70  , .        ((pOp
28aa0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53  ->p5 & OPFLAG_US
28ab0 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70  ESEEKRESULT) ? p
28ac0 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20  C->seekResult : 
28ad0 30 29 0a 20 20 20 20 20 20 20 20 29 3b 0a 20 20  0).        );.  
28ae0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
28af0 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
28b00 29 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  );.    pC->cache
28b10 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
28b20 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20  TALE;.  }.  if( 
28b30 72 63 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  rc) goto abort_d
28b40 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62  ue_to_error;.  b
28b50 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
28b60 64 65 3a 20 49 64 78 44 65 6c 65 74 65 20 50 31  de: IdxDelete P1
28b70 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
28b80 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32  nopsis: key=r[P2
28b90 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  @P3].**.** The c
28ba0 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20 72 65 67  ontent of P3 reg
28bb0 69 73 74 65 72 73 20 73 74 61 72 74 69 6e 67 20  isters starting 
28bc0 61 74 20 72 65 67 69 73 74 65 72 20 50 32 20 66  at register P2 f
28bd0 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61 63 6b  orm.** an unpack
28be0 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 54 68  ed index key. Th
28bf0 69 73 20 6f 70 63 6f 64 65 20 72 65 6d 6f 76 65  is opcode remove
28c00 73 20 74 68 61 74 20 65 6e 74 72 79 20 66 72 6f  s that entry fro
28c10 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64 65 78 20  m the .** index 
28c20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72  opened by cursor
28c30 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P1..*/.case OP_
28c40 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56  IdxDelete: {.  V
28c50 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
28c60 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
28c70 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55  ;.  int res;.  U
28c80 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
28c90 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
28ca0 3e 70 33 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  >p3>0 );.  asser
28cb0 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  t( pOp->p2>0 && 
28cc0 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 3c  pOp->p2+pOp->p3<
28cd0 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
28ce0 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 61 73 73  rsor)+1 );.  ass
28cf0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
28d00 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
28d10 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
28d20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
28d30 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
28d40 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
28d50 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
28d60 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
28d70 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e   pCrsr = pC->uc.
28d80 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72  pCursor;.  asser
28d90 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20  t( pCrsr!=0 );. 
28da0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
28db0 3d 3d 30 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49  ==0 );.  r.pKeyI
28dc0 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
28dd0 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d  fo;.  r.nField =
28de0 20 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a 20   (u16)pOp->p3;. 
28df0 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
28e00 30 3b 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61  0;.  r.aMem = &a
28e10 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
28e20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
28e30 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
28e40 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c  pCrsr, &r, 0, 0,
28e50 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20 72 63   &res);.  if( rc
28e60 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
28e70 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66  e_to_error;.  if
28e80 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20  ( res==0 ){.    
28e90 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
28ea0 65 44 65 6c 65 74 65 28 70 43 72 73 72 2c 20 42  eDelete(pCrsr, B
28eb0 54 52 45 45 5f 41 55 58 44 45 4c 45 54 45 29 3b  TREE_AUXDELETE);
28ec0 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f  .    if( rc ) go
28ed0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
28ee0 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 61 73 73  error;.  }.  ass
28ef0 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
28f00 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
28f10 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
28f20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
28f30 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
28f40 63 6f 64 65 3a 20 53 65 65 6b 20 50 31 20 2a 20  code: Seek P1 * 
28f50 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
28f60 73 69 73 3a 20 20 4d 6f 76 65 20 50 33 20 74 6f  sis:  Move P3 to
28f70 20 50 31 2e 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20   P1.rowid.**.** 
28f80 50 31 20 69 73 20 61 6e 20 6f 70 65 6e 20 69 6e  P1 is an open in
28f90 64 65 78 20 63 75 72 73 6f 72 20 61 6e 64 20 50  dex cursor and P
28fa0 33 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f 6e  3 is a cursor on
28fb0 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
28fc0 6e 67 0a 2a 2a 20 74 61 62 6c 65 2e 20 20 54 68  ng.** table.  Th
28fd0 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 61  is opcode does a
28fe0 20 64 65 66 65 72 72 65 64 20 73 65 65 6b 20 6f   deferred seek o
28ff0 66 20 74 68 65 20 50 33 20 74 61 62 6c 65 20 63  f the P3 table c
29000 75 72 73 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20  ursor.** to the 
29010 72 6f 77 20 74 68 61 74 20 63 6f 72 72 65 73 70  row that corresp
29020 6f 6e 64 73 20 74 6f 20 74 68 65 20 63 75 72 72  onds to the curr
29030 65 6e 74 20 72 6f 77 20 6f 66 20 50 31 2e 0a 2a  ent row of P1..*
29040 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 20 64  *.** This is a d
29050 65 66 65 72 72 65 64 20 73 65 65 6b 2e 20 20 4e  eferred seek.  N
29060 6f 74 68 69 6e 67 20 61 63 74 75 61 6c 6c 79 20  othing actually 
29070 68 61 70 70 65 6e 73 20 75 6e 74 69 6c 0a 2a 2a  happens until.**
29080 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 75   the cursor is u
29090 73 65 64 20 74 6f 20 72 65 61 64 20 61 20 72 65  sed to read a re
290a0 63 6f 72 64 2e 20 20 54 68 61 74 20 77 61 79 2c  cord.  That way,
290b0 20 69 66 20 6e 6f 20 72 65 61 64 73 0a 2a 2a 20   if no reads.** 
290c0 6f 63 63 75 72 2c 20 6e 6f 20 75 6e 6e 65 63 65  occur, no unnece
290d0 73 73 61 72 79 20 49 2f 4f 20 68 61 70 70 65 6e  ssary I/O happen
290e0 73 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20  s..**.** P4 may 
290f0 62 65 20 61 6e 20 61 72 72 61 79 20 6f 66 20 69  be an array of i
29100 6e 74 65 67 65 72 73 20 28 74 79 70 65 20 50 34  ntegers (type P4
29110 5f 49 4e 54 41 52 52 41 59 29 20 63 6f 6e 74 61  _INTARRAY) conta
29120 69 6e 69 6e 67 0a 2a 2a 20 6f 6e 65 20 65 6e 74  ining.** one ent
29130 72 79 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  ry for each colu
29140 6d 6e 20 69 6e 20 74 68 65 20 50 33 20 74 61 62  mn in the P3 tab
29150 6c 65 2e 20 20 49 66 20 61 72 72 61 79 20 65 6e  le.  If array en
29160 74 72 79 20 61 28 69 29 0a 2a 2a 20 69 73 20 6e  try a(i).** is n
29170 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 72 65  on-zero, then re
29180 61 64 69 6e 67 20 63 6f 6c 75 6d 6e 20 61 28 69  ading column a(i
29190 29 2d 31 20 66 72 6f 6d 20 63 75 72 73 6f 72 20  )-1 from cursor 
291a0 50 33 20 69 73 20 0a 2a 2a 20 65 71 75 69 76 61  P3 is .** equiva
291b0 6c 65 6e 74 20 74 6f 20 70 65 72 66 6f 72 6d 69  lent to performi
291c0 6e 67 20 74 68 65 20 64 65 66 65 72 72 65 64 20  ng the deferred 
291d0 73 65 65 6b 20 61 6e 64 20 74 68 65 6e 20 72 65  seek and then re
291e0 61 64 69 6e 67 20 63 6f 6c 75 6d 6e 20 69 20 0a  ading column i .
291f0 2a 2a 20 66 72 6f 6d 20 50 31 2e 20 20 54 68 69  ** from P1.  Thi
29200 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73  s information is
29210 20 73 74 6f 72 65 64 20 69 6e 20 50 33 20 61 6e   stored in P3 an
29220 64 20 75 73 65 64 20 74 6f 20 72 65 64 69 72 65  d used to redire
29230 63 74 0a 2a 2a 20 72 65 61 64 73 20 61 67 61 69  ct.** reads agai
29240 6e 73 74 20 50 33 20 6f 76 65 72 20 74 6f 20 50  nst P3 over to P
29250 31 2c 20 74 68 75 73 20 70 6f 73 73 69 62 6c 79  1, thus possibly
29260 20 61 76 6f 69 64 69 6e 67 20 74 68 65 20 6e 65   avoiding the ne
29270 65 64 20 74 6f 0a 2a 2a 20 73 65 65 6b 20 61 6e  ed to.** seek an
29280 64 20 72 65 61 64 20 63 75 72 73 6f 72 20 50 33  d read cursor P3
29290 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
292a0 49 64 78 52 6f 77 69 64 20 50 31 20 50 32 20 2a  IdxRowid P1 P2 *
292b0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
292c0 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a  : r[P2]=rowid.**
292d0 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72  .** Write into r
292e0 65 67 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e  egister P2 an in
292f0 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74  teger which is t
29300 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e  he last entry in
29310 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 0a 2a   the record at.*
29320 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  * the end of the
29330 20 69 6e 64 65 78 20 6b 65 79 20 70 6f 69 6e 74   index key point
29340 65 64 20 74 6f 20 62 79 20 63 75 72 73 6f 72 20  ed to by cursor 
29350 50 31 2e 20 20 54 68 69 73 20 69 6e 74 65 67 65  P1.  This intege
29360 72 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 74  r should be.** t
29370 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20  he rowid of the 
29380 74 61 62 6c 65 20 65 6e 74 72 79 20 74 6f 20 77  table entry to w
29390 68 69 63 68 20 74 68 69 73 20 69 6e 64 65 78 20  hich this index 
293a0 65 6e 74 72 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a  entry points..**
293b0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 52 6f  .** See also: Ro
293c0 77 69 64 2c 20 4d 61 6b 65 52 65 63 6f 72 64 2e  wid, MakeRecord.
293d0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b  .*/.case OP_Seek
293e0 3a 0a 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77  :.case OP_IdxRow
293f0 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  id: {           
29400 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
29410 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
29420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
29430 2a 20 54 68 65 20 50 31 20 69 6e 64 65 78 20 63  * The P1 index c
29440 75 72 73 6f 72 20 2a 2f 0a 20 20 56 64 62 65 43  ursor */.  VdbeC
29450 75 72 73 6f 72 20 2a 70 54 61 62 43 75 72 3b 20  ursor *pTabCur; 
29460 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
29470 20 50 32 20 74 61 62 6c 65 20 63 75 72 73 6f 72   P2 table cursor
29480 20 28 4f 50 5f 53 65 65 6b 20 6f 6e 6c 79 29 20   (OP_Seek only) 
29490 2a 2f 0a 20 20 69 36 34 20 72 6f 77 69 64 3b 20  */.  i64 rowid; 
294a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
294b0 20 20 20 20 2f 2a 20 52 6f 77 69 64 20 74 68 61      /* Rowid tha
294c0 74 20 50 31 20 63 75 72 72 65 6e 74 20 70 6f 69  t P1 current poi
294d0 6e 74 73 20 74 6f 20 2a 2f 0a 0a 20 20 61 73 73  nts to */..  ass
294e0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
294f0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
29500 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
29510 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
29520 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
29530 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
29540 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
29550 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
29560 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e   assert( pC->uc.
29570 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
29580 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
29590 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  ble==0 );.  asse
295a0 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
295b0 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61  Moveto==0 );.  a
295c0 73 73 65 72 74 28 20 21 70 43 2d 3e 6e 75 6c 6c  ssert( !pC->null
295d0 52 6f 77 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  Row || pOp->opco
295e0 64 65 3d 3d 4f 50 5f 49 64 78 52 6f 77 69 64 20  de==OP_IdxRowid 
295f0 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 49 64 78  );..  /* The Idx
29600 52 6f 77 69 64 20 61 6e 64 20 53 65 65 6b 20 6f  Rowid and Seek o
29610 70 63 6f 64 65 73 20 61 72 65 20 63 6f 6d 62 69  pcodes are combi
29620 6e 65 64 20 62 65 63 61 75 73 65 20 6f 66 20 74  ned because of t
29630 68 65 20 63 6f 6d 6d 6f 6e 61 6c 69 74 79 0a 20  he commonality. 
29640 20 2a 2a 20 6f 66 20 73 71 6c 69 74 65 33 56 64   ** of sqlite3Vd
29650 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28  beCursorRestore(
29660 29 20 61 6e 64 20 73 71 6c 69 74 65 33 56 64 62  ) and sqlite3Vdb
29670 65 49 64 78 52 6f 77 69 64 28 29 2e 20 2a 2f 0a  eIdxRowid(). */.
29680 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
29690 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28  beCursorRestore(
296a0 70 43 29 3b 0a 0a 20 20 2f 2a 20 73 71 6c 69 74  pC);..  /* sqlit
296b0 65 33 56 62 65 43 75 72 73 6f 72 52 65 73 74 6f  e3VbeCursorResto
296c0 72 65 28 29 20 63 61 6e 20 6f 6e 6c 79 20 66 61  re() can only fa
296d0 69 6c 20 69 66 20 74 68 65 20 72 65 63 6f 72 64  il if the record
296e0 20 68 61 73 20 62 65 65 6e 20 64 65 6c 65 74 65   has been delete
296f0 64 0a 20 20 2a 2a 20 6f 75 74 20 66 72 6f 6d 20  d.  ** out from 
29700 75 6e 64 65 72 20 74 68 65 20 63 75 72 73 6f 72  under the cursor
29710 2e 20 20 54 68 61 74 20 77 69 6c 6c 20 6e 65 76  .  That will nev
29720 65 72 20 68 61 70 70 65 6e 73 20 66 6f 72 20 61  er happens for a
29730 6e 20 49 64 78 52 6f 77 69 64 0a 20 20 2a 2a 20  n IdxRowid.  ** 
29740 6f 72 20 53 65 65 6b 20 6f 70 63 6f 64 65 20 2a  or Seek opcode *
29750 2f 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63  /.  if( NEVER(rc
29760 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67  !=SQLITE_OK) ) g
29770 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
29780 5f 65 72 72 6f 72 3b 0a 0a 20 20 69 66 28 20 21  _error;..  if( !
29790 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
297a0 20 20 20 72 6f 77 69 64 20 3d 20 30 3b 20 20 2f     rowid = 0;  /
297b0 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f  * Not needed.  O
297c0 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65  nly used to sile
297d0 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a  nce a warning. *
297e0 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  /.    rc = sqlit
297f0 65 33 56 64 62 65 49 64 78 52 6f 77 69 64 28 64  e3VdbeIdxRowid(d
29800 62 2c 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  b, pC->uc.pCurso
29810 72 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20  r, &rowid);.    
29820 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
29830 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  K ){.      goto 
29840 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
29850 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  or;.    }.    if
29860 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
29870 50 5f 53 65 65 6b 20 29 7b 0a 20 20 20 20 20 20  P_Seek ){.      
29880 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
29890 3d 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 70 2d  =0 && pOp->p3<p-
298a0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 20 20  >nCursor );.    
298b0 20 20 70 54 61 62 43 75 72 20 3d 20 70 2d 3e 61    pTabCur = p->a
298c0 70 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  pCsr[pOp->p3];. 
298d0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 54 61       assert( pTa
298e0 62 43 75 72 21 3d 30 20 29 3b 0a 20 20 20 20 20  bCur!=0 );.     
298f0 20 61 73 73 65 72 74 28 20 70 54 61 62 43 75 72   assert( pTabCur
29900 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
29910 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20  YPE_BTREE );.   
29920 20 20 20 61 73 73 65 72 74 28 20 70 54 61 62 43     assert( pTabC
29930 75 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d  ur->uc.pCursor!=
29940 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
29950 74 28 20 70 54 61 62 43 75 72 2d 3e 69 73 54 61  t( pTabCur->isTa
29960 62 6c 65 20 29 3b 0a 20 20 20 20 20 20 70 54 61  ble );.      pTa
29970 62 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20  bCur->nullRow = 
29980 30 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75 72  0;.      pTabCur
29990 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d  ->movetoTarget =
299a0 20 72 6f 77 69 64 3b 0a 20 20 20 20 20 20 70 54   rowid;.      pT
299b0 61 62 43 75 72 2d 3e 64 65 66 65 72 72 65 64 4d  abCur->deferredM
299c0 6f 76 65 74 6f 20 3d 20 31 3b 0a 20 20 20 20 20  oveto = 1;.     
299d0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
299e0 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41  type==P4_INTARRA
299f0 59 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 61 69 3d  Y || pOp->p4.ai=
29a00 3d 30 20 29 3b 0a 20 20 20 20 20 20 70 54 61 62  =0 );.      pTab
29a10 43 75 72 2d 3e 61 41 6c 74 4d 61 70 20 3d 20 70  Cur->aAltMap = p
29a20 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 20 20 20  Op->p4.ai;.     
29a30 20 70 54 61 62 43 75 72 2d 3e 70 41 6c 74 43 75   pTabCur->pAltCu
29a40 72 73 6f 72 20 3d 20 70 43 3b 0a 20 20 20 20 7d  rsor = pC;.    }
29a50 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 4f 75 74  else{.      pOut
29a60 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
29a70 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 20 20 20  e(p, pOp);.     
29a80 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77   pOut->u.i = row
29a90 69 64 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e  id;.      pOut->
29aa0 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
29ab0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
29ac0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
29ad0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 52  >opcode==OP_IdxR
29ae0 6f 77 69 64 20 29 3b 0a 20 20 20 20 73 71 6c 69  owid );.    sqli
29af0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
29b00 6c 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  l(&aMem[pOp->p2]
29b10 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
29b20 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  }../* Opcode: Id
29b30 78 47 45 20 50 31 20 50 32 20 50 33 20 50 34 20  xGE P1 P2 P3 P4 
29b40 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
29b50 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
29b60 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74  ** The P4 regist
29b70 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e  er values beginn
29b80 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d  ing with P3 form
29b90 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
29ba0 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20  ex .** key that 
29bb0 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52  omits the PRIMAR
29bc0 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65 20  Y KEY.  Compare 
29bd0 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61  this key value a
29be0 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78  gainst the index
29bf0 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20   .** that P1 is 
29c00 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
29c10 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20  ng to, ignoring 
29c20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
29c30 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65  or ROWID .** fie
29c40 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 2e 0a  lds at the end..
29c50 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
29c60 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 67  index entry is g
29c70 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
29c80 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
29c90 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75  value.** then ju
29ca0 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72  mp to P2.  Other
29cb0 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67  wise fall throug
29cc0 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
29cd0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  struction..*/./*
29ce0 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 54 20 50   Opcode: IdxGT P
29cf0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
29d00 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
29d10 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68  [P3@P4].**.** Th
29d20 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61  e P4 register va
29d30 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  lues beginning w
29d40 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75  ith P3 form an u
29d50 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a  npacked index .*
29d60 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73  * key that omits
29d70 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
29d80 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20  .  Compare this 
29d90 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73  key value agains
29da0 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20  t the index .** 
29db0 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65  that P1 is curre
29dc0 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f  ntly pointing to
29dd0 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50  , ignoring the P
29de0 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f  RIMARY KEY or RO
29df0 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20 61  WID .** fields a
29e00 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a  t the end..**.**
29e10 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
29e20 20 65 6e 74 72 79 20 69 73 20 67 72 65 61 74 65   entry is greate
29e30 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76  r than the key v
29e40 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d  alue.** then jum
29e50 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77  p to P2.  Otherw
29e60 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ise fall through
29e70 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
29e80 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  truction..*/./* 
29e90 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54 20 50 31  Opcode: IdxLT P1
29ea0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
29eb0 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
29ec0 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65  P3@P4].**.** The
29ed0 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c   P4 register val
29ee0 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ues beginning wi
29ef0 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e  th P3 form an un
29f00 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a  packed index .**
29f10 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20   key that omits 
29f20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
29f30 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61  or ROWID.  Compa
29f40 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75  re this key valu
29f50 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68 65  e against.** the
29f60 20 69 6e 64 65 78 20 74 68 61 74 20 50 31 20 69   index that P1 i
29f70 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
29f80 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e  ting to, ignorin
29f90 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  g the PRIMARY KE
29fa0 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e  Y or.** ROWID on
29fb0 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a   the P1 index..*
29fc0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69  *.** If the P1 i
29fd0 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65  ndex entry is le
29fe0 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  ss than the key 
29ff0 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 20  value then jump 
2a000 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68 65 72 77  to P2..** Otherw
2a010 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ise fall through
2a020 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
2a030 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  truction..*/./* 
2a040 4f 70 63 6f 64 65 3a 20 49 64 78 4c 45 20 50 31  Opcode: IdxLE P1
2a050 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
2a060 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
2a070 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65  P3@P4].**.** The
2a080 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c   P4 register val
2a090 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ues beginning wi
2a0a0 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e  th P3 form an un
2a0b0 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a  packed index .**
2a0c0 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20   key that omits 
2a0d0 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
2a0e0 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61  or ROWID.  Compa
2a0f0 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75  re this key valu
2a100 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68 65  e against.** the
2a110 20 69 6e 64 65 78 20 74 68 61 74 20 50 31 20 69   index that P1 i
2a120 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
2a130 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e  ting to, ignorin
2a140 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  g the PRIMARY KE
2a150 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e  Y or.** ROWID on
2a160 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a   the P1 index..*
2a170 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69  *.** If the P1 i
2a180 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65  ndex entry is le
2a190 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
2a1a0 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75   to the key valu
2a1b0 65 20 74 68 65 6e 20 6a 75 6d 70 0a 2a 2a 20 74  e then jump.** t
2a1c0 6f 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 20  o P2. Otherwise 
2a1d0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
2a1e0 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
2a1f0 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
2a200 5f 49 64 78 4c 45 3a 20 20 20 20 20 20 20 20 20  _IdxLE:         
2a210 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
2a220 20 4f 50 5f 49 64 78 47 54 3a 20 20 20 20 20 20   OP_IdxGT:      
2a230 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63      /* jump */.c
2a240 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20 20  ase OP_IdxLT:   
2a250 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
2a260 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 45 3a  /.case OP_IdxGE:
2a270 20 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d    {       /* jum
2a280 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  p */.  VdbeCurso
2a290 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73  r *pC;.  int res
2a2a0 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
2a2b0 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28  rd r;..  assert(
2a2c0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
2a2d0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
2a2e0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
2a2f0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
2a300 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
2a310 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2a320 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 61  isOrdered );.  a
2a330 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
2a340 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
2a350 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  EE );.  assert( 
2a360 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d  pC->uc.pCursor!=
2a370 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  0);.  assert( pC
2a380 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
2a390 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
2a3a0 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70   pOp->p5==0 || p
2a3b0 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 61  Op->p5==1 );.  a
2a3c0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
2a3d0 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
2a3e0 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
2a3f0 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72  C->pKeyInfo;.  r
2a400 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70  .nField = (u16)p
2a410 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 69 66 28 20  Op->p4.i;.  if( 
2a420 70 4f 70 2d 3e 6f 70 63 6f 64 65 3c 4f 50 5f 49  pOp->opcode<OP_I
2a430 64 78 4c 54 20 29 7b 0a 20 20 20 20 61 73 73 65  dxLT ){.    asse
2a440 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
2a450 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f 70  =OP_IdxLE || pOp
2a460 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
2a470 47 54 20 29 3b 0a 20 20 20 20 72 2e 64 65 66 61  GT );.    r.defa
2a480 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20 7d  ult_rc = -1;.  }
2a490 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
2a4a0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
2a4b0 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e  P_IdxGE || pOp->
2a4c0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54  opcode==OP_IdxLT
2a4d0 20 29 3b 0a 20 20 20 20 72 2e 64 65 66 61 75 6c   );.    r.defaul
2a4e0 74 5f 72 63 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  t_rc = 0;.  }.  
2a4f0 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  r.aMem = &aMem[p
2a500 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20  Op->p3];.#ifdef 
2a510 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 7b  SQLITE_DEBUG.  {
2a520 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b   int i; for(i=0;
2a530 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b   i<r.nField; i++
2a540 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56  ) assert( memIsV
2a550 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29  alid(&r.aMem[i])
2a560 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72   ); }.#endif.  r
2a570 65 73 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  es = 0;  /* Not 
2a580 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73  needed.  Only us
2a590 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20  ed to silence a 
2a5a0 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63  warning. */.  rc
2a5b0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64   = sqlite3VdbeId
2a5c0 78 4b 65 79 43 6f 6d 70 61 72 65 28 64 62 2c 20  xKeyCompare(db, 
2a5d0 70 43 2c 20 26 72 2c 20 26 72 65 73 29 3b 0a 20  pC, &r, &res);. 
2a5e0 20 61 73 73 65 72 74 28 20 28 4f 50 5f 49 64 78   assert( (OP_Idx
2a5f0 4c 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c 54  LE&1)==(OP_IdxLT
2a600 26 31 29 20 26 26 20 28 4f 50 5f 49 64 78 47 45  &1) && (OP_IdxGE
2a610 26 31 29 3d 3d 28 4f 50 5f 49 64 78 47 54 26 31  &1)==(OP_IdxGT&1
2a620 29 20 29 3b 0a 20 20 69 66 28 20 28 70 4f 70 2d  ) );.  if( (pOp-
2a630 3e 6f 70 63 6f 64 65 26 31 29 3d 3d 28 4f 50 5f  >opcode&1)==(OP_
2a640 49 64 78 4c 54 26 31 29 20 29 7b 0a 20 20 20 20  IdxLT&1) ){.    
2a650 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
2a660 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c  ode==OP_IdxLE ||
2a670 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
2a680 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72 65  _IdxLT );.    re
2a690 73 20 3d 20 2d 72 65 73 3b 0a 20 20 7d 65 6c 73  s = -res;.  }els
2a6a0 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
2a6b0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
2a6c0 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  dxGE || pOp->opc
2a6d0 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b  ode==OP_IdxGT );
2a6e0 0a 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20 7d 0a  .    res++;.  }.
2a6f0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
2a700 6e 28 72 65 73 3e 30 2c 32 29 3b 0a 20 20 69 66  n(res>0,2);.  if
2a710 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
2a720 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2a730 20 20 69 66 28 20 72 65 73 3e 30 20 29 20 67 6f    if( res>0 ) go
2a740 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
2a750 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2a760 63 6f 64 65 3a 20 44 65 73 74 72 6f 79 20 50 31  code: Destroy P1
2a770 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
2a780 20 44 65 6c 65 74 65 20 61 6e 20 65 6e 74 69 72   Delete an entir
2a790 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
2a7a0 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20   or index whose 
2a7b0 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 74 68 65  root page in the
2a7c0 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c   database.** fil
2a7d0 65 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31  e is given by P1
2a7e0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c  ..**.** The tabl
2a7f0 65 20 62 65 69 6e 67 20 64 65 73 74 72 6f 79 65  e being destroye
2a800 64 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e  d is in the main
2a810 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
2a820 66 20 50 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20  f P3==0.  If.** 
2a830 50 33 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74  P3==1 then the t
2a840 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72  able to be clear
2a850 20 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c   is in the auxil
2a860 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69  iary database fi
2a870 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73  le.** that is us
2a880 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c  ed to store tabl
2a890 65 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20  es create using 
2a8a0 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59  CREATE TEMPORARY
2a8b0 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66   TABLE..**.** If
2a8c0 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20 65   AUTOVACUUM is e
2a8d0 6e 61 62 6c 65 64 20 74 68 65 6e 20 69 74 20 69  nabled then it i
2a8e0 73 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20  s possible that 
2a8f0 61 6e 6f 74 68 65 72 20 72 6f 6f 74 20 70 61 67  another root pag
2a900 65 0a 2a 2a 20 6d 69 67 68 74 20 62 65 20 6d 6f  e.** might be mo
2a910 76 65 64 20 69 6e 74 6f 20 74 68 65 20 6e 65 77  ved into the new
2a920 6c 79 20 64 65 6c 65 74 65 64 20 72 6f 6f 74 20  ly deleted root 
2a930 70 61 67 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  page in order to
2a940 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f   keep all.** roo
2a950 74 20 70 61 67 65 73 20 63 6f 6e 74 69 67 75 6f  t pages contiguo
2a960 75 73 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e  us at the beginn
2a970 69 6e 67 20 6f 66 20 74 68 65 20 64 61 74 61 62  ing of the datab
2a980 61 73 65 2e 20 20 54 68 65 20 66 6f 72 6d 65 72  ase.  The former
2a990 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74 68 65  .** value of the
2a9a0 20 72 6f 6f 74 20 70 61 67 65 20 74 68 61 74 20   root page that 
2a9b0 6d 6f 76 65 64 20 2d 20 69 74 73 20 76 61 6c 75  moved - its valu
2a9c0 65 20 62 65 66 6f 72 65 20 74 68 65 20 6d 6f 76  e before the mov
2a9d0 65 20 6f 63 63 75 72 72 65 64 20 2d 0a 2a 2a 20  e occurred -.** 
2a9e0 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
2a9f0 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 6e 6f  ister P2.  If no
2aa00 20 70 61 67 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65   page .** moveme
2aa10 6e 74 20 77 61 73 20 72 65 71 75 69 72 65 64 20  nt was required 
2aa20 28 62 65 63 61 75 73 65 20 74 68 65 20 74 61 62  (because the tab
2aa30 6c 65 20 62 65 69 6e 67 20 64 72 6f 70 70 65 64  le being dropped
2aa40 20 77 61 73 20 61 6c 72 65 61 64 79 20 0a 2a 2a   was already .**
2aa50 20 74 68 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e   the last one in
2aa60 20 74 68 65 20 64 61 74 61 62 61 73 65 29 20 74   the database) t
2aa70 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74  hen a zero is st
2aa80 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
2aa90 20 50 32 2e 0a 2a 2a 20 49 66 20 41 55 54 4f 56   P2..** If AUTOV
2aaa0 41 43 55 55 4d 20 69 73 20 64 69 73 61 62 6c 65  ACUUM is disable
2aab0 64 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73  d then a zero is
2aac0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
2aad0 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65  ter P2..**.** Se
2aae0 65 20 61 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f  e also: Clear.*/
2aaf0 0a 63 61 73 65 20 4f 50 5f 44 65 73 74 72 6f 79  .case OP_Destroy
2ab00 3a 20 7b 20 20 20 20 20 2f 2a 20 6f 75 74 32 20  : {     /* out2 
2ab10 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64 3b  */.  int iMoved;
2ab20 0a 20 20 69 6e 74 20 69 44 62 3b 0a 0a 20 20 61  .  int iDb;..  a
2ab30 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
2ab40 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ly==0 );.  asser
2ab50 74 28 20 70 4f 70 2d 3e 70 31 3e 31 20 29 3b 0a  t( pOp->p1>1 );.
2ab60 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
2ab70 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
2ab80 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
2ab90 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28   MEM_Null;.  if(
2aba0 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 20 3e   db->nVdbeRead >
2abb0 20 64 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2b 31   db->nVDestroy+1
2abc0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
2abd0 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20  ITE_LOCKED;.    
2abe0 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d  p->errorAction =
2abf0 20 4f 45 5f 41 62 6f 72 74 3b 0a 20 20 20 20 67   OE_Abort;.    g
2ac00 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2ac10 5f 65 72 72 6f 72 3b 0a 20 20 7d 65 6c 73 65 7b  _error;.  }else{
2ac20 0a 20 20 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  .    iDb = pOp->
2ac30 70 33 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  p3;.    assert( 
2ac40 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
2ac50 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b  reeMask, iDb) );
2ac60 0a 20 20 20 20 69 4d 6f 76 65 64 20 3d 20 30 3b  .    iMoved = 0;
2ac70 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e    /* Not needed.
2ac80 20 20 4f 6e 6c 79 20 74 6f 20 73 69 6c 65 6e 63    Only to silenc
2ac90 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a  e a warning. */.
2aca0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2acb0 42 74 72 65 65 44 72 6f 70 54 61 62 6c 65 28 64  BtreeDropTable(d
2acc0 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c  b->aDb[iDb].pBt,
2acd0 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f 76 65   pOp->p1, &iMove
2ace0 64 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c  d);.    pOut->fl
2acf0 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
2ad00 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69     pOut->u.i = i
2ad10 4d 6f 76 65 64 3b 0a 20 20 20 20 69 66 28 20 72  Moved;.    if( r
2ad20 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
2ad30 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 69 66  ue_to_error;.#if
2ad40 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2ad50 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 20 20  _AUTOVACUUM.    
2ad60 69 66 28 20 69 4d 6f 76 65 64 21 3d 30 20 29 7b  if( iMoved!=0 ){
2ad70 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f  .      sqlite3Ro
2ad80 6f 74 50 61 67 65 4d 6f 76 65 64 28 64 62 2c 20  otPageMoved(db, 
2ad90 69 44 62 2c 20 69 4d 6f 76 65 64 2c 20 70 4f 70  iDb, iMoved, pOp
2ada0 2d 3e 70 31 29 3b 0a 20 20 20 20 20 20 2f 2a 20  ->p1);.      /* 
2adb0 41 6c 6c 20 4f 50 5f 44 65 73 74 72 6f 79 20 6f  All OP_Destroy o
2adc0 70 65 72 61 74 69 6f 6e 73 20 6f 63 63 75 72 20  perations occur 
2add0 6f 6e 20 74 68 65 20 73 61 6d 65 20 62 74 72 65  on the same btre
2ade0 65 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72  e */.      asser
2adf0 74 28 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e  t( resetSchemaOn
2ae00 46 61 75 6c 74 3d 3d 30 20 7c 7c 20 72 65 73 65  Fault==0 || rese
2ae10 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d  tSchemaOnFault==
2ae20 69 44 62 2b 31 20 29 3b 0a 20 20 20 20 20 20 72  iDb+1 );.      r
2ae30 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c  esetSchemaOnFaul
2ae40 74 20 3d 20 69 44 62 2b 31 3b 0a 20 20 20 20 7d  t = iDb+1;.    }
2ae50 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72  .#endif.  }.  br
2ae60 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2ae70 65 3a 20 43 6c 65 61 72 20 50 31 20 50 32 20 50  e: Clear P1 P2 P
2ae80 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61  3.**.** Delete a
2ae90 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74  ll contents of t
2aea0 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
2aeb0 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65  e or index whose
2aec0 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e   root page.** in
2aed0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
2aee0 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20 50  le is given by P
2aef0 31 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20  1.  But, unlike 
2af00 44 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a  Destroy, do not.
2af10 2a 2a 20 72 65 6d 6f 76 65 20 74 68 65 20 74 61  ** remove the ta
2af20 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 72 6f  ble or index fro
2af30 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  m the database f
2af40 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74  ile..**.** The t
2af50 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72  able being clear
2af60 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20   is in the main 
2af70 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
2af80 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50   P2==0.  If.** P
2af90 32 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61  2==1 then the ta
2afa0 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20  ble to be clear 
2afb0 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69  is in the auxili
2afc0 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
2afd0 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65  e.** that is use
2afe0 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65  d to store table
2aff0 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43  s create using C
2b000 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20  REATE TEMPORARY 
2b010 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  TABLE..**.** If 
2b020 74 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20  the P3 value is 
2b030 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74  non-zero, then t
2b040 68 65 20 74 61 62 6c 65 20 72 65 66 65 72 72 65  he table referre
2b050 64 20 74 6f 20 6d 75 73 74 20 62 65 20 61 6e 0a  d to must be an.
2b060 2a 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c 65 20  ** intkey table 
2b070 28 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20 6e  (an SQL table, n
2b080 6f 74 20 61 6e 20 69 6e 64 65 78 29 2e 20 49 6e  ot an index). In
2b090 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20 72   this case the r
2b0a0 6f 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63 6f  ow change .** co
2b0b0 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  unt is increment
2b0c0 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72  ed by the number
2b0d0 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20   of rows in the 
2b0e0 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61  table being clea
2b0f0 72 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20 69  red. .** If P3 i
2b100 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a  s greater than z
2b110 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 76 61  ero, then the va
2b120 6c 75 65 20 73 74 6f 72 65 64 20 69 6e 20 72 65  lue stored in re
2b130 67 69 73 74 65 72 20 50 33 20 69 73 0a 2a 2a 20  gister P3 is.** 
2b140 61 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65 64  also incremented
2b150 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   by the number o
2b160 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61  f rows in the ta
2b170 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65  ble being cleare
2b180 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  d..**.** See als
2b190 6f 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63 61  o: Destroy.*/.ca
2b1a0 73 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a 20  se OP_Clear: {. 
2b1b0 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20 0a   int nChange;. .
2b1c0 20 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20    nChange = 0;. 
2b1d0 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
2b1e0 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73 73  Only==0 );.  ass
2b1f0 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
2b200 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f  p->btreeMask, pO
2b210 70 2d 3e 70 32 29 20 29 3b 0a 20 20 72 63 20 3d  p->p2) );.  rc =
2b220 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65   sqlite3BtreeCle
2b230 61 72 54 61 62 6c 65 28 0a 20 20 20 20 20 20 64  arTable(.      d
2b240 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e  b->aDb[pOp->p2].
2b250 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28 70  pBt, pOp->p1, (p
2b260 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e 67  Op->p3 ? &nChang
2b270 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69 66  e : 0).  );.  if
2b280 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20  ( pOp->p3 ){.   
2b290 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20 6e   p->nChange += n
2b2a0 43 68 61 6e 67 65 3b 0a 20 20 20 20 69 66 28 20  Change;.    if( 
2b2b0 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20  pOp->p3>0 ){.   
2b2c0 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
2b2d0 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d  Valid(&aMem[pOp-
2b2e0 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 6d  >p3]) );.      m
2b2f0 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
2b300 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  p, &aMem[pOp->p3
2b310 5d 29 3b 0a 20 20 20 20 20 20 61 4d 65 6d 5b 70  ]);.      aMem[p
2b320 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e  Op->p3].u.i += n
2b330 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20 20  Change;.    }.  
2b340 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  }.  if( rc ) got
2b350 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2b360 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
2b370 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73  ../* Opcode: Res
2b380 65 74 53 6f 72 74 65 72 20 50 31 20 2a 20 2a 20  etSorter P1 * * 
2b390 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65  * *.**.** Delete
2b3a0 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 66 72   all contents fr
2b3b0 6f 6d 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c  om the ephemeral
2b3c0 20 74 61 62 6c 65 20 6f 72 20 73 6f 72 74 65 72   table or sorter
2b3d0 0a 2a 2a 20 74 68 61 74 20 69 73 20 6f 70 65 6e  .** that is open
2b3e0 20 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a   on cursor P1..*
2b3f0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
2b400 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20   only works for 
2b410 63 75 72 73 6f 72 73 20 75 73 65 64 20 66 6f 72  cursors used for
2b420 20 73 6f 72 74 69 6e 67 20 61 6e 64 0a 2a 2a 20   sorting and.** 
2b430 6f 70 65 6e 65 64 20 77 69 74 68 20 4f 50 5f 4f  opened with OP_O
2b440 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 72 20  penEphemeral or 
2b450 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 2e 0a 2a  OP_SorterOpen..*
2b460 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74 53  /.case OP_ResetS
2b470 6f 72 74 65 72 3a 20 7b 0a 20 20 56 64 62 65 43  orter: {.  VdbeC
2b480 75 72 73 6f 72 20 2a 70 43 3b 0a 20 0a 20 20 61  ursor *pC;. .  a
2b490 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2b4a0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
2b4b0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
2b4c0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2b4d0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2b4e0 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 73  C!=0 );.  if( is
2b4f0 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20  Sorter(pC) ){.  
2b500 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72    sqlite3VdbeSor
2b510 74 65 72 52 65 73 65 74 28 64 62 2c 20 70 43 2d  terReset(db, pC-
2b520 3e 75 63 2e 70 53 6f 72 74 65 72 29 3b 0a 20 20  >uc.pSorter);.  
2b530 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
2b540 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
2b550 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
2b560 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
2b570 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 29 3b  ->isEphemeral );
2b580 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
2b590 33 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65  3BtreeClearTable
2b5a0 4f 66 43 75 72 73 6f 72 28 70 43 2d 3e 75 63 2e  OfCursor(pC->uc.
2b5b0 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 69 66  pCursor);.    if
2b5c0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
2b5d0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2b5e0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2b5f0 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74  /* Opcode: Creat
2b600 65 54 61 62 6c 65 20 50 31 20 50 32 20 2a 20 2a  eTable P1 P2 * *
2b610 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2b620 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50  r[P2]=root iDb=P
2b630 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65  1.**.** Allocate
2b640 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20   a new table in 
2b650 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
2b660 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20  e file if P1==0 
2b670 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78  or in the.** aux
2b680 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20  iliary database 
2b690 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72  file if P1==1 or
2b6a0 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20   in an attached 
2b6b0 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50  database if.** P
2b6c0 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65 20  1>1.  Write the 
2b6d0 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
2b6e0 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c   of the new tabl
2b6f0 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74  e into.** regist
2b700 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20  er P2.**.** The 
2b710 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
2b720 65 6e 20 61 20 74 61 62 6c 65 20 61 6e 64 20 61  en a table and a
2b730 6e 20 69 6e 64 65 78 20 69 73 20 74 68 69 73 3a  n index is this:
2b740 20 20 41 20 74 61 62 6c 65 20 6d 75 73 74 0a 2a    A table must.*
2b750 2a 20 68 61 76 65 20 61 20 34 2d 62 79 74 65 20  * have a 4-byte 
2b760 69 6e 74 65 67 65 72 20 6b 65 79 20 61 6e 64 20  integer key and 
2b770 63 61 6e 20 68 61 76 65 20 61 72 62 69 74 72 61  can have arbitra
2b780 72 79 20 64 61 74 61 2e 20 20 41 6e 20 69 6e 64  ry data.  An ind
2b790 65 78 0a 2a 2a 20 68 61 73 20 61 6e 20 61 72 62  ex.** has an arb
2b7a0 69 74 72 61 72 79 20 6b 65 79 20 62 75 74 20 6e  itrary key but n
2b7b0 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65  o data..**.** Se
2b7c0 65 20 61 6c 73 6f 3a 20 43 72 65 61 74 65 49 6e  e also: CreateIn
2b7d0 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  dex.*/./* Opcode
2b7e0 3a 20 43 72 65 61 74 65 49 6e 64 65 78 20 50 31  : CreateIndex P1
2b7f0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
2b800 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f  opsis: r[P2]=roo
2b810 74 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41  t iDb=P1.**.** A
2b820 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 69 6e  llocate a new in
2b830 64 65 78 20 69 6e 20 74 68 65 20 6d 61 69 6e 20  dex in the main 
2b840 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
2b850 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65   P1==0 or in the
2b860 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61  .** auxiliary da
2b870 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
2b880 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74  1==1 or in an at
2b890 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20  tached database 
2b8a0 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69  if.** P1>1.  Wri
2b8b0 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  te the root page
2b8c0 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e   number of the n
2b8d0 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a  ew table into.**
2b8e0 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
2b8f0 0a 2a 2a 20 53 65 65 20 64 6f 63 75 6d 65 6e 74  .** See document
2b900 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65 61  ation on OP_Crea
2b910 74 65 54 61 62 6c 65 20 66 6f 72 20 61 64 64 69  teTable for addi
2b920 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
2b930 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  on..*/.case OP_C
2b940 72 65 61 74 65 49 6e 64 65 78 3a 20 20 20 20 20  reateIndex:     
2b950 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
2b960 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65  /.case OP_Create
2b970 54 61 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20  Table: {        
2b980 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69    /* out2 */.  i
2b990 6e 74 20 70 67 6e 6f 3b 0a 20 20 69 6e 74 20 66  nt pgno;.  int f
2b9a0 6c 61 67 73 3b 0a 20 20 44 62 20 2a 70 44 62 3b  lags;.  Db *pDb;
2b9b0 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ..  pOut = out2P
2b9c0 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
2b9d0 29 3b 0a 20 20 70 67 6e 6f 20 3d 20 30 3b 0a 20  );.  pgno = 0;. 
2b9e0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
2b9f0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
2ba00 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
2ba10 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
2ba20 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70  ->btreeMask, pOp
2ba30 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72  ->p1) );.  asser
2ba40 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
2ba50 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62  0 );.  pDb = &db
2ba60 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  ->aDb[pOp->p1];.
2ba70 20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70    assert( pDb->p
2ba80 42 74 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70  Bt!=0 );.  if( p
2ba90 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43  Op->opcode==OP_C
2baa0 72 65 61 74 65 54 61 62 6c 65 20 29 7b 0a 20 20  reateTable ){.  
2bab0 20 20 2f 2a 20 66 6c 61 67 73 20 3d 20 42 54 52    /* flags = BTR
2bac0 45 45 5f 49 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20  EE_INTKEY; */.  
2bad0 20 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f    flags = BTREE_
2bae0 49 4e 54 4b 45 59 3b 0a 20 20 7d 65 6c 73 65 7b  INTKEY;.  }else{
2baf0 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42 54 52  .    flags = BTR
2bb00 45 45 5f 42 4c 4f 42 4b 45 59 3b 0a 20 20 7d 0a  EE_BLOBKEY;.  }.
2bb10 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
2bb20 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70  reeCreateTable(p
2bb30 44 62 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20  Db->pBt, &pgno, 
2bb40 66 6c 61 67 73 29 3b 0a 20 20 69 66 28 20 72 63  flags);.  if( rc
2bb50 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2bb60 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 4f  e_to_error;.  pO
2bb70 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a  ut->u.i = pgno;.
2bb80 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2bb90 70 63 6f 64 65 3a 20 50 61 72 73 65 53 63 68 65  pcode: ParseSche
2bba0 6d 61 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  ma P1 * * P4 *.*
2bbb0 2a 0a 2a 2a 20 52 65 61 64 20 61 6e 64 20 70 61  *.** Read and pa
2bbc0 72 73 65 20 61 6c 6c 20 65 6e 74 72 69 65 73 20  rse all entries 
2bbd0 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54 45 5f  from the SQLITE_
2bbe0 4d 41 53 54 45 52 20 74 61 62 6c 65 20 6f 66 20  MASTER table of 
2bbf0 64 61 74 61 62 61 73 65 20 50 31 0a 2a 2a 20 74  database P1.** t
2bc00 68 61 74 20 6d 61 74 63 68 20 74 68 65 20 57 48  hat match the WH
2bc10 45 52 45 20 63 6c 61 75 73 65 20 50 34 2e 20 0a  ERE clause P4. .
2bc20 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
2bc30 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 70 61  e invokes the pa
2bc40 72 73 65 72 20 74 6f 20 63 72 65 61 74 65 20 61  rser to create a
2bc50 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63   new virtual mac
2bc60 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 75  hine,.** then ru
2bc70 6e 73 20 74 68 65 20 6e 65 77 20 76 69 72 74 75  ns the new virtu
2bc80 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 74 20  al machine.  It 
2bc90 69 73 20 74 68 75 73 20 61 20 72 65 2d 65 6e 74  is thus a re-ent
2bca0 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a  rant opcode..*/.
2bcb0 63 61 73 65 20 4f 50 5f 50 61 72 73 65 53 63 68  case OP_ParseSch
2bcc0 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20 69 44 62  ema: {.  int iDb
2bcd0 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
2bce0 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68 61 72 20  zMaster;.  char 
2bcf0 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74 44 61 74  *zSql;.  InitDat
2bd00 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20 2f  a initData;..  /
2bd10 2a 20 41 6e 79 20 70 72 65 70 61 72 65 64 20 73  * Any prepared s
2bd20 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 69 6e  tatement that in
2bd30 76 6f 6b 65 73 20 74 68 69 73 20 6f 70 63 6f 64  vokes this opcod
2bd40 65 20 77 69 6c 6c 20 68 6f 6c 64 20 6d 75 74 65  e will hold mute
2bd50 78 65 73 0a 20 20 2a 2a 20 6f 6e 20 65 76 65 72  xes.  ** on ever
2bd60 79 20 62 74 72 65 65 2e 20 20 54 68 69 73 20 69  y btree.  This i
2bd70 73 20 61 20 70 72 65 72 65 71 75 69 73 69 74 65  s a prerequisite
2bd80 20 66 6f 72 20 69 6e 76 6f 6b 69 6e 67 20 0a 20   for invoking . 
2bd90 20 2a 2a 20 73 71 6c 69 74 65 33 49 6e 69 74 43   ** sqlite3InitC
2bda0 61 6c 6c 62 61 63 6b 28 29 2e 0a 20 20 2a 2f 0a  allback()..  */.
2bdb0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
2bdc0 42 55 47 0a 20 20 66 6f 72 28 69 44 62 3d 30 3b  BUG.  for(iDb=0;
2bdd0 20 69 44 62 3c 64 62 2d 3e 6e 44 62 3b 20 69 44   iDb<db->nDb; iD
2bde0 62 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  b++){.    assert
2bdf0 28 20 69 44 62 3d 3d 31 20 7c 7c 20 73 71 6c 69  ( iDb==1 || sqli
2be00 74 65 33 42 74 72 65 65 48 6f 6c 64 73 4d 75 74  te3BtreeHoldsMut
2be10 65 78 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  ex(db->aDb[iDb].
2be20 70 42 74 29 20 29 3b 0a 20 20 7d 0a 23 65 6e 64  pBt) );.  }.#end
2be30 69 66 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d  if..  iDb = pOp-
2be40 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69  >p1;.  assert( i
2be50 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d  Db>=0 && iDb<db-
2be60 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
2be70 28 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28  ( DbHasProperty(
2be80 64 62 2c 20 69 44 62 2c 20 44 42 5f 53 63 68 65  db, iDb, DB_Sche
2be90 6d 61 4c 6f 61 64 65 64 29 20 29 3b 0a 20 20 2f  maLoaded) );.  /
2bea0 2a 20 55 73 65 64 20 74 6f 20 62 65 20 61 20 63  * Used to be a c
2beb0 6f 6e 64 69 74 69 6f 6e 61 6c 20 2a 2f 20 7b 0a  onditional */ {.
2bec0 20 20 20 20 7a 4d 61 73 74 65 72 20 3d 20 53 43      zMaster = SC
2bed0 48 45 4d 41 5f 54 41 42 4c 45 28 69 44 62 29 3b  HEMA_TABLE(iDb);
2bee0 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 64 62  .    initData.db
2bef0 20 3d 20 64 62 3b 0a 20 20 20 20 69 6e 69 74 44   = db;.    initD
2bf00 61 74 61 2e 69 44 62 20 3d 20 70 4f 70 2d 3e 70  ata.iDb = pOp->p
2bf10 31 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e  1;.    initData.
2bf20 70 7a 45 72 72 4d 73 67 20 3d 20 26 70 2d 3e 7a  pzErrMsg = &p->z
2bf30 45 72 72 4d 73 67 3b 0a 20 20 20 20 7a 53 71 6c  ErrMsg;.    zSql
2bf40 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74   = sqlite3MPrint
2bf50 66 28 64 62 2c 0a 20 20 20 20 20 20 20 22 53 45  f(db,.       "SE
2bf60 4c 45 43 54 20 6e 61 6d 65 2c 20 72 6f 6f 74 70  LECT name, rootp
2bf70 61 67 65 2c 20 73 71 6c 20 46 52 4f 4d 20 27 25  age, sql FROM '%
2bf80 71 27 2e 25 73 20 57 48 45 52 45 20 25 73 20 4f  q'.%s WHERE %s O
2bf90 52 44 45 52 20 42 59 20 72 6f 77 69 64 22 2c 0a  RDER BY rowid",.
2bfa0 20 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69         db->aDb[i
2bfb0 44 62 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d 61 73 74  Db].zName, zMast
2bfc0 65 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  er, pOp->p4.z);.
2bfd0 20 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20      if( zSql==0 
2bfe0 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
2bff0 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 3b  LITE_NOMEM_BKPT;
2c000 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
2c010 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 69 6e    assert( db->in
2c020 69 74 2e 62 75 73 79 3d 3d 30 20 29 3b 0a 20 20  it.busy==0 );.  
2c030 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73      db->init.bus
2c040 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 69 6e 69  y = 1;.      ini
2c050 74 44 61 74 61 2e 72 63 20 3d 20 53 51 4c 49 54  tData.rc = SQLIT
2c060 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 61 73 73 65  E_OK;.      asse
2c070 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46  rt( !db->mallocF
2c080 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 20 20 72  ailed );.      r
2c090 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63  c = sqlite3_exec
2c0a0 28 64 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74  (db, zSql, sqlit
2c0b0 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20  e3InitCallback, 
2c0c0 26 69 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a 20  &initData, 0);. 
2c0d0 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
2c0e0 49 54 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e  ITE_OK ) rc = in
2c0f0 69 74 44 61 74 61 2e 72 63 3b 0a 20 20 20 20 20  itData.rc;.     
2c100 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
2c110 62 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20  b, zSql);.      
2c120 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20  db->init.busy = 
2c130 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  0;.    }.  }.  i
2c140 66 28 20 72 63 20 29 7b 0a 20 20 20 20 73 71 6c  f( rc ){.    sql
2c150 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65  ite3ResetAllSche
2c160 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28  masOfConnection(
2c170 64 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  db);.    if( rc=
2c180 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b  =SQLITE_NOMEM ){
2c190 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  .      goto no_m
2c1a0 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f  em;.    }.    go
2c1b0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2c1c0 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65  error;.  }.  bre
2c1d0 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20 21 64 65  ak;  .}..#if !de
2c1e0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2c1f0 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a 20 4f 70  T_ANALYZE)./* Op
2c200 63 6f 64 65 3a 20 4c 6f 61 64 41 6e 61 6c 79 73  code: LoadAnalys
2c210 69 73 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  is P1 * * * *.**
2c220 0a 2a 2a 20 52 65 61 64 20 74 68 65 20 73 71 6c  .** Read the sql
2c230 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20  ite_stat1 table 
2c240 66 6f 72 20 64 61 74 61 62 61 73 65 20 50 31 20  for database P1 
2c250 61 6e 64 20 6c 6f 61 64 20 74 68 65 20 63 6f 6e  and load the con
2c260 74 65 6e 74 0a 2a 2a 20 6f 66 20 74 68 61 74 20  tent.** of that 
2c270 74 61 62 6c 65 20 69 6e 74 6f 20 74 68 65 20 69  table into the i
2c280 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 20 68 61  nternal index ha
2c290 73 68 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20  sh table.  This 
2c2a0 77 69 6c 6c 20 63 61 75 73 65 0a 2a 2a 20 74 68  will cause.** th
2c2b0 65 20 61 6e 61 6c 79 73 69 73 20 74 6f 20 62 65  e analysis to be
2c2c0 20 75 73 65 64 20 77 68 65 6e 20 70 72 65 70 61   used when prepa
2c2d0 72 69 6e 67 20 61 6c 6c 20 73 75 62 73 65 71 75  ring all subsequ
2c2e0 65 6e 74 20 71 75 65 72 69 65 73 2e 0a 2a 2f 0a  ent queries..*/.
2c2f0 63 61 73 65 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c  case OP_LoadAnal
2c300 79 73 69 73 3a 20 7b 0a 20 20 61 73 73 65 72 74  ysis: {.  assert
2c310 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
2c320 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
2c330 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
2c340 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 64 62  3AnalysisLoad(db
2c350 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 69 66  , pOp->p1);.  if
2c360 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
2c370 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2c380 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e    break;  .}.#en
2c390 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28  dif /* !defined(
2c3a0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c  SQLITE_OMIT_ANAL
2c3b0 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  YZE) */../* Opco
2c3c0 64 65 3a 20 44 72 6f 70 54 61 62 6c 65 20 50 31  de: DropTable P1
2c3d0 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
2c3e0 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72  Remove the inter
2c3f0 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20  nal (in-memory) 
2c400 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20  data structures 
2c410 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a  that describe.**
2c420 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64   the table named
2c430 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20   P4 in database 
2c440 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c  P1.  This is cal
2c450 6c 65 64 20 61 66 74 65 72 20 61 20 74 61 62 6c  led after a tabl
2c460 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20  e.** is dropped 
2c470 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67  from disk (using
2c480 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63   the Destroy opc
2c490 6f 64 65 29 20 69 6e 20 6f 72 64 65 72 20 74 6f  ode) in order to
2c4a0 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e   keep .** the in
2c4b0 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74  ternal represent
2c4c0 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
2c4d0 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e  schema consisten
2c4e0 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f  t with what is o
2c4f0 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20  n disk..*/.case 
2c500 4f 50 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a  OP_DropTable: {.
2c510 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41    sqlite3UnlinkA
2c520 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28 64 62  ndDeleteTable(db
2c530 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
2c540 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  p4.z);.  break;.
2c550 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72  }../* Opcode: Dr
2c560 6f 70 49 6e 64 65 78 20 50 31 20 2a 20 2a 20 50  opIndex P1 * * P
2c570 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65  4 *.**.** Remove
2c580 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69   the internal (i
2c590 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73  n-memory) data s
2c5a0 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64  tructures that d
2c5b0 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 69  escribe.** the i
2c5c0 6e 64 65 78 20 6e 61 6d 65 64 20 50 34 20 69 6e  ndex named P4 in
2c5d0 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54   database P1.  T
2c5e0 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66  his is called af
2c5f0 74 65 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20  ter an index.** 
2c600 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20  is dropped from 
2c610 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20  disk (using the 
2c620 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 0a  Destroy opcode).
2c630 2a 2a 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b  ** in order to k
2c640 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  eep the internal
2c650 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2c660 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  of the.** schema
2c670 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68   consistent with
2c680 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b   what is on disk
2c690 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f  ..*/.case OP_Dro
2c6a0 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c 69  pIndex: {.  sqli
2c6b0 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
2c6c0 74 65 49 6e 64 65 78 28 64 62 2c 20 70 4f 70 2d  teIndex(db, pOp-
2c6d0 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  >p1, pOp->p4.z);
2c6e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2c6f0 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 72 69 67  Opcode: DropTrig
2c700 67 65 72 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ger P1 * * P4 *.
2c710 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65  **.** Remove the
2c720 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65   internal (in-me
2c730 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63  mory) data struc
2c740 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72  tures that descr
2c750 69 62 65 0a 2a 2a 20 74 68 65 20 74 72 69 67 67  ibe.** the trigg
2c760 65 72 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64  er named P4 in d
2c770 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69  atabase P1.  Thi
2c780 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65  s is called afte
2c790 72 20 61 20 74 72 69 67 67 65 72 0a 2a 2a 20 69  r a trigger.** i
2c7a0 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64  s dropped from d
2c7b0 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44  isk (using the D
2c7c0 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 20 69  estroy opcode) i
2c7d0 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20  n order to keep 
2c7e0 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  .** the internal
2c7f0 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2c800 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  of the.** schema
2c810 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68   consistent with
2c820 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b   what is on disk
2c830 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f  ..*/.case OP_Dro
2c840 70 54 72 69 67 67 65 72 3a 20 7b 0a 20 20 73 71  pTrigger: {.  sq
2c850 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
2c860 6c 65 74 65 54 72 69 67 67 65 72 28 64 62 2c 20  leteTrigger(db, 
2c870 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
2c880 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .z);.  break;.}.
2c890 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2c8a0 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f  _OMIT_INTEGRITY_
2c8b0 43 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a  CHECK./* Opcode:
2c8c0 20 49 6e 74 65 67 72 69 74 79 43 6b 20 50 31 20   IntegrityCk P1 
2c8d0 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a  P2 P3 * P5.**.**
2c8e0 20 44 6f 20 61 6e 20 61 6e 61 6c 79 73 69 73 20   Do an analysis 
2c8f0 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79  of the currently
2c900 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65 2e 20   open database. 
2c910 20 53 74 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67   Store in.** reg
2c920 69 73 74 65 72 20 50 31 20 74 68 65 20 74 65 78  ister P1 the tex
2c930 74 20 6f 66 20 61 6e 20 65 72 72 6f 72 20 6d 65  t of an error me
2c940 73 73 61 67 65 20 64 65 73 63 72 69 62 69 6e 67  ssage describing
2c950 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a   any problems..*
2c960 2a 20 49 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73  * If no problems
2c970 20 61 72 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72   are found, stor
2c980 65 20 61 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69  e a NULL in regi
2c990 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54  ster P1..**.** T
2c9a0 68 65 20 72 65 67 69 73 74 65 72 20 50 33 20 63  he register P3 c
2c9b0 6f 6e 74 61 69 6e 73 20 74 68 65 20 6d 61 78 69  ontains the maxi
2c9c0 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c  mum number of al
2c9d0 6c 6f 77 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a  lowed errors..**
2c9e0 20 41 74 20 6d 6f 73 74 20 72 65 67 28 50 33 29   At most reg(P3)
2c9f0 20 65 72 72 6f 72 73 20 77 69 6c 6c 20 62 65 20   errors will be 
2ca00 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20  reported..** In 
2ca10 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
2ca20 20 61 6e 61 6c 79 73 69 73 20 73 74 6f 70 73 20   analysis stops 
2ca30 61 73 20 73 6f 6f 6e 20 61 73 20 72 65 67 28 50  as soon as reg(P
2ca40 31 29 20 65 72 72 6f 72 73 20 61 72 65 20 0a 2a  1) errors are .*
2ca50 2a 20 73 65 65 6e 2e 20 20 52 65 67 28 50 31 29  * seen.  Reg(P1)
2ca60 20 69 73 20 75 70 64 61 74 65 64 20 77 69 74 68   is updated with
2ca70 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65   the number of e
2ca80 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e  rrors remaining.
2ca90 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20  .**.** The root 
2caa0 70 61 67 65 20 6e 75 6d 62 65 72 73 20 6f 66 20  page numbers of 
2cab0 61 6c 6c 20 74 61 62 6c 65 73 20 69 6e 20 74 68  all tables in th
2cac0 65 20 64 61 74 61 62 61 73 65 20 61 72 65 20 69  e database are i
2cad0 6e 74 65 67 65 72 0a 2a 2a 20 73 74 6f 72 65 64  nteger.** stored
2cae0 20 69 6e 20 72 65 67 28 50 31 29 2c 20 72 65 67   in reg(P1), reg
2caf0 28 50 31 2b 31 29 2c 20 72 65 67 28 50 31 2b 32  (P1+1), reg(P1+2
2cb00 29 2c 20 2e 2e 2e 2e 20 20 54 68 65 72 65 20 61  ), ....  There a
2cb10 72 65 20 50 32 20 74 61 62 6c 65 73 0a 2a 2a 20  re P2 tables.** 
2cb20 74 6f 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  total..**.** If 
2cb30 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P5 is not zero, 
2cb40 74 68 65 20 63 68 65 63 6b 20 69 73 20 64 6f 6e  the check is don
2cb50 65 20 6f 6e 20 74 68 65 20 61 75 78 69 6c 69 61  e on the auxilia
2cb60 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66  ry database.** f
2cb70 69 6c 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69  ile, not the mai
2cb80 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  n database file.
2cb90 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
2cba0 64 65 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d  de is used to im
2cbb0 70 6c 65 6d 65 6e 74 20 74 68 65 20 69 6e 74 65  plement the inte
2cbc0 67 72 69 74 79 5f 63 68 65 63 6b 20 70 72 61 67  grity_check prag
2cbd0 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ma..*/.case OP_I
2cbe0 6e 74 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20  ntegrityCk: {.  
2cbf0 69 6e 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20  int nRoot;      
2cc00 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62  /* Number of tab
2cc10 6c 65 73 20 74 6f 20 63 68 65 63 6b 2e 20 20 28  les to check.  (
2cc20 4e 75 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20 70  Number of root p
2cc30 61 67 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20  ages.) */.  int 
2cc40 2a 61 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41  *aRoot;     /* A
2cc50 72 72 61 79 20 6f 66 20 72 6f 6f 74 70 61 67 65  rray of rootpage
2cc60 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 74 61 62   numbers for tab
2cc70 6c 65 73 20 74 6f 20 62 65 20 63 68 65 63 6b 65  les to be checke
2cc80 64 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20  d */.  int j;   
2cc90 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
2cca0 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20  ounter */.  int 
2ccb0 6e 45 72 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e  nErr;       /* N
2ccc0 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20  umber of errors 
2ccd0 72 65 70 6f 72 74 65 64 20 2a 2f 0a 20 20 63 68  reported */.  ch
2cce0 61 72 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a  ar *z;        /*
2ccf0 20 54 65 78 74 20 6f 66 20 74 68 65 20 65 72 72   Text of the err
2cd00 6f 72 20 72 65 70 6f 72 74 20 2a 2f 0a 20 20 4d  or report */.  M
2cd10 65 6d 20 2a 70 6e 45 72 72 3b 20 20 20 20 20 2f  em *pnErr;     /
2cd20 2a 20 52 65 67 69 73 74 65 72 20 6b 65 65 70 69  * Register keepi
2cd30 6e 67 20 74 72 61 63 6b 20 6f 66 20 65 72 72 6f  ng track of erro
2cd40 72 73 20 72 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a  rs remaining */.
2cd50 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
2cd60 73 52 65 61 64 65 72 20 29 3b 0a 20 20 6e 52 6f  sReader );.  nRo
2cd70 6f 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  ot = pOp->p2;.  
2cd80 61 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20  assert( nRoot>0 
2cd90 29 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 73 71 6c  );.  aRoot = sql
2cda0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e  ite3DbMallocRawN
2cdb0 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28 69 6e 74  N(db, sizeof(int
2cdc0 29 2a 28 6e 52 6f 6f 74 2b 31 29 20 29 3b 0a 20  )*(nRoot+1) );. 
2cdd0 20 69 66 28 20 61 52 6f 6f 74 3d 3d 30 20 29 20   if( aRoot==0 ) 
2cde0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61  goto no_mem;.  a
2cdf0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
2ce00 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d   && pOp->p3<=(p-
2ce10 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
2ce20 29 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20 26  ) );.  pnErr = &
2ce30 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
2ce40 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d   assert( (pnErr-
2ce50 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
2ce60 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )!=0 );.  assert
2ce70 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20  ( (pnErr->flags 
2ce80 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
2ce90 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70 49  lob))==0 );.  pI
2cea0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
2ceb0 70 31 5d 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b 20  p1];.  for(j=0; 
2cec0 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a 20  j<nRoot; j++){. 
2ced0 20 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 28 69     aRoot[j] = (i
2cee0 6e 74 29 73 71 6c 69 74 65 33 56 64 62 65 49 6e  nt)sqlite3VdbeIn
2cef0 74 56 61 6c 75 65 28 26 70 49 6e 31 5b 6a 5d 29  tValue(&pIn1[j])
2cf00 3b 0a 20 20 7d 0a 20 20 61 52 6f 6f 74 5b 6a 5d  ;.  }.  aRoot[j]
2cf10 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
2cf20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20  pOp->p5<db->nDb 
2cf30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
2cf40 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
2cf50 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 35 29 20 29  Mask, pOp->p5) )
2cf60 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 42  ;.  z = sqlite3B
2cf70 74 72 65 65 49 6e 74 65 67 72 69 74 79 43 68 65  treeIntegrityChe
2cf80 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  ck(db->aDb[pOp->
2cf90 70 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20  p5].pBt, aRoot, 
2cfa0 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20 20  nRoot,.         
2cfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cfc0 20 20 20 20 20 20 20 20 28 69 6e 74 29 70 6e 45          (int)pnE
2cfd0 72 72 2d 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b  rr->u.i, &nErr);
2cfe0 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  .  sqlite3DbFree
2cff0 28 64 62 2c 20 61 52 6f 6f 74 29 3b 0a 20 20 70  (db, aRoot);.  p
2d000 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72  nErr->u.i -= nEr
2d010 72 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  r;.  sqlite3Vdbe
2d020 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29  MemSetNull(pIn1)
2d030 3b 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d 30 20  ;.  if( nErr==0 
2d040 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 7a  ){.    assert( z
2d050 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69  ==0 );.  }else i
2d060 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67  f( z==0 ){.    g
2d070 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65  oto no_mem;.  }e
2d080 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
2d090 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 49  VdbeMemSetStr(pI
2d0a0 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54  n1, z, -1, SQLIT
2d0b0 45 5f 55 54 46 38 2c 20 73 71 6c 69 74 65 33 5f  E_UTF8, sqlite3_
2d0c0 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44  free);.  }.  UPD
2d0d0 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
2d0e0 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65  (pIn1);.  sqlite
2d0f0 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
2d100 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69  ing(pIn1, encodi
2d110 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ng);.  break;.}.
2d120 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2d130 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f  _OMIT_INTEGRITY_
2d140 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  CHECK */../* Opc
2d150 6f 64 65 3a 20 52 6f 77 53 65 74 41 64 64 20 50  ode: RowSetAdd P
2d160 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
2d170 6e 6f 70 73 69 73 3a 20 20 72 6f 77 73 65 74 28  nopsis:  rowset(
2d180 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  P1)=r[P2].**.** 
2d190 49 6e 73 65 72 74 20 74 68 65 20 69 6e 74 65 67  Insert the integ
2d1a0 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20 62 79  er value held by
2d1b0 20 72 65 67 69 73 74 65 72 20 50 32 20 69 6e 74   register P2 int
2d1c0 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65  o a boolean inde
2d1d0 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65 67  x.** held in reg
2d1e0 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20  ister P1..**.** 
2d1f0 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 69  An assertion fai
2d200 6c 73 20 69 66 20 50 32 20 69 73 20 6e 6f 74 20  ls if P2 is not 
2d210 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63  an integer..*/.c
2d220 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 41 64 64  ase OP_RowSetAdd
2d230 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 31  : {       /* in1
2d240 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20  , in2 */.  pIn1 
2d250 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2d260 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
2d270 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
2d280 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67  ert( (pIn2->flag
2d290 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
2d2a0 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
2d2b0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
2d2c0 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  et)==0 ){.    sq
2d2d0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52  lite3VdbeMemSetR
2d2e0 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20  owSet(pIn1);.   
2d2f0 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
2d300 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
2d310 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
2d320 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52  ;.  }.  sqlite3R
2d330 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31  owSetInsert(pIn1
2d340 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e  ->u.pRowSet, pIn
2d350 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b  2->u.i);.  break
2d360 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2d370 52 6f 77 53 65 74 52 65 61 64 20 50 31 20 50 32  RowSetRead P1 P2
2d380 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
2d390 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 6f 77 73  sis:  r[P3]=rows
2d3a0 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20 45 78 74  et(P1).**.** Ext
2d3b0 72 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65 73  ract the smalles
2d3c0 74 20 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f 6f  t value from boo
2d3d0 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 61 6e  lean index P1 an
2d3e0 64 20 70 75 74 20 74 68 61 74 20 76 61 6c 75 65  d put that value
2d3f0 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65   into.** registe
2d400 72 20 50 33 2e 20 20 4f 72 2c 20 69 66 20 62 6f  r P3.  Or, if bo
2d410 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 69  olean index P1 i
2d420 73 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74  s initially empt
2d430 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75  y, leave P3.** u
2d440 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d  nchanged and jum
2d450 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
2d460 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
2d470 52 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20 20  RowSetRead: {   
2d480 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
2d490 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20  , out3 */.  i64 
2d4a0 76 61 6c 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26  val;..  pIn1 = &
2d4b0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2d4c0 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
2d4d0 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
2d4e0 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65  =0 .   || sqlite
2d4f0 33 52 6f 77 53 65 74 4e 65 78 74 28 70 49 6e 31  3RowSetNext(pIn1
2d500 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 26 76 61  ->u.pRowSet, &va
2d510 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20 2f  l)==0.  ){.    /
2d520 2a 20 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69 6e  * The boolean in
2d530 64 65 78 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a  dex is empty */.
2d540 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2d550 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b  emSetNull(pIn1);
2d560 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
2d570 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 20 20 67  aken(1,2);.    g
2d580 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61  oto jump_to_p2_a
2d590 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  nd_check_for_int
2d5a0 65 72 72 75 70 74 3b 0a 20 20 7d 65 6c 73 65 7b  errupt;.  }else{
2d5b0 0a 20 20 20 20 2f 2a 20 41 20 76 61 6c 75 65 20  .    /* A value 
2d5c0 77 61 73 20 70 75 6c 6c 65 64 20 66 72 6f 6d 20  was pulled from 
2d5d0 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20  the index */.   
2d5e0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
2d5f0 28 30 2c 32 29 3b 0a 20 20 20 20 73 71 6c 69 74  (0,2);.    sqlit
2d600 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
2d610 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  4(&aMem[pOp->p3]
2d620 2c 20 76 61 6c 29 3b 0a 20 20 7d 0a 20 20 67 6f  , val);.  }.  go
2d630 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  to check_for_int
2d640 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70  errupt;.}../* Op
2d650 63 6f 64 65 3a 20 52 6f 77 53 65 74 54 65 73 74  code: RowSetTest
2d660 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 20   P1 P2 P3 P4.** 
2d670 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
2d680 33 5d 20 69 6e 20 72 6f 77 73 65 74 28 50 31 29  3] in rowset(P1)
2d690 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52   goto P2.**.** R
2d6a0 65 67 69 73 74 65 72 20 50 33 20 69 73 20 61 73  egister P3 is as
2d6b0 73 75 6d 65 64 20 74 6f 20 68 6f 6c 64 20 61 20  sumed to hold a 
2d6c0 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76  64-bit integer v
2d6d0 61 6c 75 65 2e 20 49 66 20 72 65 67 69 73 74 65  alue. If registe
2d6e0 72 20 50 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73  r P1.** contains
2d6f0 20 61 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74   a RowSet object
2d700 20 61 6e 64 20 74 68 61 74 20 52 6f 77 53 65 74   and that RowSet
2d710 20 6f 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73   object contains
2d720 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 68 65  .** the value he
2d730 6c 64 20 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74  ld in P3, jump t
2d740 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 4f  o register P2. O
2d750 74 68 65 72 77 69 73 65 2c 20 69 6e 73 65 72 74  therwise, insert
2d760 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20   the.** integer 
2d770 69 6e 20 50 33 20 69 6e 74 6f 20 74 68 65 20 52  in P3 into the R
2d780 6f 77 53 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e  owSet and contin
2d790 75 65 20 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20  ue on to the.** 
2d7a0 6e 65 78 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a  next opcode..**.
2d7b0 2a 2a 20 54 68 65 20 52 6f 77 53 65 74 20 6f 62  ** The RowSet ob
2d7c0 6a 65 63 74 20 69 73 20 6f 70 74 69 6d 69 7a 65  ject is optimize
2d7d0 64 20 66 6f 72 20 74 68 65 20 63 61 73 65 20 77  d for the case w
2d7e0 68 65 72 65 20 73 75 63 63 65 73 73 69 76 65 20  here successive 
2d7f0 73 65 74 73 0a 2a 2a 20 6f 66 20 69 6e 74 65 67  sets.** of integ
2d800 65 72 73 2c 20 77 68 65 72 65 20 65 61 63 68 20  ers, where each 
2d810 73 65 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20  set contains no 
2d820 64 75 70 6c 69 63 61 74 65 73 2e 20 45 61 63 68  duplicates. Each
2d830 20 73 65 74 0a 2a 2a 20 6f 66 20 76 61 6c 75 65   set.** of value
2d840 73 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20  s is identified 
2d850 62 79 20 61 20 75 6e 69 71 75 65 20 50 34 20 76  by a unique P4 v
2d860 61 6c 75 65 2e 20 54 68 65 20 66 69 72 73 74 20  alue. The first 
2d870 73 65 74 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65  set.** must have
2d880 20 50 34 3d 3d 30 2c 20 74 68 65 20 66 69 6e 61   P4==0, the fina
2d890 6c 20 73 65 74 20 50 34 3d 2d 31 2e 20 20 50 34  l set P4=-1.  P4
2d8a0 20 6d 75 73 74 20 62 65 20 65 69 74 68 65 72 20   must be either 
2d8b0 2d 31 20 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67  -1 or.** non-neg
2d8c0 61 74 69 76 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d  ative.  For non-
2d8d0 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 73 20  negative values 
2d8e0 6f 66 20 50 34 20 6f 6e 6c 79 20 74 68 65 20 6c  of P4 only the l
2d8f0 6f 77 65 72 20 34 0a 2a 2a 20 62 69 74 73 20 61  ower 4.** bits a
2d900 72 65 20 73 69 67 6e 69 66 69 63 61 6e 74 2e 0a  re significant..
2d910 2a 2a 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77  **.** This allow
2d920 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 3a  s optimizations:
2d930 20 28 61 29 20 77 68 65 6e 20 50 34 3d 3d 30 20   (a) when P4==0 
2d940 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64  there is no need
2d950 20 74 6f 20 74 65 73 74 0a 2a 2a 20 74 68 65 20   to test.** the 
2d960 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 66 6f  rowset object fo
2d970 72 20 50 33 2c 20 61 73 20 69 74 20 69 73 20 67  r P3, as it is g
2d980 75 61 72 61 6e 74 65 65 64 20 6e 6f 74 20 74 6f  uaranteed not to
2d990 20 63 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a 20   contain it,.** 
2d9a0 28 62 29 20 77 68 65 6e 20 50 34 3d 3d 2d 31 20  (b) when P4==-1 
2d9b0 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64  there is no need
2d9c0 20 74 6f 20 69 6e 73 65 72 74 20 74 68 65 20 76   to insert the v
2d9d0 61 6c 75 65 2c 20 61 73 20 69 74 20 77 69 6c 6c  alue, as it will
2d9e0 0a 2a 2a 20 6e 65 76 65 72 20 62 65 20 74 65 73  .** never be tes
2d9f0 74 65 64 20 66 6f 72 2c 20 61 6e 64 20 28 63 29  ted for, and (c)
2da00 20 77 68 65 6e 20 61 20 76 61 6c 75 65 20 74 68   when a value th
2da10 61 74 20 69 73 20 70 61 72 74 20 6f 66 20 73 65  at is part of se
2da20 74 20 58 20 69 73 0a 2a 2a 20 69 6e 73 65 72 74  t X is.** insert
2da30 65 64 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ed, there is no 
2da40 6e 65 65 64 20 74 6f 20 73 65 61 72 63 68 20 74  need to search t
2da50 6f 20 73 65 65 20 69 66 20 74 68 65 20 73 61 6d  o see if the sam
2da60 65 20 76 61 6c 75 65 20 77 61 73 0a 2a 2a 20 70  e value was.** p
2da70 72 65 76 69 6f 75 73 6c 79 20 69 6e 73 65 72 74  reviously insert
2da80 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 65  ed as part of se
2da90 74 20 58 20 28 6f 6e 6c 79 20 69 66 20 69 74 20  t X (only if it 
2daa0 77 61 73 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a  was previously.*
2dab0 2a 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61  * inserted as pa
2dac0 72 74 20 6f 66 20 73 6f 6d 65 20 6f 74 68 65 72  rt of some other
2dad0 20 73 65 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f   set)..*/.case O
2dae0 50 5f 52 6f 77 53 65 74 54 65 73 74 3a 20 7b 20  P_RowSetTest: { 
2daf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2db00 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
2db10 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69  , in3 */.  int i
2db20 53 65 74 3b 0a 20 20 69 6e 74 20 65 78 69 73 74  Set;.  int exist
2db30 73 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  s;..  pIn1 = &aM
2db40 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
2db50 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
2db60 3e 70 33 5d 3b 0a 20 20 69 53 65 74 20 3d 20 70  >p3];.  iSet = p
2db70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 61 73 73 65  Op->p4.i;.  asse
2db80 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 26  rt( pIn3->flags&
2db90 4d 45 4d 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a  MEM_Int );..  /*
2dba0 20 49 66 20 74 68 65 72 65 20 69 73 20 61 6e 79   If there is any
2dbb0 74 68 69 6e 67 20 6f 74 68 65 72 20 74 68 61 6e  thing other than
2dbc0 20 61 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74   a rowset object
2dbd0 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   in memory cell 
2dbe0 50 31 2c 0a 20 20 2a 2a 20 64 65 6c 65 74 65 20  P1,.  ** delete 
2dbf0 69 74 20 6e 6f 77 20 61 6e 64 20 69 6e 69 74 69  it now and initi
2dc00 61 6c 69 7a 65 20 50 31 20 77 69 74 68 20 61 6e  alize P1 with an
2dc10 20 65 6d 70 74 79 20 72 6f 77 73 65 74 0a 20 20   empty rowset.  
2dc20 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  */.  if( (pIn1->
2dc30 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
2dc40 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  et)==0 ){.    sq
2dc50 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52  lite3VdbeMemSetR
2dc60 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20  owSet(pIn1);.   
2dc70 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
2dc80 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
2dc90 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
2dca0 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28  ;.  }..  assert(
2dcb0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
2dcc0 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61 73 73 65  _INT32 );.  asse
2dcd0 72 74 28 20 69 53 65 74 3d 3d 2d 31 20 7c 7c 20  rt( iSet==-1 || 
2dce0 69 53 65 74 3e 3d 30 20 29 3b 0a 20 20 69 66 28  iSet>=0 );.  if(
2dcf0 20 69 53 65 74 20 29 7b 0a 20 20 20 20 65 78 69   iSet ){.    exi
2dd00 73 74 73 20 3d 20 73 71 6c 69 74 65 33 52 6f 77  sts = sqlite3Row
2dd10 53 65 74 54 65 73 74 28 70 49 6e 31 2d 3e 75 2e  SetTest(pIn1->u.
2dd20 70 52 6f 77 53 65 74 2c 20 69 53 65 74 2c 20 70  pRowSet, iSet, p
2dd30 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 20 20 56  In3->u.i);.    V
2dd40 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 65  dbeBranchTaken(e
2dd50 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20  xists!=0,2);.   
2dd60 20 69 66 28 20 65 78 69 73 74 73 20 29 20 67 6f   if( exists ) go
2dd70 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
2dd80 20 7d 0a 20 20 69 66 28 20 69 53 65 74 3e 3d 30   }.  if( iSet>=0
2dd90 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52   ){.    sqlite3R
2dda0 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31  owSetInsert(pIn1
2ddb0 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e  ->u.pRowSet, pIn
2ddc0 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62  3->u.i);.  }.  b
2ddd0 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65  reak;.}...#ifnde
2dde0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
2ddf0 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65  IGGER../* Opcode
2de00 3a 20 50 72 6f 67 72 61 6d 20 50 31 20 50 32 20  : Program P1 P2 
2de10 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45  P3 P4 P5.**.** E
2de20 78 65 63 75 74 65 20 74 68 65 20 74 72 69 67 67  xecute the trigg
2de30 65 72 20 70 72 6f 67 72 61 6d 20 70 61 73 73 65  er program passe
2de40 64 20 61 73 20 50 34 20 28 74 79 70 65 20 50 34  d as P4 (type P4
2de50 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a  _SUBPROGRAM). .*
2de60 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73  *.** P1 contains
2de70 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   the address of 
2de80 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  the memory cell 
2de90 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
2dea0 65 20 66 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a  e first memory .
2deb0 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72  ** cell in an ar
2dec0 72 61 79 20 6f 66 20 76 61 6c 75 65 73 20 75 73  ray of values us
2ded0 65 64 20 61 73 20 61 72 67 75 6d 65 6e 74 73 20  ed as arguments 
2dee0 74 6f 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  to the sub-progr
2def0 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61  am. P2 .** conta
2df00 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20  ins the address 
2df10 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20 74 68  to jump to if th
2df20 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68  e sub-program th
2df30 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a  rows an IGNORE .
2df40 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20 75 73 69  ** exception usi
2df50 6e 67 20 74 68 65 20 52 41 49 53 45 28 29 20 66  ng the RAISE() f
2df60 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73 74 65  unction. Registe
2df70 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68  r P3 contains th
2df80 65 20 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66  e address .** of
2df90 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69   a memory cell i
2dfa0 6e 20 74 68 69 73 20 28 74 68 65 20 70 61 72 65  n this (the pare
2dfb0 6e 74 29 20 56 4d 20 74 68 61 74 20 69 73 20 75  nt) VM that is u
2dfc0 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20  sed to allocate 
2dfd0 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72  the .** memory r
2dfe0 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73  equired by the s
2dff0 75 62 2d 76 64 62 65 20 61 74 20 72 75 6e 74 69  ub-vdbe at runti
2e000 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  me..**.** P4 is 
2e010 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
2e020 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74   VM containing t
2e030 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
2e040 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  am..**.** If P5 
2e050 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
2e060 6e 20 72 65 63 75 72 73 69 76 65 20 70 72 6f 67  n recursive prog
2e070 72 61 6d 20 69 6e 76 6f 63 61 74 69 6f 6e 20 69  ram invocation i
2e080 73 20 65 6e 61 62 6c 65 64 2e 0a 2a 2f 0a 63 61  s enabled..*/.ca
2e090 73 65 20 4f 50 5f 50 72 6f 67 72 61 6d 3a 20 7b  se OP_Program: {
2e0a0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
2e0b0 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20  */.  int nMem;  
2e0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2e0d0 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79  Number of memory
2e0e0 20 72 65 67 69 73 74 65 72 73 20 66 6f 72 20 73   registers for s
2e0f0 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20  ub-program */.  
2e100 69 6e 74 20 6e 42 79 74 65 3b 20 20 20 20 20 20  int nByte;      
2e110 20 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73          /* Bytes
2e120 20 6f 66 20 72 75 6e 74 69 6d 65 20 73 70 61 63   of runtime spac
2e130 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 73  e required for s
2e140 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20  ub-program */.  
2e150 4d 65 6d 20 2a 70 52 74 3b 20 20 20 20 20 20 20  Mem *pRt;       
2e160 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
2e170 74 65 72 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20  ter to allocate 
2e180 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20 2a 2f  runtime space */
2e190 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20  .  Mem *pMem;   
2e1a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
2e1b0 65 64 20 74 6f 20 69 74 65 72 61 74 65 20 74 68  ed to iterate th
2e1c0 72 6f 75 67 68 20 6d 65 6d 6f 72 79 20 63 65 6c  rough memory cel
2e1d0 6c 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e  ls */.  Mem *pEn
2e1e0 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
2e1f0 2f 2a 20 4c 61 73 74 20 6d 65 6d 6f 72 79 20 63  /* Last memory c
2e200 65 6c 6c 20 69 6e 20 6e 65 77 20 61 72 72 61 79  ell in new array
2e210 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20   */.  VdbeFrame 
2e220 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 20 2f 2a  *pFrame;      /*
2e230 20 4e 65 77 20 76 64 62 65 20 66 72 61 6d 65 20   New vdbe frame 
2e240 74 6f 20 65 78 65 63 75 74 65 20 69 6e 20 2a 2f  to execute in */
2e250 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70  .  SubProgram *p
2e260 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 53 75  Program;   /* Su
2e270 62 2d 70 72 6f 67 72 61 6d 20 74 6f 20 65 78 65  b-program to exe
2e280 63 75 74 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  cute */.  void *
2e290 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
2e2a0 20 20 2f 2a 20 54 6f 6b 65 6e 20 69 64 65 6e 74    /* Token ident
2e2b0 69 66 79 69 6e 67 20 74 72 69 67 67 65 72 20 2a  ifying trigger *
2e2c0 2f 0a 0a 20 20 70 50 72 6f 67 72 61 6d 20 3d 20  /..  pProgram = 
2e2d0 70 4f 70 2d 3e 70 34 2e 70 50 72 6f 67 72 61 6d  pOp->p4.pProgram
2e2e0 3b 0a 20 20 70 52 74 20 3d 20 26 61 4d 65 6d 5b  ;.  pRt = &aMem[
2e2f0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65  pOp->p3];.  asse
2e300 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f  rt( pProgram->nO
2e310 70 3e 30 20 29 3b 0a 20 20 0a 20 20 2f 2a 20 49  p>0 );.  .  /* I
2e320 66 20 74 68 65 20 70 35 20 66 6c 61 67 20 69 73  f the p5 flag is
2e330 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 63   clear, then rec
2e340 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f  ursive invocatio
2e350 6e 20 6f 66 20 74 72 69 67 67 65 72 73 20 69 73  n of triggers is
2e360 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 20   .  ** disabled 
2e370 66 6f 72 20 62 61 63 6b 77 61 72 64 73 20 63 6f  for backwards co
2e380 6d 70 61 74 69 62 69 6c 69 74 79 20 28 70 35 20  mpatibility (p5 
2e390 69 73 20 73 65 74 20 69 66 20 74 68 69 73 20 73  is set if this s
2e3a0 75 62 2d 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20  ub-program.  ** 
2e3b0 69 73 20 72 65 61 6c 6c 79 20 61 20 74 72 69 67  is really a trig
2e3c0 67 65 72 2c 20 6e 6f 74 20 61 20 66 6f 72 65 69  ger, not a forei
2e3d0 67 6e 20 6b 65 79 20 61 63 74 69 6f 6e 2c 20 61  gn key action, a
2e3e0 6e 64 20 74 68 65 20 66 6c 61 67 20 73 65 74 0a  nd the flag set.
2e3f0 20 20 2a 2a 20 61 6e 64 20 63 6c 65 61 72 65 64    ** and cleared
2e400 20 62 79 20 74 68 65 20 22 50 52 41 47 4d 41 20   by the "PRAGMA 
2e410 72 65 63 75 72 73 69 76 65 5f 74 72 69 67 67 65  recursive_trigge
2e420 72 73 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 63  rs" command is c
2e430 6c 65 61 72 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a  lear)..  ** .  *
2e440 2a 20 49 74 20 69 73 20 72 65 63 75 72 73 69 76  * It is recursiv
2e450 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20  e invocation of 
2e460 74 72 69 67 67 65 72 73 2c 20 61 74 20 74 68 65  triggers, at the
2e470 20 53 51 4c 20 6c 65 76 65 6c 2c 20 74 68 61 74   SQL level, that
2e480 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c   is .  ** disabl
2e490 65 64 2e 20 49 6e 20 73 6f 6d 65 20 63 61 73 65  ed. In some case
2e4a0 73 20 61 20 73 69 6e 67 6c 65 20 74 72 69 67 67  s a single trigg
2e4b0 65 72 20 6d 61 79 20 67 65 6e 65 72 61 74 65 20  er may generate 
2e4c0 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 0a 20  more than one . 
2e4d0 20 2a 2a 20 53 75 62 50 72 6f 67 72 61 6d 20 28   ** SubProgram (
2e4e0 69 66 20 74 68 65 20 74 72 69 67 67 65 72 20 6d  if the trigger m
2e4f0 61 79 20 62 65 20 65 78 65 63 75 74 65 64 20 77  ay be executed w
2e500 69 74 68 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  ith more than on
2e510 65 20 64 69 66 66 65 72 65 6e 74 20 0a 20 20 2a  e different .  *
2e520 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c  * ON CONFLICT al
2e530 67 6f 72 69 74 68 6d 29 2e 20 53 75 62 50 72 6f  gorithm). SubPro
2e540 67 72 61 6d 20 73 74 72 75 63 74 75 72 65 73 20  gram structures 
2e550 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
2e560 61 0a 20 20 2a 2a 20 73 69 6e 67 6c 65 20 74 72  a.  ** single tr
2e570 69 67 67 65 72 20 61 6c 6c 20 68 61 76 65 20 74  igger all have t
2e580 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f  he same value fo
2e590 72 20 74 68 65 20 53 75 62 50 72 6f 67 72 61 6d  r the SubProgram
2e5a0 2e 74 6f 6b 65 6e 20 0a 20 20 2a 2a 20 76 61 72  .token .  ** var
2e5b0 69 61 62 6c 65 2e 20 20 2a 2f 0a 20 20 69 66 28  iable.  */.  if(
2e5c0 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20   pOp->p5 ){.    
2e5d0 74 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f  t = pProgram->to
2e5e0 6b 65 6e 3b 0a 20 20 20 20 66 6f 72 28 70 46 72  ken;.    for(pFr
2e5f0 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70  ame=p->pFrame; p
2e600 46 72 61 6d 65 20 26 26 20 70 46 72 61 6d 65 2d  Frame && pFrame-
2e610 3e 74 6f 6b 65 6e 21 3d 74 3b 20 70 46 72 61 6d  >token!=t; pFram
2e620 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  e=pFrame->pParen
2e630 74 29 3b 0a 20 20 20 20 69 66 28 20 70 46 72 61  t);.    if( pFra
2e640 6d 65 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  me ) break;.  }.
2e650 0a 20 20 69 66 28 20 70 2d 3e 6e 46 72 61 6d 65  .  if( p->nFrame
2e660 3e 3d 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  >=db->aLimit[SQL
2e670 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45  ITE_LIMIT_TRIGGE
2e680 52 5f 44 45 50 54 48 5d 20 29 7b 0a 20 20 20 20  R_DEPTH] ){.    
2e690 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
2e6a0 52 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  R;.    sqlite3Vd
2e6b0 62 65 45 72 72 6f 72 28 70 2c 20 22 74 6f 6f 20  beError(p, "too 
2e6c0 6d 61 6e 79 20 6c 65 76 65 6c 73 20 6f 66 20 74  many levels of t
2e6d0 72 69 67 67 65 72 20 72 65 63 75 72 73 69 6f 6e  rigger recursion
2e6e0 22 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f  ");.    goto abo
2e6f0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2e700 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73  .  }..  /* Regis
2e710 74 65 72 20 70 52 74 20 69 73 20 75 73 65 64 20  ter pRt is used 
2e720 74 6f 20 73 74 6f 72 65 20 74 68 65 20 6d 65 6d  to store the mem
2e730 6f 72 79 20 72 65 71 75 69 72 65 64 20 74 6f 20  ory required to 
2e740 73 61 76 65 20 74 68 65 20 73 74 61 74 65 0a 20  save the state. 
2e750 20 2a 2a 20 6f 66 20 74 68 65 20 63 75 72 72 65   ** of the curre
2e760 6e 74 20 70 72 6f 67 72 61 6d 2c 20 61 6e 64 20  nt program, and 
2e770 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69  the memory requi
2e780 72 65 64 20 61 74 20 72 75 6e 74 69 6d 65 20 74  red at runtime t
2e790 6f 20 65 78 65 63 75 74 65 0a 20 20 2a 2a 20 74  o execute.  ** t
2e7a0 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
2e7b0 61 6d 2e 20 49 66 20 74 68 69 73 20 74 72 69 67  am. If this trig
2e7c0 67 65 72 20 68 61 73 20 62 65 65 6e 20 66 69 72  ger has been fir
2e7d0 65 64 20 62 65 66 6f 72 65 2c 20 74 68 65 6e 20  ed before, then 
2e7e0 70 52 74 20 0a 20 20 2a 2a 20 69 73 20 61 6c 72  pRt .  ** is alr
2e7f0 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20  eady allocated. 
2e800 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20 6d 75  Otherwise, it mu
2e810 73 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65  st be initialize
2e820 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 52  d.  */.  if( (pR
2e830 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 46 72 61  t->flags&MEM_Fra
2e840 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a  me)==0 ){.    /*
2e850 20 53 75 62 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d   SubProgram.nMem
2e860 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e   is set to the n
2e870 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
2e880 63 65 6c 6c 73 20 75 73 65 64 20 62 79 20 74 68  cells used by th
2e890 65 20 0a 20 20 20 20 2a 2a 20 70 72 6f 67 72 61  e .    ** progra
2e8a0 6d 20 73 74 6f 72 65 64 20 69 6e 20 53 75 62 50  m stored in SubP
2e8b0 72 6f 67 72 61 6d 2e 61 4f 70 2e 20 41 73 20 77  rogram.aOp. As w
2e8c0 65 6c 6c 20 61 73 20 74 68 65 73 65 2c 20 6f 6e  ell as these, on
2e8d0 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20  e memory.    ** 
2e8e0 63 65 6c 6c 20 69 73 20 72 65 71 75 69 72 65 64  cell is required
2e8f0 20 66 6f 72 20 65 61 63 68 20 63 75 72 73 6f 72   for each cursor
2e900 20 75 73 65 64 20 62 79 20 74 68 65 20 70 72 6f   used by the pro
2e910 67 72 61 6d 2e 20 53 65 74 20 6c 6f 63 61 6c 0a  gram. Set local.
2e920 20 20 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 20      ** variable 
2e930 6e 4d 65 6d 20 28 61 6e 64 20 6c 61 74 65 72 2c  nMem (and later,
2e940 20 56 64 62 65 46 72 61 6d 65 2e 6e 43 68 69 6c   VdbeFrame.nChil
2e950 64 4d 65 6d 29 20 74 6f 20 74 68 69 73 20 76 61  dMem) to this va
2e960 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  lue..    */.    
2e970 6e 4d 65 6d 20 3d 20 70 50 72 6f 67 72 61 6d 2d  nMem = pProgram-
2e980 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f 67 72 61 6d  >nMem + pProgram
2e990 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 6e 42 79 74  ->nCsr;.    nByt
2e9a0 65 20 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f  e = ROUND8(sizeo
2e9b0 66 28 56 64 62 65 46 72 61 6d 65 29 29 0a 20 20  f(VdbeFrame)).  
2e9c0 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 6e 4d              + nM
2e9d0 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d 29  em * sizeof(Mem)
2e9e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b  .              +
2e9f0 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 20   pProgram->nCsr 
2ea00 2a 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72  * sizeof(VdbeCur
2ea10 73 6f 72 20 2a 29 0a 20 20 20 20 20 20 20 20 20  sor *).         
2ea20 20 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d       + pProgram-
2ea30 3e 6e 4f 6e 63 65 20 2a 20 73 69 7a 65 6f 66 28  >nOnce * sizeof(
2ea40 75 38 29 3b 0a 20 20 20 20 70 46 72 61 6d 65 20  u8);.    pFrame 
2ea50 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  = sqlite3DbMallo
2ea60 63 5a 65 72 6f 28 64 62 2c 20 6e 42 79 74 65 29  cZero(db, nByte)
2ea70 3b 0a 20 20 20 20 69 66 28 20 21 70 46 72 61 6d  ;.    if( !pFram
2ea80 65 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  e ){.      goto 
2ea90 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20  no_mem;.    }.  
2eaa0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2eab0 52 65 6c 65 61 73 65 28 70 52 74 29 3b 0a 20 20  Release(pRt);.  
2eac0 20 20 70 52 74 2d 3e 66 6c 61 67 73 20 3d 20 4d    pRt->flags = M
2ead0 45 4d 5f 46 72 61 6d 65 3b 0a 20 20 20 20 70 52  EM_Frame;.    pR
2eae0 74 2d 3e 75 2e 70 46 72 61 6d 65 20 3d 20 70 46  t->u.pFrame = pF
2eaf0 72 61 6d 65 3b 0a 0a 20 20 20 20 70 46 72 61 6d  rame;..    pFram
2eb00 65 2d 3e 76 20 3d 20 70 3b 0a 20 20 20 20 70 46  e->v = p;.    pF
2eb10 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20  rame->nChildMem 
2eb20 3d 20 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61  = nMem;.    pFra
2eb30 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 3d 20  me->nChildCsr = 
2eb40 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a  pProgram->nCsr;.
2eb50 20 20 20 20 70 46 72 61 6d 65 2d 3e 70 63 20 3d      pFrame->pc =
2eb60 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
2eb70 29 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  );.    pFrame->a
2eb80 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20  Mem = p->aMem;. 
2eb90 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20     pFrame->nMem 
2eba0 3d 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70  = p->nMem;.    p
2ebb0 46 72 61 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70  Frame->apCsr = p
2ebc0 2d 3e 61 70 43 73 72 3b 0a 20 20 20 20 70 46 72  ->apCsr;.    pFr
2ebd0 61 6d 65 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70  ame->nCursor = p
2ebe0 2d 3e 6e 43 75 72 73 6f 72 3b 0a 20 20 20 20 70  ->nCursor;.    p
2ebf0 46 72 61 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e  Frame->aOp = p->
2ec00 61 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  aOp;.    pFrame-
2ec10 3e 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20  >nOp = p->nOp;. 
2ec20 20 20 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e     pFrame->token
2ec30 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b   = pProgram->tok
2ec40 65 6e 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  en;.    pFrame->
2ec50 61 4f 6e 63 65 46 6c 61 67 20 3d 20 70 2d 3e 61  aOnceFlag = p->a
2ec60 4f 6e 63 65 46 6c 61 67 3b 0a 20 20 20 20 70 46  OnceFlag;.    pF
2ec70 72 61 6d 65 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20  rame->nOnceFlag 
2ec80 3d 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 3b 0a  = p->nOnceFlag;.
2ec90 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
2eca0 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54  ABLE_STMT_SCANST
2ecb0 41 54 55 53 0a 20 20 20 20 70 46 72 61 6d 65 2d  ATUS.    pFrame-
2ecc0 3e 61 6e 45 78 65 63 20 3d 20 70 2d 3e 61 6e 45  >anExec = p->anE
2ecd0 78 65 63 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20  xec;.#endif..   
2ece0 20 70 45 6e 64 20 3d 20 26 56 64 62 65 46 72 61   pEnd = &VdbeFra
2ecf0 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70 46  meMem(pFrame)[pF
2ed00 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d  rame->nChildMem]
2ed10 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d 56  ;.    for(pMem=V
2ed20 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61  dbeFrameMem(pFra
2ed30 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64 3b  me); pMem!=pEnd;
2ed40 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20 20   pMem++){.      
2ed50 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pMem->flags = ME
2ed60 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 20  M_Undefined;.   
2ed70 20 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62     pMem->db = db
2ed80 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
2ed90 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 70 52  .    pFrame = pR
2eda0 74 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a 20 20 20  t->u.pFrame;.   
2edb0 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61   assert( pProgra
2edc0 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d  m->nMem+pProgram
2edd0 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e  ->nCsr==pFrame->
2ede0 6e 43 68 69 6c 64 4d 65 6d 20 29 3b 0a 20 20 20  nChildMem );.   
2edf0 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61   assert( pProgra
2ee00 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d  m->nCsr==pFrame-
2ee10 3e 6e 43 68 69 6c 64 43 73 72 20 29 3b 0a 20 20  >nChildCsr );.  
2ee20 20 20 61 73 73 65 72 74 28 20 28 69 6e 74 29 28    assert( (int)(
2ee30 70 4f 70 20 2d 20 61 4f 70 29 3d 3d 70 46 72 61  pOp - aOp)==pFra
2ee40 6d 65 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a 20  me->pc );.  }.. 
2ee50 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20   p->nFrame++;.  
2ee60 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20  pFrame->pParent 
2ee70 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70  = p->pFrame;.  p
2ee80 46 72 61 6d 65 2d 3e 6c 61 73 74 52 6f 77 69 64  Frame->lastRowid
2ee90 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20   = lastRowid;.  
2eea0 70 46 72 61 6d 65 2d 3e 6e 43 68 61 6e 67 65 20  pFrame->nChange 
2eeb0 3d 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20  = p->nChange;.  
2eec0 70 46 72 61 6d 65 2d 3e 6e 44 62 43 68 61 6e 67  pFrame->nDbChang
2eed0 65 20 3d 20 70 2d 3e 64 62 2d 3e 6e 43 68 61 6e  e = p->db->nChan
2eee0 67 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 46  ge;.  assert( pF
2eef0 72 61 6d 65 2d 3e 70 41 75 78 44 61 74 61 3d 3d  rame->pAuxData==
2ef00 30 20 29 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70  0 );.  pFrame->p
2ef10 41 75 78 44 61 74 61 20 3d 20 70 2d 3e 70 41 75  AuxData = p->pAu
2ef20 78 44 61 74 61 3b 0a 20 20 70 2d 3e 70 41 75 78  xData;.  p->pAux
2ef30 44 61 74 61 20 3d 20 30 3b 0a 20 20 70 2d 3e 6e  Data = 0;.  p->n
2ef40 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 70 2d  Change = 0;.  p-
2ef50 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65  >pFrame = pFrame
2ef60 3b 0a 20 20 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d  ;.  p->aMem = aM
2ef70 65 6d 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d  em = &VdbeFrameM
2ef80 65 6d 28 70 46 72 61 6d 65 29 5b 2d 31 5d 3b 0a  em(pFrame)[-1];.
2ef90 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70 46 72 61    p->nMem = pFra
2efa0 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 3b 0a 20  me->nChildMem;. 
2efb0 20 70 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 28 75   p->nCursor = (u
2efc0 31 36 29 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  16)pFrame->nChil
2efd0 64 43 73 72 3b 0a 20 20 70 2d 3e 61 70 43 73 72  dCsr;.  p->apCsr
2efe0 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72 20 2a   = (VdbeCursor *
2eff0 2a 29 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2b  *)&aMem[p->nMem+
2f000 31 5d 3b 0a 20 20 70 2d 3e 61 4f 70 20 3d 20 61  1];.  p->aOp = a
2f010 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 61  Op = pProgram->a
2f020 4f 70 3b 0a 20 20 70 2d 3e 6e 4f 70 20 3d 20 70  Op;.  p->nOp = p
2f030 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3b 0a 20 20  Program->nOp;.  
2f040 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 20 3d 20 28  p->aOnceFlag = (
2f050 75 38 20 2a 29 26 70 2d 3e 61 70 43 73 72 5b 70  u8 *)&p->apCsr[p
2f060 2d 3e 6e 43 75 72 73 6f 72 5d 3b 0a 20 20 70 2d  ->nCursor];.  p-
2f070 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d 20 70 50 72  >nOnceFlag = pPr
2f080 6f 67 72 61 6d 2d 3e 6e 4f 6e 63 65 3b 0a 23 69  ogram->nOnce;.#i
2f090 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
2f0a0 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54  LE_STMT_SCANSTAT
2f0b0 55 53 0a 20 20 70 2d 3e 61 6e 45 78 65 63 20 3d  US.  p->anExec =
2f0c0 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 70 4f 70   0;.#endif.  pOp
2f0d0 20 3d 20 26 61 4f 70 5b 2d 31 5d 3b 0a 20 20 6d   = &aOp[-1];.  m
2f0e0 65 6d 73 65 74 28 70 2d 3e 61 4f 6e 63 65 46 6c  emset(p->aOnceFl
2f0f0 61 67 2c 20 30 2c 20 70 2d 3e 6e 4f 6e 63 65 46  ag, 0, p->nOnceF
2f100 6c 61 67 29 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a  lag);..  break;.
2f110 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61  }../* Opcode: Pa
2f120 72 61 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ram P1 P2 * * *.
2f130 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
2f140 65 20 69 73 20 6f 6e 6c 79 20 65 76 65 72 20 70  e is only ever p
2f150 72 65 73 65 6e 74 20 69 6e 20 73 75 62 2d 70 72  resent in sub-pr
2f160 6f 67 72 61 6d 73 20 63 61 6c 6c 65 64 20 76 69  ograms called vi
2f170 61 20 74 68 65 20 0a 2a 2a 20 4f 50 5f 50 72 6f  a the .** OP_Pro
2f180 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e  gram instruction
2f190 2e 20 43 6f 70 79 20 61 20 76 61 6c 75 65 20 63  . Copy a value c
2f1a0 75 72 72 65 6e 74 6c 79 20 73 74 6f 72 65 64 20  urrently stored 
2f1b0 69 6e 20 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20  in a memory .** 
2f1c0 63 65 6c 6c 20 6f 66 20 74 68 65 20 63 61 6c 6c  cell of the call
2f1d0 69 6e 67 20 28 70 61 72 65 6e 74 29 20 66 72 61  ing (parent) fra
2f1e0 6d 65 20 74 6f 20 63 65 6c 6c 20 50 32 20 69 6e  me to cell P2 in
2f1f0 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72 61   the current fra
2f200 6d 65 73 20 0a 2a 2a 20 61 64 64 72 65 73 73 20  mes .** address 
2f210 73 70 61 63 65 2e 20 54 68 69 73 20 69 73 20 75  space. This is u
2f220 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70  sed by trigger p
2f230 72 6f 67 72 61 6d 73 20 74 6f 20 61 63 63 65 73  rograms to acces
2f240 73 20 74 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a 20  s the new.* .** 
2f250 61 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c 75 65 73  and old.* values
2f260 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 64 64 72  ..**.** The addr
2f270 65 73 73 20 6f 66 20 74 68 65 20 63 65 6c 6c 20  ess of the cell 
2f280 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 66 72  in the parent fr
2f290 61 6d 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ame is determine
2f2a0 64 20 62 79 20 61 64 64 69 6e 67 0a 2a 2a 20 74  d by adding.** t
2f2b0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
2f2c0 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  P1 argument to t
2f2d0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
2f2e0 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  P1 argument to t
2f2f0 68 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f 50  he.** calling OP
2f300 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63  _Program instruc
2f310 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
2f320 5f 50 61 72 61 6d 3a 20 7b 20 20 20 20 20 20 20  _Param: {       
2f330 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
2f340 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
2f350 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a  me;.  Mem *pIn;.
2f360 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
2f370 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
2f380 0a 20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70  .  pFrame = p->p
2f390 46 72 61 6d 65 3b 0a 20 20 70 49 6e 20 3d 20 26  Frame;.  pIn = &
2f3a0 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70  pFrame->aMem[pOp
2f3b0 2d 3e 70 31 20 2b 20 70 46 72 61 6d 65 2d 3e 61  ->p1 + pFrame->a
2f3c0 4f 70 5b 70 46 72 61 6d 65 2d 3e 70 63 5d 2e 70  Op[pFrame->pc].p
2f3d0 31 5d 3b 20 20 20 0a 20 20 73 71 6c 69 74 65 33  1];   .  sqlite3
2f3e0 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
2f3f0 70 79 28 70 4f 75 74 2c 20 70 49 6e 2c 20 4d 45  py(pOut, pIn, ME
2f400 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 62 72 65 61  M_Ephem);.  brea
2f410 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  k;.}..#endif /* 
2f420 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2f430 4d 49 54 5f 54 52 49 47 47 45 52 20 2a 2f 0a 0a  MIT_TRIGGER */..
2f440 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2f450 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a  MIT_FOREIGN_KEY.
2f460 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 43 6f 75  /* Opcode: FkCou
2f470 6e 74 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a  nter P1 P2 * * *
2f480 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 66 6b  .** Synopsis: fk
2f490 63 74 72 5b 50 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a  ctr[P1]+=P2.**.*
2f4a0 2a 20 49 6e 63 72 65 6d 65 6e 74 20 61 20 22 63  * Increment a "c
2f4b0 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65  onstraint counte
2f4c0 72 22 20 62 79 20 50 32 20 28 50 32 20 6d 61 79  r" by P2 (P2 may
2f4d0 20 62 65 20 6e 65 67 61 74 69 76 65 20 6f 72 20   be negative or 
2f4e0 70 6f 73 69 74 69 76 65 29 2e 0a 2a 2a 20 49 66  positive)..** If
2f4f0 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c   P1 is non-zero,
2f500 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
2f510 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72  nstraint counter
2f520 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
2f530 0a 2a 2a 20 28 64 65 66 65 72 72 65 64 20 66 6f  .** (deferred fo
2f540 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
2f550 61 69 6e 74 73 29 2e 20 4f 74 68 65 72 77 69 73  aints). Otherwis
2f560 65 2c 20 69 66 20 50 31 20 69 73 20 7a 65 72 6f  e, if P1 is zero
2f570 2c 20 74 68 65 20 0a 2a 2a 20 73 74 61 74 65 6d  , the .** statem
2f580 65 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69  ent counter is i
2f590 6e 63 72 65 6d 65 6e 74 65 64 20 28 69 6d 6d 65  ncremented (imme
2f5a0 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65  diate foreign ke
2f5b0 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a  y constraints)..
2f5c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 43 6f 75  */.case OP_FkCou
2f5d0 6e 74 65 72 3a 20 7b 0a 20 20 69 66 28 20 64 62  nter: {.  if( db
2f5e0 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
2f5f0 5f 44 65 66 65 72 46 4b 73 20 29 7b 0a 20 20 20  _DeferFKs ){.   
2f600 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
2f610 6d 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32  mCons += pOp->p2
2f620 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f  ;.  }else if( pO
2f630 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 64 62 2d  p->p1 ){.    db-
2f640 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 2b  >nDeferredCons +
2f650 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c  = pOp->p2;.  }el
2f660 73 65 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b 43 6f  se{.    p->nFkCo
2f670 6e 73 74 72 61 69 6e 74 20 2b 3d 20 70 4f 70 2d  nstraint += pOp-
2f680 3e 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  >p2;.  }.  break
2f690 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2f6a0 46 6b 49 66 5a 65 72 6f 20 50 31 20 50 32 20 2a  FkIfZero P1 P2 *
2f6b0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2f6c0 3a 20 69 66 20 66 6b 63 74 72 5b 50 31 5d 3d 3d  : if fkctr[P1]==
2f6d0 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  0 goto P2.**.** 
2f6e0 54 68 69 73 20 6f 70 63 6f 64 65 20 74 65 73 74  This opcode test
2f6f0 73 20 69 66 20 61 20 66 6f 72 65 69 67 6e 20 6b  s if a foreign k
2f700 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f  ey constraint-co
2f710 75 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e 74  unter is current
2f720 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20 73  ly zero..** If s
2f730 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  o, jump to instr
2f740 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72  uction P2. Other
2f750 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75  wise, fall throu
2f760 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 0a  gh to the next .
2f770 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ** instruction..
2f780 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e  **.** If P1 is n
2f790 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  on-zero, then th
2f7a0 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
2f7b0 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  if the database 
2f7c0 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74  constraint-count
2f7d0 65 72 0a 2a 2a 20 69 73 20 7a 65 72 6f 20 28 74  er.** is zero (t
2f7e0 68 65 20 6f 6e 65 20 74 68 61 74 20 63 6f 75 6e  he one that coun
2f7f0 74 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73  ts deferred cons
2f800 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
2f810 73 29 2e 20 49 66 20 50 31 20 69 73 0a 2a 2a 20  s). If P1 is.** 
2f820 7a 65 72 6f 2c 20 74 68 65 20 6a 75 6d 70 20 69  zero, the jump i
2f830 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 73  s taken if the s
2f840 74 61 74 65 6d 65 6e 74 20 63 6f 6e 73 74 72 61  tatement constra
2f850 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 7a  int-counter is z
2f860 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69 61 74  ero.** (immediat
2f870 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  e foreign key co
2f880 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
2f890 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ons)..*/.case OP
2f8a0 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20  _FkIfZero: {    
2f8b0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
2f8c0 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b    if( pOp->p1 ){
2f8d0 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
2f8e0 61 6b 65 6e 28 64 62 2d 3e 6e 44 65 66 65 72 72  aken(db->nDeferr
2f8f0 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d  edCons==0 && db-
2f900 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
2f910 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66  s==0, 2);.    if
2f920 28 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  ( db->nDeferredC
2f930 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44  ons==0 && db->nD
2f940 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d  eferredImmCons==
2f950 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  0 ) goto jump_to
2f960 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  _p2;.  }else{.  
2f970 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
2f980 6e 28 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69  n(p->nFkConstrai
2f990 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65  nt==0 && db->nDe
2f9a0 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30  ferredImmCons==0
2f9b0 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20 70 2d  , 2);.    if( p-
2f9c0 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d  >nFkConstraint==
2f9d0 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72  0 && db->nDeferr
2f9e0 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 67  edImmCons==0 ) g
2f9f0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
2fa00 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
2fa10 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66  endif /* #ifndef
2fa20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
2fa30 45 49 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66  EIGN_KEY */..#if
2fa40 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2fa50 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f  _AUTOINCREMENT./
2fa60 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78  * Opcode: MemMax
2fa70 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
2fa80 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d  Synopsis: r[P1]=
2fa90 6d 61 78 28 72 5b 50 31 5d 2c 72 5b 50 32 5d 29  max(r[P1],r[P2])
2faa0 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 72  .**.** P1 is a r
2fab0 65 67 69 73 74 65 72 20 69 6e 20 74 68 65 20 72  egister in the r
2fac0 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69  oot frame of thi
2fad0 73 20 56 4d 20 28 74 68 65 20 72 6f 6f 74 20 66  s VM (the root f
2fae0 72 61 6d 65 20 69 73 0a 2a 2a 20 64 69 66 66 65  rame is.** diffe
2faf0 72 65 6e 74 20 66 72 6f 6d 20 74 68 65 20 63 75  rent from the cu
2fb00 72 72 65 6e 74 20 66 72 61 6d 65 20 69 66 20 74  rrent frame if t
2fb10 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
2fb20 69 73 20 62 65 69 6e 67 20 65 78 65 63 75 74 65  is being execute
2fb30 64 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 73 75  d.** within a su
2fb40 62 2d 70 72 6f 67 72 61 6d 29 2e 20 53 65 74 20  b-program). Set 
2fb50 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67  the value of reg
2fb60 69 73 74 65 72 20 50 31 20 74 6f 20 74 68 65 20  ister P1 to the 
2fb70 6d 61 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69  maximum of .** i
2fb80 74 73 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65  ts current value
2fb90 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 69   and the value i
2fba0 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
2fbb0 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
2fbc0 63 74 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20  ction throws an 
2fbd0 65 72 72 6f 72 20 69 66 20 74 68 65 20 6d 65 6d  error if the mem
2fbe0 6f 72 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20  ory cell is not 
2fbf0 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20  initially.** an 
2fc00 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65  integer..*/.case
2fc10 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20   OP_MemMax: {   
2fc20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20       /* in2 */. 
2fc30 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
2fc40 6d 65 3b 0a 20 20 69 66 28 20 70 2d 3e 70 46 72  me;.  if( p->pFr
2fc50 61 6d 65 20 29 7b 0a 20 20 20 20 66 6f 72 28 70  ame ){.    for(p
2fc60 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b  Frame=p->pFrame;
2fc70 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74   pFrame->pParent
2fc80 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d  ; pFrame=pFrame-
2fc90 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 70  >pParent);.    p
2fca0 49 6e 31 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61  In1 = &pFrame->a
2fcb0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2fcc0 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31 20  }else{.    pIn1 
2fcd0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2fce0 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
2fcf0 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29  memIsValid(pIn1)
2fd00 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
2fd10 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
2fd20 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26  In1);.  pIn2 = &
2fd30 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
2fd40 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
2fd50 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b  ntegerify(pIn2);
2fd60 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
2fd70 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20 20  <pIn2->u.i){.   
2fd80 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 49 6e   pIn1->u.i = pIn
2fd90 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 62 72  2->u.i;.  }.  br
2fda0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2fdb0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
2fdc0 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f  OINCREMENT */../
2fdd0 2a 20 4f 70 63 6f 64 65 3a 20 49 66 50 6f 73 20  * Opcode: IfPos 
2fde0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
2fdf0 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
2fe00 31 5d 3e 30 20 74 68 65 6e 20 72 5b 50 31 5d 2d  1]>0 then r[P1]-
2fe10 3d 50 33 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  =P3, goto P2.**.
2fe20 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31 20 6d  ** Register P1 m
2fe30 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69  ust contain an i
2fe40 6e 74 65 67 65 72 2e 0a 2a 2a 20 49 66 20 74 68  nteger..** If th
2fe50 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  e value of regis
2fe60 74 65 72 20 50 31 20 69 73 20 31 20 6f 72 20 67  ter P1 is 1 or g
2fe70 72 65 61 74 65 72 2c 20 73 75 62 74 72 61 63 74  reater, subtract
2fe80 20 50 33 20 66 72 6f 6d 20 74 68 65 0a 2a 2a 20   P3 from the.** 
2fe90 76 61 6c 75 65 20 69 6e 20 50 31 20 61 6e 64 20  value in P1 and 
2fea0 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
2feb0 2a 20 49 66 20 74 68 65 20 69 6e 69 74 69 61 6c  * If the initial
2fec0 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
2fed0 65 72 20 50 31 20 69 73 20 6c 65 73 73 20 74 68  er P1 is less th
2fee0 61 6e 20 31 2c 20 74 68 65 6e 20 74 68 65 0a 2a  an 1, then the.*
2fef0 2a 20 76 61 6c 75 65 20 69 73 20 75 6e 63 68 61  * value is uncha
2ff00 6e 67 65 64 20 61 6e 64 20 63 6f 6e 74 72 6f 6c  nged and control
2ff10 20 70 61 73 73 65 73 20 74 68 72 6f 75 67 68 20   passes through 
2ff20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
2ff30 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
2ff40 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20   OP_IfPos: {    
2ff50 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
2ff60 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
2ff70 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
2ff80 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
2ff90 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  gs&MEM_Int );.  
2ffa0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2ffb0 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 2c 20 32 29   pIn1->u.i>0, 2)
2ffc0 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e  ;.  if( pIn1->u.
2ffd0 69 3e 30 20 29 7b 0a 20 20 20 20 70 49 6e 31 2d  i>0 ){.    pIn1-
2ffe0 3e 75 2e 69 20 2d 3d 20 70 4f 70 2d 3e 70 33 3b  >u.i -= pOp->p3;
2fff0 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  .    goto jump_t
30000 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  o_p2;.  }.  brea
30010 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
30020 20 4f 66 66 73 65 74 4c 69 6d 69 74 20 50 31 20   OffsetLimit P1 
30030 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
30040 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e  opsis: if r[P1]>
30050 30 20 74 68 65 6e 20 72 5b 50 32 5d 3d 72 5b 50  0 then r[P2]=r[P
30060 31 5d 2b 6d 61 78 28 30 2c 72 5b 50 33 5d 29 20  1]+max(0,r[P3]) 
30070 65 6c 73 65 20 72 5b 50 32 5d 3d 28 2d 31 29 0a  else r[P2]=(-1).
30080 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
30090 65 20 70 65 72 66 6f 72 6d 73 20 61 20 63 6f 6d  e performs a com
300a0 6d 6f 6e 6c 79 20 75 73 65 64 20 63 6f 6d 70 75  monly used compu
300b0 74 61 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65  tation associate
300c0 64 20 77 69 74 68 0a 2a 2a 20 4c 49 4d 49 54 20  d with.** LIMIT 
300d0 61 6e 64 20 4f 46 46 53 45 54 20 70 72 6f 63 65  and OFFSET proce
300e0 73 73 2e 20 20 72 5b 50 31 5d 20 68 6f 6c 64 73  ss.  r[P1] holds
300f0 20 74 68 65 20 6c 69 6d 69 74 20 63 6f 75 6e 74   the limit count
30100 65 72 2e 20 20 72 5b 50 33 5d 0a 2a 2a 20 68 6f  er.  r[P3].** ho
30110 6c 64 73 20 74 68 65 20 6f 66 66 73 65 74 20 63  lds the offset c
30120 6f 75 6e 74 65 72 2e 20 20 54 68 65 20 6f 70 63  ounter.  The opc
30130 6f 64 65 20 63 6f 6d 70 75 74 65 73 20 74 68 65  ode computes the
30140 20 63 6f 6d 62 69 6e 65 64 20 76 61 6c 75 65 0a   combined value.
30150 2a 2a 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20  ** of the LIMIT 
30160 61 6e 64 20 4f 46 46 53 45 54 20 61 6e 64 20 73  and OFFSET and s
30170 74 6f 72 65 73 20 74 68 61 74 20 76 61 6c 75 65  tores that value
30180 20 69 6e 20 72 5b 50 32 5d 2e 20 20 54 68 65 20   in r[P2].  The 
30190 72 5b 50 32 5d 0a 2a 2a 20 76 61 6c 75 65 20 63  r[P2].** value c
301a0 6f 6d 70 75 74 65 64 20 69 73 20 74 68 65 20 74  omputed is the t
301b0 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 72  otal number of r
301c0 6f 77 73 20 74 68 61 74 20 77 69 6c 6c 20 6e 65  ows that will ne
301d0 65 64 20 74 6f 20 62 65 0a 2a 2a 20 76 69 73 69  ed to be.** visi
301e0 74 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ted in order to 
301f0 63 6f 6d 70 6c 65 74 65 20 74 68 65 20 71 75 65  complete the que
30200 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 72 5b 50  ry..**.** If r[P
30210 33 5d 20 69 73 20 7a 65 72 6f 20 6f 72 20 6e 65  3] is zero or ne
30220 67 61 74 69 76 65 2c 20 74 68 61 74 20 6d 65 61  gative, that mea
30230 6e 73 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4f  ns there is no O
30240 46 46 53 45 54 0a 2a 2a 20 61 6e 64 20 72 5b 50  FFSET.** and r[P
30250 32 5d 20 69 73 20 73 65 74 20 74 6f 20 62 65 20  2] is set to be 
30260 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
30270 20 4c 49 4d 49 54 2c 20 72 5b 50 31 5d 2e 0a 2a   LIMIT, r[P1]..*
30280 2a 0a 2a 2a 20 69 66 20 72 5b 50 31 5d 20 69 73  *.** if r[P1] is
30290 20 7a 65 72 6f 20 6f 72 20 6e 65 67 61 74 69 76   zero or negativ
302a0 65 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68  e, that means th
302b0 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 0a  ere is no LIMIT.
302c0 2a 2a 20 61 6e 64 20 72 5b 50 32 5d 20 69 73 20  ** and r[P2] is 
302d0 73 65 74 20 74 6f 20 2d 31 2e 20 0a 2a 2a 0a 2a  set to -1. .**.*
302e0 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 72 5b 50  * Otherwise, r[P
302f0 32 5d 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  2] is set to the
30300 20 73 75 6d 20 6f 66 20 72 5b 50 31 5d 20 61 6e   sum of r[P1] an
30310 64 20 72 5b 50 33 5d 2e 0a 2a 2f 0a 63 61 73 65  d r[P3]..*/.case
30320 20 4f 50 5f 4f 66 66 73 65 74 4c 69 6d 69 74 3a   OP_OffsetLimit:
30330 20 7b 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6f 75   {    /* in1, ou
30340 74 32 2c 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e  t2, in3 */.  pIn
30350 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
30360 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d  1];.  pIn3 = &aM
30370 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70  em[pOp->p3];.  p
30380 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
30390 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
303a0 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
303b0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
303c0 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d  .  assert( pIn3-
303d0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
303e0 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20   );.  pOut->u.i 
303f0 3d 20 70 49 6e 31 2d 3e 75 2e 69 3c 3d 30 20 3f  = pIn1->u.i<=0 ?
30400 20 2d 31 20 3a 20 70 49 6e 31 2d 3e 75 2e 69 2b   -1 : pIn1->u.i+
30410 28 70 49 6e 33 2d 3e 75 2e 69 3e 30 3f 70 49 6e  (pIn3->u.i>0?pIn
30420 33 2d 3e 75 2e 69 3a 30 29 3b 0a 20 20 62 72 65  3->u.i:0);.  bre
30430 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
30440 3a 20 49 66 4e 6f 74 5a 65 72 6f 20 50 31 20 50  : IfNotZero P1 P
30450 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
30460 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d  psis: if r[P1]!=
30470 30 20 74 68 65 6e 20 72 5b 50 31 5d 2d 3d 50 33  0 then r[P1]-=P3
30480 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  , goto P2.**.** 
30490 52 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74  Register P1 must
304a0 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
304b0 67 65 72 2e 20 20 49 66 20 74 68 65 20 63 6f 6e  ger.  If the con
304c0 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
304d0 20 50 31 20 69 73 0a 2a 2a 20 69 6e 69 74 69 61   P1 is.** initia
304e0 6c 6c 79 20 6e 6f 6e 7a 65 72 6f 2c 20 74 68 65  lly nonzero, the
304f0 6e 20 73 75 62 74 72 61 63 74 20 50 33 20 66 72  n subtract P3 fr
30500 6f 6d 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  om the value in 
30510 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 0a  register P1 and.
30520 2a 2a 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20  ** jump to P2.  
30530 49 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69  If register P1 i
30540 73 20 69 6e 69 74 69 61 6c 6c 79 20 7a 65 72 6f  s initially zero
30550 2c 20 6c 65 61 76 65 20 69 74 20 75 6e 63 68 61  , leave it uncha
30560 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 66 61 6c 6c  nged.** and fall
30570 20 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a 63 61 73   through..*/.cas
30580 65 20 4f 50 5f 49 66 4e 6f 74 5a 65 72 6f 3a 20  e OP_IfNotZero: 
30590 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
305a0 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
305b0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
305c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
305d0 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20  ->flags&MEM_Int 
305e0 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
305f0 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3c 30  aken(pIn1->u.i<0
30600 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  , 2);.  if( pIn1
30610 2d 3e 75 2e 69 20 29 7b 0a 20 20 20 20 20 70 49  ->u.i ){.     pI
30620 6e 31 2d 3e 75 2e 69 20 2d 3d 20 70 4f 70 2d 3e  n1->u.i -= pOp->
30630 70 33 3b 0a 20 20 20 20 20 67 6f 74 6f 20 6a 75  p3;.     goto ju
30640 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
30650 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
30660 6f 64 65 3a 20 44 65 63 72 4a 75 6d 70 5a 65 72  ode: DecrJumpZer
30670 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  o P1 P2 * * *.**
30680 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 28 2d   Synopsis: if (-
30690 2d 72 5b 50 31 5d 29 3d 3d 30 20 67 6f 74 6f 20  -r[P1])==0 goto 
306a0 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  P2.**.** Registe
306b0 72 20 50 31 20 6d 75 73 74 20 68 6f 6c 64 20 61  r P1 must hold a
306c0 6e 20 69 6e 74 65 67 65 72 2e 20 20 44 65 63 72  n integer.  Decr
306d0 65 6d 65 6e 74 20 74 68 65 20 76 61 6c 75 65 20  ement the value 
306e0 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a  in register P1.*
306f0 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  * then jump to P
30700 32 20 69 66 20 74 68 65 20 6e 65 77 20 76 61 6c  2 if the new val
30710 75 65 20 69 73 20 65 78 61 63 74 6c 79 20 7a 65  ue is exactly ze
30720 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  ro..*/.case OP_D
30730 65 63 72 4a 75 6d 70 5a 65 72 6f 3a 20 7b 20 20  ecrJumpZero: {  
30740 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
30750 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
30760 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
30770 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
30780 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  gs&MEM_Int );.  
30790 70 49 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a 20 20 56  pIn1->u.i--;.  V
307a0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70  dbeBranchTaken(p
307b0 49 6e 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29 3b  In1->u.i==0, 2);
307c0 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
307d0 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  ==0 ) goto jump_
307e0 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a  to_p2;.  break;.
307f0 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a  }.../* Opcode: J
30800 75 6d 70 5a 65 72 6f 49 6e 63 72 20 50 31 20 50  umpZeroIncr P1 P
30810 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
30820 73 69 73 3a 20 69 66 20 28 72 5b 50 31 5d 2b 2b  sis: if (r[P1]++
30830 29 3d 3d 30 20 29 20 67 6f 74 6f 20 50 32 0a 2a  )==0 ) goto P2.*
30840 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65  *.** The registe
30850 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69  r P1 must contai
30860 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49  n an integer.  I
30870 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  f register P1 is
30880 20 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 7a 65   initially.** ze
30890 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
308a0 20 50 32 2e 20 20 49 6e 63 72 65 6d 65 6e 74 20   P2.  Increment 
308b0 72 65 67 69 73 74 65 72 20 50 31 20 72 65 67 61  register P1 rega
308c0 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65  rdless of whethe
308d0 72 20 6f 72 0a 2a 2a 20 6e 6f 74 20 74 68 65 20  r or.** not the 
308e0 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2e 0a 2a  jump is taken..*
308f0 2f 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70 5a 65  /.case OP_JumpZe
30900 72 6f 49 6e 63 72 3a 20 7b 20 20 20 20 20 20 20  roIncr: {       
30910 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
30920 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
30930 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
30940 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26  rt( pIn1->flags&
30950 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62  MEM_Int );.  Vdb
30960 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e  eBranchTaken(pIn
30970 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29 3b 0a 20  1->u.i==0, 2);. 
30980 20 69 66 28 20 28 70 49 6e 31 2d 3e 75 2e 69 2b   if( (pIn1->u.i+
30990 2b 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d  +)==0 ) goto jum
309a0 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b  p_to_p2;.  break
309b0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
309c0 41 67 67 53 74 65 70 30 20 2a 20 50 32 20 50 33  AggStep0 * P2 P3
309d0 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
309e0 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20  is: accum=r[P3] 
309f0 73 74 65 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a  step(r[P2@P5]).*
30a00 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65  *.** Execute the
30a10 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66   step function f
30a20 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e  or an aggregate.
30a30 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f    The.** functio
30a40 6e 20 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e  n has P5 argumen
30a50 74 73 2e 20 20 20 50 34 20 69 73 20 61 20 70 6f  ts.   P4 is a po
30a60 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e  inter to the Fun
30a70 63 44 65 66 0a 2a 2a 20 73 74 72 75 63 74 75 72  cDef.** structur
30a80 65 20 74 68 61 74 20 73 70 65 63 69 66 69 65 73  e that specifies
30a90 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20   the function.  
30aa0 52 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74  Register P3 is t
30ab0 68 65 0a 2a 2a 20 61 63 63 75 6d 75 6c 61 74 6f  he.** accumulato
30ac0 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20  r..**.** The P5 
30ad0 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74 61  arguments are ta
30ae0 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65  ken from registe
30af0 72 20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20  r P2 and its.** 
30b00 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 2f  successors..*/./
30b10 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 53 74 65  * Opcode: AggSte
30b20 70 20 2a 20 50 32 20 50 33 20 50 34 20 50 35 0a  p * P2 P3 P4 P5.
30b30 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63  ** Synopsis: acc
30b40 75 6d 3d 72 5b 50 33 5d 20 73 74 65 70 28 72 5b  um=r[P3] step(r[
30b50 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78  P2@P5]).**.** Ex
30b60 65 63 75 74 65 20 74 68 65 20 73 74 65 70 20 66  ecute the step f
30b70 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61  unction for an a
30b80 67 67 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a  ggregate.  The.*
30b90 2a 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50  * function has P
30ba0 35 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50  5 arguments.   P
30bb0 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
30bc0 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e  o an sqlite3_con
30bd0 74 65 78 74 0a 2a 2a 20 6f 62 6a 65 63 74 20 74  text.** object t
30be0 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 72  hat is used to r
30bf0 75 6e 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  un the function.
30c00 20 20 52 65 67 69 73 74 65 72 20 50 33 20 69 73    Register P3 is
30c10 0a 2a 2a 20 61 73 20 74 68 65 20 61 63 63 75 6d  .** as the accum
30c20 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68  ulator..**.** Th
30c30 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61  e P5 arguments a
30c40 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65  re taken from re
30c50 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 69 74  gister P2 and it
30c60 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e  s.** successors.
30c70 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
30c80 64 65 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20  de is initially 
30c90 63 6f 64 65 64 20 61 73 20 4f 50 5f 41 67 67 53  coded as OP_AggS
30ca0 74 65 70 30 2e 20 20 4f 6e 20 66 69 72 73 74 20  tep0.  On first 
30cb0 65 76 61 6c 75 61 74 69 6f 6e 2c 0a 2a 2a 20 74  evaluation,.** t
30cc0 68 65 20 46 75 6e 63 44 65 66 20 73 74 6f 72 65  he FuncDef store
30cd0 64 20 69 6e 20 50 34 20 69 73 20 63 6f 6e 76 65  d in P4 is conve
30ce0 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 73 71 6c  rted into an sql
30cf0 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 61 6e 64  ite3_context and
30d00 0a 2a 2a 20 74 68 65 20 6f 70 63 6f 64 65 20 69  .** the opcode i
30d10 73 20 63 68 61 6e 67 65 64 2e 20 20 49 6e 20 74  s changed.  In t
30d20 68 69 73 20 77 61 79 2c 20 74 68 65 20 69 6e 69  his way, the ini
30d30 74 69 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 20 74  tialization of t
30d40 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f  he.** sqlite3_co
30d50 6e 74 65 78 74 20 6f 6e 6c 79 20 68 61 70 70 65  ntext only happe
30d60 6e 73 20 6f 6e 63 65 2c 20 69 6e 73 74 65 61 64  ns once, instead
30d70 20 6f 66 20 6f 6e 20 65 61 63 68 20 63 61 6c 6c   of on each call
30d80 20 74 6f 20 74 68 65 0a 2a 2a 20 73 74 65 70 20   to the.** step 
30d90 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  function..*/.cas
30da0 65 20 4f 50 5f 41 67 67 53 74 65 70 30 3a 20 7b  e OP_AggStep0: {
30db0 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 73 71 6c 69  .  int n;.  sqli
30dc0 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74  te3_context *pCt
30dd0 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  x;..  assert( pO
30de0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55  p->p4type==P4_FU
30df0 4e 43 44 45 46 20 29 3b 0a 20 20 6e 20 3d 20 70  NCDEF );.  n = p
30e00 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72 74  Op->p5;.  assert
30e10 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
30e20 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
30e30 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
30e40 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c    assert( n==0 |
30e50 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  | (pOp->p2>0 && 
30e60 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70 2d 3e 6e  pOp->p2+n<=(p->n
30e70 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  Mem-p->nCursor)+
30e80 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  1) );.  assert( 
30e90 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20  pOp->p3<pOp->p2 
30ea0 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d  || pOp->p3>=pOp-
30eb0 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 43 74 78 20  >p2+n );.  pCtx 
30ec0 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  = sqlite3DbMallo
30ed0 63 52 61 77 4e 4e 28 64 62 2c 20 73 69 7a 65 6f  cRawNN(db, sizeo
30ee0 66 28 2a 70 43 74 78 29 20 2b 20 28 6e 2d 31 29  f(*pCtx) + (n-1)
30ef0 2a 73 69 7a 65 6f 66 28 73 71 6c 69 74 65 33 5f  *sizeof(sqlite3_
30f00 76 61 6c 75 65 2a 29 29 3b 0a 20 20 69 66 28 20  value*));.  if( 
30f10 70 43 74 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  pCtx==0 ) goto n
30f20 6f 5f 6d 65 6d 3b 0a 20 20 70 43 74 78 2d 3e 70  o_mem;.  pCtx->p
30f30 4d 65 6d 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d  Mem = 0;.  pCtx-
30f40 3e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34  >pFunc = pOp->p4
30f50 2e 70 46 75 6e 63 3b 0a 20 20 70 43 74 78 2d 3e  .pFunc;.  pCtx->
30f60 69 4f 70 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  iOp = (int)(pOp 
30f70 2d 20 61 4f 70 29 3b 0a 20 20 70 43 74 78 2d 3e  - aOp);.  pCtx->
30f80 70 56 64 62 65 20 3d 20 70 3b 0a 20 20 70 43 74  pVdbe = p;.  pCt
30f90 78 2d 3e 61 72 67 63 20 3d 20 6e 3b 0a 20 20 70  x->argc = n;.  p
30fa0 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f  Op->p4type = P4_
30fb0 46 55 4e 43 43 54 58 3b 0a 20 20 70 4f 70 2d 3e  FUNCCTX;.  pOp->
30fc0 70 34 2e 70 43 74 78 20 3d 20 70 43 74 78 3b 0a  p4.pCtx = pCtx;.
30fd0 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20    pOp->opcode = 
30fe0 4f 50 5f 41 67 67 53 74 65 70 3b 0a 20 20 2f 2a  OP_AggStep;.  /*
30ff0 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   Fall through in
31000 74 6f 20 4f 50 5f 41 67 67 53 74 65 70 20 2a 2f  to OP_AggStep */
31010 0a 7d 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74  .}.case OP_AggSt
31020 65 70 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20  ep: {.  int i;. 
31030 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
31040 20 2a 70 43 74 78 3b 0a 20 20 4d 65 6d 20 2a 70   *pCtx;.  Mem *p
31050 4d 65 6d 3b 0a 20 20 4d 65 6d 20 74 3b 0a 0a 20  Mem;.  Mem t;.. 
31060 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
31070 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 43 54 58  type==P4_FUNCCTX
31080 20 29 3b 0a 20 20 70 43 74 78 20 3d 20 70 4f 70   );.  pCtx = pOp
31090 2d 3e 70 34 2e 70 43 74 78 3b 0a 20 20 70 4d 65  ->p4.pCtx;.  pMe
310a0 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
310b0 33 5d 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69  3];..  /* If thi
310c0 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e  s function is in
310d0 73 69 64 65 20 6f 66 20 61 20 74 72 69 67 67 65  side of a trigge
310e0 72 2c 20 74 68 65 20 72 65 67 69 73 74 65 72 20  r, the register 
310f0 61 72 72 61 79 20 69 6e 20 61 4d 65 6d 5b 5d 0a  array in aMem[].
31100 20 20 2a 2a 20 6d 69 67 68 74 20 63 68 61 6e 67    ** might chang
31110 65 20 66 72 6f 6d 20 6f 6e 65 20 65 76 61 6c 75  e from one evalu
31120 61 74 69 6f 6e 20 74 6f 20 74 68 65 20 6e 65 78  ation to the nex
31130 74 2e 20 20 54 68 65 20 6e 65 78 74 20 62 6c 6f  t.  The next blo
31140 63 6b 20 6f 66 20 63 6f 64 65 0a 20 20 2a 2a 20  ck of code.  ** 
31150 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66  checks to see if
31160 20 74 68 65 20 72 65 67 69 73 74 65 72 20 61 72   the register ar
31170 72 61 79 20 68 61 73 20 63 68 61 6e 67 65 64 2c  ray has changed,
31180 20 61 6e 64 20 69 66 20 73 6f 20 69 74 0a 20 20   and if so it.  
31190 2a 2a 20 72 65 69 6e 69 74 69 61 6c 69 7a 65 73  ** reinitializes
311a0 20 74 68 65 20 72 65 6c 61 76 61 6e 74 20 70 61   the relavant pa
311b0 72 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74  rts of the sqlit
311c0 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63  e3_context objec
311d0 74 20 2a 2f 0a 20 20 69 66 28 20 70 43 74 78 2d  t */.  if( pCtx-
311e0 3e 70 4d 65 6d 20 21 3d 20 70 4d 65 6d 20 29 7b  >pMem != pMem ){
311f0 0a 20 20 20 20 70 43 74 78 2d 3e 70 4d 65 6d 20  .    pCtx->pMem 
31200 3d 20 70 4d 65 6d 3b 0a 20 20 20 20 66 6f 72 28  = pMem;.    for(
31210 69 3d 70 43 74 78 2d 3e 61 72 67 63 2d 31 3b 20  i=pCtx->argc-1; 
31220 69 3e 3d 30 3b 20 69 2d 2d 29 20 70 43 74 78 2d  i>=0; i--) pCtx-
31230 3e 61 72 67 76 5b 69 5d 20 3d 20 26 61 4d 65 6d  >argv[i] = &aMem
31240 5b 70 4f 70 2d 3e 70 32 2b 69 5d 3b 0a 20 20 7d  [pOp->p2+i];.  }
31250 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
31260 44 45 42 55 47 0a 20 20 66 6f 72 28 69 3d 30 3b  DEBUG.  for(i=0;
31270 20 69 3c 70 43 74 78 2d 3e 61 72 67 63 3b 20 69   i<pCtx->argc; i
31280 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
31290 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 43 74 78   memIsValid(pCtx
312a0 2d 3e 61 72 67 76 5b 69 5d 29 20 29 3b 0a 20 20  ->argv[i]) );.  
312b0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
312c0 28 70 4f 70 2d 3e 70 32 2b 69 2c 20 70 43 74 78  (pOp->p2+i, pCtx
312d0 2d 3e 61 72 67 76 5b 69 5d 29 3b 0a 20 20 7d 0a  ->argv[i]);.  }.
312e0 23 65 6e 64 69 66 0a 0a 20 20 70 4d 65 6d 2d 3e  #endif..  pMem->
312f0 6e 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n++;.  sqlite3Vd
31300 62 65 4d 65 6d 49 6e 69 74 28 26 74 2c 20 64 62  beMemInit(&t, db
31310 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 70  , MEM_Null);.  p
31320 43 74 78 2d 3e 70 4f 75 74 20 3d 20 26 74 3b 0a  Ctx->pOut = &t;.
31330 20 20 70 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72    pCtx->fErrorOr
31340 41 75 78 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d  Aux = 0;.  pCtx-
31350 3e 73 6b 69 70 46 6c 61 67 20 3d 20 30 3b 0a 20  >skipFlag = 0;. 
31360 20 28 70 43 74 78 2d 3e 70 46 75 6e 63 2d 3e 78   (pCtx->pFunc->x
31370 53 46 75 6e 63 29 28 70 43 74 78 2c 70 43 74 78  SFunc)(pCtx,pCtx
31380 2d 3e 61 72 67 63 2c 70 43 74 78 2d 3e 61 72 67  ->argc,pCtx->arg
31390 76 29 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34  v); /* IMP: R-24
313a0 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20 69  505-23230 */.  i
313b0 66 28 20 70 43 74 78 2d 3e 66 45 72 72 6f 72 4f  f( pCtx->fErrorO
313c0 72 41 75 78 20 29 7b 0a 20 20 20 20 69 66 28 20  rAux ){.    if( 
313d0 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 20 29 7b  pCtx->isError ){
313e0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
313f0 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c  beError(p, "%s",
31400 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
31410 65 78 74 28 26 74 29 29 3b 0a 20 20 20 20 20 20  ext(&t));.      
31420 72 63 20 3d 20 70 43 74 78 2d 3e 69 73 45 72 72  rc = pCtx->isErr
31430 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  or;.    }.    sq
31440 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
31450 61 73 65 28 26 74 29 3b 0a 20 20 20 20 69 66 28  ase(&t);.    if(
31460 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
31470 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
31480 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
31490 72 74 28 20 74 2e 66 6c 61 67 73 3d 3d 4d 45 4d  rt( t.flags==MEM
314a0 5f 4e 75 6c 6c 20 29 3b 0a 20 20 7d 0a 20 20 69  _Null );.  }.  i
314b0 66 28 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61  f( pCtx->skipFla
314c0 67 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  g ){.    assert(
314d0 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d   pOp[-1].opcode=
314e0 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20  =OP_CollSeq );. 
314f0 20 20 20 69 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70     i = pOp[-1].p
31500 31 3b 0a 20 20 20 20 69 66 28 20 69 20 29 20 73  1;.    if( i ) s
31510 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
31520 49 6e 74 36 34 28 26 61 4d 65 6d 5b 69 5d 2c 20  Int64(&aMem[i], 
31530 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  1);.  }.  break;
31540 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
31550 67 67 46 69 6e 61 6c 20 50 31 20 50 32 20 2a 20  ggFinal P1 P2 * 
31560 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
31570 3a 20 61 63 63 75 6d 3d 72 5b 50 31 5d 20 4e 3d  : accum=r[P1] N=
31580 50 32 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65  P2.**.** Execute
31590 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 20 66   the finalizer f
315a0 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61  unction for an a
315b0 67 67 72 65 67 61 74 65 2e 20 20 50 31 20 69 73  ggregate.  P1 is
315c0 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c  .** the memory l
315d0 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20  ocation that is 
315e0 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 20  the accumulator 
315f0 66 6f 72 20 74 68 65 20 61 67 67 72 65 67 61 74  for the aggregat
31600 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74  e..**.** P2 is t
31610 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67  he number of arg
31620 75 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65 20  uments that the 
31630 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74 61  step function ta
31640 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73  kes and.** P4 is
31650 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
31660 65 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74 68  e FuncDef for th
31670 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68  is function.  Th
31680 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  e P2.** argument
31690 20 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20   is not used by 
316a0 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49 74  this opcode.  It
316b0 20 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20 74   is only there t
316c0 6f 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a 2a  o disambiguate.*
316d0 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74  * functions that
316e0 20 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69 6e   can take varyin
316f0 67 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72 67  g numbers of arg
31700 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20  uments.  The.** 
31710 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f  P4 argument is o
31720 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20 74  nly needed for t
31730 68 65 20 64 65 67 65 6e 65 72 61 74 65 20 63 61  he degenerate ca
31740 73 65 20 77 68 65 72 65 0a 2a 2a 20 74 68 65 20  se where.** the 
31750 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 77 61  step function wa
31760 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79  s not previously
31770 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65   called..*/.case
31780 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a   OP_AggFinal: {.
31790 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61    Mem *pMem;.  a
317a0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
317b0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d   && pOp->p1<=(p-
317c0 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
317d0 29 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61  ) );.  pMem = &a
317e0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
317f0 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66  assert( (pMem->f
31800 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c  lags & ~(MEM_Nul
31810 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30 20 29  l|MEM_Agg))==0 )
31820 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
31830 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a 65 28  VdbeMemFinalize(
31840 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70 46  pMem, pOp->p4.pF
31850 75 6e 63 29 3b 0a 20 20 69 66 28 20 72 63 20 29  unc);.  if( rc )
31860 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
31870 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20  eError(p, "%s", 
31880 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
31890 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20 20 20 67  xt(pMem));.    g
318a0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
318b0 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71  _error;.  }.  sq
318c0 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
318d0 6e 63 6f 64 69 6e 67 28 70 4d 65 6d 2c 20 65 6e  ncoding(pMem, en
318e0 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54  coding);.  UPDAT
318f0 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
31900 4d 65 6d 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  Mem);.  if( sqli
31910 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67  te3VdbeMemTooBig
31920 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20 20 67 6f  (pMem) ){.    go
31930 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
31940 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e    break;.}..#ifn
31950 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
31960 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  WAL./* Opcode: C
31970 68 65 63 6b 70 6f 69 6e 74 20 50 31 20 50 32 20  heckpoint P1 P2 
31980 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65  P3 * *.**.** Che
31990 63 6b 70 6f 69 6e 74 20 64 61 74 61 62 61 73 65  ckpoint database
319a0 20 50 31 2e 20 54 68 69 73 20 69 73 20 61 20 6e   P1. This is a n
319b0 6f 2d 6f 70 20 69 66 20 50 31 20 69 73 20 6e 6f  o-op if P1 is no
319c0 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 0a 2a  t currently in.*
319d0 2a 20 57 41 4c 20 6d 6f 64 65 2e 20 50 61 72 61  * WAL mode. Para
319e0 6d 65 74 65 72 20 50 32 20 69 73 20 6f 6e 65 20  meter P2 is one 
319f0 6f 66 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  of SQLITE_CHECKP
31a00 4f 49 4e 54 5f 50 41 53 53 49 56 45 2c 20 46 55  OINT_PASSIVE, FU
31a10 4c 4c 2c 0a 2a 2a 20 52 45 53 54 41 52 54 2c 20  LL,.** RESTART, 
31a20 6f 72 20 54 52 55 4e 43 41 54 45 2e 20 20 57 72  or TRUNCATE.  Wr
31a30 69 74 65 20 31 20 6f 72 20 30 20 69 6e 74 6f 20  ite 1 or 0 into 
31a40 6d 65 6d 5b 50 33 5d 20 69 66 20 74 68 65 20 63  mem[P3] if the c
31a50 68 65 63 6b 70 6f 69 6e 74 20 72 65 74 75 72 6e  heckpoint return
31a60 73 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59  s.** SQLITE_BUSY
31a70 20 6f 72 20 6e 6f 74 2c 20 72 65 73 70 65 63 74   or not, respect
31a80 69 76 65 6c 79 2e 20 20 57 72 69 74 65 20 74 68  ively.  Write th
31a90 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  e number of page
31aa0 73 20 69 6e 20 74 68 65 0a 2a 2a 20 57 41 4c 20  s in the.** WAL 
31ab0 61 66 74 65 72 20 74 68 65 20 63 68 65 63 6b 70  after the checkp
31ac0 6f 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b 50 33  oint into mem[P3
31ad0 2b 31 5d 20 61 6e 64 20 74 68 65 20 6e 75 6d 62  +1] and the numb
31ae0 65 72 20 6f 66 20 70 61 67 65 73 0a 2a 2a 20 69  er of pages.** i
31af0 6e 20 74 68 65 20 57 41 4c 20 74 68 61 74 20 68  n the WAL that h
31b00 61 76 65 20 62 65 65 6e 20 63 68 65 63 6b 70 6f  ave been checkpo
31b10 69 6e 74 65 64 20 61 66 74 65 72 20 74 68 65 20  inted after the 
31b20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20 63 6f  checkpoint.** co
31b30 6d 70 6c 65 74 65 73 20 69 6e 74 6f 20 6d 65 6d  mpletes into mem
31b40 5b 50 33 2b 32 5d 2e 20 20 48 6f 77 65 76 65 72  [P3+2].  However
31b50 20 6f 6e 20 61 6e 20 65 72 72 6f 72 2c 20 6d 65   on an error, me
31b60 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a 20 6d  m[P3+1] and.** m
31b70 65 6d 5b 50 33 2b 32 5d 20 61 72 65 20 69 6e 69  em[P3+2] are ini
31b80 74 69 61 6c 69 7a 65 64 20 74 6f 20 2d 31 2e 0a  tialized to -1..
31b90 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68 65 63 6b  */.case OP_Check
31ba0 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 69  point: {.  int i
31bb0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
31bc0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
31bd0 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20  op counter */.  
31be0 69 6e 74 20 61 52 65 73 5b 33 5d 3b 20 20 20 20  int aRes[3];    
31bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c00 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a 20 20  /* Results */.  
31c10 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20  Mem *pMem;      
31c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c30 2f 2a 20 57 72 69 74 65 20 72 65 73 75 6c 74 73  /* Write results
31c40 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61 73 73 65   here */..  asse
31c50 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
31c60 3d 30 20 29 3b 0a 20 20 61 52 65 73 5b 30 5d 20  =0 );.  aRes[0] 
31c70 3d 20 30 3b 0a 20 20 61 52 65 73 5b 31 5d 20 3d  = 0;.  aRes[1] =
31c80 20 61 52 65 73 5b 32 5d 20 3d 20 2d 31 3b 0a 20   aRes[2] = -1;. 
31c90 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
31ca0 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  ==SQLITE_CHECKPO
31cb0 49 4e 54 5f 50 41 53 53 49 56 45 0a 20 20 20 20  INT_PASSIVE.    
31cc0 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53     || pOp->p2==S
31cd0 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
31ce0 5f 46 55 4c 4c 0a 20 20 20 20 20 20 20 7c 7c 20  _FULL.       || 
31cf0 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
31d00 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54 41  CHECKPOINT_RESTA
31d10 52 54 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70  RT.       || pOp
31d20 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45  ->p2==SQLITE_CHE
31d30 43 4b 50 4f 49 4e 54 5f 54 52 55 4e 43 41 54 45  CKPOINT_TRUNCATE
31d40 0a 20 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  .  );.  rc = sql
31d50 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 64  ite3Checkpoint(d
31d60 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
31d70 3e 70 32 2c 20 26 61 52 65 73 5b 31 5d 2c 20 26  >p2, &aRes[1], &
31d80 61 52 65 73 5b 32 5d 29 3b 0a 20 20 69 66 28 20  aRes[2]);.  if( 
31d90 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20 72 63  rc ){.    if( rc
31da0 21 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 20  !=SQLITE_BUSY ) 
31db0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
31dc0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 72 63 20  o_error;.    rc 
31dd0 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20  = SQLITE_OK;.   
31de0 20 61 52 65 73 5b 30 5d 20 3d 20 31 3b 0a 20 20   aRes[0] = 1;.  
31df0 7d 0a 20 20 66 6f 72 28 69 3d 30 2c 20 70 4d 65  }.  for(i=0, pMe
31e00 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
31e10 33 5d 3b 20 69 3c 33 3b 20 69 2b 2b 2c 20 70 4d  3]; i<3; i++, pM
31e20 65 6d 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74  em++){.    sqlit
31e30 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
31e40 34 28 70 4d 65 6d 2c 20 28 69 36 34 29 61 52 65  4(pMem, (i64)aRe
31e50 73 5b 69 5d 29 3b 0a 20 20 7d 20 20 20 20 0a 20  s[i]);.  }    . 
31e60 20 62 72 65 61 6b 3b 0a 7d 3b 20 20 0a 23 65 6e   break;.};  .#en
31e70 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
31e80 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 0a  ITE_OMIT_PRAGMA.
31e90 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 6f 75 72 6e  /* Opcode: Journ
31ea0 61 6c 4d 6f 64 65 20 50 31 20 50 32 20 50 33 20  alMode P1 P2 P3 
31eb0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65  * *.**.** Change
31ec0 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64   the journal mod
31ed0 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31  e of database P1
31ee0 20 74 6f 20 50 33 2e 20 50 33 20 6d 75 73 74 20   to P3. P3 must 
31ef0 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 0a 2a 2a  be one of the.**
31f00 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
31f10 44 45 5f 58 58 58 20 76 61 6c 75 65 73 2e 20 49  DE_XXX values. I
31f20 66 20 63 68 61 6e 67 69 6e 67 20 62 65 74 77 65  f changing betwe
31f30 65 6e 20 74 68 65 20 76 61 72 69 6f 75 73 20 72  en the various r
31f40 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73  ollback.** modes
31f50 20 28 64 65 6c 65 74 65 2c 20 74 72 75 6e 63 61   (delete, trunca
31f60 74 65 2c 20 70 65 72 73 69 73 74 2c 20 6f 66 66  te, persist, off
31f70 20 61 6e 64 20 6d 65 6d 6f 72 79 29 2c 20 74 68   and memory), th
31f80 69 73 20 69 73 20 61 20 73 69 6d 70 6c 65 0a 2a  is is a simple.*
31f90 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 4e 6f 20  * operation. No 
31fa0 49 4f 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a  IO is required..
31fb0 2a 2a 0a 2a 2a 20 49 66 20 63 68 61 6e 67 69 6e  **.** If changin
31fc0 67 20 69 6e 74 6f 20 6f 72 20 6f 75 74 20 6f 66  g into or out of
31fd0 20 57 41 4c 20 6d 6f 64 65 20 74 68 65 20 70 72   WAL mode the pr
31fe0 6f 63 65 64 75 72 65 20 69 73 20 6d 6f 72 65 20  ocedure is more 
31ff0 63 6f 6d 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a  complicated..**.
32000 2a 2a 20 57 72 69 74 65 20 61 20 73 74 72 69 6e  ** Write a strin
32010 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  g containing the
32020 20 66 69 6e 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d   final journal-m
32030 6f 64 65 20 74 6f 20 72 65 67 69 73 74 65 72 20  ode to register 
32040 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a  P2..*/.case OP_J
32050 6f 75 72 6e 61 6c 4d 6f 64 65 3a 20 7b 20 20 20  ournalMode: {   
32060 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 42 74   /* out2 */.  Bt
32070 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20  ree *pBt;       
32080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
32090 20 42 74 72 65 65 20 74 6f 20 63 68 61 6e 67 65   Btree to change
320a0 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66   journal mode of
320b0 20 2a 2f 0a 20 20 50 61 67 65 72 20 2a 70 50 61   */.  Pager *pPa
320c0 67 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ger;            
320d0 20 20 20 20 20 20 2f 2a 20 50 61 67 65 72 20 61        /* Pager a
320e0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 70  ssociated with p
320f0 42 74 20 2a 2f 0a 20 20 69 6e 74 20 65 4e 65 77  Bt */.  int eNew
32100 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
32110 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 6a          /* New j
32120 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20  ournal mode */. 
32130 20 69 6e 74 20 65 4f 6c 64 3b 20 20 20 20 20 20   int eOld;      
32140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32150 20 2f 2a 20 54 68 65 20 6f 6c 64 20 6a 6f 75 72   /* The old jour
32160 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 23 69 66 6e  nal mode */.#ifn
32170 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
32180 57 41 4c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  WAL.  const char
32190 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 20 20 20 20   *zFilename;    
321a0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
321b0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 66   database file f
321c0 6f 72 20 70 50 61 67 65 72 20 2a 2f 0a 23 65 6e  or pPager */.#en
321d0 64 69 66 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75  dif..  pOut = ou
321e0 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
321f0 70 4f 70 29 3b 0a 20 20 65 4e 65 77 20 3d 20 70  pOp);.  eNew = p
32200 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74  Op->p3;.  assert
32210 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  ( eNew==PAGER_JO
32220 55 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45 54 45  URNALMODE_DELETE
32230 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77   .       || eNew
32240 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
32250 4f 44 45 5f 54 52 55 4e 43 41 54 45 20 0a 20 20  ODE_TRUNCATE .  
32260 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
32270 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
32280 50 45 52 53 49 53 54 20 0a 20 20 20 20 20 20 20  PERSIST .       
32290 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
322a0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20  OURNALMODE_OFF. 
322b0 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50        || eNew==P
322c0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
322d0 5f 4d 45 4d 4f 52 59 0a 20 20 20 20 20 20 20 7c  _MEMORY.       |
322e0 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
322f0 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20  URNALMODE_WAL.  
32300 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
32310 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
32320 51 55 45 52 59 0a 20 20 29 3b 0a 20 20 61 73 73  QUERY.  );.  ass
32330 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
32340 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
32350 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
32360 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
32370 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  ;..  pBt = db->a
32380 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
32390 0a 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69  .  pPager = sqli
323a0 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70 42  te3BtreePager(pB
323b0 74 29 3b 0a 20 20 65 4f 6c 64 20 3d 20 73 71 6c  t);.  eOld = sql
323c0 69 74 65 33 50 61 67 65 72 47 65 74 4a 6f 75 72  ite3PagerGetJour
323d0 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 3b  nalMode(pPager);
323e0 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47  .  if( eNew==PAG
323f0 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51  ER_JOURNALMODE_Q
32400 55 45 52 59 20 29 20 65 4e 65 77 20 3d 20 65 4f  UERY ) eNew = eO
32410 6c 64 3b 0a 20 20 69 66 28 20 21 73 71 6c 69 74  ld;.  if( !sqlit
32420 65 33 50 61 67 65 72 4f 6b 54 6f 43 68 61 6e 67  e3PagerOkToChang
32430 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  eJournalMode(pPa
32440 67 65 72 29 20 29 20 65 4e 65 77 20 3d 20 65 4f  ger) ) eNew = eO
32450 6c 64 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ld;..#ifndef SQL
32460 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 7a  ITE_OMIT_WAL.  z
32470 46 69 6c 65 6e 61 6d 65 20 3d 20 73 71 6c 69 74  Filename = sqlit
32480 65 33 50 61 67 65 72 46 69 6c 65 6e 61 6d 65 28  e3PagerFilename(
32490 70 50 61 67 65 72 2c 20 31 29 3b 0a 0a 20 20 2f  pPager, 1);..  /
324a0 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 61  * Do not allow a
324b0 20 74 72 61 6e 73 69 74 69 6f 6e 20 74 6f 20 6a   transition to j
324c0 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20  ournal_mode=WAL 
324d0 66 6f 72 20 61 20 64 61 74 61 62 61 73 65 0a 20  for a database. 
324e0 20 2a 2a 20 69 6e 20 74 65 6d 70 6f 72 61 72 79   ** in temporary
324f0 20 73 74 6f 72 61 67 65 20 6f 72 20 69 66 20 74   storage or if t
32500 68 65 20 56 46 53 20 64 6f 65 73 20 6e 6f 74 20  he VFS does not 
32510 73 75 70 70 6f 72 74 20 73 68 61 72 65 64 20 6d  support shared m
32520 65 6d 6f 72 79 20 0a 20 20 2a 2f 0a 20 20 69 66  emory .  */.  if
32530 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  ( eNew==PAGER_JO
32540 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20  URNALMODE_WAL.  
32550 20 26 26 20 28 73 71 6c 69 74 65 33 53 74 72 6c   && (sqlite3Strl
32560 65 6e 33 30 28 7a 46 69 6c 65 6e 61 6d 65 29 3d  en30(zFilename)=
32570 3d 30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  =0           /* 
32580 54 65 6d 70 20 66 69 6c 65 20 2a 2f 0a 20 20 20  Temp file */.   
32590 20 20 20 20 7c 7c 20 21 73 71 6c 69 74 65 33 50      || !sqlite3P
325a0 61 67 65 72 57 61 6c 53 75 70 70 6f 72 74 65 64  agerWalSupported
325b0 28 70 50 61 67 65 72 29 29 20 20 20 2f 2a 20 4e  (pPager))   /* N
325c0 6f 20 73 68 61 72 65 64 2d 6d 65 6d 6f 72 79 20  o shared-memory 
325d0 73 75 70 70 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a  support */.  ){.
325e0 20 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b      eNew = eOld;
325f0 0a 20 20 7d 0a 0a 20 20 69 66 28 20 28 65 4e 65  .  }..  if( (eNe
32600 77 21 3d 65 4f 6c 64 29 0a 20 20 20 26 26 20 28  w!=eOld).   && (
32610 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eOld==PAGER_JOUR
32620 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20 65  NALMODE_WAL || e
32630 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
32640 41 4c 4d 4f 44 45 5f 57 41 4c 29 0a 20 20 29 7b  ALMODE_WAL).  ){
32650 0a 20 20 20 20 69 66 28 20 21 64 62 2d 3e 61 75  .    if( !db->au
32660 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e  toCommit || db->
32670 6e 56 64 62 65 52 65 61 64 3e 31 20 29 7b 0a 20  nVdbeRead>1 ){. 
32680 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
32690 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 73 71  _ERROR;.      sq
326a0 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
326b0 2c 0a 20 20 20 20 20 20 20 20 20 20 22 63 61 6e  ,.          "can
326c0 6e 6f 74 20 63 68 61 6e 67 65 20 25 73 20 77 61  not change %s wa
326d0 6c 20 6d 6f 64 65 20 66 72 6f 6d 20 77 69 74 68  l mode from with
326e0 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
326f0 22 2c 0a 20 20 20 20 20 20 20 20 20 20 28 65 4e  ",.          (eN
32700 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
32710 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 22 69 6e 74  LMODE_WAL ? "int
32720 6f 22 20 3a 20 22 6f 75 74 20 6f 66 22 29 0a 20  o" : "out of"). 
32730 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 67 6f       );.      go
32740 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
32750 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65  error;.    }else
32760 7b 0a 20 0a 20 20 20 20 20 20 69 66 28 20 65 4f  {. .      if( eO
32770 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ld==PAGER_JOURNA
32780 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a 20 20 20  LMODE_WAL ){.   
32790 20 20 20 20 20 2f 2a 20 49 66 20 6c 65 61 76 69       /* If leavi
327a0 6e 67 20 57 41 4c 20 6d 6f 64 65 2c 20 63 6c 6f  ng WAL mode, clo
327b0 73 65 20 74 68 65 20 6c 6f 67 20 66 69 6c 65 2e  se the log file.
327c0 20 49 66 20 73 75 63 63 65 73 73 66 75 6c 2c 20   If successful, 
327d0 74 68 65 20 63 61 6c 6c 0a 20 20 20 20 20 20 20  the call.       
327e0 20 2a 2a 20 74 6f 20 50 61 67 65 72 43 6c 6f 73   ** to PagerClos
327f0 65 57 61 6c 28 29 20 63 68 65 63 6b 70 6f 69 6e  eWal() checkpoin
32800 74 73 20 61 6e 64 20 64 65 6c 65 74 65 73 20 74  ts and deletes t
32810 68 65 20 77 72 69 74 65 2d 61 68 65 61 64 2d 6c  he write-ahead-l
32820 6f 67 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 66  og .        ** f
32830 69 6c 65 2e 20 41 6e 20 45 58 43 4c 55 53 49 56  ile. An EXCLUSIV
32840 45 20 6c 6f 63 6b 20 6d 61 79 20 73 74 69 6c 6c  E lock may still
32850 20 62 65 20 68 65 6c 64 20 6f 6e 20 74 68 65 20   be held on the 
32860 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 0a 20  database file . 
32870 20 20 20 20 20 20 20 2a 2a 20 61 66 74 65 72 20         ** after 
32880 61 20 73 75 63 63 65 73 73 66 75 6c 20 72 65 74  a successful ret
32890 75 72 6e 2e 20 0a 20 20 20 20 20 20 20 20 2a 2f  urn. .        */
328a0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
328b0 6c 69 74 65 33 50 61 67 65 72 43 6c 6f 73 65 57  lite3PagerCloseW
328c0 61 6c 28 70 50 61 67 65 72 29 3b 0a 20 20 20 20  al(pPager);.    
328d0 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
328e0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
328f0 20 20 20 73 71 6c 69 74 65 33 50 61 67 65 72 53     sqlite3PagerS
32900 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50  etJournalMode(pP
32910 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 20 20 20  ager, eNew);.   
32920 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c       }.      }el
32930 73 65 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47  se if( eOld==PAG
32940 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d  ER_JOURNALMODE_M
32950 45 4d 4f 52 59 20 29 7b 0a 20 20 20 20 20 20 20  EMORY ){.       
32960 20 2f 2a 20 43 61 6e 6e 6f 74 20 74 72 61 6e 73   /* Cannot trans
32970 69 74 69 6f 6e 20 64 69 72 65 63 74 6c 79 20 66  ition directly f
32980 72 6f 6d 20 4d 45 4d 4f 52 59 20 74 6f 20 57 41  rom MEMORY to WA
32990 4c 2e 20 20 55 73 65 20 6d 6f 64 65 20 4f 46 46  L.  Use mode OFF
329a0 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 73 20 61  .        ** as a
329b0 6e 20 69 6e 74 65 72 6d 65 64 69 61 74 65 20 2a  n intermediate *
329c0 2f 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  /.        sqlite
329d0 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c  3PagerSetJournal
329e0 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 50 41 47  Mode(pPager, PAG
329f0 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f  ER_JOURNALMODE_O
32a00 46 46 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a  FF);.      }.  .
32a10 20 20 20 20 20 20 2f 2a 20 4f 70 65 6e 20 61 20        /* Open a 
32a20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74  transaction on t
32a30 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
32a40 2e 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20  . Regardless of 
32a50 74 68 65 20 6a 6f 75 72 6e 61 6c 0a 20 20 20 20  the journal.    
32a60 20 20 2a 2a 20 6d 6f 64 65 2c 20 74 68 69 73 20    ** mode, this 
32a70 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 77 61  transaction alwa
32a80 79 73 20 75 73 65 73 20 61 20 72 6f 6c 6c 62 61  ys uses a rollba
32a90 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 20 20 20 20  ck journal..    
32aa0 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72    */.      asser
32ab0 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 49  t( sqlite3BtreeI
32ac0 73 49 6e 54 72 61 6e 73 28 70 42 74 29 3d 3d 30  sInTrans(pBt)==0
32ad0 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63   );.      if( rc
32ae0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
32af0 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
32b00 74 65 33 42 74 72 65 65 53 65 74 56 65 72 73 69  te3BtreeSetVersi
32b10 6f 6e 28 70 42 74 2c 20 28 65 4e 65 77 3d 3d 50  on(pBt, (eNew==P
32b20 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
32b30 5f 57 41 4c 20 3f 20 32 20 3a 20 31 29 29 3b 0a  _WAL ? 2 : 1));.
32b40 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
32b50 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 69 66 6e 64  }.#endif /* ifnd
32b60 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
32b70 41 4c 20 2a 2f 0a 0a 20 20 69 66 28 20 72 63 20  AL */..  if( rc 
32b80 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20  ) eNew = eOld;. 
32b90 20 65 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 50   eNew = sqlite3P
32ba0 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f  agerSetJournalMo
32bb0 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77 29  de(pPager, eNew)
32bc0 3b 0a 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  ;..  pOut->flags
32bd0 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53   = MEM_Str|MEM_S
32be0 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a  tatic|MEM_Term;.
32bf0 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 28 63 68 61    pOut->z = (cha
32c00 72 20 2a 29 73 71 6c 69 74 65 33 4a 6f 75 72 6e  r *)sqlite3Journ
32c10 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4e 65 77 29  alModename(eNew)
32c20 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 73 71  ;.  pOut->n = sq
32c30 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4f  lite3Strlen30(pO
32c40 75 74 2d 3e 7a 29 3b 0a 20 20 70 4f 75 74 2d 3e  ut->z);.  pOut->
32c50 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  enc = SQLITE_UTF
32c60 38 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  8;.  sqlite3Vdbe
32c70 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
32c80 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  Out, encoding);.
32c90 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
32ca0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
32cb0 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a  or;.  break;.};.
32cc0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
32cd0 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a 2f 0a  _OMIT_PRAGMA */.
32ce0 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
32cf0 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55 55 4d  LITE_OMIT_VACUUM
32d00 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
32d10 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41 43 48  LITE_OMIT_ATTACH
32d20 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 63  )./* Opcode: Vac
32d30 75 75 6d 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  uum * * * * *.**
32d40 0a 2a 2a 20 56 61 63 75 75 6d 20 74 68 65 20 65  .** Vacuum the e
32d50 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 2e 20  ntire database. 
32d60 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c   This opcode wil
32d70 6c 20 63 61 75 73 65 20 6f 74 68 65 72 20 76 69  l cause other vi
32d80 72 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65  rtual.** machine
32d90 73 20 74 6f 20 62 65 20 63 72 65 61 74 65 64 20  s to be created 
32da0 61 6e 64 20 72 75 6e 2e 20 20 49 74 20 6d 61 79  and run.  It may
32db0 20 6e 6f 74 20 62 65 20 63 61 6c 6c 65 64 20 66   not be called f
32dc0 72 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a 20 61 20  rom within.** a 
32dd0 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2f 0a  transaction..*/.
32de0 63 61 73 65 20 4f 50 5f 56 61 63 75 75 6d 3a 20  case OP_Vacuum: 
32df0 7b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  {.  assert( p->r
32e00 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
32e10 72 63 20 3d 20 73 71 6c 69 74 65 33 52 75 6e 56  rc = sqlite3RunV
32e20 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d 73  acuum(&p->zErrMs
32e30 67 2c 20 64 62 29 3b 0a 20 20 69 66 28 20 72 63  g, db);.  if( rc
32e40 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
32e50 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
32e60 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  eak;.}.#endif..#
32e70 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
32e80 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
32e90 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  UM)./* Opcode: I
32ea0 6e 63 72 56 61 63 75 75 6d 20 50 31 20 50 32 20  ncrVacuum P1 P2 
32eb0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66  * * *.**.** Perf
32ec0 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20 73 74 65  orm a single ste
32ed0 70 20 6f 66 20 74 68 65 20 69 6e 63 72 65 6d 65  p of the increme
32ee0 6e 74 61 6c 20 76 61 63 75 75 6d 20 70 72 6f 63  ntal vacuum proc
32ef0 65 64 75 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20  edure on.** the 
32f00 50 31 20 64 61 74 61 62 61 73 65 2e 20 49 66 20  P1 database. If 
32f10 74 68 65 20 76 61 63 75 75 6d 20 68 61 73 20 66  the vacuum has f
32f20 69 6e 69 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f  inished, jump to
32f30 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20   instruction.** 
32f40 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66  P2. Otherwise, f
32f50 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
32f60 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
32f70 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
32f80 49 6e 63 72 56 61 63 75 75 6d 3a 20 7b 20 20 20  IncrVacuum: {   
32f90 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
32fa0 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20    Btree *pBt;.. 
32fb0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
32fc0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
32fd0 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
32fe0 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
32ff0 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70  ->btreeMask, pOp
33000 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72  ->p1) );.  asser
33010 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
33020 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d  0 );.  pBt = db-
33030 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42  >aDb[pOp->p1].pB
33040 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  t;.  rc = sqlite
33050 33 42 74 72 65 65 49 6e 63 72 56 61 63 75 75 6d  3BtreeIncrVacuum
33060 28 70 42 74 29 3b 0a 20 20 56 64 62 65 42 72 61  (pBt);.  VdbeBra
33070 6e 63 68 54 61 6b 65 6e 28 72 63 3d 3d 53 51 4c  nchTaken(rc==SQL
33080 49 54 45 5f 44 4f 4e 45 2c 32 29 3b 0a 20 20 69  ITE_DONE,2);.  i
33090 66 28 20 72 63 20 29 7b 0a 20 20 20 20 69 66 28  f( rc ){.    if(
330a0 20 72 63 21 3d 53 51 4c 49 54 45 5f 44 4f 4e 45   rc!=SQLITE_DONE
330b0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
330c0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
330d0 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
330e0 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
330f0 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _p2;.  }.  break
33100 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f  ;.}.#endif../* O
33110 70 63 6f 64 65 3a 20 45 78 70 69 72 65 20 50 31  pcode: Expire P1
33120 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43   * * * *.**.** C
33130 61 75 73 65 20 70 72 65 63 6f 6d 70 69 6c 65 64  ause precompiled
33140 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 65   statements to e
33150 78 70 69 72 65 2e 20 20 57 68 65 6e 20 61 6e 20  xpire.  When an 
33160 65 78 70 69 72 65 64 20 73 74 61 74 65 6d 65 6e  expired statemen
33170 74 0a 2a 2a 20 69 73 20 65 78 65 63 75 74 65 64  t.** is executed
33180 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 73   using sqlite3_s
33190 74 65 70 28 29 20 69 74 20 77 69 6c 6c 20 65 69  tep() it will ei
331a0 74 68 65 72 20 61 75 74 6f 6d 61 74 69 63 61 6c  ther automatical
331b0 6c 79 0a 2a 2a 20 72 65 70 72 65 70 61 72 65 20  ly.** reprepare 
331c0 69 74 73 65 6c 66 20 28 69 66 20 69 74 20 77 61  itself (if it wa
331d0 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 63 72 65  s originally cre
331e0 61 74 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74  ated using sqlit
331f0 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 29 29  e3_prepare_v2())
33200 0a 2a 2a 20 6f 72 20 69 74 20 77 69 6c 6c 20 66  .** or it will f
33210 61 69 6c 20 77 69 74 68 20 53 51 4c 49 54 45 5f  ail with SQLITE_
33220 53 43 48 45 4d 41 2e 0a 2a 2a 20 0a 2a 2a 20 49  SCHEMA..** .** I
33230 66 20 50 31 20 69 73 20 30 2c 20 74 68 65 6e 20  f P1 is 0, then 
33240 61 6c 6c 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  all SQL statemen
33250 74 73 20 62 65 63 6f 6d 65 20 65 78 70 69 72 65  ts become expire
33260 64 2e 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d  d. If P1 is non-
33270 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20 6f 6e  zero,.** then on
33280 6c 79 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79  ly the currently
33290 20 65 78 65 63 75 74 69 6e 67 20 73 74 61 74 65   executing state
332a0 6d 65 6e 74 20 69 73 20 65 78 70 69 72 65 64 2e  ment is expired.
332b0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 78 70 69  .*/.case OP_Expi
332c0 72 65 3a 20 7b 0a 20 20 69 66 28 20 21 70 4f 70  re: {.  if( !pOp
332d0 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c 69  ->p1 ){.    sqli
332e0 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65  te3ExpirePrepare
332f0 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b  dStatements(db);
33300 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d  .  }else{.    p-
33310 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20  >expired = 1;.  
33320 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  }.  break;.}..#i
33330 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
33340 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 2f  T_SHARED_CACHE./
33350 2a 20 4f 70 63 6f 64 65 3a 20 54 61 62 6c 65 4c  * Opcode: TableL
33360 6f 63 6b 20 50 31 20 50 32 20 50 33 20 50 34 20  ock P1 P2 P3 P4 
33370 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
33380 44 62 3d 50 31 20 72 6f 6f 74 3d 50 32 20 77 72  Db=P1 root=P2 wr
33390 69 74 65 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 62 74  ite=P3.**.** Obt
333a0 61 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20 61 20  ain a lock on a 
333b0 70 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65  particular table
333c0 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  . This instructi
333d0 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20  on is only used 
333e0 77 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68 61 72  when.** the shar
333f0 65 64 2d 63 61 63 68 65 20 66 65 61 74 75 72 65  ed-cache feature
33400 20 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a   is enabled. .**
33410 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e  .** P1 is the in
33420 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62  dex of the datab
33430 61 73 65 20 69 6e 20 73 71 6c 69 74 65 33 2e 61  ase in sqlite3.a
33440 44 62 5b 5d 20 6f 66 20 74 68 65 20 64 61 74 61  Db[] of the data
33450 62 61 73 65 0a 2a 2a 20 6f 6e 20 77 68 69 63 68  base.** on which
33460 20 74 68 65 20 6c 6f 63 6b 20 69 73 20 61 63 71   the lock is acq
33470 75 69 72 65 64 2e 20 20 41 20 72 65 61 64 6c 6f  uired.  A readlo
33480 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69  ck is obtained i
33490 66 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20 61 20  f P3==0 or.** a 
334a0 77 72 69 74 65 20 6c 6f 63 6b 20 69 66 20 50 33  write lock if P3
334b0 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f  ==1..**.** P2 co
334c0 6e 74 61 69 6e 73 20 74 68 65 20 72 6f 6f 74 2d  ntains the root-
334d0 70 61 67 65 20 6f 66 20 74 68 65 20 74 61 62 6c  page of the tabl
334e0 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a  e to lock..**.**
334f0 20 50 34 20 63 6f 6e 74 61 69 6e 73 20 61 20 70   P4 contains a p
33500 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6e 61  ointer to the na
33510 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
33520 62 65 69 6e 67 20 6c 6f 63 6b 65 64 2e 20 54 68  being locked. Th
33530 69 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73  is is only.** us
33540 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61  ed to generate a
33550 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
33560 69 66 20 74 68 65 20 6c 6f 63 6b 20 63 61 6e 6e  if the lock cann
33570 6f 74 20 62 65 20 6f 62 74 61 69 6e 65 64 2e 0a  ot be obtained..
33580 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 61 62 6c 65  */.case OP_Table
33590 4c 6f 63 6b 3a 20 7b 0a 20 20 75 38 20 69 73 57  Lock: {.  u8 isW
335a0 72 69 74 65 4c 6f 63 6b 20 3d 20 28 75 38 29 70  riteLock = (u8)p
335b0 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20 69 73  Op->p3;.  if( is
335c0 57 72 69 74 65 4c 6f 63 6b 20 7c 7c 20 30 3d 3d  WriteLock || 0==
335d0 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54  (db->flags&SQLIT
335e0 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65  E_ReadUncommitte
335f0 64 29 20 29 7b 0a 20 20 20 20 69 6e 74 20 70 31  d) ){.    int p1
33600 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20 20 20   = pOp->p1; .   
33610 20 61 73 73 65 72 74 28 20 70 31 3e 3d 30 20 26   assert( p1>=0 &
33620 26 20 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  & p1<db->nDb );.
33630 20 20 20 20 61 73 73 65 72 74 28 20 44 62 4d 61      assert( DbMa
33640 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
33650 61 73 6b 2c 20 70 31 29 20 29 3b 0a 20 20 20 20  ask, p1) );.    
33660 61 73 73 65 72 74 28 20 69 73 57 72 69 74 65 4c  assert( isWriteL
33670 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72 69 74  ock==0 || isWrit
33680 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20 20 20  eLock==1 );.    
33690 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
336a0 65 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e 61  eLockTable(db->a
336b0 44 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d  Db[p1].pBt, pOp-
336c0 3e 70 32 2c 20 69 73 57 72 69 74 65 4c 6f 63 6b  >p2, isWriteLock
336d0 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 7b  );.    if( rc ){
336e0 0a 20 20 20 20 20 20 69 66 28 20 28 72 63 26 30  .      if( (rc&0
336f0 78 46 46 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43  xFF)==SQLITE_LOC
33700 4b 45 44 20 29 7b 0a 20 20 20 20 20 20 20 20 63  KED ){.        c
33710 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 70  onst char *z = p
33720 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 20 20  Op->p4.z;.      
33730 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
33740 6f 72 28 70 2c 20 22 64 61 74 61 62 61 73 65 20  or(p, "database 
33750 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64 3a  table is locked:
33760 20 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20   %s", z);.      
33770 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  }.      goto abo
33780 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
33790 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
337a0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
337b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
337c0 45 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66  ED_CACHE */..#if
337d0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
337e0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
337f0 20 4f 70 63 6f 64 65 3a 20 56 42 65 67 69 6e 20   Opcode: VBegin 
33800 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  * * * P4 *.**.**
33810 20 50 34 20 6d 61 79 20 62 65 20 61 20 70 6f 69   P4 may be a poi
33820 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74  nter to an sqlit
33830 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
33840 65 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74  e. If so, call t
33850 68 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65  he .** xBegin me
33860 74 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74 61  thod for that ta
33870 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c  ble..**.** Also,
33880 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
33890 50 34 20 69 73 20 73 65 74 2c 20 63 68 65 63 6b  P4 is set, check
338a0 20 74 68 61 74 20 74 68 69 73 20 69 73 20 6e 6f   that this is no
338b0 74 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20 66  t being called f
338c0 72 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20  rom.** within a 
338d0 63 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20 76 69  callback to a vi
338e0 72 74 75 61 6c 20 74 61 62 6c 65 20 78 53 79 6e  rtual table xSyn
338f0 63 28 29 20 6d 65 74 68 6f 64 2e 20 49 66 20 69  c() method. If i
33900 74 20 69 73 2c 20 74 68 65 20 65 72 72 6f 72 0a  t is, the error.
33910 2a 2a 20 63 6f 64 65 20 77 69 6c 6c 20 62 65 20  ** code will be 
33920 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4c 4f  set to SQLITE_LO
33930 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  CKED..*/.case OP
33940 5f 56 42 65 67 69 6e 3a 20 7b 0a 20 20 56 54 61  _VBegin: {.  VTa
33950 62 6c 65 20 2a 70 56 54 61 62 3b 0a 20 20 70 56  ble *pVTab;.  pV
33960 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56  Tab = pOp->p4.pV
33970 74 61 62 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  tab;.  rc = sqli
33980 74 65 33 56 74 61 62 42 65 67 69 6e 28 64 62 2c  te3VtabBegin(db,
33990 20 70 56 54 61 62 29 3b 0a 20 20 69 66 28 20 70   pVTab);.  if( p
339a0 56 54 61 62 20 29 20 73 71 6c 69 74 65 33 56 74  VTab ) sqlite3Vt
339b0 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
339c0 2c 20 70 56 54 61 62 2d 3e 70 56 74 61 62 29 3b  , pVTab->pVtab);
339d0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
339e0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
339f0 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ror;.  break;.}.
33a00 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
33a10 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
33a20 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
33a30 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
33a40 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
33a50 65 3a 20 56 43 72 65 61 74 65 20 50 31 20 50 32  e: VCreate P1 P2
33a60 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 32 20   * * *.**.** P2 
33a70 69 73 20 61 20 72 65 67 69 73 74 65 72 20 74 68  is a register th
33a80 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d  at holds the nam
33a90 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74  e of a virtual t
33aa0 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65  able in database
33ab0 20 0a 2a 2a 20 50 31 2e 20 43 61 6c 6c 20 74 68   .** P1. Call th
33ac0 65 20 78 43 72 65 61 74 65 20 6d 65 74 68 6f 64  e xCreate method
33ad0 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e   for that table.
33ae0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 72 65  .*/.case OP_VCre
33af0 61 74 65 3a 20 7b 0a 20 20 4d 65 6d 20 73 4d 65  ate: {.  Mem sMe
33b00 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  m;          /* F
33b10 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72  or storing the r
33b20 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f  ecord being deco
33b30 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ded */.  const c
33b40 68 61 72 20 2a 7a 54 61 62 3b 20 20 2f 2a 20 4e  har *zTab;  /* N
33b50 61 6d 65 20 6f 66 20 74 68 65 20 76 69 72 74 75  ame of the virtu
33b60 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 20 20 6d  al table */..  m
33b70 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20  emset(&sMem, 0, 
33b80 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20  sizeof(sMem));. 
33b90 20 73 4d 65 6d 2e 64 62 20 3d 20 64 62 3b 0a 20   sMem.db = db;. 
33ba0 20 2f 2a 20 42 65 63 61 75 73 65 20 50 32 20 69   /* Because P2 i
33bb0 73 20 61 6c 77 61 79 73 20 61 20 73 74 61 74 69  s always a stati
33bc0 63 20 73 74 72 69 6e 67 2c 20 69 74 20 69 73 20  c string, it is 
33bd0 69 6d 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 74  impossible for t
33be0 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56  he.  ** sqlite3V
33bf0 64 62 65 4d 65 6d 43 6f 70 79 28 29 20 74 6f 20  dbeMemCopy() to 
33c00 66 61 69 6c 20 2a 2f 0a 20 20 61 73 73 65 72 74  fail */.  assert
33c10 28 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  ( (aMem[pOp->p2]
33c20 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72  .flags & MEM_Str
33c30 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )!=0 );.  assert
33c40 28 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  ( (aMem[pOp->p2]
33c50 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 61  .flags & MEM_Sta
33c60 74 69 63 29 21 3d 30 20 29 3b 0a 20 20 72 63 20  tic)!=0 );.  rc 
33c70 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
33c80 43 6f 70 79 28 26 73 4d 65 6d 2c 20 26 61 4d 65  Copy(&sMem, &aMe
33c90 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 61  m[pOp->p2]);.  a
33ca0 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
33cb0 45 5f 4f 4b 20 29 3b 0a 20 20 7a 54 61 62 20 3d  E_OK );.  zTab =
33cc0 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71   (const char*)sq
33cd0 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
33ce0 28 26 73 4d 65 6d 29 3b 0a 20 20 61 73 73 65 72  (&sMem);.  asser
33cf0 74 28 20 7a 54 61 62 20 7c 7c 20 64 62 2d 3e 6d  t( zTab || db->m
33d00 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20  allocFailed );. 
33d10 20 69 66 28 20 7a 54 61 62 20 29 7b 0a 20 20 20   if( zTab ){.   
33d20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
33d30 62 43 61 6c 6c 43 72 65 61 74 65 28 64 62 2c 20  bCallCreate(db, 
33d40 70 4f 70 2d 3e 70 31 2c 20 7a 54 61 62 2c 20 26  pOp->p1, zTab, &
33d50 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d  p->zErrMsg);.  }
33d60 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
33d70 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b  mRelease(&sMem);
33d80 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
33d90 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
33da0 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ror;.  break;.}.
33db0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
33dc0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
33dd0 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
33de0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
33df0 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
33e00 65 3a 20 56 44 65 73 74 72 6f 79 20 50 31 20 2a  e: VDestroy P1 *
33e10 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
33e20 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
33e30 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
33e40 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
33e50 20 43 61 6c 6c 20 74 68 65 20 78 44 65 73 74 72   Call the xDestr
33e60 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20  oy method.** of 
33e70 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63  that table..*/.c
33e80 61 73 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a  ase OP_VDestroy:
33e90 20 7b 0a 20 20 64 62 2d 3e 6e 56 44 65 73 74 72   {.  db->nVDestr
33ea0 6f 79 2b 2b 3b 0a 20 20 72 63 20 3d 20 73 71 6c  oy++;.  rc = sql
33eb0 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74  ite3VtabCallDest
33ec0 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  roy(db, pOp->p1,
33ed0 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 64   pOp->p4.z);.  d
33ee0 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2d 2d 3b 0a  b->nVDestroy--;.
33ef0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
33f00 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
33f10 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  or;.  break;.}.#
33f20 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
33f30 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
33f40 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
33f50 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
33f60 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
33f70 3a 20 56 4f 70 65 6e 20 50 31 20 2a 20 2a 20 50  : VOpen P1 * * P
33f80 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  4 *.**.** P4 is 
33f90 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76  a pointer to a v
33fa0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a  irtual table obj
33fb0 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f  ect, an sqlite3_
33fc0 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a  vtab structure..
33fd0 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72 73 6f  ** P1 is a curso
33fe0 72 20 6e 75 6d 62 65 72 2e 20 20 54 68 69 73 20  r number.  This 
33ff0 6f 70 63 6f 64 65 20 6f 70 65 6e 73 20 61 20 63  opcode opens a c
34000 75 72 73 6f 72 20 74 6f 20 74 68 65 20 76 69 72  ursor to the vir
34010 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 61 6e  tual.** table an
34020 64 20 73 74 6f 72 65 73 20 74 68 61 74 20 63 75  d stores that cu
34030 72 73 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a 63  rsor in P1..*/.c
34040 61 73 65 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b 0a  ase OP_VOpen: {.
34050 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
34060 75 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  ur;.  sqlite3_vt
34070 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 43 75 72  ab_cursor *pVCur
34080 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ;.  sqlite3_vtab
34090 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74   *pVtab;.  const
340a0 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
340b0 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73  *pModule;..  ass
340c0 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65  ert( p->bIsReade
340d0 72 20 29 3b 0a 20 20 70 43 75 72 20 3d 20 30 3b  r );.  pCur = 0;
340e0 0a 20 20 70 56 43 75 72 20 3d 20 30 3b 0a 20 20  .  pVCur = 0;.  
340f0 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e  pVtab = pOp->p4.
34100 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20  pVtab->pVtab;.  
34110 69 66 28 20 70 56 74 61 62 3d 3d 30 20 7c 7c 20  if( pVtab==0 || 
34120 4e 45 56 45 52 28 70 56 74 61 62 2d 3e 70 4d 6f  NEVER(pVtab->pMo
34130 64 75 6c 65 3d 3d 30 29 20 29 7b 0a 20 20 20 20  dule==0) ){.    
34140 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  rc = SQLITE_LOCK
34150 45 44 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f  ED;.    goto abo
34160 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
34170 0a 20 20 7d 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  .  }.  pModule =
34180 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b   pVtab->pModule;
34190 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d  .  rc = pModule-
341a0 3e 78 4f 70 65 6e 28 70 56 74 61 62 2c 20 26 70  >xOpen(pVtab, &p
341b0 56 43 75 72 29 3b 0a 20 20 73 71 6c 69 74 65 33  VCur);.  sqlite3
341c0 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
341d0 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66  (p, pVtab);.  if
341e0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
341f0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
34200 0a 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65  .  /* Initialize
34210 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
34220 72 73 6f 72 20 62 61 73 65 20 63 6c 61 73 73 20  rsor base class 
34230 2a 2f 0a 20 20 70 56 43 75 72 2d 3e 70 56 74 61  */.  pVCur->pVta
34240 62 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20 2f 2a  b = pVtab;..  /*
34250 20 49 6e 69 74 69 61 6c 69 7a 65 20 76 64 62 65   Initialize vdbe
34260 20 63 75 72 73 6f 72 20 6f 62 6a 65 63 74 20 2a   cursor object *
34270 2f 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63  /.  pCur = alloc
34280 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
34290 2d 3e 70 31 2c 20 30 2c 20 2d 31 2c 20 43 55 52  ->p1, 0, -1, CUR
342a0 54 59 50 45 5f 56 54 41 42 29 3b 0a 20 20 69 66  TYPE_VTAB);.  if
342b0 28 20 70 43 75 72 20 29 7b 0a 20 20 20 20 70 43  ( pCur ){.    pC
342c0 75 72 2d 3e 75 63 2e 70 56 43 75 72 20 3d 20 70  ur->uc.pVCur = p
342d0 56 43 75 72 3b 0a 20 20 20 20 70 56 74 61 62 2d  VCur;.    pVtab-
342e0 3e 6e 52 65 66 2b 2b 3b 0a 20 20 7d 65 6c 73 65  >nRef++;.  }else
342f0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62  {.    assert( db
34300 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
34310 3b 0a 20 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78  ;.    pModule->x
34320 43 6c 6f 73 65 28 70 56 43 75 72 29 3b 0a 20 20  Close(pVCur);.  
34330 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
34340 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
34350 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
34360 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
34370 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
34380 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
34390 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
343a0 20 56 46 69 6c 74 65 72 20 50 31 20 50 32 20 50   VFilter P1 P2 P
343b0 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
343c0 69 73 3a 20 69 70 6c 61 6e 3d 72 5b 50 33 5d 20  is: iplan=r[P3] 
343d0 7a 70 6c 61 6e 3d 27 50 34 27 0a 2a 2a 0a 2a 2a  zplan='P4'.**.**
343e0 20 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20   P1 is a cursor 
343f0 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 56 4f 70  opened using VOp
34400 65 6e 2e 20 20 50 32 20 69 73 20 61 6e 20 61 64  en.  P2 is an ad
34410 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f  dress to jump to
34420 20 69 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65   if.** the filte
34430 72 65 64 20 72 65 73 75 6c 74 20 73 65 74 20 69  red result set i
34440 73 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50  s empty..**.** P
34450 34 20 69 73 20 65 69 74 68 65 72 20 4e 55 4c 4c  4 is either NULL
34460 20 6f 72 20 61 20 73 74 72 69 6e 67 20 74 68 61   or a string tha
34470 74 20 77 61 73 20 67 65 6e 65 72 61 74 65 64 20  t was generated 
34480 62 79 20 74 68 65 20 78 42 65 73 74 49 6e 64 65  by the xBestInde
34490 78 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74  x.** method of t
344a0 68 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20  he module.  The 
344b0 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f  interpretation o
344c0 66 20 74 68 65 20 50 34 20 73 74 72 69 6e 67 20  f the P4 string 
344d0 69 73 20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68  is left.** to th
344e0 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65  e module impleme
344f0 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ntation..**.** T
34500 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b  his opcode invok
34510 65 73 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d  es the xFilter m
34520 65 74 68 6f 64 20 6f 6e 20 74 68 65 20 76 69 72  ethod on the vir
34530 74 75 61 6c 20 74 61 62 6c 65 20 73 70 65 63 69  tual table speci
34540 66 69 65 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20  fied.** by P1.  
34550 54 68 65 20 69 6e 74 65 67 65 72 20 71 75 65 72  The integer quer
34560 79 20 70 6c 61 6e 20 70 61 72 61 6d 65 74 65 72  y plan parameter
34570 20 74 6f 20 78 46 69 6c 74 65 72 20 69 73 20 73   to xFilter is s
34580 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
34590 72 0a 2a 2a 20 50 33 2e 20 52 65 67 69 73 74 65  r.** P3. Registe
345a0 72 20 50 33 2b 31 20 73 74 6f 72 65 73 20 74 68  r P3+1 stores th
345b0 65 20 61 72 67 63 20 70 61 72 61 6d 65 74 65 72  e argc parameter
345c0 20 74 6f 20 62 65 20 70 61 73 73 65 64 20 74 6f   to be passed to
345d0 20 74 68 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20   the.** xFilter 
345e0 6d 65 74 68 6f 64 2e 20 52 65 67 69 73 74 65 72  method. Register
345f0 73 20 50 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67  s P3+2..P3+1+arg
34600 63 20 61 72 65 20 74 68 65 20 61 72 67 63 0a 2a  c are the argc.*
34610 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 72  * additional par
34620 61 6d 65 74 65 72 73 20 77 68 69 63 68 20 61 72  ameters which ar
34630 65 20 70 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78  e passed to.** x
34640 46 69 6c 74 65 72 20 61 73 20 61 72 67 76 2e 20  Filter as argv. 
34650 52 65 67 69 73 74 65 72 20 50 33 2b 32 20 62 65  Register P3+2 be
34660 63 6f 6d 65 73 20 61 72 67 76 5b 30 5d 20 77 68  comes argv[0] wh
34670 65 6e 20 70 61 73 73 65 64 20 74 6f 20 78 46 69  en passed to xFi
34680 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75  lter..**.** A ju
34690 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32  mp is made to P2
346a0 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 73   if the result s
346b0 65 74 20 61 66 74 65 72 20 66 69 6c 74 65 72 69  et after filteri
346c0 6e 67 20 77 6f 75 6c 64 20 62 65 20 65 6d 70 74  ng would be empt
346d0 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46  y..*/.case OP_VF
346e0 69 6c 74 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75  ilter: {   /* ju
346f0 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67  mp */.  int nArg
34700 3b 0a 20 20 69 6e 74 20 69 51 75 65 72 79 3b 0a  ;.  int iQuery;.
34710 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
34720 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
34730 0a 20 20 4d 65 6d 20 2a 70 51 75 65 72 79 3b 0a  .  Mem *pQuery;.
34740 20 20 4d 65 6d 20 2a 70 41 72 67 63 3b 0a 20 20    Mem *pArgc;.  
34750 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72  sqlite3_vtab_cur
34760 73 6f 72 20 2a 70 56 43 75 72 3b 0a 20 20 73 71  sor *pVCur;.  sq
34770 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
34780 62 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  b;.  VdbeCursor 
34790 2a 70 43 75 72 3b 0a 20 20 69 6e 74 20 72 65 73  *pCur;.  int res
347a0 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d  ;.  int i;.  Mem
347b0 20 2a 2a 61 70 41 72 67 3b 0a 0a 20 20 70 51 75   **apArg;..  pQu
347c0 65 72 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  ery = &aMem[pOp-
347d0 3e 70 33 5d 3b 0a 20 20 70 41 72 67 63 20 3d 20  >p3];.  pArgc = 
347e0 26 70 51 75 65 72 79 5b 31 5d 3b 0a 20 20 70 43  &pQuery[1];.  pC
347f0 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ur = p->apCsr[pO
34800 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
34810 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 51 75  ( memIsValid(pQu
34820 65 72 79 29 20 29 3b 0a 20 20 52 45 47 49 53 54  ery) );.  REGIST
34830 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
34840 2c 20 70 51 75 65 72 79 29 3b 0a 20 20 61 73 73  , pQuery);.  ass
34850 65 72 74 28 20 70 43 75 72 2d 3e 65 43 75 72 54  ert( pCur->eCurT
34860 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 56 54 41  ype==CURTYPE_VTA
34870 42 20 29 3b 0a 20 20 70 56 43 75 72 20 3d 20 70  B );.  pVCur = p
34880 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 3b 0a 20  Cur->uc.pVCur;. 
34890 20 70 56 74 61 62 20 3d 20 70 56 43 75 72 2d 3e   pVtab = pVCur->
348a0 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65  pVtab;.  pModule
348b0 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
348c0 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20 74 68  e;..  /* Grab th
348d0 65 20 69 6e 64 65 78 20 6e 75 6d 62 65 72 20 61  e index number a
348e0 6e 64 20 61 72 67 63 20 70 61 72 61 6d 65 74 65  nd argc paramete
348f0 72 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  rs */.  assert( 
34900 28 70 51 75 65 72 79 2d 3e 66 6c 61 67 73 26 4d  (pQuery->flags&M
34910 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20 70 41  EM_Int)!=0 && pA
34920 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f  rgc->flags==MEM_
34930 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20 3d 20  Int );.  nArg = 
34940 28 69 6e 74 29 70 41 72 67 63 2d 3e 75 2e 69 3b  (int)pArgc->u.i;
34950 0a 20 20 69 51 75 65 72 79 20 3d 20 28 69 6e 74  .  iQuery = (int
34960 29 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20  )pQuery->u.i;.. 
34970 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78   /* Invoke the x
34980 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 2a 2f  Filter method */
34990 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 70  .  res = 0;.  ap
349a0 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a  Arg = p->apArg;.
349b0 20 20 66 6f 72 28 69 20 3d 20 30 3b 20 69 3c 6e    for(i = 0; i<n
349c0 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61  Arg; i++){.    a
349d0 70 41 72 67 5b 69 5d 20 3d 20 26 70 41 72 67 63  pArg[i] = &pArgc
349e0 5b 69 2b 31 5d 3b 0a 20 20 7d 0a 20 20 72 63 20  [i+1];.  }.  rc 
349f0 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c 74  = pModule->xFilt
34a00 65 72 28 70 56 43 75 72 2c 20 69 51 75 65 72 79  er(pVCur, iQuery
34a10 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72  , pOp->p4.z, nAr
34a20 67 2c 20 61 70 41 72 67 29 3b 0a 20 20 73 71 6c  g, apArg);.  sql
34a30 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
34a40 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rmsg(p, pVtab);.
34a50 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
34a60 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
34a70 6f 72 3b 0a 20 20 72 65 73 20 3d 20 70 4d 6f 64  or;.  res = pMod
34a80 75 6c 65 2d 3e 78 45 6f 66 28 70 56 43 75 72 29  ule->xEof(pVCur)
34a90 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f  ;.  pCur->nullRo
34aa0 77 20 3d 20 30 3b 0a 20 20 56 64 62 65 42 72 61  w = 0;.  VdbeBra
34ab0 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c  nchTaken(res!=0,
34ac0 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 20  2);.  if( res ) 
34ad0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
34ae0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
34af0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
34b00 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
34b10 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
34b20 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
34b30 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
34b40 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20  Column P1 P2 P3 
34b50 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
34b60 20 72 5b 50 33 5d 3d 76 63 6f 6c 75 6d 6e 28 50   r[P3]=vcolumn(P
34b70 32 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74  2).**.** Store t
34b80 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
34b90 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a  P2-th column of.
34ba0 2a 2a 20 74 68 65 20 72 6f 77 20 6f 66 20 74 68  ** the row of th
34bb0 65 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20  e virtual-table 
34bc0 74 68 61 74 20 74 68 65 20 0a 2a 2a 20 50 31 20  that the .** P1 
34bd0 63 75 72 73 6f 72 20 69 73 20 70 6f 69 6e 74 69  cursor is pointi
34be0 6e 67 20 74 6f 20 69 6e 74 6f 20 72 65 67 69 73  ng to into regis
34bf0 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20  ter P3..*/.case 
34c00 4f 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20  OP_VColumn: {.  
34c10 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
34c20 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  tab;.  const sql
34c30 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
34c40 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 44 65  dule;.  Mem *pDe
34c50 73 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  st;.  sqlite3_co
34c60 6e 74 65 78 74 20 73 43 6f 6e 74 65 78 74 3b 0a  ntext sContext;.
34c70 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
34c80 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
34c90 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
34ca0 74 28 20 70 43 75 72 2d 3e 65 43 75 72 54 79 70  t( pCur->eCurTyp
34cb0 65 3d 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20  e==CURTYPE_VTAB 
34cc0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
34cd0 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
34ce0 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  3<=(p->nMem-p->n
34cf0 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 44 65  Cursor) );.  pDe
34d00 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  st = &aMem[pOp->
34d10 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p3];.  memAboutT
34d20 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74  oChange(p, pDest
34d30 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e  );.  if( pCur->n
34d40 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73 71  ullRow ){.    sq
34d50 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
34d60 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20  ull(pDest);.    
34d70 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74  break;.  }.  pVt
34d80 61 62 20 3d 20 70 43 75 72 2d 3e 75 63 2e 70 56  ab = pCur->uc.pV
34d90 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d  Cur->pVtab;.  pM
34da0 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
34db0 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74  Module;.  assert
34dc0 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75  ( pModule->xColu
34dd0 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28 26  mn );.  memset(&
34de0 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20 73 69 7a  sContext, 0, siz
34df0 65 6f 66 28 73 43 6f 6e 74 65 78 74 29 29 3b 0a  eof(sContext));.
34e00 20 20 73 43 6f 6e 74 65 78 74 2e 70 4f 75 74 20    sContext.pOut 
34e10 3d 20 70 44 65 73 74 3b 0a 20 20 4d 65 6d 53 65  = pDest;.  MemSe
34e20 74 54 79 70 65 46 6c 61 67 28 70 44 65 73 74 2c  tTypeFlag(pDest,
34e30 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 72 63   MEM_Null);.  rc
34e40 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c   = pModule->xCol
34e50 75 6d 6e 28 70 43 75 72 2d 3e 75 63 2e 70 56 43  umn(pCur->uc.pVC
34e60 75 72 2c 20 26 73 43 6f 6e 74 65 78 74 2c 20 70  ur, &sContext, p
34e70 4f 70 2d 3e 70 32 29 3b 0a 20 20 73 71 6c 69 74  Op->p2);.  sqlit
34e80 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
34e90 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20  sg(p, pVtab);.  
34ea0 69 66 28 20 73 43 6f 6e 74 65 78 74 2e 69 73 45  if( sContext.isE
34eb0 72 72 6f 72 20 29 7b 0a 20 20 20 20 72 63 20 3d  rror ){.    rc =
34ec0 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f   sContext.isErro
34ed0 72 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  r;.  }.  sqlite3
34ee0 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
34ef0 6e 67 28 70 44 65 73 74 2c 20 65 6e 63 6f 64 69  ng(pDest, encodi
34f00 6e 67 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  ng);.  REGISTER_
34f10 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
34f20 44 65 73 74 29 3b 0a 20 20 55 50 44 41 54 45 5f  Dest);.  UPDATE_
34f30 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65  MAX_BLOBSIZE(pDe
34f40 73 74 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69  st);..  if( sqli
34f50 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67  te3VdbeMemTooBig
34f60 28 70 44 65 73 74 29 20 29 7b 0a 20 20 20 20 67  (pDest) ){.    g
34f70 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
34f80 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
34f90 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
34fa0 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ror;.  break;.}.
34fb0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
34fc0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
34fd0 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
34fe0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
34ff0 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
35000 65 3a 20 56 4e 65 78 74 20 50 31 20 50 32 20 2a  e: VNext P1 P2 *
35010 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e   * *.**.** Advan
35020 63 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ce virtual table
35030 20 50 31 20 74 6f 20 74 68 65 20 6e 65 78 74 20   P1 to the next 
35040 72 6f 77 20 69 6e 20 69 74 73 20 72 65 73 75 6c  row in its resul
35050 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d  t set and.** jum
35060 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
35070 20 50 32 2e 20 20 4f 72 2c 20 69 66 20 74 68 65   P2.  Or, if the
35080 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 68   virtual table h
35090 61 73 20 72 65 61 63 68 65 64 0a 2a 2a 20 74 68  as reached.** th
350a0 65 20 65 6e 64 20 6f 66 20 69 74 73 20 72 65 73  e end of its res
350b0 75 6c 74 20 73 65 74 2c 20 74 68 65 6e 20 66 61  ult set, then fa
350c0 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
350d0 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
350e0 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  on..*/.case OP_V
350f0 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d  Next: {   /* jum
35100 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76  p */.  sqlite3_v
35110 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
35120 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
35130 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69  le *pModule;.  i
35140 6e 74 20 72 65 73 3b 0a 20 20 56 64 62 65 43 75  nt res;.  VdbeCu
35150 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a 20 20 72  rsor *pCur;..  r
35160 65 73 20 3d 20 30 3b 0a 20 20 70 43 75 72 20 3d  es = 0;.  pCur =
35170 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
35180 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
35190 75 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  ur->eCurType==CU
351a0 52 54 59 50 45 5f 56 54 41 42 20 29 3b 0a 20 20  RTYPE_VTAB );.  
351b0 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f  if( pCur->nullRo
351c0 77 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  w ){.    break;.
351d0 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43    }.  pVtab = pC
351e0 75 72 2d 3e 75 63 2e 70 56 43 75 72 2d 3e 70 56  ur->uc.pVCur->pV
351f0 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  tab;.  pModule =
35200 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b   pVtab->pModule;
35210 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75  .  assert( pModu
35220 6c 65 2d 3e 78 4e 65 78 74 20 29 3b 0a 0a 20 20  le->xNext );..  
35230 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 4e  /* Invoke the xN
35240 65 78 74 28 29 20 6d 65 74 68 6f 64 20 6f 66 20  ext() method of 
35250 74 68 65 20 6d 6f 64 75 6c 65 2e 20 54 68 65 72  the module. Ther
35260 65 20 69 73 20 6e 6f 20 77 61 79 20 66 6f 72 20  e is no way for 
35270 74 68 65 0a 20 20 2a 2a 20 75 6e 64 65 72 6c 79  the.  ** underly
35280 69 6e 67 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ing implementati
35290 6f 6e 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20  on to return an 
352a0 65 72 72 6f 72 20 69 66 20 6f 6e 65 20 6f 63 63  error if one occ
352b0 75 72 73 20 64 75 72 69 6e 67 0a 20 20 2a 2a 20  urs during.  ** 
352c0 78 4e 65 78 74 28 29 2e 20 49 6e 73 74 65 61 64  xNext(). Instead
352d0 2c 20 69 66 20 61 6e 20 65 72 72 6f 72 20 6f 63  , if an error oc
352e0 63 75 72 73 2c 20 74 72 75 65 20 69 73 20 72 65  curs, true is re
352f0 74 75 72 6e 65 64 20 28 69 6e 64 69 63 61 74 69  turned (indicati
35300 6e 67 20 74 68 61 74 20 0a 20 20 2a 2a 20 64 61  ng that .  ** da
35310 74 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65 29  ta is available)
35320 20 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20 63   and the error c
35330 6f 64 65 20 72 65 74 75 72 6e 65 64 20 77 68 65  ode returned whe
35340 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a  n xColumn or.  *
35350 2a 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65 74  * some other met
35360 68 6f 64 20 69 73 20 6e 65 78 74 20 69 6e 76 6f  hod is next invo
35370 6b 65 64 20 6f 6e 20 74 68 65 20 73 61 76 65 20  ked on the save 
35380 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75  virtual table cu
35390 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 72 63 20  rsor..  */.  rc 
353a0 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74  = pModule->xNext
353b0 28 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 29  (pCur->uc.pVCur)
353c0 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 49  ;.  sqlite3VtabI
353d0 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
353e0 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72 63 20  Vtab);.  if( rc 
353f0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
35400 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 72 65 73  _to_error;.  res
35410 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66   = pModule->xEof
35420 28 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 29  (pCur->uc.pVCur)
35430 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
35440 6b 65 6e 28 21 72 65 73 2c 32 29 3b 0a 20 20 69  ken(!res,2);.  i
35450 66 28 20 21 72 65 73 20 29 7b 0a 20 20 20 20 2f  f( !res ){.    /
35460 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 64 61  * If there is da
35470 74 61 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a  ta, jump to P2 *
35480 2f 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f  /.    goto jump_
35490 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f  to_p2_and_check_
354a0 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20  for_interrupt;. 
354b0 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f   }.  goto check_
354c0 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d  for_interrupt;.}
354d0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
354e0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
354f0 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
35500 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
35510 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
35520 64 65 3a 20 56 52 65 6e 61 6d 65 20 50 31 20 2a  de: VRename P1 *
35530 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
35540 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
35550 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
35560 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69   object, an sqli
35570 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
35580 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  re..** This opco
35590 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63  de invokes the c
355a0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 52 65  orresponding xRe
355b0 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 20 54 68 65  name method. The
355c0 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 72 65 67   value.** in reg
355d0 69 73 74 65 72 20 50 31 20 69 73 20 70 61 73 73  ister P1 is pass
355e0 65 64 20 61 73 20 74 68 65 20 7a 4e 61 6d 65 20  ed as the zName 
355f0 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
35600 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 0a  xRename method..
35610 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 52 65 6e 61  */.case OP_VRena
35620 6d 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  me: {.  sqlite3_
35630 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 4d  vtab *pVtab;.  M
35640 65 6d 20 2a 70 4e 61 6d 65 3b 0a 0a 20 20 70 56  em *pName;..  pV
35650 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56  tab = pOp->p4.pV
35660 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4e  tab->pVtab;.  pN
35670 61 6d 65 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  ame = &aMem[pOp-
35680 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
35690 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e  pVtab->pModule->
356a0 78 52 65 6e 61 6d 65 20 29 3b 0a 20 20 61 73 73  xRename );.  ass
356b0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
356c0 70 4e 61 6d 65 29 20 29 3b 0a 20 20 61 73 73 65  pName) );.  asse
356d0 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
356e0 3d 30 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52  =0 );.  REGISTER
356f0 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20  _TRACE(pOp->p1, 
35700 70 4e 61 6d 65 29 3b 0a 20 20 61 73 73 65 72 74  pName);.  assert
35710 28 20 70 4e 61 6d 65 2d 3e 66 6c 61 67 73 20 26  ( pName->flags &
35720 20 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 74 65   MEM_Str );.  te
35730 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65  stcase( pName->e
35740 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38 20  nc==SQLITE_UTF8 
35750 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
35760 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54  Name->enc==SQLIT
35770 45 5f 55 54 46 31 36 42 45 20 29 3b 0a 20 20 74  E_UTF16BE );.  t
35780 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e  estcase( pName->
35790 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31  enc==SQLITE_UTF1
357a0 36 4c 45 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  6LE );.  rc = sq
357b0 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
357c0 6e 63 6f 64 69 6e 67 28 70 4e 61 6d 65 2c 20 53  ncoding(pName, S
357d0 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20 20 69  QLITE_UTF8);.  i
357e0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
357f0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
35800 0a 20 20 72 63 20 3d 20 70 56 74 61 62 2d 3e 70  .  rc = pVtab->p
35810 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 28  Module->xRename(
35820 70 56 74 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29  pVtab, pName->z)
35830 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 49  ;.  sqlite3VtabI
35840 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
35850 56 74 61 62 29 3b 0a 20 20 70 2d 3e 65 78 70 69  Vtab);.  p->expi
35860 72 65 64 20 3d 20 30 3b 0a 20 20 69 66 28 20 72  red = 0;.  if( r
35870 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
35880 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62  ue_to_error;.  b
35890 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
358a0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
358b0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
358c0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70 64  ./* Opcode: VUpd
358d0 61 74 65 20 50 31 20 50 32 20 50 33 20 50 34 20  ate P1 P2 P3 P4 
358e0 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
358f0 64 61 74 61 3d 72 5b 50 33 40 50 32 5d 0a 2a 2a  data=r[P3@P2].**
35900 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
35910 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c  ter to a virtual
35920 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61   table object, a
35930 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  n sqlite3_vtab s
35940 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69  tructure..** Thi
35950 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73  s opcode invokes
35960 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
35970 6e 67 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f  ng xUpdate metho
35980 64 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a 2a 20  d. P2 values.** 
35990 61 72 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 6d  are contiguous m
359a0 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74 61 72  emory cells star
359b0 74 69 6e 67 20 61 74 20 50 33 20 74 6f 20 70 61  ting at P3 to pa
359c0 73 73 20 74 6f 20 74 68 65 20 78 55 70 64 61 74  ss to the xUpdat
359d0 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e  e .** invocation
359e0 2e 20 54 68 65 20 76 61 6c 75 65 20 69 6e 20 72  . The value in r
359f0 65 67 69 73 74 65 72 20 28 50 33 2b 50 32 2d 31  egister (P3+P2-1
35a00 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  ) corresponds to
35a10 20 74 68 65 20 0a 2a 2a 20 70 32 74 68 20 65 6c   the .** p2th el
35a20 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 61 72 67  ement of the arg
35a30 76 20 61 72 72 61 79 20 70 61 73 73 65 64 20 74  v array passed t
35a40 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a 2a  o xUpdate..**.**
35a50 20 54 68 65 20 78 55 70 64 61 74 65 20 6d 65 74   The xUpdate met
35a60 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20 44 45  hod will do a DE
35a70 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e 53 45 52  LETE or an INSER
35a80 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20 54 68  T or both..** Th
35a90 65 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d 65 6e  e argv[0] elemen
35aa0 74 20 28 77 68 69 63 68 20 63 6f 72 72 65 73 70  t (which corresp
35ab0 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79 20 63  onds to memory c
35ac0 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20 74 68  ell P3).** is th
35ad0 65 20 72 6f 77 69 64 20 6f 66 20 61 20 72 6f 77  e rowid of a row
35ae0 20 74 6f 20 64 65 6c 65 74 65 2e 20 20 49 66 20   to delete.  If 
35af0 61 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c 4c 20  argv[0] is NULL 
35b00 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c 65  then no .** dele
35b10 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20 54 68  tion occurs.  Th
35b20 65 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d 65 6e  e argv[1] elemen
35b30 74 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f  t is the rowid o
35b40 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f  f the new .** ro
35b50 77 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65 20  w.  This can be 
35b60 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20 74 68 65  NULL to have the
35b70 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73   virtual table s
35b80 65 6c 65 63 74 20 74 68 65 20 6e 65 77 20 0a 2a  elect the new .*
35b90 2a 20 72 6f 77 69 64 20 66 6f 72 20 69 74 73 65  * rowid for itse
35ba0 6c 66 2e 20 20 54 68 65 20 73 75 62 73 65 71 75  lf.  The subsequ
35bb0 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20  ent elements in 
35bc0 74 68 65 20 61 72 72 61 79 20 61 72 65 20 0a 2a  the array are .*
35bd0 2a 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20  * the values of 
35be0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 6e  columns in the n
35bf0 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49 66  ew row..**.** If
35c00 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f 20 69   P2==1 then no i
35c10 6e 73 65 72 74 20 69 73 20 70 65 72 66 6f 72 6d  nsert is perform
35c20 65 64 2e 20 20 61 72 67 76 5b 30 5d 20 69 73 20  ed.  argv[0] is 
35c30 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a 20  the rowid of.** 
35c40 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e  a row to delete.
35c50 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 62  .**.** P1 is a b
35c60 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49 66 20  oolean flag. If 
35c70 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 72 75  it is set to tru
35c80 65 20 61 6e 64 20 74 68 65 20 78 55 70 64 61 74  e and the xUpdat
35c90 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73 75 63  e call.** is suc
35ca0 63 65 73 73 66 75 6c 2c 20 74 68 65 6e 20 74 68  cessful, then th
35cb0 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64  e value returned
35cc0 20 62 79 20 73 71 6c 69 74 65 33 5f 6c 61 73 74   by sqlite3_last
35cd0 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20  _insert_rowid() 
35ce0 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f 20 74 68  .** is set to th
35cf0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72  e value of the r
35d00 6f 77 69 64 20 66 6f 72 20 74 68 65 20 72 6f 77  owid for the row
35d10 20 6a 75 73 74 20 69 6e 73 65 72 74 65 64 2e 0a   just inserted..
35d20 2a 2a 0a 2a 2a 20 50 35 20 69 73 20 74 68 65 20  **.** P5 is the 
35d30 65 72 72 6f 72 20 61 63 74 69 6f 6e 73 20 28 4f  error actions (O
35d40 45 5f 52 65 70 6c 61 63 65 2c 20 4f 45 5f 46 61  E_Replace, OE_Fa
35d50 69 6c 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 65  il, OE_Ignore, e
35d60 74 63 29 20 74 6f 0a 2a 2a 20 61 70 70 6c 79 20  tc) to.** apply 
35d70 69 6e 20 74 68 65 20 63 61 73 65 20 6f 66 20 61  in the case of a
35d80 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c   constraint fail
35d90 75 72 65 20 6f 6e 20 61 6e 20 69 6e 73 65 72 74  ure on an insert
35da0 20 6f 72 20 75 70 64 61 74 65 2e 0a 2a 2f 0a 63   or update..*/.c
35db0 61 73 65 20 4f 50 5f 56 55 70 64 61 74 65 3a 20  ase OP_VUpdate: 
35dc0 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  {.  sqlite3_vtab
35dd0 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74   *pVtab;.  const
35de0 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
35df0 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20  *pModule;.  int 
35e00 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  nArg;.  int i;. 
35e10 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 72 6f   sqlite_int64 ro
35e20 77 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41  wid;.  Mem **apA
35e30 72 67 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a 0a  rg;.  Mem *pX;..
35e40 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
35e50 32 3d 3d 31 20 20 20 20 20 20 20 20 7c 7c 20 70  2==1        || p
35e60 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 46 61 69 6c 20  Op->p5==OE_Fail 
35e70 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45    || pOp->p5==OE
35e80 5f 52 6f 6c 6c 62 61 63 6b 20 0a 20 20 20 20 20  _Rollback .     
35e90 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45    || pOp->p5==OE
35ea0 5f 41 62 6f 72 74 20 7c 7c 20 70 4f 70 2d 3e 70  _Abort || pOp->p
35eb0 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 7c 7c 20  5==OE_Ignore || 
35ec0 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c  pOp->p5==OE_Repl
35ed0 61 63 65 0a 20 20 29 3b 0a 20 20 61 73 73 65 72  ace.  );.  asser
35ee0 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
35ef0 30 20 29 3b 0a 20 20 70 56 74 61 62 20 3d 20 70  0 );.  pVtab = p
35f00 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56  Op->p4.pVtab->pV
35f10 74 61 62 3b 0a 20 20 69 66 28 20 70 56 74 61 62  tab;.  if( pVtab
35f20 3d 3d 30 20 7c 7c 20 4e 45 56 45 52 28 70 56 74  ==0 || NEVER(pVt
35f30 61 62 2d 3e 70 4d 6f 64 75 6c 65 3d 3d 30 29 20  ab->pModule==0) 
35f40 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
35f50 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 67  TE_LOCKED;.    g
35f60 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
35f70 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 4d  _error;.  }.  pM
35f80 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
35f90 4d 6f 64 75 6c 65 3b 0a 20 20 6e 41 72 67 20 3d  Module;.  nArg =
35fa0 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65   pOp->p2;.  asse
35fb0 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
35fc0 3d 50 34 5f 56 54 41 42 20 29 3b 0a 20 20 69 66  =P4_VTAB );.  if
35fd0 28 20 41 4c 57 41 59 53 28 70 4d 6f 64 75 6c 65  ( ALWAYS(pModule
35fe0 2d 3e 78 55 70 64 61 74 65 29 20 29 7b 0a 20 20  ->xUpdate) ){.  
35ff0 20 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c    u8 vtabOnConfl
36000 69 63 74 20 3d 20 64 62 2d 3e 76 74 61 62 4f 6e  ict = db->vtabOn
36010 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20 61 70  Conflict;.    ap
36020 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a  Arg = p->apArg;.
36030 20 20 20 20 70 58 20 3d 20 26 61 4d 65 6d 5b 70      pX = &aMem[p
36040 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 66 6f 72  Op->p3];.    for
36050 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b  (i=0; i<nArg; i+
36060 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  +){.      assert
36070 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 58 29  ( memIsValid(pX)
36080 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f   );.      memAbo
36090 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 58  utToChange(p, pX
360a0 29 3b 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69  );.      apArg[i
360b0 5d 20 3d 20 70 58 3b 0a 20 20 20 20 20 20 70 58  ] = pX;.      pX
360c0 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62  ++;.    }.    db
360d0 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74  ->vtabOnConflict
360e0 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 20 20   = pOp->p5;.    
360f0 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 55  rc = pModule->xU
36100 70 64 61 74 65 28 70 56 74 61 62 2c 20 6e 41 72  pdate(pVtab, nAr
36110 67 2c 20 61 70 41 72 67 2c 20 26 72 6f 77 69 64  g, apArg, &rowid
36120 29 3b 0a 20 20 20 20 64 62 2d 3e 76 74 61 62 4f  );.    db->vtabO
36130 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 76 74 61 62  nConflict = vtab
36140 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20  OnConflict;.    
36150 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
36160 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62  tErrmsg(p, pVtab
36170 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  );.    if( rc==S
36180 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 4f 70 2d  QLITE_OK && pOp-
36190 3e 70 31 20 29 7b 0a 20 20 20 20 20 20 61 73 73  >p1 ){.      ass
361a0 65 72 74 28 20 6e 41 72 67 3e 31 20 26 26 20 61  ert( nArg>1 && a
361b0 70 41 72 67 5b 30 5d 20 26 26 20 28 61 70 41 72  pArg[0] && (apAr
361c0 67 5b 30 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  g[0]->flags&MEM_
361d0 4e 75 6c 6c 29 20 29 3b 0a 20 20 20 20 20 20 64  Null) );.      d
361e0 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c  b->lastRowid = l
361f0 61 73 74 52 6f 77 69 64 20 3d 20 72 6f 77 69 64  astRowid = rowid
36200 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
36210 28 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54  (rc&0xff)==SQLIT
36220 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 26 26 20  E_CONSTRAINT && 
36230 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 62  pOp->p4.pVtab->b
36240 43 6f 6e 73 74 72 61 69 6e 74 20 29 7b 0a 20 20  Constraint ){.  
36250 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 3d      if( pOp->p5=
36260 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20  =OE_Ignore ){.  
36270 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
36280 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 7d 65 6c 73  E_OK;.      }els
36290 65 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 65 72  e{.        p->er
362a0 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28 28 70 4f  rorAction = ((pO
362b0 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63  p->p5==OE_Replac
362c0 65 29 20 3f 20 4f 45 5f 41 62 6f 72 74 20 3a 20  e) ? OE_Abort : 
362d0 70 4f 70 2d 3e 70 35 29 3b 0a 20 20 20 20 20 20  pOp->p5);.      
362e0 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
362f0 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b     p->nChange++;
36300 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72  .    }.    if( r
36310 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
36320 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
36330 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
36340 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
36350 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
36360 2f 0a 0a 23 69 66 6e 64 65 66 20 20 53 51 4c 49  /..#ifndef  SQLI
36370 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
36380 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a  AGMAS./* Opcode:
36390 20 50 61 67 65 63 6f 75 6e 74 20 50 31 20 50 32   Pagecount P1 P2
363a0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69   * * *.**.** Wri
363b0 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 6e  te the current n
363c0 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
363d0 6e 20 64 61 74 61 62 61 73 65 20 50 31 20 74 6f  n database P1 to
363e0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 32 2e   memory cell P2.
363f0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 67 65  .*/.case OP_Page
36400 63 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20  count: {        
36410 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
36420 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
36430 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
36440 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71    pOut->u.i = sq
36450 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 50 61  lite3BtreeLastPa
36460 67 65 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  ge(db->aDb[pOp->
36470 70 31 5d 2e 70 42 74 29 3b 0a 20 20 62 72 65 61  p1].pBt);.  brea
36480 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23 69  k;.}.#endif...#i
36490 66 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d  fndef  SQLITE_OM
364a0 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
364b0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 78 50  ./* Opcode: MaxP
364c0 67 63 6e 74 20 50 31 20 50 32 20 50 33 20 2a 20  gcnt P1 P2 P3 * 
364d0 2a 0a 2a 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 73  *.**.** Try to s
364e0 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70  et the maximum p
364f0 61 67 65 20 63 6f 75 6e 74 20 66 6f 72 20 64 61  age count for da
36500 74 61 62 61 73 65 20 50 31 20 74 6f 20 74 68 65  tabase P1 to the
36510 20 76 61 6c 75 65 20 69 6e 20 50 33 2e 0a 2a 2a   value in P3..**
36520 20 44 6f 20 6e 6f 74 20 6c 65 74 20 74 68 65 20   Do not let the 
36530 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75  maximum page cou
36540 6e 74 20 66 61 6c 6c 20 62 65 6c 6f 77 20 74 68  nt fall below th
36550 65 20 63 75 72 72 65 6e 74 20 70 61 67 65 20 63  e current page c
36560 6f 75 6e 74 20 61 6e 64 0a 2a 2a 20 64 6f 20 6e  ount and.** do n
36570 6f 74 20 63 68 61 6e 67 65 20 74 68 65 20 6d 61  ot change the ma
36580 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74  ximum page count
36590 20 76 61 6c 75 65 20 69 66 20 50 33 3d 3d 30 2e   value if P3==0.
365a0 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65  .**.** Store the
365b0 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f   maximum page co
365c0 75 6e 74 20 61 66 74 65 72 20 74 68 65 20 63 68  unt after the ch
365d0 61 6e 67 65 20 69 6e 20 72 65 67 69 73 74 65 72  ange in register
365e0 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
365f0 4d 61 78 50 67 63 6e 74 3a 20 7b 20 20 20 20 20  MaxPgcnt: {     
36600 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
36610 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  /.  unsigned int
36620 20 6e 65 77 4d 61 78 3b 0a 20 20 42 74 72 65 65   newMax;.  Btree
36630 20 2a 70 42 74 3b 0a 0a 20 20 70 4f 75 74 20 3d   *pBt;..  pOut =
36640 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
36650 70 2c 20 70 4f 70 29 3b 0a 20 20 70 42 74 20 3d  p, pOp);.  pBt =
36660 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
36670 5d 2e 70 42 74 3b 0a 20 20 6e 65 77 4d 61 78 20  ].pBt;.  newMax 
36680 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  = 0;.  if( pOp->
36690 70 33 20 29 7b 0a 20 20 20 20 6e 65 77 4d 61 78  p3 ){.    newMax
366a0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
366b0 61 73 74 50 61 67 65 28 70 42 74 29 3b 0a 20 20  astPage(pBt);.  
366c0 20 20 69 66 28 20 6e 65 77 4d 61 78 20 3c 20 28    if( newMax < (
366d0 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70 33  unsigned)pOp->p3
366e0 20 29 20 6e 65 77 4d 61 78 20 3d 20 28 75 6e 73   ) newMax = (uns
366f0 69 67 6e 65 64 29 70 4f 70 2d 3e 70 33 3b 0a 20  igned)pOp->p3;. 
36700 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d   }.  pOut->u.i =
36710 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 61 78   sqlite3BtreeMax
36720 50 61 67 65 43 6f 75 6e 74 28 70 42 74 2c 20 6e  PageCount(pBt, n
36730 65 77 4d 61 78 29 3b 0a 20 20 62 72 65 61 6b 3b  ewMax);.  break;
36740 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 4f  .}.#endif.../* O
36750 70 63 6f 64 65 3a 20 49 6e 69 74 20 2a 20 50 32  pcode: Init * P2
36760 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
36770 73 69 73 3a 20 20 53 74 61 72 74 20 61 74 20 50  sis:  Start at P
36780 32 0a 2a 2a 0a 2a 2a 20 50 72 6f 67 72 61 6d 73  2.**.** Programs
36790 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c   contain a singl
367a0 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  e instance of th
367b0 69 73 20 6f 70 63 6f 64 65 20 61 73 20 74 68 65  is opcode as the
367c0 20 76 65 72 79 20 66 69 72 73 74 0a 2a 2a 20 6f   very first.** o
367d0 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  pcode..**.** If 
367e0 74 72 61 63 69 6e 67 20 69 73 20 65 6e 61 62 6c  tracing is enabl
367f0 65 64 20 28 62 79 20 74 68 65 20 73 71 6c 69 74  ed (by the sqlit
36800 65 33 5f 74 72 61 63 65 28 29 29 20 69 6e 74 65  e3_trace()) inte
36810 72 66 61 63 65 2c 20 74 68 65 6e 0a 2a 2a 20 74  rface, then.** t
36820 68 65 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20  he UTF-8 string 
36830 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 50 34 20  contained in P4 
36840 69 73 20 65 6d 69 74 74 65 64 20 6f 6e 20 74 68  is emitted on th
36850 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b  e trace callback
36860 2e 0a 2a 2a 20 4f 72 20 69 66 20 50 34 20 69 73  ..** Or if P4 is
36870 20 62 6c 61 6e 6b 2c 20 75 73 65 20 74 68 65 20   blank, use the 
36880 73 74 72 69 6e 67 20 72 65 74 75 72 6e 65 64 20  string returned 
36890 62 79 20 73 71 6c 69 74 65 33 5f 73 71 6c 28 29  by sqlite3_sql()
368a0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73  ..**.** If P2 is
368b0 20 6e 6f 74 20 7a 65 72 6f 2c 20 6a 75 6d 70 20   not zero, jump 
368c0 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50  to instruction P
368d0 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  2..*/.case OP_In
368e0 69 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f  it: {          /
368f0 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 63 68 61 72  * jump */.  char
36900 20 2a 7a 54 72 61 63 65 3b 0a 20 20 63 68 61 72   *zTrace;.  char
36910 20 2a 7a 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51   *z;..#ifndef SQ
36920 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a  LITE_OMIT_TRACE.
36930 20 20 69 66 28 20 64 62 2d 3e 78 54 72 61 63 65    if( db->xTrace
36940 0a 20 20 20 26 26 20 21 70 2d 3e 64 6f 69 6e 67  .   && !p->doing
36950 52 65 72 75 6e 0a 20 20 20 26 26 20 28 7a 54 72  Rerun.   && (zTr
36960 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a  ace = (pOp->p4.z
36970 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70   ? pOp->p4.z : p
36980 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a 20 20 29 7b  ->zSql))!=0.  ){
36990 0a 20 20 20 20 7a 20 3d 20 73 71 6c 69 74 65 33  .    z = sqlite3
369a0 56 64 62 65 45 78 70 61 6e 64 53 71 6c 28 70 2c  VdbeExpandSql(p,
369b0 20 7a 54 72 61 63 65 29 3b 0a 20 20 20 20 64 62   zTrace);.    db
369c0 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e 70 54 72  ->xTrace(db->pTr
369d0 61 63 65 41 72 67 2c 20 7a 29 3b 0a 20 20 20 20  aceArg, z);.    
369e0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
369f0 2c 20 7a 29 3b 0a 20 20 7d 0a 23 69 66 64 65 66  , z);.  }.#ifdef
36a00 20 53 51 4c 49 54 45 5f 55 53 45 5f 46 43 4e 54   SQLITE_USE_FCNT
36a10 4c 5f 54 52 41 43 45 0a 20 20 7a 54 72 61 63 65  L_TRACE.  zTrace
36a20 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20   = (pOp->p4.z ? 
36a30 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a  pOp->p4.z : p->z
36a40 53 71 6c 29 3b 0a 20 20 69 66 28 20 7a 54 72 61  Sql);.  if( zTra
36a50 63 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b  ce ){.    int i;
36a60 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
36a70 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20  db->nDb; i++){. 
36a80 20 20 20 20 20 69 66 28 20 44 62 4d 61 73 6b 54       if( DbMaskT
36a90 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
36aa0 2c 20 69 29 3d 3d 30 20 29 20 63 6f 6e 74 69 6e  , i)==0 ) contin
36ab0 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ue;.      sqlite
36ac0 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64  3_file_control(d
36ad0 62 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e  b, db->aDb[i].zN
36ae0 61 6d 65 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54  ame, SQLITE_FCNT
36af0 4c 5f 54 52 41 43 45 2c 20 7a 54 72 61 63 65 29  L_TRACE, zTrace)
36b00 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64  ;.    }.  }.#end
36b10 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45  if /* SQLITE_USE
36b20 5f 46 43 4e 54 4c 5f 54 52 41 43 45 20 2a 2f 0a  _FCNTL_TRACE */.
36b30 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
36b40 42 55 47 0a 20 20 69 66 28 20 28 64 62 2d 3e 66  BUG.  if( (db->f
36b50 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 53 71  lags & SQLITE_Sq
36b60 6c 54 72 61 63 65 29 21 3d 30 0a 20 20 20 26 26  lTrace)!=0.   &&
36b70 20 28 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d   (zTrace = (pOp-
36b80 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e  >p4.z ? pOp->p4.
36b90 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29 21 3d 30  z : p->zSql))!=0
36ba0 0a 20 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  .  ){.    sqlite
36bb0 33 44 65 62 75 67 50 72 69 6e 74 66 28 22 53 51  3DebugPrintf("SQ
36bc0 4c 2d 74 72 61 63 65 3a 20 25 73 5c 6e 22 2c 20  L-trace: %s\n", 
36bd0 7a 54 72 61 63 65 29 3b 0a 20 20 7d 0a 23 65 6e  zTrace);.  }.#en
36be0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45  dif /* SQLITE_DE
36bf0 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a  BUG */.#endif /*
36c00 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41   SQLITE_OMIT_TRA
36c10 43 45 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d  CE */.  if( pOp-
36c20 3e 70 32 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  >p2 ) goto jump_
36c30 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a  to_p2;.  break;.
36c40 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  }..#ifdef SQLITE
36c50 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48  _ENABLE_CURSOR_H
36c60 49 4e 54 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  INTS./* Opcode: 
36c70 43 75 72 73 6f 72 48 69 6e 74 20 50 31 20 2a 20  CursorHint P1 * 
36c80 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 72 6f  * P4 *.**.** Pro
36c90 76 69 64 65 20 61 20 68 69 6e 74 20 74 6f 20 63  vide a hint to c
36ca0 75 72 73 6f 72 20 50 31 20 74 68 61 74 20 69 74  ursor P1 that it
36cb0 20 6f 6e 6c 79 20 6e 65 65 64 73 20 74 6f 20 72   only needs to r
36cc0 65 74 75 72 6e 20 72 6f 77 73 20 74 68 61 74 0a  eturn rows that.
36cd0 2a 2a 20 73 61 74 69 73 66 79 20 74 68 65 20 45  ** satisfy the E
36ce0 78 70 72 20 69 6e 20 50 34 2e 20 20 54 4b 5f 52  xpr in P4.  TK_R
36cf0 45 47 49 53 54 45 52 20 74 65 72 6d 73 20 69 6e  EGISTER terms in
36d00 20 74 68 65 20 50 34 20 65 78 70 72 65 73 73 69   the P4 expressi
36d10 6f 6e 20 72 65 66 65 72 0a 2a 2a 20 74 6f 20 76  on refer.** to v
36d20 61 6c 75 65 73 20 63 75 72 72 65 6e 74 6c 79 20  alues currently 
36d30 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65 72  held in register
36d40 73 2e 20 20 54 4b 5f 43 4f 4c 55 4d 4e 20 74 65  s.  TK_COLUMN te
36d50 72 6d 73 20 69 6e 20 74 68 65 20 50 34 0a 2a 2a  rms in the P4.**
36d60 20 65 78 70 72 65 73 73 69 6f 6e 20 72 65 66 65   expression refe
36d70 72 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r to columns in 
36d80 74 68 65 20 62 2d 74 72 65 65 20 74 6f 20 77 68  the b-tree to wh
36d90 69 63 68 20 63 75 72 73 6f 72 20 50 31 20 69 73  ich cursor P1 is
36da0 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2f 0a 63 61   pointing..*/.ca
36db0 73 65 20 4f 50 5f 43 75 72 73 6f 72 48 69 6e 74  se OP_CursorHint
36dc0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
36dd0 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28   *pC;..  assert(
36de0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
36df0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
36e00 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
36e10 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 45  Op->p4type==P4_E
36e20 58 50 52 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  XPR );.  pC = p-
36e30 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
36e40 0a 20 20 69 66 28 20 70 43 20 29 7b 0a 20 20 20  .  if( pC ){.   
36e50 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
36e60 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
36e70 54 52 45 45 20 29 3b 0a 20 20 20 20 73 71 6c 69  TREE );.    sqli
36e80 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 48 69  te3BtreeCursorHi
36e90 6e 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  nt(pC->uc.pCurso
36ea0 72 2c 20 42 54 52 45 45 5f 48 49 4e 54 5f 52 41  r, BTREE_HINT_RA
36eb0 4e 47 45 2c 0a 20 20 20 20 20 20 20 20 20 20 20  NGE,.           
36ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ed0 70 4f 70 2d 3e 70 34 2e 70 45 78 70 72 2c 20 61  pOp->p4.pExpr, a
36ee0 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  Mem);.  }.  brea
36ef0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
36f00 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52  QLITE_ENABLE_CUR
36f10 53 4f 52 5f 48 49 4e 54 53 20 2a 2f 0a 0a 2f 2a  SOR_HINTS */../*
36f20 20 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70 20 2a 20   Opcode: Noop * 
36f30 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f  * * * *.**.** Do
36f40 20 6e 6f 74 68 69 6e 67 2e 20 20 54 68 69 73 20   nothing.  This 
36f50 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f  instruction is o
36f60 66 74 65 6e 20 75 73 65 66 75 6c 20 61 73 20 61  ften useful as a
36f70 20 6a 75 6d 70 0a 2a 2a 20 64 65 73 74 69 6e 61   jump.** destina
36f80 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54  tion..*/./*.** T
36f90 68 65 20 6d 61 67 69 63 20 45 78 70 6c 61 69 6e  he magic Explain
36fa0 20 6f 70 63 6f 64 65 20 61 72 65 20 6f 6e 6c 79   opcode are only
36fb0 20 69 6e 73 65 72 74 65 64 20 77 68 65 6e 20 65   inserted when e
36fc0 78 70 6c 61 69 6e 3d 3d 32 20 28 77 68 69 63 68  xplain==2 (which
36fd0 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79 20 77 68  .** is to say wh
36fe0 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20 51  en the EXPLAIN Q
36ff0 55 45 52 59 20 50 4c 41 4e 20 73 79 6e 74 61 78  UERY PLAN syntax
37000 20 69 73 20 75 73 65 64 2e 29 0a 2a 2a 20 54 68   is used.).** Th
37010 69 73 20 6f 70 63 6f 64 65 20 72 65 63 6f 72 64  is opcode record
37020 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72  s information fr
37030 6f 6d 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72  om the optimizer
37040 2e 20 20 49 74 20 69 73 20 74 68 65 0a 2a 2a 20  .  It is the.** 
37050 74 68 65 20 73 61 6d 65 20 61 73 20 61 20 6e 6f  the same as a no
37060 2d 6f 70 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  -op.  This opcod
37070 65 73 6e 65 76 65 72 20 61 70 70 65 61 72 73 20  esnever appears 
37080 69 6e 20 61 20 72 65 61 6c 20 56 4d 20 70 72 6f  in a real VM pro
37090 67 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61 75 6c 74  gram..*/.default
370a0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  : {          /* 
370b0 54 68 69 73 20 69 73 20 72 65 61 6c 6c 79 20 4f  This is really O
370c0 50 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50 5f 45 78  P_Noop and OP_Ex
370d0 70 6c 61 69 6e 20 2a 2f 0a 20 20 61 73 73 65 72  plain */.  asser
370e0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
370f0 4f 50 5f 4e 6f 6f 70 20 7c 7c 20 70 4f 70 2d 3e  OP_Noop || pOp->
37100 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61  opcode==OP_Expla
37110 69 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  in );.  break;.}
37120 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ../*************
37130 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
37140 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
37150 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
37160 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
37170 0a 2a 2a 20 54 68 65 20 63 61 73 65 73 20 6f 66  .** The cases of
37180 20 74 68 65 20 73 77 69 74 63 68 20 73 74 61 74   the switch stat
37190 65 6d 65 6e 74 20 61 62 6f 76 65 20 74 68 69 73  ement above this
371a0 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 61 6c 6c   line should all
371b0 20 62 65 20 69 6e 64 65 6e 74 65 64 0a 2a 2a 20   be indented.** 
371c0 62 79 20 36 20 73 70 61 63 65 73 2e 20 20 42 75  by 6 spaces.  Bu
371d0 74 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  t the left-most 
371e0 36 20 73 70 61 63 65 73 20 68 61 76 65 20 62 65  6 spaces have be
371f0 65 6e 20 72 65 6d 6f 76 65 64 20 74 6f 20 69 6d  en removed to im
37200 70 72 6f 76 65 20 74 68 65 0a 2a 2a 20 72 65 61  prove the.** rea
37210 64 61 62 69 6c 69 74 79 2e 20 20 46 72 6f 6d 20  dability.  From 
37220 74 68 69 73 20 70 6f 69 6e 74 20 6f 6e 20 64 6f  this point on do
37230 77 6e 2c 20 74 68 65 20 6e 6f 72 6d 61 6c 20 69  wn, the normal i
37240 6e 64 65 6e 74 61 74 69 6f 6e 20 72 75 6c 65 73  ndentation rules
37250 20 61 72 65 0a 2a 2a 20 72 65 73 74 6f 72 65 64   are.** restored
37260 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..**************
37270 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
37280 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
37290 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
372a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
372b0 0a 20 20 20 20 7d 0a 0a 23 69 66 64 65 66 20 56  .    }..#ifdef V
372c0 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20  DBE_PROFILE.    
372d0 7b 0a 20 20 20 20 20 20 75 36 34 20 65 6e 64 54  {.      u64 endT
372e0 69 6d 65 20 3d 20 73 71 6c 69 74 65 33 48 77 74  ime = sqlite3Hwt
372f0 69 6d 65 28 29 3b 0a 20 20 20 20 20 20 69 66 28  ime();.      if(
37300 20 65 6e 64 54 69 6d 65 3e 73 74 61 72 74 20 29   endTime>start )
37310 20 70 4f 72 69 67 4f 70 2d 3e 63 79 63 6c 65 73   pOrigOp->cycles
37320 20 2b 3d 20 65 6e 64 54 69 6d 65 20 2d 20 73 74   += endTime - st
37330 61 72 74 3b 0a 20 20 20 20 20 20 70 4f 72 69 67  art;.      pOrig
37340 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 20 20 20 20 7d  Op->cnt++;.    }
37350 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20  .#endif..    /* 
37360 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  The following co
37370 64 65 20 61 64 64 73 20 6e 6f 74 68 69 6e 67 20  de adds nothing 
37380 74 6f 20 74 68 65 20 61 63 74 75 61 6c 20 66 75  to the actual fu
37390 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 20 20 20 20  nctionality.    
373a0 2a 2a 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61  ** of the progra
373b0 6d 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 68  m.  It is only h
373c0 65 72 65 20 66 6f 72 20 74 65 73 74 69 6e 67 20  ere for testing 
373d0 61 6e 64 20 64 65 62 75 67 67 69 6e 67 2e 0a 20  and debugging.. 
373e0 20 20 20 2a 2a 20 4f 6e 20 74 68 65 20 6f 74 68     ** On the oth
373f0 65 72 20 68 61 6e 64 2c 20 69 74 20 64 6f 65 73  er hand, it does
37400 20 62 75 72 6e 20 43 50 55 20 63 79 63 6c 65 73   burn CPU cycles
37410 20 65 76 65 72 79 20 74 69 6d 65 20 74 68 72 6f   every time thro
37420 75 67 68 0a 20 20 20 20 2a 2a 20 74 68 65 20 65  ugh.    ** the e
37430 76 61 6c 75 61 74 6f 72 20 6c 6f 6f 70 2e 20 20  valuator loop.  
37440 53 6f 20 77 65 20 63 61 6e 20 6c 65 61 76 65 20  So we can leave 
37450 69 74 20 6f 75 74 20 77 68 65 6e 20 4e 44 45 42  it out when NDEB
37460 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20  UG is defined.. 
37470 20 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44     */.#ifndef ND
37480 45 42 55 47 0a 20 20 20 20 61 73 73 65 72 74 28  EBUG.    assert(
37490 20 70 4f 70 3e 3d 26 61 4f 70 5b 2d 31 5d 20 26   pOp>=&aOp[-1] &
374a0 26 20 70 4f 70 3c 26 61 4f 70 5b 70 2d 3e 6e 4f  & pOp<&aOp[p->nO
374b0 70 2d 31 5d 20 29 3b 0a 0a 23 69 66 64 65 66 20  p-1] );..#ifdef 
374c0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
374d0 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26   if( db->flags &
374e0 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63   SQLITE_VdbeTrac
374f0 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 72  e ){.      if( r
37500 63 21 3d 30 20 29 20 70 72 69 6e 74 66 28 22 72  c!=0 ) printf("r
37510 63 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a 20 20 20  c=%d\n",rc);.   
37520 20 20 20 69 66 28 20 70 4f 72 69 67 4f 70 2d 3e     if( pOrigOp->
37530 6f 70 66 6c 61 67 73 20 26 20 28 4f 50 46 4c 47  opflags & (OPFLG
37540 5f 4f 55 54 32 29 20 29 7b 0a 20 20 20 20 20 20  _OUT2) ){.      
37550 20 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28    registerTrace(
37560 70 4f 72 69 67 4f 70 2d 3e 70 32 2c 20 26 61 4d  pOrigOp->p2, &aM
37570 65 6d 5b 70 4f 72 69 67 4f 70 2d 3e 70 32 5d 29  em[pOrigOp->p2])
37580 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
37590 69 66 28 20 70 4f 72 69 67 4f 70 2d 3e 6f 70 66  if( pOrigOp->opf
375a0 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54  lags & OPFLG_OUT
375b0 33 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67  3 ){.        reg
375c0 69 73 74 65 72 54 72 61 63 65 28 70 4f 72 69 67  isterTrace(pOrig
375d0 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f  Op->p3, &aMem[pO
375e0 72 69 67 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20  rigOp->p3]);.   
375f0 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69     }.    }.#endi
37600 66 20 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42  f  /* SQLITE_DEB
37610 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20 20 2f 2a  UG */.#endif  /*
37620 20 4e 44 45 42 55 47 20 2a 2f 0a 20 20 7d 20 20   NDEBUG */.  }  
37630 2f 2a 20 54 68 65 20 65 6e 64 20 6f 66 20 74 68  /* The end of th
37640 65 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20 74  e for(;;) loop t
37650 68 65 20 6c 6f 6f 70 73 20 74 68 72 6f 75 67 68  he loops through
37660 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f   opcodes */..  /
37670 2a 20 49 66 20 77 65 20 72 65 61 63 68 20 74 68  * If we reach th
37680 69 73 20 70 6f 69 6e 74 2c 20 69 74 20 6d 65 61  is point, it mea
37690 6e 73 20 74 68 61 74 20 65 78 65 63 75 74 69 6f  ns that executio
376a0 6e 20 69 73 20 66 69 6e 69 73 68 65 64 20 77 69  n is finished wi
376b0 74 68 0a 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72  th.  ** an error
376c0 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20   of some kind.. 
376d0 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f   */.abort_due_to
376e0 5f 65 72 72 6f 72 3a 0a 20 20 69 66 28 20 64 62  _error:.  if( db
376f0 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
37700 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d   rc = SQLITE_NOM
37710 45 4d 5f 42 4b 50 54 3b 0a 20 20 61 73 73 65 72  EM_BKPT;.  asser
37720 74 28 20 72 63 20 29 3b 0a 20 20 69 66 28 20 70  t( rc );.  if( p
37730 2d 3e 7a 45 72 72 4d 73 67 3d 3d 30 20 26 26 20  ->zErrMsg==0 && 
37740 72 63 21 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52  rc!=SQLITE_IOERR
37750 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 73 71  _NOMEM ){.    sq
37760 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
37770 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 45  , "%s", sqlite3E
37780 72 72 53 74 72 28 72 63 29 29 3b 0a 20 20 7d 0a  rrStr(rc));.  }.
37790 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20    p->rc = rc;.  
377a0 74 65 73 74 63 61 73 65 28 20 73 71 6c 69 74 65  testcase( sqlite
377b0 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c  3GlobalConfig.xL
377c0 6f 67 21 3d 30 20 29 3b 0a 20 20 73 71 6c 69 74  og!=0 );.  sqlit
377d0 65 33 5f 6c 6f 67 28 72 63 2c 20 22 73 74 61 74  e3_log(rc, "stat
377e0 65 6d 65 6e 74 20 61 62 6f 72 74 73 20 61 74 20  ement aborts at 
377f0 25 64 3a 20 5b 25 73 5d 20 25 73 22 2c 20 0a 20  %d: [%s] %s", . 
37800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37810 20 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f    (int)(pOp - aO
37820 70 29 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e  p), p->zSql, p->
37830 7a 45 72 72 4d 73 67 29 3b 0a 20 20 73 71 6c 69  zErrMsg);.  sqli
37840 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a  te3VdbeHalt(p);.
37850 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
37860 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 20 73  _IOERR_NOMEM ) s
37870 71 6c 69 74 65 33 4f 6f 6d 46 61 75 6c 74 28 64  qlite3OomFault(d
37880 62 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54  b);.  rc = SQLIT
37890 45 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72  E_ERROR;.  if( r
378a0 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c  esetSchemaOnFaul
378b0 74 3e 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  t>0 ){.    sqlit
378c0 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61  e3ResetOneSchema
378d0 28 64 62 2c 20 72 65 73 65 74 53 63 68 65 6d 61  (db, resetSchema
378e0 4f 6e 46 61 75 6c 74 2d 31 29 3b 0a 20 20 7d 0a  OnFault-1);.  }.
378f0 0a 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68  .  /* This is th
37900 65 20 6f 6e 6c 79 20 77 61 79 20 6f 75 74 20 6f  e only way out o
37910 66 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65  f this procedure
37920 2e 20 20 57 65 20 68 61 76 65 20 74 6f 0a 20 20  .  We have to.  
37930 2a 2a 20 72 65 6c 65 61 73 65 20 74 68 65 20 6d  ** release the m
37940 75 74 65 78 65 73 20 6f 6e 20 62 74 72 65 65 73  utexes on btrees
37950 20 74 68 61 74 20 77 65 72 65 20 61 63 71 75 69   that were acqui
37960 72 65 64 20 61 74 20 74 68 65 0a 20 20 2a 2a 20  red at the.  ** 
37970 74 6f 70 2e 20 2a 2f 0a 76 64 62 65 5f 72 65 74  top. */.vdbe_ret
37980 75 72 6e 3a 0a 20 20 64 62 2d 3e 6c 61 73 74 52  urn:.  db->lastR
37990 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64  owid = lastRowid
379a0 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 56  ;.  testcase( nV
379b0 6d 53 74 65 70 3e 30 20 29 3b 0a 20 20 70 2d 3e  mStep>0 );.  p->
379c0 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f  aCounter[SQLITE_
379d0 53 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f 53 54  STMTSTATUS_VM_ST
379e0 45 50 5d 20 2b 3d 20 28 69 6e 74 29 6e 56 6d 53  EP] += (int)nVmS
379f0 74 65 70 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  tep;.  sqlite3Vd
37a00 62 65 4c 65 61 76 65 28 70 29 3b 0a 20 20 61 73  beLeave(p);.  as
37a10 73 65 72 74 28 20 72 63 21 3d 53 51 4c 49 54 45  sert( rc!=SQLITE
37a20 5f 4f 4b 20 7c 7c 20 6e 45 78 74 72 61 44 65 6c  _OK || nExtraDel
37a30 65 74 65 3d 3d 30 20 0a 20 20 20 20 20 20 20 7c  ete==0 .       |
37a40 7c 20 73 71 6c 69 74 65 33 5f 73 74 72 6c 69 6b  | sqlite3_strlik
37a50 65 28 22 44 45 4c 45 54 45 25 22 2c 70 2d 3e 7a  e("DELETE%",p->z
37a60 53 71 6c 2c 30 29 21 3d 30 20 0a 20 20 29 3b 0a  Sql,0)!=0 .  );.
37a70 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 0a 20 20    return rc;..  
37a80 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20  /* Jump to here 
37a90 69 66 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62  if a string or b
37aa0 6c 6f 62 20 6c 61 72 67 65 72 20 74 68 61 6e 20  lob larger than 
37ab0 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54  SQLITE_MAX_LENGT
37ac0 48 0a 20 20 2a 2a 20 69 73 20 65 6e 63 6f 75 6e  H.  ** is encoun
37ad0 74 65 72 65 64 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f  tered..  */.too_
37ae0 62 69 67 3a 0a 20 20 73 71 6c 69 74 65 33 56 64  big:.  sqlite3Vd
37af0 62 65 45 72 72 6f 72 28 70 2c 20 22 73 74 72 69  beError(p, "stri
37b00 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62  ng or blob too b
37b10 69 67 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c  ig");.  rc = SQL
37b20 49 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20 67 6f  ITE_TOOBIG;.  go
37b30 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
37b40 65 72 72 6f 72 3b 0a 0a 20 20 2f 2a 20 4a 75 6d  error;..  /* Jum
37b50 70 20 74 6f 20 68 65 72 65 20 69 66 20 61 20 6d  p to here if a m
37b60 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 20  alloc() fails.. 
37b70 20 2a 2f 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20 73 71   */.no_mem:.  sq
37b80 6c 69 74 65 33 4f 6f 6d 46 61 75 6c 74 28 64 62  lite3OomFault(db
37b90 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
37ba0 45 72 72 6f 72 28 70 2c 20 22 6f 75 74 20 6f 66  Error(p, "out of
37bb0 20 6d 65 6d 6f 72 79 22 29 3b 0a 20 20 72 63 20   memory");.  rc 
37bc0 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42  = SQLITE_NOMEM_B
37bd0 4b 50 54 3b 0a 20 20 67 6f 74 6f 20 61 62 6f 72  KPT;.  goto abor
37be0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
37bf0 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65  .  /* Jump to he
37c00 72 65 20 69 66 20 74 68 65 20 73 71 6c 69 74 65  re if the sqlite
37c10 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20 41 50  3_interrupt() AP
37c20 49 20 73 65 74 73 20 74 68 65 20 69 6e 74 65 72  I sets the inter
37c30 72 75 70 74 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a  rupt.  ** flag..
37c40 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74    */.abort_due_t
37c50 6f 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 61  o_interrupt:.  a
37c60 73 73 65 72 74 28 20 64 62 2d 3e 75 31 2e 69 73  ssert( db->u1.is
37c70 49 6e 74 65 72 72 75 70 74 65 64 20 29 3b 0a 20  Interrupted );. 
37c80 20 72 63 20 3d 20 64 62 2d 3e 6d 61 6c 6c 6f 63   rc = db->malloc
37c90 46 61 69 6c 65 64 20 3f 20 53 51 4c 49 54 45 5f  Failed ? SQLITE_
37ca0 4e 4f 4d 45 4d 5f 42 4b 50 54 20 3a 20 53 51 4c  NOMEM_BKPT : SQL
37cb0 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20  ITE_INTERRUPT;. 
37cc0 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 73   p->rc = rc;.  s
37cd0 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
37ce0 70 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  p, "%s", sqlite3
37cf0 45 72 72 53 74 72 28 72 63 29 29 3b 0a 20 20 67  ErrStr(rc));.  g
37d00 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
37d10 5f 65 72 72 6f 72 3b 0a 7d 0a                    _error;.}.