/ Hex Artifact Content
Login
SQLite training in Houston TX on 2019-11-05 (details)
Part of the 2019 Tcl Conference

Artifact 1919d490e97bfc59eab4d43444a53a6717d06137295ed684a25e5df7430d9974:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 20   like that ever 
0520: 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66 64  happens..*/.#ifd
0530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
0540: 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75  # define memAbou
0550: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73  tToChange(P,M) s
0560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
0570: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a  utToChange(P,M).
0580: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d  #else.# define m
0590: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
05a0: 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  P,M).#endif../*.
05b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
05c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
05d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
05e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
05f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0600: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53  ther by the OP_S
0610: 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  eekXX, OP_Next, 
0620: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0630: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0640: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0650: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0660: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0670: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0680: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0690: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
06a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
06b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
06c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
06d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
06e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
06f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0700: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0710: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0720: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0730: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0740: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0750: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0760: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0770: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0780: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0790: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
07a0: 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65    When it reache
07b0: 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69  s zero, the u1.i
07c0: 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20  sInterrupted.** 
07d0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
07e0: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69  ite3 structure i
07f0: 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74  s set in order t
0800: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
0810: 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54  terrupt..**.** T
0820: 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20  his facility is 
0830: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
0840: 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20   purposes only. 
0850: 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e   It does not fun
0860: 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f  ction.** in an o
0870: 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a  rdinary build..*
0880: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0890: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
08a0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
08b0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
08c0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f  .** The next glo
08d0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20  bal variable is 
08e0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68  incremented each
08f0: 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72   type the OP_Sor
0900: 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  t opcode.** is e
0910: 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65  xecuted.  The te
0920: 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73  st procedures us
0930: 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  e this informati
0940: 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  on to make sure 
0950: 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20  that.** sorting 
0960: 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20  is occurring or 
0970: 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74  not occurring at
0980: 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d   appropriate tim
0990: 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  es.   This varia
09a0: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
09b0: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
09c0: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
09f0: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
0a00: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0a10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  int sqlite3_sort
0a20: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0a30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0a40: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0a50: 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73  le records the s
0a60: 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
0a70: 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f  st MEM_Blob.** o
0a80: 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68  r MEM_Str that h
0a90: 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20  as been used by 
0aa0: 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20  a VDBE opcode.  
0ab0: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0ac0: 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20  res.** use this 
0ad0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d  information to m
0ae0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
0af0: 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63  e zero-blob func
0b00: 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20  tionality.** is 
0b10: 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  working correctl
0b20: 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  y.   This variab
0b30: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0b40: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0b50: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0b60: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0b70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0b80: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0b90: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ba0: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0bb0: 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63  size = 0;.static
0bc0: 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42   void updateMaxB
0bd0: 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b  lobsize(Mem *p){
0be0: 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  .  if( (p->flags
0bf0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
0c00: 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e  Blob))!=0 && p->
0c10: 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c  n>sqlite3_max_bl
0c20: 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71  obsize ){.    sq
0c30: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0c40: 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d  ze = p->n;.  }.}
0c50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0c60: 68 69 73 20 6d 61 63 72 6f 20 65 76 61 6c 75 61  his macro evalua
0c70: 74 65 73 20 74 6f 20 74 72 75 65 20 69 66 20 65  tes to true if e
0c80: 69 74 68 65 72 20 74 68 65 20 75 70 64 61 74 65  ither the update
0c90: 20 68 6f 6f 6b 20 6f 72 20 74 68 65 20 70 72 65   hook or the pre
0ca0: 75 70 64 61 74 65 0a 2a 2a 20 68 6f 6f 6b 20 61  update.** hook a
0cb0: 72 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 64  re enabled for d
0cc0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 20  atabase connect 
0cd0: 44 42 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  DB..*/.#ifdef SQ
0ce0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
0cf0: 50 44 41 54 45 5f 48 4f 4f 4b 0a 23 20 64 65 66  PDATE_HOOK.# def
0d00: 69 6e 65 20 48 41 53 5f 55 50 44 41 54 45 5f 48  ine HAS_UPDATE_H
0d10: 4f 4f 4b 28 44 42 29 20 28 28 44 42 29 2d 3e 78  OOK(DB) ((DB)->x
0d20: 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
0d30: 6b 7c 7c 28 44 42 29 2d 3e 78 55 70 64 61 74 65  k||(DB)->xUpdate
0d40: 43 61 6c 6c 62 61 63 6b 29 0a 23 65 6c 73 65 0a  Callback).#else.
0d50: 23 20 64 65 66 69 6e 65 20 48 41 53 5f 55 50 44  # define HAS_UPD
0d60: 41 54 45 5f 48 4f 4f 4b 28 44 42 29 20 28 28 44  ATE_HOOK(DB) ((D
0d70: 42 29 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  B)->xUpdateCallb
0d80: 61 63 6b 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ack).#endif../*.
0d90: 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62  ** The next glob
0da0: 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69  al variable is i
0db0: 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20  ncremented each 
0dc0: 74 69 6d 65 20 74 68 65 20 4f 50 5f 46 6f 75 6e  time the OP_Foun
0dd0: 64 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  d opcode.** is e
0de0: 78 65 63 75 74 65 64 2e 20 54 68 69 73 20 69 73  xecuted. This is
0df0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 77 68   used to test wh
0e00: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
0e10: 20 66 6f 72 65 69 67 6e 20 6b 65 79 0a 2a 2a 20   foreign key.** 
0e20: 6f 70 65 72 61 74 69 6f 6e 20 69 6d 70 6c 65 6d  operation implem
0e30: 65 6e 74 65 64 20 75 73 69 6e 67 20 4f 50 5f 46  ented using OP_F
0e40: 6b 49 73 5a 65 72 6f 20 69 73 20 77 6f 72 6b 69  kIsZero is worki
0e50: 6e 67 2e 20 54 68 69 73 20 76 61 72 69 61 62 6c  ng. This variabl
0e60: 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63  e.** has no func
0e70: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
0e80: 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  to help verify t
0e90: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0ea0: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c  tion of the.** l
0eb0: 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  ibrary..*/.#ifde
0ec0: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e  f SQLITE_TEST.in
0ed0: 74 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f  t sqlite3_found_
0ee0: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0ef0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 61 20  f../*.** Test a 
0f00: 72 65 67 69 73 74 65 72 20 74 6f 20 73 65 65 20  register to see 
0f10: 69 66 20 69 74 20 65 78 63 65 65 64 73 20 74 68  if it exceeds th
0f20: 65 20 63 75 72 72 65 6e 74 20 6d 61 78 69 6d 75  e current maximu
0f30: 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20  m blob size..** 
0f40: 49 66 20 69 74 20 64 6f 65 73 2c 20 72 65 63 6f  If it does, reco
0f50: 72 64 20 74 68 65 20 6e 65 77 20 6d 61 78 69 6d  rd the new maxim
0f60: 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f  um blob size..*/
0f70: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
0f80: 49 54 45 5f 54 45 53 54 29 20 26 26 20 21 64 65  ITE_TEST) && !de
0f90: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 55 4e 54  fined(SQLITE_UNT
0fa0: 45 53 54 41 42 4c 45 29 0a 23 20 64 65 66 69 6e  ESTABLE).# defin
0fb0: 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f  e UPDATE_MAX_BLO
0fc0: 42 53 49 5a 45 28 50 29 20 20 75 70 64 61 74 65  BSIZE(P)  update
0fd0: 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50 29 0a 23  MaxBlobsize(P).#
0fe0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 55 50  else.# define UP
0ff0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
1000: 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E(P).#endif../*.
1010: 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 56 44  ** Invoke the VD
1020: 42 45 20 63 6f 76 65 72 61 67 65 20 63 61 6c 6c  BE coverage call
1030: 62 61 63 6b 2c 20 69 66 20 74 68 61 74 20 63 61  back, if that ca
1040: 6c 6c 62 61 63 6b 20 69 73 20 64 65 66 69 6e 65  llback is define
1050: 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66 65 61 74  d.  This.** feat
1060: 75 72 65 20 69 73 20 75 73 65 64 20 66 6f 72 20  ure is used for 
1070: 74 65 73 74 20 73 75 69 74 65 20 76 61 6c 69 64  test suite valid
1080: 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e 64 20 64  ation only and d
1090: 6f 65 73 20 6e 6f 74 20 61 70 70 65 61 72 20 61  oes not appear a
10a0: 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69 6f 6e 20  n.** production 
10b0: 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 4d 20  builds..**.** M 
10c0: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 62 65  is an integer be
10d0: 74 77 65 65 6e 20 32 20 61 6e 64 20 34 2e 20 20  tween 2 and 4.  
10e0: 32 20 69 6e 64 69 63 61 74 65 73 20 61 20 6f 72  2 indicates a or
10f0: 64 69 6e 61 72 79 20 74 77 6f 2d 77 61 79 0a 2a  dinary two-way.*
1100: 2a 20 62 72 61 6e 63 68 20 28 49 3d 30 20 6d 65  * branch (I=0 me
1110: 61 6e 73 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ans fall through
1120: 20 61 6e 64 20 49 3d 31 20 6d 65 61 6e 73 20 74   and I=1 means t
1130: 61 6b 65 6e 29 2e 20 20 33 20 69 6e 64 69 63 61  aken).  3 indica
1140: 74 65 73 0a 2a 2a 20 61 20 33 2d 77 61 79 20 62  tes.** a 3-way b
1150: 72 61 6e 63 68 20 77 68 65 72 65 20 74 68 65 20  ranch where the 
1160: 74 68 69 72 64 20 77 61 79 20 69 73 20 77 68 65  third way is whe
1170: 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 6f 70 65  n one of the ope
1180: 72 61 6e 64 73 20 69 73 0a 2a 2a 20 4e 55 4c 4c  rands is.** NULL
1190: 2e 20 20 34 20 69 6e 64 69 63 61 74 65 73 20 74  .  4 indicates t
11a0: 68 65 20 4f 50 5f 4a 75 6d 70 20 69 6e 73 74 72  he OP_Jump instr
11b0: 75 63 74 69 6f 6e 20 77 68 69 63 68 20 68 61 73  uction which has
11c0: 20 74 68 72 65 65 20 64 65 73 74 69 6e 61 74 69   three destinati
11d0: 6f 6e 73 0a 2a 2a 20 64 65 70 65 6e 64 69 6e 67  ons.** depending
11e0: 20 6f 6e 20 77 68 65 74 68 65 72 20 74 68 65 20   on whether the 
11f0: 66 69 72 73 74 20 6f 70 65 72 61 6e 64 20 69 73  first operand is
1200: 20 6c 65 73 73 20 74 68 61 6e 2c 20 65 71 75 61   less than, equa
1210: 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72  l to, or greater
1220: 0a 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 65 63  .** than the sec
1230: 6f 6e 64 2e 20 0a 2a 2a 0a 2a 2a 20 69 53 72 63  ond. .**.** iSrc
1240: 4c 69 6e 65 20 69 73 20 74 68 65 20 73 6f 75 72  Line is the sour
1250: 63 65 20 63 6f 64 65 20 6c 69 6e 65 20 28 66 72  ce code line (fr
1260: 6f 6d 20 74 68 65 20 5f 5f 4c 49 4e 45 5f 5f 20  om the __LINE__ 
1270: 6d 61 63 72 6f 29 20 74 68 61 74 0a 2a 2a 20 67  macro) that.** g
1280: 65 6e 65 72 61 74 65 64 20 74 68 65 20 56 44 42  enerated the VDB
1290: 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f  E instruction co
12a0: 6d 62 69 6e 65 64 20 77 69 74 68 20 66 6c 61 67  mbined with flag
12b0: 20 62 69 74 73 2e 20 20 54 68 65 20 73 6f 75 72   bits.  The sour
12c0: 63 65 0a 2a 2a 20 63 6f 64 65 20 6c 69 6e 65 20  ce.** code line 
12d0: 6e 75 6d 62 65 72 20 69 73 20 69 6e 20 74 68 65  number is in the
12e0: 20 6c 6f 77 65 72 20 32 34 20 62 69 74 73 20 6f   lower 24 bits o
12f0: 66 20 69 53 72 63 4c 69 6e 65 20 61 6e 64 20 74  f iSrcLine and t
1300: 68 65 20 75 70 70 65 72 0a 2a 2a 20 38 20 62 79  he upper.** 8 by
1310: 74 65 73 20 61 72 65 20 66 6c 61 67 73 2e 20 20  tes are flags.  
1320: 54 68 65 20 6c 6f 77 65 72 20 74 68 72 65 65 20  The lower three 
1330: 62 69 74 73 20 6f 66 20 74 68 65 20 66 6c 61 67  bits of the flag
1340: 73 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20 76 61  s indicate.** va
1350: 6c 75 65 73 20 66 6f 72 20 49 20 74 68 61 74 20  lues for I that 
1360: 73 68 6f 75 6c 64 20 6e 65 76 65 72 20 6f 63 63  should never occ
1370: 75 72 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  ur.  For example
1380: 2c 20 69 66 20 74 68 65 20 62 72 61 6e 63 68 20  , if the branch 
1390: 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 74 61 6b  is.** always tak
13a0: 65 6e 2c 20 74 68 65 20 66 6c 61 67 73 20 73 68  en, the flags sh
13b0: 6f 75 6c 64 20 62 65 20 30 78 30 35 20 73 69 6e  ould be 0x05 sin
13c0: 63 65 20 74 68 65 20 66 61 6c 6c 2d 74 68 72 6f  ce the fall-thro
13d0: 75 67 68 20 61 6e 64 0a 2a 2a 20 61 6c 74 65 72  ugh and.** alter
13e0: 6e 61 74 65 20 62 72 61 6e 63 68 20 61 72 65 20  nate branch are 
13f0: 6e 65 76 65 72 20 74 61 6b 65 6e 2e 20 20 49 66  never taken.  If
1400: 20 61 20 62 72 61 6e 63 68 20 69 73 20 6e 65 76   a branch is nev
1410: 65 72 20 74 61 6b 65 6e 20 74 68 65 6e 0a 2a 2a  er taken then.**
1420: 20 66 6c 61 67 73 20 73 68 6f 75 6c 64 20 62 65   flags should be
1430: 20 30 78 30 36 20 73 69 6e 63 65 20 6f 6e 6c 79   0x06 since only
1440: 20 74 68 65 20 66 61 6c 6c 2d 74 68 72 6f 75 67   the fall-throug
1450: 68 20 61 70 70 72 6f 61 63 68 20 69 73 20 61 6c  h approach is al
1460: 6c 6f 77 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 69 74  lowed..**.** Bit
1470: 20 30 78 30 34 20 6f 66 20 74 68 65 20 66 6c 61   0x04 of the fla
1480: 67 73 20 69 6e 64 69 63 61 74 65 73 20 61 6e 20  gs indicates an 
1490: 4f 50 5f 4a 75 6d 70 20 6f 70 63 6f 64 65 20 74  OP_Jump opcode t
14a0: 68 61 74 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 69  hat is only.** i
14b0: 6e 74 65 72 65 73 74 65 64 20 69 6e 20 65 71 75  nterested in equ
14c0: 61 6c 20 6f 72 20 6e 6f 74 2d 65 71 75 61 6c 2e  al or not-equal.
14d0: 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
14e0: 2c 20 49 3d 3d 30 20 61 6e 64 20 49 3d 3d 32 0a  , I==0 and I==2.
14f0: 2a 2a 20 73 68 6f 75 6c 64 20 62 65 20 74 72 65  ** should be tre
1500: 61 74 65 64 20 74 68 65 20 73 61 6d 65 2e 0a 2a  ated the same..*
1510: 2a 0a 2a 2a 20 53 69 6e 63 65 20 6f 6e 6c 79 20  *.** Since only 
1520: 61 20 6c 69 6e 65 20 6e 75 6d 62 65 72 20 69 73  a line number is
1530: 20 72 65 74 61 69 6e 65 64 2c 20 6e 6f 74 20 74   retained, not t
1540: 68 65 20 66 69 6c 65 6e 61 6d 65 2c 20 74 68 69  he filename, thi
1550: 73 20 6d 61 63 72 6f 0a 2a 2a 20 6f 6e 6c 79 20  s macro.** only 
1560: 77 6f 72 6b 73 20 66 6f 72 20 61 6d 61 6c 67 61  works for amalga
1570: 6d 61 74 69 6f 6e 20 62 75 69 6c 64 73 2e 20 20  mation builds.  
1580: 42 75 74 20 74 68 61 74 20 69 73 20 6f 6b 2c 20  But that is ok, 
1590: 73 69 6e 63 65 20 74 68 65 73 65 20 6d 61 63 72  since these macr
15a0: 6f 73 0a 2a 2a 20 73 68 6f 75 6c 64 20 62 65 20  os.** should be 
15b0: 6e 6f 2d 6f 70 73 20 65 78 63 65 70 74 20 66 6f  no-ops except fo
15c0: 72 20 73 70 65 63 69 61 6c 20 62 75 69 6c 64 73  r special builds
15d0: 20 75 73 65 64 20 74 6f 20 6d 65 61 73 75 72 65   used to measure
15e0: 20 74 65 73 74 20 63 6f 76 65 72 61 67 65 2e 0a   test coverage..
15f0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
1600: 53 51 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56 45  SQLITE_VDBE_COVE
1610: 52 41 47 45 29 0a 23 20 64 65 66 69 6e 65 20 56  RAGE).# define V
1620: 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 49  dbeBranchTaken(I
1630: 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  ,M).#else.# defi
1640: 6e 65 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  ne VdbeBranchTak
1650: 65 6e 28 49 2c 4d 29 20 76 64 62 65 54 61 6b 65  en(I,M) vdbeTake
1660: 42 72 61 6e 63 68 28 70 4f 70 2d 3e 69 53 72 63  Branch(pOp->iSrc
1670: 4c 69 6e 65 2c 49 2c 4d 29 0a 20 20 73 74 61 74  Line,I,M).  stat
1680: 69 63 20 76 6f 69 64 20 76 64 62 65 54 61 6b 65  ic void vdbeTake
1690: 42 72 61 6e 63 68 28 75 33 32 20 69 53 72 63 4c  Branch(u32 iSrcL
16a0: 69 6e 65 2c 20 75 38 20 49 2c 20 75 38 20 4d 29  ine, u8 I, u8 M)
16b0: 7b 0a 20 20 20 20 75 38 20 6d 4e 65 76 65 72 3b  {.    u8 mNever;
16c0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 49 3c 3d  .    assert( I<=
16d0: 32 20 29 3b 20 20 2f 2a 20 30 3a 20 66 61 6c 6c  2 );  /* 0: fall
16e0: 20 74 68 72 6f 75 67 68 2c 20 20 31 3a 20 74 61   through,  1: ta
16f0: 6b 65 6e 2c 20 20 32 3a 20 61 6c 74 65 72 6e 61  ken,  2: alterna
1700: 74 65 20 74 61 6b 65 6e 20 2a 2f 0a 20 20 20 20  te taken */.    
1710: 61 73 73 65 72 74 28 20 4d 3c 3d 34 20 29 3b 20  assert( M<=4 ); 
1720: 20 2f 2a 20 32 3a 20 74 77 6f 2d 77 61 79 20 62   /* 2: two-way b
1730: 72 61 6e 63 68 2c 20 33 3a 20 74 68 72 65 65 2d  ranch, 3: three-
1740: 77 61 79 20 62 72 61 6e 63 68 2c 20 34 3a 20 4f  way branch, 4: O
1750: 50 5f 4a 75 6d 70 20 2a 2f 0a 20 20 20 20 61 73  P_Jump */.    as
1760: 73 65 72 74 28 20 49 3c 4d 20 29 3b 20 20 20 2f  sert( I<M );   /
1770: 2a 20 49 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20  * I can only be 
1780: 32 20 69 66 20 4d 20 69 73 20 33 20 6f 72 20 34  2 if M is 3 or 4
1790: 20 2a 2f 0a 20 20 20 20 2f 2a 20 54 72 61 6e 73   */.    /* Trans
17a0: 66 6f 72 6d 20 49 20 66 72 6f 6d 20 61 20 69 6e  form I from a in
17b0: 74 65 67 65 72 20 5b 30 2c 31 2c 32 5d 20 69 6e  teger [0,1,2] in
17c0: 74 6f 20 61 20 62 69 74 6d 61 73 6b 20 6f 66 20  to a bitmask of 
17d0: 5b 31 2c 32 2c 34 5d 20 2a 2f 0a 20 20 20 20 49  [1,2,4] */.    I
17e0: 20 3d 20 31 3c 3c 49 3b 0a 20 20 20 20 2f 2a 20   = 1<<I;.    /* 
17f0: 54 68 65 20 75 70 70 65 72 20 38 20 62 69 74 73  The upper 8 bits
1800: 20 6f 66 20 69 53 72 63 4c 69 6e 65 20 61 72 65   of iSrcLine are
1810: 20 66 6c 61 67 73 2e 20 20 54 68 65 20 6c 6f 77   flags.  The low
1820: 65 72 20 74 68 72 65 65 20 62 69 74 73 20 6f 66  er three bits of
1830: 0a 20 20 20 20 2a 2a 20 74 68 65 20 66 6c 61 67  .    ** the flag
1840: 73 20 69 6e 64 69 63 61 74 65 20 64 69 72 65 63  s indicate direc
1850: 74 69 6f 6e 73 20 74 68 61 74 20 74 68 65 20 62  tions that the b
1860: 72 61 6e 63 68 20 63 61 6e 20 6e 65 76 65 72 20  ranch can never 
1870: 67 6f 2e 20 20 49 66 0a 20 20 20 20 2a 2a 20 61  go.  If.    ** a
1880: 20 62 72 61 6e 63 68 20 72 65 61 6c 6c 79 20 64   branch really d
1890: 6f 65 73 20 67 6f 20 69 6e 20 6f 6e 65 20 6f 66  oes go in one of
18a0: 20 74 68 6f 73 65 20 64 69 72 65 63 74 69 6f 6e   those direction
18b0: 73 2c 20 61 73 73 65 72 74 20 72 69 67 68 74 0a  s, assert right.
18c0: 20 20 20 20 2a 2a 20 61 77 61 79 2e 20 2a 2f 0a      ** away. */.
18d0: 20 20 20 20 6d 4e 65 76 65 72 20 3d 20 69 53 72      mNever = iSr
18e0: 63 4c 69 6e 65 20 3e 3e 20 32 34 3b 0a 20 20 20  cLine >> 24;.   
18f0: 20 61 73 73 65 72 74 28 20 28 49 20 26 20 6d 4e   assert( (I & mN
1900: 65 76 65 72 29 3d 3d 30 20 29 3b 0a 20 20 20 20  ever)==0 );.    
1910: 69 66 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  if( sqlite3Globa
1920: 6c 43 6f 6e 66 69 67 2e 78 56 64 62 65 42 72 61  lConfig.xVdbeBra
1930: 6e 63 68 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b  nch==0 ) return;
1940: 20 20 2f 2a 4e 4f 5f 54 45 53 54 2a 2f 0a 20 20    /*NO_TEST*/.  
1950: 20 20 49 20 7c 3d 20 6d 4e 65 76 65 72 3b 0a 20    I |= mNever;. 
1960: 20 20 20 69 66 28 20 4d 3d 3d 32 20 29 20 49 20     if( M==2 ) I 
1970: 7c 3d 20 30 78 30 34 3b 0a 20 20 20 20 69 66 28  |= 0x04;.    if(
1980: 20 4d 3d 3d 34 20 29 7b 0a 20 20 20 20 20 20 49   M==4 ){.      I
1990: 20 7c 3d 20 30 78 30 38 3b 0a 20 20 20 20 20 20   |= 0x08;.      
19a0: 69 66 28 20 28 6d 4e 65 76 65 72 26 30 78 30 38  if( (mNever&0x08
19b0: 29 21 3d 30 20 26 26 20 28 49 26 30 78 30 35 29  )!=0 && (I&0x05)
19c0: 21 3d 30 29 20 49 20 7c 3d 20 30 78 30 35 3b 20  !=0) I |= 0x05; 
19d0: 2f 2a 4e 4f 5f 54 45 53 54 2a 2f 0a 20 20 20 20  /*NO_TEST*/.    
19e0: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 47 6c 6f  }.    sqlite3Glo
19f0: 62 61 6c 43 6f 6e 66 69 67 2e 78 56 64 62 65 42  balConfig.xVdbeB
1a00: 72 61 6e 63 68 28 73 71 6c 69 74 65 33 47 6c 6f  ranch(sqlite3Glo
1a10: 62 61 6c 43 6f 6e 66 69 67 2e 70 56 64 62 65 42  balConfig.pVdbeB
1a20: 72 61 6e 63 68 41 72 67 2c 0a 20 20 20 20 20 20  ranchArg,.      
1a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 53                iS
1a50: 72 63 4c 69 6e 65 26 30 78 66 66 66 66 66 66 2c  rcLine&0xffffff,
1a60: 20 49 2c 20 4d 29 3b 0a 20 20 7d 0a 23 65 6e 64   I, M);.  }.#end
1a70: 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72  if../*.** Conver
1a80: 74 20 74 68 65 20 67 69 76 65 6e 20 72 65 67 69  t the given regi
1a90: 73 74 65 72 20 69 6e 74 6f 20 61 20 73 74 72 69  ster into a stri
1aa0: 6e 67 20 69 66 20 69 74 20 69 73 6e 27 74 20 6f  ng if it isn't o
1ab0: 6e 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e 20 52  ne.** already. R
1ac0: 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69  eturn non-zero i
1ad0: 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69  f a malloc() fai
1ae0: 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ls..*/.#define S
1af0: 74 72 69 6e 67 69 66 79 28 50 2c 20 65 6e 63 29  tringify(P, enc)
1b00: 20 5c 0a 20 20 20 69 66 28 28 28 50 29 2d 3e 66   \.   if(((P)->f
1b10: 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c 4d 45  lags&(MEM_Str|ME
1b20: 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26 20 73  M_Blob))==0 && s
1b30: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72  qlite3VdbeMemStr
1b40: 69 6e 67 69 66 79 28 50 2c 65 6e 63 2c 30 29 29  ingify(P,enc,0))
1b50: 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f 20 6e   \.     { goto n
1b60: 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20  o_mem; }../*.** 
1b70: 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72  An ephemeral str
1b80: 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67 6e 69  ing value (signi
1b90: 66 69 65 64 20 62 79 20 74 68 65 20 4d 45 4d 5f  fied by the MEM_
1ba0: 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f 6e 74  Ephem flag) cont
1bb0: 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65  ains.** a pointe
1bc0: 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c  r to a dynamical
1bd0: 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74 72  ly allocated str
1be0: 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65 20 6f  ing where some o
1bf0: 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a 20 69  ther entity.** i
1c00: 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f  s responsible fo
1c10: 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74  r deallocating t
1c20: 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42 65 63  hat string.  Bec
1c30: 61 75 73 65 20 74 68 65 20 72 65 67 69 73 74 65  ause the registe
1c40: 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 63 6f  r.** does not co
1c50: 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69 6e 67  ntrol the string
1c60: 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20 64 65  , it might be de
1c70: 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20 74 68  leted without th
1c80: 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6b 6e  e register.** kn
1c90: 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20  owing it..**.** 
1ca0: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e  This routine con
1cb0: 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d 65 72  verts an ephemer
1cc0: 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61  al string into a
1cd0: 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c   dynamically all
1ce0: 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67  ocated.** string
1cf0: 20 74 68 61 74 20 74 68 65 20 72 65 67 69 73 74   that the regist
1d00: 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74 72 6f  er itself contro
1d10: 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  ls.  In other wo
1d20: 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76 65  rds, it.** conve
1d30: 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65 6d  rts an MEM_Ephem
1d40: 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 73   string into a s
1d50: 74 72 69 6e 67 20 77 69 74 68 20 50 2e 7a 3d 3d  tring with P.z==
1d60: 50 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a 23 64  P.zMalloc..*/.#d
1d70: 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61  efine Deephemera
1d80: 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28  lize(P) \.   if(
1d90: 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d   ((P)->flags&MEM
1da0: 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20  _Ephem)!=0 \.   
1db0: 20 20 20 20 26 26 20 73 71 6c 69 74 65 33 56 64      && sqlite3Vd
1dc0: 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62  beMemMakeWriteab
1dd0: 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f  le(P) ){ goto no
1de0: 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75 72  _mem;}../* Retur
1df0: 6e 20 74 72 75 65 20 69 66 20 74 68 65 20 63 75  n true if the cu
1e00: 72 73 6f 72 20 77 61 73 20 6f 70 65 6e 65 64 20  rsor was opened 
1e10: 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70 65  using the OP_Ope
1e20: 6e 53 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e 20  nSorter opcode. 
1e30: 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 53 6f 72  */.#define isSor
1e40: 74 65 72 28 78 29 20 28 28 78 29 2d 3e 65 43 75  ter(x) ((x)->eCu
1e50: 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 53  rType==CURTYPE_S
1e60: 4f 52 54 45 52 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c  ORTER)../*.** Al
1e70: 6c 6f 63 61 74 65 20 56 64 62 65 43 75 72 73 6f  locate VdbeCurso
1e80: 72 20 6e 75 6d 62 65 72 20 69 43 75 72 2e 20 20  r number iCur.  
1e90: 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72  Return a pointer
1ea0: 20 74 6f 20 69 74 2e 20 20 52 65 74 75 72 6e 20   to it.  Return 
1eb0: 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20 72 75  NULL.** if we ru
1ec0: 6e 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 2e  n out of memory.
1ed0: 0a 2a 2f 0a 73 74 61 74 69 63 20 56 64 62 65 43  .*/.static VdbeC
1ee0: 75 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43  ursor *allocateC
1ef0: 75 72 73 6f 72 28 0a 20 20 56 64 62 65 20 2a 70  ursor(.  Vdbe *p
1f00: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
1f10: 2a 20 54 68 65 20 76 69 72 74 75 61 6c 20 6d 61  * The virtual ma
1f20: 63 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 69  chine */.  int i
1f30: 43 75 72 2c 20 20 20 20 20 20 20 20 20 20 20 20  Cur,            
1f40: 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65   /* Index of the
1f50: 20 6e 65 77 20 56 64 62 65 43 75 72 73 6f 72 20   new VdbeCursor 
1f60: 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 2c  */.  int nField,
1f70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1f80: 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
1f90: 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  n the table or i
1fa0: 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 44  ndex */.  int iD
1fb0: 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b,              
1fc0: 2f 2a 20 44 61 74 61 62 61 73 65 20 74 68 65 20  /* Database the 
1fd0: 63 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73 20 74  cursor belongs t
1fe0: 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20 75 38  o, or -1 */.  u8
1ff0: 20 65 43 75 72 54 79 70 65 20 20 20 20 20 20 20   eCurType       
2000: 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74      /* Type of t
2010: 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20 2a 2f  he new cursor */
2020: 0a 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68  .){.  /* Find th
2030: 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68  e memory cell th
2040: 61 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20  at will be used 
2050: 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f  to store the blo
2060: 62 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a  b of memory.  **
2070: 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68   required for th
2080: 69 73 20 56 64 62 65 43 75 72 73 6f 72 20 73 74  is VdbeCursor st
2090: 72 75 63 74 75 72 65 2e 20 49 74 20 69 73 20 63  ructure. It is c
20a0: 6f 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65  onvenient to use
20b0: 20 61 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65   a .  ** vdbe me
20c0: 6d 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e  mory cell to man
20d0: 61 67 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61  age the memory a
20e0: 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72  llocation requir
20f0: 65 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64  ed for a.  ** Vd
2100: 62 65 43 75 72 73 6f 72 20 73 74 72 75 63 74 75  beCursor structu
2110: 72 65 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f  re for the follo
2120: 77 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20  wing reasons:.  
2130: 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65  **.  **   * Some
2140: 74 69 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d  times cursor num
2150: 62 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f  bers are used fo
2160: 72 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69  r a couple of di
2170: 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20  fferent.  **    
2180: 20 70 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76   purposes in a v
2190: 64 62 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65  dbe program. The
21a0: 20 64 69 66 66 65 72 65 6e 74 20 75 73 65 73 20   different uses 
21b0: 6d 69 67 68 74 20 72 65 71 75 69 72 65 0a 20 20  might require.  
21c0: 2a 2a 20 20 20 20 20 64 69 66 66 65 72 65 6e 74  **     different
21d0: 20 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f   sized allocatio
21e0: 6e 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73  ns. Memory cells
21f0: 20 70 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c   provide growabl
2200: 65 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63  e.  **     alloc
2210: 61 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a  ations..  **.  *
2220: 2a 20 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67  *   * When using
2230: 20 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d   ENABLE_MEMORY_M
2240: 41 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72  ANAGEMENT, memor
2250: 79 20 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63  y cell buffers c
2260: 61 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66  an.  **     be f
2270: 72 65 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20  reed lazily via 
2280: 74 68 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65  the sqlite3_rele
2290: 61 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49  ase_memory() API
22a0: 2e 20 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20  . This.  **     
22b0: 6d 69 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75  minimizes the nu
22c0: 6d 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63  mber of malloc c
22d0: 61 6c 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65  alls made by the
22e0: 20 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20   system..  **.  
22f0: 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 63 65  ** The memory ce
2300: 6c 6c 20 66 6f 72 20 63 75 72 73 6f 72 20 30 20  ll for cursor 0 
2310: 69 73 20 61 4d 65 6d 5b 30 5d 2e 20 54 68 65 20  is aMem[0]. The 
2320: 72 65 73 74 20 61 72 65 20 61 6c 6c 6f 63 61 74  rest are allocat
2330: 65 64 20 66 72 6f 6d 0a 20 20 2a 2a 20 74 68 65  ed from.  ** the
2340: 20 74 6f 70 20 6f 66 20 74 68 65 20 72 65 67 69   top of the regi
2350: 73 74 65 72 20 73 70 61 63 65 2e 20 20 43 75 72  ster space.  Cur
2360: 73 6f 72 20 31 20 69 73 20 61 74 20 4d 65 6d 5b  sor 1 is at Mem[
2370: 70 2d 3e 6e 4d 65 6d 2d 31 5d 2e 0a 20 20 2a 2a  p->nMem-1]..  **
2380: 20 43 75 72 73 6f 72 20 32 20 69 73 20 61 74 20   Cursor 2 is at 
2390: 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 32 5d 2e 20  Mem[p->nMem-2]. 
23a0: 41 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20  And so forth..  
23b0: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d  */.  Mem *pMem =
23c0: 20 69 43 75 72 3e 30 20 3f 20 26 70 2d 3e 61 4d   iCur>0 ? &p->aM
23d0: 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d  em[p->nMem-iCur]
23e0: 20 3a 20 70 2d 3e 61 4d 65 6d 3b 0a 0a 20 20 69   : p->aMem;..  i
23f0: 6e 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65  nt nByte;.  Vdbe
2400: 43 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b  Cursor *pCx = 0;
2410: 0a 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20  .  nByte = .    
2420: 20 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28    ROUND8(sizeof(
2430: 56 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32  VdbeCursor)) + 2
2440: 2a 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69  *sizeof(u32)*nFi
2450: 65 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 65 43  eld + .      (eC
2460: 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
2470: 42 54 52 45 45 3f 73 71 6c 69 74 65 33 42 74 72  BTREE?sqlite3Btr
2480: 65 65 43 75 72 73 6f 72 53 69 7a 65 28 29 3a 30  eeCursorSize():0
2490: 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43  );..  assert( iC
24a0: 75 72 3e 3d 30 20 26 26 20 69 43 75 72 3c 70 2d  ur>=0 && iCur<p-
24b0: 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66  >nCursor );.  if
24c0: 28 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d  ( p->apCsr[iCur]
24d0: 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49   ){ /*OPTIMIZATI
24e0: 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20  ON-IF-FALSE*/.  
24f0: 20 20 2f 2a 20 42 65 66 6f 72 65 20 63 61 6c 6c    /* Before call
2500: 69 6e 67 20 73 71 6c 69 74 65 33 56 64 62 65 46  ing sqlite3VdbeF
2510: 72 65 65 43 75 72 73 6f 72 28 29 2c 20 65 6e 73  reeCursor(), ens
2520: 75 72 65 20 74 68 65 20 69 73 45 70 68 65 6d 65  ure the isEpheme
2530: 72 61 6c 20 66 6c 61 67 0a 20 20 20 20 2a 2a 20  ral flag.    ** 
2540: 69 73 20 63 6c 65 61 72 2e 20 4f 74 68 65 72 77  is clear. Otherw
2550: 69 73 65 2c 20 69 66 20 74 68 69 73 20 69 73 20  ise, if this is 
2560: 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72  an ephemeral cur
2570: 73 6f 72 20 63 72 65 61 74 65 64 20 62 79 20 0a  sor created by .
2580: 20 20 20 20 2a 2a 20 4f 50 5f 4f 70 65 6e 44 75      ** OP_OpenDu
2590: 70 2c 20 74 68 65 20 63 75 72 73 6f 72 20 77 69  p, the cursor wi
25a0: 6c 6c 20 6e 6f 74 20 62 65 20 63 6c 6f 73 65 64  ll not be closed
25b0: 20 61 6e 64 20 77 69 6c 6c 20 73 74 69 6c 6c 20   and will still 
25c0: 62 65 20 70 61 72 74 0a 20 20 20 20 2a 2a 20 6f  be part.    ** o
25d0: 66 20 61 20 42 74 53 68 61 72 65 64 2e 70 43 75  f a BtShared.pCu
25e0: 72 73 6f 72 20 6c 69 73 74 2e 20 20 2a 2f 0a 20  rsor list.  */. 
25f0: 20 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72     p->apCsr[iCur
2600: 5d 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 3d  ]->isEphemeral =
2610: 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   0;.    sqlite3V
2620: 64 62 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c  dbeFreeCursor(p,
2630: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 29   p->apCsr[iCur])
2640: 3b 0a 20 20 20 20 70 2d 3e 61 70 43 73 72 5b 69  ;.    p->apCsr[i
2650: 43 75 72 5d 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Cur] = 0;.  }.  
2660: 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 73  if( SQLITE_OK==s
2670: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65  qlite3VdbeMemCle
2680: 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4d 65 6d  arAndResize(pMem
2690: 2c 20 6e 42 79 74 65 29 20 29 7b 0a 20 20 20 20  , nByte) ){.    
26a0: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d  p->apCsr[iCur] =
26b0: 20 70 43 78 20 3d 20 28 56 64 62 65 43 75 72 73   pCx = (VdbeCurs
26c0: 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 20  or*)pMem->z;.   
26d0: 20 6d 65 6d 73 65 74 28 70 43 78 2c 20 30 2c 20   memset(pCx, 0, 
26e0: 6f 66 66 73 65 74 6f 66 28 56 64 62 65 43 75 72  offsetof(VdbeCur
26f0: 73 6f 72 2c 70 41 6c 74 43 75 72 73 6f 72 29 29  sor,pAltCursor))
2700: 3b 0a 20 20 20 20 70 43 78 2d 3e 65 43 75 72 54  ;.    pCx->eCurT
2710: 79 70 65 20 3d 20 65 43 75 72 54 79 70 65 3b 0a  ype = eCurType;.
2720: 20 20 20 20 70 43 78 2d 3e 69 44 62 20 3d 20 69      pCx->iDb = i
2730: 44 62 3b 0a 20 20 20 20 70 43 78 2d 3e 6e 46 69  Db;.    pCx->nFi
2740: 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b 0a 20 20  eld = nField;.  
2750: 20 20 70 43 78 2d 3e 61 4f 66 66 73 65 74 20 3d    pCx->aOffset =
2760: 20 26 70 43 78 2d 3e 61 54 79 70 65 5b 6e 46 69   &pCx->aType[nFi
2770: 65 6c 64 5d 3b 0a 20 20 20 20 69 66 28 20 65 43  eld];.    if( eC
2780: 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
2790: 42 54 52 45 45 20 29 7b 0a 20 20 20 20 20 20 70  BTREE ){.      p
27a0: 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 20 3d  Cx->uc.pCursor =
27b0: 20 28 42 74 43 75 72 73 6f 72 2a 29 0a 20 20 20   (BtCursor*).   
27c0: 20 20 20 20 20 20 20 26 70 4d 65 6d 2d 3e 7a 5b         &pMem->z[
27d0: 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56 64  ROUND8(sizeof(Vd
27e0: 62 65 43 75 72 73 6f 72 29 29 2b 32 2a 73 69 7a  beCursor))+2*siz
27f0: 65 6f 66 28 75 33 32 29 2a 6e 46 69 65 6c 64 5d  eof(u32)*nField]
2800: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42  ;.      sqlite3B
2810: 74 72 65 65 43 75 72 73 6f 72 5a 65 72 6f 28 70  treeCursorZero(p
2820: 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  Cx->uc.pCursor);
2830: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
2840: 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a  urn pCx;.}../*.*
2850: 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74  * Try to convert
2860: 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20   a value into a 
2870: 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e  numeric represen
2880: 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61 6e  tation if we can
2890: 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f 75  .** do so withou
28a0: 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  t loss of inform
28b0: 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ation.  In other
28c0: 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20 73   words, if the s
28d0: 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c  tring.** looks l
28e0: 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63 6f  ike a number, co
28f0: 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61 20  nvert it into a 
2900: 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20 64  number.  If it d
2910: 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20  oes not.** look 
2920: 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 6c  like a number, l
2930: 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a  eave it alone..*
2940: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 62 54 72 79  *.** If the bTry
2950: 46 6f 72 49 6e 74 20 66 6c 61 67 20 69 73 20 74  ForInt flag is t
2960: 72 75 65 2c 20 74 68 65 6e 20 65 78 74 72 61 20  rue, then extra 
2970: 65 66 66 6f 72 74 20 69 73 20 6d 61 64 65 20 74  effort is made t
2980: 6f 20 67 69 76 65 0a 2a 2a 20 61 6e 20 69 6e 74  o give.** an int
2990: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
29a0: 69 6f 6e 2e 20 20 53 74 72 69 6e 67 73 20 74 68  ion.  Strings th
29b0: 61 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 66 6c 6f  at look like flo
29c0: 61 74 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 76  ating point.** v
29d0: 61 6c 75 65 73 20 62 75 74 20 77 68 69 63 68 20  alues but which 
29e0: 68 61 76 65 20 6e 6f 20 66 72 61 63 74 69 6f 6e  have no fraction
29f0: 61 6c 20 63 6f 6d 70 6f 6e 65 6e 74 20 28 65 78  al component (ex
2a00: 61 6d 70 6c 65 3a 20 27 34 38 2e 30 30 27 29 0a  ample: '48.00').
2a10: 2a 2a 20 77 69 6c 6c 20 68 61 76 65 20 61 20 4d  ** will have a M
2a20: 45 4d 5f 49 6e 74 20 72 65 70 72 65 73 65 6e 74  EM_Int represent
2a30: 61 74 69 6f 6e 20 77 68 65 6e 20 62 54 72 79 46  ation when bTryF
2a40: 6f 72 49 6e 74 20 69 73 20 74 72 75 65 2e 0a 2a  orInt is true..*
2a50: 2a 0a 2a 2a 20 49 66 20 62 54 72 79 46 6f 72 49  *.** If bTryForI
2a60: 6e 74 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65  nt is false, the
2a70: 6e 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 73  n if the input s
2a80: 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 73 20 61  tring contains a
2a90: 20 64 65 63 69 6d 61 6c 0a 2a 2a 20 70 6f 69 6e   decimal.** poin
2aa0: 74 20 6f 72 20 65 78 70 6f 6e 65 6e 74 69 61 6c  t or exponential
2ab0: 20 6e 6f 74 61 74 69 6f 6e 2c 20 74 68 65 20 72   notation, the r
2ac0: 65 73 75 6c 74 20 69 73 20 6f 6e 6c 79 20 4d 45  esult is only ME
2ad0: 4d 5f 52 65 61 6c 2c 20 65 76 65 6e 0a 2a 2a 20  M_Real, even.** 
2ae0: 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 65  if there is an e
2af0: 78 61 63 74 20 69 6e 74 65 67 65 72 20 72 65 70  xact integer rep
2b00: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
2b10: 68 65 20 71 75 61 6e 74 69 74 79 2e 0a 2a 2f 0a  he quantity..*/.
2b20: 73 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c  static void appl
2b30: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
2b40: 28 4d 65 6d 20 2a 70 52 65 63 2c 20 69 6e 74 20  (Mem *pRec, int 
2b50: 62 54 72 79 46 6f 72 49 6e 74 29 7b 0a 20 20 64  bTryForInt){.  d
2b60: 6f 75 62 6c 65 20 72 56 61 6c 75 65 3b 0a 20 20  ouble rValue;.  
2b70: 69 36 34 20 69 56 61 6c 75 65 3b 0a 20 20 75 38  i64 iValue;.  u8
2b80: 20 65 6e 63 20 3d 20 70 52 65 63 2d 3e 65 6e 63   enc = pRec->enc
2b90: 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 52 65  ;.  assert( (pRe
2ba0: 63 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  c->flags & (MEM_
2bb0: 53 74 72 7c 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  Str|MEM_Int|MEM_
2bc0: 52 65 61 6c 29 29 3d 3d 4d 45 4d 5f 53 74 72 20  Real))==MEM_Str 
2bd0: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
2be0: 41 74 6f 46 28 70 52 65 63 2d 3e 7a 2c 20 26 72  AtoF(pRec->z, &r
2bf0: 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20  Value, pRec->n, 
2c00: 65 6e 63 29 3d 3d 30 20 29 20 72 65 74 75 72 6e  enc)==0 ) return
2c10: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
2c20: 65 33 41 74 6f 69 36 34 28 70 52 65 63 2d 3e 7a  e3Atoi64(pRec->z
2c30: 2c 20 26 69 56 61 6c 75 65 2c 20 70 52 65 63 2d  , &iValue, pRec-
2c40: 3e 6e 2c 20 65 6e 63 29 20 29 7b 0a 20 20 20 20  >n, enc) ){.    
2c50: 70 52 65 63 2d 3e 75 2e 69 20 3d 20 69 56 61 6c  pRec->u.i = iVal
2c60: 75 65 3b 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c  ue;.    pRec->fl
2c70: 61 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  ags |= MEM_Int;.
2c80: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 52 65    }else{.    pRe
2c90: 63 2d 3e 75 2e 72 20 3d 20 72 56 61 6c 75 65 3b  c->u.r = rValue;
2ca0: 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73  .    pRec->flags
2cb0: 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20   |= MEM_Real;.  
2cc0: 20 20 69 66 28 20 62 54 72 79 46 6f 72 49 6e 74    if( bTryForInt
2cd0: 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   ) sqlite3VdbeIn
2ce0: 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 52  tegerAffinity(pR
2cf0: 65 63 29 3b 0a 20 20 7d 0a 20 20 2f 2a 20 54 45  ec);.  }.  /* TE
2d00: 58 54 2d 3e 4e 55 4d 45 52 49 43 20 69 73 20 6d  XT->NUMERIC is m
2d10: 61 6e 79 2d 3e 6f 6e 65 2e 20 20 48 65 6e 63 65  any->one.  Hence
2d20: 2c 20 69 74 20 69 73 20 69 6d 70 6f 72 74 61 6e  , it is importan
2d30: 74 20 74 6f 20 69 6e 76 61 6c 69 64 61 74 65 20  t to invalidate 
2d40: 74 68 65 0a 20 20 2a 2a 20 73 74 72 69 6e 67 20  the.  ** string 
2d50: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 61  representation a
2d60: 66 74 65 72 20 63 6f 6d 70 75 74 69 6e 67 20 61  fter computing a
2d70: 20 6e 75 6d 65 72 69 63 20 65 71 75 69 76 61 6c   numeric equival
2d80: 65 6e 74 2c 20 62 65 63 61 75 73 65 20 74 68 65  ent, because the
2d90: 0a 20 20 2a 2a 20 73 74 72 69 6e 67 20 72 65 70  .  ** string rep
2da0: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68  resentation migh
2db0: 74 20 6e 6f 74 20 62 65 20 74 68 65 20 63 61 6e  t not be the can
2dc0: 6f 6e 69 63 61 6c 20 72 65 70 72 65 73 65 6e 74  onical represent
2dd0: 61 74 69 6f 6e 20 66 6f 72 20 74 68 65 0a 20 20  ation for the.  
2de0: 2a 2a 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65  ** numeric value
2df0: 2e 20 20 54 69 63 6b 65 74 20 5b 33 34 33 36 33  .  Ticket [34363
2e00: 34 39 34 32 64 64 35 34 61 62 35 37 62 37 30 32  4942dd54ab57b702
2e10: 34 5d 20 32 30 31 38 2d 30 31 2d 33 31 2e 20 2a  4] 2018-01-31. *
2e20: 2f 0a 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20  /.  pRec->flags 
2e30: 26 3d 20 7e 4d 45 4d 5f 53 74 72 3b 0a 7d 0a 0a  &= ~MEM_Str;.}..
2e40: 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73 73 69 6e 67  /*.** Processing
2e50: 20 69 73 20 64 65 74 65 72 6d 69 6e 65 20 62 79   is determine by
2e60: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 70 61   the affinity pa
2e70: 72 61 6d 65 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53  rameter:.**.** S
2e80: 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45  QLITE_AFF_INTEGE
2e90: 52 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  R:.** SQLITE_AFF
2ea0: 5f 52 45 41 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45  _REAL:.** SQLITE
2eb0: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a  _AFF_NUMERIC:.**
2ec0: 20 20 20 20 54 72 79 20 74 6f 20 63 6f 6e 76 65      Try to conve
2ed0: 72 74 20 70 52 65 63 20 74 6f 20 61 6e 20 69 6e  rt pRec to an in
2ee0: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
2ef0: 74 69 6f 6e 20 6f 72 20 61 20 0a 2a 2a 20 20 20  tion or a .**   
2f00: 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20   floating-point 
2f10: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69  representation i
2f20: 66 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70  f an integer rep
2f30: 72 65 73 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20  resentation.**  
2f40: 20 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c    is not possibl
2f50: 65 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68  e.  Note that th
2f60: 65 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73  e integer repres
2f70: 65 6e 74 61 74 69 6f 6e 20 69 73 0a 2a 2a 20 20  entation is.**  
2f80: 20 20 61 6c 77 61 79 73 20 70 72 65 66 65 72 72    always preferr
2f90: 65 64 2c 20 65 76 65 6e 20 69 66 20 74 68 65 20  ed, even if the 
2fa0: 61 66 66 69 6e 69 74 79 20 69 73 20 52 45 41 4c  affinity is REAL
2fb0: 2c 20 62 65 63 61 75 73 65 0a 2a 2a 20 20 20 20  , because.**    
2fc0: 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65  an integer repre
2fd0: 73 65 6e 74 61 74 69 6f 6e 20 69 73 20 6d 6f 72  sentation is mor
2fe0: 65 20 73 70 61 63 65 20 65 66 66 69 63 69 65 6e  e space efficien
2ff0: 74 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a  t on disk..**.**
3000: 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
3010: 3a 0a 2a 2a 20 20 20 20 43 6f 6e 76 65 72 74 20  :.**    Convert 
3020: 70 52 65 63 20 74 6f 20 61 20 74 65 78 74 20 72  pRec to a text r
3030: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a  epresentation..*
3040: 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  *.** SQLITE_AFF_
3050: 42 4c 4f 42 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f  BLOB:.**    No-o
3060: 70 2e 20 20 70 52 65 63 20 69 73 20 75 6e 63 68  p.  pRec is unch
3070: 61 6e 67 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63  anged..*/.static
3080: 20 76 6f 69 64 20 61 70 70 6c 79 41 66 66 69 6e   void applyAffin
3090: 69 74 79 28 0a 20 20 4d 65 6d 20 2a 70 52 65 63  ity(.  Mem *pRec
30a0: 2c 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ,          /* Th
30b0: 65 20 76 61 6c 75 65 20 74 6f 20 61 70 70 6c 79  e value to apply
30c0: 20 61 66 66 69 6e 69 74 79 20 74 6f 20 2a 2f 0a   affinity to */.
30d0: 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 2c    char affinity,
30e0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66        /* The aff
30f0: 69 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c  inity to be appl
3100: 69 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 20  ied */.  u8 enc 
3110: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
3120: 55 73 65 20 74 68 69 73 20 74 65 78 74 20 65 6e  Use this text en
3130: 63 6f 64 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69  coding */.){.  i
3140: 66 28 20 61 66 66 69 6e 69 74 79 3e 3d 53 51 4c  f( affinity>=SQL
3150: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20  ITE_AFF_NUMERIC 
3160: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 61  ){.    assert( a
3170: 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
3180: 41 46 46 5f 49 4e 54 45 47 45 52 20 7c 7c 20 61  AFF_INTEGER || a
3190: 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
31a0: 41 46 46 5f 52 45 41 4c 0a 20 20 20 20 20 20 20  AFF_REAL.       
31b0: 20 20 20 20 20 20 7c 7c 20 61 66 66 69 6e 69 74        || affinit
31c0: 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  y==SQLITE_AFF_NU
31d0: 4d 45 52 49 43 20 29 3b 0a 20 20 20 20 69 66 28  MERIC );.    if(
31e0: 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20   (pRec->flags & 
31f0: 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 20 2f  MEM_Int)==0 ){ /
3200: 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46  *OPTIMIZATION-IF
3210: 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 20 20 69  -FALSE*/.      i
3220: 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 20  f( (pRec->flags 
3230: 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29  & MEM_Real)==0 )
3240: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 52  {.        if( pR
3250: 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ec->flags & MEM_
3260: 53 74 72 20 29 20 61 70 70 6c 79 4e 75 6d 65 72  Str ) applyNumer
3270: 69 63 41 66 66 69 6e 69 74 79 28 70 52 65 63 2c  icAffinity(pRec,
3280: 31 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  1);.      }else{
3290: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
32a0: 56 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e  VdbeIntegerAffin
32b0: 69 74 79 28 70 52 65 63 29 3b 0a 20 20 20 20 20  ity(pRec);.     
32c0: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65   }.    }.  }else
32d0: 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d 3d 53   if( affinity==S
32e0: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29  QLITE_AFF_TEXT )
32f0: 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 74  {.    /* Only at
3300: 74 65 6d 70 74 20 74 68 65 20 63 6f 6e 76 65 72  tempt the conver
3310: 73 69 6f 6e 20 74 6f 20 54 45 58 54 20 69 66 20  sion to TEXT if 
3320: 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e 74 65  there is an inte
3330: 67 65 72 20 6f 72 20 72 65 61 6c 0a 20 20 20 20  ger or real.    
3340: 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  ** representatio
3350: 6e 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55 4c 4c  n (blob and NULL
3360: 20 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f 6e 76   do not get conv
3370: 65 72 74 65 64 29 20 62 75 74 20 6e 6f 20 73 74  erted) but no st
3380: 72 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 70 72  ring.    ** repr
3390: 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20 49 74 20  esentation.  It 
33a0: 77 6f 75 6c 64 20 62 65 20 68 61 72 6d 6c 65 73  would be harmles
33b0: 73 20 74 6f 20 72 65 70 65 61 74 20 74 68 65 20  s to repeat the 
33c0: 63 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 0a 20  conversion if . 
33d0: 20 20 20 2a 2a 20 74 68 65 72 65 20 69 73 20 61     ** there is a
33e0: 6c 72 65 61 64 79 20 61 20 73 74 72 69 6e 67 20  lready a string 
33f0: 72 65 70 2c 20 62 75 74 20 69 74 20 69 73 20 70  rep, but it is p
3400: 6f 69 6e 74 6c 65 73 73 20 74 6f 20 77 61 73 74  ointless to wast
3410: 65 20 74 68 6f 73 65 0a 20 20 20 20 2a 2a 20 43  e those.    ** C
3420: 50 55 20 63 79 63 6c 65 73 2e 20 2a 2f 0a 20 20  PU cycles. */.  
3430: 20 20 69 66 28 20 30 3d 3d 28 70 52 65 63 2d 3e    if( 0==(pRec->
3440: 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 20 29  flags&MEM_Str) )
3450: 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e  { /*OPTIMIZATION
3460: 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20  -IF-FALSE*/.    
3470: 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61    if( (pRec->fla
3480: 67 73 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d  gs&(MEM_Real|MEM
3490: 5f 49 6e 74 29 29 20 29 7b 0a 20 20 20 20 20 20  _Int)) ){.      
34a0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
34b0: 53 74 72 69 6e 67 69 66 79 28 70 52 65 63 2c 20  Stringify(pRec, 
34c0: 65 6e 63 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d  enc, 1);.      }
34d0: 0a 20 20 20 20 7d 0a 20 20 20 20 70 52 65 63 2d  .    }.    pRec-
34e0: 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f  >flags &= ~(MEM_
34f0: 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Real|MEM_Int);. 
3500: 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20   }.}../*.** Try 
3510: 74 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20 74  to convert the t
3520: 79 70 65 20 6f 66 20 61 20 66 75 6e 63 74 69 6f  ype of a functio
3530: 6e 20 61 72 67 75 6d 65 6e 74 20 6f 72 20 61 20  n argument or a 
3540: 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a 2a  result column.**
3550: 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20   into a numeric 
3560: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20  representation. 
3570: 20 55 73 65 20 65 69 74 68 65 72 20 49 4e 54 45   Use either INTE
3580: 47 45 52 20 6f 72 20 52 45 41 4c 20 77 68 69 63  GER or REAL whic
3590: 68 65 76 65 72 0a 2a 2a 20 69 73 20 61 70 70 72  hever.** is appr
35a0: 6f 70 72 69 61 74 65 2e 20 20 42 75 74 20 6f 6e  opriate.  But on
35b0: 6c 79 20 64 6f 20 74 68 65 20 63 6f 6e 76 65 72  ly do the conver
35c0: 73 69 6f 6e 20 69 66 20 69 74 20 69 73 20 70 6f  sion if it is po
35d0: 73 73 69 62 6c 65 20 77 69 74 68 6f 75 74 0a 2a  ssible without.*
35e0: 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  * loss of inform
35f0: 61 74 69 6f 6e 20 61 6e 64 20 72 65 74 75 72 6e  ation and return
3600: 20 74 68 65 20 72 65 76 69 73 65 64 20 74 79 70   the revised typ
3610: 65 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e  e of the argumen
3620: 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  t..*/.int sqlite
3630: 33 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63 5f  3_value_numeric_
3640: 74 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61 6c  type(sqlite3_val
3650: 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 69 6e 74  ue *pVal){.  int
3660: 20 65 54 79 70 65 20 3d 20 73 71 6c 69 74 65 33   eType = sqlite3
3670: 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 56 61 6c  _value_type(pVal
3680: 29 3b 0a 20 20 69 66 28 20 65 54 79 70 65 3d 3d  );.  if( eType==
3690: 53 51 4c 49 54 45 5f 54 45 58 54 20 29 7b 0a 20  SQLITE_TEXT ){. 
36a0: 20 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20 28     Mem *pMem = (
36b0: 4d 65 6d 2a 29 70 56 61 6c 3b 0a 20 20 20 20 61  Mem*)pVal;.    a
36c0: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
36d0: 69 74 79 28 70 4d 65 6d 2c 20 30 29 3b 0a 20 20  ity(pMem, 0);.  
36e0: 20 20 65 54 79 70 65 20 3d 20 73 71 6c 69 74 65    eType = sqlite
36f0: 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 56 61  3_value_type(pVa
3700: 6c 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  l);.  }.  return
3710: 20 65 54 79 70 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a   eType;.}../*.**
3720: 20 45 78 70 6f 72 74 65 64 20 76 65 72 73 69 6f   Exported versio
3730: 6e 20 6f 66 20 61 70 70 6c 79 41 66 66 69 6e 69  n of applyAffini
3740: 74 79 28 29 2e 20 54 68 69 73 20 6f 6e 65 20 77  ty(). This one w
3750: 6f 72 6b 73 20 6f 6e 20 73 71 6c 69 74 65 33 5f  orks on sqlite3_
3760: 76 61 6c 75 65 2a 2c 20 0a 2a 2a 20 6e 6f 74 20  value*, .** not 
3770: 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 4d 65 6d  the internal Mem
3780: 2a 20 74 79 70 65 2e 0a 2a 2f 0a 76 6f 69 64 20  * type..*/.void 
3790: 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c  sqlite3ValueAppl
37a0: 79 41 66 66 69 6e 69 74 79 28 0a 20 20 73 71 6c  yAffinity(.  sql
37b0: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c  ite3_value *pVal
37c0: 2c 20 0a 20 20 75 38 20 61 66 66 69 6e 69 74 79  , .  u8 affinity
37d0: 2c 20 0a 20 20 75 38 20 65 6e 63 0a 29 7b 0a 20  , .  u8 enc.){. 
37e0: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 28   applyAffinity((
37f0: 4d 65 6d 20 2a 29 70 56 61 6c 2c 20 61 66 66 69  Mem *)pVal, affi
3800: 6e 69 74 79 2c 20 65 6e 63 29 3b 0a 7d 0a 0a 2f  nity, enc);.}../
3810: 2a 0a 2a 2a 20 70 4d 65 6d 20 63 75 72 72 65 6e  *.** pMem curren
3820: 74 6c 79 20 6f 6e 6c 79 20 68 6f 6c 64 73 20 61  tly only holds a
3830: 20 73 74 72 69 6e 67 20 74 79 70 65 20 28 6f 72   string type (or
3840: 20 6d 61 79 62 65 20 61 20 42 4c 4f 42 20 74 68   maybe a BLOB th
3850: 61 74 20 77 65 20 63 61 6e 0a 2a 2a 20 69 6e 74  at we can.** int
3860: 65 72 70 72 65 74 20 61 73 20 61 20 73 74 72 69  erpret as a stri
3870: 6e 67 20 69 66 20 77 65 20 77 61 6e 74 20 74 6f  ng if we want to
3880: 29 2e 20 20 43 6f 6d 70 75 74 65 20 69 74 73 20  ).  Compute its 
3890: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a 2a 2a  corresponding.**
38a0: 20 6e 75 6d 65 72 69 63 20 74 79 70 65 2c 20 69   numeric type, i
38b0: 66 20 68 61 73 20 6f 6e 65 2e 20 20 53 65 74 20  f has one.  Set 
38c0: 74 68 65 20 70 4d 65 6d 2d 3e 75 2e 72 20 61 6e  the pMem->u.r an
38d0: 64 20 70 4d 65 6d 2d 3e 75 2e 69 20 66 69 65 6c  d pMem->u.i fiel
38e0: 64 73 0a 2a 2a 20 61 63 63 6f 72 64 69 6e 67 6c  ds.** accordingl
38f0: 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31 36  y..*/.static u16
3900: 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45   SQLITE_NOINLINE
3910: 20 63 6f 6d 70 75 74 65 4e 75 6d 65 72 69 63 54   computeNumericT
3920: 79 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a  ype(Mem *pMem){.
3930: 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d    assert( (pMem-
3940: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e  >flags & (MEM_In
3950: 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d 3d 30 20  t|MEM_Real))==0 
3960: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d  );.  assert( (pM
3970: 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  em->flags & (MEM
3980: 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 21  _Str|MEM_Blob))!
3990: 3d 30 20 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  =0 );.  if( sqli
39a0: 74 65 33 41 74 6f 46 28 70 4d 65 6d 2d 3e 7a 2c  te3AtoF(pMem->z,
39b0: 20 26 70 4d 65 6d 2d 3e 75 2e 72 2c 20 70 4d 65   &pMem->u.r, pMe
39c0: 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63 29  m->n, pMem->enc)
39d0: 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72  ==0 ){.    retur
39e0: 6e 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73  n 0;.  }.  if( s
39f0: 71 6c 69 74 65 33 41 74 6f 69 36 34 28 70 4d 65  qlite3Atoi64(pMe
3a00: 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e 69  m->z, &pMem->u.i
3a10: 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d  , pMem->n, pMem-
3a20: 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a 20 20 20 20  >enc)==0 ){.    
3a30: 72 65 74 75 72 6e 20 4d 45 4d 5f 49 6e 74 3b 0a  return MEM_Int;.
3a40: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 4d 45 4d    }.  return MEM
3a50: 5f 52 65 61 6c 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  _Real;.}../*.** 
3a60: 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 65 72  Return the numer
3a70: 69 63 20 74 79 70 65 20 66 6f 72 20 70 4d 65 6d  ic type for pMem
3a80: 2c 20 65 69 74 68 65 72 20 4d 45 4d 5f 49 6e 74  , either MEM_Int
3a90: 20 6f 72 20 4d 45 4d 5f 52 65 61 6c 20 6f 72 20   or MEM_Real or 
3aa0: 62 6f 74 68 20 6f 72 0a 2a 2a 20 6e 6f 6e 65 2e  both or.** none.
3ab0: 20 20 0a 2a 2a 0a 2a 2a 20 55 6e 6c 69 6b 65 20    .**.** Unlike 
3ac0: 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
3ad0: 6e 69 74 79 28 29 2c 20 74 68 69 73 20 72 6f 75  nity(), this rou
3ae0: 74 69 6e 65 20 64 6f 65 73 20 6e 6f 74 20 6d 6f  tine does not mo
3af0: 64 69 66 79 20 70 4d 65 6d 2d 3e 66 6c 61 67 73  dify pMem->flags
3b00: 2e 0a 2a 2a 20 42 75 74 20 69 74 20 64 6f 65 73  ..** But it does
3b10: 20 73 65 74 20 70 4d 65 6d 2d 3e 75 2e 72 20 61   set pMem->u.r a
3b20: 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69 20 61 70 70  nd pMem->u.i app
3b30: 72 6f 70 72 69 61 74 65 6c 79 2e 0a 2a 2f 0a 73  ropriately..*/.s
3b40: 74 61 74 69 63 20 75 31 36 20 6e 75 6d 65 72 69  tatic u16 numeri
3b50: 63 54 79 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29  cType(Mem *pMem)
3b60: 7b 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c  {.  if( pMem->fl
3b70: 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  ags & (MEM_Int|M
3b80: 45 4d 5f 52 65 61 6c 29 20 29 7b 0a 20 20 20 20  EM_Real) ){.    
3b90: 72 65 74 75 72 6e 20 70 4d 65 6d 2d 3e 66 6c 61  return pMem->fla
3ba0: 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  gs & (MEM_Int|ME
3bb0: 4d 5f 52 65 61 6c 29 3b 0a 20 20 7d 0a 20 20 69  M_Real);.  }.  i
3bc0: 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  f( pMem->flags &
3bd0: 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
3be0: 6f 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72  ob) ){.    retur
3bf0: 6e 20 63 6f 6d 70 75 74 65 4e 75 6d 65 72 69 63  n computeNumeric
3c00: 54 79 70 65 28 70 4d 65 6d 29 3b 0a 20 20 7d 0a  Type(pMem);.  }.
3c10: 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 23    return 0;.}..#
3c20: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
3c30: 55 47 0a 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 61  UG./*.** Write a
3c40: 20 6e 69 63 65 20 73 74 72 69 6e 67 20 72 65 70   nice string rep
3c50: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
3c60: 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 63  he contents of c
3c70: 65 6c 6c 20 70 4d 65 6d 0a 2a 2a 20 69 6e 74 6f  ell pMem.** into
3c80: 20 62 75 66 66 65 72 20 7a 42 75 66 2c 20 6c 65   buffer zBuf, le
3c90: 6e 67 74 68 20 6e 42 75 66 2e 0a 2a 2f 0a 76 6f  ngth nBuf..*/.vo
3ca0: 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  id sqlite3VdbeMe
3cb0: 6d 50 72 65 74 74 79 50 72 69 6e 74 28 4d 65 6d  mPrettyPrint(Mem
3cc0: 20 2a 70 4d 65 6d 2c 20 63 68 61 72 20 2a 7a 42   *pMem, char *zB
3cd0: 75 66 29 7b 0a 20 20 63 68 61 72 20 2a 7a 43 73  uf){.  char *zCs
3ce0: 72 20 3d 20 7a 42 75 66 3b 0a 20 20 69 6e 74 20  r = zBuf;.  int 
3cf0: 66 20 3d 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b  f = pMem->flags;
3d00: 0a 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74  ..  static const
3d10: 20 63 68 61 72 20 2a 63 6f 6e 73 74 20 65 6e 63   char *const enc
3d20: 6e 61 6d 65 73 5b 5d 20 3d 20 7b 22 28 58 29 22  names[] = {"(X)"
3d30: 2c 20 22 28 38 29 22 2c 20 22 28 31 36 4c 45 29  , "(8)", "(16LE)
3d40: 22 2c 20 22 28 31 36 42 45 29 22 7d 3b 0a 0a 20  ", "(16BE)"};.. 
3d50: 20 69 66 28 20 66 26 4d 45 4d 5f 42 6c 6f 62 20   if( f&MEM_Blob 
3d60: 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  ){.    int i;.  
3d70: 20 20 63 68 61 72 20 63 3b 0a 20 20 20 20 69 66    char c;.    if
3d80: 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b  ( f & MEM_Dyn ){
3d90: 0a 20 20 20 20 20 20 63 20 3d 20 27 7a 27 3b 0a  .      c = 'z';.
3da0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
3db0: 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d   & (MEM_Static|M
3dc0: 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b  EM_Ephem))==0 );
3dd0: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66  .    }else if( f
3de0: 20 26 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b   & MEM_Static ){
3df0: 0a 20 20 20 20 20 20 63 20 3d 20 27 74 27 3b 0a  .      c = 't';.
3e00: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
3e10: 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f   & (MEM_Dyn|MEM_
3e20: 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20  Ephem))==0 );.  
3e30: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
3e40: 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20  MEM_Ephem ){.   
3e50: 20 20 20 63 20 3d 20 27 65 27 3b 0a 20 20 20 20     c = 'e';.    
3e60: 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28    assert( (f & (
3e70: 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44  MEM_Static|MEM_D
3e80: 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  yn))==0 );.    }
3e90: 65 6c 73 65 7b 0a 20 20 20 20 20 20 63 20 3d 20  else{.      c = 
3ea0: 27 73 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a  's';.    }.    *
3eb0: 28 7a 43 73 72 2b 2b 29 20 3d 20 63 3b 0a 20 20  (zCsr++) = c;.  
3ec0: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
3ed0: 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25  tf(100, zCsr, "%
3ee0: 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20  d[", pMem->n);. 
3ef0: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
3f00: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
3f10: 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  ;.    for(i=0; i
3f20: 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e  <16 && i<pMem->n
3f30: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71  ; i++){.      sq
3f40: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
3f50: 30 30 2c 20 7a 43 73 72 2c 20 22 25 30 32 58 22  00, zCsr, "%02X"
3f60: 2c 20 28 28 69 6e 74 29 70 4d 65 6d 2d 3e 7a 5b  , ((int)pMem->z[
3f70: 69 5d 20 26 20 30 78 46 46 29 29 3b 0a 20 20 20  i] & 0xFF));.   
3f80: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
3f90: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
3fa0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f 72 28  ;.    }.    for(
3fb0: 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70  i=0; i<16 && i<p
3fc0: 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20  Mem->n; i++){.  
3fd0: 20 20 20 20 63 68 61 72 20 7a 20 3d 20 70 4d 65      char z = pMe
3fe0: 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20 20 20 20 69  m->z[i];.      i
3ff0: 66 28 20 7a 3c 33 32 20 7c 7c 20 7a 3e 31 32 36  f( z<32 || z>126
4000: 20 29 20 2a 7a 43 73 72 2b 2b 20 3d 20 27 2e 27   ) *zCsr++ = '.'
4010: 3b 0a 20 20 20 20 20 20 65 6c 73 65 20 2a 7a 43  ;.      else *zC
4020: 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20 20 20 7d 0a  sr++ = z;.    }.
4030: 20 20 20 20 2a 28 7a 43 73 72 2b 2b 29 20 3d 20      *(zCsr++) = 
4040: 27 5d 27 3b 0a 20 20 20 20 69 66 28 20 66 20 26  ']';.    if( f &
4050: 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
4060: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
4070: 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b  ntf(100, zCsr,"+
4080: 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65  %dz",pMem->u.nZe
4090: 72 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20  ro);.      zCsr 
40a0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
40b0: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a  30(zCsr);.    }.
40c0: 20 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27      *zCsr = '\0'
40d0: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20  ;.  }else if( f 
40e0: 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20  & MEM_Str ){.   
40f0: 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a   int j, k;.    z
4100: 42 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20  Buf[0] = ' ';.  
4110: 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79    if( f & MEM_Dy
4120: 6e 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b  n ){.      zBuf[
4130: 31 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20  1] = 'z';.      
4140: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
4150: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68  M_Static|MEM_Eph
4160: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
4170: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
4180: 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20  _Static ){.     
4190: 20 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a   zBuf[1] = 't';.
41a0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
41b0: 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f   & (MEM_Dyn|MEM_
41c0: 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20  Ephem))==0 );.  
41d0: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
41e0: 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20  MEM_Ephem ){.   
41f0: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27     zBuf[1] = 'e'
4200: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
4210: 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63  (f & (MEM_Static
4220: 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b  |MEM_Dyn))==0 );
4230: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
4240: 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b    zBuf[1] = 's';
4250: 0a 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32  .    }.    k = 2
4260: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
4270: 70 72 69 6e 74 66 28 31 30 30 2c 20 26 7a 42 75  printf(100, &zBu
4280: 66 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d  f[k], "%d", pMem
4290: 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73  ->n);.    k += s
42a0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26  qlite3Strlen30(&
42b0: 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42  zBuf[k]);.    zB
42c0: 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20  uf[k++] = '[';. 
42d0: 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35     for(j=0; j<15
42e0: 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a   && j<pMem->n; j
42f0: 2b 2b 29 7b 0a 20 20 20 20 20 20 75 38 20 63 20  ++){.      u8 c 
4300: 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20  = pMem->z[j];.  
4310: 20 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30 20      if( c>=0x20 
4320: 26 26 20 63 3c 30 78 37 66 20 29 7b 0a 20 20 20  && c<0x7f ){.   
4330: 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d       zBuf[k++] =
4340: 20 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   c;.      }else{
4350: 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b  .        zBuf[k+
4360: 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20  +] = '.';.      
4370: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 75 66  }.    }.    zBuf
4380: 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20  [k++] = ']';.   
4390: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
43a0: 66 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20  f(100,&zBuf[k], 
43b0: 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65  encnames[pMem->e
43c0: 6e 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73  nc]);.    k += s
43d0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26  qlite3Strlen30(&
43e0: 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42  zBuf[k]);.    zB
43f0: 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d  uf[k++] = 0;.  }
4400: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  .}.#endif..#ifde
4410: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f  f SQLITE_DEBUG./
4420: 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 76  *.** Print the v
4430: 61 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73 74  alue of a regist
4440: 65 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20 70  er for tracing p
4450: 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74  urposes:.*/.stat
4460: 69 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63 65  ic void memTrace
4470: 50 72 69 6e 74 28 4d 65 6d 20 2a 70 29 7b 0a 20  Print(Mem *p){. 
4480: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
4490: 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 20 29 7b  MEM_Undefined ){
44a0: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 75 6e  .    printf(" un
44b0: 64 65 66 69 6e 65 64 22 29 3b 0a 20 20 7d 65 6c  defined");.  }el
44c0: 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20  se if( p->flags 
44d0: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
44e0: 20 20 70 72 69 6e 74 66 28 70 2d 3e 66 6c 61 67    printf(p->flag
44f0: 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 3f 20 22  s & MEM_Zero ? "
4500: 20 4e 55 4c 4c 2d 6e 6f 63 68 6e 67 22 20 3a 20   NULL-nochng" : 
4510: 22 20 4e 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c 73  " NULL");.  }els
4520: 65 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73 20  e if( (p->flags 
4530: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53  & (MEM_Int|MEM_S
4540: 74 72 29 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c 4d  tr))==(MEM_Int|M
4550: 45 4d 5f 53 74 72 29 20 29 7b 0a 20 20 20 20 70  EM_Str) ){.    p
4560: 72 69 6e 74 66 28 22 20 73 69 3a 25 6c 6c 64 22  rintf(" si:%lld"
4570: 2c 20 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c  , p->u.i);.  }el
4580: 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20  se if( p->flags 
4590: 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20  & MEM_Int ){.   
45a0: 20 70 72 69 6e 74 66 28 22 20 69 3a 25 6c 6c 64   printf(" i:%lld
45b0: 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 23 69 66 6e  ", p->u.i);.#ifn
45c0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
45d0: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20  FLOATING_POINT. 
45e0: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
45f0: 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29  ags & MEM_Real )
4600: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 72  {.    printf(" r
4610: 3a 25 67 22 2c 20 70 2d 3e 75 2e 72 29 3b 0a 23  :%g", p->u.r);.#
4620: 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65 20 69 66  endif.  }else if
4630: 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
4640: 49 73 52 6f 77 53 65 74 28 70 29 20 29 7b 0a 20  IsRowSet(p) ){. 
4650: 20 20 20 70 72 69 6e 74 66 28 22 20 28 72 6f 77     printf(" (row
4660: 73 65 74 29 22 29 3b 0a 20 20 7d 65 6c 73 65 7b  set)");.  }else{
4670: 0a 20 20 20 20 63 68 61 72 20 7a 42 75 66 5b 32  .    char zBuf[2
4680: 30 30 5d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  00];.    sqlite3
4690: 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69  VdbeMemPrettyPri
46a0: 6e 74 28 70 2c 20 7a 42 75 66 29 3b 0a 20 20 20  nt(p, zBuf);.   
46b0: 20 70 72 69 6e 74 66 28 22 20 25 73 22 2c 20 7a   printf(" %s", z
46c0: 42 75 66 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  Buf);.  }.  if( 
46d0: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53  p->flags & MEM_S
46e0: 75 62 74 79 70 65 20 29 20 70 72 69 6e 74 66 28  ubtype ) printf(
46f0: 22 20 73 75 62 74 79 70 65 3d 30 78 25 30 32 78  " subtype=0x%02x
4700: 22 2c 20 70 2d 3e 65 53 75 62 74 79 70 65 29 3b  ", p->eSubtype);
4710: 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72  .}.static void r
4720: 65 67 69 73 74 65 72 54 72 61 63 65 28 69 6e 74  egisterTrace(int
4730: 20 69 52 65 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a   iReg, Mem *p){.
4740: 20 20 70 72 69 6e 74 66 28 22 52 45 47 5b 25 64    printf("REG[%d
4750: 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b 0a 20 20  ] = ", iReg);.  
4760: 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28 70 29  memTracePrint(p)
4770: 3b 0a 20 20 70 72 69 6e 74 66 28 22 5c 6e 22 29  ;.  printf("\n")
4780: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43  ;.  sqlite3VdbeC
4790: 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74  heckMemInvariant
47a0: 73 28 70 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  s(p);.}.#endif..
47b0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
47c0: 42 55 47 0a 23 20 20 64 65 66 69 6e 65 20 52 45  BUG.#  define RE
47d0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d  GISTER_TRACE(R,M
47e0: 29 20 69 66 28 64 62 2d 3e 66 6c 61 67 73 26 53  ) if(db->flags&S
47f0: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 29  QLITE_VdbeTrace)
4800: 72 65 67 69 73 74 65 72 54 72 61 63 65 28 52 2c  registerTrace(R,
4810: 4d 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  M).#else.#  defi
4820: 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  ne REGISTER_TRAC
4830: 45 28 52 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 0a  E(R,M).#endif...
4840: 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46  #ifdef VDBE_PROF
4850: 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77 74 69  ILE../* .** hwti
4860: 6d 65 2e 68 20 63 6f 6e 74 61 69 6e 73 20 69 6e  me.h contains in
4870: 6c 69 6e 65 20 61 73 73 65 6d 62 6c 65 72 20 63  line assembler c
4880: 6f 64 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e  ode for implemen
4890: 74 69 6e 67 20 0a 2a 2a 20 68 69 67 68 2d 70 65  ting .** high-pe
48a0: 72 66 6f 72 6d 61 6e 63 65 20 74 69 6d 69 6e 67  rformance timing
48b0: 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23 69   routines..*/.#i
48c0: 6e 63 6c 75 64 65 20 22 68 77 74 69 6d 65 2e 68  nclude "hwtime.h
48d0: 22 0a 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  "..#endif..#ifnd
48e0: 65 66 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20  ef NDEBUG./*.** 
48f0: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73  This function is
4900: 20 6f 6e 6c 79 20 63 61 6c 6c 65 64 20 66 72 6f   only called fro
4910: 6d 20 77 69 74 68 69 6e 20 61 6e 20 61 73 73 65  m within an asse
4920: 72 74 28 29 20 65 78 70 72 65 73 73 69 6f 6e 2e  rt() expression.
4930: 20 49 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74 68   It.** checks th
4940: 61 74 20 74 68 65 20 73 71 6c 69 74 65 33 2e 6e  at the sqlite3.n
4950: 54 72 61 6e 73 61 63 74 69 6f 6e 20 76 61 72 69  Transaction vari
4960: 61 62 6c 65 20 69 73 20 63 6f 72 72 65 63 74 6c  able is correctl
4970: 79 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20  y set to.** the 
4980: 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72  number of non-tr
4990: 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f  ansaction savepo
49a0: 69 6e 74 73 20 63 75 72 72 65 6e 74 6c 79 20 69  ints currently i
49b0: 6e 20 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b 65 64  n the .** linked
49c0: 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20 61   list starting a
49d0: 74 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70  t sqlite3.pSavep
49e0: 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55 73 61  oint..** .** Usa
49f0: 67 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73  ge:.**.**     as
4a00: 73 65 72 74 28 20 63 68 65 63 6b 53 61 76 65 70  sert( checkSavep
4a10: 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b  ointCount(db) );
4a20: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63  .*/.static int c
4a30: 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75  heckSavepointCou
4a40: 6e 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b  nt(sqlite3 *db){
4a50: 0a 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20 20  .  int n = 0;.  
4a60: 53 61 76 65 70 6f 69 6e 74 20 2a 70 3b 0a 20 20  Savepoint *p;.  
4a70: 66 6f 72 28 70 3d 64 62 2d 3e 70 53 61 76 65 70  for(p=db->pSavep
4a80: 6f 69 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e 70 4e  oint; p; p=p->pN
4a90: 65 78 74 29 20 6e 2b 2b 3b 0a 20 20 61 73 73 65  ext) n++;.  asse
4aa0: 72 74 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53 61 76  rt( n==(db->nSav
4ab0: 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 69 73 54  epoint + db->isT
4ac0: 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
4ad0: 69 6e 74 29 20 29 3b 0a 20 20 72 65 74 75 72 6e  int) );.  return
4ae0: 20 31 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a   1;.}.#endif../*
4af0: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 72  .** Return the r
4b00: 65 67 69 73 74 65 72 20 6f 66 20 70 4f 70 2d 3e  egister of pOp->
4b10: 70 32 20 61 66 74 65 72 20 66 69 72 73 74 20 70  p2 after first p
4b20: 72 65 70 61 72 69 6e 67 20 69 74 20 74 6f 20 62  reparing it to b
4b30: 65 0a 2a 2a 20 6f 76 65 72 77 72 69 74 74 65 6e  e.** overwritten
4b40: 20 77 69 74 68 20 61 6e 20 69 6e 74 65 67 65 72   with an integer
4b50: 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69   value..*/.stati
4b60: 63 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e  c SQLITE_NOINLIN
4b70: 45 20 4d 65 6d 20 2a 6f 75 74 32 50 72 65 72 65  E Mem *out2Prere
4b80: 6c 65 61 73 65 57 69 74 68 43 6c 65 61 72 28 4d  leaseWithClear(M
4b90: 65 6d 20 2a 70 4f 75 74 29 7b 0a 20 20 73 71 6c  em *pOut){.  sql
4ba0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
4bb0: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 70 4f 75 74  ll(pOut);.  pOut
4bc0: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
4bd0: 74 3b 0a 20 20 72 65 74 75 72 6e 20 70 4f 75 74  t;.  return pOut
4be0: 3b 0a 7d 0a 73 74 61 74 69 63 20 4d 65 6d 20 2a  ;.}.static Mem *
4bf0: 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 56  out2Prerelease(V
4c00: 64 62 65 20 2a 70 2c 20 56 64 62 65 4f 70 20 2a  dbe *p, VdbeOp *
4c10: 70 4f 70 29 7b 0a 20 20 4d 65 6d 20 2a 70 4f 75  pOp){.  Mem *pOu
4c20: 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  t;.  assert( pOp
4c30: 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65  ->p2>0 );.  asse
4c40: 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d  rt( pOp->p2<=(p-
4c50: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
4c60: 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 20  rsor) );.  pOut 
4c70: 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
4c80: 70 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p2];.  memAboutT
4c90: 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
4ca0: 3b 0a 20 20 69 66 28 20 56 64 62 65 4d 65 6d 44  ;.  if( VdbeMemD
4cb0: 79 6e 61 6d 69 63 28 70 4f 75 74 29 20 29 7b 20  ynamic(pOut) ){ 
4cc0: 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49  /*OPTIMIZATION-I
4cd0: 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 72 65  F-FALSE*/.    re
4ce0: 74 75 72 6e 20 6f 75 74 32 50 72 65 72 65 6c 65  turn out2Prerele
4cf0: 61 73 65 57 69 74 68 43 6c 65 61 72 28 70 4f 75  aseWithClear(pOu
4d00: 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  t);.  }else{.   
4d10: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
4d20: 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 72 65 74 75  EM_Int;.    retu
4d30: 72 6e 20 70 4f 75 74 3b 0a 20 20 7d 0a 7d 0a 0a  rn pOut;.  }.}..
4d40: 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 61  ./*.** Execute a
4d50: 73 20 6d 75 63 68 20 6f 66 20 61 20 56 44 42 45  s much of a VDBE
4d60: 20 70 72 6f 67 72 61 6d 20 61 73 20 77 65 20 63   program as we c
4d70: 61 6e 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 74  an..** This is t
4d80: 68 65 20 63 6f 72 65 20 6f 66 20 73 71 6c 69 74  he core of sqlit
4d90: 65 33 5f 73 74 65 70 28 29 2e 20 20 0a 2a 2f 0a  e3_step().  .*/.
4da0: 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 45  int sqlite3VdbeE
4db0: 78 65 63 28 0a 20 20 56 64 62 65 20 2a 70 20 20  xec(.  Vdbe *p  
4dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4dd0: 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 2a 2f    /* The VDBE */
4de0: 0a 29 7b 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20  .){.  Op *aOp = 
4df0: 70 2d 3e 61 4f 70 3b 20 20 20 20 20 20 20 20 20  p->aOp;         
4e00: 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61   /* Copy of p->a
4e10: 4f 70 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 20  Op */.  Op *pOp 
4e20: 3d 20 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20  = aOp;          
4e30: 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70     /* Current op
4e40: 65 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 20 64  eration */.#if d
4e50: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
4e60: 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  BUG) || defined(
4e70: 56 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a 20 20  VDBE_PROFILE).  
4e80: 4f 70 20 2a 70 4f 72 69 67 4f 70 3b 20 20 20 20  Op *pOrigOp;    
4e90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
4ea0: 6c 75 65 20 6f 66 20 70 4f 70 20 61 74 20 74 68  lue of pOp at th
4eb0: 65 20 74 6f 70 20 6f 66 20 74 68 65 20 6c 6f 6f  e top of the loo
4ec0: 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64  p */.#endif.#ifd
4ed0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
4ee0: 20 20 69 6e 74 20 6e 45 78 74 72 61 44 65 6c 65    int nExtraDele
4ef0: 74 65 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20  te = 0;      /* 
4f00: 56 65 72 69 66 69 65 73 20 46 4f 52 44 45 4c 45  Verifies FORDELE
4f10: 54 45 20 61 6e 64 20 41 55 58 44 45 4c 45 54 45  TE and AUXDELETE
4f20: 20 66 6c 61 67 73 20 2a 2f 0a 23 65 6e 64 69 66   flags */.#endif
4f30: 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49  .  int rc = SQLI
4f40: 54 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20 2f 2a  TE_OK;        /*
4f50: 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e   Value to return
4f60: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64   */.  sqlite3 *d
4f70: 62 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20 20 20  b = p->db;      
4f80: 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
4f90: 20 2a 2f 0a 20 20 75 38 20 72 65 73 65 74 53 63   */.  u8 resetSc
4fa0: 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 30 3b  hemaOnFault = 0;
4fb0: 20 2f 2a 20 52 65 73 65 74 20 73 63 68 65 6d 61   /* Reset schema
4fc0: 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20   after an error 
4fd0: 69 66 20 70 6f 73 69 74 69 76 65 20 2a 2f 0a 20  if positive */. 
4fe0: 20 75 38 20 65 6e 63 6f 64 69 6e 67 20 3d 20 45   u8 encoding = E
4ff0: 4e 43 28 64 62 29 3b 20 20 20 20 20 2f 2a 20 54  NC(db);     /* T
5000: 68 65 20 64 61 74 61 62 61 73 65 20 65 6e 63 6f  he database enco
5010: 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 43  ding */.  int iC
5020: 6f 6d 70 61 72 65 20 3d 20 30 3b 20 20 20 20 20  ompare = 0;     
5030: 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f       /* Result o
5040: 66 20 6c 61 73 74 20 63 6f 6d 70 61 72 69 73 6f  f last compariso
5050: 6e 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  n */.  unsigned 
5060: 6e 56 6d 53 74 65 70 20 3d 20 30 3b 20 20 20 20  nVmStep = 0;    
5070: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76    /* Number of v
5080: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 73  irtual machine s
5090: 74 65 70 73 20 2a 2f 0a 23 69 66 6e 64 65 66 20  teps */.#ifndef 
50a0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47  SQLITE_OMIT_PROG
50b0: 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20  RESS_CALLBACK.  
50c0: 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65  unsigned nProgre
50d0: 73 73 4c 69 6d 69 74 3b 20 20 20 2f 2a 20 49 6e  ssLimit;   /* In
50e0: 76 6f 6b 65 20 78 50 72 6f 67 72 65 73 73 28 29  voke xProgress()
50f0: 20 77 68 65 6e 20 6e 56 6d 53 74 65 70 20 72 65   when nVmStep re
5100: 61 63 68 65 73 20 74 68 69 73 20 2a 2f 0a 23 65  aches this */.#e
5110: 6e 64 69 66 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d  ndif.  Mem *aMem
5120: 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20 20 20 20 20   = p->aMem;     
5130: 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e    /* Copy of p->
5140: 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  aMem */.  Mem *p
5150: 49 6e 31 20 3d 20 30 3b 20 20 20 20 20 20 20 20  In1 = 0;        
5160: 20 20 20 20 20 2f 2a 20 31 73 74 20 69 6e 70 75       /* 1st inpu
5170: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d  t operand */.  M
5180: 65 6d 20 2a 70 49 6e 32 20 3d 20 30 3b 20 20 20  em *pIn2 = 0;   
5190: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 6e 64            /* 2nd
51a0: 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a   input operand *
51b0: 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 33 20 3d 20  /.  Mem *pIn3 = 
51c0: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
51d0: 2a 20 33 72 64 20 69 6e 70 75 74 20 6f 70 65 72  * 3rd input oper
51e0: 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4f  and */.  Mem *pO
51f0: 75 74 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  ut = 0;         
5200: 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 20 6f 70      /* Output op
5210: 65 72 61 6e 64 20 2a 2f 0a 23 69 66 64 65 66 20  erand */.#ifdef 
5220: 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 75  VDBE_PROFILE.  u
5230: 36 34 20 73 74 61 72 74 3b 20 20 20 20 20 20 20  64 start;       
5240: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 50 55            /* CPU
5250: 20 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61 74 20   clock count at 
5260: 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65 20  start of opcode 
5270: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 2a 2a  */.#endif.  /***
5280: 20 49 4e 53 45 52 54 20 53 54 41 43 4b 20 55 4e   INSERT STACK UN
5290: 49 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a 0a 20  ION HERE ***/.. 
52a0: 20 61 73 73 65 72 74 28 20 70 2d 3e 6d 61 67 69   assert( p->magi
52b0: 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55  c==VDBE_MAGIC_RU
52c0: 4e 20 29 3b 20 20 2f 2a 20 73 71 6c 69 74 65 33  N );  /* sqlite3
52d0: 5f 73 74 65 70 28 29 20 76 65 72 69 66 69 65 73  _step() verifies
52e0: 20 74 68 69 73 20 2a 2f 0a 20 20 73 71 6c 69 74   this */.  sqlit
52f0: 65 33 56 64 62 65 45 6e 74 65 72 28 70 29 3b 0a  e3VdbeEnter(p);.
5300: 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c    if( p->rc==SQL
5310: 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20  ITE_NOMEM ){.   
5320: 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73   /* This happens
5330: 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 69   if a malloc() i
5340: 6e 73 69 64 65 20 61 20 63 61 6c 6c 20 74 6f 20  nside a call to 
5350: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
5360: 65 78 74 28 29 20 6f 72 0a 20 20 20 20 2a 2a 20  ext() or.    ** 
5370: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
5380: 65 78 74 31 36 28 29 20 66 61 69 6c 65 64 2e 20  ext16() failed. 
5390: 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f   */.    goto no_
53a0: 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  mem;.  }.  asser
53b0: 74 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45  t( p->rc==SQLITE
53c0: 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63 26 30 78  _OK || (p->rc&0x
53d0: 66 66 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59  ff)==SQLITE_BUSY
53e0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
53f0: 3e 62 49 73 52 65 61 64 65 72 20 7c 7c 20 70 2d  >bIsReader || p-
5400: 3e 72 65 61 64 4f 6e 6c 79 21 3d 30 20 29 3b 0a  >readOnly!=0 );.
5410: 20 20 70 2d 3e 69 43 75 72 72 65 6e 74 54 69 6d    p->iCurrentTim
5420: 65 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  e = 0;.  assert(
5430: 20 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30 20 29   p->explain==0 )
5440: 3b 0a 20 20 70 2d 3e 70 52 65 73 75 6c 74 53 65  ;.  p->pResultSe
5450: 74 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73  t = 0;.  db->bus
5460: 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d  yHandler.nBusy =
5470: 20 30 3b 0a 20 20 69 66 28 20 64 62 2d 3e 75 31   0;.  if( db->u1
5480: 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29  .isInterrupted )
5490: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
54a0: 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20  to_interrupt;.  
54b0: 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61  sqlite3VdbeIOTra
54c0: 63 65 53 71 6c 28 70 29 3b 0a 23 69 66 6e 64 65  ceSql(p);.#ifnde
54d0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
54e0: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
54f0: 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72    if( db->xProgr
5500: 65 73 73 20 29 7b 0a 20 20 20 20 75 33 32 20 69  ess ){.    u32 i
5510: 50 72 69 6f 72 20 3d 20 70 2d 3e 61 43 6f 75 6e  Prior = p->aCoun
5520: 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53  ter[SQLITE_STMTS
5530: 54 41 54 55 53 5f 56 4d 5f 53 54 45 50 5d 3b 0a  TATUS_VM_STEP];.
5540: 20 20 20 20 61 73 73 65 72 74 28 20 30 20 3c 20      assert( 0 < 
5550: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
5560: 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73   );.    nProgres
5570: 73 4c 69 6d 69 74 20 3d 20 64 62 2d 3e 6e 50 72  sLimit = db->nPr
5580: 6f 67 72 65 73 73 4f 70 73 20 2d 20 28 69 50 72  ogressOps - (iPr
5590: 69 6f 72 20 25 20 64 62 2d 3e 6e 50 72 6f 67 72  ior % db->nProgr
55a0: 65 73 73 4f 70 73 29 3b 0a 20 20 7d 65 6c 73 65  essOps);.  }else
55b0: 7b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c  {.    nProgressL
55c0: 69 6d 69 74 20 3d 20 30 78 66 66 66 66 66 66 66  imit = 0xfffffff
55d0: 66 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69  f;.  }.#endif.#i
55e0: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
55f0: 47 0a 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e  G.  sqlite3Begin
5600: 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a  BenignMalloc();.
5610: 20 20 69 66 28 20 70 2d 3e 70 63 3d 3d 30 0a 20    if( p->pc==0. 
5620: 20 20 26 26 20 28 70 2d 3e 64 62 2d 3e 66 6c 61    && (p->db->fla
5630: 67 73 20 26 20 28 53 51 4c 49 54 45 5f 56 64 62  gs & (SQLITE_Vdb
5640: 65 4c 69 73 74 69 6e 67 7c 53 51 4c 49 54 45 5f  eListing|SQLITE_
5650: 56 64 62 65 45 51 50 7c 53 51 4c 49 54 45 5f 56  VdbeEQP|SQLITE_V
5660: 64 62 65 54 72 61 63 65 29 29 21 3d 30 0a 20 20  dbeTrace))!=0.  
5670: 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  ){.    int i;.  
5680: 20 20 69 6e 74 20 6f 6e 63 65 20 3d 20 31 3b 0a    int once = 1;.
5690: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
56a0: 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20 20  rintSql(p);.    
56b0: 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73  if( p->db->flags
56c0: 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69   & SQLITE_VdbeLi
56d0: 73 74 69 6e 67 20 29 7b 0a 20 20 20 20 20 20 70  sting ){.      p
56e0: 72 69 6e 74 66 28 22 56 44 42 45 20 50 72 6f 67  rintf("VDBE Prog
56f0: 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e 22 29  ram Listing:\n")
5700: 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b  ;.      for(i=0;
5710: 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b   i<p->nOp; i++){
5720: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
5730: 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f  VdbePrintOp(stdo
5740: 75 74 2c 20 69 2c 20 26 61 4f 70 5b 69 5d 29 3b  ut, i, &aOp[i]);
5750: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
5760: 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c     if( p->db->fl
5770: 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62  ags & SQLITE_Vdb
5780: 65 45 51 50 20 29 7b 0a 20 20 20 20 20 20 66 6f  eEQP ){.      fo
5790: 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b  r(i=0; i<p->nOp;
57a0: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69   i++){.        i
57b0: 66 28 20 61 4f 70 5b 69 5d 2e 6f 70 63 6f 64 65  f( aOp[i].opcode
57c0: 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29 7b 0a  ==OP_Explain ){.
57d0: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6f 6e            if( on
57e0: 63 65 20 29 20 70 72 69 6e 74 66 28 22 56 44 42  ce ) printf("VDB
57f0: 45 20 51 75 65 72 79 20 50 6c 61 6e 3a 5c 6e 22  E Query Plan:\n"
5800: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 72 69  );.          pri
5810: 6e 74 66 28 22 25 73 5c 6e 22 2c 20 61 4f 70 5b  ntf("%s\n", aOp[
5820: 69 5d 2e 70 34 2e 7a 29 3b 0a 20 20 20 20 20 20  i].p4.z);.      
5830: 20 20 20 20 6f 6e 63 65 20 3d 20 30 3b 0a 20 20      once = 0;.  
5840: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
5850: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d      }.    if( p-
5860: 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  >db->flags & SQL
5870: 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 29 20  ITE_VdbeTrace ) 
5880: 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 54 72   printf("VDBE Tr
5890: 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 7d 0a 20 20  ace:\n");.  }.  
58a0: 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e  sqlite3EndBenign
58b0: 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64 69 66  Malloc();.#endif
58c0: 0a 20 20 66 6f 72 28 70 4f 70 3d 26 61 4f 70 5b  .  for(pOp=&aOp[
58d0: 70 2d 3e 70 63 5d 3b 20 31 3b 20 70 4f 70 2b 2b  p->pc]; 1; pOp++
58e0: 29 7b 0a 20 20 20 20 2f 2a 20 45 72 72 6f 72 73  ){.    /* Errors
58f0: 20 61 72 65 20 64 65 74 65 63 74 65 64 20 62 79   are detected by
5900: 20 69 6e 64 69 76 69 64 75 61 6c 20 6f 70 63 6f   individual opco
5910: 64 65 73 2c 20 77 69 74 68 20 61 6e 20 69 6d 6d  des, with an imm
5920: 65 64 69 61 74 65 0a 20 20 20 20 2a 2a 20 6a 75  ediate.    ** ju
5930: 6d 70 73 20 74 6f 20 61 62 6f 72 74 5f 64 75 65  mps to abort_due
5940: 5f 74 6f 5f 65 72 72 6f 72 2e 20 2a 2f 0a 20 20  _to_error. */.  
5950: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
5960: 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20 20 20  LITE_OK );..    
5970: 61 73 73 65 72 74 28 20 70 4f 70 3e 3d 61 4f 70  assert( pOp>=aOp
5980: 20 26 26 20 70 4f 70 3c 26 61 4f 70 5b 70 2d 3e   && pOp<&aOp[p->
5990: 6e 4f 70 5d 29 3b 0a 23 69 66 64 65 66 20 56 44  nOp]);.#ifdef VD
59a0: 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 73  BE_PROFILE.    s
59b0: 74 61 72 74 20 3d 20 73 71 6c 69 74 65 33 4e 50  tart = sqlite3NP
59c0: 72 6f 66 69 6c 65 43 6e 74 20 3f 20 73 71 6c 69  rofileCnt ? sqli
59d0: 74 65 33 4e 50 72 6f 66 69 6c 65 43 6e 74 20 3a  te3NProfileCnt :
59e0: 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29   sqlite3Hwtime()
59f0: 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 6e 56 6d  ;.#endif.    nVm
5a00: 53 74 65 70 2b 2b 3b 0a 23 69 66 64 65 66 20 53  Step++;.#ifdef S
5a10: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d  QLITE_ENABLE_STM
5a20: 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20 20  T_SCANSTATUS.   
5a30: 20 69 66 28 20 70 2d 3e 61 6e 45 78 65 63 20 29   if( p->anExec )
5a40: 20 70 2d 3e 61 6e 45 78 65 63 5b 28 69 6e 74 29   p->anExec[(int)
5a50: 28 70 4f 70 2d 61 4f 70 29 5d 2b 2b 3b 0a 23 65  (pOp-aOp)]++;.#e
5a60: 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c  ndif..    /* Onl
5a70: 79 20 61 6c 6c 6f 77 20 74 72 61 63 69 6e 67 20  y allow tracing 
5a80: 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  if SQLITE_DEBUG 
5a90: 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20  is defined..    
5aa0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
5ab0: 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 64  _DEBUG.    if( d
5ac0: 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
5ad0: 45 5f 56 64 62 65 54 72 61 63 65 20 29 7b 0a 20  E_VdbeTrace ){. 
5ae0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
5af0: 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20  PrintOp(stdout, 
5b00: 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
5b10: 2c 20 70 4f 70 29 3b 0a 20 20 20 20 7d 0a 23 65  , pOp);.    }.#e
5b20: 6e 64 69 66 0a 20 20 20 20 20 20 0a 0a 20 20 20  ndif.      ..   
5b30: 20 2f 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65   /* Check to see
5b40: 20 69 66 20 77 65 20 6e 65 65 64 20 74 6f 20 73   if we need to s
5b50: 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e 74 65 72  imulate an inter
5b60: 72 75 70 74 2e 20 20 54 68 69 73 20 6f 6e 6c 79  rupt.  This only
5b70: 20 68 61 70 70 65 6e 73 0a 20 20 20 20 2a 2a 20   happens.    ** 
5b80: 69 66 20 77 65 20 68 61 76 65 20 61 20 73 70 65  if we have a spe
5b90: 63 69 61 6c 20 74 65 73 74 20 62 75 69 6c 64 2e  cial test build.
5ba0: 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53  .    */.#ifdef S
5bb0: 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 69  QLITE_TEST.    i
5bc0: 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  f( sqlite3_inter
5bd0: 72 75 70 74 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a  rupt_count>0 ){.
5be0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e        sqlite3_in
5bf0: 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b  terrupt_count--;
5c00: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
5c10: 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75  e3_interrupt_cou
5c20: 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  nt==0 ){.       
5c30: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
5c40: 70 74 28 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a  pt(db);.      }.
5c50: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20      }.#endif..  
5c60: 20 20 2f 2a 20 53 61 6e 69 74 79 20 63 68 65 63    /* Sanity chec
5c70: 6b 69 6e 67 20 6f 6e 20 6f 74 68 65 72 20 6f 70  king on other op
5c80: 65 72 61 6e 64 73 20 2a 2f 0a 23 69 66 64 65 66  erands */.#ifdef
5c90: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
5ca0: 20 20 7b 0a 20 20 20 20 20 20 75 38 20 6f 70 50    {.      u8 opP
5cb0: 72 6f 70 65 72 74 79 20 3d 20 73 71 6c 69 74 65  roperty = sqlite
5cc0: 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b  3OpcodeProperty[
5cd0: 70 4f 70 2d 3e 6f 70 63 6f 64 65 5d 3b 0a 20 20  pOp->opcode];.  
5ce0: 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65      if( (opPrope
5cf0: 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29  rty & OPFLG_IN1)
5d00: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  !=0 ){.        a
5d10: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
5d20: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
5d30: 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d  rt( pOp->p1<=(p-
5d40: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
5d50: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20  rsor) );.       
5d60: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
5d70: 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  lid(&aMem[pOp->p
5d80: 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  1]) );.        a
5d90: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64  ssert( sqlite3Vd
5da0: 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69  beCheckMemInvari
5db0: 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ants(&aMem[pOp->
5dc0: 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20  p1]) );.        
5dd0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
5de0: 4f 70 2d 3e 70 31 2c 20 26 61 4d 65 6d 5b 70 4f  Op->p1, &aMem[pO
5df0: 70 2d 3e 70 31 5d 29 3b 0a 20 20 20 20 20 20 7d  p->p1]);.      }
5e00: 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70 50 72  .      if( (opPr
5e10: 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49  operty & OPFLG_I
5e20: 4e 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  N2)!=0 ){.      
5e30: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5e40: 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61  2>0 );.        a
5e50: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d  ssert( pOp->p2<=
5e60: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
5e70: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
5e80: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
5e90: 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70  sValid(&aMem[pOp
5ea0: 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p2]) );.      
5eb0: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
5ec0: 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76  3VdbeCheckMemInv
5ed0: 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f  ariants(&aMem[pO
5ee0: 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20  p->p2]) );.     
5ef0: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
5f00: 45 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d  E(pOp->p2, &aMem
5f10: 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20  [pOp->p2]);.    
5f20: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 6f    }.      if( (o
5f30: 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c  pProperty & OPFL
5f40: 47 5f 49 4e 33 29 21 3d 30 20 29 7b 0a 20 20 20  G_IN3)!=0 ){.   
5f50: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5f60: 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p3>0 );.      
5f70: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5f80: 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  3<=(p->nMem+1 - 
5f90: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
5fa0: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d         assert( m
5fb0: 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
5fc0: 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20  pOp->p3]) );.   
5fd0: 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
5fe0: 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d  ite3VdbeCheckMem
5ff0: 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d  Invariants(&aMem
6000: 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20  [pOp->p3]) );.  
6010: 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
6020: 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26 61  RACE(pOp->p3, &a
6030: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20  Mem[pOp->p3]);. 
6040: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
6050: 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f   (opProperty & O
6060: 50 46 4c 47 5f 4f 55 54 32 29 21 3d 30 20 29 7b  PFLG_OUT2)!=0 ){
6070: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
6080: 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
6090: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
60a0: 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p2<=(p->nMem+
60b0: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
60c0: 29 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41 62  );.        memAb
60d0: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26  outToChange(p, &
60e0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a  aMem[pOp->p2]);.
60f0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
6100: 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20  ( (opProperty & 
6110: 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d 30 20 29  OPFLG_OUT3)!=0 )
6120: 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
6130: 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20  ( pOp->p3>0 );. 
6140: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
6150: 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
6160: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
6170: 20 29 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41   );.        memA
6180: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
6190: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b  &aMem[pOp->p3]);
61a0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23  .      }.    }.#
61b0: 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
61c0: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
61d0: 7c 7c 20 64 65 66 69 6e 65 64 28 56 44 42 45 5f  || defined(VDBE_
61e0: 50 52 4f 46 49 4c 45 29 0a 20 20 20 20 70 4f 72  PROFILE).    pOr
61f0: 69 67 4f 70 20 3d 20 70 4f 70 3b 0a 23 65 6e 64  igOp = pOp;.#end
6200: 69 66 0a 20 20 0a 20 20 20 20 73 77 69 74 63 68  if.  .    switch
6210: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
6220: 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ../*************
6230: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6240: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6250: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6260: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6270: 0a 2a 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77 73  .** What follows
6280: 20 69 73 20 61 20 6d 61 73 73 69 76 65 20 73 77   is a massive sw
6290: 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77  itch statement w
62a0: 68 65 72 65 20 65 61 63 68 20 63 61 73 65 20 69  here each case i
62b0: 6d 70 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20 73  mplements a.** s
62c0: 65 70 61 72 61 74 65 20 69 6e 73 74 72 75 63 74  eparate instruct
62d0: 69 6f 6e 20 69 6e 20 74 68 65 20 76 69 72 74 75  ion in the virtu
62e0: 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 66 20  al machine.  If 
62f0: 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75 73  we follow the us
6300: 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74 69  ual.** indentati
6310: 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20  on conventions, 
6320: 65 61 63 68 20 63 61 73 65 20 73 68 6f 75 6c 64  each case should
6330: 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62 79 20   be indented by 
6340: 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 0a 2a  6 spaces.  But.*
6350: 2a 20 74 68 61 74 20 69 73 20 61 20 6c 6f 74 20  * that is a lot 
6360: 6f 66 20 77 61 73 74 65 64 20 73 70 61 63 65 20  of wasted space 
6370: 6f 6e 20 74 68 65 20 6c 65 66 74 20 6d 61 72 67  on the left marg
6380: 69 6e 2e 20 20 53 6f 20 74 68 65 20 63 6f 64 65  in.  So the code
6390: 20 77 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20 73   within.** the s
63a0: 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20  witch statement 
63b0: 77 69 6c 6c 20 62 72 65 61 6b 20 77 69 74 68 20  will break with 
63c0: 63 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20 62  convention and b
63d0: 65 20 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41 6e  e flush-left. An
63e0: 6f 74 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f 6d  other.** big com
63f0: 6d 65 6e 74 20 28 73 69 6d 69 6c 61 72 20 74 6f  ment (similar to
6400: 20 74 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c 20   this one) will 
6410: 6d 61 72 6b 20 74 68 65 20 70 6f 69 6e 74 20 69  mark the point i
6420: 6e 20 74 68 65 20 63 6f 64 65 20 77 68 65 72 65  n the code where
6430: 0a 2a 2a 20 77 65 20 74 72 61 6e 73 69 74 69 6f  .** we transitio
6440: 6e 20 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c  n back to normal
6450: 20 69 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a   indentation..**
6460: 0a 2a 2a 20 54 68 65 20 66 6f 72 6d 61 74 74 69  .** The formatti
6470: 6e 67 20 6f 66 20 65 61 63 68 20 63 61 73 65 20  ng of each case 
6480: 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20 54  is important.  T
6490: 68 65 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72 20  he makefile for 
64a0: 53 51 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72 61  SQLite.** genera
64b0: 74 65 73 20 74 77 6f 20 43 20 66 69 6c 65 73 20  tes two C files 
64c0: 22 6f 70 63 6f 64 65 73 2e 68 22 20 61 6e 64 20  "opcodes.h" and 
64d0: 22 6f 70 63 6f 64 65 73 2e 63 22 20 62 79 20 73  "opcodes.c" by s
64e0: 63 61 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a 20  canning this.** 
64f0: 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72  file looking for
6500: 20 6c 69 6e 65 73 20 74 68 61 74 20 62 65 67 69   lines that begi
6510: 6e 20 77 69 74 68 20 22 63 61 73 65 20 4f 50 5f  n with "case OP_
6520: 22 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 73 2e  ".  The opcodes.
6530: 68 20 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20  h files.** will 
6540: 62 65 20 66 69 6c 6c 65 64 20 77 69 74 68 20 23  be filled with #
6550: 64 65 66 69 6e 65 73 20 74 68 61 74 20 67 69 76  defines that giv
6560: 65 20 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72  e unique integer
6570: 20 76 61 6c 75 65 73 20 74 6f 20 65 61 63 68 0a   values to each.
6580: 2a 2a 20 6f 70 63 6f 64 65 20 61 6e 64 20 74 68  ** opcode and th
6590: 65 20 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c 65  e opcodes.c file
65a0: 20 69 73 20 66 69 6c 6c 65 64 20 77 69 74 68 20   is filled with 
65b0: 61 6e 20 61 72 72 61 79 20 6f 66 20 73 74 72 69  an array of stri
65c0: 6e 67 73 20 77 68 65 72 65 0a 2a 2a 20 65 61 63  ngs where.** eac
65d0: 68 20 73 74 72 69 6e 67 20 69 73 20 74 68 65 20  h string is the 
65e0: 73 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66 6f  symbolic name fo
65f0: 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  r the correspond
6600: 69 6e 67 20 6f 70 63 6f 64 65 2e 20 20 49 66 20  ing opcode.  If 
6610: 74 68 65 0a 2a 2a 20 63 61 73 65 20 73 74 61 74  the.** case stat
6620: 65 6d 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77 65  ement is followe
6630: 64 20 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20 6f  d by a comment o
6640: 66 20 74 68 65 20 66 6f 72 6d 20 22 2f 23 20 73  f the form "/# s
6650: 61 6d 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a  ame as ... #/".*
6660: 2a 20 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20 69  * that comment i
6670: 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  s used to determ
6680: 69 6e 65 20 74 68 65 20 70 61 72 74 69 63 75 6c  ine the particul
6690: 61 72 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ar value of the 
66a0: 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74  opcode..**.** Ot
66b0: 68 65 72 20 6b 65 79 77 6f 72 64 73 20 69 6e 20  her keywords in 
66c0: 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61 74  the comment that
66d0: 20 66 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63 61   follows each ca
66e0: 73 65 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a  se are used to.*
66f0: 2a 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20  * construct the 
6700: 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45  OPFLG_INITIALIZE
6710: 52 20 76 61 6c 75 65 20 74 68 61 74 20 69 6e 69  R value that ini
6720: 74 69 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65 50  tializes opcodeP
6730: 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65  roperty[]..** Ke
6740: 79 77 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a 20  ywords include: 
6750: 69 6e 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20 6f  in1, in2, in3, o
6760: 75 74 32 2c 20 6f 75 74 33 2e 20 20 53 65 65 0a  ut2, out3.  See.
6770: 2a 2a 20 74 68 65 20 6d 6b 6f 70 63 6f 64 65 68  ** the mkopcodeh
6780: 2e 61 77 6b 20 73 63 72 69 70 74 20 66 6f 72 20  .awk script for 
6790: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
67a0: 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f  mation..**.** Do
67b0: 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62 6f 75  cumentation abou
67c0: 74 20 56 44 42 45 20 6f 70 63 6f 64 65 73 20 69  t VDBE opcodes i
67d0: 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 73  s generated by s
67e0: 63 61 6e 6e 69 6e 67 20 74 68 69 73 20 66 69 6c  canning this fil
67f0: 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65 73 20 6f  e.** for lines o
6800: 66 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 20 22  f that contain "
6810: 4f 70 63 6f 64 65 3a 22 2e 20 20 54 68 61 74 20  Opcode:".  That 
6820: 6c 69 6e 65 20 61 6e 64 20 61 6c 6c 20 73 75 62  line and all sub
6830: 73 65 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65  sequent.** comme
6840: 6e 74 20 6c 69 6e 65 73 20 61 72 65 20 75 73 65  nt lines are use
6850: 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74  d in the generat
6860: 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 63 6f 64  ion of the opcod
6870: 65 2e 68 74 6d 6c 20 64 6f 63 75 6d 65 6e 74 61  e.html documenta
6880: 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a  tion.** file..**
6890: 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a  .** SUMMARY:.**.
68a0: 2a 2a 20 20 20 20 20 46 6f 72 6d 61 74 74 69 6e  **     Formattin
68b0: 67 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74  g is important t
68c0: 6f 20 73 63 72 69 70 74 73 20 74 68 61 74 20 73  o scripts that s
68d0: 63 61 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a  can this file..*
68e0: 2a 20 20 20 20 20 44 6f 20 6e 6f 74 20 64 65 76  *     Do not dev
68f0: 69 61 74 65 20 66 72 6f 6d 20 74 68 65 20 66 6f  iate from the fo
6900: 72 6d 61 74 74 69 6e 67 20 73 74 79 6c 65 20 63  rmatting style c
6910: 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e  urrently in use.
6920: 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .**.************
6930: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6940: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6950: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6960: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6970: 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  */../* Opcode:  
6980: 47 6f 74 6f 20 2a 20 50 32 20 2a 20 2a 20 2a 0a  Goto * P2 * * *.
6990: 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64 69  **.** An uncondi
69a0: 74 69 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f 20 61  tional jump to a
69b0: 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 20 54 68  ddress P2..** Th
69c0: 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
69d0: 6f 6e 20 65 78 65 63 75 74 65 64 20 77 69 6c 6c  on executed will
69e0: 20 62 65 20 0a 2a 2a 20 74 68 65 20 6f 6e 65 20   be .** the one 
69f0: 61 74 20 69 6e 64 65 78 20 50 32 20 66 72 6f 6d  at index P2 from
6a00: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
6a10: 66 0a 2a 2a 20 74 68 65 20 70 72 6f 67 72 61 6d  f.** the program
6a20: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 70  ..**.** The P1 p
6a30: 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20  arameter is not 
6a40: 61 63 74 75 61 6c 6c 79 20 75 73 65 64 20 62 79  actually used by
6a50: 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 48   this opcode.  H
6a60: 6f 77 65 76 65 72 2c 20 69 74 0a 2a 2a 20 69 73  owever, it.** is
6a70: 20 73 6f 6d 65 74 69 6d 65 73 20 73 65 74 20 74   sometimes set t
6a80: 6f 20 31 20 69 6e 73 74 65 61 64 20 6f 66 20 30  o 1 instead of 0
6a90: 20 61 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68   as a hint to th
6aa0: 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73  e command-line s
6ab0: 68 65 6c 6c 0a 2a 2a 20 74 68 61 74 20 74 68 69  hell.** that thi
6ac0: 73 20 47 6f 74 6f 20 69 73 20 74 68 65 20 62 6f  s Goto is the bo
6ad0: 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 61  ttom of a loop a
6ae0: 6e 64 20 74 68 61 74 20 74 68 65 20 6c 69 6e 65  nd that the line
6af0: 73 20 66 72 6f 6d 20 50 32 20 64 6f 77 6e 0a 2a  s from P2 down.*
6b00: 2a 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74  * to the current
6b10: 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 62 65 20   line should be 
6b20: 69 6e 64 65 6e 74 65 64 20 66 6f 72 20 45 58 50  indented for EXP
6b30: 4c 41 49 4e 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a  LAIN output..*/.
6b40: 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20  case OP_Goto: { 
6b50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
6b60: 75 6d 70 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70  ump */.jump_to_p
6b70: 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f  2_and_check_for_
6b80: 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 70 4f 70  interrupt:.  pOp
6b90: 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20   = &aOp[pOp->p2 
6ba0: 2d 20 31 5d 3b 0a 0a 20 20 2f 2a 20 4f 70 63 6f  - 1];..  /* Opco
6bb0: 64 65 73 20 74 68 61 74 20 61 72 65 20 75 73 65  des that are use
6bc0: 64 20 61 73 20 74 68 65 20 62 6f 74 74 6f 6d 20  d as the bottom 
6bd0: 6f 66 20 61 20 6c 6f 6f 70 20 28 4f 50 5f 4e 65  of a loop (OP_Ne
6be0: 78 74 2c 20 4f 50 5f 50 72 65 76 2c 0a 20 20 2a  xt, OP_Prev,.  *
6bf0: 2a 20 4f 50 5f 56 4e 65 78 74 2c 20 6f 72 20 4f  * OP_VNext, or O
6c00: 50 5f 53 6f 72 74 65 72 4e 65 78 74 29 20 61 6c  P_SorterNext) al
6c10: 6c 20 6a 75 6d 70 20 68 65 72 65 20 75 70 6f 6e  l jump here upon
6c20: 0a 20 20 2a 2a 20 63 6f 6d 70 6c 65 74 69 6f 6e  .  ** completion
6c30: 2e 20 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20  .  Check to see 
6c40: 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  if sqlite3_inter
6c50: 72 75 70 74 28 29 20 68 61 73 20 62 65 65 6e 20  rupt() has been 
6c60: 63 61 6c 6c 65 64 0a 20 20 2a 2a 20 6f 72 20 69  called.  ** or i
6c70: 66 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  f the progress c
6c80: 61 6c 6c 62 61 63 6b 20 6e 65 65 64 73 20 74 6f  allback needs to
6c90: 20 62 65 20 69 6e 76 6f 6b 65 64 2e 20 0a 20 20   be invoked. .  
6ca0: 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 63 6f 64  **.  ** This cod
6cb0: 65 20 75 73 65 73 20 75 6e 73 74 72 75 63 74 75  e uses unstructu
6cc0: 72 65 64 20 22 67 6f 74 6f 22 20 73 74 61 74 65  red "goto" state
6cd0: 6d 65 6e 74 73 20 61 6e 64 20 64 6f 65 73 20 6e  ments and does n
6ce0: 6f 74 20 6c 6f 6f 6b 20 63 6c 65 61 6e 2e 0a 20  ot look clean.. 
6cf0: 20 2a 2a 20 42 75 74 20 74 68 61 74 20 69 73 20   ** But that is 
6d00: 6e 6f 74 20 64 75 65 20 74 6f 20 73 6c 6f 70 70  not due to slopp
6d10: 79 20 63 6f 64 69 6e 67 20 68 61 62 69 74 73 2e  y coding habits.
6d20: 20 54 68 65 20 63 6f 64 65 20 69 73 20 77 72 69   The code is wri
6d30: 74 74 65 6e 20 74 68 69 73 0a 20 20 2a 2a 20 77  tten this.  ** w
6d40: 61 79 20 66 6f 72 20 70 65 72 66 6f 72 6d 61 6e  ay for performan
6d50: 63 65 2c 20 74 6f 20 61 76 6f 69 64 20 68 61 76  ce, to avoid hav
6d60: 69 6e 67 20 74 6f 20 72 75 6e 20 74 68 65 20 69  ing to run the i
6d70: 6e 74 65 72 72 75 70 74 20 61 6e 64 20 70 72 6f  nterrupt and pro
6d80: 67 72 65 73 73 0a 20 20 2a 2a 20 63 68 65 63 6b  gress.  ** check
6d90: 73 20 6f 6e 20 65 76 65 72 79 20 6f 70 63 6f 64  s on every opcod
6da0: 65 2e 20 20 54 68 69 73 20 68 65 6c 70 73 20 73  e.  This helps s
6db0: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 74 6f  qlite3_step() to
6dc0: 20 72 75 6e 20 61 62 6f 75 74 20 31 2e 35 25 0a   run about 1.5%.
6dd0: 20 20 2a 2a 20 66 61 73 74 65 72 20 61 63 63 6f    ** faster acco
6de0: 72 64 69 6e 67 20 74 6f 20 22 76 61 6c 67 72 69  rding to "valgri
6df0: 6e 64 20 2d 2d 74 6f 6f 6c 3d 63 61 63 68 65 67  nd --tool=cacheg
6e00: 72 69 6e 64 22 20 2a 2f 0a 63 68 65 63 6b 5f 66  rind" */.check_f
6e10: 6f 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20  or_interrupt:.  
6e20: 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74  if( db->u1.isInt
6e30: 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20  errupted ) goto 
6e40: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74  abort_due_to_int
6e50: 65 72 72 75 70 74 3b 0a 23 69 66 6e 64 65 66 20  errupt;.#ifndef 
6e60: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47  SQLITE_OMIT_PROG
6e70: 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20  RESS_CALLBACK.  
6e80: 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70 72 6f 67  /* Call the prog
6e90: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 69 66  ress callback if
6ea0: 20 69 74 20 69 73 20 63 6f 6e 66 69 67 75 72 65   it is configure
6eb0: 64 20 61 6e 64 20 74 68 65 20 72 65 71 75 69 72  d and the requir
6ec0: 65 64 20 6e 75 6d 62 65 72 0a 20 20 2a 2a 20 6f  ed number.  ** o
6ed0: 66 20 56 44 42 45 20 6f 70 73 20 68 61 76 65 20  f VDBE ops have 
6ee0: 62 65 65 6e 20 65 78 65 63 75 74 65 64 20 28 65  been executed (e
6ef0: 69 74 68 65 72 20 73 69 6e 63 65 20 74 68 69 73  ither since this
6f00: 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a 20   invocation of. 
6f10: 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 45   ** sqlite3VdbeE
6f20: 78 65 63 28 29 20 6f 72 20 73 69 6e 63 65 20 6c  xec() or since l
6f30: 61 73 74 20 74 69 6d 65 20 74 68 65 20 70 72 6f  ast time the pro
6f40: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 77  gress callback w
6f50: 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20 2a 2a  as called)..  **
6f60: 20 49 66 20 74 68 65 20 70 72 6f 67 72 65 73 73   If the progress
6f70: 20 63 61 6c 6c 62 61 63 6b 20 72 65 74 75 72 6e   callback return
6f80: 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69 74  s non-zero, exit
6f90: 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   the virtual mac
6fa0: 68 69 6e 65 20 77 69 74 68 0a 20 20 2a 2a 20 61  hine with.  ** a
6fb0: 20 72 65 74 75 72 6e 20 63 6f 64 65 20 53 51 4c   return code SQL
6fc0: 49 54 45 5f 41 42 4f 52 54 2e 0a 20 20 2a 2f 0a  ITE_ABORT..  */.
6fd0: 20 20 69 66 28 20 6e 56 6d 53 74 65 70 3e 3d 6e    if( nVmStep>=n
6fe0: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 26 26  ProgressLimit &&
6ff0: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d   db->xProgress!=
7000: 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
7010: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
7020: 73 21 3d 30 20 29 3b 0a 20 20 20 20 6e 50 72 6f  s!=0 );.    nPro
7030: 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 6e 56 6d  gressLimit = nVm
7040: 53 74 65 70 20 2b 20 64 62 2d 3e 6e 50 72 6f 67  Step + db->nProg
7050: 72 65 73 73 4f 70 73 20 2d 20 28 6e 56 6d 53 74  ressOps - (nVmSt
7060: 65 70 25 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73  ep%db->nProgress
7070: 4f 70 73 29 3b 0a 20 20 20 20 69 66 28 20 64 62  Ops);.    if( db
7080: 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e  ->xProgress(db->
7090: 70 50 72 6f 67 72 65 73 73 41 72 67 29 20 29 7b  pProgressArg) ){
70a0: 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
70b0: 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  TE_INTERRUPT;.  
70c0: 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
70d0: 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
70e0: 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20   }.  }.#endif.  
70f0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
7100: 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62 20 50  Opcode:  Gosub P
7110: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
7120: 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65   Write the curre
7130: 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74 6f 20  nt address onto 
7140: 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 61  register P1.** a
7150: 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  nd then jump to 
7160: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a 63  address P2..*/.c
7170: 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b 20  ase OP_Gosub: { 
7180: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
7190: 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
71a0: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
71b0: 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p1<=(p->nMem+1
71c0: 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
71d0: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
71e0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
71f0: 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61  ert( VdbeMemDyna
7200: 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20 29 3b 0a  mic(pIn1)==0 );.
7210: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
7220: 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 70  ge(p, pIn1);.  p
7230: 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  In1->flags = MEM
7240: 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e  _Int;.  pIn1->u.
7250: 69 20 3d 20 28 69 6e 74 29 28 70 4f 70 2d 61 4f  i = (int)(pOp-aO
7260: 70 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  p);.  REGISTER_T
7270: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49  RACE(pOp->p1, pI
7280: 6e 31 29 3b 0a 0a 20 20 2f 2a 20 4d 6f 73 74 20  n1);..  /* Most 
7290: 6a 75 6d 70 20 6f 70 65 72 61 74 69 6f 6e 73 20  jump operations 
72a0: 64 6f 20 61 20 67 6f 74 6f 20 74 6f 20 74 68 69  do a goto to thi
72b0: 73 20 73 70 6f 74 20 69 6e 20 6f 72 64 65 72 20  s spot in order 
72c0: 74 6f 20 75 70 64 61 74 65 0a 20 20 2a 2a 20 74  to update.  ** t
72d0: 68 65 20 70 4f 70 20 70 6f 69 6e 74 65 72 2e 20  he pOp pointer. 
72e0: 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32 3a 0a 20  */.jump_to_p2:. 
72f0: 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d   pOp = &aOp[pOp-
7300: 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 62 72 65 61  >p2 - 1];.  brea
7310: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
7320: 20 20 52 65 74 75 72 6e 20 50 31 20 2a 20 2a 20    Return P1 * * 
7330: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
7340: 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
7350: 75 63 74 69 6f 6e 20 61 66 74 65 72 20 74 68 65  uction after the
7360: 20 61 64 64 72 65 73 73 20 69 6e 20 72 65 67 69   address in regi
7370: 73 74 65 72 20 50 31 2e 20 20 41 66 74 65 72 0a  ster P1.  After.
7380: 2a 2a 20 74 68 65 20 6a 75 6d 70 2c 20 72 65 67  ** the jump, reg
7390: 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65 73  ister P1 becomes
73a0: 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 63   undefined..*/.c
73b0: 61 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a 20 7b  ase OP_Return: {
73c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
73d0: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
73e0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
73f0: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
7400: 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a  ags==MEM_Int );.
7410: 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 49 6e    pOp = &aOp[pIn
7420: 31 2d 3e 75 2e 69 5d 3b 0a 20 20 70 49 6e 31 2d  1->u.i];.  pIn1-
7430: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64  >flags = MEM_Und
7440: 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b  efined;.  break;
7450: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
7460: 6e 69 74 43 6f 72 6f 75 74 69 6e 65 20 50 31 20  nitCoroutine P1 
7470: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
7480: 53 65 74 20 75 70 20 72 65 67 69 73 74 65 72 20  Set up register 
7490: 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 77 69  P1 so that it wi
74a0: 6c 6c 20 59 69 65 6c 64 20 74 6f 20 74 68 65 20  ll Yield to the 
74b0: 63 6f 72 6f 75 74 69 6e 65 0a 2a 2a 20 6c 6f 63  coroutine.** loc
74c0: 61 74 65 64 20 61 74 20 61 64 64 72 65 73 73 20  ated at address 
74d0: 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 21  P3..**.** If P2!
74e0: 3d 30 20 74 68 65 6e 20 74 68 65 20 63 6f 72 6f  =0 then the coro
74f0: 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61  utine implementa
7500: 74 69 6f 6e 20 69 6d 6d 65 64 69 61 74 65 6c 79  tion immediately
7510: 20 66 6f 6c 6c 6f 77 73 0a 2a 2a 20 74 68 69 73   follows.** this
7520: 20 6f 70 63 6f 64 65 2e 20 20 53 6f 20 6a 75 6d   opcode.  So jum
7530: 70 20 6f 76 65 72 20 74 68 65 20 63 6f 72 6f 75  p over the corou
7540: 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tine implementat
7550: 69 6f 6e 20 74 6f 0a 2a 2a 20 61 64 64 72 65 73  ion to.** addres
7560: 73 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  s P2..**.** See 
7570: 61 6c 73 6f 3a 20 45 6e 64 43 6f 72 6f 75 74 69  also: EndCorouti
7580: 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  ne.*/.case OP_In
7590: 69 74 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20  itCoroutine: {  
75a0: 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
75b0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
75c0: 30 20 26 26 20 20 70 4f 70 2d 3e 70 31 3c 3d 28  0 &&  pOp->p1<=(
75d0: 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
75e0: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73  Cursor) );.  ass
75f0: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20  ert( pOp->p2>=0 
7600: 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f  && pOp->p2<p->nO
7610: 70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p );.  assert( p
7620: 4f 70 2d 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70  Op->p3>=0 && pOp
7630: 2d 3e 70 33 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20  ->p3<p->nOp );. 
7640: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
7650: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
7660: 28 20 21 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69  ( !VdbeMemDynami
7670: 63 28 70 4f 75 74 29 20 29 3b 0a 20 20 70 4f 75  c(pOut) );.  pOu
7680: 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 33  t->u.i = pOp->p3
7690: 20 2d 20 31 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c   - 1;.  pOut->fl
76a0: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
76b0: 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 29 20 67   if( pOp->p2 ) g
76c0: 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
76d0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
76e0: 70 63 6f 64 65 3a 20 20 45 6e 64 43 6f 72 6f 75  pcode:  EndCorou
76f0: 74 69 6e 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  tine P1 * * * *.
7700: 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 73 74 72 75  **.** The instru
7710: 63 74 69 6f 6e 20 61 74 20 74 68 65 20 61 64 64  ction at the add
7720: 72 65 73 73 20 69 6e 20 72 65 67 69 73 74 65 72  ress in register
7730: 20 50 31 20 69 73 20 61 20 59 69 65 6c 64 2e 0a   P1 is a Yield..
7740: 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 50  ** Jump to the P
7750: 32 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 74  2 parameter of t
7760: 68 61 74 20 59 69 65 6c 64 2e 0a 2a 2a 20 41 66  hat Yield..** Af
7770: 74 65 72 20 74 68 65 20 6a 75 6d 70 2c 20 72 65  ter the jump, re
7780: 67 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65  gister P1 become
7790: 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a  s undefined..**.
77a0: 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69  ** See also: Ini
77b0: 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61  tCoroutine.*/.ca
77c0: 73 65 20 4f 50 5f 45 6e 64 43 6f 72 6f 75 74 69  se OP_EndCorouti
77d0: 6e 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ne: {           
77e0: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 56 64 62 65  /* in1 */.  Vdbe
77f0: 4f 70 20 2a 70 43 61 6c 6c 65 72 3b 0a 20 20 70  Op *pCaller;.  p
7800: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
7810: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
7820: 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d  pIn1->flags==MEM
7830: 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74  _Int );.  assert
7840: 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 3d 30 20 26  ( pIn1->u.i>=0 &
7850: 26 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 2d 3e 6e  & pIn1->u.i<p->n
7860: 4f 70 20 29 3b 0a 20 20 70 43 61 6c 6c 65 72 20  Op );.  pCaller 
7870: 3d 20 26 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69  = &aOp[pIn1->u.i
7880: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 61  ];.  assert( pCa
7890: 6c 6c 65 72 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50  ller->opcode==OP
78a0: 5f 59 69 65 6c 64 20 29 3b 0a 20 20 61 73 73 65  _Yield );.  asse
78b0: 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e 70 32 3e  rt( pCaller->p2>
78c0: 3d 30 20 26 26 20 70 43 61 6c 6c 65 72 2d 3e 70  =0 && pCaller->p
78d0: 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f  2<p->nOp );.  pO
78e0: 70 20 3d 20 26 61 4f 70 5b 70 43 61 6c 6c 65 72  p = &aOp[pCaller
78f0: 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 70 49 6e  ->p2 - 1];.  pIn
7900: 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55  1->flags = MEM_U
7910: 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61  ndefined;.  brea
7920: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
7930: 20 20 59 69 65 6c 64 20 50 31 20 50 32 20 2a 20    Yield P1 P2 * 
7940: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74  * *.**.** Swap t
7950: 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74  he program count
7960: 65 72 20 77 69 74 68 20 74 68 65 20 76 61 6c 75  er with the valu
7970: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
7980: 2e 20 20 54 68 69 73 0a 2a 2a 20 68 61 73 20 74  .  This.** has t
7990: 68 65 20 65 66 66 65 63 74 20 6f 66 20 79 69 65  he effect of yie
79a0: 6c 64 69 6e 67 20 74 6f 20 61 20 63 6f 72 6f 75  lding to a corou
79b0: 74 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  tine..**.** If t
79c0: 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 74 68 61  he coroutine tha
79d0: 74 20 69 73 20 6c 61 75 6e 63 68 65 64 20 62 79  t is launched by
79e0: 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
79f0: 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20 59  n ends with.** Y
7a00: 69 65 6c 64 20 6f 72 20 52 65 74 75 72 6e 20 74  ield or Return t
7a10: 68 65 6e 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20  hen continue to 
7a20: 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
7a30: 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 0a 2a 2a  tion.  But if.**
7a40: 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 6c   the coroutine l
7a50: 61 75 6e 63 68 65 64 20 62 79 20 74 68 69 73 20  aunched by this 
7a60: 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e 64 73  instruction ends
7a70: 20 77 69 74 68 0a 2a 2a 20 45 6e 64 43 6f 72 6f   with.** EndCoro
7a80: 75 74 69 6e 65 2c 20 74 68 65 6e 20 6a 75 6d 70  utine, then jump
7a90: 20 74 6f 20 50 32 20 72 61 74 68 65 72 20 74 68   to P2 rather th
7aa0: 61 6e 20 63 6f 6e 74 69 6e 75 69 6e 67 20 77 69  an continuing wi
7ab0: 74 68 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 69  th the.** next i
7ac0: 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
7ad0: 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74  * See also: Init
7ae0: 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73  Coroutine.*/.cas
7af0: 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20 20  e OP_Yield: {   
7b00: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c           /* in1,
7b10: 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 70   jump */.  int p
7b20: 63 44 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d 20  cDest;.  pIn1 = 
7b30: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
7b40: 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65    assert( VdbeMe
7b50: 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d  mDynamic(pIn1)==
7b60: 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  0 );.  pIn1->fla
7b70: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
7b80: 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29 70 49  pcDest = (int)pI
7b90: 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31 2d  n1->u.i;.  pIn1-
7ba0: 3e 75 2e 69 20 3d 20 28 69 6e 74 29 28 70 4f 70  >u.i = (int)(pOp
7bb0: 20 2d 20 61 4f 70 29 3b 0a 20 20 52 45 47 49 53   - aOp);.  REGIS
7bc0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
7bd0: 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 4f 70 20  1, pIn1);.  pOp 
7be0: 3d 20 26 61 4f 70 5b 70 63 44 65 73 74 5d 3b 0a  = &aOp[pcDest];.
7bf0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
7c00: 70 63 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e 75  pcode:  HaltIfNu
7c10: 6c 6c 20 20 50 31 20 50 32 20 50 33 20 50 34 20  ll  P1 P2 P3 P4 
7c20: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
7c30: 69 66 20 72 5b 50 33 5d 3d 6e 75 6c 6c 20 68 61  if r[P3]=null ha
7c40: 6c 74 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74  lt.**.** Check t
7c50: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
7c60: 73 74 65 72 20 50 33 2e 20 20 49 66 20 69 74 20  ster P3.  If it 
7c70: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61 6c  is NULL then Hal
7c80: 74 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61 6d  t using.** param
7c90: 65 74 65 72 20 50 31 2c 20 50 32 2c 20 61 6e 64  eter P1, P2, and
7ca0: 20 50 34 20 61 73 20 69 66 20 74 68 69 73 20 77   P4 as if this w
7cb0: 65 72 65 20 61 20 48 61 6c 74 20 69 6e 73 74 72  ere a Halt instr
7cc0: 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 0a  uction.  If the.
7cd0: 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  ** value in regi
7ce0: 73 74 65 72 20 50 33 20 69 73 20 6e 6f 74 20 4e  ster P3 is not N
7cf0: 55 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73 20 72  ULL, then this r
7d00: 6f 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f  outine is a no-o
7d10: 70 2e 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72  p..** The P5 par
7d20: 61 6d 65 74 65 72 20 73 68 6f 75 6c 64 20 62 65  ameter should be
7d30: 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48   1..*/.case OP_H
7d40: 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20 20  altIfNull: {    
7d50: 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 70 49    /* in3 */.  pI
7d60: 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
7d70: 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  p3];.#ifdef SQLI
7d80: 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70  TE_DEBUG.  if( p
7d90: 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 41 62 6f 72 74  Op->p2==OE_Abort
7da0: 20 29 7b 20 73 71 6c 69 74 65 33 56 64 62 65 41   ){ sqlite3VdbeA
7db0: 73 73 65 72 74 41 62 6f 72 74 61 62 6c 65 28 70  ssertAbortable(p
7dc0: 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66  ); }.#endif.  if
7dd0: 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
7de0: 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20   MEM_Null)==0 ) 
7df0: 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c  break;.  /* Fall
7e00: 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50   through into OP
7e10: 5f 48 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f  _Halt */.}../* O
7e20: 70 63 6f 64 65 3a 20 20 48 61 6c 74 20 50 31 20  pcode:  Halt P1 
7e30: 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  P2 * P4 P5.**.**
7e40: 20 45 78 69 74 20 69 6d 6d 65 64 69 61 74 65 6c   Exit immediatel
7e50: 79 2e 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75 72  y.  All open cur
7e60: 73 6f 72 73 2c 20 65 74 63 20 61 72 65 20 63 6c  sors, etc are cl
7e70: 6f 73 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69  osed.** automati
7e80: 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  cally..**.** P1 
7e90: 69 73 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  is the result co
7ea0: 64 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  de returned by s
7eb0: 71 6c 69 74 65 33 5f 65 78 65 63 28 29 2c 20 73  qlite3_exec(), s
7ec0: 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29 2c 0a  qlite3_reset(),.
7ed0: 2a 2a 20 6f 72 20 73 71 6c 69 74 65 33 5f 66 69  ** or sqlite3_fi
7ee0: 6e 61 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20 61  nalize().  For a
7ef0: 20 6e 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68   normal halt, th
7f00: 69 73 20 73 68 6f 75 6c 64 20 62 65 20 53 51 4c  is should be SQL
7f10: 49 54 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46  ITE_OK (0)..** F
7f20: 6f 72 20 65 72 72 6f 72 73 2c 20 69 74 20 63 61  or errors, it ca
7f30: 6e 20 62 65 20 73 6f 6d 65 20 6f 74 68 65 72 20  n be some other 
7f40: 76 61 6c 75 65 2e 20 20 49 66 20 50 31 21 3d 30  value.  If P1!=0
7f50: 20 74 68 65 6e 20 50 32 20 77 69 6c 6c 20 64 65   then P2 will de
7f60: 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68  termine.** wheth
7f70: 65 72 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c  er or not to rol
7f80: 6c 62 61 63 6b 20 74 68 65 20 63 75 72 72 65 6e  lback the curren
7f90: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20  t transaction.  
7fa0: 44 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a  Do not rollback.
7fb0: 2a 2a 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69  ** if P2==OE_Fai
7fc0: 6c 2e 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61  l. Do the rollba
7fd0: 63 6b 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c  ck if P2==OE_Rol
7fe0: 6c 62 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f  lback.  If P2==O
7ff0: 45 5f 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e  E_Abort,.** then
8000: 20 62 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68   back out all ch
8010: 61 6e 67 65 73 20 74 68 61 74 20 68 61 76 65 20  anges that have 
8020: 6f 63 63 75 72 72 65 64 20 64 75 72 69 6e 67 20  occurred during 
8030: 74 68 69 73 20 65 78 65 63 75 74 69 6f 6e 20 6f  this execution o
8040: 66 20 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62  f the.** VDBE, b
8050: 75 74 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61  ut do not rollba
8060: 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ck the transacti
8070: 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  on. .**.** If P4
8080: 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65   is not null the
8090: 6e 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72  n it is an error
80a0: 20 6d 65 73 73 61 67 65 20 73 74 72 69 6e 67 2e   message string.
80b0: 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73 20 61 20 76  .**.** P5 is a v
80c0: 61 6c 75 65 20 62 65 74 77 65 65 6e 20 30 20 61  alue between 0 a
80d0: 6e 64 20 34 2c 20 69 6e 63 6c 75 73 69 76 65 2c  nd 4, inclusive,
80e0: 20 74 68 61 74 20 6d 6f 64 69 66 69 65 73 20 74   that modifies t
80f0: 68 65 20 50 34 20 73 74 72 69 6e 67 2e 0a 2a 2a  he P4 string..**
8100: 0a 2a 2a 20 20 20 20 30 3a 20 20 28 6e 6f 20 63  .**    0:  (no c
8110: 68 61 6e 67 65 29 0a 2a 2a 20 20 20 20 31 3a 20  hange).**    1: 
8120: 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 74 72 61   NOT NULL contra
8130: 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a  int failed: P4.*
8140: 2a 20 20 20 20 32 3a 20 20 55 4e 49 51 55 45 20  *    2:  UNIQUE 
8150: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
8160: 64 3a 20 50 34 0a 2a 2a 20 20 20 20 33 3a 20 20  d: P4.**    3:  
8170: 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
8180: 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20   failed: P4.**  
8190: 20 20 34 3a 20 20 46 4f 52 45 49 47 4e 20 4b 45    4:  FOREIGN KE
81a0: 59 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69  Y constraint fai
81b0: 6c 65 64 3a 20 50 34 0a 2a 2a 0a 2a 2a 20 49 66  led: P4.**.** If
81c0: 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 20   P5 is not zero 
81d0: 61 6e 64 20 50 34 20 69 73 20 4e 55 4c 4c 2c 20  and P4 is NULL, 
81e0: 74 68 65 6e 20 65 76 65 72 79 74 68 69 6e 67 20  then everything 
81f0: 61 66 74 65 72 20 74 68 65 20 22 3a 22 20 69 73  after the ":" is
8200: 0a 2a 2a 20 6f 6d 69 74 74 65 64 2e 0a 2a 2a 0a  .** omitted..**.
8210: 2a 2a 20 54 68 65 72 65 20 69 73 20 61 6e 20 69  ** There is an i
8220: 6d 70 6c 69 65 64 20 22 48 61 6c 74 20 30 20 30  mplied "Halt 0 0
8230: 20 30 22 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   0" instruction 
8240: 69 6e 73 65 72 74 65 64 20 61 74 20 74 68 65 20  inserted at the 
8250: 76 65 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20 65  very end of.** e
8260: 76 65 72 79 20 70 72 6f 67 72 61 6d 2e 20 20 53  very program.  S
8270: 6f 20 61 20 6a 75 6d 70 20 70 61 73 74 20 74 68  o a jump past th
8280: 65 20 6c 61 73 74 20 69 6e 73 74 72 75 63 74 69  e last instructi
8290: 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61  on of the progra
82a0: 6d 0a 2a 2a 20 69 73 20 74 68 65 20 73 61 6d 65  m.** is the same
82b0: 20 61 73 20 65 78 65 63 75 74 69 6e 67 20 48 61   as executing Ha
82c0: 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48  lt..*/.case OP_H
82d0: 61 6c 74 3a 20 7b 0a 20 20 56 64 62 65 46 72 61  alt: {.  VdbeFra
82e0: 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69 6e  me *pFrame;.  in
82f0: 74 20 70 63 78 3b 0a 0a 20 20 70 63 78 20 3d 20  t pcx;..  pcx = 
8300: 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
8310: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
8320: 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f 70 2d  DEBUG.  if( pOp-
8330: 3e 70 32 3d 3d 4f 45 5f 41 62 6f 72 74 20 29 7b  >p2==OE_Abort ){
8340: 20 73 71 6c 69 74 65 33 56 64 62 65 41 73 73 65   sqlite3VdbeAsse
8350: 72 74 41 62 6f 72 74 61 62 6c 65 28 70 29 3b 20  rtAbortable(p); 
8360: 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70  }.#endif.  if( p
8370: 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54 45 5f 4f  Op->p1==SQLITE_O
8380: 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d 65 20 29  K && p->pFrame )
8390: 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74 20 74 68  {.    /* Halt th
83a0: 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 52  e sub-program. R
83b0: 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c 20 74 6f  eturn control to
83c0: 20 74 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d   the parent fram
83d0: 65 2e 20 2a 2f 0a 20 20 20 20 70 46 72 61 6d 65  e. */.    pFrame
83e0: 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20   = p->pFrame;.  
83f0: 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46    p->pFrame = pF
8400: 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 0a 20  rame->pParent;. 
8410: 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a     p->nFrame--;.
8420: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
8430: 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d  etChanges(db, p-
8440: 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 20 20 70  >nChange);.    p
8450: 63 78 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  cx = sqlite3Vdbe
8460: 46 72 61 6d 65 52 65 73 74 6f 72 65 28 70 46 72  FrameRestore(pFr
8470: 61 6d 65 29 3b 0a 20 20 20 20 69 66 28 20 70 4f  ame);.    if( pO
8480: 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65  p->p2==OE_Ignore
8490: 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 6e 73   ){.      /* Ins
84a0: 74 72 75 63 74 69 6f 6e 20 70 63 78 20 69 73 20  truction pcx is 
84b0: 74 68 65 20 4f 50 5f 50 72 6f 67 72 61 6d 20 74  the OP_Program t
84c0: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 65 20  hat invoked the 
84d0: 73 75 62 2d 70 72 6f 67 72 61 6d 20 0a 20 20 20  sub-program .   
84e0: 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20     ** currently 
84f0: 62 65 69 6e 67 20 68 61 6c 74 65 64 2e 20 49 66  being halted. If
8500: 20 74 68 65 20 70 32 20 69 6e 73 74 72 75 63 74   the p2 instruct
8510: 69 6f 6e 20 6f 66 20 74 68 69 73 20 4f 50 5f 48  ion of this OP_H
8520: 61 6c 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e 73  alt.      ** ins
8530: 74 72 75 63 74 69 6f 6e 20 69 73 20 73 65 74 20  truction is set 
8540: 74 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 74 68  to OE_Ignore, th
8550: 65 6e 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  en the sub-progr
8560: 61 6d 20 69 73 20 74 68 72 6f 77 69 6e 67 0a 20  am is throwing. 
8570: 20 20 20 20 20 2a 2a 20 61 6e 20 49 47 4e 4f 52       ** an IGNOR
8580: 45 20 65 78 63 65 70 74 69 6f 6e 2e 20 49 6e 20  E exception. In 
8590: 74 68 69 73 20 63 61 73 65 20 6a 75 6d 70 20 74  this case jump t
85a0: 6f 20 74 68 65 20 61 64 64 72 65 73 73 20 73 70  o the address sp
85b0: 65 63 69 66 69 65 64 0a 20 20 20 20 20 20 2a 2a  ecified.      **
85c0: 20 61 73 20 74 68 65 20 70 32 20 6f 66 20 74 68   as the p2 of th
85d0: 65 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f  e calling OP_Pro
85e0: 67 72 61 6d 2e 20 20 2a 2f 0a 20 20 20 20 20 20  gram.  */.      
85f0: 70 63 78 20 3d 20 70 2d 3e 61 4f 70 5b 70 63 78  pcx = p->aOp[pcx
8600: 5d 2e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20  ].p2-1;.    }.  
8610: 20 20 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a    aOp = p->aOp;.
8620: 20 20 20 20 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d      aMem = p->aM
8630: 65 6d 3b 0a 20 20 20 20 70 4f 70 20 3d 20 26 61  em;.    pOp = &a
8640: 4f 70 5b 70 63 78 5d 3b 0a 20 20 20 20 62 72 65  Op[pcx];.    bre
8650: 61 6b 3b 0a 20 20 7d 0a 20 20 70 2d 3e 72 63 20  ak;.  }.  p->rc 
8660: 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e  = pOp->p1;.  p->
8670: 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28 75  errorAction = (u
8680: 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 2d 3e  8)pOp->p2;.  p->
8690: 70 63 20 3d 20 70 63 78 3b 0a 20 20 61 73 73 65  pc = pcx;.  asse
86a0: 72 74 28 20 70 4f 70 2d 3e 70 35 3c 3d 34 20 29  rt( pOp->p5<=4 )
86b0: 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 20 29 7b  ;.  if( p->rc ){
86c0: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  .    if( pOp->p5
86d0: 20 29 7b 0a 20 20 20 20 20 20 73 74 61 74 69 63   ){.      static
86e0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 63 6f   const char * co
86f0: 6e 73 74 20 61 7a 54 79 70 65 5b 5d 20 3d 20 7b  nst azType[] = {
8700: 20 22 4e 4f 54 20 4e 55 4c 4c 22 2c 20 22 55 4e   "NOT NULL", "UN
8710: 49 51 55 45 22 2c 20 22 43 48 45 43 4b 22 2c 0a  IQUE", "CHECK",.
8720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8740: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46 4f               "FO
8750: 52 45 49 47 4e 20 4b 45 59 22 20 7d 3b 0a 20 20  REIGN KEY" };.  
8760: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f      testcase( pO
8770: 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 20 20  p->p5==1 );.    
8780: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
8790: 3e 70 35 3d 3d 32 20 29 3b 0a 20 20 20 20 20 20  >p5==2 );.      
87a0: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
87b0: 35 3d 3d 33 20 29 3b 0a 20 20 20 20 20 20 74 65  5==3 );.      te
87c0: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d  stcase( pOp->p5=
87d0: 3d 34 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  =4 );.      sqli
87e0: 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
87f0: 22 25 73 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  "%s constraint f
8800: 61 69 6c 65 64 22 2c 20 61 7a 54 79 70 65 5b 70  ailed", azType[p
8810: 4f 70 2d 3e 70 35 2d 31 5d 29 3b 0a 20 20 20 20  Op->p5-1]);.    
8820: 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20    if( pOp->p4.z 
8830: 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 7a 45  ){.        p->zE
8840: 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 4d  rrMsg = sqlite3M
8850: 50 72 69 6e 74 66 28 64 62 2c 20 22 25 7a 3a 20  Printf(db, "%z: 
8860: 25 73 22 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 2c  %s", p->zErrMsg,
8870: 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20   pOp->p4.z);.   
8880: 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
8890: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
88a0: 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20  eError(p, "%s", 
88b0: 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20  pOp->p4.z);.    
88c0: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f  }.    sqlite3_lo
88d0: 67 28 70 4f 70 2d 3e 70 31 2c 20 22 61 62 6f 72  g(pOp->p1, "abor
88e0: 74 20 61 74 20 25 64 20 69 6e 20 5b 25 73 5d 3a  t at %d in [%s]:
88f0: 20 25 73 22 2c 20 70 63 78 2c 20 70 2d 3e 7a 53   %s", pcx, p->zS
8900: 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  ql, p->zErrMsg);
8910: 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
8920: 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a  te3VdbeHalt(p);.
8930: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
8940: 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 72 63 3d  LITE_BUSY || rc=
8950: 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63  =SQLITE_OK || rc
8960: 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 29  ==SQLITE_ERROR )
8970: 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
8980: 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 70  TE_BUSY ){.    p
8990: 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  ->rc = SQLITE_BU
89a0: 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  SY;.  }else{.   
89b0: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
89c0: 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63  ITE_OK || (p->rc
89d0: 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43  &0xff)==SQLITE_C
89e0: 4f 4e 53 54 52 41 49 4e 54 20 29 3b 0a 20 20 20  ONSTRAINT );.   
89f0: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
8a00: 49 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44  ITE_OK || db->nD
8a10: 65 66 65 72 72 65 64 43 6f 6e 73 3e 30 20 7c 7c  eferredCons>0 ||
8a20: 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
8a30: 6d 43 6f 6e 73 3e 30 20 29 3b 0a 20 20 20 20 72  mCons>0 );.    r
8a40: 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49  c = p->rc ? SQLI
8a50: 54 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c 49 54  TE_ERROR : SQLIT
8a60: 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f  E_DONE;.  }.  go
8a70: 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
8a80: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
8a90: 74 65 67 65 72 20 50 31 20 50 32 20 2a 20 2a 20  teger P1 P2 * * 
8aa0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
8ab0: 5b 50 32 5d 3d 50 31 0a 2a 2a 0a 2a 2a 20 54 68  [P2]=P1.**.** Th
8ac0: 65 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72  e 32-bit integer
8ad0: 20 76 61 6c 75 65 20 50 31 20 69 73 20 77 72 69   value P1 is wri
8ae0: 74 74 65 6e 20 69 6e 74 6f 20 72 65 67 69 73 74  tten into regist
8af0: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
8b00: 50 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20 20 20  P_Integer: {    
8b10: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
8b20: 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
8b30: 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
8b40: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
8b50: 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61 6b 3b  Op->p1;.  break;
8b60: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
8b70: 6e 74 36 34 20 2a 20 50 32 20 2a 20 50 34 20 2a  nt64 * P2 * P4 *
8b80: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
8b90: 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20  P2]=P4.**.** P4 
8ba0: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
8bb0: 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72  a 64-bit integer
8bc0: 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65   value..** Write
8bd0: 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f   that value into
8be0: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
8bf0: 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36 34 3a 20  .case OP_Int64: 
8c00: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
8c10: 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20  ut2 */.  pOut = 
8c20: 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
8c30: 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74  , pOp);.  assert
8c40: 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36 34 21 3d  ( pOp->p4.pI64!=
8c50: 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  0 );.  pOut->u.i
8c60: 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 49 36 34   = *pOp->p4.pI64
8c70: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  ;.  break;.}..#i
8c80: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
8c90: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
8ca0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c  ./* Opcode: Real
8cb0: 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20   * P2 * P4 *.** 
8cc0: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
8cd0: 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  P4.**.** P4 is a
8ce0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34   pointer to a 64
8cf0: 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20 70 6f  -bit floating po
8d00: 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72  int value..** Wr
8d10: 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69  ite that value i
8d20: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
8d30: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c  .*/.case OP_Real
8d40: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
8d50: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 46 4c 4f  * same as TK_FLO
8d60: 41 54 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f  AT, out2 */.  pO
8d70: 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
8d80: 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70  ase(p, pOp);.  p
8d90: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
8da0: 5f 52 65 61 6c 3b 0a 20 20 61 73 73 65 72 74 28  _Real;.  assert(
8db0: 20 21 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 2a   !sqlite3IsNaN(*
8dc0: 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 29 20 29  pOp->p4.pReal) )
8dd0: 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d 20  ;.  pOut->u.r = 
8de0: 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a  *pOp->p4.pReal;.
8df0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
8e00: 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74  f../* Opcode: St
8e10: 72 69 6e 67 38 20 2a 20 50 32 20 2a 20 50 34 20  ring8 * P2 * P4 
8e20: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
8e30: 5b 50 32 5d 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20  [P2]='P4'.**.** 
8e40: 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 6e  P4 points to a n
8e50: 75 6c 20 74 65 72 6d 69 6e 61 74 65 64 20 55 54  ul terminated UT
8e60: 46 2d 38 20 73 74 72 69 6e 67 2e 20 54 68 69 73  F-8 string. This
8e70: 20 6f 70 63 6f 64 65 20 69 73 20 74 72 61 6e 73   opcode is trans
8e80: 66 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f 20  formed .** into 
8e90: 61 20 53 74 72 69 6e 67 20 6f 70 63 6f 64 65 20  a String opcode 
8ea0: 62 65 66 6f 72 65 20 69 74 20 69 73 20 65 78 65  before it is exe
8eb0: 63 75 74 65 64 20 66 6f 72 20 74 68 65 20 66 69  cuted for the fi
8ec0: 72 73 74 20 74 69 6d 65 2e 20 20 44 75 72 69 6e  rst time.  Durin
8ed0: 67 0a 2a 2a 20 74 68 69 73 20 74 72 61 6e 73 66  g.** this transf
8ee0: 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 6c 65  ormation, the le
8ef0: 6e 67 74 68 20 6f 66 20 73 74 72 69 6e 67 20 50  ngth of string P
8f00: 34 20 69 73 20 63 6f 6d 70 75 74 65 64 20 61 6e  4 is computed an
8f10: 64 20 73 74 6f 72 65 64 0a 2a 2a 20 61 73 20 74  d stored.** as t
8f20: 68 65 20 50 31 20 70 61 72 61 6d 65 74 65 72 2e  he P1 parameter.
8f30: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69  .*/.case OP_Stri
8f40: 6e 67 38 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  ng8: {         /
8f50: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 52  * same as TK_STR
8f60: 49 4e 47 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 61  ING, out2 */.  a
8f70: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a  ssert( pOp->p4.z
8f80: 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  !=0 );.  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 70 4f 70 2d 3e 6f  , pOp);.  pOp->o
8fb0: 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72 69 6e  pcode = OP_Strin
8fc0: 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20 73  g;.  pOp->p1 = s
8fd0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70  qlite3Strlen30(p
8fe0: 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e  Op->p4.z);..#ifn
8ff0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
9000: 55 54 46 31 36 0a 20 20 69 66 28 20 65 6e 63 6f  UTF16.  if( enco
9010: 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55 54 46  ding!=SQLITE_UTF
9020: 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  8 ){.    rc = sq
9030: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53  lite3VdbeMemSetS
9040: 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34  tr(pOut, pOp->p4
9050: 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55  .z, -1, SQLITE_U
9060: 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  TF8, SQLITE_STAT
9070: 49 43 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  IC);.    assert(
9080: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc==SQLITE_OK |
9090: 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f  | rc==SQLITE_TOO
90a0: 42 49 47 20 29 3b 0a 20 20 20 20 69 66 28 20 53  BIG );.    if( S
90b0: 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65  QLITE_OK!=sqlite
90c0: 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
90d0: 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69  ing(pOut, encodi
90e0: 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ng) ) goto no_me
90f0: 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  m;.    assert( p
9100: 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 3e 30 20  Out->szMalloc>0 
9110: 26 26 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63  && pOut->zMalloc
9120: 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20 20  ==pOut->z );.   
9130: 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d   assert( VdbeMem
9140: 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 3d 3d 30  Dynamic(pOut)==0
9150: 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 73 7a   );.    pOut->sz
9160: 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20  Malloc = 0;.    
9170: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pOut->flags |= M
9180: 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20 20 69  EM_Static;.    i
9190: 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
91a0: 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20  P4_DYNAMIC ){.  
91b0: 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
91c0: 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  e(db, pOp->p4.z)
91d0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d  ;.    }.    pOp-
91e0: 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 44 59 4e  >p4type = P4_DYN
91f0: 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  AMIC;.    pOp->p
9200: 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20  4.z = pOut->z;. 
9210: 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75     pOp->p1 = pOu
9220: 74 2d 3e 6e 3b 0a 20 20 7d 0a 20 20 74 65 73 74  t->n;.  }.  test
9230: 63 61 73 65 28 20 72 63 3d 3d 53 51 4c 49 54 45  case( rc==SQLITE
9240: 5f 54 4f 4f 42 49 47 20 29 3b 0a 23 65 6e 64 69  _TOOBIG );.#endi
9250: 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e  f.  if( pOp->p1>
9260: 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
9270: 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
9280: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
9290: 62 69 67 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  big;.  }.  asser
92a0: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
92b0: 20 29 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68   );.  /* Fall th
92c0: 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
92d0: 74 20 63 61 73 65 2c 20 4f 50 5f 53 74 72 69 6e  t case, OP_Strin
92e0: 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63  g */.}.  ./* Opc
92f0: 6f 64 65 3a 20 53 74 72 69 6e 67 20 50 31 20 50  ode: String P1 P
9300: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
9310: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50  nopsis: r[P2]='P
9320: 34 27 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a  4' (len=P1).**.*
9330: 2a 20 54 68 65 20 73 74 72 69 6e 67 20 76 61 6c  * The string val
9340: 75 65 20 50 34 20 6f 66 20 6c 65 6e 67 74 68 20  ue P4 of length 
9350: 50 31 20 28 62 79 74 65 73 29 20 69 73 20 73 74  P1 (bytes) is st
9360: 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
9370: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33   P2..**.** If P3
9380: 20 69 73 20 6e 6f 74 20 7a 65 72 6f 20 61 6e 64   is not zero and
9390: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
93a0: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 65  register P3 is e
93b0: 71 75 61 6c 20 74 6f 20 50 35 2c 20 74 68 65 6e  qual to P5, then
93c0: 0a 2a 2a 20 74 68 65 20 64 61 74 61 74 79 70 65  .** the datatype
93d0: 20 6f 66 20 74 68 65 20 72 65 67 69 73 74 65 72   of the register
93e0: 20 50 32 20 69 73 20 63 6f 6e 76 65 72 74 65 64   P2 is converted
93f0: 20 74 6f 20 42 4c 4f 42 2e 20 20 54 68 65 20 63   to BLOB.  The c
9400: 6f 6e 74 65 6e 74 20 69 73 0a 2a 2a 20 74 68 65  ontent is.** the
9410: 20 73 61 6d 65 20 73 65 71 75 65 6e 63 65 20 6f   same sequence o
9420: 66 20 62 79 74 65 73 2c 20 69 74 20 69 73 20 6d  f bytes, it is m
9430: 65 72 65 6c 79 20 69 6e 74 65 72 70 72 65 74 65  erely interprete
9440: 64 20 61 73 20 61 20 42 4c 4f 42 20 69 6e 73 74  d as a BLOB inst
9450: 65 61 64 0a 2a 2a 20 6f 66 20 61 20 73 74 72 69  ead.** of a stri
9460: 6e 67 2c 20 61 73 20 69 66 20 69 74 20 68 61 64  ng, as if it had
9470: 20 62 65 65 6e 20 43 41 53 54 2e 20 20 49 6e 20   been CAST.  In 
9480: 6f 74 68 65 72 20 77 6f 72 64 73 3a 0a 2a 2a 0a  other words:.**.
9490: 2a 2a 20 69 66 28 20 50 33 21 3d 30 20 61 6e 64  ** if( P3!=0 and
94a0: 20 72 65 67 5b 50 33 5d 3d 3d 50 35 20 29 20 72   reg[P3]==P5 ) r
94b0: 65 67 5b 50 32 5d 20 3a 3d 20 43 41 53 54 28 72  eg[P2] := CAST(r
94c0: 65 67 5b 50 32 5d 20 61 73 20 42 4c 4f 42 29 0a  eg[P2] as BLOB).
94d0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e  */.case OP_Strin
94e0: 67 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a  g: {          /*
94f0: 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72   out2 */.  asser
9500: 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20  t( pOp->p4.z!=0 
9510: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  );.  pOut = out2
9520: 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
9530: 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  p);.  pOut->flag
9540: 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f  s = MEM_Str|MEM_
9550: 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b  Static|MEM_Term;
9560: 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70  .  pOut->z = pOp
9570: 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e  ->p4.z;.  pOut->
9580: 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  n = pOp->p1;.  p
9590: 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  Out->enc = encod
95a0: 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ing;.  UPDATE_MA
95b0: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
95c0: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
95d0: 5f 4c 49 4b 45 5f 44 4f 45 53 4e 54 5f 4d 41 54  _LIKE_DOESNT_MAT
95e0: 43 48 5f 42 4c 4f 42 53 0a 20 20 69 66 28 20 70  CH_BLOBS.  if( p
95f0: 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20  Op->p3>0 ){.    
9600: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
9610: 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
9620: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
9630: 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
9640: 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73 65  p->p3];.    asse
9650: 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  rt( pIn3->flags 
9660: 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20  & MEM_Int );.   
9670: 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 69 3d 3d   if( pIn3->u.i==
9680: 70 4f 70 2d 3e 70 35 20 29 20 70 4f 75 74 2d 3e  pOp->p5 ) pOut->
9690: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62  flags = MEM_Blob
96a0: 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  |MEM_Static|MEM_
96b0: 54 65 72 6d 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  Term;.  }.#endif
96c0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
96d0: 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 50 31 20  Opcode: Null P1 
96e0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
96f0: 6f 70 73 69 73 3a 20 72 5b 50 32 2e 2e 50 33 5d  opsis: r[P2..P3]
9700: 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 57 72 69 74  =NULL.**.** Writ
9710: 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65  e a NULL into re
9720: 67 69 73 74 65 72 73 20 50 32 2e 20 20 49 66 20  gisters P2.  If 
9730: 50 33 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  P3 greater than 
9740: 50 32 2c 20 74 68 65 6e 20 61 6c 73 6f 20 77 72  P2, then also wr
9750: 69 74 65 0a 2a 2a 20 4e 55 4c 4c 20 69 6e 74 6f  ite.** NULL into
9760: 20 72 65 67 69 73 74 65 72 20 50 33 20 61 6e 64   register P3 and
9770: 20 65 76 65 72 79 20 72 65 67 69 73 74 65 72 20   every register 
9780: 69 6e 20 62 65 74 77 65 65 6e 20 50 32 20 61 6e  in between P2 an
9790: 64 20 50 33 2e 20 20 49 66 20 50 33 0a 2a 2a 20  d P3.  If P3.** 
97a0: 69 73 20 6c 65 73 73 20 74 68 61 6e 20 50 32 20  is less than P2 
97b0: 28 74 79 70 69 63 61 6c 6c 79 20 50 33 20 69 73  (typically P3 is
97c0: 20 7a 65 72 6f 29 20 74 68 65 6e 20 6f 6e 6c 79   zero) then only
97d0: 20 72 65 67 69 73 74 65 72 20 50 32 20 69 73 0a   register P2 is.
97e0: 2a 2a 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a  ** set to NULL..
97f0: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
9800: 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72  value is non-zer
9810: 6f 2c 20 74 68 65 6e 20 61 6c 73 6f 20 73 65 74  o, then also set
9820: 20 74 68 65 20 4d 45 4d 5f 43 6c 65 61 72 65 64   the MEM_Cleared
9830: 20 66 6c 61 67 20 73 6f 20 74 68 61 74 0a 2a 2a   flag so that.**
9840: 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 77 69 6c   NULL values wil
9850: 6c 20 6e 6f 74 20 63 6f 6d 70 61 72 65 20 65 71  l not compare eq
9860: 75 61 6c 20 65 76 65 6e 20 69 66 20 53 51 4c 49  ual even if SQLI
9870: 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74  TE_NULLEQ is set
9880: 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e 65 20 6f 72 20   on.** OP_Ne or 
9890: 4f 50 5f 45 71 2e 0a 2a 2f 0a 63 61 73 65 20 4f  OP_Eq..*/.case O
98a0: 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20  P_Null: {       
98b0: 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
98c0: 20 69 6e 74 20 63 6e 74 3b 0a 20 20 75 31 36 20   int cnt;.  u16 
98d0: 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 70 4f 75 74  nullFlag;.  pOut
98e0: 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
98f0: 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 63 6e 74  e(p, pOp);.  cnt
9900: 20 3d 20 70 4f 70 2d 3e 70 33 2d 70 4f 70 2d 3e   = pOp->p3-pOp->
9910: 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p2;.  assert( pO
9920: 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p3<=(p->nMem+
9930: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
9940: 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  );.  pOut->flags
9950: 20 3d 20 6e 75 6c 6c 46 6c 61 67 20 3d 20 70 4f   = nullFlag = pO
9960: 70 2d 3e 70 31 20 3f 20 28 4d 45 4d 5f 4e 75 6c  p->p1 ? (MEM_Nul
9970: 6c 7c 4d 45 4d 5f 43 6c 65 61 72 65 64 29 20 3a  l|MEM_Cleared) :
9980: 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 70 4f 75   MEM_Null;.  pOu
9990: 74 2d 3e 6e 20 3d 20 30 3b 0a 23 69 66 64 65 66  t->n = 0;.#ifdef
99a0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
99b0: 70 4f 75 74 2d 3e 75 54 65 6d 70 20 3d 20 30 3b  pOut->uTemp = 0;
99c0: 0a 23 65 6e 64 69 66 0a 20 20 77 68 69 6c 65 28  .#endif.  while(
99d0: 20 63 6e 74 3e 30 20 29 7b 0a 20 20 20 20 70 4f   cnt>0 ){.    pO
99e0: 75 74 2b 2b 3b 0a 20 20 20 20 6d 65 6d 41 62 6f  ut++;.    memAbo
99f0: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
9a00: 75 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ut);.    sqlite3
9a10: 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
9a20: 4f 75 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  Out);.    pOut->
9a30: 66 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c 61 67  flags = nullFlag
9a40: 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 6e 20 3d 20  ;.    pOut->n = 
9a50: 30 3b 0a 20 20 20 20 63 6e 74 2d 2d 3b 0a 20 20  0;.    cnt--;.  
9a60: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
9a70: 20 4f 70 63 6f 64 65 3a 20 53 6f 66 74 4e 75 6c   Opcode: SoftNul
9a80: 6c 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 20  l P1 * * * *.** 
9a90: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d  Synopsis: r[P1]=
9aa0: 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 53 65 74 20 72  NULL.**.** Set r
9ab0: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 68 61  egister P1 to ha
9ac0: 76 65 20 74 68 65 20 76 61 6c 75 65 20 4e 55 4c  ve the value NUL
9ad0: 4c 20 61 73 20 73 65 65 6e 20 62 79 20 74 68 65  L as seen by the
9ae0: 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 0a 2a   OP_MakeRecord.*
9af0: 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20 62  * instruction, b
9b00: 75 74 20 64 6f 20 6e 6f 74 20 66 72 65 65 20 61  ut do not free a
9b10: 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f  ny string or blo
9b20: 62 20 6d 65 6d 6f 72 79 20 61 73 73 6f 63 69 61  b memory associa
9b30: 74 65 64 20 77 69 74 68 0a 2a 2a 20 74 68 65 20  ted with.** the 
9b40: 72 65 67 69 73 74 65 72 2c 20 73 6f 20 74 68 61  register, so tha
9b50: 74 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 77  t if the value w
9b60: 61 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62  as a string or b
9b70: 6c 6f 62 20 74 68 61 74 20 77 61 73 0a 2a 2a 20  lob that was.** 
9b80: 70 72 65 76 69 6f 75 73 6c 79 20 63 6f 70 69 65  previously copie
9b90: 64 20 75 73 69 6e 67 20 4f 50 5f 53 43 6f 70 79  d using OP_SCopy
9ba0: 2c 20 74 68 65 20 63 6f 70 69 65 73 20 77 69 6c  , the copies wil
9bb0: 6c 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 62 65  l continue to be
9bc0: 20 76 61 6c 69 64 2e 0a 2a 2f 0a 63 61 73 65 20   valid..*/.case 
9bd0: 4f 50 5f 53 6f 66 74 4e 75 6c 6c 3a 20 7b 0a 20  OP_SoftNull: {. 
9be0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
9bf0: 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28  >0 && pOp->p1<=(
9c00: 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
9c10: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75  Cursor) );.  pOu
9c20: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
9c30: 31 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  1];.  pOut->flag
9c40: 73 20 3d 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73  s = (pOut->flags
9c50: 26 7e 28 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64  &~(MEM_Undefined
9c60: 7c 4d 45 4d 5f 41 66 66 4d 61 73 6b 29 29 7c 4d  |MEM_AffMask))|M
9c70: 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 62 72 65 61 6b  EM_Null;.  break
9c80: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
9c90: 42 6c 6f 62 20 50 31 20 50 32 20 2a 20 50 34 20  Blob P1 P2 * P4 
9ca0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
9cb0: 5b 50 32 5d 3d 50 34 20 28 6c 65 6e 3d 50 31 29  [P2]=P4 (len=P1)
9cc0: 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73  .**.** P4 points
9cd0: 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20 64 61   to a blob of da
9ce0: 74 61 20 50 31 20 62 79 74 65 73 20 6c 6f 6e 67  ta P1 bytes long
9cf0: 2e 20 20 53 74 6f 72 65 20 74 68 69 73 0a 2a 2a  .  Store this.**
9d00: 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65   blob in registe
9d10: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
9d20: 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20  _Blob: {        
9d30: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
9d40: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
9d50: 2d 3e 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d  ->p1 <= SQLITE_M
9d60: 41 58 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20 70  AX_LENGTH );.  p
9d70: 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
9d80: 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
9d90: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
9da0: 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e  tStr(pOut, pOp->
9db0: 70 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30  p4.z, pOp->p1, 0
9dc0: 2c 20 30 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e  , 0);.  pOut->en
9dd0: 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20  c = encoding;.  
9de0: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
9df0: 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
9e00: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
9e10: 3a 20 56 61 72 69 61 62 6c 65 20 50 31 20 50 32  : Variable P1 P2
9e20: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
9e30: 73 69 73 3a 20 72 5b 50 32 5d 3d 70 61 72 61 6d  sis: r[P2]=param
9e40: 65 74 65 72 28 50 31 2c 50 34 29 0a 2a 2a 0a 2a  eter(P1,P4).**.*
9e50: 2a 20 54 72 61 6e 73 66 65 72 20 74 68 65 20 76  * Transfer the v
9e60: 61 6c 75 65 73 20 6f 66 20 62 6f 75 6e 64 20 70  alues of bound p
9e70: 61 72 61 6d 65 74 65 72 20 50 31 20 69 6e 74 6f  arameter P1 into
9e80: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a   register P2.**.
9e90: 2a 2a 20 49 66 20 74 68 65 20 70 61 72 61 6d 65  ** If the parame
9ea0: 74 65 72 20 69 73 20 6e 61 6d 65 64 2c 20 74 68  ter is named, th
9eb0: 65 6e 20 69 74 73 20 6e 61 6d 65 20 61 70 70 65  en its name appe
9ec0: 61 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 20 54 68  ars in P4..** Th
9ed0: 65 20 50 34 20 76 61 6c 75 65 20 69 73 20 75 73  e P4 value is us
9ee0: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 62 69  ed by sqlite3_bi
9ef0: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d  nd_parameter_nam
9f00: 65 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  e()..*/.case OP_
9f10: 56 61 72 69 61 62 6c 65 3a 20 7b 20 20 20 20 20  Variable: {     
9f20: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
9f30: 2f 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b 20 20  /.  Mem *pVar;  
9f40: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 62 65       /* Value be
9f50: 69 6e 67 20 74 72 61 6e 73 66 65 72 72 65 64 20  ing transferred 
9f60: 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  */..  assert( pO
9f70: 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p1>0 && pOp->
9f80: 70 31 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20  p1<=p->nVar );. 
9f90: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
9fa0: 2e 7a 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34  .z==0 || pOp->p4
9fb0: 2e 7a 3d 3d 73 71 6c 69 74 65 33 56 4c 69 73 74  .z==sqlite3VList
9fc0: 4e 75 6d 54 6f 4e 61 6d 65 28 70 2d 3e 70 56 4c  NumToName(p->pVL
9fd0: 69 73 74 2c 70 4f 70 2d 3e 70 31 29 20 29 3b 0a  ist,pOp->p1) );.
9fe0: 20 20 70 56 61 72 20 3d 20 26 70 2d 3e 61 56 61    pVar = &p->aVa
9ff0: 72 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a  r[pOp->p1 - 1];.
a000: 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
a010: 65 4d 65 6d 54 6f 6f 42 69 67 28 70 56 61 72 29  eMemTooBig(pVar)
a020: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
a030: 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  _big;.  }.  pOut
a040: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
a050: 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  ];.  sqlite3Vdbe
a060: 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
a070: 4f 75 74 2c 20 70 56 61 72 2c 20 4d 45 4d 5f 53  Out, pVar, MEM_S
a080: 74 61 74 69 63 29 3b 0a 20 20 55 50 44 41 54 45  tatic);.  UPDATE
a090: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
a0a0: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
a0b0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65  ./* Opcode: Move
a0c0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
a0d0: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 40   Synopsis: r[P2@
a0e0: 50 33 5d 3d 72 5b 50 31 40 50 33 5d 0a 2a 2a 0a  P3]=r[P1@P3].**.
a0f0: 2a 2a 20 4d 6f 76 65 20 74 68 65 20 50 33 20 76  ** Move the P3 v
a100: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
a110: 72 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 6f 76  r P1..P1+P3-1 ov
a120: 65 72 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73  er into.** regis
a130: 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2d 31  ters P2..P2+P3-1
a140: 2e 20 20 52 65 67 69 73 74 65 72 73 20 50 31 2e  .  Registers P1.
a150: 2e 50 31 2b 50 33 2d 31 20 61 72 65 0a 2a 2a 20  .P1+P3-1 are.** 
a160: 6c 65 66 74 20 68 6f 6c 64 69 6e 67 20 61 20 4e  left holding a N
a170: 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 6e 20 65  ULL.  It is an e
a180: 72 72 6f 72 20 66 6f 72 20 72 65 67 69 73 74 65  rror for registe
a190: 72 20 72 61 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e  r ranges.** P1..
a1a0: 50 31 2b 50 33 2d 31 20 61 6e 64 20 50 32 2e 2e  P1+P3-1 and P2..
a1b0: 50 32 2b 50 33 2d 31 20 74 6f 20 6f 76 65 72 6c  P2+P3-1 to overl
a1c0: 61 70 2e 20 20 49 74 20 69 73 20 61 6e 20 65 72  ap.  It is an er
a1d0: 72 6f 72 0a 2a 2a 20 66 6f 72 20 50 33 20 74 6f  ror.** for P3 to
a1e0: 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20 31 2e   be less than 1.
a1f0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65  .*/.case OP_Move
a200: 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20  : {.  int n;    
a210: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
a220: 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 6c 65   of registers le
a230: 66 74 20 74 6f 20 63 6f 70 79 20 2a 2f 0a 20 20  ft to copy */.  
a240: 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20 20  int p1;         
a250: 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20   /* Register to 
a260: 63 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a 20 20 69  copy from */.  i
a270: 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20 20 20  nt p2;          
a280: 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 63  /* Register to c
a290: 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d  opy to */..  n =
a2a0: 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 31 20 3d   pOp->p3;.  p1 =
a2b0: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d   pOp->p1;.  p2 =
a2c0: 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65   pOp->p2;.  asse
a2d0: 72 74 28 20 6e 3e 30 20 26 26 20 70 31 3e 30 20  rt( n>0 && p1>0 
a2e0: 26 26 20 70 32 3e 30 20 29 3b 0a 20 20 61 73 73  && p2>0 );.  ass
a2f0: 65 72 74 28 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c  ert( p1+n<=p2 ||
a300: 20 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20   p2+n<=p1 );..  
a310: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 31 5d  pIn1 = &aMem[p1]
a320: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
a330: 5b 70 32 5d 3b 0a 20 20 64 6f 7b 0a 20 20 20 20  [p2];.  do{.    
a340: 61 73 73 65 72 74 28 20 70 4f 75 74 3c 3d 26 61  assert( pOut<=&a
a350: 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  Mem[(p->nMem+1 -
a360: 20 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b   p->nCursor)] );
a370: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e  .    assert( pIn
a380: 31 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65  1<=&aMem[(p->nMe
a390: 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
a3a0: 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  )] );.    assert
a3b0: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e  ( memIsValid(pIn
a3c0: 31 29 20 29 3b 0a 20 20 20 20 6d 65 6d 41 62 6f  1) );.    memAbo
a3d0: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
a3e0: 75 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ut);.    sqlite3
a3f0: 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74  VdbeMemMove(pOut
a400: 2c 20 70 49 6e 31 29 3b 0a 23 69 66 64 65 66 20  , pIn1);.#ifdef 
a410: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
a420: 20 69 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70   if( pOut->pScop
a430: 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d 5b 70 31 5d  yFrom>=&aMem[p1]
a440: 20 26 26 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79   && pOut->pScopy
a450: 46 72 6f 6d 3c 70 4f 75 74 20 29 7b 0a 20 20 20  From<pOut ){.   
a460: 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46     pOut->pScopyF
a470: 72 6f 6d 20 2b 3d 20 70 4f 70 2d 3e 70 32 20 2d  rom += pOp->p2 -
a480: 20 70 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69   p1;.    }.#endi
a490: 66 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72 61  f.    Deephemera
a4a0: 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 20 20 20 20  lize(pOut);.    
a4b0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
a4c0: 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  2++, pOut);.    
a4d0: 70 49 6e 31 2b 2b 3b 0a 20 20 20 20 70 4f 75 74  pIn1++;.    pOut
a4e0: 2b 2b 3b 0a 20 20 7d 77 68 69 6c 65 28 20 2d 2d  ++;.  }while( --
a4f0: 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  n );.  break;.}.
a500: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 70 79  ./* Opcode: Copy
a510: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
a520: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 40   Synopsis: r[P2@
a530: 50 33 2b 31 5d 3d 72 5b 50 31 40 50 33 2b 31 5d  P3+1]=r[P1@P3+1]
a540: 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 63 6f  .**.** Make a co
a550: 70 79 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  py of registers 
a560: 50 31 2e 2e 50 31 2b 50 33 20 69 6e 74 6f 20 72  P1..P1+P3 into r
a570: 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b  egisters P2..P2+
a580: 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  P3..**.** This i
a590: 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73  nstruction makes
a5a0: 20 61 20 64 65 65 70 20 63 6f 70 79 20 6f 66 20   a deep copy of 
a5b0: 74 68 65 20 76 61 6c 75 65 2e 20 20 41 20 64 75  the value.  A du
a5c0: 70 6c 69 63 61 74 65 0a 2a 2a 20 69 73 20 6d 61  plicate.** is ma
a5d0: 64 65 20 6f 66 20 61 6e 79 20 73 74 72 69 6e 67  de of any string
a5e0: 20 6f 72 20 62 6c 6f 62 20 63 6f 6e 73 74 61 6e   or blob constan
a5f0: 74 2e 20 20 53 65 65 20 61 6c 73 6f 20 4f 50 5f  t.  See also OP_
a600: 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  SCopy..*/.case O
a610: 50 5f 43 6f 70 79 3a 20 7b 0a 20 20 69 6e 74 20  P_Copy: {.  int 
a620: 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70  n;..  n = pOp->p
a630: 33 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  3;.  pIn1 = &aMe
a640: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
a650: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
a660: 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
a670: 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 77  Out!=pIn1 );.  w
a680: 68 69 6c 65 28 20 31 20 29 7b 0a 20 20 20 20 6d  hile( 1 ){.    m
a690: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
a6a0: 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 73 71  p, pOut);.    sq
a6b0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
a6c0: 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49  lowCopy(pOut, pI
a6d0: 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a  n1, MEM_Ephem);.
a6e0: 20 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69      Deephemerali
a6f0: 7a 65 28 70 4f 75 74 29 3b 0a 23 69 66 64 65 66  ze(pOut);.#ifdef
a700: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
a710: 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72    pOut->pScopyFr
a720: 6f 6d 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20  om = 0;.#endif. 
a730: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
a740: 45 28 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70  E(pOp->p2+pOp->p
a750: 33 2d 6e 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  3-n, pOut);.    
a760: 69 66 28 20 28 6e 2d 2d 29 3d 3d 30 20 29 20 62  if( (n--)==0 ) b
a770: 72 65 61 6b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b  reak;.    pOut++
a780: 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20  ;.    pIn1++;.  
a790: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
a7a0: 20 4f 70 63 6f 64 65 3a 20 53 43 6f 70 79 20 50   Opcode: SCopy P
a7b0: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
a7c0: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 5b  nopsis: r[P2]=r[
a7d0: 50 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61  P1].**.** Make a
a7e0: 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66   shallow copy of
a7f0: 20 72 65 67 69 73 74 65 72 20 50 31 20 69 6e 74   register P1 int
a800: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
a810: 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
a820: 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68  ction makes a sh
a830: 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 74 68  allow copy of th
a840: 65 20 76 61 6c 75 65 2e 20 20 49 66 20 74 68 65  e value.  If the
a850: 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73   value.** is a s
a860: 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74  tring or blob, t
a870: 68 65 6e 20 74 68 65 20 63 6f 70 79 20 69 73 20  hen the copy is 
a880: 6f 6e 6c 79 20 61 20 70 6f 69 6e 74 65 72 20 74  only a pointer t
a890: 6f 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61  o the.** origina
a8a0: 6c 20 61 6e 64 20 68 65 6e 63 65 20 69 66 20 74  l and hence if t
a8b0: 68 65 20 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e  he original chan
a8c0: 67 65 73 20 73 6f 20 77 69 6c 6c 20 74 68 65 20  ges so will the 
a8d0: 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20  copy..** Worse, 
a8e0: 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  if the original 
a8f0: 69 73 20 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20  is deallocated, 
a900: 74 68 65 20 63 6f 70 79 20 62 65 63 6f 6d 65 73  the copy becomes
a910: 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75   invalid..** Thu
a920: 73 20 74 68 65 20 70 72 6f 67 72 61 6d 20 6d 75  s the program mu
a930: 73 74 20 67 75 61 72 61 6e 74 65 65 20 74 68 61  st guarantee tha
a940: 74 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 77  t the original w
a950: 69 6c 6c 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a  ill not change.*
a960: 2a 20 64 75 72 69 6e 67 20 74 68 65 20 6c 69 66  * during the lif
a970: 65 74 69 6d 65 20 6f 66 20 74 68 65 20 63 6f 70  etime of the cop
a980: 79 2e 20 20 55 73 65 20 4f 50 5f 43 6f 70 79 20  y.  Use OP_Copy 
a990: 74 6f 20 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65  to make a comple
a9a0: 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63  te.** copy..*/.c
a9b0: 61 73 65 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 20  ase OP_SCopy: { 
a9c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
a9d0: 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  t2 */.  pIn1 = &
a9e0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
a9f0: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
aa00: 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74  p->p2];.  assert
aa10: 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a  ( pOut!=pIn1 );.
aa20: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
aa30: 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74  ShallowCopy(pOut
aa40: 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65  , pIn1, MEM_Ephe
aa50: 6d 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  m);.#ifdef SQLIT
aa60: 45 5f 44 45 42 55 47 0a 20 20 70 4f 75 74 2d 3e  E_DEBUG.  pOut->
aa70: 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 70 49 6e  pScopyFrom = pIn
aa80: 31 3b 0a 20 20 70 4f 75 74 2d 3e 6d 53 63 6f 70  1;.  pOut->mScop
aa90: 79 46 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66  yFlags = pIn1->f
aaa0: 6c 61 67 73 3b 0a 23 65 6e 64 69 66 0a 20 20 62  lags;.#endif.  b
aab0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
aac0: 64 65 3a 20 49 6e 74 43 6f 70 79 20 50 31 20 50  de: IntCopy P1 P
aad0: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
aae0: 73 69 73 3a 20 72 5b 50 32 5d 3d 72 5b 50 31 5d  sis: r[P2]=r[P1]
aaf0: 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20  .**.** Transfer 
ab00: 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  the integer valu
ab10: 65 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74  e held in regist
ab20: 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73  er P1 into regis
ab30: 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68  ter P2..**.** Th
ab40: 69 73 20 69 73 20 61 6e 20 6f 70 74 69 6d 69 7a  is is an optimiz
ab50: 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 53 43  ed version of SC
ab60: 6f 70 79 20 74 68 61 74 20 77 6f 72 6b 73 20 6f  opy that works o
ab70: 6e 6c 79 20 66 6f 72 20 69 6e 74 65 67 65 72 0a  nly for integer.
ab80: 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a 2f 0a 63 61  ** values..*/.ca
ab90: 73 65 20 4f 50 5f 49 6e 74 43 6f 70 79 3a 20 7b  se OP_IntCopy: {
aba0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
abb0: 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  ut2 */.  pIn1 = 
abc0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
abd0: 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d    assert( (pIn1-
abe0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
abf0: 29 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20 3d  )!=0 );.  pOut =
ac00: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
ac10: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
ac20: 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c 20  mSetInt64(pOut, 
ac30: 70 49 6e 31 2d 3e 75 2e 69 29 3b 0a 20 20 62 72  pIn1->u.i);.  br
ac40: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
ac50: 65 3a 20 52 65 73 75 6c 74 52 6f 77 20 50 31 20  e: ResultRow P1 
ac60: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
ac70: 70 73 69 73 3a 20 6f 75 74 70 75 74 3d 72 5b 50  psis: output=r[P
ac80: 31 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20  1@P2].**.** The 
ac90: 72 65 67 69 73 74 65 72 73 20 50 31 20 74 68 72  registers P1 thr
aca0: 6f 75 67 68 20 50 31 2b 50 32 2d 31 20 63 6f 6e  ough P1+P2-1 con
acb0: 74 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f  tain a single ro
acc0: 77 20 6f 66 0a 2a 2a 20 72 65 73 75 6c 74 73 2e  w of.** results.
acd0: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 63 61 75   This opcode cau
ace0: 73 65 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f  ses the sqlite3_
acf0: 73 74 65 70 28 29 20 63 61 6c 6c 20 74 6f 20 74  step() call to t
ad00: 65 72 6d 69 6e 61 74 65 0a 2a 2a 20 77 69 74 68  erminate.** with
ad10: 20 61 6e 20 53 51 4c 49 54 45 5f 52 4f 57 20 72   an SQLITE_ROW r
ad20: 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 69  eturn code and i
ad30: 74 20 73 65 74 73 20 75 70 20 74 68 65 20 73 71  t sets up the sq
ad40: 6c 69 74 65 33 5f 73 74 6d 74 0a 2a 2a 20 73 74  lite3_stmt.** st
ad50: 72 75 63 74 75 72 65 20 74 6f 20 70 72 6f 76 69  ructure to provi
ad60: 64 65 20 61 63 63 65 73 73 20 74 6f 20 74 68 65  de access to the
ad70: 20 72 28 50 31 29 2e 2e 72 28 50 31 2b 50 32 2d   r(P1)..r(P1+P2-
ad80: 31 29 20 76 61 6c 75 65 73 20 61 73 0a 2a 2a 20  1) values as.** 
ad90: 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 2e 0a  the result row..
ada0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 75 6c  */.case OP_Resul
adb0: 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70  tRow: {.  Mem *p
adc0: 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  Mem;.  int i;.  
add0: 61 73 73 65 72 74 28 20 70 2d 3e 6e 52 65 73 43  assert( p->nResC
ade0: 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29  olumn==pOp->p2 )
adf0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
ae00: 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  >p1>0 );.  asser
ae10: 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e  t( pOp->p1+pOp->
ae20: 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p2<=(p->nMem+1 -
ae30: 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29   p->nCursor)+1 )
ae40: 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
ae50: 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f  E_OMIT_PROGRESS_
ae60: 43 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 52 75  CALLBACK.  /* Ru
ae70: 6e 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  n the progress c
ae80: 6f 75 6e 74 65 72 20 6a 75 73 74 20 62 65 66 6f  ounter just befo
ae90: 72 65 20 72 65 74 75 72 6e 69 6e 67 2e 0a 20 20  re returning..  
aea0: 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72  */.  if( db->xPr
aeb0: 6f 67 72 65 73 73 21 3d 30 0a 20 20 20 26 26 20  ogress!=0.   && 
aec0: 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f 67 72 65  nVmStep>=nProgre
aed0: 73 73 4c 69 6d 69 74 20 0a 20 20 20 26 26 20 64  ssLimit .   && d
aee0: 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d  b->xProgress(db-
aef0: 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29 21 3d  >pProgressArg)!=
af00: 30 0a 20 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  0.  ){.    rc = 
af10: 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54  SQLITE_INTERRUPT
af20: 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  ;.    goto abort
af30: 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
af40: 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20   }.#endif..  /* 
af50: 49 66 20 74 68 69 73 20 73 74 61 74 65 6d 65 6e  If this statemen
af60: 74 20 68 61 73 20 76 69 6f 6c 61 74 65 64 20 69  t has violated i
af70: 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e  mmediate foreign
af80: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
af90: 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74 20 72 65  , do.  ** not re
afa0: 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  turn the number 
afb0: 6f 66 20 72 6f 77 73 20 6d 6f 64 69 66 69 65 64  of rows modified
afc0: 2e 20 41 6e 64 20 64 6f 20 6e 6f 74 20 52 45 4c  . And do not REL
afd0: 45 41 53 45 20 74 68 65 20 73 74 61 74 65 6d 65  EASE the stateme
afe0: 6e 74 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74  nt.  ** transact
aff0: 69 6f 6e 2e 20 49 74 20 6e 65 65 64 73 20 74 6f  ion. It needs to
b000: 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e   be rolled back.
b010: 20 20 2a 2f 0a 20 20 69 66 28 20 53 51 4c 49 54    */.  if( SQLIT
b020: 45 5f 4f 4b 21 3d 28 72 63 20 3d 20 73 71 6c 69  E_OK!=(rc = sqli
b030: 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70  te3VdbeCheckFk(p
b040: 2c 20 30 29 29 20 29 7b 0a 20 20 20 20 61 73 73  , 0)) ){.    ass
b050: 65 72 74 28 20 64 62 2d 3e 66 6c 61 67 73 26 53  ert( db->flags&S
b060: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
b070: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
b080: 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61  ->usesStmtJourna
b090: 6c 20 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62  l );.    goto ab
b0a0: 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
b0b0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74  ;.  }..  /* If t
b0c0: 68 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52  he SQLITE_CountR
b0d0: 6f 77 73 20 66 6c 61 67 20 69 73 20 73 65 74 20  ows flag is set 
b0e0: 69 6e 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73  in sqlite3.flags
b0f0: 20 6d 61 73 6b 2c 20 74 68 65 6e 20 0a 20 20 2a   mask, then .  *
b100: 2a 20 44 4d 4c 20 73 74 61 74 65 6d 65 6e 74 73  * DML statements
b110: 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63   invoke this opc
b120: 6f 64 65 20 74 6f 20 72 65 74 75 72 6e 20 74 68  ode to return th
b130: 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
b140: 20 0a 20 20 2a 2a 20 6d 6f 64 69 66 69 65 64 20   .  ** modified 
b150: 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68 69  to the user. Thi
b160: 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61  s is the only wa
b170: 79 20 74 68 61 74 20 61 20 56 4d 20 74 68 61 74  y that a VM that
b180: 0a 20 20 2a 2a 20 6f 70 65 6e 73 20 61 20 73 74  .  ** opens a st
b190: 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
b1a0: 69 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b 65 20 74  ion may invoke t
b1b0: 68 69 73 20 6f 70 63 6f 64 65 2e 0a 20 20 2a 2a  his opcode..  **
b1c0: 0a 20 20 2a 2a 20 49 6e 20 63 61 73 65 20 74 68  .  ** In case th
b1d0: 69 73 20 69 73 20 73 75 63 68 20 61 20 73 74 61  is is such a sta
b1e0: 74 65 6d 65 6e 74 2c 20 63 6c 6f 73 65 20 61 6e  tement, close an
b1f0: 79 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  y statement tran
b200: 73 61 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f 70 65  saction.  ** ope
b210: 6e 65 64 20 62 79 20 74 68 69 73 20 56 4d 20 62  ned by this VM b
b220: 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20  efore returning 
b230: 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 75  control to the u
b240: 73 65 72 2e 20 54 68 69 73 20 69 73 20 74 6f 0a  ser. This is to.
b250: 20 20 2a 2a 20 65 6e 73 75 72 65 20 74 68 61 74    ** ensure that
b260: 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73   statement-trans
b270: 61 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 77 61  actions are alwa
b280: 79 73 20 6e 65 73 74 65 64 2c 20 6e 6f 74 20 6f  ys nested, not o
b290: 76 65 72 6c 61 70 70 69 6e 67 2e 0a 20 20 2a 2a  verlapping..  **
b2a0: 20 49 66 20 74 68 65 20 6f 70 65 6e 20 73 74 61   If the open sta
b2b0: 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69  tement-transacti
b2c0: 6f 6e 20 69 73 20 6e 6f 74 20 63 6c 6f 73 65 64  on is not closed
b2d0: 20 68 65 72 65 2c 20 74 68 65 6e 20 74 68 65 20   here, then the 
b2e0: 75 73 65 72 0a 20 20 2a 2a 20 6d 61 79 20 73 74  user.  ** may st
b2f0: 65 70 20 61 6e 6f 74 68 65 72 20 56 4d 20 74 68  ep another VM th
b300: 61 74 20 6f 70 65 6e 73 20 69 74 73 20 6f 77 6e  at opens its own
b310: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
b320: 61 63 74 69 6f 6e 2e 20 54 68 69 73 0a 20 20 2a  action. This.  *
b330: 2a 20 6d 61 79 20 6c 65 61 64 20 74 6f 20 6f 76  * may lead to ov
b340: 65 72 6c 61 70 70 69 6e 67 20 73 74 61 74 65 6d  erlapping statem
b350: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ent transactions
b360: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20  ..  **.  ** The 
b370: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
b380: 63 74 69 6f 6e 20 69 73 20 6e 65 76 65 72 20 61  ction is never a
b390: 20 74 6f 70 2d 6c 65 76 65 6c 20 74 72 61 6e 73   top-level trans
b3a0: 61 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 0a 20  action.  Hence. 
b3b0: 20 2a 2a 20 74 68 65 20 52 45 4c 45 41 53 45 20   ** the RELEASE 
b3c0: 63 61 6c 6c 20 62 65 6c 6f 77 20 63 61 6e 20 6e  call below can n
b3d0: 65 76 65 72 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a  ever fail..  */.
b3e0: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 69 53 74    assert( p->iSt
b3f0: 61 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20 64 62  atement==0 || db
b400: 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43  ->flags&SQLITE_C
b410: 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 72 63  ountRows );.  rc
b420: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 6c   = sqlite3VdbeCl
b430: 6f 73 65 53 74 61 74 65 6d 65 6e 74 28 70 2c 20  oseStatement(p, 
b440: 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
b450: 45 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63  E);.  assert( rc
b460: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a  ==SQLITE_OK );..
b470: 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20    /* Invalidate 
b480: 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c 20 63 75  all ephemeral cu
b490: 72 73 6f 72 20 72 6f 77 20 63 61 63 68 65 73 20  rsor row caches 
b4a0: 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65 43 74 72  */.  p->cacheCtr
b4b0: 20 3d 20 28 70 2d 3e 63 61 63 68 65 43 74 72 20   = (p->cacheCtr 
b4c0: 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61  + 2)|1;..  /* Ma
b4d0: 6b 65 20 73 75 72 65 20 74 68 65 20 72 65 73 75  ke sure the resu
b4e0: 6c 74 73 20 6f 66 20 74 68 65 20 63 75 72 72 65  lts of the curre
b4f0: 6e 74 20 72 6f 77 20 61 72 65 20 5c 30 30 30 20  nt row are \000 
b500: 74 65 72 6d 69 6e 61 74 65 64 0a 20 20 2a 2a 20  terminated.  ** 
b510: 61 6e 64 20 68 61 76 65 20 61 6e 20 61 73 73 69  and have an assi
b520: 67 6e 65 64 20 74 79 70 65 2e 20 20 54 68 65 20  gned type.  The 
b530: 72 65 73 75 6c 74 73 20 61 72 65 20 64 65 2d 65  results are de-e
b540: 70 68 65 6d 65 72 61 6c 69 7a 65 64 20 61 73 0a  phemeralized as.
b550: 20 20 2a 2a 20 61 20 73 69 64 65 20 65 66 66 65    ** a side effe
b560: 63 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d 20  ct..  */.  pMem 
b570: 3d 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20  = p->pResultSet 
b580: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
b590: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70  ;.  for(i=0; i<p
b5a0: 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20 20  Op->p2; i++){.  
b5b0: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
b5c0: 61 6c 69 64 28 26 70 4d 65 6d 5b 69 5d 29 20 29  alid(&pMem[i]) )
b5d0: 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72 61  ;.    Deephemera
b5e0: 6c 69 7a 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a  lize(&pMem[i]);.
b5f0: 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4d 65      assert( (pMe
b600: 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d  m[i].flags & MEM
b610: 5f 45 70 68 65 6d 29 3d 3d 30 0a 20 20 20 20 20  _Ephem)==0.     
b620: 20 20 20 20 20 20 20 7c 7c 20 28 70 4d 65 6d 5b         || (pMem[
b630: 69 5d 2e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  i].flags & (MEM_
b640: 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d  Str|MEM_Blob))==
b650: 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 );.    sqlite3
b660: 56 64 62 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e  VdbeMemNulTermin
b670: 61 74 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20  ate(&pMem[i]);. 
b680: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
b690: 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70 4d  E(pOp->p1+i, &pM
b6a0: 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69 66  em[i]);.  }.  if
b6b0: 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ( db->mallocFail
b6c0: 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  ed ) goto no_mem
b6d0: 3b 0a 0a 20 20 69 66 28 20 64 62 2d 3e 6d 54 72  ;..  if( db->mTr
b6e0: 61 63 65 20 26 20 53 51 4c 49 54 45 5f 54 52 41  ace & SQLITE_TRA
b6f0: 43 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 64 62  CE_ROW ){.    db
b700: 2d 3e 78 54 72 61 63 65 28 53 51 4c 49 54 45 5f  ->xTrace(SQLITE_
b710: 54 52 41 43 45 5f 52 4f 57 2c 20 64 62 2d 3e 70  TRACE_ROW, db->p
b720: 54 72 61 63 65 41 72 67 2c 20 70 2c 20 30 29 3b  TraceArg, p, 0);
b730: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 74 75 72  .  }..  /* Retur
b740: 6e 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a  n SQLITE_ROW.  *
b750: 2f 0a 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74  /.  p->pc = (int
b760: 29 28 70 4f 70 20 2d 20 61 4f 70 29 20 2b 20 31  )(pOp - aOp) + 1
b770: 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  ;.  rc = SQLITE_
b780: 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65  ROW;.  goto vdbe
b790: 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f  _return;.}../* O
b7a0: 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50 31  pcode: Concat P1
b7b0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
b7c0: 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b  nopsis: r[P3]=r[
b7d0: 50 32 5d 2b 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  P2]+r[P1].**.** 
b7e0: 41 64 64 20 74 68 65 20 74 65 78 74 20 69 6e 20  Add the text in 
b7f0: 72 65 67 69 73 74 65 72 20 50 31 20 6f 6e 74 6f  register P1 onto
b800: 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
b810: 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69 73  text in.** regis
b820: 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65  ter P2 and store
b830: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
b840: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
b850: 66 20 65 69 74 68 65 72 20 74 68 65 20 50 31 20  f either the P1 
b860: 6f 72 20 50 32 20 74 65 78 74 20 61 72 65 20 4e  or P2 text are N
b870: 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 4e  ULL then store N
b880: 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a  ULL in P3..**.**
b890: 20 20 20 50 33 20 3d 20 50 32 20 7c 7c 20 50 31     P3 = P2 || P1
b8a0: 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c  .**.** It is ill
b8b0: 65 67 61 6c 20 66 6f 72 20 50 31 20 61 6e 64 20  egal for P1 and 
b8c0: 50 33 20 74 6f 20 62 65 20 74 68 65 20 73 61 6d  P3 to be the sam
b8d0: 65 20 72 65 67 69 73 74 65 72 2e 20 53 6f 6d 65  e register. Some
b8e0: 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33 20  times,.** if P3 
b8f0: 69 73 20 74 68 65 20 73 61 6d 65 20 72 65 67 69  is the same regi
b900: 73 74 65 72 20 61 73 20 50 32 2c 20 74 68 65 20  ster as P2, the 
b910: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69  implementation i
b920: 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f  s able.** to avo
b930: 69 64 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a 2a  id a memcpy()..*
b940: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61 74  /.case OP_Concat
b950: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
b960: 20 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e 43   same as TK_CONC
b970: 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  AT, in1, in2, ou
b980: 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74  t3 */.  i64 nByt
b990: 65 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  e;..  pIn1 = &aM
b9a0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
b9b0: 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
b9c0: 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p2];.  pOut = &
b9d0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
b9e0: 20 61 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70   assert( pIn1!=p
b9f0: 4f 75 74 20 29 3b 0a 20 20 69 66 28 20 28 70 49  Out );.  if( (pI
ba00: 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32  n1->flags | pIn2
ba10: 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e  ->flags) & MEM_N
ba20: 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ull ){.    sqlit
ba30: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
ba40: 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61  (pOut);.    brea
ba50: 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 45 78 70  k;.  }.  if( Exp
ba60: 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 20 7c 7c  andBlob(pIn1) ||
ba70: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32   ExpandBlob(pIn2
ba80: 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  ) ) goto no_mem;
ba90: 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e  .  Stringify(pIn
baa0: 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  1, encoding);.  
bab0: 53 74 72 69 6e 67 69 66 79 28 70 49 6e 32 2c 20  Stringify(pIn2, 
bac0: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e 42 79  encoding);.  nBy
bad0: 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20 70  te = pIn1->n + p
bae0: 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e 42  In2->n;.  if( nB
baf0: 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  yte>db->aLimit[S
bb00: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
bb10: 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  TH] ){.    goto 
bb20: 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 69  too_big;.  }.  i
bb30: 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
bb40: 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74  mGrow(pOut, (int
bb50: 29 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74 3d 3d  )nByte+2, pOut==
bb60: 70 49 6e 32 29 20 29 7b 0a 20 20 20 20 67 6f 74  pIn2) ){.    got
bb70: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
bb80: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
bb90: 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a 20  Out, MEM_Str);. 
bba0: 20 69 66 28 20 70 4f 75 74 21 3d 70 49 6e 32 20   if( pOut!=pIn2 
bbb0: 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 4f  ){.    memcpy(pO
bbc0: 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20  ut->z, pIn2->z, 
bbd0: 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20  pIn2->n);.  }.  
bbe0: 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e 7a 5b  memcpy(&pOut->z[
bbf0: 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e  pIn2->n], pIn1->
bc00: 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70  z, pIn1->n);.  p
bc10: 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 3d 30 3b  Out->z[nByte]=0;
bc20: 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65  .  pOut->z[nByte
bc30: 2b 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d  +1] = 0;.  pOut-
bc40: 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65  >flags |= MEM_Te
bc50: 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20  rm;.  pOut->n = 
bc60: 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f  (int)nByte;.  pO
bc70: 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69  ut->enc = encodi
bc80: 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  ng;.  UPDATE_MAX
bc90: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
bca0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
bcb0: 4f 70 63 6f 64 65 3a 20 41 64 64 20 50 31 20 50  Opcode: Add P1 P
bcc0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
bcd0: 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31  psis: r[P3]=r[P1
bce0: 5d 2b 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 41 64  ]+r[P2].**.** Ad
bcf0: 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  d the value in r
bd00: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 74 68  egister P1 to th
bd10: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
bd20: 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74  ter P2.** and st
bd30: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
bd40: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
bd50: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
bd60: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
bd70: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
bd80: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 6c  /./* Opcode: Mul
bd90: 74 69 70 6c 79 20 50 31 20 50 32 20 50 33 20 2a  tiply P1 P2 P3 *
bda0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
bdb0: 72 5b 50 33 5d 3d 72 5b 50 31 5d 2a 72 5b 50 32  r[P3]=r[P1]*r[P2
bdc0: 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74 69  ].**.**.** Multi
bdd0: 70 6c 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ply the value in
bde0: 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20   register P1 by 
bdf0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
be00: 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20  ister P2.** and 
be10: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
be20: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
be30: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
be40: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
be50: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
be60: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
be70: 75 62 74 72 61 63 74 20 50 31 20 50 32 20 50 33  ubtract P1 P2 P3
be80: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
be90: 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2d 72 5b  : r[P3]=r[P2]-r[
bea0: 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 75 62 74 72 61  P1].**.** Subtra
beb0: 63 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ct the value in 
bec0: 72 65 67 69 73 74 65 72 20 50 31 20 66 72 6f 6d  register P1 from
bed0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
bee0: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
bef0: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
bf00: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
bf10: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
bf20: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
bf30: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
bf40: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
bf50: 44 69 76 69 64 65 20 50 31 20 50 32 20 50 33 20  Divide P1 P2 P3 
bf60: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
bf70: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2f 72 5b 50   r[P3]=r[P2]/r[P
bf80: 31 5d 0a 2a 2a 0a 2a 2a 20 44 69 76 69 64 65 20  1].**.** Divide 
bf90: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
bfa0: 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65 20  ister P1 by the 
bfb0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
bfc0: 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72  r P2.** and stor
bfd0: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
bfe0: 72 65 67 69 73 74 65 72 20 50 33 20 28 50 33 3d  register P3 (P3=
bff0: 50 32 2f 50 31 29 2e 20 49 66 20 74 68 65 20 76  P2/P1). If the v
c000: 61 6c 75 65 20 69 6e 20 0a 2a 2a 20 72 65 67 69  alue in .** regi
c010: 73 74 65 72 20 50 31 20 69 73 20 7a 65 72 6f 2c  ster P1 is zero,
c020: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
c030: 20 69 73 20 4e 55 4c 4c 2e 20 49 66 20 65 69 74   is NULL. If eit
c040: 68 65 72 20 69 6e 70 75 74 20 69 73 20 0a 2a 2a  her input is .**
c050: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
c060: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
c070: 20 4f 70 63 6f 64 65 3a 20 52 65 6d 61 69 6e 64   Opcode: Remaind
c080: 65 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  er P1 P2 P3 * *.
c090: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
c0a0: 33 5d 3d 72 5b 50 32 5d 25 72 5b 50 31 5d 0a 2a  3]=r[P2]%r[P1].*
c0b0: 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65 20 74 68 65  *.** Compute the
c0c0: 20 72 65 6d 61 69 6e 64 65 72 20 61 66 74 65 72   remainder after
c0d0: 20 69 6e 74 65 67 65 72 20 72 65 67 69 73 74 65   integer registe
c0e0: 72 20 50 32 20 69 73 20 64 69 76 69 64 65 64 20  r P2 is divided 
c0f0: 62 79 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  by .** register 
c100: 50 31 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  P1 and store the
c110: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
c120: 74 65 72 20 50 33 2e 20 0a 2a 2a 20 49 66 20 74  ter P3. .** If t
c130: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
c140: 73 74 65 72 20 50 31 20 69 73 20 7a 65 72 6f 20  ster P1 is zero 
c150: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
c160: 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  LL..** If either
c170: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
c180: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
c190: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
c1a0: 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20 20 20  _Add:           
c1b0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
c1c0: 61 73 20 54 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c  as TK_PLUS, in1,
c1d0: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
c1e0: 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20  se OP_Subtract: 
c1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c200: 73 61 6d 65 20 61 73 20 54 4b 5f 4d 49 4e 55 53  same as TK_MINUS
c210: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
c220: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 6c 74   */.case OP_Mult
c230: 69 70 6c 79 3a 20 20 20 20 20 20 20 20 20 20 20  iply:           
c240: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
c250: 5f 53 54 41 52 2c 20 69 6e 31 2c 20 69 6e 32 2c  _STAR, in1, in2,
c260: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
c270: 5f 44 69 76 69 64 65 3a 20 20 20 20 20 20 20 20  _Divide:        
c280: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
c290: 61 73 20 54 4b 5f 53 4c 41 53 48 2c 20 69 6e 31  as TK_SLASH, in1
c2a0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
c2b0: 61 73 65 20 4f 50 5f 52 65 6d 61 69 6e 64 65 72  ase OP_Remainder
c2c0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
c2d0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 45 4d 2c   same as TK_REM,
c2e0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
c2f0: 2a 2f 0a 20 20 63 68 61 72 20 62 49 6e 74 69 6e  */.  char bIntin
c300: 74 3b 20 20 20 2f 2a 20 53 74 61 72 74 65 64 20  t;   /* Started 
c310: 6f 75 74 20 61 73 20 74 77 6f 20 69 6e 74 65 67  out as two integ
c320: 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 20  er operands */. 
c330: 20 75 31 36 20 66 6c 61 67 73 3b 20 20 20 20 20   u16 flags;     
c340: 20 2f 2a 20 43 6f 6d 62 69 6e 65 64 20 4d 45 4d   /* Combined MEM
c350: 5f 2a 20 66 6c 61 67 73 20 66 72 6f 6d 20 62 6f  _* flags from bo
c360: 74 68 20 69 6e 70 75 74 73 20 2a 2f 0a 20 20 75  th inputs */.  u
c370: 31 36 20 74 79 70 65 31 3b 20 20 20 20 20 20 2f  16 type1;      /
c380: 2a 20 4e 75 6d 65 72 69 63 20 74 79 70 65 20 6f  * Numeric type o
c390: 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a  f left operand *
c3a0: 2f 0a 20 20 75 31 36 20 74 79 70 65 32 3b 20 20  /.  u16 type2;  
c3b0: 20 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74      /* Numeric t
c3c0: 79 70 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65  ype of right ope
c3d0: 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69 41  rand */.  i64 iA
c3e0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74  ;         /* Int
c3f0: 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20 6c 65  eger value of le
c400: 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ft operand */.  
c410: 69 36 34 20 69 42 3b 20 20 20 20 20 20 20 20 20  i64 iB;         
c420: 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65  /* Integer value
c430: 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e   of right operan
c440: 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 41  d */.  double rA
c450: 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76  ;      /* Real v
c460: 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65  alue of left ope
c470: 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65  rand */.  double
c480: 20 72 42 3b 20 20 20 20 20 20 2f 2a 20 52 65 61   rB;      /* Rea
c490: 6c 20 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74  l value of right
c4a0: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a 20 20 70   operand */..  p
c4b0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
c4c0: 3e 70 31 5d 3b 0a 20 20 74 79 70 65 31 20 3d 20  >p1];.  type1 = 
c4d0: 6e 75 6d 65 72 69 63 54 79 70 65 28 70 49 6e 31  numericType(pIn1
c4e0: 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  );.  pIn2 = &aMe
c4f0: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 74 79  m[pOp->p2];.  ty
c500: 70 65 32 20 3d 20 6e 75 6d 65 72 69 63 54 79 70  pe2 = numericTyp
c510: 65 28 70 49 6e 32 29 3b 0a 20 20 70 4f 75 74 20  e(pIn2);.  pOut 
c520: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
c530: 3b 0a 20 20 66 6c 61 67 73 20 3d 20 70 49 6e 31  ;.  flags = pIn1
c540: 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e  ->flags | pIn2->
c550: 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 74 79  flags;.  if( (ty
c560: 70 65 31 20 26 20 74 79 70 65 32 20 26 20 4d 45  pe1 & type2 & ME
c570: 4d 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20 20 20  M_Int)!=0 ){.   
c580: 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b   iA = pIn1->u.i;
c590: 0a 20 20 20 20 69 42 20 3d 20 70 49 6e 32 2d 3e  .    iB = pIn2->
c5a0: 75 2e 69 3b 0a 20 20 20 20 62 49 6e 74 69 6e 74  u.i;.    bIntint
c5b0: 20 3d 20 31 3b 0a 20 20 20 20 73 77 69 74 63 68   = 1;.    switch
c5c0: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
c5d0: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41  .      case OP_A
c5e0: 64 64 3a 20 20 20 20 20 20 20 69 66 28 20 73 71  dd:       if( sq
c5f0: 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 26 69  lite3AddInt64(&i
c600: 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f  B,iA) ) goto fp_
c610: 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20  math;  break;.  
c620: 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74      case OP_Subt
c630: 72 61 63 74 3a 20 20 69 66 28 20 73 71 6c 69 74  ract:  if( sqlit
c640: 65 33 53 75 62 49 6e 74 36 34 28 26 69 42 2c 69  e3SubInt64(&iB,i
c650: 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74  A) ) goto fp_mat
c660: 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  h;  break;.     
c670: 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c   case OP_Multipl
c680: 79 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33 4d  y:  if( sqlite3M
c690: 75 6c 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20  ulInt64(&iB,iA) 
c6a0: 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20  ) goto fp_math; 
c6b0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
c6c0: 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a  se OP_Divide: {.
c6d0: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
c6e0: 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65  0 ) goto arithme
c6f0: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
c700: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ll;.        if( 
c710: 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d 53 4d  iA==-1 && iB==SM
c720: 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 67  ALLEST_INT64 ) g
c730: 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 0a 20 20 20  oto fp_math;.   
c740: 20 20 20 20 20 69 42 20 2f 3d 20 69 41 3b 0a 20       iB /= iA;. 
c750: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
c760: 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61      }.      defa
c770: 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  ult: {.        i
c780: 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20  f( iA==0 ) goto 
c790: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
c7a0: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
c7b0: 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20     if( iA==-1 ) 
c7c0: 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  iA = 1;.        
c7d0: 69 42 20 25 3d 20 69 41 3b 0a 20 20 20 20 20 20  iB %= iA;.      
c7e0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
c7f0: 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d  .    }.    pOut-
c800: 3e 75 2e 69 20 3d 20 69 42 3b 0a 20 20 20 20 4d  >u.i = iB;.    M
c810: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
c820: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
c830: 7d 65 6c 73 65 20 69 66 28 20 28 66 6c 61 67 73  }else if( (flags
c840: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20   & MEM_Null)!=0 
c850: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 61 72 69 74  ){.    goto arit
c860: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
c870: 5f 6e 75 6c 6c 3b 0a 20 20 7d 65 6c 73 65 7b 0a  _null;.  }else{.
c880: 20 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 30 3b      bIntint = 0;
c890: 0a 66 70 5f 6d 61 74 68 3a 0a 20 20 20 20 72 41  .fp_math:.    rA
c8a0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65   = sqlite3VdbeRe
c8b0: 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20  alValue(pIn1);. 
c8c0: 20 20 20 72 42 20 3d 20 73 71 6c 69 74 65 33 56     rB = sqlite3V
c8d0: 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e  dbeRealValue(pIn
c8e0: 32 29 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20  2);.    switch( 
c8f0: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20  pOp->opcode ){. 
c900: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64       case OP_Add
c910: 3a 20 20 20 20 20 20 20 20 20 72 42 20 2b 3d 20  :         rB += 
c920: 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b  rA;       break;
c930: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53  .      case OP_S
c940: 75 62 74 72 61 63 74 3a 20 20 20 20 72 42 20 2d  ubtract:    rB -
c950: 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65 61  = rA;       brea
c960: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  k;.      case OP
c970: 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 72 42  _Multiply:    rB
c980: 20 2a 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72   *= rA;       br
c990: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
c9a0: 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20  OP_Divide: {.   
c9b0: 20 20 20 20 20 2f 2a 20 28 64 6f 75 62 6c 65 29       /* (double)
c9c0: 30 20 49 6e 20 63 61 73 65 20 6f 66 20 53 51 4c  0 In case of SQL
c9d0: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
c9e0: 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20 20  G_POINT... */.  
c9f0: 20 20 20 20 20 20 69 66 28 20 72 41 3d 3d 28 64        if( rA==(d
ca00: 6f 75 62 6c 65 29 30 20 29 20 67 6f 74 6f 20 61  ouble)0 ) goto a
ca10: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
ca20: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20  _is_null;.      
ca30: 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20 20 20 20    rB /= rA;.    
ca40: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
ca50: 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74   }.      default
ca60: 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 41 20 3d  : {.        iA =
ca70: 20 28 69 36 34 29 72 41 3b 0a 20 20 20 20 20 20   (i64)rA;.      
ca80: 20 20 69 42 20 3d 20 28 69 36 34 29 72 42 3b 0a    iB = (i64)rB;.
ca90: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
caa0: 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65  0 ) goto arithme
cab0: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
cac0: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ll;.        if( 
cad0: 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b  iA==-1 ) iA = 1;
cae0: 0a 20 20 20 20 20 20 20 20 72 42 20 3d 20 28 64  .        rB = (d
caf0: 6f 75 62 6c 65 29 28 69 42 20 25 20 69 41 29 3b  ouble)(iB % iA);
cb00: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
cb10: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 69        }.    }.#i
cb20: 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
cb30: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
cb40: 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
cb50: 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79  rB;.    MemSetTy
cb60: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
cb70: 5f 49 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 20  _Int);.#else.   
cb80: 20 69 66 28 20 73 71 6c 69 74 65 33 49 73 4e 61   if( sqlite3IsNa
cb90: 4e 28 72 42 29 20 29 7b 0a 20 20 20 20 20 20 67  N(rB) ){.      g
cba0: 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72  oto arithmetic_r
cbb0: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20  esult_is_null;. 
cbc0: 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75     }.    pOut->u
cbd0: 2e 72 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d  .r = rB;.    Mem
cbe0: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
cbf0: 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20 20  , MEM_Real);.   
cc00: 20 69 66 28 20 28 28 74 79 70 65 31 7c 74 79 70   if( ((type1|typ
cc10: 65 32 29 26 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30  e2)&MEM_Real)==0
cc20: 20 26 26 20 21 62 49 6e 74 69 6e 74 20 29 7b 0a   && !bIntint ){.
cc30: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
cc40: 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79  eIntegerAffinity
cc50: 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23 65  (pOut);.    }.#e
cc60: 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ndif.  }.  break
cc70: 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f 72 65  ;..arithmetic_re
cc80: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20  sult_is_null:.  
cc90: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
cca0: 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 62  tNull(pOut);.  b
ccb0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
ccc0: 64 65 3a 20 43 6f 6c 6c 53 65 71 20 50 31 20 2a  de: CollSeq P1 *
ccd0: 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69   * P4.**.** P4 i
cce0: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
ccf0: 20 43 6f 6c 6c 53 65 71 20 6f 62 6a 65 63 74 2e   CollSeq object.
cd00: 20 49 66 20 74 68 65 20 6e 65 78 74 20 63 61 6c   If the next cal
cd10: 6c 20 74 6f 20 61 20 75 73 65 72 20 66 75 6e 63  l to a user func
cd20: 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72 65  tion.** or aggre
cd30: 67 61 74 65 20 63 61 6c 6c 73 20 73 71 6c 69 74  gate calls sqlit
cd40: 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71  e3GetFuncCollSeq
cd50: 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74 69  (), this collati
cd60: 6f 6e 20 73 65 71 75 65 6e 63 65 20 77 69 6c 6c  on sequence will
cd70: 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e 65 64 2e  .** be returned.
cd80: 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79   This is used by
cd90: 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d 69   the built-in mi
cda0: 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e 64 20 6e  n(), max() and n
cdb0: 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63 74  ullif().** funct
cdc0: 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  ions..**.** If P
cdd0: 31 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  1 is not zero, t
cde0: 68 65 6e 20 69 74 20 69 73 20 61 20 72 65 67 69  hen it is a regi
cdf0: 73 74 65 72 20 74 68 61 74 20 61 20 73 75 62 73  ster that a subs
ce00: 65 71 75 65 6e 74 20 6d 69 6e 28 29 20 6f 72 0a  equent min() or.
ce10: 2a 2a 20 6d 61 78 28 29 20 61 67 67 72 65 67 61  ** max() aggrega
ce20: 74 65 20 77 69 6c 6c 20 73 65 74 20 74 6f 20 31  te will set to 1
ce30: 20 69 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   if the current 
ce40: 72 6f 77 20 69 73 20 6e 6f 74 20 74 68 65 20 6d  row is not the m
ce50: 69 6e 69 6d 75 6d 20 6f 72 0a 2a 2a 20 6d 61 78  inimum or.** max
ce60: 69 6d 75 6d 2e 20 20 54 68 65 20 50 31 20 72 65  imum.  The P1 re
ce70: 67 69 73 74 65 72 20 69 73 20 69 6e 69 74 69 61  gister is initia
ce80: 6c 69 7a 65 64 20 74 6f 20 30 20 62 79 20 74 68  lized to 0 by th
ce90: 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  is instruction..
cea0: 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66  **.** The interf
ceb0: 61 63 65 20 75 73 65 64 20 62 79 20 74 68 65 20  ace used by the 
cec0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  implementation o
ced0: 66 20 74 68 65 20 61 66 6f 72 65 6d 65 6e 74 69  f the aforementi
cee0: 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a 2a  oned functions.*
cef0: 2a 20 74 6f 20 72 65 74 72 69 65 76 65 20 74 68  * to retrieve th
cf00: 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  e collation sequ
cf10: 65 6e 63 65 20 73 65 74 20 62 79 20 74 68 69 73  ence set by this
cf20: 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f 74 20 61   opcode is not a
cf30: 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62 6c  vailable.** publ
cf40: 69 63 6c 79 2e 20 20 4f 6e 6c 79 20 62 75 69 6c  icly.  Only buil
cf50: 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73 20 68  t-in functions h
cf60: 61 76 65 20 61 63 63 65 73 73 20 74 6f 20 74 68  ave access to th
cf70: 69 73 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63  is feature..*/.c
cf80: 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20  ase OP_CollSeq: 
cf90: 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  {.  assert( pOp-
cfa0: 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c  >p4type==P4_COLL
cfb0: 53 45 51 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  SEQ );.  if( pOp
cfc0: 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c 69  ->p1 ){.    sqli
cfd0: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74  te3VdbeMemSetInt
cfe0: 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  64(&aMem[pOp->p1
cff0: 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72 65  ], 0);.  }.  bre
d000: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
d010: 3a 20 42 69 74 41 6e 64 20 50 31 20 50 32 20 50  : BitAnd P1 P2 P
d020: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
d030: 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 26 72  s: r[P3]=r[P1]&r
d040: 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20  [P2].**.** Take 
d050: 74 68 65 20 62 69 74 2d 77 69 73 65 20 41 4e 44  the bit-wise AND
d060: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69   of the values i
d070: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
d080: 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72  d P2 and.** stor
d090: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
d0a0: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
d0b0: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
d0c0: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
d0d0: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
d0e0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4f 72  /* Opcode: BitOr
d0f0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
d100: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
d110: 3d 72 5b 50 31 5d 7c 72 5b 50 32 5d 0a 2a 2a 0a  =r[P1]|r[P2].**.
d120: 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d  ** Take the bit-
d130: 77 69 73 65 20 4f 52 20 6f 66 20 74 68 65 20 76  wise OR of the v
d140: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
d150: 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a  r P1 and P2 and.
d160: 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  ** store the res
d170: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
d180: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
d190: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
d1a0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
d1b0: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
d1c0: 3a 20 53 68 69 66 74 4c 65 66 74 20 50 31 20 50  : ShiftLeft P1 P
d1d0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
d1e0: 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32  psis: r[P3]=r[P2
d1f0: 5d 3c 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53  ]<<r[P1].**.** S
d200: 68 69 66 74 20 74 68 65 20 69 6e 74 65 67 65 72  hift the integer
d210: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
d220: 65 72 20 50 32 20 74 6f 20 74 68 65 20 6c 65 66  er P2 to the lef
d230: 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62  t by the.** numb
d240: 65 72 20 6f 66 20 62 69 74 73 20 73 70 65 63 69  er of bits speci
d250: 66 69 65 64 20 62 79 20 74 68 65 20 69 6e 74 65  fied by the inte
d260: 67 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20  ger in register 
d270: 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65  P1..** Store the
d280: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
d290: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
d2a0: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
d2b0: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
d2c0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
d2d0: 63 6f 64 65 3a 20 53 68 69 66 74 52 69 67 68 74  code: ShiftRight
d2e0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
d2f0: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
d300: 3d 72 5b 50 32 5d 3e 3e 72 5b 50 31 5d 0a 2a 2a  =r[P2]>>r[P1].**
d310: 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e  .** Shift the in
d320: 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72  teger value in r
d330: 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74 68  egister P2 to th
d340: 65 20 72 69 67 68 74 20 62 79 20 74 68 65 0a 2a  e right by the.*
d350: 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73  * number of bits
d360: 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68   specified by th
d370: 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67  e integer in reg
d380: 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f  ister P1..** Sto
d390: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
d3a0: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
d3b0: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
d3c0: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
d3d0: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
d3e0: 0a 63 61 73 65 20 4f 50 5f 42 69 74 41 6e 64 3a  .case OP_BitAnd:
d3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d400: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42   /* same as TK_B
d410: 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c  ITAND, in1, in2,
d420: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
d430: 5f 42 69 74 4f 72 3a 20 20 20 20 20 20 20 20 20  _BitOr:         
d440: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
d450: 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c 20 69 6e   as TK_BITOR, in
d460: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
d470: 63 61 73 65 20 4f 50 5f 53 68 69 66 74 4c 65 66  case OP_ShiftLef
d480: 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t:              
d490: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 53  /* same as TK_LS
d4a0: 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  HIFT, in1, in2, 
d4b0: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
d4c0: 53 68 69 66 74 52 69 67 68 74 3a 20 7b 20 20 20  ShiftRight: {   
d4d0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
d4e0: 61 73 20 54 4b 5f 52 53 48 49 46 54 2c 20 69 6e  as TK_RSHIFT, in
d4f0: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
d500: 20 20 69 36 34 20 69 41 3b 0a 20 20 75 36 34 20    i64 iA;.  u64 
d510: 75 41 3b 0a 20 20 69 36 34 20 69 42 3b 0a 20 20  uA;.  i64 iB;.  
d520: 75 38 20 6f 70 3b 0a 0a 20 20 70 49 6e 31 20 3d  u8 op;..  pIn1 =
d530: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
d540: 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
d550: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74  pOp->p2];.  pOut
d560: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
d570: 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  ];.  if( (pIn1->
d580: 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c  flags | pIn2->fl
d590: 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  ags) & MEM_Null 
d5a0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
d5b0: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
d5c0: 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  t);.    break;. 
d5d0: 20 7d 0a 20 20 69 41 20 3d 20 73 71 6c 69 74 65   }.  iA = sqlite
d5e0: 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
d5f0: 6e 32 29 3b 0a 20 20 69 42 20 3d 20 73 71 6c 69  n2);.  iB = sqli
d600: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
d610: 70 49 6e 31 29 3b 0a 20 20 6f 70 20 3d 20 70 4f  pIn1);.  op = pO
d620: 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 69 66 28  p->opcode;.  if(
d630: 20 6f 70 3d 3d 4f 50 5f 42 69 74 41 6e 64 20 29   op==OP_BitAnd )
d640: 7b 0a 20 20 20 20 69 41 20 26 3d 20 69 42 3b 0a  {.    iA &= iB;.
d650: 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 70 3d 3d    }else if( op==
d660: 4f 50 5f 42 69 74 4f 72 20 29 7b 0a 20 20 20 20  OP_BitOr ){.    
d670: 69 41 20 7c 3d 20 69 42 3b 0a 20 20 7d 65 6c 73  iA |= iB;.  }els
d680: 65 20 69 66 28 20 69 42 21 3d 30 20 29 7b 0a 20  e if( iB!=0 ){. 
d690: 20 20 20 61 73 73 65 72 74 28 20 6f 70 3d 3d 4f     assert( op==O
d6a0: 50 5f 53 68 69 66 74 52 69 67 68 74 20 7c 7c 20  P_ShiftRight || 
d6b0: 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74  op==OP_ShiftLeft
d6c0: 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 73   );..    /* If s
d6d0: 68 69 66 74 69 6e 67 20 62 79 20 61 20 6e 65 67  hifting by a neg
d6e0: 61 74 69 76 65 20 61 6d 6f 75 6e 74 2c 20 73 68  ative amount, sh
d6f0: 69 66 74 20 69 6e 20 74 68 65 20 6f 74 68 65 72  ift in the other
d700: 20 64 69 72 65 63 74 69 6f 6e 20 2a 2f 0a 20 20   direction */.  
d710: 20 20 69 66 28 20 69 42 3c 30 20 29 7b 0a 20 20    if( iB<0 ){.  
d720: 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53      assert( OP_S
d730: 68 69 66 74 52 69 67 68 74 3d 3d 4f 50 5f 53 68  hiftRight==OP_Sh
d740: 69 66 74 4c 65 66 74 2b 31 20 29 3b 0a 20 20 20  iftLeft+1 );.   
d750: 20 20 20 6f 70 20 3d 20 32 2a 4f 50 5f 53 68 69     op = 2*OP_Shi
d760: 66 74 4c 65 66 74 20 2b 20 31 20 2d 20 6f 70 3b  ftLeft + 1 - op;
d770: 0a 20 20 20 20 20 20 69 42 20 3d 20 69 42 3e 28  .      iB = iB>(
d780: 2d 36 34 29 20 3f 20 2d 69 42 20 3a 20 36 34 3b  -64) ? -iB : 64;
d790: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20  .    }..    if( 
d7a0: 69 42 3e 3d 36 34 20 29 7b 0a 20 20 20 20 20 20  iB>=64 ){.      
d7b0: 69 41 20 3d 20 28 69 41 3e 3d 30 20 7c 7c 20 6f  iA = (iA>=0 || o
d7c0: 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 29  p==OP_ShiftLeft)
d7d0: 20 3f 20 30 20 3a 20 2d 31 3b 0a 20 20 20 20 7d   ? 0 : -1;.    }
d7e0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d 65 6d 63  else{.      memc
d7f0: 70 79 28 26 75 41 2c 20 26 69 41 2c 20 73 69 7a  py(&uA, &iA, siz
d800: 65 6f 66 28 75 41 29 29 3b 0a 20 20 20 20 20 20  eof(uA));.      
d810: 69 66 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74  if( op==OP_Shift
d820: 4c 65 66 74 20 29 7b 0a 20 20 20 20 20 20 20 20  Left ){.        
d830: 75 41 20 3c 3c 3d 20 69 42 3b 0a 20 20 20 20 20  uA <<= iB;.     
d840: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
d850: 75 41 20 3e 3e 3d 20 69 42 3b 0a 20 20 20 20 20  uA >>= iB;.     
d860: 20 20 20 2f 2a 20 53 69 67 6e 2d 65 78 74 65 6e     /* Sign-exten
d870: 64 20 6f 6e 20 61 20 72 69 67 68 74 20 73 68 69  d on a right shi
d880: 66 74 20 6f 66 20 61 20 6e 65 67 61 74 69 76 65  ft of a negative
d890: 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 20   number */.     
d8a0: 20 20 20 69 66 28 20 69 41 3c 30 20 29 20 75 41     if( iA<0 ) uA
d8b0: 20 7c 3d 20 28 28 28 28 75 36 34 29 30 78 66 66   |= ((((u64)0xff
d8c0: 66 66 66 66 66 66 29 3c 3c 33 32 29 7c 30 78 66  ffffff)<<32)|0xf
d8d0: 66 66 66 66 66 66 66 29 20 3c 3c 20 28 36 34 2d  fffffff) << (64-
d8e0: 69 42 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  iB);.      }.   
d8f0: 20 20 20 6d 65 6d 63 70 79 28 26 69 41 2c 20 26     memcpy(&iA, &
d900: 75 41 2c 20 73 69 7a 65 6f 66 28 69 41 29 29 3b  uA, sizeof(iA));
d910: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f 75  .    }.  }.  pOu
d920: 74 2d 3e 75 2e 69 20 3d 20 69 41 3b 0a 20 20 4d  t->u.i = iA;.  M
d930: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
d940: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
d950: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
d960: 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20 50 31 20  ode: AddImm  P1 
d970: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
d980: 70 73 69 73 3a 20 72 5b 50 31 5d 3d 72 5b 50 31  psis: r[P1]=r[P1
d990: 5d 2b 50 32 0a 2a 2a 20 0a 2a 2a 20 41 64 64 20  ]+P2.** .** Add 
d9a0: 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 50 32 20  the constant P2 
d9b0: 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  to the value in 
d9c0: 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20  register P1..** 
d9d0: 54 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c  The result is al
d9e0: 77 61 79 73 20 61 6e 20 69 6e 74 65 67 65 72 2e  ways an integer.
d9f0: 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63 65 20  .**.** To force 
da00: 61 6e 79 20 72 65 67 69 73 74 65 72 20 74 6f 20  any register to 
da10: 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 6a  be an integer, j
da20: 75 73 74 20 61 64 64 20 30 2e 0a 2a 2f 0a 63 61  ust add 0..*/.ca
da30: 73 65 20 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b 20  se OP_AddImm: { 
da40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
da50: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
da60: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
da70: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
da80: 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 73 71 6c  (p, pIn1);.  sql
da90: 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
daa0: 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70  erify(pIn1);.  p
dab0: 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d  In1->u.i += pOp-
dac0: 3e 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  >p2;.  break;.}.
dad0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 73 74  ./* Opcode: Must
dae0: 42 65 49 6e 74 20 50 31 20 50 32 20 2a 20 2a 20  BeInt P1 P2 * * 
daf0: 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65 20 74  *.** .** Force t
db00: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
db10: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 6e  ster P1 to be an
db20: 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20 74 68   integer.  If th
db30: 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31  e value.** in P1
db40: 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67   is not an integ
db50: 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62 65  er and cannot be
db60: 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20   converted into 
db70: 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 77 69  an integer.** wi
db80: 74 68 6f 75 74 20 64 61 74 61 20 6c 6f 73 73 2c  thout data loss,
db90: 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64   then jump immed
dba0: 69 61 74 65 6c 79 20 74 6f 20 50 32 2c 20 6f 72  iately to P2, or
dbb0: 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20 72 61 69   if P2==0.** rai
dbc0: 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49 53  se an SQLITE_MIS
dbd0: 4d 41 54 43 48 20 65 78 63 65 70 74 69 6f 6e 2e  MATCH exception.
dbe0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 73 74  .*/.case OP_Must
dbf0: 42 65 49 6e 74 3a 20 7b 20 20 20 20 20 20 20 20  BeInt: {        
dc00: 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
dc10: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
dc20: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  em[pOp->p1];.  i
dc30: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
dc40: 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b  & MEM_Int)==0 ){
dc50: 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69  .    applyAffini
dc60: 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f  ty(pIn1, SQLITE_
dc70: 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e 63  AFF_NUMERIC, enc
dc80: 6f 64 69 6e 67 29 3b 0a 20 20 20 20 56 64 62 65  oding);.    Vdbe
dc90: 42 72 61 6e 63 68 54 61 6b 65 6e 28 28 70 49 6e  BranchTaken((pIn
dca0: 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  1->flags&MEM_Int
dcb0: 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66  )==0, 2);.    if
dcc0: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
dcd0: 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a   MEM_Int)==0 ){.
dce0: 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70        if( pOp->p
dcf0: 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  2==0 ){.        
dd00: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53 4d  rc = SQLITE_MISM
dd10: 41 54 43 48 3b 0a 20 20 20 20 20 20 20 20 67 6f  ATCH;.        go
dd20: 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
dd30: 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 65 6c  error;.      }el
dd40: 73 65 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f  se{.        goto
dd50: 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20   jump_to_p2;.   
dd60: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
dd70: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
dd80: 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pIn1, MEM_Int);.
dd90: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e    break;.}..#ifn
dda0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
ddb0: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f  FLOATING_POINT./
ddc0: 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 41 66  * Opcode: RealAf
ddd0: 66 69 6e 69 74 79 20 50 31 20 2a 20 2a 20 2a 20  finity P1 * * * 
dde0: 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65 67 69 73  *.**.** If regis
ddf0: 74 65 72 20 50 31 20 68 6f 6c 64 73 20 61 6e 20  ter P1 holds an 
de00: 69 6e 74 65 67 65 72 20 63 6f 6e 76 65 72 74 20  integer convert 
de10: 69 74 20 74 6f 20 61 20 72 65 61 6c 20 76 61 6c  it to a real val
de20: 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  ue..**.** This o
de30: 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 77 68  pcode is used wh
de40: 65 6e 20 65 78 74 72 61 63 74 69 6e 67 20 69 6e  en extracting in
de50: 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61  formation from a
de60: 20 63 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a 2a 20   column that.** 
de70: 68 61 73 20 52 45 41 4c 20 61 66 66 69 6e 69 74  has REAL affinit
de80: 79 2e 20 20 53 75 63 68 20 63 6f 6c 75 6d 6e 20  y.  Such column 
de90: 76 61 6c 75 65 73 20 6d 61 79 20 73 74 69 6c 6c  values may still
dea0: 20 62 65 20 73 74 6f 72 65 64 20 61 73 0a 2a 2a   be stored as.**
deb0: 20 69 6e 74 65 67 65 72 73 2c 20 66 6f 72 20 73   integers, for s
dec0: 70 61 63 65 20 65 66 66 69 63 69 65 6e 63 79 2c  pace efficiency,
ded0: 20 62 75 74 20 61 66 74 65 72 20 65 78 74 72 61   but after extra
dee0: 63 74 69 6f 6e 20 77 65 20 77 61 6e 74 20 74 68  ction we want th
def0: 65 6d 0a 2a 2a 20 74 6f 20 68 61 76 65 20 6f 6e  em.** to have on
df00: 6c 79 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e  ly a real value.
df10: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c  .*/.case OP_Real
df20: 41 66 66 69 6e 69 74 79 3a 20 7b 20 20 20 20 20  Affinity: {     
df30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
df40: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
df50: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
df60: 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
df70: 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20  s & MEM_Int ){. 
df80: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
df90: 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a  mRealify(pIn1);.
dfa0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
dfb0: 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
dfc0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 0a  QLITE_OMIT_CAST.
dfd0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 61 73 74 20  /* Opcode: Cast 
dfe0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
dff0: 79 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e 69 74  ynopsis: affinit
e000: 79 28 72 5b 50 31 5d 29 0a 2a 2a 0a 2a 2a 20 46  y(r[P1]).**.** F
e010: 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69  orce the value i
e020: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  n register P1 to
e030: 20 62 65 20 74 68 65 20 74 79 70 65 20 64 65 66   be the type def
e040: 69 6e 65 64 20 62 79 20 50 32 2e 0a 2a 2a 20 0a  ined by P2..** .
e050: 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 3e 20  ** <ul>.** <li> 
e060: 50 32 3d 3d 27 41 27 20 26 72 61 72 72 3b 20 42  P2=='A' &rarr; B
e070: 4c 4f 42 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d  LOB.** <li> P2==
e080: 27 42 27 20 26 72 61 72 72 3b 20 54 45 58 54 0a  'B' &rarr; TEXT.
e090: 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 43 27 20  ** <li> P2=='C' 
e0a0: 26 72 61 72 72 3b 20 4e 55 4d 45 52 49 43 0a 2a  &rarr; NUMERIC.*
e0b0: 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 44 27 20 26  * <li> P2=='D' &
e0c0: 72 61 72 72 3b 20 49 4e 54 45 47 45 52 0a 2a 2a  rarr; INTEGER.**
e0d0: 20 3c 6c 69 3e 20 50 32 3d 3d 27 45 27 20 26 72   <li> P2=='E' &r
e0e0: 61 72 72 3b 20 52 45 41 4c 0a 2a 2a 20 3c 2f 75  arr; REAL.** </u
e0f0: 6c 3e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20  l>.**.** A NULL 
e100: 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61  value is not cha
e110: 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75  nged by this rou
e120: 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e  tine.  It remain
e130: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
e140: 4f 50 5f 43 61 73 74 3a 20 7b 20 20 20 20 20 20  OP_Cast: {      
e150: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
e160: 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  n1 */.  assert( 
e170: 70 4f 70 2d 3e 70 32 3e 3d 53 51 4c 49 54 45 5f  pOp->p2>=SQLITE_
e180: 41 46 46 5f 42 4c 4f 42 20 26 26 20 70 4f 70 2d  AFF_BLOB && pOp-
e190: 3e 70 32 3c 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2<=SQLITE_AFF_
e1a0: 52 45 41 4c 20 29 3b 0a 20 20 74 65 73 74 63 61  REAL );.  testca
e1b0: 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c  se( pOp->p2==SQL
e1c0: 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29 3b 0a  ITE_AFF_TEXT );.
e1d0: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
e1e0: 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2==SQLITE_AFF_
e1f0: 42 4c 4f 42 20 29 3b 0a 20 20 74 65 73 74 63 61  BLOB );.  testca
e200: 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c  se( pOp->p2==SQL
e210: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20  ITE_AFF_NUMERIC 
e220: 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
e230: 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41  Op->p2==SQLITE_A
e240: 46 46 5f 49 4e 54 45 47 45 52 20 29 3b 0a 20 20  FF_INTEGER );.  
e250: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
e260: 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  2==SQLITE_AFF_RE
e270: 41 4c 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26  AL );.  pIn1 = &
e280: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
e290: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
e2a0: 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 72 63  e(p, pIn1);.  rc
e2b0: 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49   = ExpandBlob(pI
e2c0: 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
e2d0: 62 65 4d 65 6d 43 61 73 74 28 70 49 6e 31 2c 20  beMemCast(pIn1, 
e2e0: 70 4f 70 2d 3e 70 32 2c 20 65 6e 63 6f 64 69 6e  pOp->p2, encodin
e2f0: 67 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  g);.  UPDATE_MAX
e300: 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b  _BLOBSIZE(pIn1);
e310: 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
e320: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
e330: 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ror;.  break;.}.
e340: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
e350: 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f  _OMIT_CAST */../
e360: 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20 50 31 20  * Opcode: Eq P1 
e370: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
e380: 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33  ynopsis: IF r[P3
e390: 5d 3d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43  ]==r[P1].**.** C
e3a0: 6f 6d 70 61 72 65 20 74 68 65 20 76 61 6c 75 65  ompare the value
e3b0: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
e3c0: 20 61 6e 64 20 50 33 2e 20 20 49 66 20 72 65 67   and P3.  If reg
e3d0: 28 50 33 29 3d 3d 72 65 67 28 50 31 29 20 74 68  (P3)==reg(P1) th
e3e0: 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61 64  en.** jump to ad
e3f0: 64 72 65 73 73 20 50 32 2e 20 20 4f 72 20 69 66  dress P2.  Or if
e400: 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f 52   the SQLITE_STOR
e410: 45 50 32 20 66 6c 61 67 20 69 73 20 73 65 74 20  EP2 flag is set 
e420: 69 6e 20 50 35 2c 20 74 68 65 6e 0a 2a 2a 20 73  in P5, then.** s
e430: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
e440: 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 6e  of comparison in
e450: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
e460: 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41  .** The SQLITE_A
e470: 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20  FF_MASK portion 
e480: 6f 66 20 50 35 20 6d 75 73 74 20 62 65 20 61 6e  of P5 must be an
e490: 20 61 66 66 69 6e 69 74 79 20 63 68 61 72 61 63   affinity charac
e4a0: 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f  ter -.** SQLITE_
e4b0: 41 46 46 5f 54 45 58 54 2c 20 53 51 4c 49 54 45  AFF_TEXT, SQLITE
e4c0: 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e  _AFF_INTEGER, an
e4d0: 64 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61  d so forth. An a
e4e0: 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 0a  ttempt is made .
e4f0: 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20 62 6f 74  ** to coerce bot
e500: 68 20 69 6e 70 75 74 73 20 61 63 63 6f 72 64 69  h inputs accordi
e510: 6e 67 20 74 6f 20 74 68 69 73 20 61 66 66 69 6e  ng to this affin
e520: 69 74 79 20 62 65 66 6f 72 65 20 74 68 65 0a 2a  ity before the.*
e530: 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  * comparison is 
e540: 6d 61 64 65 2e 20 49 66 20 74 68 65 20 53 51 4c  made. If the SQL
e550: 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20  ITE_AFF_MASK is 
e560: 30 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72  0x00, then numer
e570: 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 69  ic.** affinity i
e580: 73 20 75 73 65 64 2e 20 4e 6f 74 65 20 74 68 61  s used. Note tha
e590: 74 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 63  t the affinity c
e5a0: 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72 65 20 73  onversions are s
e5b0: 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e  tored.** back in
e5c0: 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67  to the input reg
e5d0: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
e5e0: 2e 20 20 53 6f 20 74 68 69 73 20 6f 70 63 6f 64  .  So this opcod
e5f0: 65 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70  e can cause.** p
e600: 65 72 73 69 73 74 65 6e 74 20 63 68 61 6e 67 65  ersistent change
e610: 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 20 50  s to registers P
e620: 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  1 and P3..**.** 
e630: 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65 72 73  Once any convers
e640: 69 6f 6e 73 20 68 61 76 65 20 74 61 6b 65 6e 20  ions have taken 
e650: 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69 74 68  place, and neith
e660: 65 72 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c  er value is NULL
e670: 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73  , .** the values
e680: 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 20 49   are compared. I
e690: 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72  f both values ar
e6a0: 65 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d  e blobs then mem
e6b0: 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73 65 64  cmp() is.** used
e6c0: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
e6d0: 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65  e results of the
e6e0: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66   comparison.  If
e6f0: 20 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20   both values.** 
e700: 61 72 65 20 74 65 78 74 2c 20 74 68 65 6e 20 74  are text, then t
e710: 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 63  he appropriate c
e720: 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
e730: 6e 20 73 70 65 63 69 66 69 65 64 20 69 6e 0a 2a  n specified in.*
e740: 2a 20 50 34 20 69 73 20 75 73 65 64 20 74 6f 20  * P4 is used to 
e750: 64 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  do the compariso
e760: 6e 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74  n.  If P4 is not
e770: 20 73 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a   specified then.
e780: 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75  ** memcmp() is u
e790: 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74  sed to compare t
e7a0: 65 78 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20  ext string.  If 
e7b0: 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a  both values are.
e7c0: 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e  ** numeric, then
e7d0: 20 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61   a numeric compa
e7e0: 72 69 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49  rison is used. I
e7f0: 66 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73  f the two values
e800: 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65  .** are of diffe
e810: 72 65 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e  rent types, then
e820: 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e   numbers are con
e830: 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61  sidered less tha
e840: 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64  n.** strings and
e850: 20 73 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e   strings are con
e860: 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61  sidered less tha
e870: 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49  n blobs..**.** I
e880: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
e890: 69 73 20 73 65 74 20 69 6e 20 50 35 20 74 68 65  is set in P5 the
e8a0: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
e8b0: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c  comparison is al
e8c0: 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74  ways either.** t
e8d0: 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64  rue or false and
e8e0: 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20   is never NULL. 
e8f0: 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64   If both operand
e900: 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20  s are NULL then 
e910: 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66  the result.** of
e920: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74   comparison is t
e930: 72 75 65 2e 20 20 49 66 20 65 69 74 68 65 72 20  rue.  If either 
e940: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
e950: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
e960: 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20  is false..** If 
e970: 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20  neither operand 
e980: 69 73 20 4e 55 4c 4c 20 74 68 65 20 72 65 73 75  is NULL the resu
e990: 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  lt is the same a
e9a0: 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69 66  s it would be if
e9b0: 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 4e  .** the SQLITE_N
e9c0: 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65 20  ULLEQ flag were 
e9d0: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35 2e  omitted from P5.
e9e0: 0a 2a 2a 0a 2a 2a 20 49 66 20 62 6f 74 68 20 53  .**.** If both S
e9f0: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 61 6e  QLITE_STOREP2 an
ea00: 64 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c  d SQLITE_KEEPNUL
ea10: 4c 20 66 6c 61 67 73 20 61 72 65 20 73 65 74 20  L flags are set 
ea20: 74 68 65 6e 20 74 68 65 0a 2a 2a 20 63 6f 6e 74  then the.** cont
ea30: 65 6e 74 20 6f 66 20 72 5b 50 32 5d 20 69 73 20  ent of r[P2] is 
ea40: 6f 6e 6c 79 20 63 68 61 6e 67 65 64 20 69 66 20  only changed if 
ea50: 74 68 65 20 6e 65 77 20 76 61 6c 75 65 20 69 73  the new value is
ea60: 20 4e 55 4c 4c 20 6f 72 20 30 20 28 66 61 6c 73   NULL or 0 (fals
ea70: 65 29 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20  e)..** In other 
ea80: 77 6f 72 64 73 2c 20 61 20 70 72 69 6f 72 20 72  words, a prior r
ea90: 5b 50 32 5d 20 76 61 6c 75 65 20 77 69 6c 6c 20  [P2] value will 
eaa0: 6e 6f 74 20 62 65 20 6f 76 65 72 77 72 69 74 74  not be overwritt
eab0: 65 6e 20 62 79 20 31 20 28 74 72 75 65 29 2e 0a  en by 1 (true)..
eac0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65  */./* Opcode: Ne
ead0: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
eae0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20  ** Synopsis: IF 
eaf0: 72 5b 50 33 5d 21 3d 72 5b 50 31 5d 0a 2a 2a 0a  r[P3]!=r[P1].**.
eb00: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
eb10: 73 74 20 6c 69 6b 65 20 74 68 65 20 45 71 20 6f  st like the Eq o
eb20: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
eb30: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
eb40: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70  ken if.** the op
eb50: 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74  erands in regist
eb60: 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72  ers P1 and P3 ar
eb70: 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53 65  e not equal.  Se
eb80: 65 20 74 68 65 20 45 71 20 6f 70 63 6f 64 65 20  e the Eq opcode 
eb90: 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61  for.** additiona
eba0: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
ebb0: 2a 0a 2a 2a 20 49 66 20 62 6f 74 68 20 53 51 4c  *.** If both SQL
ebc0: 49 54 45 5f 53 54 4f 52 45 50 32 20 61 6e 64 20  ITE_STOREP2 and 
ebd0: 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 20  SQLITE_KEEPNULL 
ebe0: 66 6c 61 67 73 20 61 72 65 20 73 65 74 20 74 68  flags are set th
ebf0: 65 6e 20 74 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e  en the.** conten
ec00: 74 20 6f 66 20 72 5b 50 32 5d 20 69 73 20 6f 6e  t of r[P2] is on
ec10: 6c 79 20 63 68 61 6e 67 65 64 20 69 66 20 74 68  ly changed if th
ec20: 65 20 6e 65 77 20 76 61 6c 75 65 20 69 73 20 4e  e new value is N
ec30: 55 4c 4c 20 6f 72 20 31 20 28 74 72 75 65 29 2e  ULL or 1 (true).
ec40: 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  .** In other wor
ec50: 64 73 2c 20 61 20 70 72 69 6f 72 20 72 5b 50 32  ds, a prior r[P2
ec60: 5d 20 76 61 6c 75 65 20 77 69 6c 6c 20 6e 6f 74  ] value will not
ec70: 20 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20   be overwritten 
ec80: 62 79 20 30 20 28 66 61 6c 73 65 29 2e 0a 2a 2f  by 0 (false)..*/
ec90: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50  ./* Opcode: Lt P
eca0: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
ecb0: 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b   Synopsis: IF r[
ecc0: 50 33 5d 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  P3]<r[P1].**.** 
ecd0: 43 6f 6d 70 61 72 65 20 74 68 65 20 76 61 6c 75  Compare the valu
ece0: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
ecf0: 31 20 61 6e 64 20 50 33 2e 20 20 49 66 20 72 65  1 and P3.  If re
ed00: 67 28 50 33 29 3c 72 65 67 28 50 31 29 20 74 68  g(P3)<reg(P1) th
ed10: 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61 64  en.** jump to ad
ed20: 64 72 65 73 73 20 50 32 2e 20 20 4f 72 20 69 66  dress P2.  Or if
ed30: 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f 52   the SQLITE_STOR
ed40: 45 50 32 20 66 6c 61 67 20 69 73 20 73 65 74 20  EP2 flag is set 
ed50: 69 6e 20 50 35 20 73 74 6f 72 65 0a 2a 2a 20 74  in P5 store.** t
ed60: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d  he result of com
ed70: 70 61 72 69 73 6f 6e 20 28 30 20 6f 72 20 31 20  parison (0 or 1 
ed80: 6f 72 20 4e 55 4c 4c 29 20 69 6e 74 6f 20 72 65  or NULL) into re
ed90: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
eda0: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a   If the SQLITE_J
edb0: 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 6f 66  UMPIFNULL bit of
edc0: 20 50 35 20 69 73 20 73 65 74 20 61 6e 64 20 65   P5 is set and e
edd0: 69 74 68 65 72 20 72 65 67 28 50 31 29 20 6f 72  ither reg(P1) or
ede0: 0a 2a 2a 20 72 65 67 28 50 33 29 20 69 73 20 4e  .** reg(P3) is N
edf0: 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 74 61 6b  ULL then the tak
ee00: 65 20 74 68 65 20 6a 75 6d 70 2e 20 20 49 66 20  e the jump.  If 
ee10: 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  the SQLITE_JUMPI
ee20: 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69 73  FNULL .** bit is
ee30: 20 63 6c 65 61 72 20 74 68 65 6e 20 66 61 6c 6c   clear then fall
ee40: 20 74 68 72 6f 75 67 68 20 69 66 20 65 69 74 68   through if eith
ee50: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
ee60: 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51  LL..**.** The SQ
ee70: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f  LITE_AFF_MASK po
ee80: 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74  rtion of P5 must
ee90: 20 62 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20   be an affinity 
eea0: 63 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53  character -.** S
eeb0: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20  QLITE_AFF_TEXT, 
eec0: 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
eed0: 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ER, and so forth
eee0: 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20  . An attempt is 
eef0: 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72  made .** to coer
ef00: 63 65 20 62 6f 74 68 20 69 6e 70 75 74 73 20 61  ce both inputs a
ef10: 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 69 73  ccording to this
ef20: 20 61 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65   affinity before
ef30: 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73   the.** comparis
ef40: 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74  on is made. If t
ef50: 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  he SQLITE_AFF_MA
ef60: 53 4b 20 69 73 20 30 78 30 30 2c 20 74 68 65 6e  SK is 0x00, then
ef70: 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69   numeric.** affi
ef80: 6e 69 74 79 20 69 73 20 75 73 65 64 2e 20 4e 6f  nity is used. No
ef90: 74 65 20 74 68 61 74 20 74 68 65 20 61 66 66 69  te that the affi
efa0: 6e 69 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73  nity conversions
efb0: 20 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62   are stored.** b
efc0: 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e 70  ack into the inp
efd0: 75 74 20 72 65 67 69 73 74 65 72 73 20 50 31 20  ut registers P1 
efe0: 61 6e 64 20 50 33 2e 20 20 53 6f 20 74 68 69 73  and P3.  So this
eff0: 20 6f 70 63 6f 64 65 20 63 61 6e 20 63 61 75 73   opcode can caus
f000: 65 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e 74 20  e.** persistent 
f010: 63 68 61 6e 67 65 73 20 74 6f 20 72 65 67 69 73  changes to regis
f020: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 0a  ters P1 and P3..
f030: 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63  **.** Once any c
f040: 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20  onversions have 
f050: 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64  taken place, and
f060: 20 6e 65 69 74 68 65 72 20 76 61 6c 75 65 20 69   neither value i
f070: 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20  s NULL, .** the 
f080: 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61  values are compa
f090: 72 65 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c  red. If both val
f0a0: 75 65 73 20 61 72 65 20 62 6c 6f 62 73 20 74 68  ues are blobs th
f0b0: 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a  en memcmp() is.*
f0c0: 2a 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  * used to determ
f0d0: 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ine the results 
f0e0: 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  of the compariso
f0f0: 6e 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75  n.  If both valu
f100: 65 73 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c 20  es.** are text, 
f110: 74 68 65 6e 20 74 68 65 20 61 70 70 72 6f 70 72  then the appropr
f120: 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66  iate collating f
f130: 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65  unction specifie
f140: 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75  d in.** P4 is  u
f150: 73 65 64 20 74 6f 20 64 6f 20 74 68 65 20 63 6f  sed to do the co
f160: 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 50 34  mparison.  If P4
f170: 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65   is not specifie
f180: 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70  d then.** memcmp
f190: 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f  () is used to co
f1a0: 6d 70 61 72 65 20 74 65 78 74 20 73 74 72 69 6e  mpare text strin
f1b0: 67 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75  g.  If both valu
f1c0: 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69  es are.** numeri
f1d0: 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65 72 69  c, then a numeri
f1e0: 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  c comparison is 
f1f0: 75 73 65 64 2e 20 49 66 20 74 68 65 20 74 77 6f  used. If the two
f200: 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f   values.** are o
f210: 66 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65  f different type
f220: 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72 73 20  s, then numbers 
f230: 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c  are considered l
f240: 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69  ess than.** stri
f250: 6e 67 73 20 61 6e 64 20 73 74 72 69 6e 67 73 20  ngs and strings 
f260: 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c  are considered l
f270: 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a  ess than blobs..
f280: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65  */./* Opcode: Le
f290: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
f2a0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20  ** Synopsis: IF 
f2b0: 72 5b 50 33 5d 3c 3d 72 5b 50 31 5d 0a 2a 2a 0a  r[P3]<=r[P1].**.
f2c0: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
f2d0: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
f2e0: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
f2f0: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
f300: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f  ken if.** the co
f310: 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
f320: 72 20 50 33 20 69 73 20 6c 65 73 73 20 74 68 61  r P3 is less tha
f330: 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
f340: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20  e content of.** 
f350: 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65  register P1.  Se
f360: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
f370: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
f380: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nformation..*/./
f390: 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20 50 31 20  * Opcode: Gt P1 
f3a0: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
f3b0: 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33  ynopsis: IF r[P3
f3c0: 5d 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68  ]>r[P1].**.** Th
f3d0: 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  is works just li
f3e0: 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ke the Lt opcode
f3f0: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
f400: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
f410: 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74  f.** the content
f420: 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20   of register P3 
f430: 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
f440: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a  the content of.*
f450: 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  * register P1.  
f460: 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  See the Lt opcod
f470: 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
f480: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
f490: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65 20 50  ./* Opcode: Ge P
f4a0: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
f4b0: 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b   Synopsis: IF r[
f4c0: 50 33 5d 3e 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  P3]>=r[P1].**.**
f4d0: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
f4e0: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
f4f0: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
f500: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
f510: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  n if.** the cont
f520: 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
f530: 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68  P3 is greater th
f540: 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
f550: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a  he content of.**
f560: 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53   register P1.  S
f570: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
f580: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
f590: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
f5a0: 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 20  case OP_Eq:     
f5b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
f5c0: 65 20 61 73 20 54 4b 5f 45 51 2c 20 6a 75 6d 70  e as TK_EQ, jump
f5d0: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
f5e0: 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 20 20 20  se OP_Ne:       
f5f0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
f600: 61 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20  as TK_NE, jump, 
f610: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  in1, in3 */.case
f620: 20 4f 50 5f 4c 74 3a 20 20 20 20 20 20 20 20 20   OP_Lt:         
f630: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
f640: 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e   TK_LT, jump, in
f650: 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
f660: 50 5f 4c 65 3a 20 20 20 20 20 20 20 20 20 20 20  P_Le:           
f670: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
f680: 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_LE, jump, in1,
f690: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
f6a0: 47 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Gt:             
f6b0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
f6c0: 47 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  GT, jump, in1, i
f6d0: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 65  n3 */.case OP_Ge
f6e0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
f6f0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 45  /* same as TK_GE
f700: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
f710: 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 2c 20 72   */.  int res, r
f720: 65 73 32 3b 20 20 20 20 20 20 2f 2a 20 52 65 73  es2;      /* Res
f730: 75 6c 74 20 6f 66 20 74 68 65 20 63 6f 6d 70 61  ult of the compa
f740: 72 69 73 6f 6e 20 6f 66 20 70 49 6e 31 20 61 67  rison of pIn1 ag
f750: 61 69 6e 73 74 20 70 49 6e 33 20 2a 2f 0a 20 20  ainst pIn3 */.  
f760: 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20  char affinity;  
f770: 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20      /* Affinity 
f780: 74 6f 20 75 73 65 20 66 6f 72 20 63 6f 6d 70 61  to use for compa
f790: 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 66  rison */.  u16 f
f7a0: 6c 61 67 73 31 3b 20 20 20 20 20 20 20 20 20 2f  lags1;         /
f7b0: 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69 61  * Copy of initia
f7c0: 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 31 2d  l value of pIn1-
f7d0: 3e 66 6c 61 67 73 20 2a 2f 0a 20 20 75 31 36 20  >flags */.  u16 
f7e0: 66 6c 61 67 73 33 3b 20 20 20 20 20 20 20 20 20  flags3;         
f7f0: 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69  /* Copy of initi
f800: 61 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 33  al value of pIn3
f810: 2d 3e 66 6c 61 67 73 20 2a 2f 0a 0a 20 20 70 49  ->flags */..  pI
f820: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
f830: 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61  p1];.  pIn3 = &a
f840: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
f850: 66 6c 61 67 73 31 20 3d 20 70 49 6e 31 2d 3e 66  flags1 = pIn1->f
f860: 6c 61 67 73 3b 0a 20 20 66 6c 61 67 73 33 20 3d  lags;.  flags3 =
f870: 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20   pIn3->flags;.  
f880: 69 66 28 20 28 66 6c 61 67 73 31 20 7c 20 66 6c  if( (flags1 | fl
f890: 61 67 73 33 29 26 4d 45 4d 5f 4e 75 6c 6c 20 29  ags3)&MEM_Null )
f8a0: 7b 0a 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20  {.    /* One or 
f8b0: 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72  both operands ar
f8c0: 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 69 66  e NULL */.    if
f8d0: 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
f8e0: 54 45 5f 4e 55 4c 4c 45 51 20 29 7b 0a 20 20 20  TE_NULLEQ ){.   
f8f0: 20 20 20 2f 2a 20 49 66 20 53 51 4c 49 54 45 5f     /* If SQLITE_
f900: 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 28 77  NULLEQ is set (w
f910: 68 69 63 68 20 77 69 6c 6c 20 6f 6e 6c 79 20 68  hich will only h
f920: 61 70 70 65 6e 20 69 66 20 74 68 65 20 6f 70 65  appen if the ope
f930: 72 61 74 6f 72 20 69 73 0a 20 20 20 20 20 20 2a  rator is.      *
f940: 2a 20 4f 50 5f 45 71 20 6f 72 20 4f 50 5f 4e 65  * OP_Eq or OP_Ne
f950: 29 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  ) then take the 
f960: 6a 75 6d 70 20 6f 72 20 6e 6f 74 20 64 65 70 65  jump or not depe
f970: 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
f980: 0a 20 20 20 20 20 20 2a 2a 20 6f 72 20 6e 6f 74  .      ** or not
f990: 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61   both operands a
f9a0: 72 65 20 6e 75 6c 6c 2e 0a 20 20 20 20 20 20 2a  re null..      *
f9b0: 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
f9c0: 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
f9d0: 45 71 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  Eq || pOp->opcod
f9e0: 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20  e==OP_Ne );.    
f9f0: 20 20 61 73 73 65 72 74 28 20 28 66 6c 61 67 73    assert( (flags
fa00: 31 20 26 20 4d 45 4d 5f 43 6c 65 61 72 65 64 29  1 & MEM_Cleared)
fa10: 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  ==0 );.      ass
fa20: 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26 20  ert( (pOp->p5 & 
fa30: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
fa40: 4c 29 3d 3d 30 20 7c 7c 20 43 4f 52 52 55 50 54  L)==0 || CORRUPT
fa50: 5f 44 42 20 29 3b 0a 20 20 20 20 20 20 74 65 73  _DB );.      tes
fa60: 74 63 61 73 65 28 20 28 70 4f 70 2d 3e 70 35 20  tcase( (pOp->p5 
fa70: 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  & SQLITE_JUMPIFN
fa80: 55 4c 4c 29 21 3d 30 20 29 3b 0a 20 20 20 20 20  ULL)!=0 );.     
fa90: 20 69 66 28 20 28 66 6c 61 67 73 31 26 66 6c 61   if( (flags1&fla
faa0: 67 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  gs3&MEM_Null)!=0
fab0: 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c 61 67  .       && (flag
fac0: 73 33 26 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d  s3&MEM_Cleared)=
fad0: 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20  =0.      ){.    
fae0: 20 20 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a      res = 0;  /*
faf0: 20 4f 70 65 72 61 6e 64 73 20 61 72 65 20 65 71   Operands are eq
fb00: 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c  ual */.      }el
fb10: 73 65 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20  se{.        res 
fb20: 3d 20 31 3b 20 20 2f 2a 20 4f 70 65 72 61 6e 64  = 1;  /* Operand
fb30: 73 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 20  s are not equal 
fb40: 2a 2f 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  */.      }.    }
fb50: 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 53  else{.      /* S
fb60: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20  QLITE_NULLEQ is 
fb70: 63 6c 65 61 72 20 61 6e 64 20 61 74 20 6c 65 61  clear and at lea
fb80: 73 74 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69  st one operand i
fb90: 73 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a  s NULL,.      **
fba0: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
fbb0: 20 69 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e   is always NULL.
fbc0: 0a 20 20 20 20 20 20 2a 2a 20 54 68 65 20 6a 75  .      ** The ju
fbd0: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74  mp is taken if t
fbe0: 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46  he SQLITE_JUMPIF
fbf0: 4e 55 4c 4c 20 62 69 74 20 69 73 20 73 65 74 2e  NULL bit is set.
fc00: 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
fc10: 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  if( pOp->p5 & SQ
fc20: 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a  LITE_STOREP2 ){.
fc30: 20 20 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26          pOut = &
fc40: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
fc50: 20 20 20 20 20 20 20 69 43 6f 6d 70 61 72 65 20         iCompare 
fc60: 3d 20 31 3b 20 20 20 20 2f 2a 20 4f 70 65 72 61  = 1;    /* Opera
fc70: 6e 64 73 20 61 72 65 20 6e 6f 74 20 65 71 75 61  nds are not equa
fc80: 6c 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d 65 6d  l */.        mem
fc90: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
fca0: 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 20 20   pOut);.        
fcb0: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
fcc0: 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  Out, MEM_Null);.
fcd0: 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52          REGISTER
fce0: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
fcf0: 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c  pOut);.      }el
fd00: 73 65 7b 0a 20 20 20 20 20 20 20 20 56 64 62 65  se{.        Vdbe
fd10: 42 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29  BranchTaken(2,3)
fd20: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 4f  ;.        if( pO
fd30: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a  p->p5 & SQLITE_J
fd40: 55 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20 20  UMPIFNULL ){.   
fd50: 20 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70         goto jump
fd60: 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 20 20  _to_p2;.        
fd70: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  }.      }.      
fd80: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d  break;.    }.  }
fd90: 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65 69  else{.    /* Nei
fda0: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
fdb0: 4e 55 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d 70  NULL.  Do a comp
fdc0: 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61  arison. */.    a
fdd0: 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70  ffinity = pOp->p
fde0: 35 20 26 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  5 & SQLITE_AFF_M
fdf0: 41 53 4b 3b 0a 20 20 20 20 69 66 28 20 61 66 66  ASK;.    if( aff
fe00: 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46  inity>=SQLITE_AF
fe10: 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20 20  F_NUMERIC ){.   
fe20: 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 20 7c     if( (flags1 |
fe30: 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f 53 74 72   flags3)&MEM_Str
fe40: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
fe50: 28 66 6c 61 67 73 31 20 26 20 28 4d 45 4d 5f 49  (flags1 & (MEM_I
fe60: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f  nt|MEM_Real|MEM_
fe70: 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29  Str))==MEM_Str )
fe80: 7b 0a 20 20 20 20 20 20 20 20 20 20 61 70 70 6c  {.          appl
fe90: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
fea0: 28 70 49 6e 31 2c 30 29 3b 0a 20 20 20 20 20 20  (pIn1,0);.      
feb0: 20 20 20 20 61 73 73 65 72 74 28 20 66 6c 61 67      assert( flag
fec0: 73 33 3d 3d 70 49 6e 33 2d 3e 66 6c 61 67 73 20  s3==pIn3->flags 
fed0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  );.          /* 
fee0: 74 65 73 74 63 61 73 65 28 20 66 6c 61 67 73 33  testcase( flags3
fef0: 21 3d 70 49 6e 33 2d 3e 66 6c 61 67 73 20 29 3b  !=pIn3->flags );
ff00: 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68  .          ** th
ff10: 69 73 20 75 73 65 64 20 74 6f 20 62 65 20 70 6f  is used to be po
ff20: 73 73 69 62 6c 65 20 77 69 74 68 20 70 49 6e 31  ssible with pIn1
ff30: 3d 3d 70 49 6e 33 2c 20 62 75 74 20 6e 6f 74 20  ==pIn3, but not 
ff40: 73 69 6e 63 65 0a 20 20 20 20 20 20 20 20 20 20  since.          
ff50: 2a 2a 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61  ** the column ca
ff60: 63 68 65 20 77 61 73 20 72 65 6d 6f 76 65 64 2e  che was removed.
ff70: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
ff80: 61 73 73 69 67 6e 6d 65 6e 74 0a 20 20 20 20 20  assignment.     
ff90: 20 20 20 20 20 2a 2a 20 69 73 20 65 73 73 65 6e       ** is essen
ffa0: 74 69 61 6c 6c 79 20 61 20 6e 6f 2d 6f 70 2e 20  tially a no-op. 
ffb0: 20 42 75 74 2c 20 69 74 20 70 72 6f 76 69 64 65   But, it provide
ffc0: 73 20 64 65 66 65 6e 73 65 2d 69 6e 2d 64 65 70  s defense-in-dep
ffd0: 74 68 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20  th.          ** 
ffe0: 69 6e 20 63 61 73 65 20 6f 75 72 20 61 6e 61 6c  in case our anal
fff0: 79 73 69 73 20 69 73 20 69 6e 63 6f 72 72 65 63  ysis is incorrec
10000 74 2c 20 73 6f 20 69 74 20 69 73 20 6c 65 66 74  t, so it is left
10010 20 69 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20   in. */.        
10020 20 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d    flags3 = pIn3-
10030 3e 66 6c 61 67 73 3b 0a 20 20 20 20 20 20 20 20  >flags;.        
10040 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 66  }.        if( (f
10050 6c 61 67 73 33 20 26 20 28 4d 45 4d 5f 49 6e 74  lags3 & (MEM_Int
10060 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74  |MEM_Real|MEM_St
10070 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a  r))==MEM_Str ){.
10080 20 20 20 20 20 20 20 20 20 20 61 70 70 6c 79 4e            applyN
10090 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70  umericAffinity(p
100a0 49 6e 33 2c 30 29 3b 0a 20 20 20 20 20 20 20 20  In3,0);.        
100b0 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  }.      }.      
100c0 2f 2a 20 48 61 6e 64 6c 65 20 74 68 65 20 63 6f  /* Handle the co
100d0 6d 6d 6f 6e 20 63 61 73 65 20 6f 66 20 69 6e 74  mmon case of int
100e0 65 67 65 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20  eger comparison 
100f0 68 65 72 65 2c 20 61 73 20 61 6e 0a 20 20 20 20  here, as an.    
10100 20 20 2a 2a 20 6f 70 74 69 6d 69 7a 61 74 69 6f    ** optimizatio
10110 6e 2c 20 74 6f 20 61 76 6f 69 64 20 61 20 63 61  n, to avoid a ca
10120 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 4d 65 6d  ll to sqlite3Mem
10130 43 6f 6d 70 61 72 65 28 29 20 2a 2f 0a 20 20 20  Compare() */.   
10140 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c     if( (pIn1->fl
10150 61 67 73 20 26 20 70 49 6e 33 2d 3e 66 6c 61 67  ags & pIn3->flag
10160 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
10170 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  ){.        if( p
10180 49 6e 33 2d 3e 75 2e 69 20 3e 20 70 49 6e 31 2d  In3->u.i > pIn1-
10190 3e 75 2e 69 20 29 7b 20 72 65 73 20 3d 20 2b 31  >u.i ){ res = +1
101a0 3b 20 67 6f 74 6f 20 63 6f 6d 70 61 72 65 5f 6f  ; goto compare_o
101b0 70 3b 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28  p; }.        if(
101c0 20 70 49 6e 33 2d 3e 75 2e 69 20 3c 20 70 49 6e   pIn3->u.i < pIn
101d0 31 2d 3e 75 2e 69 20 29 7b 20 72 65 73 20 3d 20  1->u.i ){ res = 
101e0 2d 31 3b 20 67 6f 74 6f 20 63 6f 6d 70 61 72 65  -1; goto compare
101f0 5f 6f 70 3b 20 7d 0a 20 20 20 20 20 20 20 20 72  _op; }.        r
10200 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  es = 0;.        
10210 67 6f 74 6f 20 63 6f 6d 70 61 72 65 5f 6f 70 3b  goto compare_op;
10220 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
10230 73 65 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d  se if( affinity=
10240 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54  =SQLITE_AFF_TEXT
10250 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 66   ){.      if( (f
10260 6c 61 67 73 31 20 26 20 4d 45 4d 5f 53 74 72 29  lags1 & MEM_Str)
10270 3d 3d 30 20 26 26 20 28 66 6c 61 67 73 31 20 26  ==0 && (flags1 &
10280 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65   (MEM_Int|MEM_Re
10290 61 6c 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  al))!=0 ){.     
102a0 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e     testcase( pIn
102b0 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
102c0 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20 74 65  nt );.        te
102d0 73 74 63 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c  stcase( pIn1->fl
102e0 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29  ags & MEM_Real )
102f0 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
10300 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66  3VdbeMemStringif
10310 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67  y(pIn1, encoding
10320 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 74 65  , 1);.        te
10330 73 74 63 61 73 65 28 20 28 66 6c 61 67 73 31 26  stcase( (flags1&
10340 4d 45 4d 5f 44 79 6e 29 20 21 3d 20 28 70 49 6e  MEM_Dyn) != (pIn
10350 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 44 79 6e  1->flags&MEM_Dyn
10360 29 20 29 3b 0a 20 20 20 20 20 20 20 20 66 6c 61  ) );.        fla
10370 67 73 31 20 3d 20 28 70 49 6e 31 2d 3e 66 6c 61  gs1 = (pIn1->fla
10380 67 73 20 26 20 7e 4d 45 4d 5f 54 79 70 65 4d 61  gs & ~MEM_TypeMa
10390 73 6b 29 20 7c 20 28 66 6c 61 67 73 31 20 26 20  sk) | (flags1 & 
103a0 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20  MEM_TypeMask);. 
103b0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
103c0 49 6e 31 21 3d 70 49 6e 33 20 29 3b 0a 20 20 20  In1!=pIn3 );.   
103d0 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28     }.      if( (
103e0 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 53 74 72  flags3 & MEM_Str
103f0 29 3d 3d 30 20 26 26 20 28 66 6c 61 67 73 33 20  )==0 && (flags3 
10400 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
10410 65 61 6c 29 29 21 3d 30 20 29 7b 0a 20 20 20 20  eal))!=0 ){.    
10420 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49      testcase( pI
10430 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
10440 49 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20 74  Int );.        t
10450 65 73 74 63 61 73 65 28 20 70 49 6e 33 2d 3e 66  estcase( pIn3->f
10460 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20  lags & MEM_Real 
10470 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
10480 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69  e3VdbeMemStringi
10490 66 79 28 70 49 6e 33 2c 20 65 6e 63 6f 64 69 6e  fy(pIn3, encodin
104a0 67 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 74  g, 1);.        t
104b0 65 73 74 63 61 73 65 28 20 28 66 6c 61 67 73 33  estcase( (flags3
104c0 26 4d 45 4d 5f 44 79 6e 29 20 21 3d 20 28 70 49  &MEM_Dyn) != (pI
104d0 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 44 79  n3->flags&MEM_Dy
104e0 6e 29 20 29 3b 0a 20 20 20 20 20 20 20 20 66 6c  n) );.        fl
104f0 61 67 73 33 20 3d 20 28 70 49 6e 33 2d 3e 66 6c  ags3 = (pIn3->fl
10500 61 67 73 20 26 20 7e 4d 45 4d 5f 54 79 70 65 4d  ags & ~MEM_TypeM
10510 61 73 6b 29 20 7c 20 28 66 6c 61 67 73 33 20 26  ask) | (flags3 &
10520 20 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a   MEM_TypeMask);.
10530 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
10540 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
10550 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45  4type==P4_COLLSE
10560 51 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f  Q || pOp->p4.pCo
10570 6c 6c 3d 3d 30 20 29 3b 0a 20 20 20 20 72 65 73  ll==0 );.    res
10580 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d   = sqlite3MemCom
10590 70 61 72 65 28 70 49 6e 33 2c 20 70 49 6e 31 2c  pare(pIn3, pIn1,
105a0 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b   pOp->p4.pColl);
105b0 0a 20 20 7d 0a 63 6f 6d 70 61 72 65 5f 6f 70 3a  .  }.compare_op:
105c0 0a 20 20 2f 2a 20 41 74 20 74 68 69 73 20 70 6f  .  /* At this po
105d0 69 6e 74 2c 20 72 65 73 20 69 73 20 6e 65 67 61  int, res is nega
105e0 74 69 76 65 2c 20 7a 65 72 6f 2c 20 6f 72 20 70  tive, zero, or p
105f0 6f 73 69 74 69 76 65 20 69 66 20 72 65 67 5b 50  ositive if reg[P
10600 31 5d 20 69 73 0a 20 20 2a 2a 20 6c 65 73 73 20  1] is.  ** less 
10610 74 68 61 6e 2c 20 65 71 75 61 6c 20 74 6f 2c 20  than, equal to, 
10620 6f 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  or greater than 
10630 72 65 67 5b 50 33 5d 2c 20 72 65 73 70 65 63 74  reg[P3], respect
10640 69 76 65 6c 79 2e 20 20 43 6f 6d 70 75 74 65 0a  ively.  Compute.
10650 20 20 2a 2a 20 74 68 65 20 61 6e 73 77 65 72 20    ** the answer 
10660 74 6f 20 74 68 69 73 20 6f 70 65 72 61 74 6f 72  to this operator
10670 20 69 6e 20 72 65 73 32 2c 20 64 65 70 65 6e 64   in res2, depend
10680 69 6e 67 20 6f 6e 20 77 68 61 74 20 74 68 65 20  ing on what the 
10690 63 6f 6d 70 61 72 69 73 6f 6e 0a 20 20 2a 2a 20  comparison.  ** 
106a0 6f 70 65 72 61 74 6f 72 20 61 63 74 75 61 6c 6c  operator actuall
106b0 79 20 69 73 2e 20 20 54 68 65 20 6e 65 78 74 20  y is.  The next 
106c0 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 20 64 65  block of code de
106d0 70 65 6e 64 73 20 6f 6e 20 74 68 65 20 66 61 63  pends on the fac
106e0 74 0a 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20  t.  ** that the 
106f0 36 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65  6 comparison ope
10700 72 61 74 6f 72 73 20 61 72 65 20 63 6f 6e 73 65  rators are conse
10710 63 75 74 69 76 65 20 69 6e 74 65 67 65 72 73 20  cutive integers 
10720 69 6e 20 74 68 69 73 0a 20 20 2a 2a 20 6f 72 64  in this.  ** ord
10730 65 72 3a 20 20 4e 45 2c 20 45 51 2c 20 47 54 2c  er:  NE, EQ, GT,
10740 20 4c 45 2c 20 4c 54 2c 20 47 45 20 2a 2f 0a 20   LE, LT, GE */. 
10750 20 61 73 73 65 72 74 28 20 4f 50 5f 45 71 3d 3d   assert( OP_Eq==
10760 4f 50 5f 4e 65 2b 31 20 29 3b 20 61 73 73 65 72  OP_Ne+1 ); asser
10770 74 28 20 4f 50 5f 47 74 3d 3d 4f 50 5f 4e 65 2b  t( OP_Gt==OP_Ne+
10780 32 20 29 3b 20 61 73 73 65 72 74 28 20 4f 50 5f  2 ); assert( OP_
10790 4c 65 3d 3d 4f 50 5f 4e 65 2b 33 20 29 3b 0a 20  Le==OP_Ne+3 );. 
107a0 20 61 73 73 65 72 74 28 20 4f 50 5f 4c 74 3d 3d   assert( OP_Lt==
107b0 4f 50 5f 4e 65 2b 34 20 29 3b 20 61 73 73 65 72  OP_Ne+4 ); asser
107c0 74 28 20 4f 50 5f 47 65 3d 3d 4f 50 5f 4e 65 2b  t( OP_Ge==OP_Ne+
107d0 35 20 29 3b 0a 20 20 69 66 28 20 72 65 73 3c 30  5 );.  if( res<0
107e0 20 29 7b 20 20 20 20 20 20 20 20 20 20 20 20 20   ){             
107f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6e 65             /* ne
10800 2c 20 65 71 2c 20 67 74 2c 20 6c 65 2c 20 6c 74  , eq, gt, le, lt
10810 2c 20 67 65 20 2a 2f 0a 20 20 20 20 73 74 61 74  , ge */.    stat
10820 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  ic const unsigne
10830 64 20 63 68 61 72 20 61 4c 54 62 5b 5d 20 3d 20  d char aLTb[] = 
10840 7b 20 31 2c 20 20 30 2c 20 20 30 2c 20 20 31 2c  { 1,  0,  0,  1,
10850 20 20 31 2c 20 20 30 20 7d 3b 0a 20 20 20 20 72    1,  0 };.    r
10860 65 73 32 20 3d 20 61 4c 54 62 5b 70 4f 70 2d 3e  es2 = aLTb[pOp->
10870 6f 70 63 6f 64 65 20 2d 20 4f 50 5f 4e 65 5d 3b  opcode - OP_Ne];
10880 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 72 65 73  .  }else if( res
10890 3d 3d 30 20 29 7b 0a 20 20 20 20 73 74 61 74 69  ==0 ){.    stati
108a0 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  c const unsigned
108b0 20 63 68 61 72 20 61 45 51 62 5b 5d 20 3d 20 7b   char aEQb[] = {
108c0 20 30 2c 20 20 31 2c 20 20 30 2c 20 20 31 2c 20   0,  1,  0,  1, 
108d0 20 30 2c 20 20 31 20 7d 3b 0a 20 20 20 20 72 65   0,  1 };.    re
108e0 73 32 20 3d 20 61 45 51 62 5b 70 4f 70 2d 3e 6f  s2 = aEQb[pOp->o
108f0 70 63 6f 64 65 20 2d 20 4f 50 5f 4e 65 5d 3b 0a  pcode - OP_Ne];.
10900 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 74 61    }else{.    sta
10910 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  tic const unsign
10920 65 64 20 63 68 61 72 20 61 47 54 62 5b 5d 20 3d  ed char aGTb[] =
10930 20 7b 20 31 2c 20 20 30 2c 20 20 31 2c 20 20 30   { 1,  0,  1,  0
10940 2c 20 20 30 2c 20 20 31 20 7d 3b 0a 20 20 20 20  ,  0,  1 };.    
10950 72 65 73 32 20 3d 20 61 47 54 62 5b 70 4f 70 2d  res2 = aGTb[pOp-
10960 3e 6f 70 63 6f 64 65 20 2d 20 4f 50 5f 4e 65 5d  >opcode - OP_Ne]
10970 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 55 6e 64 6f  ;.  }..  /* Undo
10980 20 61 6e 79 20 63 68 61 6e 67 65 73 20 6d 61 64   any changes mad
10990 65 20 62 79 20 61 70 70 6c 79 41 66 66 69 6e 69  e by applyAffini
109a0 74 79 28 29 20 74 6f 20 74 68 65 20 69 6e 70 75  ty() to the inpu
109b0 74 20 72 65 67 69 73 74 65 72 73 2e 20 2a 2f 0a  t registers. */.
109c0 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d    assert( (pIn1-
109d0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e  >flags & MEM_Dyn
109e0 29 20 3d 3d 20 28 66 6c 61 67 73 31 20 26 20 4d  ) == (flags1 & M
109f0 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 70 49 6e  EM_Dyn) );.  pIn
10a00 31 2d 3e 66 6c 61 67 73 20 3d 20 66 6c 61 67 73  1->flags = flags
10a10 31 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 49  1;.  assert( (pI
10a20 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
10a30 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67 73 33 20  Dyn) == (flags3 
10a40 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20  & MEM_Dyn) );.  
10a50 70 49 6e 33 2d 3e 66 6c 61 67 73 20 3d 20 66 6c  pIn3->flags = fl
10a60 61 67 73 33 3b 0a 0a 20 20 69 66 28 20 70 4f 70  ags3;..  if( pOp
10a70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54  ->p5 & SQLITE_ST
10a80 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 70 4f 75  OREP2 ){.    pOu
10a90 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
10aa0 32 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72 65  2];.    iCompare
10ab0 20 3d 20 72 65 73 3b 0a 20 20 20 20 69 66 28 20   = res;.    if( 
10ac0 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54  (pOp->p5 & SQLIT
10ad0 45 5f 4b 45 45 50 4e 55 4c 4c 29 21 3d 30 20 29  E_KEEPNULL)!=0 )
10ae0 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4b  {.      /* The K
10af0 45 45 50 4e 55 4c 4c 20 66 6c 61 67 20 70 72 65  EEPNULL flag pre
10b00 76 65 6e 74 73 20 4f 50 5f 45 71 20 66 72 6f 6d  vents OP_Eq from
10b10 20 6f 76 65 72 77 72 69 74 69 6e 67 20 61 20 4e   overwriting a N
10b20 55 4c 4c 20 77 69 74 68 20 31 0a 20 20 20 20 20  ULL with 1.     
10b30 20 2a 2a 20 61 6e 64 20 70 72 65 76 65 6e 74 73   ** and prevents
10b40 20 4f 50 5f 4e 65 20 66 72 6f 6d 20 6f 76 65 72   OP_Ne from over
10b50 77 72 69 74 69 6e 67 20 4e 55 4c 4c 20 77 69 74  writing NULL wit
10b60 68 20 30 2e 20 20 54 68 69 73 20 66 6c 61 67 0a  h 0.  This flag.
10b70 20 20 20 20 20 20 2a 2a 20 69 73 20 6f 6e 6c 79        ** is only
10b80 20 75 73 65 64 20 69 6e 20 63 6f 6e 74 65 78 74   used in context
10b90 73 20 77 68 65 72 65 20 65 69 74 68 65 72 3a 0a  s where either:.
10ba0 20 20 20 20 20 20 2a 2a 20 20 20 28 31 29 20 6f        **   (1) o
10bb0 70 3d 3d 4f 50 5f 45 71 20 26 26 20 28 72 5b 50  p==OP_Eq && (r[P
10bc0 32 5d 3d 3d 4e 55 4c 4c 20 7c 7c 20 72 5b 50 32  2]==NULL || r[P2
10bd0 5d 3d 3d 30 29 0a 20 20 20 20 20 20 2a 2a 20 20  ]==0).      **  
10be0 20 28 32 29 20 6f 70 3d 3d 4f 50 5f 4e 65 20 26   (2) op==OP_Ne &
10bf0 26 20 28 72 5b 50 32 5d 3d 3d 4e 55 4c 4c 20 7c  & (r[P2]==NULL |
10c00 7c 20 72 5b 50 32 5d 3d 3d 31 29 0a 20 20 20 20  | r[P2]==1).    
10c10 20 20 2a 2a 20 54 68 65 72 65 66 6f 72 65 20 69    ** Therefore i
10c20 74 20 69 73 20 6e 6f 74 20 6e 65 63 65 73 73 61  t is not necessa
10c30 72 79 20 74 6f 20 63 68 65 63 6b 20 74 68 65 20  ry to check the 
10c40 63 6f 6e 74 65 6e 74 20 6f 66 20 72 5b 50 32 5d  content of r[P2]
10c50 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20 4e 55   for.      ** NU
10c60 4c 4c 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  LL. */.      ass
10c70 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
10c80 3d 3d 4f 50 5f 4e 65 20 7c 7c 20 70 4f 70 2d 3e  ==OP_Ne || pOp->
10c90 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 29 3b  opcode==OP_Eq );
10ca0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72  .      assert( r
10cb0 65 73 32 3d 3d 30 20 7c 7c 20 72 65 73 32 3d 3d  es2==0 || res2==
10cc0 31 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63  1 );.      testc
10cd0 61 73 65 28 20 72 65 73 32 3d 3d 30 20 26 26 20  ase( res2==0 && 
10ce0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
10cf0 45 71 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74  Eq );.      test
10d00 63 61 73 65 28 20 72 65 73 32 3d 3d 31 20 26 26  case( res2==1 &&
10d10 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
10d20 5f 45 71 20 29 3b 0a 20 20 20 20 20 20 74 65 73  _Eq );.      tes
10d30 74 63 61 73 65 28 20 72 65 73 32 3d 3d 30 20 26  tcase( res2==0 &
10d40 26 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  & pOp->opcode==O
10d50 50 5f 4e 65 20 29 3b 0a 20 20 20 20 20 20 74 65  P_Ne );.      te
10d60 73 74 63 61 73 65 28 20 72 65 73 32 3d 3d 31 20  stcase( res2==1 
10d70 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  && pOp->opcode==
10d80 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20 20 20 69  OP_Ne );.      i
10d90 66 28 20 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  f( (pOp->opcode=
10da0 3d 4f 50 5f 45 71 29 3d 3d 72 65 73 32 20 29 20  =OP_Eq)==res2 ) 
10db0 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20  break;.    }.   
10dc0 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
10dd0 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  e(p, pOut);.    
10de0 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
10df0 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
10e00 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72     pOut->u.i = r
10e10 65 73 32 3b 0a 20 20 20 20 52 45 47 49 53 54 45  es2;.    REGISTE
10e20 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
10e30 20 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b   pOut);.  }else{
10e40 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
10e50 61 6b 65 6e 28 72 65 73 21 3d 30 2c 20 28 70 4f  aken(res!=0, (pO
10e60 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e  p->p5 & SQLITE_N
10e70 55 4c 4c 45 51 29 3f 32 3a 33 29 3b 0a 20 20 20  ULLEQ)?2:3);.   
10e80 20 69 66 28 20 72 65 73 32 20 29 7b 0a 20 20 20   if( res2 ){.   
10e90 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
10ea0 70 32 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  p2;.    }.  }.  
10eb0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
10ec0 6f 64 65 3a 20 45 6c 73 65 4e 6f 74 45 71 20 2a  ode: ElseNotEq *
10ed0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
10ee0 54 68 69 73 20 6f 70 63 6f 64 65 20 6d 75 73 74  This opcode must
10ef0 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c   immediately fol
10f00 6c 6f 77 20 61 6e 20 4f 50 5f 4c 74 20 6f 72 20  low an OP_Lt or 
10f10 4f 50 5f 47 74 20 63 6f 6d 70 61 72 69 73 6f 6e  OP_Gt comparison
10f20 20 6f 70 65 72 61 74 6f 72 2e 0a 2a 2a 20 49 66   operator..** If
10f30 20 72 65 73 75 6c 74 20 6f 66 20 61 6e 20 4f 50   result of an OP
10f40 5f 45 71 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  _Eq comparison o
10f50 6e 20 74 68 65 20 73 61 6d 65 20 74 77 6f 20 6f  n the same two o
10f60 70 65 72 61 6e 64 73 0a 2a 2a 20 77 6f 75 6c 64  perands.** would
10f70 20 68 61 76 65 20 62 65 20 4e 55 4c 4c 20 6f 72   have be NULL or
10f80 20 66 61 6c 73 65 20 28 30 29 2c 20 74 68 65 6e   false (0), then
10f90 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
10fa0 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 72 65 73  . .** If the res
10fb0 75 6c 74 20 6f 66 20 61 6e 20 4f 50 5f 45 71 20  ult of an OP_Eq 
10fc0 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 6e 20 74 68  comparison on th
10fd0 65 20 74 77 6f 20 70 72 65 76 69 6f 75 73 20 6f  e two previous o
10fe0 70 65 72 61 6e 64 73 0a 2a 2a 20 77 6f 75 6c 64  perands.** would
10ff0 20 68 61 76 65 20 62 65 65 6e 20 74 72 75 65 20   have been true 
11000 28 31 29 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74  (1), then fall t
11010 68 72 6f 75 67 68 2e 0a 2a 2f 0a 63 61 73 65 20  hrough..*/.case 
11020 4f 50 5f 45 6c 73 65 4e 6f 74 45 71 3a 20 7b 20  OP_ElseNotEq: { 
11030 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
11040 20 54 4b 5f 45 53 43 41 50 45 2c 20 6a 75 6d 70   TK_ESCAPE, jump
11050 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
11060 70 3e 61 4f 70 20 29 3b 0a 20 20 61 73 73 65 72  p>aOp );.  asser
11070 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64  t( pOp[-1].opcod
11080 65 3d 3d 4f 50 5f 4c 74 20 7c 7c 20 70 4f 70 5b  e==OP_Lt || pOp[
11090 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 47  -1].opcode==OP_G
110a0 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t );.  assert( p
110b0 4f 70 5b 2d 31 5d 2e 70 35 20 26 20 53 51 4c 49  Op[-1].p5 & SQLI
110c0 54 45 5f 53 54 4f 52 45 50 32 20 29 3b 0a 20 20  TE_STOREP2 );.  
110d0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
110e0 69 43 6f 6d 70 61 72 65 21 3d 30 2c 20 32 29 3b  iCompare!=0, 2);
110f0 0a 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65 21  .  if( iCompare!
11100 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  =0 ) goto jump_t
11110 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  o_p2;.  break;.}
11120 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 65  .../* Opcode: Pe
11130 72 6d 75 74 61 74 69 6f 6e 20 2a 20 2a 20 2a 20  rmutation * * * 
11140 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74  P4 *.**.** Set t
11150 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 75  he permutation u
11160 73 65 64 20 62 79 20 74 68 65 20 4f 50 5f 43 6f  sed by the OP_Co
11170 6d 70 61 72 65 20 6f 70 65 72 61 74 6f 72 20 69  mpare operator i
11180 6e 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e  n the next.** in
11190 73 74 72 75 63 74 69 6f 6e 2e 20 20 54 68 65 20  struction.  The 
111a0 70 65 72 6d 75 74 61 74 69 6f 6e 20 69 73 20 73  permutation is s
111b0 74 6f 72 65 64 20 69 6e 20 74 68 65 20 50 34 20  tored in the P4 
111c0 6f 70 65 72 61 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54  operand..**.** T
111d0 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 69  he permutation i
111e0 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 75 6e 74  s only valid unt
111f0 69 6c 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 43  il the next OP_C
11200 6f 6d 70 61 72 65 20 74 68 61 74 20 68 61 73 0a  ompare that has.
11210 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f 50 45  ** the OPFLAG_PE
11220 52 4d 55 54 45 20 62 69 74 20 73 65 74 20 69 6e  RMUTE bit set in
11230 20 50 35 2e 20 54 79 70 69 63 61 6c 6c 79 20 74   P5. Typically t
11240 68 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f  he OP_Permutatio
11250 6e 20 73 68 6f 75 6c 64 20 0a 2a 2a 20 6f 63 63  n should .** occ
11260 75 72 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 70  ur immediately p
11270 72 69 6f 72 20 74 6f 20 74 68 65 20 4f 50 5f 43  rior to the OP_C
11280 6f 6d 70 61 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  ompare..**.** Th
11290 65 20 66 69 72 73 74 20 69 6e 74 65 67 65 72 20  e first integer 
112a0 69 6e 20 74 68 65 20 50 34 20 69 6e 74 65 67 65  in the P4 intege
112b0 72 20 61 72 72 61 79 20 69 73 20 74 68 65 20 6c  r array is the l
112c0 65 6e 67 74 68 20 6f 66 20 74 68 65 20 61 72 72  ength of the arr
112d0 61 79 0a 2a 2a 20 61 6e 64 20 64 6f 65 73 20 6e  ay.** and does n
112e0 6f 74 20 62 65 63 6f 6d 65 20 70 61 72 74 20 6f  ot become part o
112f0 66 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f  f the permutatio
11300 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 65  n..*/.case OP_Pe
11310 72 6d 75 74 61 74 69 6f 6e 3a 20 7b 0a 20 20 61  rmutation: {.  a
11320 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
11330 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20  pe==P4_INTARRAY 
11340 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
11350 2d 3e 70 34 2e 61 69 20 29 3b 0a 20 20 61 73 73  ->p4.ai );.  ass
11360 65 72 74 28 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f  ert( pOp[1].opco
11370 64 65 3d 3d 4f 50 5f 43 6f 6d 70 61 72 65 20 29  de==OP_Compare )
11380 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b  ;.  assert( pOp[
11390 31 5d 2e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50  1].p5 & OPFLAG_P
113a0 45 52 4d 55 54 45 20 29 3b 0a 20 20 62 72 65 61  ERMUTE );.  brea
113b0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
113c0 20 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50   Compare P1 P2 P
113d0 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
113e0 73 69 73 3a 20 72 5b 50 31 40 50 33 5d 20 3c 2d  sis: r[P1@P3] <-
113f0 3e 20 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a  > r[P2@P3].**.**
11400 20 43 6f 6d 70 61 72 65 20 74 77 6f 20 76 65 63   Compare two vec
11410 74 6f 72 73 20 6f 66 20 72 65 67 69 73 74 65 72  tors of register
11420 73 20 69 6e 20 72 65 67 28 50 31 29 2e 2e 72 65  s in reg(P1)..re
11430 67 28 50 31 2b 50 33 2d 31 29 20 28 63 61 6c 6c  g(P1+P3-1) (call
11440 20 74 68 69 73 0a 2a 2a 20 76 65 63 74 6f 72 20   this.** vector 
11450 22 41 22 29 20 61 6e 64 20 69 6e 20 72 65 67 28  "A") and in reg(
11460 50 32 29 2e 2e 72 65 67 28 50 32 2b 50 33 2d 31  P2)..reg(P2+P3-1
11470 29 20 28 22 42 22 29 2e 20 20 53 61 76 65 20 74  ) ("B").  Save t
11480 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20  he result of.** 
11490 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66  the comparison f
114a0 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 6e 65  or use by the ne
114b0 78 74 20 4f 50 5f 4a 75 6d 70 20 69 6e 73 74 72  xt OP_Jump instr
114c0 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  uct..**.** If P5
114d0 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f   has the OPFLAG_
114e0 50 45 52 4d 55 54 45 20 62 69 74 20 73 65 74 2c  PERMUTE bit set,
114f0 20 74 68 65 6e 20 74 68 65 20 6f 72 64 65 72 20   then the order 
11500 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  of comparison is
11510 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 64 20 62  .** determined b
11520 79 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  y the most recen
11530 74 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e  t OP_Permutation
11540 20 6f 70 65 72 61 74 6f 72 2e 20 20 49 66 20 74   operator.  If t
11550 68 65 0a 2a 2a 20 4f 50 46 4c 41 47 5f 50 45 52  he.** OPFLAG_PER
11560 4d 55 54 45 20 62 69 74 20 69 73 20 63 6c 65 61  MUTE bit is clea
11570 72 2c 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  r, then register
11580 20 61 72 65 20 63 6f 6d 70 61 72 65 64 20 69 6e   are compared in
11590 20 73 65 71 75 65 6e 74 69 61 6c 0a 2a 2a 20 6f   sequential.** o
115a0 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  rder..**.** P4 i
115b0 73 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75  s a KeyInfo stru
115c0 63 74 75 72 65 20 74 68 61 74 20 64 65 66 69 6e  cture that defin
115d0 65 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  es collating seq
115e0 75 65 6e 63 65 73 20 61 6e 64 20 73 6f 72 74 0a  uences and sort.
115f0 2a 2a 20 6f 72 64 65 72 73 20 66 6f 72 20 74 68  ** orders for th
11600 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54  e comparison.  T
11610 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 61  he permutation a
11620 70 70 6c 69 65 73 20 74 6f 20 72 65 67 69 73 74  pplies to regist
11630 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68  ers.** only.  Th
11640 65 20 4b 65 79 49 6e 66 6f 20 65 6c 65 6d 65 6e  e KeyInfo elemen
11650 74 73 20 61 72 65 20 75 73 65 64 20 73 65 71 75  ts are used sequ
11660 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20  entially..**.** 
11670 54 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69  The comparison i
11680 73 20 61 20 73 6f 72 74 20 63 6f 6d 70 61 72 69  s a sort compari
11690 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20 63 6f  son, so NULLs co
116a0 6d 70 61 72 65 20 65 71 75 61 6c 2c 0a 2a 2a 20  mpare equal,.** 
116b0 4e 55 4c 4c 73 20 61 72 65 20 6c 65 73 73 20 74  NULLs are less t
116c0 68 61 6e 20 6e 75 6d 62 65 72 73 2c 20 6e 75 6d  han numbers, num
116d0 62 65 72 73 20 61 72 65 20 6c 65 73 73 20 74 68  bers are less th
116e0 61 6e 20 73 74 72 69 6e 67 73 2c 0a 2a 2a 20 61  an strings,.** a
116f0 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65 20 6c  nd strings are l
11700 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a  ess than blobs..
11710 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6d 70 61  */.case OP_Compa
11720 72 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20  re: {.  int n;. 
11730 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 70 31   int i;.  int p1
11740 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 63 6f  ;.  int p2;.  co
11750 6e 73 74 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65  nst KeyInfo *pKe
11760 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 69 64 78  yInfo;.  int idx
11770 3b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f  ;.  CollSeq *pCo
11780 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74  ll;    /* Collat
11790 69 6e 67 20 73 65 71 75 65 6e 63 65 20 74 6f 20  ing sequence to 
117a0 75 73 65 20 6f 6e 20 74 68 69 73 20 74 65 72 6d  use on this term
117b0 20 2a 2f 0a 20 20 69 6e 74 20 62 52 65 76 3b 20   */.  int bRev; 
117c0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
117d0 20 66 6f 72 20 44 45 53 43 45 4e 44 49 4e 47 20   for DESCENDING 
117e0 73 6f 72 74 20 6f 72 64 65 72 20 2a 2f 0a 20 20  sort order */.  
117f0 69 6e 74 20 2a 61 50 65 72 6d 75 74 65 3b 20 20  int *aPermute;  
11800 20 20 20 2f 2a 20 54 68 65 20 70 65 72 6d 75 74     /* The permut
11810 61 74 69 6f 6e 20 2a 2f 0a 0a 20 20 69 66 28 20  ation */..  if( 
11820 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
11830 47 5f 50 45 52 4d 55 54 45 29 3d 3d 30 20 29 7b  G_PERMUTE)==0 ){
11840 0a 20 20 20 20 61 50 65 72 6d 75 74 65 20 3d 20  .    aPermute = 
11850 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  0;.  }else{.    
11860 61 73 73 65 72 74 28 20 70 4f 70 3e 61 4f 70 20  assert( pOp>aOp 
11870 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
11880 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  Op[-1].opcode==O
11890 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 29 3b  P_Permutation );
118a0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
118b0 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f  [-1].p4type==P4_
118c0 49 4e 54 41 52 52 41 59 20 29 3b 0a 20 20 20 20  INTARRAY );.    
118d0 61 50 65 72 6d 75 74 65 20 3d 20 70 4f 70 5b 2d  aPermute = pOp[-
118e0 31 5d 2e 70 34 2e 61 69 20 2b 20 31 3b 0a 20 20  1].p4.ai + 1;.  
118f0 20 20 61 73 73 65 72 74 28 20 61 50 65 72 6d 75    assert( aPermu
11900 74 65 21 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 6e  te!=0 );.  }.  n
11910 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b   = pOp->p3;.  pK
11920 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34  eyInfo = pOp->p4
11930 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73  .pKeyInfo;.  ass
11940 65 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61 73  ert( n>0 );.  as
11950 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 21 3d  sert( pKeyInfo!=
11960 30 20 29 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d  0 );.  p1 = pOp-
11970 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d  >p1;.  p2 = pOp-
11980 3e 70 32 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  >p2;.#ifdef SQLI
11990 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 61  TE_DEBUG.  if( a
119a0 50 65 72 6d 75 74 65 20 29 7b 0a 20 20 20 20 69  Permute ){.    i
119b0 6e 74 20 6b 2c 20 6d 78 20 3d 20 30 3b 0a 20 20  nt k, mx = 0;.  
119c0 20 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20    for(k=0; k<n; 
119d0 6b 2b 2b 29 20 69 66 28 20 61 50 65 72 6d 75 74  k++) if( aPermut
119e0 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78 20 3d 20 61  e[k]>mx ) mx = a
119f0 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a 20 20 20 20  Permute[k];.    
11a00 61 73 73 65 72 74 28 20 70 31 3e 30 20 26 26 20  assert( p1>0 && 
11a10 70 31 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p1+mx<=(p->nMem+
11a20 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  1 - p->nCursor)+
11a30 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  1 );.    assert(
11a40 20 70 32 3e 30 20 26 26 20 70 32 2b 6d 78 3c 3d   p2>0 && p2+mx<=
11a50 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
11a60 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
11a70 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
11a80 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6e 3c  t( p1>0 && p1+n<
11a90 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
11aa0 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20  >nCursor)+1 );. 
11ab0 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20     assert( p2>0 
11ac0 26 26 20 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65  && p2+n<=(p->nMe
11ad0 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
11ae0 29 2b 31 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  )+1 );.  }.#endi
11af0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55  f /* SQLITE_DEBU
11b00 47 20 2a 2f 0a 20 20 66 6f 72 28 69 3d 30 3b 20  G */.  for(i=0; 
11b10 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  i<n; i++){.    i
11b20 64 78 20 3d 20 61 50 65 72 6d 75 74 65 20 3f 20  dx = aPermute ? 
11b30 61 50 65 72 6d 75 74 65 5b 69 5d 20 3a 20 69 3b  aPermute[i] : i;
11b40 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
11b50 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 31  IsValid(&aMem[p1
11b60 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20 61 73  +idx]) );.    as
11b70 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
11b80 28 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 20  (&aMem[p2+idx]) 
11b90 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
11ba0 54 52 41 43 45 28 70 31 2b 69 64 78 2c 20 26 61  TRACE(p1+idx, &a
11bb0 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 3b 0a 20 20  Mem[p1+idx]);.  
11bc0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
11bd0 28 70 32 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70  (p2+idx, &aMem[p
11be0 32 2b 69 64 78 5d 29 3b 0a 20 20 20 20 61 73 73  2+idx]);.    ass
11bf0 65 72 74 28 20 69 3c 70 4b 65 79 49 6e 66 6f 2d  ert( i<pKeyInfo-
11c00 3e 6e 4b 65 79 46 69 65 6c 64 20 29 3b 0a 20 20  >nKeyField );.  
11c10 20 20 70 43 6f 6c 6c 20 3d 20 70 4b 65 79 49 6e    pColl = pKeyIn
11c20 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a 20 20  fo->aColl[i];.  
11c30 20 20 62 52 65 76 20 3d 20 70 4b 65 79 49 6e 66    bRev = pKeyInf
11c40 6f 2d 3e 61 53 6f 72 74 4f 72 64 65 72 5b 69 5d  o->aSortOrder[i]
11c50 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72 65 20 3d  ;.    iCompare =
11c60 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61   sqlite3MemCompa
11c70 72 65 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d  re(&aMem[p1+idx]
11c80 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 2c  , &aMem[p2+idx],
11c90 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20 69 66 28   pColl);.    if(
11ca0 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a 20 20 20   iCompare ){.   
11cb0 20 20 20 69 66 28 20 62 52 65 76 20 29 20 69 43     if( bRev ) iC
11cc0 6f 6d 70 61 72 65 20 3d 20 2d 69 43 6f 6d 70 61  ompare = -iCompa
11cd0 72 65 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  re;.      break;
11ce0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
11cf0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
11d00 3a 20 4a 75 6d 70 20 50 31 20 50 32 20 50 33 20  : Jump P1 P2 P3 
11d10 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
11d20 6f 20 74 68 65 20 69 6e 73 74 72 75 63 74 69 6f  o the instructio
11d30 6e 20 61 74 20 61 64 64 72 65 73 73 20 50 31 2c  n at address P1,
11d40 20 50 32 2c 20 6f 72 20 50 33 20 64 65 70 65 6e   P2, or P3 depen
11d50 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a  ding on whether.
11d60 2a 2a 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 72  ** in the most r
11d70 65 63 65 6e 74 20 4f 50 5f 43 6f 6d 70 61 72 65  ecent OP_Compare
11d80 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 65   instruction the
11d90 20 50 31 20 76 65 63 74 6f 72 20 77 61 73 20 6c   P1 vector was l
11da0 65 73 73 20 74 68 61 6e 0a 2a 2a 20 65 71 75 61  ess than.** equa
11db0 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72  l to, or greater
11dc0 20 74 68 61 6e 20 74 68 65 20 50 32 20 76 65 63   than the P2 vec
11dd0 74 6f 72 2c 20 72 65 73 70 65 63 74 69 76 65 6c  tor, respectivel
11de0 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 75  y..*/.case OP_Ju
11df0 6d 70 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  mp: {           
11e00 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
11e10 66 28 20 69 43 6f 6d 70 61 72 65 3c 30 20 29 7b  f( iCompare<0 ){
11e20 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
11e30 61 6b 65 6e 28 30 2c 34 29 3b 20 70 4f 70 20 3d  aken(0,4); pOp =
11e40 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 31 20 2d 20   &aOp[pOp->p1 - 
11e50 31 5d 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  1];.  }else if( 
11e60 69 43 6f 6d 70 61 72 65 3d 3d 30 20 29 7b 0a 20  iCompare==0 ){. 
11e70 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
11e80 65 6e 28 31 2c 34 29 3b 20 70 4f 70 20 3d 20 26  en(1,4); pOp = &
11e90 61 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d  aOp[pOp->p2 - 1]
11ea0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56  ;.  }else{.    V
11eb0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 32  dbeBranchTaken(2
11ec0 2c 34 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b  ,4); pOp = &aOp[
11ed0 70 4f 70 2d 3e 70 33 20 2d 20 31 5d 3b 0a 20 20  pOp->p3 - 1];.  
11ee0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
11ef0 20 4f 70 63 6f 64 65 3a 20 41 6e 64 20 50 31 20   Opcode: And P1 
11f00 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
11f10 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b  opsis: r[P3]=(r[
11f20 50 31 5d 20 26 26 20 72 5b 50 32 5d 29 0a 2a 2a  P1] && r[P2]).**
11f30 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67  .** Take the log
11f40 69 63 61 6c 20 41 4e 44 20 6f 66 20 74 68 65 20  ical AND of the 
11f50 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
11f60 65 72 73 20 50 31 20 61 6e 64 20 50 32 20 61 6e  ers P1 and P2 an
11f70 64 0a 2a 2a 20 77 72 69 74 65 20 74 68 65 20 72  d.** write the r
11f80 65 73 75 6c 74 20 69 6e 74 6f 20 72 65 67 69 73  esult into regis
11f90 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P3..**.** If
11fa0 20 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32   either P1 or P2
11fb0 20 69 73 20 30 20 28 66 61 6c 73 65 29 20 74 68   is 0 (false) th
11fc0 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
11fd0 20 30 20 65 76 65 6e 20 69 66 0a 2a 2a 20 74 68   0 even if.** th
11fe0 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73  e other input is
11ff0 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61   NULL.  A NULL a
12000 6e 64 20 74 72 75 65 20 6f 72 20 74 77 6f 20 4e  nd true or two N
12010 55 4c 4c 73 20 67 69 76 65 0a 2a 2a 20 61 20 4e  ULLs give.** a N
12020 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f  ULL output..*/./
12030 2a 20 4f 70 63 6f 64 65 3a 20 4f 72 20 50 31 20  * Opcode: Or P1 
12040 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
12050 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b  opsis: r[P3]=(r[
12060 50 31 5d 20 7c 7c 20 72 5b 50 32 5d 29 0a 2a 2a  P1] || r[P2]).**
12070 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67  .** Take the log
12080 69 63 61 6c 20 4f 52 20 6f 66 20 74 68 65 20 76  ical OR of the v
12090 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
120a0 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a  r P1 and P2 and.
120b0 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 61 6e 73  ** store the ans
120c0 77 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20  wer in register 
120d0 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74  P3..**.** If eit
120e0 68 65 72 20 50 31 20 6f 72 20 50 32 20 69 73 20  her P1 or P2 is 
120f0 6e 6f 6e 7a 65 72 6f 20 28 74 72 75 65 29 20 74  nonzero (true) t
12100 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
12110 73 20 31 20 28 74 72 75 65 29 0a 2a 2a 20 65 76  s 1 (true).** ev
12120 65 6e 20 69 66 20 74 68 65 20 6f 74 68 65 72 20  en if the other 
12130 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20  input is NULL.  
12140 41 20 4e 55 4c 4c 20 61 6e 64 20 66 61 6c 73 65  A NULL and false
12150 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a   or two NULLs.**
12160 20 67 69 76 65 20 61 20 4e 55 4c 4c 20 6f 75 74   give a NULL out
12170 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  put..*/.case OP_
12180 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20 20  And:            
12190 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
121a0 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  AND, in1, in2, o
121b0 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  ut3 */.case OP_O
121c0 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  r: {            
121d0 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4f   /* same as TK_O
121e0 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  R, in1, in2, out
121f0 33 20 2a 2f 0a 20 20 69 6e 74 20 76 31 3b 20 20  3 */.  int v1;  
12200 20 20 2f 2a 20 4c 65 66 74 20 6f 70 65 72 61 6e    /* Left operan
12210 64 3a 20 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d  d:  0==FALSE, 1=
12220 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57  =TRUE, 2==UNKNOW
12230 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69  N or NULL */.  i
12240 6e 74 20 76 32 3b 20 20 20 20 2f 2a 20 52 69 67  nt v2;    /* Rig
12250 68 74 20 6f 70 65 72 61 6e 64 3a 20 30 3d 3d 46  ht operand: 0==F
12260 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32  ALSE, 1==TRUE, 2
12270 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c  ==UNKNOWN or NUL
12280 4c 20 2a 2f 0a 0a 20 20 76 31 20 3d 20 73 71 6c  L */..  v1 = sql
12290 69 74 65 33 56 64 62 65 42 6f 6f 6c 65 61 6e 56  ite3VdbeBooleanV
122a0 61 6c 75 65 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  alue(&aMem[pOp->
122b0 70 31 5d 2c 20 32 29 3b 0a 20 20 76 32 20 3d 20  p1], 2);.  v2 = 
122c0 73 71 6c 69 74 65 33 56 64 62 65 42 6f 6f 6c 65  sqlite3VdbeBoole
122d0 61 6e 56 61 6c 75 65 28 26 61 4d 65 6d 5b 70 4f  anValue(&aMem[pO
122e0 70 2d 3e 70 32 5d 2c 20 32 29 3b 0a 20 20 69 66  p->p2], 2);.  if
122f0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
12300 50 5f 41 6e 64 20 29 7b 0a 20 20 20 20 73 74 61  P_And ){.    sta
12310 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  tic const unsign
12320 65 64 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69  ed char and_logi
12330 63 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c  c[] = { 0, 0, 0,
12340 20 30 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20   0, 1, 2, 0, 2, 
12350 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e  2 };.    v1 = an
12360 64 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d  d_logic[v1*3+v2]
12370 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
12380 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69  tatic const unsi
12390 67 6e 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67  gned char or_log
123a0 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32  ic[] = { 0, 1, 2
123b0 2c 20 31 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c  , 1, 1, 1, 2, 1,
123c0 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f   2 };.    v1 = o
123d0 72 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d  r_logic[v1*3+v2]
123e0 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26  ;.  }.  pOut = &
123f0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
12400 20 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20   if( v1==2 ){.  
12410 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
12420 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  (pOut, MEM_Null)
12430 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
12440 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20  Out->u.i = v1;. 
12450 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
12460 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
12470 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
12480 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 54  ../* Opcode: IsT
12490 72 75 65 20 50 31 20 50 32 20 50 33 20 50 34 20  rue P1 P2 P3 P4 
124a0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
124b0 5b 50 32 5d 20 3d 20 63 6f 61 6c 65 73 63 65 28  [P2] = coalesce(
124c0 72 5b 50 31 5d 3d 3d 54 52 55 45 2c 50 33 29 20  r[P1]==TRUE,P3) 
124d0 5e 20 50 34 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ^ P4.**.** This 
124e0 6f 70 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74  opcode implement
124f0 73 20 74 68 65 20 49 53 20 54 52 55 45 2c 20 49  s the IS TRUE, I
12500 53 20 46 41 4c 53 45 2c 20 49 53 20 4e 4f 54 20  S FALSE, IS NOT 
12510 54 52 55 45 2c 20 61 6e 64 0a 2a 2a 20 49 53 20  TRUE, and.** IS 
12520 4e 4f 54 20 46 41 4c 53 45 20 6f 70 65 72 61 74  NOT FALSE operat
12530 6f 72 73 2e 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72  ors..**.** Inter
12540 70 72 65 74 20 74 68 65 20 76 61 6c 75 65 20 69  pret the value i
12550 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73  n register P1 as
12560 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65   a boolean value
12570 2e 20 20 53 74 6f 72 65 20 74 68 61 74 0a 2a 2a  .  Store that.**
12580 20 62 6f 6f 6c 65 61 6e 20 28 61 20 30 20 6f 72   boolean (a 0 or
12590 20 31 29 20 69 6e 20 72 65 67 69 73 74 65 72 20   1) in register 
125a0 50 32 2e 20 20 4f 72 20 69 66 20 74 68 65 20 76  P2.  Or if the v
125b0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
125c0 20 50 31 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c   P1 is .** NULL,
125d0 20 74 68 65 6e 20 74 68 65 20 50 33 20 69 73 20   then the P3 is 
125e0 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
125f0 65 72 20 50 32 2e 20 20 49 6e 76 65 72 74 20 74  er P2.  Invert t
12600 68 65 20 61 6e 73 77 65 72 20 69 66 20 50 34 0a  he answer if P4.
12610 2a 2a 20 69 73 20 31 2e 0a 2a 2a 0a 2a 2a 20 54  ** is 1..**.** T
12620 68 65 20 6c 6f 67 69 63 20 69 73 20 73 75 6d 6d  he logic is summ
12630 61 72 69 7a 65 64 20 6c 69 6b 65 20 74 68 69 73  arized like this
12640 3a 0a 2a 2a 0a 2a 2a 20 3c 75 6c 3e 20 0a 2a 2a  :.**.** <ul> .**
12650 20 3c 6c 69 3e 20 49 66 20 50 33 3d 3d 30 20 61   <li> If P3==0 a
12660 6e 64 20 50 34 3d 3d 30 20 20 74 68 65 6e 20 20  nd P4==0  then  
12670 72 5b 50 32 5d 20 3a 3d 20 72 5b 50 31 5d 20 49  r[P2] := r[P1] I
12680 53 20 54 52 55 45 0a 2a 2a 20 3c 6c 69 3e 20 49  S TRUE.** <li> I
12690 66 20 50 33 3d 3d 31 20 61 6e 64 20 50 34 3d 3d  f P3==1 and P4==
126a0 31 20 20 74 68 65 6e 20 20 72 5b 50 32 5d 20 3a  1  then  r[P2] :
126b0 3d 20 72 5b 50 31 5d 20 49 53 20 46 41 4c 53 45  = r[P1] IS FALSE
126c0 0a 2a 2a 20 3c 6c 69 3e 20 49 66 20 50 33 3d 3d  .** <li> If P3==
126d0 30 20 61 6e 64 20 50 34 3d 3d 31 20 20 74 68 65  0 and P4==1  the
126e0 6e 20 20 72 5b 50 32 5d 20 3a 3d 20 72 5b 50 31  n  r[P2] := r[P1
126f0 5d 20 49 53 20 4e 4f 54 20 54 52 55 45 0a 2a 2a  ] IS NOT TRUE.**
12700 20 3c 6c 69 3e 20 49 66 20 50 33 3d 3d 31 20 61   <li> If P3==1 a
12710 6e 64 20 50 34 3d 3d 30 20 20 74 68 65 6e 20 20  nd P4==0  then  
12720 72 5b 50 32 5d 20 3a 3d 20 72 5b 50 31 5d 20 49  r[P2] := r[P1] I
12730 53 20 4e 4f 54 20 46 41 4c 53 45 0a 2a 2a 20 3c  S NOT FALSE.** <
12740 2f 75 6c 3e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  /ul>.*/.case OP_
12750 49 73 54 72 75 65 3a 20 7b 20 20 20 20 20 20 20  IsTrue: {       
12760 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20          /* in1, 
12770 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72 74  out2 */.  assert
12780 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
12790 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61 73 73  4_INT32 );.  ass
127a0 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 69 3d 3d  ert( pOp->p4.i==
127b0 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 69 3d 3d  0 || pOp->p4.i==
127c0 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  1 );.  assert( p
127d0 4f 70 2d 3e 70 33 3d 3d 30 20 7c 7c 20 70 4f 70  Op->p3==0 || pOp
127e0 2d 3e 70 33 3d 3d 31 20 29 3b 0a 20 20 73 71 6c  ->p3==1 );.  sql
127f0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
12800 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t64(&aMem[pOp->p
12810 32 5d 2c 0a 20 20 20 20 20 20 73 71 6c 69 74 65  2],.      sqlite
12820 33 56 64 62 65 42 6f 6f 6c 65 61 6e 56 61 6c 75  3VdbeBooleanValu
12830 65 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  e(&aMem[pOp->p1]
12840 2c 20 70 4f 70 2d 3e 70 33 29 20 5e 20 70 4f 70  , pOp->p3) ^ pOp
12850 2d 3e 70 34 2e 69 29 3b 0a 20 20 62 72 65 61 6b  ->p4.i);.  break
12860 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
12870 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Not P1 P2 * * *.
12880 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
12890 32 5d 3d 20 21 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  2]= !r[P1].**.**
128a0 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 76   Interpret the v
128b0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
128c0 20 50 31 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e   P1 as a boolean
128d0 20 76 61 6c 75 65 2e 20 20 53 74 6f 72 65 20 74   value.  Store t
128e0 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 63 6f  he.** boolean co
128f0 6d 70 6c 65 6d 65 6e 74 20 69 6e 20 72 65 67 69  mplement in regi
12900 73 74 65 72 20 50 32 2e 20 20 49 66 20 74 68 65  ster P2.  If the
12910 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
12920 65 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e 55 4c  er P1 is .** NUL
12930 4c 2c 20 74 68 65 6e 20 61 20 4e 55 4c 4c 20 69  L, then a NULL i
12940 73 20 73 74 6f 72 65 64 20 69 6e 20 50 32 2e 0a  s stored in P2..
12950 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 3a 20  */.case OP_Not: 
12960 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
12970 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e   /* same as TK_N
12980 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f  OT, in1, out2 */
12990 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
129a0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74  pOp->p1];.  pOut
129b0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
129c0 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  ];.  if( (pIn1->
129d0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
129e0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  )==0 ){.    sqli
129f0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74  te3VdbeMemSetInt
12a00 36 34 28 70 4f 75 74 2c 20 21 73 71 6c 69 74 65  64(pOut, !sqlite
12a10 33 56 64 62 65 42 6f 6f 6c 65 61 6e 56 61 6c 75  3VdbeBooleanValu
12a20 65 28 70 49 6e 31 2c 30 29 29 3b 0a 20 20 7d 65  e(pIn1,0));.  }e
12a30 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
12a40 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
12a50 4f 75 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  Out);.  }.  brea
12a60 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
12a70 20 42 69 74 4e 6f 74 20 50 31 20 50 32 20 2a 20   BitNot P1 P2 * 
12a80 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
12a90 20 72 5b 50 32 5d 3d 20 7e 72 5b 50 31 5d 0a 2a   r[P2]= ~r[P1].*
12aa0 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
12ab0 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
12ac0 67 69 73 74 65 72 20 50 31 20 61 73 20 61 6e 20  gister P1 as an 
12ad0 69 6e 74 65 67 65 72 2e 20 20 53 74 6f 72 65 20  integer.  Store 
12ae0 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70  the.** ones-comp
12af0 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 50 31  lement of the P1
12b00 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69   value into regi
12b10 73 74 65 72 20 50 32 2e 20 20 49 66 20 50 31 20  ster P2.  If P1 
12b20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20  holds.** a NULL 
12b30 74 68 65 6e 20 73 74 6f 72 65 20 61 20 4e 55 4c  then store a NUL
12b40 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  L in P2..*/.case
12b50 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b 20 20 20   OP_BitNot: {   
12b60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
12b70 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f 54 2c 20  e as TK_BITNOT, 
12b80 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70  in1, out2 */.  p
12b90 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
12ba0 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p1];.  pOut = &
12bb0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
12bc0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
12bd0 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
12be0 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
12bf0 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20   & MEM_Null)==0 
12c00 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  ){.    pOut->fla
12c10 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
12c20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 7e 73    pOut->u.i = ~s
12c30 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
12c40 75 65 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20  ue(pIn1);.  }.  
12c50 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
12c60 6f 64 65 3a 20 4f 6e 63 65 20 50 31 20 50 32 20  ode: Once P1 P2 
12c70 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c  * * *.**.** Fall
12c80 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
12c90 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
12ca0 20 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 20   the first time 
12cb0 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 0a 2a  this opcode is.*
12cc0 2a 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 6f 6e  * encountered on
12cd0 20 65 61 63 68 20 69 6e 76 6f 63 61 74 69 6f 6e   each invocation
12ce0 20 6f 66 20 74 68 65 20 62 79 74 65 2d 63 6f 64   of the byte-cod
12cf0 65 20 70 72 6f 67 72 61 6d 2e 20 20 4a 75 6d 70  e program.  Jump
12d00 20 74 6f 20 50 32 0a 2a 2a 20 6f 6e 20 74 68 65   to P2.** on the
12d10 20 73 65 63 6f 6e 64 20 61 6e 64 20 61 6c 6c 20   second and all 
12d20 73 75 62 73 65 71 75 65 6e 74 20 65 6e 63 6f 75  subsequent encou
12d30 6e 74 65 72 73 20 64 75 72 69 6e 67 20 74 68 65  nters during the
12d40 20 73 61 6d 65 20 69 6e 76 6f 63 61 74 69 6f 6e   same invocation
12d50 2e 0a 2a 2a 0a 2a 2a 20 54 6f 70 2d 6c 65 76 65  ..**.** Top-leve
12d60 6c 20 70 72 6f 67 72 61 6d 73 20 64 65 74 65 72  l programs deter
12d70 6d 69 6e 65 20 66 69 72 73 74 20 69 6e 76 6f 63  mine first invoc
12d80 61 74 69 6f 6e 20 62 79 20 63 6f 6d 70 61 72 69  ation by compari
12d90 6e 67 20 74 68 65 20 50 31 0a 2a 2a 20 6f 70 65  ng the P1.** ope
12da0 72 61 6e 64 20 61 67 61 69 6e 73 74 20 74 68 65  rand against the
12db0 20 50 31 20 6f 70 65 72 61 6e 64 20 6f 6e 20 74   P1 operand on t
12dc0 68 65 20 4f 50 5f 49 6e 69 74 20 6f 70 63 6f 64  he OP_Init opcod
12dd0 65 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69  e at the beginni
12de0 6e 67 0a 2a 2a 20 6f 66 20 74 68 65 20 70 72 6f  ng.** of the pro
12df0 67 72 61 6d 2e 20 20 49 66 20 74 68 65 20 50 31  gram.  If the P1
12e00 20 76 61 6c 75 65 73 20 64 69 66 66 65 72 2c 20   values differ, 
12e10 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
12e20 68 20 61 6e 64 20 6d 61 6b 65 0a 2a 2a 20 74 68  h and make.** th
12e30 65 20 50 31 20 6f 66 20 74 68 69 73 20 6f 70 63  e P1 of this opc
12e40 6f 64 65 20 65 71 75 61 6c 20 74 6f 20 74 68 65  ode equal to the
12e50 20 50 31 20 6f 66 20 4f 50 5f 49 6e 69 74 2e 20   P1 of OP_Init. 
12e60 20 49 66 20 50 31 20 76 61 6c 75 65 73 20 61 72   If P1 values ar
12e70 65 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 74 68  e.** the same th
12e80 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  en take the jump
12e90 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 73 75 62 70  ..**.** For subp
12ea0 72 6f 67 72 61 6d 73 2c 20 74 68 65 72 65 20 69  rograms, there i
12eb0 73 20 61 20 62 69 74 6d 61 73 6b 20 69 6e 20 74  s a bitmask in t
12ec0 68 65 20 56 64 62 65 46 72 61 6d 65 20 74 68 61  he VdbeFrame tha
12ed0 74 20 64 65 74 65 72 6d 69 6e 65 73 0a 2a 2a 20  t determines.** 
12ee0 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
12ef0 68 65 20 6a 75 6d 70 20 73 68 6f 75 6c 64 20 62  he jump should b
12f00 65 20 74 61 6b 65 6e 2e 20 20 54 68 65 20 62 69  e taken.  The bi
12f10 74 6d 61 73 6b 20 69 73 20 6e 65 63 65 73 73 61  tmask is necessa
12f20 72 79 0a 2a 2a 20 62 65 63 61 75 73 65 20 74 68  ry.** because th
12f30 65 20 73 65 6c 66 2d 61 6c 74 65 72 69 6e 67 20  e self-altering 
12f40 63 6f 64 65 20 74 72 69 63 6b 20 64 6f 65 73 20  code trick does 
12f50 6e 6f 74 20 77 6f 72 6b 20 66 6f 72 20 72 65 63  not work for rec
12f60 75 72 73 69 76 65 0a 2a 2a 20 74 72 69 67 67 65  ursive.** trigge
12f70 72 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  rs..*/.case OP_O
12f80 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  nce: {          
12f90 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
12fa0 75 33 32 20 69 41 64 64 72 3b 20 20 20 20 20 20  u32 iAddr;      
12fb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 64 64            /* Add
12fc0 72 65 73 73 20 6f 66 20 74 68 69 73 20 69 6e 73  ress of this ins
12fd0 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20 20 61 73  truction */.  as
12fe0 73 65 72 74 28 20 70 2d 3e 61 4f 70 5b 30 5d 2e  sert( p->aOp[0].
12ff0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 69 74 20  opcode==OP_Init 
13000 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61  );.  if( p->pFra
13010 6d 65 20 29 7b 0a 20 20 20 20 69 41 64 64 72 20  me ){.    iAddr 
13020 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 70 2d  = (int)(pOp - p-
13030 3e 61 4f 70 29 3b 0a 20 20 20 20 69 66 28 20 28  >aOp);.    if( (
13040 70 2d 3e 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65  p->pFrame->aOnce
13050 5b 69 41 64 64 72 2f 38 5d 20 26 20 28 31 3c 3c  [iAddr/8] & (1<<
13060 28 69 41 64 64 72 20 26 20 37 29 29 29 21 3d 30  (iAddr & 7)))!=0
13070 20 29 7b 0a 20 20 20 20 20 20 56 64 62 65 42 72   ){.      VdbeBr
13080 61 6e 63 68 54 61 6b 65 6e 28 31 2c 20 32 29 3b  anchTaken(1, 2);
13090 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  .      goto jump
130a0 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20  _to_p2;.    }.  
130b0 20 20 70 2d 3e 70 46 72 61 6d 65 2d 3e 61 4f 6e    p->pFrame->aOn
130c0 63 65 5b 69 41 64 64 72 2f 38 5d 20 7c 3d 20 31  ce[iAddr/8] |= 1
130d0 3c 3c 28 69 41 64 64 72 20 26 20 37 29 3b 0a 20  <<(iAddr & 7);. 
130e0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20   }else{.    if( 
130f0 70 2d 3e 61 4f 70 5b 30 5d 2e 70 31 3d 3d 70 4f  p->aOp[0].p1==pO
13100 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 20 20 56  p->p1 ){.      V
13110 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31  dbeBranchTaken(1
13120 2c 20 32 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f  , 2);.      goto
13130 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20   jump_to_p2;.   
13140 20 7d 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61   }.  }.  VdbeBra
13150 6e 63 68 54 61 6b 65 6e 28 30 2c 20 32 29 3b 0a  nchTaken(0, 2);.
13160 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 2d 3e 61    pOp->p1 = p->a
13170 4f 70 5b 30 5d 2e 70 31 3b 0a 20 20 62 72 65 61  Op[0].p1;.  brea
13180 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
13190 20 49 66 20 50 31 20 50 32 20 50 33 20 2a 20 2a   If P1 P2 P3 * *
131a0 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
131b0 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
131c0 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
131d0 20 74 72 75 65 2e 20 20 54 68 65 20 76 61 6c 75   true.  The valu
131e0 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72  e.** is consider
131f0 65 64 20 74 72 75 65 20 69 66 20 69 74 20 69 73  ed true if it is
13200 20 6e 75 6d 65 72 69 63 20 61 6e 64 20 6e 6f 6e   numeric and non
13210 2d 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76  -zero.  If the v
13220 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73  alue.** in P1 is
13230 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20   NULL then take 
13240 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 64 20  the jump if and 
13250 6f 6e 6c 79 20 69 66 20 50 33 20 69 73 20 6e 6f  only if P3 is no
13260 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20  n-zero..*/.case 
13270 4f 50 5f 49 66 3a 20 20 7b 20 20 20 20 20 20 20  OP_If:  {       
13280 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
13290 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 63 3b   in1 */.  int c;
132a0 0a 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64  .  c = sqlite3Vd
132b0 62 65 42 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 26  beBooleanValue(&
132c0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 70  aMem[pOp->p1], p
132d0 4f 70 2d 3e 70 33 29 3b 0a 20 20 56 64 62 65 42  Op->p3);.  VdbeB
132e0 72 61 6e 63 68 54 61 6b 65 6e 28 63 21 3d 30 2c  ranchTaken(c!=0,
132f0 20 32 29 3b 0a 20 20 69 66 28 20 63 20 29 20 67   2);.  if( c ) g
13300 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
13310 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
13320 70 63 6f 64 65 3a 20 49 66 4e 6f 74 20 50 31 20  pcode: IfNot P1 
13330 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
13340 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
13350 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
13360 74 65 72 20 50 31 20 69 73 20 46 61 6c 73 65 2e  ter P1 is False.
13370 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69    The value.** i
13380 73 20 63 6f 6e 73 69 64 65 72 65 64 20 66 61 6c  s considered fal
13390 73 65 20 69 66 20 69 74 20 68 61 73 20 61 20 6e  se if it has a n
133a0 75 6d 65 72 69 63 20 76 61 6c 75 65 20 6f 66 20  umeric value of 
133b0 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61  zero.  If the va
133c0 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20  lue.** in P1 is 
133d0 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74  NULL then take t
133e0 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 64 20 6f  he jump if and o
133f0 6e 6c 79 20 69 66 20 50 33 20 69 73 20 6e 6f 6e  nly if P3 is non
13400 2d 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f  -zero..*/.case O
13410 50 5f 49 66 4e 6f 74 3a 20 7b 20 20 20 20 20 20  P_IfNot: {      
13420 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
13430 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a 20  n1 */.  int c;. 
13440 20 63 20 3d 20 21 73 71 6c 69 74 65 33 56 64 62   c = !sqlite3Vdb
13450 65 42 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 26 61  eBooleanValue(&a
13460 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 21 70  Mem[pOp->p1], !p
13470 4f 70 2d 3e 70 33 29 3b 0a 20 20 56 64 62 65 42  Op->p3);.  VdbeB
13480 72 61 6e 63 68 54 61 6b 65 6e 28 63 21 3d 30 2c  ranchTaken(c!=0,
13490 20 32 29 3b 0a 20 20 69 66 28 20 63 20 29 20 67   2);.  if( c ) g
134a0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
134b0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
134c0 70 63 6f 64 65 3a 20 49 73 4e 75 6c 6c 20 50 31  pcode: IsNull P1
134d0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
134e0 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3d  opsis: if r[P1]=
134f0 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a  =NULL goto P2.**
13500 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
13510 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
13520 65 67 69 73 74 65 72 20 50 31 20 69 73 20 4e 55  egister P1 is NU
13530 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  LL..*/.case OP_I
13540 73 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20  sNull: {        
13550 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
13560 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20  K_ISNULL, jump, 
13570 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
13580 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
13590 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
135a0 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  n( (pIn1->flags 
135b0 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 2c 20  & MEM_Null)!=0, 
135c0 32 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  2);.  if( (pIn1-
135d0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
135e0 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74  l)!=0 ){.    got
135f0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
13600 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
13610 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c   Opcode: NotNull
13620 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
13630 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
13640 31 5d 21 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32  1]!=NULL goto P2
13650 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
13660 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
13670 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
13680 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a   not NULL.  .*/.
13690 63 61 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a  case OP_NotNull:
136a0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
136b0 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 4e   same as TK_NOTN
136c0 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a  ULL, jump, in1 *
136d0 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
136e0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56 64 62  [pOp->p1];.  Vdb
136f0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 28 70  eBranchTaken( (p
13700 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
13710 5f 4e 75 6c 6c 29 3d 3d 30 2c 20 32 29 3b 0a 20  _Null)==0, 2);. 
13720 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
13730 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
13740 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d   ){.    goto jum
13750 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62  p_to_p2;.  }.  b
13760 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
13770 64 65 3a 20 49 66 4e 75 6c 6c 52 6f 77 20 50 31  de: IfNullRow P1
13780 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
13790 6e 6f 70 73 69 73 3a 20 69 66 20 50 31 2e 6e 75  nopsis: if P1.nu
137a0 6c 6c 52 6f 77 20 74 68 65 6e 20 72 5b 50 33 5d  llRow then r[P3]
137b0 3d 4e 55 4c 4c 2c 20 67 6f 74 6f 20 50 32 0a 2a  =NULL, goto P2.*
137c0 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 63  *.** Check the c
137d0 75 72 73 6f 72 20 50 31 20 74 6f 20 73 65 65 20  ursor P1 to see 
137e0 69 66 20 69 74 20 69 73 20 63 75 72 72 65 6e 74  if it is current
137f0 6c 79 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 61  ly pointing at a
13800 20 4e 55 4c 4c 20 72 6f 77 2e 0a 2a 2a 20 49 66   NULL row..** If
13810 20 69 74 20 69 73 2c 20 74 68 65 6e 20 73 65 74   it is, then set
13820 20 72 65 67 69 73 74 65 72 20 50 33 20 74 6f 20   register P3 to 
13830 4e 55 4c 4c 20 61 6e 64 20 6a 75 6d 70 20 69 6d  NULL and jump im
13840 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
13850 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 74  .** If P1 is not
13860 20 6f 6e 20 61 20 4e 55 4c 4c 20 72 6f 77 2c 20   on a NULL row, 
13870 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
13880 68 20 77 69 74 68 6f 75 74 20 6d 61 6b 69 6e 67  h without making
13890 20 61 6e 79 0a 2a 2a 20 63 68 61 6e 67 65 73 2e   any.** changes.
138a0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 75  .*/.case OP_IfNu
138b0 6c 6c 52 6f 77 3a 20 7b 20 20 20 20 20 20 20 20  llRow: {        
138c0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73   /* jump */.  as
138d0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
138e0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
138f0 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
13900 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  rt( p->apCsr[pOp
13910 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20 20 69 66  ->p1]!=0 );.  if
13920 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  ( p->apCsr[pOp->
13930 70 31 5d 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a  p1]->nullRow ){.
13940 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
13950 65 6d 53 65 74 4e 75 6c 6c 28 61 4d 65 6d 20 2b  emSetNull(aMem +
13960 20 70 4f 70 2d 3e 70 33 29 3b 0a 20 20 20 20 67   pOp->p3);.    g
13970 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
13980 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
13990 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
139a0 41 42 4c 45 5f 4f 46 46 53 45 54 5f 53 51 4c 5f  ABLE_OFFSET_SQL_
139b0 46 55 4e 43 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  FUNC./* Opcode: 
139c0 4f 66 66 73 65 74 20 50 31 20 50 32 20 50 33 20  Offset P1 P2 P3 
139d0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
139e0 20 72 5b 50 33 5d 20 3d 20 73 71 6c 69 74 65 5f   r[P3] = sqlite_
139f0 6f 66 66 73 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a  offset(P1).**.**
13a00 20 53 74 6f 72 65 20 69 6e 20 72 65 67 69 73 74   Store in regist
13a10 65 72 20 72 5b 50 33 5d 20 74 68 65 20 62 79 74  er r[P3] the byt
13a20 65 20 6f 66 66 73 65 74 20 69 6e 74 6f 20 74 68  e offset into th
13a30 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
13a40 74 68 61 74 20 69 73 20 74 68 65 0a 2a 2a 20 73  that is the.** s
13a50 74 61 72 74 20 6f 66 20 74 68 65 20 70 61 79 6c  tart of the payl
13a60 6f 61 64 20 66 6f 72 20 74 68 65 20 72 65 63 6f  oad for the reco
13a70 72 64 20 61 74 20 77 68 69 63 68 20 74 68 61 74  rd at which that
13a80 20 63 75 72 73 6f 72 20 50 31 20 69 73 20 63 75   cursor P1 is cu
13a90 72 72 65 6e 74 6c 79 0a 2a 2a 20 70 6f 69 6e 74  rrently.** point
13aa0 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73  ing..**.** P2 is
13ab0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62   the column numb
13ac0 65 72 20 66 6f 72 20 74 68 65 20 61 72 67 75 6d  er for the argum
13ad0 65 6e 74 20 74 6f 20 74 68 65 20 73 71 6c 69 74  ent to the sqlit
13ae0 65 5f 6f 66 66 73 65 74 28 29 20 66 75 6e 63 74  e_offset() funct
13af0 69 6f 6e 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ion..** This opc
13b00 6f 64 65 20 64 6f 65 73 20 6e 6f 74 20 75 73 65  ode does not use
13b10 20 50 32 20 69 74 73 65 6c 66 2c 20 62 75 74 20   P2 itself, but 
13b20 74 68 65 20 50 32 20 76 61 6c 75 65 20 69 73 20  the P2 value is 
13b30 75 73 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 63  used by the.** c
13b40 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 20 20  ode generator.  
13b50 54 68 65 20 50 31 2c 20 50 32 2c 20 61 6e 64 20  The P1, P2, and 
13b60 50 33 20 6f 70 65 72 61 6e 64 73 20 74 6f 20 74  P3 operands to t
13b70 68 69 73 20 6f 70 63 6f 64 65 20 61 72 65 20 74  his opcode are t
13b80 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20 66 6f  he.** same as fo
13b90 72 20 4f 50 5f 43 6f 6c 75 6d 6e 2e 0a 2a 2a 0a  r OP_Column..**.
13ba0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
13bb0 73 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65  s only available
13bc0 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f   if SQLite is co
13bd0 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68 65 0a  mpiled with the.
13be0 2a 2a 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42  ** -DSQLITE_ENAB
13bf0 4c 45 5f 4f 46 46 53 45 54 5f 53 51 4c 5f 46 55  LE_OFFSET_SQL_FU
13c00 4e 43 20 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  NC option..*/.ca
13c10 73 65 20 4f 50 5f 4f 66 66 73 65 74 3a 20 7b 20  se OP_Offset: { 
13c20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 33           /* out3
13c30 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
13c40 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68 65 20   *pC;    /* The 
13c50 56 44 42 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20  VDBE cursor */. 
13c60 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
13c70 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
13c80 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
13c90 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
13ca0 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p1];.  pOut = 
13cb0 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  &p->aMem[pOp->p3
13cc0 5d 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 70  ];.  if( NEVER(p
13cd0 43 3d 3d 30 29 20 7c 7c 20 70 43 2d 3e 65 43 75  C==0) || pC->eCu
13ce0 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f 42  rType!=CURTYPE_B
13cf0 54 52 45 45 20 29 7b 0a 20 20 20 20 73 71 6c 69  TREE ){.    sqli
13d00 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
13d10 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65  l(pOut);.  }else
13d20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
13d30 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75  eMemSetInt64(pOu
13d40 74 2c 20 73 71 6c 69 74 65 33 42 74 72 65 65 4f  t, sqlite3BtreeO
13d50 66 66 73 65 74 28 70 43 2d 3e 75 63 2e 70 43 75  ffset(pC->uc.pCu
13d60 72 73 6f 72 29 29 3b 0a 20 20 7d 0a 20 20 62 72  rsor));.  }.  br
13d70 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
13d80 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4f   SQLITE_ENABLE_O
13d90 46 46 53 45 54 5f 53 51 4c 5f 46 55 4e 43 20 2a  FFSET_SQL_FUNC *
13da0 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  /../* Opcode: Co
13db0 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20 50 34  lumn P1 P2 P3 P4
13dc0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
13dd0 20 72 5b 50 33 5d 3d 50 58 0a 2a 2a 0a 2a 2a 20   r[P3]=PX.**.** 
13de0 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 64 61  Interpret the da
13df0 74 61 20 74 68 61 74 20 63 75 72 73 6f 72 20 50  ta that cursor P
13e00 31 20 70 6f 69 6e 74 73 20 74 6f 20 61 73 20 61  1 points to as a
13e10 20 73 74 72 75 63 74 75 72 65 20 62 75 69 6c 74   structure built
13e20 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 4d 61   using.** the Ma
13e30 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63  keRecord instruc
13e40 74 69 6f 6e 2e 20 20 28 53 65 65 20 74 68 65 20  tion.  (See the 
13e50 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64  MakeRecord opcod
13e60 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
13e70 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  .** information 
13e80 61 62 6f 75 74 20 74 68 65 20 66 6f 72 6d 61 74  about the format
13e90 20 6f 66 20 74 68 65 20 64 61 74 61 2e 29 20 20   of the data.)  
13ea0 45 78 74 72 61 63 74 20 74 68 65 20 50 32 2d 74  Extract the P2-t
13eb0 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d  h column.** from
13ec0 20 74 68 69 73 20 72 65 63 6f 72 64 2e 20 20 49   this record.  I
13ed0 66 20 74 68 65 72 65 20 61 72 65 20 6c 65 73 73  f there are less
13ee0 20 74 68 61 74 20 28 50 32 2b 31 29 20 0a 2a 2a   that (P2+1) .**
13ef0 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 72   values in the r
13f00 65 63 6f 72 64 2c 20 65 78 74 72 61 63 74 20 61  ecord, extract a
13f10 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   NULL..**.** The
13f20 20 76 61 6c 75 65 20 65 78 74 72 61 63 74 65 64   value extracted
13f30 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
13f40 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a  gister P3..**.**
13f50 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 63   If the record c
13f60 6f 6e 74 61 69 6e 73 20 66 65 77 65 72 20 74 68  ontains fewer th
13f70 61 6e 20 50 32 20 66 69 65 6c 64 73 2c 20 74 68  an P2 fields, th
13f80 65 6e 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c  en extract a NUL
13f90 4c 2e 20 20 4f 72 2c 0a 2a 2a 20 69 66 20 74 68  L.  Or,.** if th
13fa0 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73  e P4 argument is
13fb0 20 61 20 50 34 5f 4d 45 4d 20 75 73 65 20 74 68   a P4_MEM use th
13fc0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50  e value of the P
13fd0 34 20 61 72 67 75 6d 65 6e 74 20 61 73 0a 2a 2a  4 argument as.**
13fe0 20 74 68 65 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a   the result..**.
13ff0 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
14000 5f 43 4c 45 41 52 43 41 43 48 45 20 62 69 74 20  _CLEARCACHE bit 
14010 69 73 20 73 65 74 20 6f 6e 20 50 35 20 61 6e 64  is set on P5 and
14020 20 50 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d   P1 is a pseudo-
14030 74 61 62 6c 65 20 63 75 72 73 6f 72 2c 0a 2a 2a  table cursor,.**
14040 20 74 68 65 6e 20 74 68 65 20 63 61 63 68 65 20   then the cache 
14050 6f 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  of the cursor is
14060 20 72 65 73 65 74 20 70 72 69 6f 72 20 74 6f 20   reset prior to 
14070 65 78 74 72 61 63 74 69 6e 67 20 74 68 65 20 63  extracting the c
14080 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54 68 65 20 66 69  olumn..** The fi
14090 72 73 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20 61 67  rst OP_Column ag
140a0 61 69 6e 73 74 20 61 20 70 73 65 75 64 6f 2d 74  ainst a pseudo-t
140b0 61 62 6c 65 20 61 66 74 65 72 20 74 68 65 20 76  able after the v
140c0 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6e 74  alue of the cont
140d0 65 6e 74 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  ent.** register 
140e0 68 61 73 20 63 68 61 6e 67 65 64 20 73 68 6f 75  has changed shou
140f0 6c 64 20 68 61 76 65 20 74 68 69 73 20 62 69 74  ld have this bit
14100 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74   set..**.** If t
14110 68 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  he OPFLAG_LENGTH
14120 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54  ARG and OPFLAG_T
14130 59 50 45 4f 46 41 52 47 20 62 69 74 73 20 61 72  YPEOFARG bits ar
14140 65 20 73 65 74 20 6f 6e 20 50 35 20 74 68 65 6e  e set on P5 then
14150 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 69  .** the result i
14160 73 20 67 75 61 72 61 6e 74 65 65 64 20 74 6f 20  s guaranteed to 
14170 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 61 73 20  only be used as 
14180 74 68 65 20 61 72 67 75 6d 65 6e 74 20 6f 66 20  the argument of 
14190 61 20 6c 65 6e 67 74 68 28 29 0a 2a 2a 20 6f 72  a length().** or
141a0 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69   typeof() functi
141b0 6f 6e 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  on, respectively
141c0 2e 20 20 54 68 65 20 6c 6f 61 64 69 6e 67 20 6f  .  The loading o
141d0 66 20 6c 61 72 67 65 20 62 6c 6f 62 73 20 63 61  f large blobs ca
141e0 6e 20 62 65 0a 2a 2a 20 73 6b 69 70 70 65 64 20  n be.** skipped 
141f0 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 61 6e 64  for length() and
14200 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20 6c 6f 61   all content loa
14210 64 69 6e 67 20 63 61 6e 20 62 65 20 73 6b 69 70  ding can be skip
14220 70 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29  ped for typeof()
14230 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c  ..*/.case OP_Col
14240 75 6d 6e 3a 20 7b 0a 20 20 69 6e 74 20 70 32 3b  umn: {.  int p2;
14250 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 63              /* c
14260 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f 20  olumn number to 
14270 72 65 74 72 69 65 76 65 20 2a 2f 0a 20 20 56 64  retrieve */.  Vd
14280 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
14290 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72   /* The VDBE cur
142a0 73 6f 72 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f  sor */.  BtCurso
142b0 72 20 2a 70 43 72 73 72 3b 20 20 20 2f 2a 20 54  r *pCrsr;   /* T
142c0 68 65 20 42 54 72 65 65 20 63 75 72 73 6f 72 20  he BTree cursor 
142d0 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66 66 73 65  */.  u32 *aOffse
142e0 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f 66 66 73  t;      /* aOffs
142f0 65 74 5b 69 5d 20 69 73 20 6f 66 66 73 65 74 20  et[i] is offset 
14300 74 6f 20 73 74 61 72 74 20 6f 66 20 64 61 74 61  to start of data
14310 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c 75 6d 6e   for i-th column
14320 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20   */.  int len;  
14330 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
14340 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 65  length of the se
14350 72 69 61 6c 69 7a 65 64 20 64 61 74 61 20 66 6f  rialized data fo
14360 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  r the column */.
14370 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20    int i;        
14380 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
14390 6e 74 65 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  nter */.  Mem *p
143a0 44 65 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  Dest;        /* 
143b0 57 68 65 72 65 20 74 6f 20 77 72 69 74 65 20 74  Where to write t
143c0 68 65 20 65 78 74 72 61 63 74 65 64 20 76 61 6c  he extracted val
143d0 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d  ue */.  Mem sMem
143e0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f  ;          /* Fo
143f0 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65  r storing the re
14400 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64  cord being decod
14410 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38  ed */.  const u8
14420 20 2a 7a 44 61 74 61 3b 20 20 20 2f 2a 20 50 61   *zData;   /* Pa
14430 72 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  rt of the record
14440 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a   being decoded *
14450 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 48  /.  const u8 *zH
14460 64 72 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 75  dr;    /* Next u
14470 6e 70 61 72 73 65 64 20 62 79 74 65 20 6f 66 20  nparsed byte of 
14480 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20  the header */.  
14490 63 6f 6e 73 74 20 75 38 20 2a 7a 45 6e 64 48 64  const u8 *zEndHd
144a0 72 3b 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f  r; /* Pointer to
144b0 20 66 69 72 73 74 20 62 79 74 65 20 61 66 74 65   first byte afte
144c0 72 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a  r the header */.
144d0 20 20 75 36 34 20 6f 66 66 73 65 74 36 34 3b 20    u64 offset64; 
144e0 20 20 20 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f       /* 64-bit o
144f0 66 66 73 65 74 20 2a 2f 0a 20 20 75 33 32 20 74  ffset */.  u32 t
14500 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
14510 20 41 20 74 79 70 65 20 63 6f 64 65 20 66 72 6f   A type code fro
14520 6d 20 74 68 65 20 72 65 63 6f 72 64 20 68 65 61  m the record hea
14530 64 65 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52  der */.  Mem *pR
14540 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50  eg;         /* P
14550 73 65 75 64 6f 54 61 62 6c 65 20 69 6e 70 75 74  seudoTable input
14560 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 0a 20 20   register */..  
14570 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
14580 70 2d 3e 70 31 5d 3b 0a 20 20 70 32 20 3d 20 70  p->p1];.  p2 = p
14590 4f 70 2d 3e 70 32 3b 0a 0a 20 20 2f 2a 20 49 66  Op->p2;..  /* If
145a0 20 74 68 65 20 63 75 72 73 6f 72 20 63 61 63 68   the cursor cach
145b0 65 20 69 73 20 73 74 61 6c 65 20 28 6d 65 61 6e  e is stale (mean
145c0 69 6e 67 20 69 74 20 69 73 20 6e 6f 74 20 63 75  ing it is not cu
145d0 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 61 74  rrently point at
145e0 0a 20 20 2a 2a 20 74 68 65 20 63 6f 72 72 65 63  .  ** the correc
145f0 74 20 72 6f 77 29 20 74 68 65 6e 20 62 72 69 6e  t row) then brin
14600 67 20 69 74 20 75 70 2d 74 6f 2d 64 61 74 65 20  g it up-to-date 
14610 62 79 20 64 6f 69 6e 67 20 74 68 65 20 6e 65 63  by doing the nec
14620 65 73 73 61 72 79 20 0a 20 20 2a 2a 20 42 2d 54  essary .  ** B-T
14630 72 65 65 20 73 65 65 6b 2e 20 2a 2f 0a 20 20 72  ree seek. */.  r
14640 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
14650 75 72 73 6f 72 4d 6f 76 65 74 6f 28 26 70 43 2c  ursorMoveto(&pC,
14660 20 26 70 32 29 3b 0a 20 20 69 66 28 20 72 63 20   &p2);.  if( rc 
14670 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
14680 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 61 73  _to_error;..  as
14690 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
146a0 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  && pOp->p3<=(p->
146b0 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
146c0 73 6f 72 29 20 29 3b 0a 20 20 70 44 65 73 74 20  sor) );.  pDest 
146d0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
146e0 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
146f0 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a  ange(p, pDest);.
14700 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
14710 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
14720 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
14730 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
14740 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c 70 43  .  assert( p2<pC
14750 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20 20 61 4f  ->nField );.  aO
14760 66 66 73 65 74 20 3d 20 70 43 2d 3e 61 4f 66 66  ffset = pC->aOff
14770 73 65 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70  set;.  assert( p
14780 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52  C->eCurType!=CUR
14790 54 59 50 45 5f 56 54 41 42 20 29 3b 0a 20 20 61  TYPE_VTAB );.  a
147a0 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
147b0 79 70 65 21 3d 43 55 52 54 59 50 45 5f 50 53 45  ype!=CURTYPE_PSE
147c0 55 44 4f 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52  UDO || pC->nullR
147d0 6f 77 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ow );.  assert( 
147e0 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55  pC->eCurType!=CU
147f0 52 54 59 50 45 5f 53 4f 52 54 45 52 20 29 3b 0a  RTYPE_SORTER );.
14800 0a 20 20 69 66 28 20 70 43 2d 3e 63 61 63 68 65  .  if( pC->cache
14810 53 74 61 74 75 73 21 3d 70 2d 3e 63 61 63 68 65  Status!=p->cache
14820 43 74 72 20 29 7b 20 20 20 20 20 20 20 20 20 20  Ctr ){          
14830 20 20 20 20 20 20 2f 2a 4f 50 54 49 4d 49 5a 41        /*OPTIMIZA
14840 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a  TION-IF-FALSE*/.
14850 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c      if( pC->null
14860 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 69 66 28  Row ){.      if(
14870 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
14880 55 52 54 59 50 45 5f 50 53 45 55 44 4f 20 29 7b  URTYPE_PSEUDO ){
14890 0a 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20  .        /* For 
148a0 74 68 65 20 73 70 65 63 69 61 6c 20 63 61 73 65  the special case
148b0 20 6f 66 20 61 73 20 70 73 65 75 64 6f 2d 63 75   of as pseudo-cu
148c0 72 73 6f 72 2c 20 74 68 65 20 73 65 65 6b 52 65  rsor, the seekRe
148d0 73 75 6c 74 20 66 69 65 6c 64 0a 20 20 20 20 20  sult field.     
148e0 20 20 20 2a 2a 20 69 64 65 6e 74 69 66 69 65 73     ** identifies
148f0 20 74 68 65 20 72 65 67 69 73 74 65 72 20 74 68   the register th
14900 61 74 20 68 6f 6c 64 73 20 74 68 65 20 72 65 63  at holds the rec
14910 6f 72 64 20 2a 2f 0a 20 20 20 20 20 20 20 20 61  ord */.        a
14920 73 73 65 72 74 28 20 70 43 2d 3e 73 65 65 6b 52  ssert( pC->seekR
14930 65 73 75 6c 74 3e 30 20 29 3b 0a 20 20 20 20 20  esult>0 );.     
14940 20 20 20 70 52 65 67 20 3d 20 26 61 4d 65 6d 5b     pReg = &aMem[
14950 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 5d 3b  pC->seekResult];
14960 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
14970 20 70 52 65 67 2d 3e 66 6c 61 67 73 20 26 20 4d   pReg->flags & M
14980 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 20  EM_Blob );.     
14990 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
149a0 56 61 6c 69 64 28 70 52 65 67 29 20 29 3b 0a 20  Valid(pReg) );. 
149b0 20 20 20 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f         pC->paylo
149c0 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e 73 7a 52  adSize = pC->szR
149d0 6f 77 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a 20 20  ow = pReg->n;.  
149e0 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d        pC->aRow =
149f0 20 28 75 38 2a 29 70 52 65 67 2d 3e 7a 3b 0a 20   (u8*)pReg->z;. 
14a00 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
14a10 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
14a20 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29  emSetNull(pDest)
14a30 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f  ;.        goto o
14a40 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20  p_column_out;.  
14a50 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
14a60 0a 20 20 20 20 20 20 70 43 72 73 72 20 3d 20 70  .      pCrsr = p
14a70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20  C->uc.pCursor;. 
14a80 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d       assert( pC-
14a90 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
14aa0 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20  PE_BTREE );.    
14ab0 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20    assert( pCrsr 
14ac0 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
14ad0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
14ae0 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72  sorIsValid(pCrsr
14af0 29 20 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 70  ) );.      pC->p
14b00 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 73 71 6c  ayloadSize = sql
14b10 69 74 65 33 42 74 72 65 65 50 61 79 6c 6f 61 64  ite3BtreePayload
14b20 53 69 7a 65 28 70 43 72 73 72 29 3b 0a 20 20 20  Size(pCrsr);.   
14b30 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71     pC->aRow = sq
14b40 6c 69 74 65 33 42 74 72 65 65 50 61 79 6c 6f 61  lite3BtreePayloa
14b50 64 46 65 74 63 68 28 70 43 72 73 72 2c 20 26 70  dFetch(pCrsr, &p
14b60 43 2d 3e 73 7a 52 6f 77 29 3b 0a 20 20 20 20 20  C->szRow);.     
14b70 20 61 73 73 65 72 74 28 20 70 43 2d 3e 73 7a 52   assert( pC->szR
14b80 6f 77 3c 3d 70 43 2d 3e 70 61 79 6c 6f 61 64 53  ow<=pC->payloadS
14b90 69 7a 65 20 29 3b 0a 20 20 20 20 20 20 61 73 73  ize );.      ass
14ba0 65 72 74 28 20 70 43 2d 3e 73 7a 52 6f 77 3c 3d  ert( pC->szRow<=
14bb0 36 35 35 33 36 20 29 3b 20 20 2f 2a 20 4d 61 78  65536 );  /* Max
14bc0 69 6d 75 6d 20 70 61 67 65 20 73 69 7a 65 20 69  imum page size i
14bd0 73 20 36 34 4b 69 42 20 2a 2f 0a 20 20 20 20 20  s 64KiB */.     
14be0 20 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64   if( pC->payload
14bf0 53 69 7a 65 20 3e 20 28 75 33 32 29 64 62 2d 3e  Size > (u32)db->
14c00 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
14c10 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
14c20 20 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f         goto too_
14c30 62 69 67 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  big;.      }.   
14c40 20 7d 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65   }.    pC->cache
14c50 53 74 61 74 75 73 20 3d 20 70 2d 3e 63 61 63 68  Status = p->cach
14c60 65 43 74 72 3b 0a 20 20 20 20 70 43 2d 3e 69 48  eCtr;.    pC->iH
14c70 64 72 4f 66 66 73 65 74 20 3d 20 67 65 74 56 61  drOffset = getVa
14c80 72 69 6e 74 33 32 28 70 43 2d 3e 61 52 6f 77 2c  rint32(pC->aRow,
14c90 20 61 4f 66 66 73 65 74 5b 30 5d 29 3b 0a 20 20   aOffset[0]);.  
14ca0 20 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64    pC->nHdrParsed
14cb0 20 3d 20 30 3b 0a 0a 0a 20 20 20 20 69 66 28 20   = 0;...    if( 
14cc0 70 43 2d 3e 73 7a 52 6f 77 3c 61 4f 66 66 73 65  pC->szRow<aOffse
14cd0 74 5b 30 5d 20 29 7b 20 20 20 20 20 20 2f 2a 4f  t[0] ){      /*O
14ce0 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46  PTIMIZATION-IF-F
14cf0 41 4c 53 45 2a 2f 0a 20 20 20 20 20 20 2f 2a 20  ALSE*/.      /* 
14d00 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f  pC->aRow does no
14d10 74 20 68 61 76 65 20 74 6f 20 68 6f 6c 64 20 74  t have to hold t
14d20 68 65 20 65 6e 74 69 72 65 20 72 6f 77 2c 20 62  he entire row, b
14d30 75 74 20 69 74 20 64 6f 65 73 20 61 74 20 6c 65  ut it does at le
14d40 61 73 74 0a 20 20 20 20 20 20 2a 2a 20 6e 65 65  ast.      ** nee
14d50 64 20 74 6f 20 63 6f 76 65 72 20 74 68 65 20 68  d to cover the h
14d60 65 61 64 65 72 20 6f 66 20 74 68 65 20 72 65 63  eader of the rec
14d70 6f 72 64 2e 20 20 49 66 20 70 43 2d 3e 61 52 6f  ord.  If pC->aRo
14d80 77 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61  w does not conta
14d90 69 6e 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20  in.      ** the 
14da0 63 6f 6d 70 6c 65 74 65 20 68 65 61 64 65 72 2c  complete header,
14db0 20 74 68 65 6e 20 73 65 74 20 69 74 20 74 6f 20   then set it to 
14dc0 7a 65 72 6f 2c 20 66 6f 72 63 69 6e 67 20 74 68  zero, forcing th
14dd0 65 20 68 65 61 64 65 72 20 74 6f 20 62 65 0a 20  e header to be. 
14de0 20 20 20 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61       ** dynamica
14df0 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 2a  lly allocated. *
14e00 2f 0a 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77  /.      pC->aRow
14e10 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 43 2d 3e   = 0;.      pC->
14e20 73 7a 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 20 20  szRow = 0;..    
14e30 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61    /* Make sure a
14e40 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73   corrupt databas
14e50 65 20 68 61 73 20 6e 6f 74 20 67 69 76 65 6e 20  e has not given 
14e60 75 73 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 68  us an oversize h
14e70 65 61 64 65 72 2e 0a 20 20 20 20 20 20 2a 2a 20  eader..      ** 
14e80 44 6f 20 74 68 69 73 20 6e 6f 77 20 74 6f 20 61  Do this now to a
14e90 76 6f 69 64 20 61 6e 20 6f 76 65 72 73 69 7a 65  void an oversize
14ea0 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
14eb0 6f 6e 2e 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20  on..      **.   
14ec0 20 20 20 2a 2a 20 54 79 70 65 20 65 6e 74 72 69     ** Type entri
14ed0 65 73 20 63 61 6e 20 62 65 20 62 65 74 77 65 65  es can be betwee
14ee0 6e 20 31 20 61 6e 64 20 35 20 62 79 74 65 73 20  n 1 and 5 bytes 
14ef0 65 61 63 68 2e 20 20 42 75 74 20 34 20 61 6e 64  each.  But 4 and
14f00 20 35 20 62 79 74 65 0a 20 20 20 20 20 20 2a 2a   5 byte.      **
14f10 20 74 79 70 65 73 20 75 73 65 20 73 6f 20 6d 75   types use so mu
14f20 63 68 20 64 61 74 61 20 73 70 61 63 65 20 74 68  ch data space th
14f30 61 74 20 74 68 65 72 65 20 63 61 6e 20 6f 6e 6c  at there can onl
14f40 79 20 62 65 20 34 30 39 36 20 61 6e 64 20 33 32  y be 4096 and 32
14f50 20 6f 66 0a 20 20 20 20 20 20 2a 2a 20 74 68 65   of.      ** the
14f60 6d 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  m, respectively.
14f70 20 20 53 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d    So the maximum
14f80 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20 72   header length r
14f90 65 73 75 6c 74 73 20 66 72 6f 6d 20 61 0a 20 20  esults from a.  
14fa0 20 20 20 20 2a 2a 20 33 2d 62 79 74 65 20 74 79      ** 3-byte ty
14fb0 70 65 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74  pe for each of t
14fc0 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 33 32  he maximum of 32
14fd0 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c 75 73  768 columns plus
14fe0 20 74 68 72 65 65 0a 20 20 20 20 20 20 2a 2a 20   three.      ** 
14ff0 65 78 74 72 61 20 62 79 74 65 73 20 66 6f 72 20  extra bytes for 
15000 74 68 65 20 68 65 61 64 65 72 20 6c 65 6e 67 74  the header lengt
15010 68 20 69 74 73 65 6c 66 2e 20 20 33 32 37 36 38  h itself.  32768
15020 2a 33 20 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a  *3 + 3 = 98307..
15030 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
15040 66 28 20 61 4f 66 66 73 65 74 5b 30 5d 20 3e 20  f( aOffset[0] > 
15050 39 38 33 30 37 20 7c 7c 20 61 4f 66 66 73 65 74  98307 || aOffset
15060 5b 30 5d 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61  [0] > pC->payloa
15070 64 53 69 7a 65 20 29 7b 0a 20 20 20 20 20 20 20  dSize ){.       
15080 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
15090 63 6f 72 72 75 70 74 3b 0a 20 20 20 20 20 20 7d  corrupt;.      }
150a0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
150b0 20 20 2f 2a 20 54 68 69 73 20 69 73 20 61 6e 20    /* This is an 
150c0 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 20 20 42  optimization.  B
150d0 79 20 73 6b 69 70 70 69 6e 67 20 6f 76 65 72 20  y skipping over 
150e0 74 68 65 20 66 69 72 73 74 20 66 65 77 20 74 65  the first few te
150f0 73 74 73 0a 20 20 20 20 20 20 2a 2a 20 28 65 78  sts.      ** (ex
15100 3a 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64  : pC->nHdrParsed
15110 3c 3d 70 32 29 20 69 6e 20 74 68 65 20 6e 65 78  <=p2) in the nex
15120 74 20 73 65 63 74 69 6f 6e 2c 20 77 65 20 61 63  t section, we ac
15130 68 69 65 76 65 20 61 0a 20 20 20 20 20 20 2a 2a  hieve a.      **
15140 20 6d 65 61 73 75 72 61 62 6c 65 20 70 65 72 66   measurable perf
15150 6f 72 6d 61 6e 63 65 20 67 61 69 6e 2e 0a 20 20  ormance gain..  
15160 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20      **.      ** 
15170 54 68 69 73 20 62 72 61 6e 63 68 20 69 73 20 74  This branch is t
15180 61 6b 65 6e 20 65 76 65 6e 20 69 66 20 61 4f 66  aken even if aOf
15190 66 73 65 74 5b 30 5d 3d 3d 30 2e 20 20 53 75 63  fset[0]==0.  Suc
151a0 68 20 61 20 72 65 63 6f 72 64 20 69 73 20 6e 65  h a record is ne
151b0 76 65 72 0a 20 20 20 20 20 20 2a 2a 20 67 65 6e  ver.      ** gen
151c0 65 72 61 74 65 64 20 62 79 20 53 51 4c 69 74 65  erated by SQLite
151d0 2c 20 61 6e 64 20 63 6f 75 6c 64 20 62 65 20 63  , and could be c
151e0 6f 6e 73 69 64 65 72 65 64 20 63 6f 72 72 75 70  onsidered corrup
151f0 74 69 6f 6e 2c 20 62 75 74 20 77 65 0a 20 20 20  tion, but we.   
15200 20 20 20 2a 2a 20 61 63 63 65 70 74 20 69 74 20     ** accept it 
15210 66 6f 72 20 68 69 73 74 6f 72 69 63 61 6c 20 72  for historical r
15220 65 61 73 6f 6e 73 2e 20 20 57 68 65 6e 20 61 4f  easons.  When aO
15230 66 66 73 65 74 5b 30 5d 3d 3d 30 2c 20 74 68 65  ffset[0]==0, the
15240 20 63 6f 64 65 20 74 68 69 73 0a 20 20 20 20 20   code this.     
15250 20 2a 2a 20 62 72 61 6e 63 68 20 6a 75 6d 70 73   ** branch jumps
15260 20 74 6f 20 72 65 61 64 73 20 70 61 73 74 20 74   to reads past t
15270 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65  he end of the re
15280 63 6f 72 64 2c 20 62 75 74 20 6e 65 76 65 72 20  cord, but never 
15290 6d 6f 72 65 0a 20 20 20 20 20 20 2a 2a 20 74 68  more.      ** th
152a0 61 6e 20 61 20 66 65 77 20 62 79 74 65 73 2e 20  an a few bytes. 
152b0 20 45 76 65 6e 20 69 66 20 74 68 65 20 72 65 63   Even if the rec
152c0 6f 72 64 20 6f 63 63 75 72 73 20 61 74 20 74 68  ord occurs at th
152d0 65 20 65 6e 64 20 6f 66 20 74 68 65 20 70 61 67  e end of the pag
152e0 65 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e 74 65  e.      ** conte
152f0 6e 74 20 61 72 65 61 2c 20 74 68 65 20 22 70 61  nt area, the "pa
15300 67 65 20 68 65 61 64 65 72 22 20 63 6f 6d 65 73  ge header" comes
15310 20 61 66 74 65 72 20 74 68 65 20 70 61 67 65 20   after the page 
15320 63 6f 6e 74 65 6e 74 20 61 6e 64 20 73 6f 0a 20  content and so. 
15330 20 20 20 20 20 2a 2a 20 74 68 69 73 20 6f 76 65       ** this ove
15340 72 72 65 61 64 20 69 73 20 68 61 72 6d 6c 65 73  rread is harmles
15350 73 2e 20 20 53 69 6d 69 6c 61 72 20 6f 76 65 72  s.  Similar over
15360 72 65 61 64 73 20 63 61 6e 20 6f 63 63 75 72 20  reads can occur 
15370 66 6f 72 20 61 20 63 6f 72 72 75 70 74 0a 20 20  for a corrupt.  
15380 20 20 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20      ** database 
15390 66 69 6c 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  file..      */. 
153a0 20 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d       zData = pC-
153b0 3e 61 52 6f 77 3b 0a 20 20 20 20 20 20 61 73 73  >aRow;.      ass
153c0 65 72 74 28 20 70 43 2d 3e 6e 48 64 72 50 61 72  ert( pC->nHdrPar
153d0 73 65 64 3c 3d 70 32 20 29 3b 20 20 20 20 20 20  sed<=p2 );      
153e0 20 20 20 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e 61     /* Conditiona
153f0 6c 20 73 6b 69 70 70 65 64 20 2a 2f 0a 20 20 20  l skipped */.   
15400 20 20 20 74 65 73 74 63 61 73 65 28 20 61 4f 66     testcase( aOf
15410 66 73 65 74 5b 30 5d 3d 3d 30 20 29 3b 0a 20 20  fset[0]==0 );.  
15420 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
15430 6d 6e 5f 72 65 61 64 5f 68 65 61 64 65 72 3b 0a  mn_read_header;.
15440 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20      }.  }..  /* 
15450 4d 61 6b 65 20 73 75 72 65 20 61 74 20 6c 65 61  Make sure at lea
15460 73 74 20 74 68 65 20 66 69 72 73 74 20 70 32 2b  st the first p2+
15470 31 20 65 6e 74 72 69 65 73 20 6f 66 20 74 68 65  1 entries of the
15480 20 68 65 61 64 65 72 20 68 61 76 65 20 62 65 65   header have bee
15490 6e 0a 20 20 2a 2a 20 70 61 72 73 65 64 20 61 6e  n.  ** parsed an
154a0 64 20 76 61 6c 69 64 20 69 6e 66 6f 72 6d 61 74  d valid informat
154b0 69 6f 6e 20 69 73 20 69 6e 20 61 4f 66 66 73 65  ion is in aOffse
154c0 74 5b 5d 20 61 6e 64 20 70 43 2d 3e 61 54 79 70  t[] and pC->aTyp
154d0 65 5b 5d 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  e[]..  */.  if( 
154e0 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d  pC->nHdrParsed<=
154f0 70 32 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  p2 ){.    /* If 
15500 74 68 65 72 65 20 69 73 20 6d 6f 72 65 20 68 65  there is more he
15510 61 64 65 72 20 61 76 61 69 6c 61 62 6c 65 20 66  ader available f
15520 6f 72 20 70 61 72 73 69 6e 67 20 69 6e 20 74 68  or parsing in th
15530 65 20 72 65 63 6f 72 64 2c 20 74 72 79 0a 20 20  e record, try.  
15540 20 20 2a 2a 20 74 6f 20 65 78 74 72 61 63 74 20    ** to extract 
15550 61 64 64 69 74 69 6f 6e 61 6c 20 66 69 65 6c 64  additional field
15560 73 20 75 70 20 74 68 72 6f 75 67 68 20 74 68 65  s up through the
15570 20 70 32 2b 31 2d 74 68 20 66 69 65 6c 64 20 0a   p2+1-th field .
15580 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70      */.    if( p
15590 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 3c 61 4f  C->iHdrOffset<aO
155a0 66 66 73 65 74 5b 30 5d 20 29 7b 0a 20 20 20 20  ffset[0] ){.    
155b0 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 7a    /* Make sure z
155c0 44 61 74 61 20 70 6f 69 6e 74 73 20 74 6f 20 65  Data points to e
155d0 6e 6f 75 67 68 20 6f 66 20 74 68 65 20 72 65 63  nough of the rec
155e0 6f 72 64 20 74 6f 20 63 6f 76 65 72 20 74 68 65  ord to cover the
155f0 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20 20 20 20   header. */.    
15600 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d    if( pC->aRow==
15610 30 20 29 7b 0a 20 20 20 20 20 20 20 20 6d 65 6d  0 ){.        mem
15620 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69  set(&sMem, 0, si
15630 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 20  zeof(sMem));.   
15640 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
15650 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65  3VdbeMemFromBtre
15660 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  e(pC->uc.pCursor
15670 2c 20 30 2c 20 61 4f 66 66 73 65 74 5b 30 5d 2c  , 0, aOffset[0],
15680 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20   &sMem);.       
15690 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
156a0 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
156b0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
156c0 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 28 75        zData = (u
156d0 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20  8*)sMem.z;.     
156e0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
156f0 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77  zData = pC->aRow
15700 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20  ;.      }.  .   
15710 20 20 20 2f 2a 20 46 69 6c 6c 20 69 6e 20 70 43     /* Fill in pC
15720 2d 3e 61 54 79 70 65 5b 69 5d 20 61 6e 64 20 61  ->aType[i] and a
15730 4f 66 66 73 65 74 5b 69 5d 20 76 61 6c 75 65 73  Offset[i] values
15740 20 74 68 72 6f 75 67 68 20 74 68 65 20 70 32 2d   through the p2-
15750 74 68 20 66 69 65 6c 64 2e 20 2a 2f 0a 20 20 20  th field. */.   
15760 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f   op_column_read_
15770 68 65 61 64 65 72 3a 0a 20 20 20 20 20 20 69 20  header:.      i 
15780 3d 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64  = pC->nHdrParsed
15790 3b 0a 20 20 20 20 20 20 6f 66 66 73 65 74 36 34  ;.      offset64
157a0 20 3d 20 61 4f 66 66 73 65 74 5b 69 5d 3b 0a 20   = aOffset[i];. 
157b0 20 20 20 20 20 7a 48 64 72 20 3d 20 7a 44 61 74       zHdr = zDat
157c0 61 20 2b 20 70 43 2d 3e 69 48 64 72 4f 66 66 73  a + pC->iHdrOffs
157d0 65 74 3b 0a 20 20 20 20 20 20 7a 45 6e 64 48 64  et;.      zEndHd
157e0 72 20 3d 20 7a 44 61 74 61 20 2b 20 61 4f 66 66  r = zData + aOff
157f0 73 65 74 5b 30 5d 3b 0a 20 20 20 20 20 20 74 65  set[0];.      te
15800 73 74 63 61 73 65 28 20 7a 48 64 72 3e 3d 7a 45  stcase( zHdr>=zE
15810 6e 64 48 64 72 20 29 3b 0a 20 20 20 20 20 20 64  ndHdr );.      d
15820 6f 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28  o{.        if( (
15830 74 20 3d 20 7a 48 64 72 5b 30 5d 29 3c 30 78 38  t = zHdr[0])<0x8
15840 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 7a  0 ){.          z
15850 48 64 72 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20  Hdr++;.         
15860 20 6f 66 66 73 65 74 36 34 20 2b 3d 20 73 71 6c   offset64 += sql
15870 69 74 65 33 56 64 62 65 4f 6e 65 42 79 74 65 53  ite3VdbeOneByteS
15880 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29 3b  erialTypeLen(t);
15890 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
158a0 20 20 20 20 20 20 20 20 20 20 7a 48 64 72 20 2b            zHdr +
158b0 3d 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  = sqlite3GetVari
158c0 6e 74 33 32 28 7a 48 64 72 2c 20 26 74 29 3b 0a  nt32(zHdr, &t);.
158d0 20 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74            offset
158e0 36 34 20 2b 3d 20 73 71 6c 69 74 65 33 56 64 62  64 += sqlite3Vdb
158f0 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74  eSerialTypeLen(t
15900 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
15910 20 20 20 20 20 70 43 2d 3e 61 54 79 70 65 5b 69       pC->aType[i
15920 2b 2b 5d 20 3d 20 74 3b 0a 20 20 20 20 20 20 20  ++] = t;.       
15930 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 28 75   aOffset[i] = (u
15940 33 32 29 28 6f 66 66 73 65 74 36 34 20 26 20 30  32)(offset64 & 0
15950 78 66 66 66 66 66 66 66 66 29 3b 0a 20 20 20 20  xffffffff);.    
15960 20 20 7d 77 68 69 6c 65 28 20 69 3c 3d 70 32 20    }while( i<=p2 
15970 26 26 20 7a 48 64 72 3c 7a 45 6e 64 48 64 72 20  && zHdr<zEndHdr 
15980 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 54 68 65  );..      /* The
15990 20 72 65 63 6f 72 64 20 69 73 20 63 6f 72 72 75   record is corru
159a0 70 74 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65  pt if any of the
159b0 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74   following are t
159c0 72 75 65 3a 0a 20 20 20 20 20 20 2a 2a 20 28 31  rue:.      ** (1
159d0 29 20 74 68 65 20 62 79 74 65 73 20 6f 66 20 74  ) the bytes of t
159e0 68 65 20 68 65 61 64 65 72 20 65 78 74 65 6e 64  he header extend
159f0 20 70 61 73 74 20 74 68 65 20 64 65 63 6c 61 72   past the declar
15a00 65 64 20 68 65 61 64 65 72 20 73 69 7a 65 0a 20  ed header size. 
15a10 20 20 20 20 20 2a 2a 20 28 32 29 20 74 68 65 20       ** (2) the 
15a20 65 6e 74 69 72 65 20 68 65 61 64 65 72 20 77 61  entire header wa
15a30 73 20 75 73 65 64 20 62 75 74 20 6e 6f 74 20 61  s used but not a
15a40 6c 6c 20 64 61 74 61 20 77 61 73 20 75 73 65 64  ll data was used
15a50 0a 20 20 20 20 20 20 2a 2a 20 28 33 29 20 74 68  .      ** (3) th
15a60 65 20 65 6e 64 20 6f 66 20 74 68 65 20 64 61 74  e end of the dat
15a70 61 20 65 78 74 65 6e 64 73 20 62 65 79 6f 6e 64  a extends beyond
15a80 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
15a90 72 65 63 6f 72 64 2e 0a 20 20 20 20 20 20 2a 2f  record..      */
15aa0 0a 20 20 20 20 20 20 69 66 28 20 28 7a 48 64 72  .      if( (zHdr
15ab0 3e 3d 7a 45 6e 64 48 64 72 20 26 26 20 28 7a 48  >=zEndHdr && (zH
15ac0 64 72 3e 7a 45 6e 64 48 64 72 20 7c 7c 20 6f 66  dr>zEndHdr || of
15ad0 66 73 65 74 36 34 21 3d 70 43 2d 3e 70 61 79 6c  fset64!=pC->payl
15ae0 6f 61 64 53 69 7a 65 29 29 0a 20 20 20 20 20 20  oadSize)).      
15af0 20 7c 7c 20 28 6f 66 66 73 65 74 36 34 20 3e 20   || (offset64 > 
15b00 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29  pC->payloadSize)
15b10 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20  .      ){.      
15b20 20 20 69 66 28 20 61 4f 66 66 73 65 74 5b 30 5d    if( aOffset[0]
15b30 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==0 ){.         
15b40 20 69 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20   i = 0;.        
15b50 20 20 7a 48 64 72 20 3d 20 7a 45 6e 64 48 64 72    zHdr = zEndHdr
15b60 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
15b70 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70  .          if( p
15b80 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 20 73 71 6c  C->aRow==0 ) sql
15b90 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
15ba0 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20  se(&sMem);.     
15bb0 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
15bc0 75 6d 6e 5f 63 6f 72 72 75 70 74 3b 0a 20 20 20  umn_corrupt;.   
15bd0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a       }.      }..
15be0 20 20 20 20 20 20 70 43 2d 3e 6e 48 64 72 50 61        pC->nHdrPa
15bf0 72 73 65 64 20 3d 20 69 3b 0a 20 20 20 20 20 20  rsed = i;.      
15c00 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 20 3d  pC->iHdrOffset =
15c10 20 28 75 33 32 29 28 7a 48 64 72 20 2d 20 7a 44   (u32)(zHdr - zD
15c20 61 74 61 29 3b 0a 20 20 20 20 20 20 69 66 28 20  ata);.      if( 
15c30 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 20 73 71  pC->aRow==0 ) sq
15c40 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
15c50 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 20 20  ase(&sMem);.    
15c60 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 74 20 3d  }else{.      t =
15c70 20 30 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f   0;.    }..    /
15c80 2a 20 49 66 20 61 66 74 65 72 20 74 72 79 69 6e  * If after tryin
15c90 67 20 74 6f 20 65 78 74 72 61 63 74 20 6e 65 77  g to extract new
15ca0 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68   entries from th
15cb0 65 20 68 65 61 64 65 72 2c 20 6e 48 64 72 50 61  e header, nHdrPa
15cc0 72 73 65 64 20 69 73 0a 20 20 20 20 2a 2a 20 73  rsed is.    ** s
15cd0 74 69 6c 6c 20 6e 6f 74 20 75 70 20 74 6f 20 70  till not up to p
15ce0 32 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68  2, that means th
15cf0 61 74 20 74 68 65 20 72 65 63 6f 72 64 20 68 61  at the record ha
15d00 73 20 66 65 77 65 72 20 74 68 61 6e 20 70 32 0a  s fewer than p2.
15d10 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 73 2e 20      ** columns. 
15d20 20 53 6f 20 74 68 65 20 72 65 73 75 6c 74 20 77   So the result w
15d30 69 6c 6c 20 62 65 20 65 69 74 68 65 72 20 74 68  ill be either th
15d40 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  e default value 
15d50 6f 72 20 61 20 4e 55 4c 4c 2e 0a 20 20 20 20 2a  or a NULL..    *
15d60 2f 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 48  /.    if( pC->nH
15d70 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a  drParsed<=p2 ){.
15d80 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70        if( pOp->p
15d90 34 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20 29 7b  4type==P4_MEM ){
15da0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
15db0 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
15dc0 70 79 28 70 44 65 73 74 2c 20 70 4f 70 2d 3e 70  py(pDest, pOp->p
15dd0 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61 74  4.pMem, MEM_Stat
15de0 69 63 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ic);.      }else
15df0 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
15e00 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
15e10 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 7d 0a  pDest);.      }.
15e20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
15e30 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a  lumn_out;.    }.
15e40 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 74 20 3d    }else{.    t =
15e50 20 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 3b 0a   pC->aType[p2];.
15e60 20 20 7d 0a 0a 20 20 2f 2a 20 45 78 74 72 61 63    }..  /* Extrac
15e70 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 66 6f  t the content fo
15e80 72 20 74 68 65 20 70 32 2b 31 2d 74 68 20 63 6f  r the p2+1-th co
15e90 6c 75 6d 6e 2e 20 20 43 6f 6e 74 72 6f 6c 20 63  lumn.  Control c
15ea0 61 6e 20 6f 6e 6c 79 0a 20 20 2a 2a 20 72 65 61  an only.  ** rea
15eb0 63 68 20 74 68 69 73 20 70 6f 69 6e 74 20 69 66  ch this point if
15ec0 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 61 4f   aOffset[p2], aO
15ed0 66 66 73 65 74 5b 70 32 2b 31 5d 2c 20 61 6e 64  ffset[p2+1], and
15ee0 20 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 20 61   pC->aType[p2] a
15ef0 72 65 0a 20 20 2a 2a 20 61 6c 6c 20 76 61 6c 69  re.  ** all vali
15f00 64 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  d..  */.  assert
15f10 28 20 70 32 3c 70 43 2d 3e 6e 48 64 72 50 61 72  ( p2<pC->nHdrPar
15f20 73 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sed );.  assert(
15f30 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
15f40 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  ;.  assert( sqli
15f50 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49  te3VdbeCheckMemI
15f60 6e 76 61 72 69 61 6e 74 73 28 70 44 65 73 74 29  nvariants(pDest)
15f70 20 29 3b 0a 20 20 69 66 28 20 56 64 62 65 4d 65   );.  if( VdbeMe
15f80 6d 44 79 6e 61 6d 69 63 28 70 44 65 73 74 29 20  mDynamic(pDest) 
15f90 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
15fa0 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65  beMemSetNull(pDe
15fb0 73 74 29 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  st);.  }.  asser
15fc0 74 28 20 74 3d 3d 70 43 2d 3e 61 54 79 70 65 5b  t( t==pC->aType[
15fd0 70 32 5d 20 29 3b 0a 20 20 69 66 28 20 70 43 2d  p2] );.  if( pC-
15fe0 3e 73 7a 52 6f 77 3e 3d 61 4f 66 66 73 65 74 5b  >szRow>=aOffset[
15ff0 70 32 2b 31 5d 20 29 7b 0a 20 20 20 20 2f 2a 20  p2+1] ){.    /* 
16000 54 68 69 73 20 69 73 20 74 68 65 20 63 6f 6d 6d  This is the comm
16010 6f 6e 20 63 61 73 65 20 77 68 65 72 65 20 74 68  on case where th
16020 65 20 64 65 73 69 72 65 64 20 63 6f 6e 74 65 6e  e desired conten
16030 74 20 66 69 74 73 20 6f 6e 20 74 68 65 20 6f 72  t fits on the or
16040 69 67 69 6e 61 6c 0a 20 20 20 20 2a 2a 20 70 61  iginal.    ** pa
16050 67 65 20 2d 20 77 68 65 72 65 20 74 68 65 20 63  ge - where the c
16060 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20 6f 6e  ontent is not on
16070 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67   an overflow pag
16080 65 20 2a 2f 0a 20 20 20 20 7a 44 61 74 61 20 3d  e */.    zData =
16090 20 70 43 2d 3e 61 52 6f 77 20 2b 20 61 4f 66 66   pC->aRow + aOff
160a0 73 65 74 5b 70 32 5d 3b 0a 20 20 20 20 69 66 28  set[p2];.    if(
160b0 20 74 3c 31 32 20 29 7b 0a 20 20 20 20 20 20 73   t<12 ){.      s
160c0 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
160d0 47 65 74 28 7a 44 61 74 61 2c 20 74 2c 20 70 44  Get(zData, t, pD
160e0 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  est);.    }else{
160f0 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65  .      /* If the
16100 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 69 73   column value is
16110 20 61 20 73 74 72 69 6e 67 2c 20 77 65 20 6e 65   a string, we ne
16120 65 64 20 61 20 70 65 72 73 69 73 74 65 6e 74 20  ed a persistent 
16130 76 61 6c 75 65 2c 20 6e 6f 74 0a 20 20 20 20 20  value, not.     
16140 20 2a 2a 20 61 20 4d 45 4d 5f 45 70 68 65 6d 20   ** a MEM_Ephem 
16150 76 61 6c 75 65 2e 20 20 54 68 69 73 20 62 72 61  value.  This bra
16160 6e 63 68 20 69 73 20 61 20 66 61 73 74 20 73 68  nch is a fast sh
16170 6f 72 74 2d 63 75 74 20 74 68 61 74 20 69 73 20  ort-cut that is 
16180 65 71 75 69 76 61 6c 65 6e 74 0a 20 20 20 20 20  equivalent.     
16190 20 2a 2a 20 74 6f 20 63 61 6c 6c 69 6e 67 20 73   ** to calling s
161a0 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
161b0 47 65 74 28 29 20 61 6e 64 20 73 71 6c 69 74 65  Get() and sqlite
161c0 33 56 64 62 65 44 65 65 70 68 65 6d 65 72 61 6c  3VdbeDeephemeral
161d0 69 7a 65 28 29 2e 0a 20 20 20 20 20 20 2a 2f 0a  ize()..      */.
161e0 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e        static con
161f0 73 74 20 75 31 36 20 61 46 6c 61 67 5b 5d 20 3d  st u16 aFlag[] =
16200 20 7b 20 4d 45 4d 5f 42 6c 6f 62 2c 20 4d 45 4d   { MEM_Blob, MEM
16210 5f 53 74 72 7c 4d 45 4d 5f 54 65 72 6d 20 7d 3b  _Str|MEM_Term };
16220 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 6e 20  .      pDest->n 
16230 3d 20 6c 65 6e 20 3d 20 28 74 2d 31 32 29 2f 32  = len = (t-12)/2
16240 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 65  ;.      pDest->e
16250 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20  nc = encoding;. 
16260 20 20 20 20 20 69 66 28 20 70 44 65 73 74 2d 3e       if( pDest->
16270 73 7a 4d 61 6c 6c 6f 63 20 3c 20 6c 65 6e 2b 32  szMalloc < len+2
16280 20 29 7b 0a 20 20 20 20 20 20 20 20 70 44 65 73   ){.        pDes
16290 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e  t->flags = MEM_N
162a0 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
162b0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47   sqlite3VdbeMemG
162c0 72 6f 77 28 70 44 65 73 74 2c 20 6c 65 6e 2b 32  row(pDest, len+2
162d0 2c 20 30 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  , 0) ) goto no_m
162e0 65 6d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  em;.      }else{
162f0 0a 20 20 20 20 20 20 20 20 70 44 65 73 74 2d 3e  .        pDest->
16300 7a 20 3d 20 70 44 65 73 74 2d 3e 7a 4d 61 6c 6c  z = pDest->zMall
16310 6f 63 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  oc;.      }.    
16320 20 20 6d 65 6d 63 70 79 28 70 44 65 73 74 2d 3e    memcpy(pDest->
16330 7a 2c 20 7a 44 61 74 61 2c 20 6c 65 6e 29 3b 0a  z, zData, len);.
16340 20 20 20 20 20 20 70 44 65 73 74 2d 3e 7a 5b 6c        pDest->z[l
16350 65 6e 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 70  en] = 0;.      p
16360 44 65 73 74 2d 3e 7a 5b 6c 65 6e 2b 31 5d 20 3d  Dest->z[len+1] =
16370 20 30 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d   0;.      pDest-
16380 3e 66 6c 61 67 73 20 3d 20 61 46 6c 61 67 5b 74  >flags = aFlag[t
16390 26 31 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  &1];.    }.  }el
163a0 73 65 7b 0a 20 20 20 20 70 44 65 73 74 2d 3e 65  se{.    pDest->e
163b0 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20  nc = encoding;. 
163c0 20 20 20 2f 2a 20 54 68 69 73 20 62 72 61 6e 63     /* This branc
163d0 68 20 68 61 70 70 65 6e 73 20 6f 6e 6c 79 20 77  h happens only w
163e0 68 65 6e 20 63 6f 6e 74 65 6e 74 20 69 73 20 6f  hen content is o
163f0 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 73  n overflow pages
16400 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 28 70 4f   */.    if( ((pO
16410 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f  p->p5 & (OPFLAG_
16420 4c 45 4e 47 54 48 41 52 47 7c 4f 50 46 4c 41 47  LENGTHARG|OPFLAG
16430 5f 54 59 50 45 4f 46 41 52 47 29 29 21 3d 30 0a  _TYPEOFARG))!=0.
16440 20 20 20 20 20 20 20 20 20 20 26 26 20 28 28 74            && ((t
16450 3e 3d 31 32 20 26 26 20 28 74 26 31 29 3d 3d 30  >=12 && (t&1)==0
16460 29 20 7c 7c 20 28 70 4f 70 2d 3e 70 35 20 26 20  ) || (pOp->p5 & 
16470 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
16480 29 21 3d 30 29 29 0a 20 20 20 20 20 7c 7c 20 28  )!=0)).     || (
16490 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62  len = sqlite3Vdb
164a0 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74  eSerialTypeLen(t
164b0 29 29 3d 3d 30 0a 20 20 20 20 29 7b 0a 20 20 20  ))==0.    ){.   
164c0 20 20 20 2f 2a 20 43 6f 6e 74 65 6e 74 20 69 73     /* Content is
164d0 20 69 72 72 65 6c 65 76 61 6e 74 20 66 6f 72 0a   irrelevant for.
164e0 20 20 20 20 20 20 2a 2a 20 20 20 20 31 2e 20 74        **    1. t
164f0 68 65 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63  he typeof() func
16500 74 69 6f 6e 2c 0a 20 20 20 20 20 20 2a 2a 20 20  tion,.      **  
16510 20 20 32 2e 20 74 68 65 20 6c 65 6e 67 74 68 28    2. the length(
16520 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 66 20 58  X) function if X
16530 20 69 73 20 61 20 62 6c 6f 62 2c 20 61 6e 64 0a   is a blob, and.
16540 20 20 20 20 20 20 2a 2a 20 20 20 20 33 2e 20 69        **    3. i
16550 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6c 65  f the content le
16560 6e 67 74 68 20 69 73 20 7a 65 72 6f 2e 0a 20 20  ngth is zero..  
16570 20 20 20 20 2a 2a 20 53 6f 20 77 65 20 6d 69 67      ** So we mig
16580 68 74 20 61 73 20 77 65 6c 6c 20 75 73 65 20 62  ht as well use b
16590 6f 67 75 73 20 63 6f 6e 74 65 6e 74 20 72 61 74  ogus content rat
165a0 68 65 72 20 74 68 61 6e 20 72 65 61 64 69 6e 67  her than reading
165b0 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e 74 65 6e  .      ** conten
165c0 74 20 66 72 6f 6d 20 64 69 73 6b 2e 20 0a 20 20  t from disk. .  
165d0 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20      **.      ** 
165e0 41 6c 74 68 6f 75 67 68 20 73 71 6c 69 74 65 33  Although sqlite3
165f0 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 29 20  VdbeSerialGet() 
16600 6d 61 79 20 72 65 61 64 20 61 74 20 6d 6f 73 74  may read at most
16610 20 38 20 62 79 74 65 73 20 66 72 6f 6d 20 74 68   8 bytes from th
16620 65 0a 20 20 20 20 20 20 2a 2a 20 62 75 66 66 65  e.      ** buffe
16630 72 20 70 61 73 73 65 64 20 74 6f 20 69 74 2c 20  r passed to it, 
16640 64 65 62 75 67 67 69 6e 67 20 66 75 6e 63 74 69  debugging functi
16650 6f 6e 20 56 64 62 65 4d 65 6d 50 72 65 74 74 79  on VdbeMemPretty
16660 50 72 69 6e 74 28 29 20 6d 61 79 0a 20 20 20 20  Print() may.    
16670 20 20 2a 2a 20 72 65 61 64 20 75 70 20 74 6f 20    ** read up to 
16680 31 36 2e 20 53 6f 20 31 36 20 62 79 74 65 73 20  16. So 16 bytes 
16690 6f 66 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74  of bogus content
166a0 20 69 73 20 73 75 70 70 6c 69 65 64 2e 0a 20 20   is supplied..  
166b0 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 74 61      */.      sta
166c0 74 69 63 20 75 38 20 61 5a 65 72 6f 5b 31 36 5d  tic u8 aZero[16]
166d0 3b 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68  ;  /* This is th
166e0 65 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74 20  e bogus content 
166f0 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  */.      sqlite3
16700 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 61 5a  VdbeSerialGet(aZ
16710 65 72 6f 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a  ero, t, pDest);.
16720 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
16730 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
16740 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43  eMemFromBtree(pC
16750 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 61 4f  ->uc.pCursor, aO
16760 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20  ffset[p2], len, 
16770 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 69 66  pDest);.      if
16780 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
16790 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
167a0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
167b0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
167c0 61 6c 47 65 74 28 28 63 6f 6e 73 74 20 75 38 2a  alGet((const u8*
167d0 29 70 44 65 73 74 2d 3e 7a 2c 20 74 2c 20 70 44  )pDest->z, t, pD
167e0 65 73 74 29 3b 0a 20 20 20 20 20 20 70 44 65 73  est);.      pDes
167f0 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d  t->flags &= ~MEM
16800 5f 45 70 68 65 6d 3b 0a 20 20 20 20 7d 0a 20 20  _Ephem;.    }.  
16810 7d 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  }..op_column_out
16820 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  :.  UPDATE_MAX_B
16830 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a  LOBSIZE(pDest);.
16840 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
16850 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29  (pOp->p3, pDest)
16860 3b 0a 20 20 62 72 65 61 6b 3b 0a 0a 6f 70 5f 63  ;.  break;..op_c
16870 6f 6c 75 6d 6e 5f 63 6f 72 72 75 70 74 3a 0a 20  olumn_corrupt:. 
16880 20 69 66 28 20 61 4f 70 5b 30 5d 2e 70 33 3e 30   if( aOp[0].p3>0
16890 20 29 7b 0a 20 20 20 20 70 4f 70 20 3d 20 26 61   ){.    pOp = &a
168a0 4f 70 5b 61 4f 70 5b 30 5d 2e 70 33 2d 31 5d 3b  Op[aOp[0].p3-1];
168b0 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65  .    break;.  }e
168c0 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  lse{.    rc = SQ
168d0 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50  LITE_CORRUPT_BKP
168e0 54 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  T;.    goto abor
168f0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
16900 20 20 7d 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65    }.}../* Opcode
16910 3a 20 41 66 66 69 6e 69 74 79 20 50 31 20 50 32  : Affinity P1 P2
16920 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
16930 73 69 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b  sis: affinity(r[
16940 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 41 70  P1@P2]).**.** Ap
16950 70 6c 79 20 61 66 66 69 6e 69 74 69 65 73 20 74  ply affinities t
16960 6f 20 61 20 72 61 6e 67 65 20 6f 66 20 50 32 20  o a range of P2 
16970 72 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69  registers starti
16980 6e 67 20 77 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a  ng with P1..**.*
16990 2a 20 50 34 20 69 73 20 61 20 73 74 72 69 6e 67  * P4 is a string
169a0 20 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72   that is P2 char
169b0 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 54 68 65  acters long. The
169c0 20 4e 2d 74 68 20 63 68 61 72 61 63 74 65 72 20   N-th character 
169d0 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67  of the.** string
169e0 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63   indicates the c
169f0 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74  olumn affinity t
16a00 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73  hat should be us
16a10 65 64 20 66 6f 72 20 74 68 65 20 4e 2d 74 68 0a  ed for the N-th.
16a20 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69  ** memory cell i
16a30 6e 20 74 68 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a  n the range..*/.
16a40 63 61 73 65 20 4f 50 5f 41 66 66 69 6e 69 74 79  case OP_Affinity
16a50 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  : {.  const char
16a60 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 2f   *zAffinity;   /
16a70 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74  * The affinity t
16a80 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a  o be applied */.
16a90 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70  .  zAffinity = p
16aa0 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65  Op->p4.z;.  asse
16ab0 72 74 28 20 7a 41 66 66 69 6e 69 74 79 21 3d 30  rt( zAffinity!=0
16ac0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
16ad0 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73 73  p->p2>0 );.  ass
16ae0 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79 5b 70  ert( zAffinity[p
16af0 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29 3b 0a 20 20  Op->p2]==0 );.  
16b00 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
16b10 2d 3e 70 31 5d 3b 0a 20 20 64 6f 7b 0a 20 20 20  ->p1];.  do{.   
16b20 20 61 73 73 65 72 74 28 20 70 49 6e 31 20 3c 3d   assert( pIn1 <=
16b30 20 26 70 2d 3e 61 4d 65 6d 5b 28 70 2d 3e 6e 4d   &p->aMem[(p->nM
16b40 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
16b50 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72  r)] );.    asser
16b60 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49  t( memIsValid(pI
16b70 6e 31 29 20 29 3b 0a 20 20 20 20 61 70 70 6c 79  n1) );.    apply
16b80 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 2a  Affinity(pIn1, *
16b90 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 2c 20 65  (zAffinity++), e
16ba0 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 70 49  ncoding);.    pI
16bb0 6e 31 2b 2b 3b 0a 20 20 7d 77 68 69 6c 65 28 20  n1++;.  }while( 
16bc0 7a 41 66 66 69 6e 69 74 79 5b 30 5d 20 29 3b 0a  zAffinity[0] );.
16bd0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
16be0 70 63 6f 64 65 3a 20 4d 61 6b 65 52 65 63 6f 72  pcode: MakeRecor
16bf0 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  d P1 P2 P3 P4 *.
16c00 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
16c10 33 5d 3d 6d 6b 72 65 63 28 72 5b 50 31 40 50 32  3]=mkrec(r[P1@P2
16c20 5d 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74  ]).**.** Convert
16c30 20 50 32 20 72 65 67 69 73 74 65 72 73 20 62 65   P2 registers be
16c40 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 31 20  ginning with P1 
16c50 69 6e 74 6f 20 74 68 65 20 5b 72 65 63 6f 72 64  into the [record
16c60 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20 75 73 65 20   format].** use 
16c70 61 73 20 61 20 64 61 74 61 20 72 65 63 6f 72 64  as a data record
16c80 20 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 74   in a database t
16c90 61 62 6c 65 20 6f 72 20 61 73 20 61 20 6b 65 79  able or as a key
16ca0 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64 65 78 2e  .** in an index.
16cb0 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20    The OP_Column 
16cc0 6f 70 63 6f 64 65 20 63 61 6e 20 64 65 63 6f 64  opcode can decod
16cd0 65 20 74 68 65 20 72 65 63 6f 72 64 20 6c 61 74  e the record lat
16ce0 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79  er..**.** P4 may
16cf0 20 62 65 20 61 20 73 74 72 69 6e 67 20 74 68 61   be a string tha
16d00 74 20 69 73 20 50 32 20 63 68 61 72 61 63 74 65  t is P2 characte
16d10 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20 4e 2d  rs long.  The N-
16d20 74 68 20 63 68 61 72 61 63 74 65 72 20 6f 66 20  th character of 
16d30 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e  the.** string in
16d40 64 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75  dicates the colu
16d50 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61 74  mn affinity that
16d60 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20   should be used 
16d70 66 6f 72 20 74 68 65 20 4e 2d 74 68 0a 2a 2a 20  for the N-th.** 
16d80 66 69 65 6c 64 20 6f 66 20 74 68 65 20 69 6e 64  field of the ind
16d90 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  ex key..**.** Th
16da0 65 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20 63  e mapping from c
16db0 68 61 72 61 63 74 65 72 20 74 6f 20 61 66 66 69  haracter to affi
16dc0 6e 69 74 79 20 69 73 20 67 69 76 65 6e 20 62 79  nity is given by
16dd0 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   the SQLITE_AFF_
16de0 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e  .** macros defin
16df0 65 64 20 69 6e 20 73 71 6c 69 74 65 49 6e 74 2e  ed in sqliteInt.
16e00 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69  h..**.** If P4 i
16e10 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c 6c 20  s NULL then all 
16e20 69 6e 64 65 78 20 66 69 65 6c 64 73 20 68 61 76  index fields hav
16e30 65 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 42  e the affinity B
16e40 4c 4f 42 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  LOB..*/.case OP_
16e50 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a 20 20  MakeRecord: {.  
16e60 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b 20  u8 *zNewRecord; 
16e70 20 20 20 20 20 20 20 2f 2a 20 41 20 62 75 66 66         /* A buff
16e80 65 72 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64  er to hold the d
16e90 61 74 61 20 66 6f 72 20 74 68 65 20 6e 65 77 20  ata for the new 
16ea0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20  record */.  Mem 
16eb0 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20 20 20  *pRec;          
16ec0 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 65     /* The new re
16ed0 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e 44  cord */.  u64 nD
16ee0 61 74 61 3b 20 20 20 20 20 20 20 20 20 20 20 20  ata;            
16ef0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
16f00 74 65 73 20 6f 66 20 64 61 74 61 20 73 70 61 63  tes of data spac
16f10 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72 3b  e */.  int nHdr;
16f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
16f30 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
16f40 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63 65   of header space
16f50 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b   */.  i64 nByte;
16f60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16f70 44 61 74 61 20 73 70 61 63 65 20 72 65 71 75 69  Data space requi
16f80 72 65 64 20 66 6f 72 20 74 68 69 73 20 72 65 63  red for this rec
16f90 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20 6e 5a 65  ord */.  i64 nZe
16fa0 72 6f 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ro;             
16fb0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72  /* Number of zer
16fc0 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20 65  o bytes at the e
16fd0 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  nd of the record
16fe0 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69 6e   */.  int nVarin
16ff0 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
17000 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
17010 69 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a 20  in a varint */. 
17020 20 75 33 32 20 73 65 72 69 61 6c 5f 74 79 70 65   u32 serial_type
17030 3b 20 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20  ;       /* Type 
17040 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  field */.  Mem *
17050 70 44 61 74 61 30 3b 20 20 20 20 20 20 20 20 20  pData0;         
17060 20 20 2f 2a 20 46 69 72 73 74 20 66 69 65 6c 64    /* First field
17070 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64 20   to be combined 
17080 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20  into the record 
17090 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74 3b  */.  Mem *pLast;
170a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
170b0 61 73 74 20 66 69 65 6c 64 20 6f 66 20 74 68 65  ast field of the
170c0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
170d0 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20   nField;        
170e0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
170f0 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72   fields in the r
17100 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72 20  ecord */.  char 
17110 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 20 20  *zAffinity;     
17120 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
17130 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65  y string for the
17140 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
17150 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20   file_format;   
17160 20 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d      /* File form
17170 61 74 20 74 6f 20 75 73 65 20 66 6f 72 20 65 6e  at to use for en
17180 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  coding */.  int 
17190 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
171a0 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64     /* Space used
171b0 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d   in zNewRecord[]
171c0 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 69 6e 74   header */.  int
171d0 20 6a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   j;             
171e0 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65      /* Space use
171f0 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b  d in zNewRecord[
17200 5d 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 75  ] content */.  u
17210 33 32 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20  32 len;         
17220 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20        /* Length 
17230 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a 0a 20  of a field */.. 
17240 20 2f 2a 20 41 73 73 75 6d 69 6e 67 20 74 68 65   /* Assuming the
17250 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73   record contains
17260 20 4e 20 66 69 65 6c 64 73 2c 20 74 68 65 20 72   N fields, the r
17270 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 6c 6f 6f  ecord format loo
17280 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65 20 74 68 69  ks.  ** like thi
17290 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d  s:.  **.  ** ---
172a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
172b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
172c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
172d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
172e0 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64 72  -----.  ** | hdr
172f0 2d 73 69 7a 65 20 7c 20 74 79 70 65 20 30 20 7c  -size | type 0 |
17300 20 74 79 70 65 20 31 20 7c 20 2e 2e 2e 20 7c 20   type 1 | ... | 
17310 74 79 70 65 20 4e 2d 31 20 7c 20 64 61 74 61 30  type N-1 | data0
17320 20 7c 20 2e 2e 2e 20 7c 20 64 61 74 61 20 4e 2d   | ... | data N-
17330 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d  1 | .  ** ------
17340 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17350 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17360 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17370 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17380 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 61 74  --.  **.  ** Dat
17390 61 28 30 29 20 69 73 20 74 61 6b 65 6e 20 66 72  a(0) is taken fr
173a0 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  om register P1. 
173b0 20 44 61 74 61 28 31 29 20 63 6f 6d 65 73 20 66   Data(1) comes f
173c0 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2b  rom register P1+
173d0 31 0a 20 20 2a 2a 20 61 6e 64 20 73 6f 20 66 6f  1.  ** and so fo
173e0 72 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45  rth..  **.  ** E
173f0 61 63 68 20 74 79 70 65 20 66 69 65 6c 64 20 69  ach type field i
17400 73 20 61 20 76 61 72 69 6e 74 20 72 65 70 72 65  s a varint repre
17410 73 65 6e 74 69 6e 67 20 74 68 65 20 73 65 72 69  senting the seri
17420 61 6c 20 74 79 70 65 20 6f 66 20 74 68 65 20 0a  al type of the .
17430 20 20 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69    ** correspondi
17440 6e 67 20 64 61 74 61 20 65 6c 65 6d 65 6e 74 20  ng data element 
17450 28 73 65 65 20 73 71 6c 69 74 65 33 56 64 62 65  (see sqlite3Vdbe
17460 53 65 72 69 61 6c 54 79 70 65 28 29 29 2e 20 54  SerialType()). T
17470 68 65 0a 20 20 2a 2a 20 68 64 72 2d 73 69 7a 65  he.  ** hdr-size
17480 20 66 69 65 6c 64 20 69 73 20 61 6c 73 6f 20 61   field is also a
17490 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69 73   varint which is
174a0 20 74 68 65 20 6f 66 66 73 65 74 20 66 72 6f 6d   the offset from
174b0 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20   the beginning. 
174c0 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72   ** of the recor
174d0 64 20 74 6f 20 64 61 74 61 30 2e 0a 20 20 2a 2f  d to data0..  */
174e0 0a 20 20 6e 44 61 74 61 20 3d 20 30 3b 20 20 20  .  nData = 0;   
174f0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
17500 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61  of bytes of data
17510 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 48 64 72   space */.  nHdr
17520 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f   = 0;          /
17530 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
17540 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63  s of header spac
17550 65 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20 30  e */.  nZero = 0
17560 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
17570 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65  ber of zero byte
17580 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  s at the end of 
17590 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
175a0 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 31  nField = pOp->p1
175b0 3b 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20  ;.  zAffinity = 
175c0 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73  pOp->p4.z;.  ass
175d0 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 26 26  ert( nField>0 &&
175e0 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f   pOp->p2>0 && pO
175f0 70 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d 28 70  p->p2+nField<=(p
17600 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
17610 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 70 44  ursor)+1 );.  pD
17620 61 74 61 30 20 3d 20 26 61 4d 65 6d 5b 6e 46 69  ata0 = &aMem[nFi
17630 65 6c 64 5d 3b 0a 20 20 6e 46 69 65 6c 64 20 3d  eld];.  nField =
17640 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 4c 61 73   pOp->p2;.  pLas
17650 74 20 3d 20 26 70 44 61 74 61 30 5b 6e 46 69 65  t = &pData0[nFie
17660 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c 65 5f 66 6f  ld-1];.  file_fo
17670 72 6d 61 74 20 3d 20 70 2d 3e 6d 69 6e 57 72 69  rmat = p->minWri
17680 74 65 46 69 6c 65 46 6f 72 6d 61 74 3b 0a 0a 20  teFileFormat;.. 
17690 20 2f 2a 20 49 64 65 6e 74 69 66 79 20 74 68 65   /* Identify the
176a0 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72   output register
176b0 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
176c0 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c  p->p3<pOp->p1 ||
176d0 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70   pOp->p3>=pOp->p
176e0 31 2b 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 70  1+pOp->p2 );.  p
176f0 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
17700 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p3];.  memAbout
17710 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
17720 29 3b 0a 0a 20 20 2f 2a 20 41 70 70 6c 79 20 74  );..  /* Apply t
17730 68 65 20 72 65 71 75 65 73 74 65 64 20 61 66 66  he requested aff
17740 69 6e 69 74 79 20 74 6f 20 61 6c 6c 20 69 6e 70  inity to all inp
17750 75 74 73 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  uts.  */.  asser
17760 74 28 20 70 44 61 74 61 30 3c 3d 70 4c 61 73 74  t( pData0<=pLast
17770 20 29 3b 0a 20 20 69 66 28 20 7a 41 66 66 69 6e   );.  if( zAffin
17780 69 74 79 20 29 7b 0a 20 20 20 20 70 52 65 63 20  ity ){.    pRec 
17790 3d 20 70 44 61 74 61 30 3b 0a 20 20 20 20 64 6f  = pData0;.    do
177a0 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66 66  {.      applyAff
177b0 69 6e 69 74 79 28 70 52 65 63 2b 2b 2c 20 2a 28  inity(pRec++, *(
177c0 7a 41 66 66 69 6e 69 74 79 2b 2b 29 2c 20 65 6e  zAffinity++), en
177d0 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20 20 61  coding);.      a
177e0 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79  ssert( zAffinity
177f0 5b 30 5d 3d 3d 30 20 7c 7c 20 70 52 65 63 3c 3d  [0]==0 || pRec<=
17800 70 4c 61 73 74 20 29 3b 0a 20 20 20 20 7d 77 68  pLast );.    }wh
17810 69 6c 65 28 20 7a 41 66 66 69 6e 69 74 79 5b 30  ile( zAffinity[0
17820 5d 20 29 3b 0a 20 20 7d 0a 0a 23 69 66 64 65 66  ] );.  }..#ifdef
17830 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4e   SQLITE_ENABLE_N
17840 55 4c 4c 5f 54 52 49 4d 0a 20 20 2f 2a 20 4e 55  ULL_TRIM.  /* NU
17850 4c 4c 73 20 63 61 6e 20 62 65 20 73 61 66 65 6c  LLs can be safel
17860 79 20 74 72 69 6d 6d 65 64 20 66 72 6f 6d 20 74  y trimmed from t
17870 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65  he end of the re
17880 63 6f 72 64 2c 20 61 73 20 6c 6f 6e 67 20 61 73  cord, as long as
17890 0a 20 20 2a 2a 20 61 73 20 74 68 65 20 73 63 68  .  ** as the sch
178a0 65 6d 61 20 66 6f 72 6d 61 74 20 69 73 20 32 20  ema format is 2 
178b0 6f 72 20 6d 6f 72 65 20 61 6e 64 20 6e 6f 6e 65  or more and none
178c0 20 6f 66 20 74 68 65 20 6f 6d 69 74 74 65 64 20   of the omitted 
178d0 63 6f 6c 75 6d 6e 73 0a 20 20 2a 2a 20 68 61 76  columns.  ** hav
178e0 65 20 61 20 6e 6f 6e 2d 4e 55 4c 4c 20 64 65 66  e a non-NULL def
178f0 61 75 6c 74 20 76 61 6c 75 65 2e 20 20 41 6c 73  ault value.  Als
17900 6f 2c 20 74 68 65 20 72 65 63 6f 72 64 20 6d 75  o, the record mu
17910 73 74 20 62 65 20 6c 65 66 74 20 77 69 74 68 0a  st be left with.
17920 20 20 2a 2a 20 61 74 20 6c 65 61 73 74 20 6f 6e    ** at least on
17930 65 20 66 69 65 6c 64 2e 20 20 49 66 20 50 35 3e  e field.  If P5>
17940 30 20 74 68 65 6e 20 69 74 20 77 69 6c 6c 20 62  0 then it will b
17950 65 20 6f 6e 65 20 6d 6f 72 65 20 74 68 61 6e 20  e one more than 
17960 74 68 65 0a 20 20 2a 2a 20 69 6e 64 65 78 20 6f  the.  ** index o
17970 66 20 74 68 65 20 72 69 67 68 74 2d 6d 6f 73 74  f the right-most
17980 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 61 20 6e   column with a n
17990 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61 75 6c 74 20  on-NULL default 
179a0 76 61 6c 75 65 20 2a 2f 0a 20 20 69 66 28 20 70  value */.  if( p
179b0 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 77 68  Op->p5 ){.    wh
179c0 69 6c 65 28 20 28 70 4c 61 73 74 2d 3e 66 6c 61  ile( (pLast->fla
179d0 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  gs & MEM_Null)!=
179e0 30 20 26 26 20 6e 46 69 65 6c 64 3e 70 4f 70 2d  0 && nField>pOp-
179f0 3e 70 35 20 29 7b 0a 20 20 20 20 20 20 70 4c 61  >p5 ){.      pLa
17a00 73 74 2d 2d 3b 0a 20 20 20 20 20 20 6e 46 69 65  st--;.      nFie
17a10 6c 64 2d 2d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  ld--;.    }.  }.
17a20 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 4c 6f 6f  #endif..  /* Loo
17a30 70 20 74 68 72 6f 75 67 68 20 74 68 65 20 65 6c  p through the el
17a40 65 6d 65 6e 74 73 20 74 68 61 74 20 77 69 6c 6c  ements that will
17a50 20 6d 61 6b 65 20 75 70 20 74 68 65 20 72 65 63   make up the rec
17a60 6f 72 64 20 74 6f 20 66 69 67 75 72 65 0a 20 20  ord to figure.  
17a70 2a 2a 20 6f 75 74 20 68 6f 77 20 6d 75 63 68 20  ** out how much 
17a80 73 70 61 63 65 20 69 73 20 72 65 71 75 69 72 65  space is require
17a90 64 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65  d for the new re
17aa0 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20 70 52 65  cord..  */.  pRe
17ab0 63 20 3d 20 70 4c 61 73 74 3b 0a 20 20 64 6f 7b  c = pLast;.  do{
17ac0 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
17ad0 49 73 56 61 6c 69 64 28 70 52 65 63 29 20 29 3b  IsValid(pRec) );
17ae0 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65  .    serial_type
17af0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65   = sqlite3VdbeSe
17b00 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66  rialType(pRec, f
17b10 69 6c 65 5f 66 6f 72 6d 61 74 2c 20 26 6c 65 6e  ile_format, &len
17b20 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d  );.    if( pRec-
17b30 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72  >flags & MEM_Zer
17b40 6f 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73  o ){.      if( s
17b50 65 72 69 61 6c 5f 74 79 70 65 3d 3d 30 20 29 7b  erial_type==0 ){
17b60 0a 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75  .        /* Valu
17b70 65 73 20 77 69 74 68 20 4d 45 4d 5f 4e 75 6c 6c  es with MEM_Null
17b80 20 61 6e 64 20 4d 45 4d 5f 5a 65 72 6f 20 61 72   and MEM_Zero ar
17b90 65 20 63 72 65 61 74 65 64 20 62 79 20 78 43 6f  e created by xCo
17ba0 6c 75 6d 6e 20 76 69 72 74 75 61 6c 0a 20 20 20  lumn virtual.   
17bb0 20 20 20 20 20 2a 2a 20 74 61 62 6c 65 20 6d 65       ** table me
17bc0 74 68 6f 64 73 20 74 68 61 74 20 6e 65 76 65 72  thods that never
17bd0 20 69 6e 76 6f 6b 65 20 73 71 6c 69 74 65 33 5f   invoke sqlite3_
17be0 72 65 73 75 6c 74 5f 78 78 78 78 78 28 29 20 77  result_xxxxx() w
17bf0 68 69 6c 65 0a 20 20 20 20 20 20 20 20 2a 2a 20  hile.        ** 
17c00 63 6f 6d 70 75 74 69 6e 67 20 61 6e 20 75 6e 63  computing an unc
17c10 68 61 6e 67 69 6e 67 20 63 6f 6c 75 6d 6e 20 76  hanging column v
17c20 61 6c 75 65 20 69 6e 20 61 6e 20 55 50 44 41 54  alue in an UPDAT
17c30 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20 20  E statement..   
17c40 20 20 20 20 20 2a 2a 20 47 69 76 65 20 73 75 63       ** Give suc
17c50 68 20 76 61 6c 75 65 73 20 61 20 73 70 65 63 69  h values a speci
17c60 61 6c 20 69 6e 74 65 72 6e 61 6c 2d 75 73 65 2d  al internal-use-
17c70 6f 6e 6c 79 20 73 65 72 69 61 6c 2d 74 79 70 65  only serial-type
17c80 20 6f 66 20 31 30 0a 20 20 20 20 20 20 20 20 2a   of 10.        *
17c90 2a 20 73 6f 20 74 68 61 74 20 74 68 65 79 20 63  * so that they c
17ca0 61 6e 20 62 65 20 70 61 73 73 65 64 20 74 68 72  an be passed thr
17cb0 6f 75 67 68 20 74 6f 20 78 55 70 64 61 74 65 20  ough to xUpdate 
17cc0 61 6e 64 20 68 61 76 65 0a 20 20 20 20 20 20 20  and have.       
17cd0 20 2a 2a 20 61 20 74 72 75 65 20 73 71 6c 69 74   ** a true sqlit
17ce0 65 33 5f 76 61 6c 75 65 5f 6e 6f 63 68 61 6e 67  e3_value_nochang
17cf0 65 28 29 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  e(). */.        
17d00 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d  assert( pOp->p5=
17d10 3d 4f 50 46 4c 41 47 5f 4e 4f 43 48 4e 47 5f 4d  =OPFLAG_NOCHNG_M
17d20 41 47 49 43 20 7c 7c 20 43 4f 52 52 55 50 54 5f  AGIC || CORRUPT_
17d30 44 42 20 29 3b 0a 20 20 20 20 20 20 20 20 73 65  DB );.        se
17d40 72 69 61 6c 5f 74 79 70 65 20 3d 20 31 30 3b 0a  rial_type = 10;.
17d50 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
17d60 6e 44 61 74 61 20 29 7b 0a 20 20 20 20 20 20 20  nData ){.       
17d70 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
17d80 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 52  MemExpandBlob(pR
17d90 65 63 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ec) ) goto no_me
17da0 6d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  m;.      }else{.
17db0 20 20 20 20 20 20 20 20 6e 5a 65 72 6f 20 2b 3d          nZero +=
17dc0 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a   pRec->u.nZero;.
17dd0 20 20 20 20 20 20 20 20 6c 65 6e 20 2d 3d 20 70          len -= p
17de0 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20  Rec->u.nZero;.  
17df0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
17e00 6e 44 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20  nData += len;.  
17e10 20 20 74 65 73 74 63 61 73 65 28 20 73 65 72 69    testcase( seri
17e20 61 6c 5f 74 79 70 65 3d 3d 31 32 37 20 29 3b 0a  al_type==127 );.
17e30 20 20 20 20 74 65 73 74 63 61 73 65 28 20 73 65      testcase( se
17e40 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32 38 20 29  rial_type==128 )
17e50 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 73 65  ;.    nHdr += se
17e60 72 69 61 6c 5f 74 79 70 65 3c 3d 31 32 37 20 3f  rial_type<=127 ?
17e70 20 31 20 3a 20 73 71 6c 69 74 65 33 56 61 72 69   1 : sqlite3Vari
17e80 6e 74 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70  ntLen(serial_typ
17e90 65 29 3b 0a 20 20 20 20 70 52 65 63 2d 3e 75 54  e);.    pRec->uT
17ea0 65 6d 70 20 3d 20 73 65 72 69 61 6c 5f 74 79 70  emp = serial_typ
17eb0 65 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63 3d  e;.    if( pRec=
17ec0 3d 70 44 61 74 61 30 20 29 20 62 72 65 61 6b 3b  =pData0 ) break;
17ed0 0a 20 20 20 20 70 52 65 63 2d 2d 3b 0a 20 20 7d  .    pRec--;.  }
17ee0 77 68 69 6c 65 28 31 29 3b 0a 0a 20 20 2f 2a 20  while(1);..  /* 
17ef0 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32  EVIDENCE-OF: R-2
17f00 32 35 36 34 2d 31 31 36 34 37 20 54 68 65 20 68  2564-11647 The h
17f10 65 61 64 65 72 20 62 65 67 69 6e 73 20 77 69 74  eader begins wit
17f20 68 20 61 20 73 69 6e 67 6c 65 20 76 61 72 69 6e  h a single varin
17f30 74 0a 20 20 2a 2a 20 77 68 69 63 68 20 64 65 74  t.  ** which det
17f40 65 72 6d 69 6e 65 73 20 74 68 65 20 74 6f 74 61  ermines the tota
17f50 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  l number of byte
17f60 73 20 69 6e 20 74 68 65 20 68 65 61 64 65 72 2e  s in the header.
17f70 20 54 68 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a   The varint.  **
17f80 20 76 61 6c 75 65 20 69 73 20 74 68 65 20 73 69   value is the si
17f90 7a 65 20 6f 66 20 74 68 65 20 68 65 61 64 65 72  ze of the header
17fa0 20 69 6e 20 62 79 74 65 73 20 69 6e 63 6c 75 64   in bytes includ
17fb0 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76 61 72  ing the size var
17fc0 69 6e 74 0a 20 20 2a 2a 20 69 74 73 65 6c 66 2e  int.  ** itself.
17fd0 20 2a 2f 0a 20 20 74 65 73 74 63 61 73 65 28 20   */.  testcase( 
17fe0 6e 48 64 72 3d 3d 31 32 36 20 29 3b 0a 20 20 74  nHdr==126 );.  t
17ff0 65 73 74 63 61 73 65 28 20 6e 48 64 72 3d 3d 31  estcase( nHdr==1
18000 32 37 20 29 3b 0a 20 20 69 66 28 20 6e 48 64 72  27 );.  if( nHdr
18010 3c 3d 31 32 36 20 29 7b 0a 20 20 20 20 2f 2a 20  <=126 ){.    /* 
18020 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20  The common case 
18030 2a 2f 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 31  */.    nHdr += 1
18040 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  ;.  }else{.    /
18050 2a 20 52 61 72 65 20 63 61 73 65 20 6f 66 20 61  * Rare case of a
18060 20 72 65 61 6c 6c 79 20 6c 61 72 67 65 20 68 65   really large he
18070 61 64 65 72 20 2a 2f 0a 20 20 20 20 6e 56 61 72  ader */.    nVar
18080 69 6e 74 20 3d 20 73 71 6c 69 74 65 33 56 61 72  int = sqlite3Var
18090 69 6e 74 4c 65 6e 28 6e 48 64 72 29 3b 0a 20 20  intLen(nHdr);.  
180a0 20 20 6e 48 64 72 20 2b 3d 20 6e 56 61 72 69 6e    nHdr += nVarin
180b0 74 3b 0a 20 20 20 20 69 66 28 20 6e 56 61 72 69  t;.    if( nVari
180c0 6e 74 3c 73 71 6c 69 74 65 33 56 61 72 69 6e 74  nt<sqlite3Varint
180d0 4c 65 6e 28 6e 48 64 72 29 20 29 20 6e 48 64 72  Len(nHdr) ) nHdr
180e0 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79 74 65 20  ++;.  }.  nByte 
180f0 3d 20 6e 48 64 72 2b 6e 44 61 74 61 3b 0a 0a 20  = nHdr+nData;.. 
18100 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68   /* Make sure th
18110 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65  e output registe
18120 72 20 68 61 73 20 61 20 62 75 66 66 65 72 20 6c  r has a buffer l
18130 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20 73  arge enough to s
18140 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e  tore .  ** the n
18150 65 77 20 72 65 63 6f 72 64 2e 20 54 68 65 20 6f  ew record. The o
18160 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20 28  utput register (
18170 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20  pOp->p3) is not 
18180 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20  allowed to.  ** 
18190 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e  be one of the in
181a0 70 75 74 20 72 65 67 69 73 74 65 72 73 20 28 62  put registers (b
181b0 65 63 61 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f  ecause the follo
181c0 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a  wing call to.  *
181d0 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  * sqlite3VdbeMem
181e0 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28 29  ClearAndResize()
181f0 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72 20 74   could clobber t
18200 68 65 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20  he value before 
18210 69 74 20 69 73 20 75 73 65 64 29 2e 0a 20 20 2a  it is used)..  *
18220 2f 0a 20 20 69 66 28 20 6e 42 79 74 65 2b 6e 5a  /.  if( nByte+nZ
18230 65 72 6f 3c 3d 70 4f 75 74 2d 3e 73 7a 4d 61 6c  ero<=pOut->szMal
18240 6c 6f 63 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  loc ){.    /* Th
18250 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65  e output registe
18260 72 20 69 73 20 61 6c 72 65 61 64 79 20 6c 61 72  r is already lar
18270 67 65 20 65 6e 6f 75 67 68 20 74 6f 20 68 6f 6c  ge enough to hol
18280 64 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20  d the record..  
18290 20 20 2a 2a 20 4e 6f 20 65 72 72 6f 72 20 63 68    ** No error ch
182a0 65 63 6b 73 20 6f 72 20 62 75 66 66 65 72 20 65  ecks or buffer e
182b0 6e 6c 61 72 67 65 6d 65 6e 74 20 69 73 20 72 65  nlargement is re
182c0 71 75 69 72 65 64 20 2a 2f 0a 20 20 20 20 70 4f  quired */.    pO
182d0 75 74 2d 3e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 4d  ut->z = pOut->zM
182e0 61 6c 6c 6f 63 3b 0a 20 20 7d 65 6c 73 65 7b 0a  alloc;.  }else{.
182f0 20 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 6d      /* Need to m
18300 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
18310 65 20 6f 75 74 70 75 74 20 69 73 20 6e 6f 74 20  e output is not 
18320 74 6f 6f 20 62 69 67 20 61 6e 64 20 74 68 65 6e  too big and then
18330 20 65 6e 6c 61 72 67 65 0a 20 20 20 20 2a 2a 20   enlarge.    ** 
18340 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73  the output regis
18350 74 65 72 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  ter to hold the 
18360 66 75 6c 6c 20 72 65 73 75 6c 74 20 2a 2f 0a 20  full result */. 
18370 20 20 20 69 66 28 20 6e 42 79 74 65 2b 6e 5a 65     if( nByte+nZe
18380 72 6f 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  ro>db->aLimit[SQ
18390 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
183a0 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  H] ){.      goto
183b0 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a   too_big;.    }.
183c0 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56      if( sqlite3V
183d0 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65  dbeMemClearAndRe
183e0 73 69 7a 65 28 70 4f 75 74 2c 20 28 69 6e 74 29  size(pOut, (int)
183f0 6e 42 79 74 65 29 20 29 7b 0a 20 20 20 20 20 20  nByte) ){.      
18400 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
18410 20 7d 0a 20 20 7d 0a 20 20 7a 4e 65 77 52 65 63   }.  }.  zNewRec
18420 6f 72 64 20 3d 20 28 75 38 20 2a 29 70 4f 75 74  ord = (u8 *)pOut
18430 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57 72 69 74 65  ->z;..  /* Write
18440 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
18450 20 69 20 3d 20 70 75 74 56 61 72 69 6e 74 33 32   i = putVarint32
18460 28 7a 4e 65 77 52 65 63 6f 72 64 2c 20 6e 48 64  (zNewRecord, nHd
18470 72 29 3b 0a 20 20 6a 20 3d 20 6e 48 64 72 3b 0a  r);.  j = nHdr;.
18480 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61 30    assert( pData0
18490 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 70 52 65  <=pLast );.  pRe
184a0 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20 64 6f  c = pData0;.  do
184b0 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70  {.    serial_typ
184c0 65 20 3d 20 70 52 65 63 2d 3e 75 54 65 6d 70 3b  e = pRec->uTemp;
184d0 0a 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45  .    /* EVIDENCE
184e0 2d 4f 46 3a 20 52 2d 30 36 35 32 39 2d 34 37 33  -OF: R-06529-473
184f0 36 32 20 46 6f 6c 6c 6f 77 69 6e 67 20 74 68 65  62 Following the
18500 20 73 69 7a 65 20 76 61 72 69 6e 74 20 61 72 65   size varint are
18510 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a 20 20 20   one or more.   
18520 20 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 76   ** additional v
18530 61 72 69 6e 74 73 2c 20 6f 6e 65 20 70 65 72 20  arints, one per 
18540 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 20 20 69  column. */.    i
18550 20 2b 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28   += putVarint32(
18560 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d 2c 20  &zNewRecord[i], 
18570 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 20 20  serial_type);   
18580 20 20 20 20 20 20 20 20 20 2f 2a 20 73 65 72 69           /* seri
18590 61 6c 20 74 79 70 65 20 2a 2f 0a 20 20 20 20 2f  al type */.    /
185a0 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  * EVIDENCE-OF: R
185b0 2d 36 34 35 33 36 2d 35 31 37 32 38 20 54 68 65  -64536-51728 The
185c0 20 76 61 6c 75 65 73 20 66 6f 72 20 65 61 63 68   values for each
185d0 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 72   column in the r
185e0 65 63 6f 72 64 0a 20 20 20 20 2a 2a 20 69 6d 6d  ecord.    ** imm
185f0 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20  ediately follow 
18600 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20  the header. */. 
18610 20 20 20 6a 20 2b 3d 20 73 71 6c 69 74 65 33 56     j += sqlite3V
18620 64 62 65 53 65 72 69 61 6c 50 75 74 28 26 7a 4e  dbeSerialPut(&zN
18630 65 77 52 65 63 6f 72 64 5b 6a 5d 2c 20 70 52 65  ewRecord[j], pRe
18640 63 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b  c, serial_type);
18650 20 2f 2a 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20   /* content */. 
18660 20 7d 77 68 69 6c 65 28 20 28 2b 2b 70 52 65 63   }while( (++pRec
18670 29 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 61 73  )<=pLast );.  as
18680 73 65 72 74 28 20 69 3d 3d 6e 48 64 72 20 29 3b  sert( i==nHdr );
18690 0a 20 20 61 73 73 65 72 74 28 20 6a 3d 3d 6e 42  .  assert( j==nB
186a0 79 74 65 20 29 3b 0a 0a 20 20 61 73 73 65 72 74  yte );..  assert
186b0 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
186c0 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
186d0 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
186e0 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20   );.  pOut->n = 
186f0 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f  (int)nByte;.  pO
18700 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
18710 42 6c 6f 62 3b 0a 20 20 69 66 28 20 6e 5a 65 72  Blob;.  if( nZer
18720 6f 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  o ){.    pOut->u
18730 2e 6e 5a 65 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a  .nZero = nZero;.
18740 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
18750 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d  |= MEM_Zero;.  }
18760 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
18770 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29  E(pOp->p3, pOut)
18780 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
18790 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
187a0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
187b0 63 6f 64 65 3a 20 43 6f 75 6e 74 20 50 31 20 50  code: Count P1 P
187c0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
187d0 73 69 73 3a 20 72 5b 50 32 5d 3d 63 6f 75 6e 74  sis: r[P2]=count
187e0 28 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74  ().**.** Store t
187f0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74  he number of ent
18800 72 69 65 73 20 28 61 6e 20 69 6e 74 65 67 65 72  ries (an integer
18810 20 76 61 6c 75 65 29 20 69 6e 20 74 68 65 20 74   value) in the t
18820 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 0a 2a  able or index .*
18830 2a 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73  * opened by curs
18840 6f 72 20 50 31 20 69 6e 20 72 65 67 69 73 74 65  or P1 in registe
18850 72 20 50 32 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  r P2.*/.#ifndef 
18860 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45  SQLITE_OMIT_BTRE
18870 45 43 4f 55 4e 54 0a 63 61 73 65 20 4f 50 5f 43  ECOUNT.case OP_C
18880 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ount: {         
18890 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 36 34  /* out2 */.  i64
188a0 20 6e 45 6e 74 72 79 3b 0a 20 20 42 74 43 75 72   nEntry;.  BtCur
188b0 73 6f 72 20 2a 70 43 72 73 72 3b 0a 0a 20 20 61  sor *pCrsr;..  a
188c0 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b  ssert( p->apCsr[
188d0 70 4f 70 2d 3e 70 31 5d 2d 3e 65 43 75 72 54 79  pOp->p1]->eCurTy
188e0 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
188f0 45 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  E );.  pCrsr = p
18900 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
18910 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20  ->uc.pCursor;.  
18920 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b  assert( pCrsr );
18930 0a 20 20 6e 45 6e 74 72 79 20 3d 20 30 3b 20 20  .  nEntry = 0;  
18940 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
18950 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c  Only used to sil
18960 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20  ence a warning. 
18970 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
18980 33 42 74 72 65 65 43 6f 75 6e 74 28 70 43 72 73  3BtreeCount(pCrs
18990 72 2c 20 26 6e 45 6e 74 72 79 29 3b 0a 20 20 69  r, &nEntry);.  i
189a0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
189b0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
189c0 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
189d0 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
189e0 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
189f0 6e 45 6e 74 72 79 3b 0a 20 20 62 72 65 61 6b 3b  nEntry;.  break;
18a00 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70  .}.#endif../* Op
18a10 63 6f 64 65 3a 20 53 61 76 65 70 6f 69 6e 74 20  code: Savepoint 
18a20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
18a30 2a 20 4f 70 65 6e 2c 20 72 65 6c 65 61 73 65 20  * Open, release 
18a40 6f 72 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20  or rollback the 
18a50 73 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 64 20  savepoint named 
18a60 62 79 20 70 61 72 61 6d 65 74 65 72 20 50 34 2c  by parameter P4,
18a70 20 64 65 70 65 6e 64 69 6e 67 0a 2a 2a 20 6f 6e   depending.** on
18a80 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50 31   the value of P1
18a90 2e 20 54 6f 20 6f 70 65 6e 20 61 20 6e 65 77 20  . To open a new 
18aa0 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 30  savepoint, P1==0
18ab0 2e 20 54 6f 20 72 65 6c 65 61 73 65 20 28 63 6f  . To release (co
18ac0 6d 6d 69 74 29 20 61 6e 0a 2a 2a 20 65 78 69 73  mmit) an.** exis
18ad0 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 2c 20  ting savepoint, 
18ae0 50 31 3d 3d 31 2c 20 6f 72 20 74 6f 20 72 6f 6c  P1==1, or to rol
18af0 6c 62 61 63 6b 20 61 6e 20 65 78 69 73 74 69 6e  lback an existin
18b00 67 20 73 61 76 65 70 6f 69 6e 74 20 50 31 3d 3d  g savepoint P1==
18b10 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 61  2..*/.case OP_Sa
18b20 76 65 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74  vepoint: {.  int
18b30 20 70 31 3b 20 20 20 20 20 20 20 20 20 20 20 20   p1;            
18b40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
18b50 56 61 6c 75 65 20 6f 66 20 50 31 20 6f 70 65 72  Value of P1 oper
18b60 61 6e 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  and */.  char *z
18b70 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
18b80 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
18b90 20 6f 66 20 73 61 76 65 70 6f 69 6e 74 20 2a 2f   of savepoint */
18ba0 0a 20 20 69 6e 74 20 6e 4e 61 6d 65 3b 0a 20 20  .  int nName;.  
18bb0 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 77 3b  Savepoint *pNew;
18bc0 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 53  .  Savepoint *pS
18bd0 61 76 65 70 6f 69 6e 74 3b 0a 20 20 53 61 76 65  avepoint;.  Save
18be0 70 6f 69 6e 74 20 2a 70 54 6d 70 3b 0a 20 20 69  point *pTmp;.  i
18bf0 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 0a 20  nt iSavepoint;. 
18c00 20 69 6e 74 20 69 69 3b 0a 0a 20 20 70 31 20 3d   int ii;..  p1 =
18c10 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 4e 61 6d   pOp->p1;.  zNam
18c20 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a  e = pOp->p4.z;..
18c30 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
18c40 20 74 68 65 20 70 31 20 70 61 72 61 6d 65 74 65   the p1 paramete
18c50 72 20 69 73 20 76 61 6c 69 64 2e 20 41 6c 73 6f  r is valid. Also
18c60 20 74 68 61 74 20 69 66 20 74 68 65 72 65 20 69   that if there i
18c70 73 20 6e 6f 20 6f 70 65 6e 0a 20 20 2a 2a 20 74  s no open.  ** t
18c80 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e  ransaction, then
18c90 20 74 68 65 72 65 20 63 61 6e 6e 6f 74 20 62 65   there cannot be
18ca0 20 61 6e 79 20 73 61 76 65 70 6f 69 6e 74 73 2e   any savepoints.
18cb0 20 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28   .  */.  assert(
18cc0 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3d   db->pSavepoint=
18cd0 3d 30 20 7c 7c 20 64 62 2d 3e 61 75 74 6f 43 6f  =0 || db->autoCo
18ce0 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73  mmit==0 );.  ass
18cf0 65 72 74 28 20 70 31 3d 3d 53 41 56 45 50 4f 49  ert( p1==SAVEPOI
18d00 4e 54 5f 42 45 47 49 4e 7c 7c 70 31 3d 3d 53 41  NT_BEGIN||p1==SA
18d10 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 7c  VEPOINT_RELEASE|
18d20 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52  |p1==SAVEPOINT_R
18d30 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20 20 61 73 73  OLLBACK );.  ass
18d40 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f  ert( db->pSavepo
18d50 69 6e 74 20 7c 7c 20 64 62 2d 3e 69 73 54 72 61  int || db->isTra
18d60 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
18d70 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  t==0 );.  assert
18d80 28 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74  ( checkSavepoint
18d90 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a 20 20 61  Count(db) );.  a
18da0 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
18db0 64 65 72 20 29 3b 0a 0a 20 20 69 66 28 20 70 31  der );..  if( p1
18dc0 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49  ==SAVEPOINT_BEGI
18dd0 4e 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d  N ){.    if( db-
18de0 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20 29 7b  >nVdbeWrite>0 ){
18df0 0a 20 20 20 20 20 20 2f 2a 20 41 20 6e 65 77 20  .      /* A new 
18e00 73 61 76 65 70 6f 69 6e 74 20 63 61 6e 6e 6f 74  savepoint cannot
18e10 20 62 65 20 63 72 65 61 74 65 64 20 69 66 20 74   be created if t
18e20 68 65 72 65 20 61 72 65 20 61 63 74 69 76 65 20  here are active 
18e30 77 72 69 74 65 20 0a 20 20 20 20 20 20 2a 2a 20  write .      ** 
18e40 73 74 61 74 65 6d 65 6e 74 73 20 28 69 2e 65 2e  statements (i.e.
18e50 20 6f 70 65 6e 20 72 65 61 64 2f 77 72 69 74 65   open read/write
18e60 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 62 6c 6f   incremental blo
18e70 62 20 68 61 6e 64 6c 65 73 29 2e 0a 20 20 20 20  b handles)..    
18e80 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74    */.      sqlit
18e90 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22  e3VdbeError(p, "
18ea0 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 73 61 76 65  cannot open save
18eb0 70 6f 69 6e 74 20 2d 20 53 51 4c 20 73 74 61 74  point - SQL stat
18ec0 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65  ements in progre
18ed0 73 73 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  ss");.      rc =
18ee0 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
18ef0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e    }else{.      n
18f00 4e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 53 74  Name = sqlite3St
18f10 72 6c 65 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a 0a  rlen30(zName);..
18f20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
18f30 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
18f40 0a 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 63  .      /* This c
18f50 61 6c 6c 20 69 73 20 4f 6b 20 65 76 65 6e 20 69  all is Ok even i
18f60 66 20 74 68 69 73 20 73 61 76 65 70 6f 69 6e 74  f this savepoint
18f70 20 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20 74   is actually a t
18f80 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20 20 20 20  ransaction.     
18f90 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 20 28 61   ** savepoint (a
18fa0 6e 64 20 74 68 65 72 65 66 6f 72 65 20 73 68 6f  nd therefore sho
18fb0 75 6c 64 20 6e 6f 74 20 70 72 6f 6d 70 74 20 78  uld not prompt x
18fc0 53 61 76 65 70 6f 69 6e 74 28 29 29 20 63 61 6c  Savepoint()) cal
18fd0 6c 62 61 63 6b 73 2e 0a 20 20 20 20 20 20 2a 2a  lbacks..      **
18fe0 20 49 66 20 74 68 69 73 20 69 73 20 61 20 74 72   If this is a tr
18ff0 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f  ansaction savepo
19000 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 6e 65 64  int being opened
19010 2c 20 69 74 20 69 73 20 67 75 61 72 61 6e 74 65  , it is guarante
19020 65 64 0a 20 20 20 20 20 20 2a 2a 20 74 68 61 74  ed.      ** that
19030 20 74 68 65 20 64 62 2d 3e 61 56 54 72 61 6e 73   the db->aVTrans
19040 5b 5d 20 61 72 72 61 79 20 69 73 20 65 6d 70 74  [] array is empt
19050 79 2e 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  y.  */.      ass
19060 65 72 74 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d  ert( db->autoCom
19070 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56  mit==0 || db->nV
19080 54 72 61 6e 73 3d 3d 30 20 29 3b 0a 20 20 20 20  Trans==0 );.    
19090 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
190a0 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20  abSavepoint(db, 
190b0 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c  SAVEPOINT_BEGIN,
190c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
190d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190e0 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b   db->nStatement+
190f0 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 29 3b  db->nSavepoint);
19100 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
19110 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
19120 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
19130 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20  or;.#endif..    
19140 20 20 2f 2a 20 43 72 65 61 74 65 20 61 20 6e 65    /* Create a ne
19150 77 20 73 61 76 65 70 6f 69 6e 74 20 73 74 72 75  w savepoint stru
19160 63 74 75 72 65 2e 20 2a 2f 0a 20 20 20 20 20 20  cture. */.      
19170 70 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 44 62  pNew = sqlite3Db
19180 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 64 62 2c 20  MallocRawNN(db, 
19190 73 69 7a 65 6f 66 28 53 61 76 65 70 6f 69 6e 74  sizeof(Savepoint
191a0 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20  )+nName+1);.    
191b0 20 20 69 66 28 20 70 4e 65 77 20 29 7b 0a 20 20    if( pNew ){.  
191c0 20 20 20 20 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d        pNew->zNam
191d0 65 20 3d 20 28 63 68 61 72 20 2a 29 26 70 4e 65  e = (char *)&pNe
191e0 77 5b 31 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65  w[1];.        me
191f0 6d 63 70 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65  mcpy(pNew->zName
19200 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31  , zName, nName+1
19210 29 3b 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20  );.    .        
19220 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6e  /* If there is n
19230 6f 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69  o open transacti
19240 6f 6e 2c 20 74 68 65 6e 20 6d 61 72 6b 20 74 68  on, then mark th
19250 69 73 20 61 73 20 61 20 73 70 65 63 69 61 6c 0a  is as a special.
19260 20 20 20 20 20 20 20 20 2a 2a 20 22 74 72 61 6e          ** "tran
19270 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e  saction savepoin
19280 74 22 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  t". */.        i
19290 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  f( db->autoCommi
192a0 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64  t ){.          d
192b0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
192c0 30 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  0;.          db-
192d0 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
192e0 76 65 70 6f 69 6e 74 20 3d 20 31 3b 0a 20 20 20  vepoint = 1;.   
192f0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
19300 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70        db->nSavep
19310 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20  oint++;.        
19320 7d 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  }..        /* Li
19330 6e 6b 20 74 68 65 20 6e 65 77 20 73 61 76 65 70  nk the new savep
19340 6f 69 6e 74 20 69 6e 74 6f 20 74 68 65 20 64 61  oint into the da
19350 74 61 62 61 73 65 20 68 61 6e 64 6c 65 27 73 20  tabase handle's 
19360 6c 69 73 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20  list. */.       
19370 20 70 4e 65 77 2d 3e 70 4e 65 78 74 20 3d 20 64   pNew->pNext = d
19380 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20  b->pSavepoint;. 
19390 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65         db->pSave
193a0 70 6f 69 6e 74 20 3d 20 70 4e 65 77 3b 0a 20 20  point = pNew;.  
193b0 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66        pNew->nDef
193c0 65 72 72 65 64 43 6f 6e 73 20 3d 20 64 62 2d 3e  erredCons = db->
193d0 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20  nDeferredCons;. 
193e0 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65         pNew->nDe
193f0 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20  ferredImmCons = 
19400 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
19410 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Cons;.      }.  
19420 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
19430 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b   iSavepoint = 0;
19440 0a 0a 20 20 20 20 2f 2a 20 46 69 6e 64 20 74 68  ..    /* Find th
19450 65 20 6e 61 6d 65 64 20 73 61 76 65 70 6f 69 6e  e named savepoin
19460 74 2e 20 49 66 20 74 68 65 72 65 20 69 73 20 6e  t. If there is n
19470 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74  o such savepoint
19480 2c 20 74 68 65 6e 20 61 6e 0a 20 20 20 20 2a 2a  , then an.    **
19490 20 61 6e 20 65 72 72 6f 72 20 69 73 20 72 65 74   an error is ret
194a0 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73 65  urned to the use
194b0 72 2e 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28 0a  r.  */.    for(.
194c0 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74        pSavepoint
194d0 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e   = db->pSavepoin
194e0 74 3b 20 0a 20 20 20 20 20 20 70 53 61 76 65 70  t; .      pSavep
194f0 6f 69 6e 74 20 26 26 20 73 71 6c 69 74 65 33 53  oint && sqlite3S
19500 74 72 49 43 6d 70 28 70 53 61 76 65 70 6f 69 6e  trICmp(pSavepoin
19510 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 29  t->zName, zName)
19520 3b 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69  ;.      pSavepoi
19530 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d  nt = pSavepoint-
19540 3e 70 4e 65 78 74 0a 20 20 20 20 29 7b 0a 20 20  >pNext.    ){.  
19550 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 2b 2b      iSavepoint++
19560 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
19570 21 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20  !pSavepoint ){. 
19580 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
19590 45 72 72 6f 72 28 70 2c 20 22 6e 6f 20 73 75 63  Error(p, "no suc
195a0 68 20 73 61 76 65 70 6f 69 6e 74 3a 20 25 73 22  h savepoint: %s"
195b0 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  , zName);.      
195c0 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
195d0 52 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  R;.    }else if(
195e0 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e   db->nVdbeWrite>
195f0 30 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49  0 && p1==SAVEPOI
19600 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20  NT_RELEASE ){.  
19610 20 20 20 20 2f 2a 20 49 74 20 69 73 20 6e 6f 74      /* It is not
19620 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 72 65 6c   possible to rel
19630 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 20  ease (commit) a 
19640 73 61 76 65 70 6f 69 6e 74 20 69 66 20 74 68 65  savepoint if the
19650 72 65 20 61 72 65 20 0a 20 20 20 20 20 20 2a 2a  re are .      **
19660 20 61 63 74 69 76 65 20 77 72 69 74 65 20 73 74   active write st
19670 61 74 65 6d 65 6e 74 73 2e 0a 20 20 20 20 20 20  atements..      
19680 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  */.      sqlite3
19690 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 63 61  VdbeError(p, "ca
196a0 6e 6e 6f 74 20 72 65 6c 65 61 73 65 20 73 61 76  nnot release sav
196b0 65 70 6f 69 6e 74 20 2d 20 22 0a 20 20 20 20 20  epoint - ".     
196c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196d0 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d       "SQL statem
196e0 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73  ents in progress
196f0 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53  ");.      rc = S
19700 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
19710 7d 65 6c 73 65 7b 0a 0a 20 20 20 20 20 20 2f 2a  }else{..      /*
19720 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68   Determine wheth
19730 65 72 20 6f 72 20 6e 6f 74 20 74 68 69 73 20 69  er or not this i
19740 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  s a transaction 
19750 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 73 6f  savepoint. If so
19760 2c 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 74  ,.      ** and t
19770 68 69 73 20 69 73 20 61 20 52 45 4c 45 41 53 45  his is a RELEASE
19780 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e 20 74   command, then t
19790 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73  he current trans
197a0 61 63 74 69 6f 6e 20 0a 20 20 20 20 20 20 2a 2a  action .      **
197b0 20 69 73 20 63 6f 6d 6d 69 74 74 65 64 2e 20 0a   is committed. .
197c0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
197d0 6e 74 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  nt isTransaction
197e0 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70   = pSavepoint->p
197f0 4e 65 78 74 3d 3d 30 20 26 26 20 64 62 2d 3e 69  Next==0 && db->i
19800 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
19810 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 69 66 28  point;.      if(
19820 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 26   isTransaction &
19830 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  & p1==SAVEPOINT_
19840 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20  RELEASE ){.     
19850 20 20 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c     if( (rc = sql
19860 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28  ite3VdbeCheckFk(
19870 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f  p, 1))!=SQLITE_O
19880 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67  K ){.          g
19890 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
198a0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
198b0 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
198c0 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69  t = 1;.        i
198d0 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 48 61  f( sqlite3VdbeHa
198e0 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55  lt(p)==SQLITE_BU
198f0 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  SY ){.          
19900 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f  p->pc = (int)(pO
19910 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20 20  p - aOp);.      
19920 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
19930 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  it = 0;.        
19940 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53    p->rc = rc = S
19950 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
19960 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
19970 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20  return;.        
19980 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73  }.        db->is
19990 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
199a0 6f 69 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20  oint = 0;.      
199b0 20 20 72 63 20 3d 20 70 2d 3e 72 63 3b 0a 20 20    rc = p->rc;.  
199c0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
199d0 20 20 20 69 6e 74 20 69 73 53 63 68 65 6d 61 43     int isSchemaC
199e0 68 61 6e 67 65 3b 0a 20 20 20 20 20 20 20 20 69  hange;.        i
199f0 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e  Savepoint = db->
19a00 6e 53 61 76 65 70 6f 69 6e 74 20 2d 20 69 53 61  nSavepoint - iSa
19a10 76 65 70 6f 69 6e 74 20 2d 20 31 3b 0a 20 20 20  vepoint - 1;.   
19a20 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56       if( p1==SAV
19a30 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
19a40 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 73 53  ){.          isS
19a50 63 68 65 6d 61 43 68 61 6e 67 65 20 3d 20 28 64  chemaChange = (d
19a60 62 2d 3e 6d 44 62 46 6c 61 67 73 20 26 20 44 42  b->mDbFlags & DB
19a70 46 4c 41 47 5f 53 63 68 65 6d 61 43 68 61 6e 67  FLAG_SchemaChang
19a80 65 29 21 3d 30 3b 0a 20 20 20 20 20 20 20 20 20  e)!=0;.         
19a90 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62   for(ii=0; ii<db
19aa0 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20  ->nDb; ii++){.  
19ab0 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73            rc = s
19ac0 71 6c 69 74 65 33 42 74 72 65 65 54 72 69 70 41  qlite3BtreeTripA
19ad0 6c 6c 43 75 72 73 6f 72 73 28 64 62 2d 3e 61 44  llCursors(db->aD
19ae0 62 5b 69 69 5d 2e 70 42 74 2c 0a 20 20 20 20 20  b[ii].pBt,.     
19af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b10 20 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52    SQLITE_ABORT_R
19b20 4f 4c 4c 42 41 43 4b 2c 0a 20 20 20 20 20 20 20  OLLBACK,.       
19b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b50 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 3d 3d  isSchemaChange==
19b60 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  0);.            
19b70 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
19b80 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
19b90 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
19ba0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
19bb0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
19bc0 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65    isSchemaChange
19bd0 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a   = 0;.        }.
19be0 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30          for(ii=0
19bf0 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69  ; ii<db->nDb; ii
19c00 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72  ++){.          r
19c10 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
19c20 53 61 76 65 70 6f 69 6e 74 28 64 62 2d 3e 61 44  Savepoint(db->aD
19c30 62 5b 69 69 5d 2e 70 42 74 2c 20 70 31 2c 20 69  b[ii].pBt, p1, i
19c40 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20  Savepoint);.    
19c50 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
19c60 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
19c70 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
19c80 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
19c90 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
19ca0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
19cb0 28 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65  ( isSchemaChange
19cc0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71   ){.          sq
19cd0 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
19ce0 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62  redStatements(db
19cf0 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 0);.          
19d00 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53  sqlite3ResetAllS
19d10 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69  chemasOfConnecti
19d20 6f 6e 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20  on(db);.        
19d30 20 20 64 62 2d 3e 6d 44 62 46 6c 61 67 73 20 7c    db->mDbFlags |
19d40 3d 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 43  = DBFLAG_SchemaC
19d50 68 61 6e 67 65 3b 0a 20 20 20 20 20 20 20 20 7d  hange;.        }
19d60 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20  .      }.  .    
19d70 20 20 2f 2a 20 52 65 67 61 72 64 6c 65 73 73 20    /* Regardless 
19d80 6f 66 20 77 68 65 74 68 65 72 20 74 68 69 73 20  of whether this 
19d90 69 73 20 61 20 52 45 4c 45 41 53 45 20 6f 72 20  is a RELEASE or 
19da0 52 4f 4c 4c 42 41 43 4b 2c 20 64 65 73 74 72 6f  ROLLBACK, destro
19db0 79 20 61 6c 6c 20 0a 20 20 20 20 20 20 2a 2a 20  y all .      ** 
19dc0 73 61 76 65 70 6f 69 6e 74 73 20 6e 65 73 74 65  savepoints neste
19dd0 64 20 69 6e 73 69 64 65 20 6f 66 20 74 68 65 20  d inside of the 
19de0 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20  savepoint being 
19df0 6f 70 65 72 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a  operated on. */.
19e00 20 20 20 20 20 20 77 68 69 6c 65 28 20 64 62 2d        while( db-
19e10 3e 70 53 61 76 65 70 6f 69 6e 74 21 3d 70 53 61  >pSavepoint!=pSa
19e20 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20  vepoint ){.     
19e30 20 20 20 70 54 6d 70 20 3d 20 64 62 2d 3e 70 53     pTmp = db->pS
19e40 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20  avepoint;.      
19e50 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74    db->pSavepoint
19e60 20 3d 20 70 54 6d 70 2d 3e 70 4e 65 78 74 3b 0a   = pTmp->pNext;.
19e70 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44          sqlite3D
19e80 62 46 72 65 65 28 64 62 2c 20 70 54 6d 70 29 3b  bFree(db, pTmp);
19e90 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61  .        db->nSa
19ea0 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20  vepoint--;.     
19eb0 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20   }..      /* If 
19ec0 69 74 20 69 73 20 61 20 52 45 4c 45 41 53 45 2c  it is a RELEASE,
19ed0 20 74 68 65 6e 20 64 65 73 74 72 6f 79 20 74 68   then destroy th
19ee0 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e  e savepoint bein
19ef0 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 0a 20  g operated on . 
19f00 20 20 20 20 20 2a 2a 20 74 6f 6f 2e 20 49 66 20       ** too. If 
19f10 69 74 20 69 73 20 61 20 52 4f 4c 4c 42 41 43 4b  it is a ROLLBACK
19f20 20 54 4f 2c 20 74 68 65 6e 20 73 65 74 20 74 68   TO, then set th
19f30 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 65 66 65  e number of defe
19f40 72 72 65 64 20 0a 20 20 20 20 20 20 2a 2a 20 63  rred .      ** c
19f50 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
19f60 69 6f 6e 73 20 70 72 65 73 65 6e 74 20 69 6e 20  ions present in 
19f70 74 68 65 20 64 61 74 61 62 61 73 65 20 74 6f 20  the database to 
19f80 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64  the value stored
19f90 0a 20 20 20 20 20 20 2a 2a 20 77 68 65 6e 20 74  .      ** when t
19fa0 68 65 20 73 61 76 65 70 6f 69 6e 74 20 77 61 73  he savepoint was
19fb0 20 63 72 65 61 74 65 64 2e 20 20 2a 2f 0a 20 20   created.  */.  
19fc0 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45      if( p1==SAVE
19fd0 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b  POINT_RELEASE ){
19fe0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
19ff0 20 70 53 61 76 65 70 6f 69 6e 74 3d 3d 64 62 2d   pSavepoint==db-
1a000 3e 70 53 61 76 65 70 6f 69 6e 74 20 29 3b 0a 20  >pSavepoint );. 
1a010 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65         db->pSave
1a020 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69  point = pSavepoi
1a030 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20  nt->pNext;.     
1a040 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
1a050 28 64 62 2c 20 70 53 61 76 65 70 6f 69 6e 74 29  (db, pSavepoint)
1a060 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 21 69  ;.        if( !i
1a070 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a  sTransaction ){.
1a080 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53            db->nS
1a090 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20  avepoint--;.    
1a0a0 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73      }.      }els
1a0b0 65 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  e{.        db->n
1a0c0 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 70  DeferredCons = p
1a0d0 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65  Savepoint->nDefe
1a0e0 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20  rredCons;.      
1a0f0 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49    db->nDeferredI
1a100 6d 6d 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f  mmCons = pSavepo
1a110 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d  int->nDeferredIm
1a120 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 0a  mCons;.      }..
1a130 20 20 20 20 20 20 69 66 28 20 21 69 73 54 72 61        if( !isTra
1a140 6e 73 61 63 74 69 6f 6e 20 7c 7c 20 70 31 3d 3d  nsaction || p1==
1a150 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
1a160 43 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  CK ){.        rc
1a170 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53 61   = sqlite3VtabSa
1a180 76 65 70 6f 69 6e 74 28 64 62 2c 20 70 31 2c 20  vepoint(db, p1, 
1a190 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20  iSavepoint);.   
1a1a0 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
1a1b0 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
1a1c0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1a1d0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
1a1e0 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67    }.  if( rc ) g
1a1f0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1a200 5f 65 72 72 6f 72 3b 0a 0a 20 20 62 72 65 61 6b  _error;..  break
1a210 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1a220 41 75 74 6f 43 6f 6d 6d 69 74 20 50 31 20 50 32  AutoCommit P1 P2
1a230 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74   * * *.**.** Set
1a240 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 75   the database au
1a250 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 20 74  to-commit flag t
1a260 6f 20 50 31 20 28 31 20 6f 72 20 30 29 2e 20 49  o P1 (1 or 0). I
1a270 66 20 50 32 20 69 73 20 74 72 75 65 2c 20 72 6f  f P2 is true, ro
1a280 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e 79 20 63  ll.** back any c
1a290 75 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65 20  urrently active 
1a2a0 62 74 72 65 65 20 74 72 61 6e 73 61 63 74 69 6f  btree transactio
1a2b0 6e 73 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ns. If there are
1a2c0 20 61 6e 79 20 61 63 74 69 76 65 0a 2a 2a 20 56   any active.** V
1a2d0 4d 73 20 28 61 70 61 72 74 20 66 72 6f 6d 20 74  Ms (apart from t
1a2e0 68 69 73 20 6f 6e 65 29 2c 20 74 68 65 6e 20 61  his one), then a
1a2f0 20 52 4f 4c 4c 42 41 43 4b 20 66 61 69 6c 73 2e   ROLLBACK fails.
1a300 20 20 41 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73    A COMMIT fails
1a310 20 69 66 0a 2a 2a 20 74 68 65 72 65 20 61 72 65   if.** there are
1a320 20 61 63 74 69 76 65 20 77 72 69 74 69 6e 67 20   active writing 
1a330 56 4d 73 20 6f 72 20 61 63 74 69 76 65 20 56 4d  VMs or active VM
1a340 73 20 74 68 61 74 20 75 73 65 20 73 68 61 72 65  s that use share
1a350 64 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 54  d cache..**.** T
1a360 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
1a370 63 61 75 73 65 73 20 74 68 65 20 56 4d 20 74 6f  causes the VM to
1a380 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f   halt..*/.case O
1a390 50 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a  P_AutoCommit: {.
1a3a0 20 20 69 6e 74 20 64 65 73 69 72 65 64 41 75 74    int desiredAut
1a3b0 6f 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e 74 20 69  oCommit;.  int i
1a3c0 52 6f 6c 6c 62 61 63 6b 3b 0a 0a 20 20 64 65 73  Rollback;..  des
1a3d0 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 3d  iredAutoCommit =
1a3e0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c   pOp->p1;.  iRol
1a3f0 6c 62 61 63 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b  lback = pOp->p2;
1a400 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72  .  assert( desir
1a410 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20  edAutoCommit==1 
1a420 7c 7c 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  || desiredAutoCo
1a430 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73  mmit==0 );.  ass
1a440 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f  ert( desiredAuto
1a450 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69 52 6f  Commit==1 || iRo
1a460 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a 20 20 61  llback==0 );.  a
1a470 73 73 65 72 74 28 20 64 62 2d 3e 6e 56 64 62 65  ssert( db->nVdbe
1a480 41 63 74 69 76 65 3e 30 20 29 3b 20 20 2f 2a 20  Active>0 );  /* 
1a490 41 74 20 6c 65 61 73 74 20 74 68 69 73 20 6f 6e  At least this on
1a4a0 65 20 56 4d 20 69 73 20 61 63 74 69 76 65 20 2a  e VM is active *
1a4b0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  /.  assert( p->b
1a4c0 49 73 52 65 61 64 65 72 20 29 3b 0a 0a 20 20 69  IsReader );..  i
1a4d0 66 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  f( desiredAutoCo
1a4e0 6d 6d 69 74 21 3d 64 62 2d 3e 61 75 74 6f 43 6f  mmit!=db->autoCo
1a4f0 6d 6d 69 74 20 29 7b 0a 20 20 20 20 69 66 28 20  mmit ){.    if( 
1a500 69 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20 20 20  iRollback ){.   
1a510 20 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72     assert( desir
1a520 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20  edAutoCommit==1 
1a530 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
1a540 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 2c 20  RollbackAll(db, 
1a550 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c  SQLITE_ABORT_ROL
1a560 4c 42 41 43 4b 29 3b 0a 20 20 20 20 20 20 64 62  LBACK);.      db
1a570 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31  ->autoCommit = 1
1a580 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
1a590 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
1a5a0 74 20 26 26 20 64 62 2d 3e 6e 56 64 62 65 57 72  t && db->nVdbeWr
1a5b0 69 74 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f  ite>0 ){.      /
1a5c0 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75  * If this instru
1a5d0 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73  ction implements
1a5e0 20 61 20 43 4f 4d 4d 49 54 20 61 6e 64 20 6f 74   a COMMIT and ot
1a5f0 68 65 72 20 56 4d 73 20 61 72 65 20 77 72 69 74  her VMs are writ
1a600 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 72 65 74  ing.      ** ret
1a610 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64  urn an error ind
1a620 69 63 61 74 69 6e 67 20 74 68 61 74 20 74 68 65  icating that the
1a630 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20   other VMs must 
1a640 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20  complete first. 
1a650 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
1a660 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
1a670 28 70 2c 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d  (p, "cannot comm
1a680 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d  it transaction -
1a690 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   ".             
1a6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 51               "SQ
1a6b0 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
1a6c0 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
1a6d0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55    rc = SQLITE_BU
1a6e0 53 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61  SY;.      goto a
1a6f0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1a700 72 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  r;.    }else if(
1a710 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64   (rc = sqlite3Vd
1a720 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29  beCheckFk(p, 1))
1a730 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
1a740 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
1a750 65 74 75 72 6e 3b 0a 20 20 20 20 7d 65 6c 73 65  eturn;.    }else
1a760 7b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f  {.      db->auto
1a770 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 64 65 73  Commit = (u8)des
1a780 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a  iredAutoCommit;.
1a790 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73 71      }.    if( sq
1a7a0 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29  lite3VdbeHalt(p)
1a7b0 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b  ==SQLITE_BUSY ){
1a7c0 0a 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28  .      p->pc = (
1a7d0 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b  int)(pOp - aOp);
1a7e0 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43  .      db->autoC
1a7f0 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28 31 2d 64  ommit = (u8)(1-d
1a800 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
1a810 29 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20 3d  );.      p->rc =
1a820 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
1a830 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64  Y;.      goto vd
1a840 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d  be_return;.    }
1a850 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d  .    assert( db-
1a860 3e 6e 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29  >nStatement==0 )
1a870 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6c 6f  ;.    sqlite3Clo
1a880 73 65 53 61 76 65 70 6f 69 6e 74 73 28 64 62 29  seSavepoints(db)
1a890 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 72 63 3d  ;.    if( p->rc=
1a8a0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1a8b0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
1a8c0 44 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  DONE;.    }else{
1a8d0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
1a8e0 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a  TE_ERROR;.    }.
1a8f0 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
1a900 74 75 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  turn;.  }else{. 
1a910 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
1a920 72 6f 72 28 70 2c 0a 20 20 20 20 20 20 20 20 28  ror(p,.        (
1a930 21 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d  !desiredAutoComm
1a940 69 74 29 3f 22 63 61 6e 6e 6f 74 20 73 74 61 72  it)?"cannot star
1a950 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  t a transaction 
1a960 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63  within a transac
1a970 74 69 6f 6e 22 3a 28 0a 20 20 20 20 20 20 20 20  tion":(.        
1a980 28 69 52 6f 6c 6c 62 61 63 6b 29 3f 22 63 61 6e  (iRollback)?"can
1a990 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e  not rollback - n
1a9a0 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  o transaction is
1a9b0 20 61 63 74 69 76 65 22 3a 0a 20 20 20 20 20 20   active":.      
1a9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 61               "ca
1a9d0 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f  nnot commit - no
1a9e0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
1a9f0 61 63 74 69 76 65 22 29 29 3b 0a 20 20 20 20 20  active"));.     
1aa00 20 20 20 20 0a 20 20 20 20 72 63 20 3d 20 53 51      .    rc = SQ
1aa10 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
1aa20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1aa30 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 62  o_error;.  }.  b
1aa40 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1aa50 64 65 3a 20 54 72 61 6e 73 61 63 74 69 6f 6e 20  de: Transaction 
1aa60 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
1aa70 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 20 74 72 61  *.** Begin a tra
1aa80 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 64 61 74 61  nsaction on data
1aa90 62 61 73 65 20 50 31 20 69 66 20 61 20 74 72 61  base P1 if a tra
1aaa0 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20  nsaction is not 
1aab0 61 6c 72 65 61 64 79 0a 2a 2a 20 61 63 74 69 76  already.** activ
1aac0 65 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e  e..** If P2 is n
1aad0 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20  on-zero, then a 
1aae0 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f  write-transactio
1aaf0 6e 20 69 73 20 73 74 61 72 74 65 64 2c 20 6f 72  n is started, or
1ab00 20 69 66 20 61 20 0a 2a 2a 20 72 65 61 64 2d 74   if a .** read-t
1ab10 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 6c  ransaction is al
1ab20 72 65 61 64 79 20 61 63 74 69 76 65 2c 20 69 74  ready active, it
1ab30 20 69 73 20 75 70 67 72 61 64 65 64 20 74 6f 20   is upgraded to 
1ab40 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74  a write-transact
1ab50 69 6f 6e 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73  ion..** If P2 is
1ab60 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 72 65   zero, then a re
1ab70 61 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  ad-transaction i
1ab80 73 20 73 74 61 72 74 65 64 2e 0a 2a 2a 0a 2a 2a  s started..**.**
1ab90 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78   P1 is the index
1aba0 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
1abb0 20 66 69 6c 65 20 6f 6e 20 77 68 69 63 68 20 74   file on which t
1abc0 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  he transaction i
1abd0 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e 20 20 49  s.** started.  I
1abe0 6e 64 65 78 20 30 20 69 73 20 74 68 65 20 6d 61  ndex 0 is the ma
1abf0 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
1ac00 20 61 6e 64 20 69 6e 64 65 78 20 31 20 69 73 20   and index 1 is 
1ac10 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64  the.** file used
1ac20 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 74   for temporary t
1ac30 61 62 6c 65 73 2e 20 20 49 6e 64 69 63 65 73 20  ables.  Indices 
1ac40 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 65  of 2 or more are
1ac50 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74   used for.** att
1ac60 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e  ached databases.
1ac70 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20 77 72 69 74  .**.** If a writ
1ac80 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e-transaction is
1ac90 20 73 74 61 72 74 65 64 20 61 6e 64 20 74 68 65   started and the
1aca0 20 56 64 62 65 2e 75 73 65 73 53 74 6d 74 4a 6f   Vdbe.usesStmtJo
1acb0 75 72 6e 61 6c 20 66 6c 61 67 20 69 73 0a 2a 2a  urnal flag is.**
1acc0 20 74 72 75 65 20 28 74 68 69 73 20 66 6c 61 67   true (this flag
1acd0 20 69 73 20 73 65 74 20 69 66 20 74 68 65 20 56   is set if the V
1ace0 64 62 65 20 6d 61 79 20 6d 6f 64 69 66 79 20 6d  dbe may modify m
1acf0 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77  ore than one row
1ad00 20 61 6e 64 20 6d 61 79 0a 2a 2a 20 74 68 72 6f   and may.** thro
1ad10 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70  w an ABORT excep
1ad20 74 69 6f 6e 29 2c 20 61 20 73 74 61 74 65 6d 65  tion), a stateme
1ad30 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d  nt transaction m
1ad40 61 79 20 61 6c 73 6f 20 62 65 20 6f 70 65 6e 65  ay also be opene
1ad50 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70 65 63 69  d..** More speci
1ad60 66 69 63 61 6c 6c 79 2c 20 61 20 73 74 61 74 65  fically, a state
1ad70 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
1ad80 20 69 73 20 6f 70 65 6e 65 64 20 69 66 66 20 74   is opened iff t
1ad90 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63  he database.** c
1ada0 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72  onnection is cur
1adb0 72 65 6e 74 6c 79 20 6e 6f 74 20 69 6e 20 61 75  rently not in au
1adc0 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f  tocommit mode, o
1add0 72 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6f  r if there are o
1ade0 74 68 65 72 0a 2a 2a 20 61 63 74 69 76 65 20 73  ther.** active s
1adf0 74 61 74 65 6d 65 6e 74 73 2e 20 41 20 73 74 61  tatements. A sta
1ae00 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
1ae10 6f 6e 20 61 6c 6c 6f 77 73 20 74 68 65 20 63 68  on allows the ch
1ae20 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 74 68  anges made by th
1ae30 69 73 0a 2a 2a 20 56 44 42 45 20 74 6f 20 62 65  is.** VDBE to be
1ae40 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 66 74   rolled back aft
1ae50 65 72 20 61 6e 20 65 72 72 6f 72 20 77 69 74 68  er an error with
1ae60 6f 75 74 20 68 61 76 69 6e 67 20 74 6f 20 72 6f  out having to ro
1ae70 6c 6c 20 62 61 63 6b 20 74 68 65 0a 2a 2a 20 65  ll back the.** e
1ae80 6e 74 69 72 65 20 74 72 61 6e 73 61 63 74 69 6f  ntire transactio
1ae90 6e 2e 20 49 66 20 6e 6f 20 65 72 72 6f 72 20 69  n. If no error i
1aea0 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2c 20 74  s encountered, t
1aeb0 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  he statement tra
1aec0 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 77 69 6c 6c  nsaction.** will
1aed0 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63   automatically c
1aee0 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68 65 20 56  ommit when the V
1aef0 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a  DBE halts..**.**
1af00 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20 74   If P5!=0 then t
1af10 68 69 73 20 6f 70 63 6f 64 65 20 61 6c 73 6f 20  his opcode also 
1af20 63 68 65 63 6b 73 20 74 68 65 20 73 63 68 65 6d  checks the schem
1af30 61 20 63 6f 6f 6b 69 65 20 61 67 61 69 6e 73 74  a cookie against
1af40 20 50 33 0a 2a 2a 20 61 6e 64 20 74 68 65 20 73   P3.** and the s
1af50 63 68 65 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e  chema generation
1af60 20 63 6f 75 6e 74 65 72 20 61 67 61 69 6e 73 74   counter against
1af70 20 50 34 2e 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b   P4..** The cook
1af80 69 65 20 63 68 61 6e 67 65 73 20 69 74 73 20 76  ie changes its v
1af90 61 6c 75 65 20 77 68 65 6e 65 76 65 72 20 74 68  alue whenever th
1afa0 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
1afb0 61 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68  a changes..** Th
1afc0 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  is operation is 
1afd0 75 73 65 64 20 74 6f 20 64 65 74 65 63 74 20 77  used to detect w
1afe0 68 65 6e 20 74 68 61 74 20 74 68 65 20 63 6f 6f  hen that the coo
1aff0 6b 69 65 20 68 61 73 20 63 68 61 6e 67 65 64 0a  kie has changed.
1b000 2a 2a 20 61 6e 64 20 74 68 61 74 20 74 68 65 20  ** and that the 
1b010 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20  current process 
1b020 6e 65 65 64 73 20 74 6f 20 72 65 72 65 61 64 20  needs to reread 
1b030 74 68 65 20 73 63 68 65 6d 61 2e 20 20 49 66 20  the schema.  If 
1b040 74 68 65 20 73 63 68 65 6d 61 0a 2a 2a 20 63 6f  the schema.** co
1b050 6f 6b 69 65 20 69 6e 20 50 33 20 64 69 66 66 65  okie in P3 diffe
1b060 72 73 20 66 72 6f 6d 20 74 68 65 20 73 63 68 65  rs from the sche
1b070 6d 61 20 63 6f 6f 6b 69 65 20 69 6e 20 74 68 65  ma cookie in the
1b080 20 64 61 74 61 62 61 73 65 20 68 65 61 64 65 72   database header
1b090 20 6f 72 0a 2a 2a 20 69 66 20 74 68 65 20 73 63   or.** if the sc
1b0a0 68 65 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e 20  hema generation 
1b0b0 63 6f 75 6e 74 65 72 20 69 6e 20 50 34 20 64 69  counter in P4 di
1b0c0 66 66 65 72 73 20 66 72 6f 6d 20 74 68 65 20 63  ffers from the c
1b0d0 75 72 72 65 6e 74 0a 2a 2a 20 67 65 6e 65 72 61  urrent.** genera
1b0e0 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2c 20 74 68  tion counter, th
1b0f0 65 6e 20 61 6e 20 53 51 4c 49 54 45 5f 53 43 48  en an SQLITE_SCH
1b100 45 4d 41 20 65 72 72 6f 72 20 69 73 20 72 61 69  EMA error is rai
1b110 73 65 64 20 61 6e 64 20 65 78 65 63 75 74 69 6f  sed and executio
1b120 6e 0a 2a 2a 20 68 61 6c 74 73 2e 20 20 54 68 65  n.** halts.  The
1b130 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
1b140 77 72 61 70 70 65 72 20 66 75 6e 63 74 69 6f 6e  wrapper function
1b150 20 6d 69 67 68 74 20 74 68 65 6e 20 72 65 70 72   might then repr
1b160 65 70 61 72 65 20 74 68 65 0a 2a 2a 20 73 74 61  epare the.** sta
1b170 74 65 6d 65 6e 74 20 61 6e 64 20 72 65 72 75 6e  tement and rerun
1b180 20 69 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67   it from the beg
1b190 69 6e 6e 69 6e 67 2e 0a 2a 2f 0a 63 61 73 65 20  inning..*/.case 
1b1a0 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a 20  OP_Transaction: 
1b1b0 7b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a  {.  Btree *pBt;.
1b1c0 20 20 69 6e 74 20 69 4d 65 74 61 20 3d 20 30 3b    int iMeta = 0;
1b1d0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ..  assert( p->b
1b1e0 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73  IsReader );.  as
1b1f0 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
1b200 79 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d  y==0 || pOp->p2=
1b210 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1b220 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1b230 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
1b240 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73  .  assert( DbMas
1b250 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
1b260 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a  sk, pOp->p1) );.
1b270 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26    if( pOp->p2 &&
1b280 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51   (db->flags & SQ
1b290 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 29 21  LITE_QueryOnly)!
1b2a0 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  =0 ){.    rc = S
1b2b0 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 3b 0a  QLITE_READONLY;.
1b2c0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1b2d0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
1b2e0 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62  .  pBt = db->aDb
1b2f0 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a  [pOp->p1].pBt;..
1b300 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20    if( pBt ){.   
1b310 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1b320 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 42 74  eeBeginTrans(pBt
1b330 2c 20 70 4f 70 2d 3e 70 32 2c 20 26 69 4d 65 74  , pOp->p2, &iMet
1b340 61 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65  a);.    testcase
1b350 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
1b360 59 5f 53 4e 41 50 53 48 4f 54 20 29 3b 0a 20 20  Y_SNAPSHOT );.  
1b370 20 20 74 65 73 74 63 61 73 65 28 20 72 63 3d 3d    testcase( rc==
1b380 53 51 4c 49 54 45 5f 42 55 53 59 5f 52 45 43 4f  SQLITE_BUSY_RECO
1b390 56 45 52 59 20 29 3b 0a 20 20 20 20 69 66 28 20  VERY );.    if( 
1b3a0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
1b3b0 0a 20 20 20 20 20 20 69 66 28 20 28 72 63 26 30  .      if( (rc&0
1b3c0 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53  xff)==SQLITE_BUS
1b3d0 59 20 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e  Y ){.        p->
1b3e0 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d  pc = (int)(pOp -
1b3f0 20 61 4f 70 29 3b 0a 20 20 20 20 20 20 20 20 70   aOp);.        p
1b400 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 20 20 20  ->rc = rc;.     
1b410 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
1b420 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  urn;.      }.   
1b430 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
1b440 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1b450 7d 0a 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  }..    if( pOp->
1b460 70 32 20 26 26 20 70 2d 3e 75 73 65 73 53 74 6d  p2 && p->usesStm
1b470 74 4a 6f 75 72 6e 61 6c 20 0a 20 20 20 20 20 26  tJournal .     &
1b480 26 20 28 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  & (db->autoCommi
1b490 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 64 62  t==0 || db->nVdb
1b4a0 65 52 65 61 64 3e 31 29 20 0a 20 20 20 20 29 7b  eRead>1) .    ){
1b4b0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
1b4c0 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e 54  qlite3BtreeIsInT
1b4d0 72 61 6e 73 28 70 42 74 29 20 29 3b 0a 20 20 20  rans(pBt) );.   
1b4e0 20 20 20 69 66 28 20 70 2d 3e 69 53 74 61 74 65     if( p->iState
1b4f0 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ment==0 ){.     
1b500 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e     assert( db->n
1b510 53 74 61 74 65 6d 65 6e 74 3e 3d 30 20 26 26 20  Statement>=0 && 
1b520 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 3e 3d  db->nSavepoint>=
1b530 30 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  0 );.        db-
1b540 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 2b 3b 20 0a  >nStatement++; .
1b550 20 20 20 20 20 20 20 20 70 2d 3e 69 53 74 61 74          p->iStat
1b560 65 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76  ement = db->nSav
1b570 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e 53 74  epoint + db->nSt
1b580 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20 7d  atement;.      }
1b590 0a 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ..      rc = sql
1b5a0 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
1b5b0 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f  t(db, SAVEPOINT_
1b5c0 42 45 47 49 4e 2c 20 70 2d 3e 69 53 74 61 74 65  BEGIN, p->iState
1b5d0 6d 65 6e 74 2d 31 29 3b 0a 20 20 20 20 20 20 69  ment-1);.      i
1b5e0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
1b5f0 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
1b600 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67   sqlite3BtreeBeg
1b610 69 6e 53 74 6d 74 28 70 42 74 2c 20 70 2d 3e 69  inStmt(pBt, p->i
1b620 53 74 61 74 65 6d 65 6e 74 29 3b 0a 20 20 20 20  Statement);.    
1b630 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 53 74    }..      /* St
1b640 6f 72 65 20 74 68 65 20 63 75 72 72 65 6e 74 20  ore the current 
1b650 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74  value of the dat
1b660 61 62 61 73 65 20 68 61 6e 64 6c 65 73 20 64 65  abase handles de
1b670 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e  ferred constrain
1b680 74 0a 20 20 20 20 20 20 2a 2a 20 63 6f 75 6e 74  t.      ** count
1b690 65 72 2e 20 49 66 20 74 68 65 20 73 74 61 74 65  er. If the state
1b6a0 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
1b6b0 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c   needs to be rol
1b6c0 6c 65 64 20 62 61 63 6b 2c 0a 20 20 20 20 20 20  led back,.      
1b6d0 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ** the value of 
1b6e0 74 68 69 73 20 63 6f 75 6e 74 65 72 20 6e 65 65  this counter nee
1b6f0 64 73 20 74 6f 20 62 65 20 72 65 73 74 6f 72 65  ds to be restore
1b700 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20 20 20  d too.  */.     
1b710 20 70 2d 3e 6e 53 74 6d 74 44 65 66 43 6f 6e 73   p->nStmtDefCons
1b720 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64   = db->nDeferred
1b730 43 6f 6e 73 3b 0a 20 20 20 20 20 20 70 2d 3e 6e  Cons;.      p->n
1b740 53 74 6d 74 44 65 66 49 6d 6d 43 6f 6e 73 20 3d  StmtDefImmCons =
1b750 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
1b760 6d 43 6f 6e 73 3b 0a 20 20 20 20 7d 0a 20 20 7d  mCons;.    }.  }
1b770 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1b780 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34  p5==0 || pOp->p4
1b790 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
1b7a0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 0a  ;.  if( pOp->p5.
1b7b0 20 20 20 26 26 20 28 69 4d 65 74 61 21 3d 70 4f     && (iMeta!=pO
1b7c0 70 2d 3e 70 33 0a 20 20 20 20 20 20 7c 7c 20 64  p->p3.      || d
1b7d0 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
1b7e0 70 53 63 68 65 6d 61 2d 3e 69 47 65 6e 65 72 61  pSchema->iGenera
1b7f0 74 69 6f 6e 21 3d 70 4f 70 2d 3e 70 34 2e 69 29  tion!=pOp->p4.i)
1b800 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 0a 20 20 20  .  ){.    /*.   
1b810 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49   ** IMPLEMENTATI
1b820 4f 4e 2d 4f 46 3a 20 52 2d 30 33 31 38 39 2d 35  ON-OF: R-03189-5
1b830 31 31 33 35 20 41 73 20 65 61 63 68 20 53 51 4c  1135 As each SQL
1b840 20 73 74 61 74 65 6d 65 6e 74 20 72 75 6e 73 2c   statement runs,
1b850 20 74 68 65 20 73 63 68 65 6d 61 0a 20 20 20 20   the schema.    
1b860 2a 2a 20 76 65 72 73 69 6f 6e 20 69 73 20 63 68  ** version is ch
1b870 65 63 6b 65 64 20 74 6f 20 65 6e 73 75 72 65 20  ecked to ensure 
1b880 74 68 61 74 20 74 68 65 20 73 63 68 65 6d 61 20  that the schema 
1b890 68 61 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20  has not changed 
1b8a0 73 69 6e 63 65 20 74 68 65 0a 20 20 20 20 2a 2a  since the.    **
1b8b0 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 77   SQL statement w
1b8c0 61 73 20 70 72 65 70 61 72 65 64 2e 0a 20 20 20  as prepared..   
1b8d0 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 44   */.    sqlite3D
1b8e0 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72  bFree(db, p->zEr
1b8f0 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45  rMsg);.    p->zE
1b900 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 44  rrMsg = sqlite3D
1b910 62 53 74 72 44 75 70 28 64 62 2c 20 22 64 61 74  bStrDup(db, "dat
1b920 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73  abase schema has
1b930 20 63 68 61 6e 67 65 64 22 29 3b 0a 20 20 20 20   changed");.    
1b940 2f 2a 20 49 66 20 74 68 65 20 73 63 68 65 6d 61  /* If the schema
1b950 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65  -cookie from the
1b960 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d   database file m
1b970 61 74 63 68 65 73 20 74 68 65 20 63 6f 6f 6b 69  atches the cooki
1b980 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f 72 65 64  e .    ** stored
1b990 20 77 69 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d   with the in-mem
1b9a0 6f 72 79 20 72 65 70 72 65 73 65 6e 74 61 74 69  ory representati
1b9b0 6f 6e 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61  on of the schema
1b9c0 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20  , do.    ** not 
1b9d0 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68 65 6d  reload the schem
1b9e0 61 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  a from the datab
1b9f0 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a  ase file..    **
1ba00 0a 20 20 20 20 2a 2a 20 49 66 20 76 69 72 74 75  .    ** If virtu
1ba10 61 6c 2d 74 61 62 6c 65 73 20 61 72 65 20 69 6e  al-tables are in
1ba20 20 75 73 65 2c 20 74 68 69 73 20 69 73 20 6e 6f   use, this is no
1ba30 74 20 6a 75 73 74 20 61 6e 20 6f 70 74 69 6d 69  t just an optimi
1ba40 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f  zation..    ** O
1ba50 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73  ften, v-tables s
1ba60 74 6f 72 65 20 74 68 65 69 72 20 64 61 74 61 20  tore their data 
1ba70 69 6e 20 6f 74 68 65 72 20 53 51 4c 69 74 65 20  in other SQLite 
1ba80 74 61 62 6c 65 73 2c 20 77 68 69 63 68 0a 20 20  tables, which.  
1ba90 20 20 2a 2a 20 61 72 65 20 71 75 65 72 69 65 64    ** are queried
1baa0 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65   from within xNe
1bab0 78 74 28 29 20 61 6e 64 20 6f 74 68 65 72 20 76  xt() and other v
1bac0 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 20 75  -table methods u
1bad0 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70 72 65 70  sing.    ** prep
1bae0 61 72 65 64 20 71 75 65 72 69 65 73 2e 20 49 66  ared queries. If
1baf0 20 73 75 63 68 20 61 20 71 75 65 72 79 20 69 73   such a query is
1bb00 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65   out-of-date, we
1bb10 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a   do not want to.
1bb20 20 20 20 20 2a 2a 20 64 69 73 63 61 72 64 20 74      ** discard t
1bb30 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
1bb40 6d 61 2c 20 61 73 20 74 68 65 20 75 73 65 72 20  ma, as the user 
1bb50 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e  code implementin
1bb60 67 20 74 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74  g the.    ** v-t
1bb70 61 62 6c 65 20 77 6f 75 6c 64 20 68 61 76 65 20  able would have 
1bb80 74 6f 20 62 65 20 72 65 61 64 79 20 66 6f 72 20  to be ready for 
1bb90 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
1bba0 20 73 74 72 75 63 74 75 72 65 20 69 74 73 65 6c   structure itsel
1bbb0 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65 20 69  f.    ** to be i
1bbc0 6e 76 61 6c 69 64 61 74 65 64 20 77 68 65 6e 65  nvalidated whene
1bbd0 76 65 72 20 73 71 6c 69 74 65 33 5f 73 74 65 70  ver sqlite3_step
1bbe0 28 29 20 69 73 20 63 61 6c 6c 65 64 20 66 72 6f  () is called fro
1bbf0 6d 20 77 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a  m within .    **
1bc00 20 61 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f   a v-table metho
1bc10 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  d..    */.    if
1bc20 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  ( db->aDb[pOp->p
1bc30 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  1].pSchema->sche
1bc40 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61  ma_cookie!=iMeta
1bc50 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
1bc60 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28  3ResetOneSchema(
1bc70 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20  db, pOp->p1);.  
1bc80 20 20 7d 0a 20 20 20 20 70 2d 3e 65 78 70 69 72    }.    p->expir
1bc90 65 64 20 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d  ed = 1;.    rc =
1bca0 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a   SQLITE_SCHEMA;.
1bcb0 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67    }.  if( rc ) g
1bcc0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1bcd0 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
1bce0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
1bcf0 65 61 64 43 6f 6f 6b 69 65 20 50 31 20 50 32 20  eadCookie P1 P2 
1bd00 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61  P3 * *.**.** Rea
1bd10 64 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20  d cookie number 
1bd20 50 33 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65  P3 from database
1bd30 20 50 31 20 61 6e 64 20 77 72 69 74 65 20 69 74   P1 and write it
1bd40 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
1bd50 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69 73 20 74  2..** P3==1 is t
1bd60 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  he schema versio
1bd70 6e 2e 20 20 50 33 3d 3d 32 20 69 73 20 74 68 65  n.  P3==2 is the
1bd80 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74   database format
1bd90 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69 73 20 74 68  ..** P3==3 is th
1bda0 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61  e recommended pa
1bdb0 67 65 72 20 63 61 63 68 65 20 73 69 7a 65 2c 20  ger cache size, 
1bdc0 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50  and so forth.  P
1bdd0 31 3d 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d  1==0 is.** the m
1bde0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
1bdf0 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74  e and P1==1 is t
1be00 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
1be10 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a   used to store.*
1be20 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  * temporary tabl
1be30 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20  es..**.** There 
1be40 6d 75 73 74 20 62 65 20 61 20 72 65 61 64 2d 6c  must be a read-l
1be50 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ock on the datab
1be60 61 73 65 20 28 65 69 74 68 65 72 20 61 20 74 72  ase (either a tr
1be70 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73  ansaction.** mus
1be80 74 20 62 65 20 73 74 61 72 74 65 64 20 6f 72 20  t be started or 
1be90 74 68 65 72 65 20 6d 75 73 74 20 62 65 20 61 6e  there must be an
1bea0 20 6f 70 65 6e 20 63 75 72 73 6f 72 29 20 62 65   open cursor) be
1beb0 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e  fore.** executin
1bec0 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  g this instructi
1bed0 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  on..*/.case OP_R
1bee0 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20  eadCookie: {    
1bef0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
1bf00 74 32 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74  t2 */.  int iMet
1bf10 61 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20  a;.  int iDb;.  
1bf20 69 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20  int iCookie;..  
1bf30 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
1bf40 61 64 65 72 20 29 3b 0a 20 20 69 44 62 20 3d 20  ader );.  iDb = 
1bf50 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b  pOp->p1;.  iCook
1bf60 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  ie = pOp->p3;.  
1bf70 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
1bf80 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d  SQLITE_N_BTREE_M
1bf90 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ETA );.  assert(
1bfa0 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64   iDb>=0 && iDb<d
1bfb0 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
1bfc0 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d  rt( db->aDb[iDb]
1bfd0 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73  .pBt!=0 );.  ass
1bfe0 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
1bff0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44  p->btreeMask, iD
1c000 62 29 20 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33  b) );..  sqlite3
1c010 42 74 72 65 65 47 65 74 4d 65 74 61 28 64 62 2d  BtreeGetMeta(db-
1c020 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 69  >aDb[iDb].pBt, i
1c030 43 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a 29 26  Cookie, (u32 *)&
1c040 69 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74 20 3d  iMeta);.  pOut =
1c050 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
1c060 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d  p, pOp);.  pOut-
1c070 3e 75 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20 20  >u.i = iMeta;.  
1c080 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1c090 6f 64 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20 50  ode: SetCookie P
1c0a0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
1c0b0 2a 20 57 72 69 74 65 20 74 68 65 20 69 6e 74 65  * Write the inte
1c0c0 67 65 72 20 76 61 6c 75 65 20 50 33 20 69 6e 74  ger value P3 int
1c0d0 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20  o cookie number 
1c0e0 50 32 20 6f 66 20 64 61 74 61 62 61 73 65 20 50  P2 of database P
1c0f0 31 2e 0a 2a 2a 20 50 32 3d 3d 31 20 69 73 20 74  1..** P2==1 is t
1c100 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  he schema versio
1c110 6e 2e 20 20 50 32 3d 3d 32 20 69 73 20 74 68 65  n.  P2==2 is the
1c120 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74   database format
1c130 2e 0a 2a 2a 20 50 32 3d 3d 33 20 69 73 20 74 68  ..** P2==3 is th
1c140 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61  e recommended pa
1c150 67 65 72 20 63 61 63 68 65 20 0a 2a 2a 20 73 69  ger cache .** si
1c160 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ze, and so forth
1c170 2e 20 20 50 31 3d 3d 30 20 69 73 20 74 68 65 20  .  P1==0 is the 
1c180 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
1c190 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20  le and P1==1 is 
1c1a0 74 68 65 20 0a 2a 2a 20 64 61 74 61 62 61 73 65  the .** database
1c1b0 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74   file used to st
1c1c0 6f 72 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61  ore temporary ta
1c1d0 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72  bles..**.** A tr
1c1e0 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62  ansaction must b
1c1f0 65 20 73 74 61 72 74 65 64 20 62 65 66 6f 72 65  e started before
1c200 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20   executing this 
1c210 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20  opcode..*/.case 
1c220 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 0a  OP_SetCookie: {.
1c230 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 73 71    Db *pDb;..  sq
1c240 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57 72 69  lite3VdbeIncrWri
1c250 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 30 29 3b  teCounter(p, 0);
1c260 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1c270 70 32 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45  p2<SQLITE_N_BTRE
1c280 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65  E_META );.  asse
1c290 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1c2a0 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
1c2b0 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44  b );.  assert( D
1c2c0 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
1c2d0 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29  eeMask, pOp->p1)
1c2e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
1c2f0 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
1c300 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62    pDb = &db->aDb
1c310 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1c320 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30  ert( pDb->pBt!=0
1c330 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71   );.  assert( sq
1c340 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78  lite3SchemaMutex
1c350 48 65 6c 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31  Held(db, pOp->p1
1c360 2c 20 30 29 20 29 3b 0a 20 20 2f 2a 20 53 65 65  , 0) );.  /* See
1c370 20 6e 6f 74 65 20 61 62 6f 75 74 20 69 6e 64 65   note about inde
1c380 78 20 73 68 69 66 74 69 6e 67 20 6f 6e 20 4f 50  x shifting on OP
1c390 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20  _ReadCookie */. 
1c3a0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1c3b0 65 65 55 70 64 61 74 65 4d 65 74 61 28 70 44 62  eeUpdateMeta(pDb
1c3c0 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20  ->pBt, pOp->p2, 
1c3d0 70 4f 70 2d 3e 70 33 29 3b 0a 20 20 69 66 28 20  pOp->p3);.  if( 
1c3e0 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 53  pOp->p2==BTREE_S
1c3f0 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 20 29 7b  CHEMA_VERSION ){
1c400 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20 74 68 65  .    /* When the
1c410 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63   schema cookie c
1c420 68 61 6e 67 65 73 2c 20 72 65 63 6f 72 64 20 74  hanges, record t
1c430 68 65 20 6e 65 77 20 63 6f 6f 6b 69 65 20 69 6e  he new cookie in
1c440 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20 20 20  ternally */.    
1c450 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 73 63  pDb->pSchema->sc
1c460 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20 70 4f  hema_cookie = pO
1c470 70 2d 3e 70 33 3b 0a 20 20 20 20 64 62 2d 3e 6d  p->p3;.    db->m
1c480 44 62 46 6c 61 67 73 20 7c 3d 20 44 42 46 4c 41  DbFlags |= DBFLA
1c490 47 5f 53 63 68 65 6d 61 43 68 61 6e 67 65 3b 0a  G_SchemaChange;.
1c4a0 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d    }else if( pOp-
1c4b0 3e 70 32 3d 3d 42 54 52 45 45 5f 46 49 4c 45 5f  >p2==BTREE_FILE_
1c4c0 46 4f 52 4d 41 54 20 29 7b 0a 20 20 20 20 2f 2a  FORMAT ){.    /*
1c4d0 20 52 65 63 6f 72 64 20 63 68 61 6e 67 65 73 20   Record changes 
1c4e0 69 6e 20 74 68 65 20 66 69 6c 65 20 66 6f 72 6d  in the file form
1c4f0 61 74 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70  at */.    pDb->p
1c500 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72  Schema->file_for
1c510 6d 61 74 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  mat = pOp->p3;. 
1c520 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31   }.  if( pOp->p1
1c530 3d 3d 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e  ==1 ){.    /* In
1c540 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 70 72 65  validate all pre
1c550 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73  pared statements
1c560 20 77 68 65 6e 65 76 65 72 20 74 68 65 20 54 45   whenever the TE
1c570 4d 50 20 64 61 74 61 62 61 73 65 0a 20 20 20 20  MP database.    
1c580 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 63 68 61  ** schema is cha
1c590 6e 67 65 64 2e 20 20 54 69 63 6b 65 74 20 23 31  nged.  Ticket #1
1c5a0 36 34 34 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74  644 */.    sqlit
1c5b0 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64  e3ExpirePrepared
1c5c0 53 74 61 74 65 6d 65 6e 74 73 28 64 62 2c 20 30  Statements(db, 0
1c5d0 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65  );.    p->expire
1c5e0 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28  d = 0;.  }.  if(
1c5f0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
1c600 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1c610 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1c620 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64 20 50  code: OpenRead P
1c630 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
1c640 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d   Synopsis: root=
1c650 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20  P2 iDb=P3.**.** 
1c660 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e 6c 79  Open a read-only
1c670 20 63 75 72 73 6f 72 20 66 6f 72 20 74 68 65 20   cursor for the 
1c680 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 77  database table w
1c690 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69  hose root page i
1c6a0 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64 61 74  s.** P2 in a dat
1c6b0 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65  abase file.  The
1c6c0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
1c6d0 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
1c6e0 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65  P3. .** P3==0 me
1c6f0 61 6e 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74  ans the main dat
1c700 61 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d 65 61  abase, P3==1 mea
1c710 6e 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ns the database 
1c720 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74 65 6d  used for .** tem
1c730 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2c 20 61  porary tables, a
1c740 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73 20 75 73  nd P3>1 means us
1c750 65 64 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  ed the correspon
1c760 64 69 6e 67 20 61 74 74 61 63 68 65 64 0a 2a 2a  ding attached.**
1c770 20 64 61 74 61 62 61 73 65 2e 20 20 47 69 76 65   database.  Give
1c780 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20   the new cursor 
1c790 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6f 66  an identifier of
1c7a0 20 50 31 2e 20 20 54 68 65 20 50 31 0a 2a 2a 20   P1.  The P1.** 
1c7b0 76 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f 74 20  values need not 
1c7c0 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 62 75  be contiguous bu
1c7d0 74 20 61 6c 6c 20 50 31 20 76 61 6c 75 65 73 20  t all P1 values 
1c7e0 73 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c 6c 20  should be small 
1c7f0 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49 74 20  integers..** It 
1c800 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20  is an error for 
1c810 50 31 20 74 6f 20 62 65 20 6e 65 67 61 74 69 76  P1 to be negativ
1c820 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  e..**.** Allowed
1c830 20 50 35 20 62 69 74 73 3a 0a 2a 2a 20 3c 75 6c   P5 bits:.** <ul
1c840 3e 0a 2a 2a 20 3c 6c 69 3e 20 20 3c 62 3e 30 78  >.** <li>  <b>0x
1c850 30 32 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51  02 OPFLAG_SEEKEQ
1c860 3c 2f 62 3e 3a 20 54 68 69 73 20 63 75 72 73 6f  </b>: This curso
1c870 72 20 77 69 6c 6c 20 6f 6e 6c 79 20 62 65 20 75  r will only be u
1c880 73 65 64 20 66 6f 72 0a 2a 2a 20 20 20 20 20 20  sed for.**      
1c890 20 65 71 75 61 6c 69 74 79 20 6c 6f 6f 6b 75 70   equality lookup
1c8a0 73 20 28 69 6d 70 6c 65 6d 65 6e 74 65 64 20 61  s (implemented a
1c8b0 73 20 61 20 70 61 69 72 20 6f 66 20 6f 70 63 6f  s a pair of opco
1c8c0 64 65 73 20 4f 50 5f 53 65 65 6b 47 45 2f 4f 50  des OP_SeekGE/OP
1c8d0 5f 49 64 78 47 54 0a 2a 2a 20 20 20 20 20 20 20  _IdxGT.**       
1c8e0 6f 66 20 4f 50 5f 53 65 65 6b 4c 45 2f 4f 50 5f  of OP_SeekLE/OP_
1c8f0 49 64 78 47 54 29 0a 2a 2a 20 3c 2f 75 6c 3e 0a  IdxGT).** </ul>.
1c900 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c  **.** The P4 val
1c910 75 65 20 6d 61 79 20 62 65 20 65 69 74 68 65 72  ue may be either
1c920 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f   an integer (P4_
1c930 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e  INT32) or a poin
1c940 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49  ter to.** a KeyI
1c950 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 28 50  nfo structure (P
1c960 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69  4_KEYINFO). If i
1c970 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  t is a pointer t
1c980 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20  o a KeyInfo .** 
1c990 6f 62 6a 65 63 74 2c 20 74 68 65 6e 20 74 61 62  object, then tab
1c9a0 6c 65 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 20  le being opened 
1c9b0 6d 75 73 74 20 62 65 20 61 6e 20 5b 69 6e 64 65  must be an [inde
1c9c0 78 20 62 2d 74 72 65 65 5d 20 77 68 65 72 65 20  x b-tree] where 
1c9d0 74 68 65 0a 2a 2a 20 4b 65 79 49 6e 66 6f 20 6f  the.** KeyInfo o
1c9e0 62 6a 65 63 74 20 64 65 66 69 6e 65 73 20 74 68  bject defines th
1c9f0 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f  e content and co
1ca00 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75  llating .** sequ
1ca10 65 6e 63 65 20 6f 66 20 74 68 61 74 20 69 6e 64  ence of that ind
1ca20 65 78 20 62 2d 74 72 65 65 2e 20 4f 74 68 65 72  ex b-tree. Other
1ca30 77 69 73 65 2c 20 69 66 20 50 34 20 69 73 20 61  wise, if P4 is a
1ca40 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61  n integer .** va
1ca50 6c 75 65 2c 20 74 68 65 6e 20 74 68 65 20 74 61  lue, then the ta
1ca60 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 6e 65 64  ble being opened
1ca70 20 6d 75 73 74 20 62 65 20 61 20 5b 74 61 62 6c   must be a [tabl
1ca80 65 20 62 2d 74 72 65 65 5d 20 77 69 74 68 20 61  e b-tree] with a
1ca90 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  .** number of co
1caa0 6c 75 6d 6e 73 20 6e 6f 20 6c 65 73 73 20 74 68  lumns no less th
1cab0 61 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  an the value of 
1cac0 50 34 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  P4..**.** See al
1cad0 73 6f 3a 20 4f 70 65 6e 57 72 69 74 65 2c 20 52  so: OpenWrite, R
1cae0 65 6f 70 65 6e 49 64 78 0a 2a 2f 0a 2f 2a 20 4f  eopenIdx.*/./* O
1caf0 70 63 6f 64 65 3a 20 52 65 6f 70 65 6e 49 64 78  pcode: ReopenIdx
1cb00 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
1cb10 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f  ** Synopsis: roo
1cb20 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a  t=P2 iDb=P3.**.*
1cb30 2a 20 54 68 65 20 52 65 6f 70 65 6e 49 64 78 20  * The ReopenIdx 
1cb40 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6c 69 6b  opcode works lik
1cb50 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64 20 65 78  e OP_OpenRead ex
1cb60 63 65 70 74 20 74 68 61 74 20 69 74 20 66 69 72  cept that it fir
1cb70 73 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20  st.** checks to 
1cb80 73 65 65 20 69 66 20 74 68 65 20 63 75 72 73 6f  see if the curso
1cb90 72 20 6f 6e 20 50 31 20 69 73 20 61 6c 72 65 61  r on P1 is alrea
1cba0 64 79 20 6f 70 65 6e 20 6f 6e 20 74 68 65 20 73  dy open on the s
1cbb0 61 6d 65 0a 2a 2a 20 62 2d 74 72 65 65 20 61 6e  ame.** b-tree an
1cbc0 64 20 69 66 20 69 74 20 69 73 20 74 68 69 73 20  d if it is this 
1cbd0 6f 70 63 6f 64 65 20 62 65 63 6f 6d 65 73 20 61  opcode becomes a
1cbe0 20 6e 6f 2d 6f 70 2e 20 20 49 6e 20 6f 74 68 65   no-op.  In othe
1cbf0 72 20 77 6f 72 64 73 2c 0a 2a 2a 20 69 66 20 74  r words,.** if t
1cc00 68 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c 72  he cursor is alr
1cc10 65 61 64 79 20 6f 70 65 6e 2c 20 64 6f 20 6e 6f  eady open, do no
1cc20 74 20 72 65 6f 70 65 6e 20 69 74 2e 0a 2a 2a 0a  t reopen it..**.
1cc30 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e 49 64 78  ** The ReopenIdx
1cc40 20 6f 70 63 6f 64 65 20 6d 61 79 20 6f 6e 6c 79   opcode may only
1cc50 20 62 65 20 75 73 65 64 20 77 69 74 68 20 50 35   be used with P5
1cc60 3d 3d 30 20 6f 72 20 50 35 3d 3d 4f 50 46 4c 41  ==0 or P5==OPFLA
1cc70 47 5f 53 45 45 4b 45 51 0a 2a 2a 20 61 6e 64 20  G_SEEKEQ.** and 
1cc80 77 69 74 68 20 50 34 20 62 65 69 6e 67 20 61 20  with P4 being a 
1cc90 50 34 5f 4b 45 59 49 4e 46 4f 20 6f 62 6a 65 63  P4_KEYINFO objec
1cca0 74 2e 20 20 46 75 72 74 68 65 72 6d 6f 72 65 2c  t.  Furthermore,
1ccb0 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 6d 75   the P3 value mu
1ccc0 73 74 0a 2a 2a 20 62 65 20 74 68 65 20 73 61 6d  st.** be the sam
1ccd0 65 20 61 73 20 65 76 65 72 79 20 6f 74 68 65 72  e as every other
1cce0 20 52 65 6f 70 65 6e 49 64 78 20 6f 72 20 4f 70   ReopenIdx or Op
1ccf0 65 6e 52 65 61 64 20 66 6f 72 20 74 68 65 20 73  enRead for the s
1cd00 61 6d 65 20 63 75 72 73 6f 72 0a 2a 2a 20 6e 75  ame cursor.** nu
1cd10 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f  mber..**.** Allo
1cd20 77 65 64 20 50 35 20 62 69 74 73 3a 0a 2a 2a 20  wed P5 bits:.** 
1cd30 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 3e 20 20 3c 62  <ul>.** <li>  <b
1cd40 3e 30 78 30 32 20 4f 50 46 4c 41 47 5f 53 45 45  >0x02 OPFLAG_SEE
1cd50 4b 45 51 3c 2f 62 3e 3a 20 54 68 69 73 20 63 75  KEQ</b>: This cu
1cd60 72 73 6f 72 20 77 69 6c 6c 20 6f 6e 6c 79 20 62  rsor will only b
1cd70 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 20 20  e used for.**   
1cd80 20 20 20 20 65 71 75 61 6c 69 74 79 20 6c 6f 6f      equality loo
1cd90 6b 75 70 73 20 28 69 6d 70 6c 65 6d 65 6e 74 65  kups (implemente
1cda0 64 20 61 73 20 61 20 70 61 69 72 20 6f 66 20 6f  d as a pair of o
1cdb0 70 63 6f 64 65 73 20 4f 50 5f 53 65 65 6b 47 45  pcodes OP_SeekGE
1cdc0 2f 4f 50 5f 49 64 78 47 54 0a 2a 2a 20 20 20 20  /OP_IdxGT.**    
1cdd0 20 20 20 6f 66 20 4f 50 5f 53 65 65 6b 4c 45 2f     of OP_SeekLE/
1cde0 4f 50 5f 49 64 78 47 54 29 0a 2a 2a 20 3c 2f 75  OP_IdxGT).** </u
1cdf0 6c 3e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  l>.**.** See als
1ce00 6f 3a 20 4f 50 5f 4f 70 65 6e 52 65 61 64 2c 20  o: OP_OpenRead, 
1ce10 4f 50 5f 4f 70 65 6e 57 72 69 74 65 0a 2a 2f 0a  OP_OpenWrite.*/.
1ce20 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 57  /* Opcode: OpenW
1ce30 72 69 74 65 20 50 31 20 50 32 20 50 33 20 50 34  rite P1 P2 P3 P4
1ce40 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
1ce50 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a   root=P2 iDb=P3.
1ce60 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61  **.** Open a rea
1ce70 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 6e  d/write cursor n
1ce80 61 6d 65 64 20 50 31 20 6f 6e 20 74 68 65 20 74  amed P1 on the t
1ce90 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68  able or index wh
1cea0 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65  ose root.** page
1ceb0 20 69 73 20 50 32 20 28 6f 72 20 77 68 6f 73 65   is P2 (or whose
1cec0 20 72 6f 6f 74 20 70 61 67 65 20 69 73 20 68 65   root page is he
1ced0 6c 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ld in register P
1cee0 32 20 69 66 20 74 68 65 0a 2a 2a 20 4f 50 46 4c  2 if the.** OPFL
1cef0 41 47 5f 50 32 49 53 52 45 47 20 62 69 74 20 69  AG_P2ISREG bit i
1cf00 73 20 73 65 74 20 69 6e 20 50 35 20 2d 20 73 65  s set in P5 - se
1cf10 65 20 62 65 6c 6f 77 29 2e 0a 2a 2a 0a 2a 2a 20  e below)..**.** 
1cf20 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79  The P4 value may
1cf30 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e   be either an in
1cf40 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29  teger (P4_INT32)
1cf50 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   or a pointer to
1cf60 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74  .** a KeyInfo st
1cf70 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49  ructure (P4_KEYI
1cf80 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61  NFO). If it is a
1cf90 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65   pointer to a Ke
1cfa0 79 49 6e 66 6f 20 0a 2a 2a 20 6f 62 6a 65 63 74  yInfo .** object
1cfb0 2c 20 74 68 65 6e 20 74 61 62 6c 65 20 62 65 69  , then table bei
1cfc0 6e 67 20 6f 70 65 6e 65 64 20 6d 75 73 74 20 62  ng opened must b
1cfd0 65 20 61 6e 20 5b 69 6e 64 65 78 20 62 2d 74 72  e an [index b-tr
1cfe0 65 65 5d 20 77 68 65 72 65 20 74 68 65 0a 2a 2a  ee] where the.**
1cff0 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20   KeyInfo object 
1d000 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74  defines the cont
1d010 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e  ent and collatin
1d020 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f  g .** sequence o
1d030 66 20 74 68 61 74 20 69 6e 64 65 78 20 62 2d 74  f that index b-t
1d040 72 65 65 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ree. Otherwise, 
1d050 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65  if P4 is an inte
1d060 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 74  ger .** value, t
1d070 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65  hen the table be
1d080 69 6e 67 20 6f 70 65 6e 65 64 20 6d 75 73 74 20  ing opened must 
1d090 62 65 20 61 20 5b 74 61 62 6c 65 20 62 2d 74 72  be a [table b-tr
1d0a0 65 65 5d 20 77 69 74 68 20 61 0a 2a 2a 20 6e 75  ee] with a.** nu
1d0b0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
1d0c0 6e 6f 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65  no less than the
1d0d0 20 76 61 6c 75 65 20 6f 66 20 50 34 2e 0a 2a 2a   value of P4..**
1d0e0 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 50 35 20 62  .** Allowed P5 b
1d0f0 69 74 73 3a 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20  its:.** <ul>.** 
1d100 3c 6c 69 3e 20 20 3c 62 3e 30 78 30 32 20 4f 50  <li>  <b>0x02 OP
1d110 46 4c 41 47 5f 53 45 45 4b 45 51 3c 2f 62 3e 3a  FLAG_SEEKEQ</b>:
1d120 20 54 68 69 73 20 63 75 72 73 6f 72 20 77 69 6c   This cursor wil
1d130 6c 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 66  l only be used f
1d140 6f 72 0a 2a 2a 20 20 20 20 20 20 20 65 71 75 61  or.**       equa
1d150 6c 69 74 79 20 6c 6f 6f 6b 75 70 73 20 28 69 6d  lity lookups (im
1d160 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20 70  plemented as a p
1d170 61 69 72 20 6f 66 20 6f 70 63 6f 64 65 73 20 4f  air of opcodes O
1d180 50 5f 53 65 65 6b 47 45 2f 4f 50 5f 49 64 78 47  P_SeekGE/OP_IdxG
1d190 54 0a 2a 2a 20 20 20 20 20 20 20 6f 66 20 4f 50  T.**       of OP
1d1a0 5f 53 65 65 6b 4c 45 2f 4f 50 5f 49 64 78 47 54  _SeekLE/OP_IdxGT
1d1b0 29 0a 2a 2a 20 3c 6c 69 3e 20 20 3c 62 3e 30 78  ).** <li>  <b>0x
1d1c0 30 38 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c  08 OPFLAG_FORDEL
1d1d0 45 54 45 3c 2f 62 3e 3a 20 54 68 69 73 20 63 75  ETE</b>: This cu
1d1e0 72 73 6f 72 20 69 73 20 75 73 65 64 20 6f 6e 6c  rsor is used onl
1d1f0 79 20 74 6f 20 73 65 65 6b 0a 2a 2a 20 20 20 20  y to seek.**    
1d200 20 20 20 61 6e 64 20 73 75 62 73 65 71 75 65 6e     and subsequen
1d210 74 6c 79 20 64 65 6c 65 74 65 20 65 6e 74 72 69  tly delete entri
1d220 65 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 62  es in an index b
1d230 74 72 65 65 2e 20 20 54 68 69 73 20 69 73 20 61  tree.  This is a
1d240 0a 2a 2a 20 20 20 20 20 20 20 68 69 6e 74 20 74  .**       hint t
1d250 6f 20 74 68 65 20 73 74 6f 72 61 67 65 20 65 6e  o the storage en
1d260 67 69 6e 65 20 74 68 61 74 20 74 68 65 20 73 74  gine that the st
1d270 6f 72 61 67 65 20 65 6e 67 69 6e 65 20 69 73 20  orage engine is 
1d280 61 6c 6c 6f 77 65 64 20 74 6f 0a 2a 2a 20 20 20  allowed to.**   
1d290 20 20 20 20 69 67 6e 6f 72 65 2e 20 20 54 68 65      ignore.  The
1d2a0 20 68 69 6e 74 20 69 73 20 6e 6f 74 20 75 73 65   hint is not use
1d2b0 64 20 62 79 20 74 68 65 20 6f 66 66 69 63 69 61  d by the officia
1d2c0 6c 20 53 51 4c 69 74 65 20 62 2a 74 72 65 65 20  l SQLite b*tree 
1d2d0 73 74 6f 72 61 67 65 0a 2a 2a 20 20 20 20 20 20  storage.**      
1d2e0 20 65 6e 67 69 6e 65 2c 20 62 75 74 20 69 73 20   engine, but is 
1d2f0 75 73 65 64 20 62 79 20 43 4f 4d 44 42 32 2e 0a  used by COMDB2..
1d300 2a 2a 20 3c 6c 69 3e 20 20 3c 62 3e 30 78 31 30  ** <li>  <b>0x10
1d310 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 3c   OPFLAG_P2ISREG<
1d320 2f 62 3e 3a 20 55 73 65 20 74 68 65 20 63 6f 6e  /b>: Use the con
1d330 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
1d340 20 50 32 0a 2a 2a 20 20 20 20 20 20 20 61 73 20   P2.**       as 
1d350 74 68 65 20 72 6f 6f 74 20 70 61 67 65 2c 20 6e  the root page, n
1d360 6f 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ot the value of 
1d370 50 32 20 69 74 73 65 6c 66 2e 0a 2a 2a 20 3c 2f  P2 itself..** </
1d380 75 6c 3e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  ul>.**.** This i
1d390 6e 73 74 72 75 63 74 69 6f 6e 20 77 6f 72 6b 73  nstruction works
1d3a0 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64 20 65   like OpenRead e
1d3b0 78 63 65 70 74 20 74 68 61 74 20 69 74 20 6f 70  xcept that it op
1d3c0 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72 0a 2a  ens the cursor.*
1d3d0 2a 20 69 6e 20 72 65 61 64 2f 77 72 69 74 65 20  * in read/write 
1d3e0 6d 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  mode..**.** See 
1d3f0 61 6c 73 6f 3a 20 4f 50 5f 4f 70 65 6e 52 65 61  also: OP_OpenRea
1d400 64 2c 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78 0a  d, OP_ReopenIdx.
1d410 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6f 70 65  */.case OP_Reope
1d420 6e 49 64 78 3a 20 7b 0a 20 20 69 6e 74 20 6e 46  nIdx: {.  int nF
1d430 69 65 6c 64 3b 0a 20 20 4b 65 79 49 6e 66 6f 20  ield;.  KeyInfo 
1d440 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74  *pKeyInfo;.  int
1d450 20 70 32 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a   p2;.  int iDb;.
1d460 20 20 69 6e 74 20 77 72 46 6c 61 67 3b 0a 20 20    int wrFlag;.  
1d470 42 74 72 65 65 20 2a 70 58 3b 0a 20 20 56 64 62  Btree *pX;.  Vdb
1d480 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20  eCursor *pCur;. 
1d490 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 61 73 73   Db *pDb;..  ass
1d4a0 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  ert( pOp->p5==0 
1d4b0 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c  || pOp->p5==OPFL
1d4c0 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a 20 20 61  AG_SEEKEQ );.  a
1d4d0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
1d4e0 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29  pe==P4_KEYINFO )
1d4f0 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70  ;.  pCur = p->ap
1d500 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
1d510 69 66 28 20 70 43 75 72 20 26 26 20 70 43 75 72  if( pCur && pCur
1d520 2d 3e 70 67 6e 6f 52 6f 6f 74 3d 3d 28 75 33 32  ->pgnoRoot==(u32
1d530 29 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20 20 20  )pOp->p2 ){.    
1d540 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 69 44  assert( pCur->iD
1d550 62 3d 3d 70 4f 70 2d 3e 70 33 20 29 3b 20 20 20  b==pOp->p3 );   
1d560 20 20 20 2f 2a 20 47 75 61 72 61 6e 74 65 65 64     /* Guaranteed
1d570 20 62 79 20 74 68 65 20 63 6f 64 65 20 67 65 6e   by the code gen
1d580 65 72 61 74 6f 72 20 2a 2f 0a 20 20 20 20 67 6f  erator */.    go
1d590 74 6f 20 6f 70 65 6e 5f 63 75 72 73 6f 72 5f 73  to open_cursor_s
1d5a0 65 74 5f 68 69 6e 74 73 3b 0a 20 20 7d 0a 20 20  et_hints;.  }.  
1d5b0 2f 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f 72  /* If the cursor
1d5c0 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c   is not currentl
1d5d0 79 20 6f 70 65 6e 20 6f 72 20 69 73 20 6f 70 65  y open or is ope
1d5e0 6e 20 6f 6e 20 61 20 64 69 66 66 65 72 65 6e 74  n on a different
1d5f0 0a 20 20 2a 2a 20 69 6e 64 65 78 2c 20 74 68 65  .  ** index, the
1d600 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 69  n fall through i
1d610 6e 74 6f 20 4f 50 5f 4f 70 65 6e 52 65 61 64 20  nto OP_OpenRead 
1d620 74 6f 20 66 6f 72 63 65 20 61 20 72 65 6f 70 65  to force a reope
1d630 6e 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65  n */.case OP_Ope
1d640 6e 52 65 61 64 3a 0a 63 61 73 65 20 4f 50 5f 4f  nRead:.case OP_O
1d650 70 65 6e 57 72 69 74 65 3a 0a 0a 20 20 61 73 73  penWrite:..  ass
1d660 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
1d670 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 7c  ==OP_OpenWrite |
1d680 7c 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20  | pOp->p5==0 || 
1d690 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f  pOp->p5==OPFLAG_
1d6a0 53 45 45 4b 45 51 20 29 3b 0a 20 20 61 73 73 65  SEEKEQ );.  asse
1d6b0 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
1d6c0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1d6d0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70  p->opcode==OP_Op
1d6e0 65 6e 52 65 61 64 20 7c 7c 20 70 4f 70 2d 3e 6f  enRead || pOp->o
1d6f0 70 63 6f 64 65 3d 3d 4f 50 5f 52 65 6f 70 65 6e  pcode==OP_Reopen
1d700 49 64 78 0a 20 20 20 20 20 20 20 20 20 20 7c 7c  Idx.          ||
1d710 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
1d720 29 3b 0a 0a 20 20 69 66 28 20 70 2d 3e 65 78 70  );..  if( p->exp
1d730 69 72 65 64 3d 3d 31 20 29 7b 0a 20 20 20 20 72  ired==1 ){.    r
1d740 63 20 3d 20 53 51 4c 49 54 45 5f 41 42 4f 52 54  c = SQLITE_ABORT
1d750 5f 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 67  _ROLLBACK;.    g
1d760 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1d770 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 6e  _error;.  }..  n
1d780 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20 70 4b 65  Field = 0;.  pKe
1d790 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20 70 32 20  yInfo = 0;.  p2 
1d7a0 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 44 62  = pOp->p2;.  iDb
1d7b0 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73   = pOp->p3;.  as
1d7c0 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20  sert( iDb>=0 && 
1d7d0 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  iDb<db->nDb );. 
1d7e0 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
1d7f0 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
1d800 2c 20 69 44 62 29 20 29 3b 0a 20 20 70 44 62 20  , iDb) );.  pDb 
1d810 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b  = &db->aDb[iDb];
1d820 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e 70 42 74  .  pX = pDb->pBt
1d830 3b 0a 20 20 61 73 73 65 72 74 28 20 70 58 21 3d  ;.  assert( pX!=
1d840 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  0 );.  if( pOp->
1d850 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57  opcode==OP_OpenW
1d860 72 69 74 65 20 29 7b 0a 20 20 20 20 61 73 73 65  rite ){.    asse
1d870 72 74 28 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45  rt( OPFLAG_FORDE
1d880 4c 45 54 45 3d 3d 42 54 52 45 45 5f 46 4f 52 44  LETE==BTREE_FORD
1d890 45 4c 45 54 45 20 29 3b 0a 20 20 20 20 77 72 46  ELETE );.    wrF
1d8a0 6c 61 67 20 3d 20 42 54 52 45 45 5f 57 52 43 53  lag = BTREE_WRCS
1d8b0 52 20 7c 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f  R | (pOp->p5 & O
1d8c0 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 29  PFLAG_FORDELETE)
1d8d0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71  ;.    assert( sq
1d8e0 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78  lite3SchemaMutex
1d8f0 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29  Held(db, iDb, 0)
1d900 20 29 3b 0a 20 20 20 20 69 66 28 20 70 44 62 2d   );.    if( pDb-
1d910 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66  >pSchema->file_f
1d920 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e 57 72  ormat < p->minWr
1d930 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 29 7b  iteFileFormat ){
1d940 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e 57 72 69  .      p->minWri
1d950 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 3d 20 70  teFileFormat = p
1d960 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c  Db->pSchema->fil
1d970 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20 20 7d 0a  e_format;.    }.
1d980 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77 72 46    }else{.    wrF
1d990 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69  lag = 0;.  }.  i
1d9a0 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  f( pOp->p5 & OPF
1d9b0 4c 41 47 5f 50 32 49 53 52 45 47 20 29 7b 0a 20  LAG_P2ISREG ){. 
1d9c0 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20     assert( p2>0 
1d9d0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
1d9e0 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  2<=(p->nMem+1 - 
1d9f0 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
1da00 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1da10 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57  opcode==OP_OpenW
1da20 72 69 74 65 20 29 3b 0a 20 20 20 20 70 49 6e 32  rite );.    pIn2
1da30 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20   = &aMem[p2];.  
1da40 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
1da50 61 6c 69 64 28 70 49 6e 32 29 20 29 3b 0a 20 20  alid(pIn2) );.  
1da60 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d    assert( (pIn2-
1da70 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
1da80 29 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69  )!=0 );.    sqli
1da90 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
1daa0 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 20 20  rify(pIn2);.    
1dab0 70 32 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e  p2 = (int)pIn2->
1dac0 75 2e 69 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20  u.i;.    /* The 
1dad0 70 32 20 76 61 6c 75 65 20 61 6c 77 61 79 73 20  p2 value always 
1dae0 63 6f 6d 65 73 20 66 72 6f 6d 20 61 20 70 72 69  comes from a pri
1daf0 6f 72 20 4f 50 5f 43 72 65 61 74 65 42 74 72 65  or OP_CreateBtre
1db00 65 20 6f 70 63 6f 64 65 20 61 6e 64 0a 20 20 20  e opcode and.   
1db10 20 2a 2a 20 74 68 61 74 20 6f 70 63 6f 64 65 20   ** that opcode 
1db20 77 69 6c 6c 20 61 6c 77 61 79 73 20 73 65 74 20  will always set 
1db30 74 68 65 20 70 32 20 76 61 6c 75 65 20 74 6f 20  the p2 value to 
1db40 32 20 6f 72 20 6d 6f 72 65 20 6f 72 20 65 6c 73  2 or more or els
1db50 65 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 20 49  e fail..    ** I
1db60 66 20 74 68 65 72 65 20 77 65 72 65 20 61 20 66  f there were a f
1db70 61 69 6c 75 72 65 2c 20 74 68 65 20 70 72 65 70  ailure, the prep
1db80 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 77  ared statement w
1db90 6f 75 6c 64 20 68 61 76 65 20 68 61 6c 74 65 64  ould have halted
1dba0 0a 20 20 20 20 2a 2a 20 62 65 66 6f 72 65 20 72  .    ** before r
1dbb0 65 61 63 68 69 6e 67 20 74 68 69 73 20 69 6e 73  eaching this ins
1dbc0 74 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20  truction. */.   
1dbd0 20 61 73 73 65 72 74 28 20 70 32 3e 3d 32 20 29   assert( p2>=2 )
1dbe0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
1dbf0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49  >p4type==P4_KEYI
1dc00 4e 46 4f 20 29 7b 0a 20 20 20 20 70 4b 65 79 49  NFO ){.    pKeyI
1dc10 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b  nfo = pOp->p4.pK
1dc20 65 79 49 6e 66 6f 3b 0a 20 20 20 20 61 73 73 65  eyInfo;.    asse
1dc30 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e  rt( pKeyInfo->en
1dc40 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20  c==ENC(db) );.  
1dc50 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e    assert( pKeyIn
1dc60 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20  fo->db==db );.  
1dc70 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65 79 49    nField = pKeyI
1dc80 6e 66 6f 2d 3e 6e 41 6c 6c 46 69 65 6c 64 3b 0a  nfo->nAllField;.
1dc90 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d    }else if( pOp-
1dca0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
1dcb0 32 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20  2 ){.    nField 
1dcc0 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d  = pOp->p4.i;.  }
1dcd0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1dce0 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  p1>=0 );.  asser
1dcf0 74 28 20 6e 46 69 65 6c 64 3e 3d 30 20 29 3b 0a  t( nField>=0 );.
1dd00 20 20 74 65 73 74 63 61 73 65 28 20 6e 46 69 65    testcase( nFie
1dd10 6c 64 3d 3d 30 20 29 3b 20 20 2f 2a 20 54 61 62  ld==0 );  /* Tab
1dd20 6c 65 20 77 69 74 68 20 49 4e 54 45 47 45 52 20  le with INTEGER 
1dd30 50 52 49 4d 41 52 59 20 4b 45 59 20 61 6e 64 20  PRIMARY KEY and 
1dd40 6e 6f 74 68 69 6e 67 20 65 6c 73 65 20 2a 2f 0a  nothing else */.
1dd50 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74    pCur = allocat
1dd60 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
1dd70 70 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c  p1, nField, iDb,
1dd80 20 43 55 52 54 59 50 45 5f 42 54 52 45 45 29 3b   CURTYPE_BTREE);
1dd90 0a 20 20 69 66 28 20 70 43 75 72 3d 3d 30 20 29  .  if( pCur==0 )
1dda0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
1ddb0 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20  pCur->nullRow = 
1ddc0 31 3b 0a 20 20 70 43 75 72 2d 3e 69 73 4f 72 64  1;.  pCur->isOrd
1ddd0 65 72 65 64 20 3d 20 31 3b 0a 20 20 70 43 75 72  ered = 1;.  pCur
1dde0 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20 70 32 3b  ->pgnoRoot = p2;
1ddf0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
1de00 45 42 55 47 0a 20 20 70 43 75 72 2d 3e 77 72 46  EBUG.  pCur->wrF
1de10 6c 61 67 20 3d 20 77 72 46 6c 61 67 3b 0a 23 65  lag = wrFlag;.#e
1de20 6e 64 69 66 0a 20 20 72 63 20 3d 20 73 71 6c 69  ndif.  rc = sqli
1de30 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70  te3BtreeCursor(p
1de40 58 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c 20 70  X, p2, wrFlag, p
1de50 4b 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e 75  KeyInfo, pCur->u
1de60 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43  c.pCursor);.  pC
1de70 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70  ur->pKeyInfo = p
1de80 4b 65 79 49 6e 66 6f 3b 0a 20 20 2f 2a 20 53 65  KeyInfo;.  /* Se
1de90 74 20 74 68 65 20 56 64 62 65 43 75 72 73 6f 72  t the VdbeCursor
1dea0 2e 69 73 54 61 62 6c 65 20 76 61 72 69 61 62 6c  .isTable variabl
1deb0 65 2e 20 50 72 65 76 69 6f 75 73 20 76 65 72 73  e. Previous vers
1dec0 69 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20 53 51 4c  ions of.  ** SQL
1ded0 69 74 65 20 75 73 65 64 20 74 6f 20 63 68 65 63  ite used to chec
1dee0 6b 20 69 66 20 74 68 65 20 72 6f 6f 74 2d 70 61  k if the root-pa
1def0 67 65 20 66 6c 61 67 73 20 77 65 72 65 20 73 61  ge flags were sa
1df00 6e 65 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74  ne at this point
1df10 0a 20 20 2a 2a 20 61 6e 64 20 72 65 70 6f 72 74  .  ** and report
1df20 20 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70   database corrup
1df30 74 69 6f 6e 20 69 66 20 74 68 65 79 20 77 65 72  tion if they wer
1df40 65 20 6e 6f 74 2c 20 62 75 74 20 74 68 69 73 20  e not, but this 
1df50 63 68 65 63 6b 20 68 61 73 0a 20 20 2a 2a 20 73  check has.  ** s
1df60 69 6e 63 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20  ince moved into 
1df70 74 68 65 20 62 74 72 65 65 20 6c 61 79 65 72 2e  the btree layer.
1df80 20 20 2a 2f 20 20 0a 20 20 70 43 75 72 2d 3e 69    */  .  pCur->i
1df90 73 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34  sTable = pOp->p4
1dfa0 74 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f  type!=P4_KEYINFO
1dfb0 3b 0a 0a 6f 70 65 6e 5f 63 75 72 73 6f 72 5f 73  ;..open_cursor_s
1dfc0 65 74 5f 68 69 6e 74 73 3a 0a 20 20 61 73 73 65  et_hints:.  asse
1dfd0 72 74 28 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43  rt( OPFLAG_BULKC
1dfe0 53 52 3d 3d 42 54 52 45 45 5f 42 55 4c 4b 4c 4f  SR==BTREE_BULKLO
1dff0 41 44 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  AD );.  assert( 
1e000 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 3d 3d 42  OPFLAG_SEEKEQ==B
1e010 54 52 45 45 5f 53 45 45 4b 5f 45 51 20 29 3b 0a  TREE_SEEK_EQ );.
1e020 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
1e030 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 42 55 4c  >p5 & OPFLAG_BUL
1e040 4b 43 53 52 20 29 3b 0a 23 69 66 64 65 66 20 53  KCSR );.#ifdef S
1e050 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52  QLITE_ENABLE_CUR
1e060 53 4f 52 5f 48 49 4e 54 53 0a 20 20 74 65 73 74  SOR_HINTS.  test
1e070 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 20 26 20  case( pOp->p2 & 
1e080 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b  OPFLAG_SEEKEQ );
1e090 0a 23 65 6e 64 69 66 0a 20 20 73 71 6c 69 74 65  .#endif.  sqlite
1e0a0 33 42 74 72 65 65 43 75 72 73 6f 72 48 69 6e 74  3BtreeCursorHint
1e0b0 46 6c 61 67 73 28 70 43 75 72 2d 3e 75 63 2e 70  Flags(pCur->uc.p
1e0c0 43 75 72 73 6f 72 2c 0a 20 20 20 20 20 20 20 20  Cursor,.        
1e0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e0e0 20 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20         (pOp->p5 
1e0f0 26 20 28 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53  & (OPFLAG_BULKCS
1e100 52 7c 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 29  R|OPFLAG_SEEKEQ)
1e110 29 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  ));.  if( rc ) g
1e120 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1e130 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
1e140 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
1e150 70 65 6e 44 75 70 20 50 31 20 50 32 20 2a 20 2a  penDup P1 P2 * *
1e160 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20   *.**.** Open a 
1e170 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20 74 68  new cursor P1 th
1e180 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  at points to the
1e190 20 73 61 6d 65 20 65 70 68 65 6d 65 72 61 6c 20   same ephemeral 
1e1a0 74 61 62 6c 65 20 61 73 0a 2a 2a 20 63 75 72 73  table as.** curs
1e1b0 6f 72 20 50 32 2e 20 20 54 68 65 20 50 32 20 63  or P2.  The P2 c
1e1c0 75 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65 20  ursor must have 
1e1d0 62 65 65 6e 20 6f 70 65 6e 65 64 20 62 79 20 61  been opened by a
1e1e0 20 70 72 69 6f 72 20 4f 50 5f 4f 70 65 6e 45 70   prior OP_OpenEp
1e1f0 68 65 6d 65 72 61 6c 0a 2a 2a 20 6f 70 63 6f 64  hemeral.** opcod
1e200 65 2e 20 20 4f 6e 6c 79 20 65 70 68 65 6d 65 72  e.  Only ephemer
1e210 61 6c 20 63 75 72 73 6f 72 73 20 6d 61 79 20 62  al cursors may b
1e220 65 20 64 75 70 6c 69 63 61 74 65 64 2e 0a 2a 2a  e duplicated..**
1e230 0a 2a 2a 20 44 75 70 6c 69 63 61 74 65 20 65 70  .** Duplicate ep
1e240 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 73 20  hemeral cursors 
1e250 61 72 65 20 75 73 65 64 20 66 6f 72 20 73 65 6c  are used for sel
1e260 66 2d 6a 6f 69 6e 73 20 6f 66 20 6d 61 74 65 72  f-joins of mater
1e270 69 61 6c 69 7a 65 64 20 76 69 65 77 73 2e 0a 2a  ialized views..*
1e280 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 44 75  /.case OP_OpenDu
1e290 70 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  p: {.  VdbeCurso
1e2a0 72 20 2a 70 4f 72 69 67 3b 20 20 20 20 2f 2a 20  r *pOrig;    /* 
1e2b0 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 63 75 72  The original cur
1e2c0 73 6f 72 20 74 6f 20 62 65 20 64 75 70 6c 69 63  sor to be duplic
1e2d0 61 74 65 64 20 2a 2f 0a 20 20 56 64 62 65 43 75  ated */.  VdbeCu
1e2e0 72 73 6f 72 20 2a 70 43 78 3b 20 20 20 20 20 20  rsor *pCx;      
1e2f0 2f 2a 20 54 68 65 20 6e 65 77 20 63 75 72 73 6f  /* The new curso
1e300 72 20 2a 2f 0a 0a 20 20 70 4f 72 69 67 20 3d 20  r */..  pOrig = 
1e310 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 32  p->apCsr[pOp->p2
1e320 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 72  ];.  assert( pOr
1e330 69 67 2d 3e 70 42 74 78 21 3d 30 20 29 3b 20 20  ig->pBtx!=0 );  
1e340 2f 2a 20 4f 6e 6c 79 20 65 70 68 65 6d 65 72 61  /* Only ephemera
1e350 6c 20 63 75 72 73 6f 72 73 20 63 61 6e 20 62 65  l cursors can be
1e360 20 64 75 70 6c 69 63 61 74 65 64 20 2a 2f 0a 0a   duplicated */..
1e370 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65    pCx = allocate
1e380 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
1e390 31 2c 20 70 4f 72 69 67 2d 3e 6e 46 69 65 6c 64  1, pOrig->nField
1e3a0 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 42 54  , -1, CURTYPE_BT
1e3b0 52 45 45 29 3b 0a 20 20 69 66 28 20 70 43 78 3d  REE);.  if( pCx=
1e3c0 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1e3d0 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77  ;.  pCx->nullRow
1e3e0 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73 45   = 1;.  pCx->isE
1e3f0 70 68 65 6d 65 72 61 6c 20 3d 20 31 3b 0a 20 20  phemeral = 1;.  
1e400 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20  pCx->pKeyInfo = 
1e410 70 4f 72 69 67 2d 3e 70 4b 65 79 49 6e 66 6f 3b  pOrig->pKeyInfo;
1e420 0a 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20  .  pCx->isTable 
1e430 3d 20 70 4f 72 69 67 2d 3e 69 73 54 61 62 6c 65  = pOrig->isTable
1e440 3b 0a 20 20 70 43 78 2d 3e 70 67 6e 6f 52 6f 6f  ;.  pCx->pgnoRoo
1e450 74 20 3d 20 70 4f 72 69 67 2d 3e 70 67 6e 6f 52  t = pOrig->pgnoR
1e460 6f 6f 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  oot;.  rc = sqli
1e470 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70  te3BtreeCursor(p
1e480 4f 72 69 67 2d 3e 70 42 74 78 2c 20 70 43 78 2d  Orig->pBtx, pCx-
1e490 3e 70 67 6e 6f 52 6f 6f 74 2c 20 42 54 52 45 45  >pgnoRoot, BTREE
1e4a0 5f 57 52 43 53 52 2c 0a 20 20 20 20 20 20 20 20  _WRCSR,.        
1e4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4c0 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2c    pCx->pKeyInfo,
1e4d0 20 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72   pCx->uc.pCursor
1e4e0 29 3b 0a 20 20 2f 2a 20 54 68 65 20 73 71 6c 69  );.  /* The sqli
1e4f0 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 29  te3BtreeCursor()
1e500 20 72 6f 75 74 69 6e 65 20 63 61 6e 20 6f 6e 6c   routine can onl
1e510 79 20 66 61 69 6c 20 66 6f 72 20 74 68 65 20 66  y fail for the f
1e520 69 72 73 74 20 63 75 72 73 6f 72 0a 20 20 2a 2a  irst cursor.  **
1e530 20 6f 70 65 6e 65 64 20 66 6f 72 20 61 20 64 61   opened for a da
1e540 74 61 62 61 73 65 2e 20 20 53 69 6e 63 65 20 74  tabase.  Since t
1e550 68 65 72 65 20 69 73 20 61 6c 72 65 61 64 79 20  here is already 
1e560 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72 20 77  an open cursor w
1e570 68 65 6e 20 74 68 69 73 0a 20 20 2a 2a 20 6f 70  hen this.  ** op
1e580 63 6f 64 65 20 69 73 20 72 75 6e 2c 20 74 68 65  code is run, the
1e590 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
1e5a0 73 6f 72 28 29 20 63 61 6e 6e 6f 74 20 66 61 69  sor() cannot fai
1e5b0 6c 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 72  l */.  assert( r
1e5c0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c==SQLITE_OK );.
1e5d0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20    break;.}.../* 
1e5e0 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65  Opcode: OpenEphe
1e5f0 6d 65 72 61 6c 20 50 31 20 50 32 20 2a 20 50 34  meral P1 P2 * P4
1e600 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
1e610 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a   nColumn=P2.**.*
1e620 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72  * Open a new cur
1e630 73 6f 72 20 50 31 20 74 6f 20 61 20 74 72 61 6e  sor P1 to a tran
1e640 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a 20  sient table..** 
1e650 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c  The cursor is al
1e660 77 61 79 73 20 6f 70 65 6e 65 64 20 72 65 61 64  ways opened read
1e670 2f 77 72 69 74 65 20 65 76 65 6e 20 69 66 20 0a  /write even if .
1e680 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ** the main data
1e690 62 61 73 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c  base is read-onl
1e6a0 79 2e 20 20 54 68 65 20 65 70 68 65 6d 65 72 61  y.  The ephemera
1e6b0 6c 0a 2a 2a 20 74 61 62 6c 65 20 69 73 20 64 65  l.** table is de
1e6c0 6c 65 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61  leted automatica
1e6d0 6c 6c 79 20 77 68 65 6e 20 74 68 65 20 63 75 72  lly when the cur
1e6e0 73 6f 72 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a  sor is closed..*
1e6f0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 75 72 73  *.** If the curs
1e700 6f 72 20 50 31 20 69 73 20 61 6c 72 65 61 64 79  or P1 is already
1e710 20 6f 70 65 6e 65 64 20 6f 6e 20 61 6e 20 65 70   opened on an ep
1e720 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 2c 20 74  hemeral table, t
1e730 68 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 63  he table.** is c
1e740 6c 65 61 72 65 64 20 28 61 6c 6c 20 63 6f 6e 74  leared (all cont
1e750 65 6e 74 20 69 73 20 65 72 61 73 65 64 29 2e 0a  ent is erased)..
1e760 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20  **.** P2 is the 
1e770 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
1e780 73 20 69 6e 20 74 68 65 20 65 70 68 65 6d 65 72  s in the ephemer
1e790 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65  al table..** The
1e7a0 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 73 20 74   cursor points t
1e7b0 6f 20 61 20 42 54 72 65 65 20 74 61 62 6c 65 20  o a BTree table 
1e7c0 69 66 20 50 34 3d 3d 30 20 61 6e 64 20 74 6f 20  if P4==0 and to 
1e7d0 61 20 42 54 72 65 65 20 69 6e 64 65 78 0a 2a 2a  a BTree index.**
1e7e0 20 69 66 20 50 34 20 69 73 20 6e 6f 74 20 30 2e   if P4 is not 0.
1e7f0 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e    If P4 is not N
1e800 55 4c 4c 2c 20 69 74 20 70 6f 69 6e 74 73 20 74  ULL, it points t
1e810 6f 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75  o a KeyInfo stru
1e820 63 74 75 72 65 0a 2a 2a 20 74 68 61 74 20 64 65  cture.** that de
1e830 66 69 6e 65 73 20 74 68 65 20 66 6f 72 6d 61 74  fines the format
1e840 20 6f 66 20 6b 65 79 73 20 69 6e 20 74 68 65 20   of keys in the 
1e850 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  index..**.** The
1e860 20 50 35 20 70 61 72 61 6d 65 74 65 72 20 63 61   P5 parameter ca
1e870 6e 20 62 65 20 61 20 6d 61 73 6b 20 6f 66 20 74  n be a mask of t
1e880 68 65 20 42 54 52 45 45 5f 2a 20 66 6c 61 67 73  he BTREE_* flags
1e890 20 64 65 66 69 6e 65 64 0a 2a 2a 20 69 6e 20 62   defined.** in b
1e8a0 74 72 65 65 2e 68 2e 20 20 54 68 65 73 65 20 66  tree.h.  These f
1e8b0 6c 61 67 73 20 63 6f 6e 74 72 6f 6c 20 61 73 70  lags control asp
1e8c0 65 63 74 73 20 6f 66 20 74 68 65 20 6f 70 65 72  ects of the oper
1e8d0 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  ation of.** the 
1e8e0 62 74 72 65 65 2e 20 20 54 68 65 20 42 54 52 45  btree.  The BTRE
1e8f0 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 61  E_OMIT_JOURNAL a
1e900 6e 64 20 42 54 52 45 45 5f 53 49 4e 47 4c 45 20  nd BTREE_SINGLE 
1e910 66 6c 61 67 73 20 61 72 65 0a 2a 2a 20 61 64 64  flags are.** add
1e920 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ed automatically
1e930 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
1e940 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 20 50 31  OpenAutoindex P1
1e950 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
1e960 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d  nopsis: nColumn=
1e970 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  P2.**.** This op
1e980 63 6f 64 65 20 77 6f 72 6b 73 20 74 68 65 20 73  code works the s
1e990 61 6d 65 20 61 73 20 4f 50 5f 4f 70 65 6e 45 70  ame as OP_OpenEp
1e9a0 68 65 6d 65 72 61 6c 2e 20 20 49 74 20 68 61 73  hemeral.  It has
1e9b0 20 61 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20   a.** different 
1e9c0 6e 61 6d 65 20 74 6f 20 64 69 73 74 69 6e 67 75  name to distingu
1e9d0 69 73 68 20 69 74 73 20 75 73 65 2e 20 20 54 61  ish its use.  Ta
1e9e0 62 6c 65 73 20 63 72 65 61 74 65 64 20 75 73 69  bles created usi
1e9f0 6e 67 0a 2a 2a 20 62 79 20 74 68 69 73 20 6f 70  ng.** by this op
1ea00 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65  code will be use
1ea10 64 20 66 6f 72 20 61 75 74 6f 6d 61 74 69 63 61  d for automatica
1ea20 6c 6c 79 20 63 72 65 61 74 65 64 20 74 72 61 6e  lly created tran
1ea30 73 69 65 6e 74 0a 2a 2a 20 69 6e 64 69 63 65 73  sient.** indices
1ea40 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63 61   in joins..*/.ca
1ea50 73 65 20 4f 50 5f 4f 70 65 6e 41 75 74 6f 69 6e  se OP_OpenAutoin
1ea60 64 65 78 3a 20 0a 63 61 73 65 20 4f 50 5f 4f 70  dex: .case OP_Op
1ea70 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b 0a 20  enEphemeral: {. 
1ea80 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78   VdbeCursor *pCx
1ea90 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65  ;.  KeyInfo *pKe
1eaa0 79 49 6e 66 6f 3b 0a 0a 20 20 73 74 61 74 69 63  yInfo;..  static
1eab0 20 63 6f 6e 73 74 20 69 6e 74 20 76 66 73 46 6c   const int vfsFl
1eac0 61 67 73 20 3d 20 0a 20 20 20 20 20 20 53 51 4c  ags = .      SQL
1ead0 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49  ITE_OPEN_READWRI
1eae0 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54  TE |.      SQLIT
1eaf0 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20 7c 0a  E_OPEN_CREATE |.
1eb00 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
1eb10 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a 20 20  N_EXCLUSIVE |.  
1eb20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
1eb30 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a  DELETEONCLOSE |.
1eb40 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
1eb50 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42 3b 0a  N_TRANSIENT_DB;.
1eb60 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1eb70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  1>=0 );.  assert
1eb80 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a  ( pOp->p2>=0 );.
1eb90 20 20 70 43 78 20 3d 20 70 2d 3e 61 70 43 73 72    pCx = p->apCsr
1eba0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
1ebb0 20 70 43 78 20 29 7b 0a 20 20 20 20 2f 2a 20 49   pCx ){.    /* I
1ebc0 66 20 74 68 65 20 65 70 68 65 72 6d 65 72 61 6c  f the ephermeral
1ebd0 20 74 61 62 6c 65 20 69 73 20 61 6c 72 65 61 64   table is alread
1ebe0 79 20 6f 70 65 6e 2c 20 65 72 61 73 65 20 61 6c  y open, erase al
1ebf0 6c 20 65 78 69 73 74 69 6e 67 20 63 6f 6e 74 65  l existing conte
1ec00 6e 74 0a 20 20 20 20 2a 2a 20 73 6f 20 74 68 61  nt.    ** so tha
1ec10 74 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 65  t the table is e
1ec20 6d 70 74 79 20 61 67 61 69 6e 2c 20 72 61 74 68  mpty again, rath
1ec30 65 72 20 74 68 61 6e 20 63 72 65 61 74 69 6e 67  er than creating
1ec40 20 61 20 6e 65 77 20 74 61 62 6c 65 2e 20 2a 2f   a new table. */
1ec50 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
1ec60 33 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65  3BtreeClearTable
1ec70 28 70 43 78 2d 3e 70 42 74 78 2c 20 70 43 78 2d  (pCx->pBtx, pCx-
1ec80 3e 70 67 6e 6f 52 6f 6f 74 2c 20 30 29 3b 0a 20  >pgnoRoot, 0);. 
1ec90 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 43 78 20   }else{.    pCx 
1eca0 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
1ecb0 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  (p, pOp->p1, pOp
1ecc0 2d 3e 70 32 2c 20 2d 31 2c 20 43 55 52 54 59 50  ->p2, -1, CURTYP
1ecd0 45 5f 42 54 52 45 45 29 3b 0a 20 20 20 20 69 66  E_BTREE);.    if
1ece0 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20  ( pCx==0 ) goto 
1ecf0 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 70 43 78 2d  no_mem;.    pCx-
1ed00 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
1ed10 20 20 70 43 78 2d 3e 69 73 45 70 68 65 6d 65 72    pCx->isEphemer
1ed20 61 6c 20 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d  al = 1;.    rc =
1ed30 20 73 71 6c 69 74 65 33 42 74 72 65 65 4f 70 65   sqlite3BtreeOpe
1ed40 6e 28 64 62 2d 3e 70 56 66 73 2c 20 30 2c 20 64  n(db->pVfs, 0, d
1ed50 62 2c 20 26 70 43 78 2d 3e 70 42 74 78 2c 20 0a  b, &pCx->pBtx, .
1ed60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed70 20 20 20 20 20 20 20 20 20 20 42 54 52 45 45 5f            BTREE_
1ed80 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20 42  OMIT_JOURNAL | B
1ed90 54 52 45 45 5f 53 49 4e 47 4c 45 20 7c 20 70 4f  TREE_SINGLE | pO
1eda0 70 2d 3e 70 35 2c 0a 20 20 20 20 20 20 20 20 20  p->p5,.         
1edb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1edc0 20 76 66 73 46 6c 61 67 73 29 3b 0a 20 20 20 20   vfsFlags);.    
1edd0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
1ede0 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  K ){.      rc = 
1edf0 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69  sqlite3BtreeBegi
1ee00 6e 54 72 61 6e 73 28 70 43 78 2d 3e 70 42 74 78  nTrans(pCx->pBtx
1ee10 2c 20 31 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20  , 1, 0);.    }. 
1ee20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
1ee30 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 2f 2a  E_OK ){.      /*
1ee40 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20   If a transient 
1ee50 69 6e 64 65 78 20 69 73 20 72 65 71 75 69 72 65  index is require
1ee60 64 2c 20 63 72 65 61 74 65 20 69 74 20 62 79 20  d, create it by 
1ee70 63 61 6c 6c 69 6e 67 0a 20 20 20 20 20 20 2a 2a  calling.      **
1ee80 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65   sqlite3BtreeCre
1ee90 61 74 65 54 61 62 6c 65 28 29 20 77 69 74 68 20  ateTable() with 
1eea0 74 68 65 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45  the BTREE_BLOBKE
1eeb0 59 20 66 6c 61 67 20 62 65 66 6f 72 65 0a 20 20  Y flag before.  
1eec0 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69      ** opening i
1eed0 74 2e 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e  t. If a transien
1eee0 74 20 74 61 62 6c 65 20 69 73 20 72 65 71 75 69  t table is requi
1eef0 72 65 64 2c 20 6a 75 73 74 20 75 73 65 20 74 68  red, just use th
1ef00 65 0a 20 20 20 20 20 20 2a 2a 20 61 75 74 6f 6d  e.      ** autom
1ef10 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64  atically created
1ef20 20 74 61 62 6c 65 20 77 69 74 68 20 72 6f 6f 74   table with root
1ef30 2d 70 61 67 65 20 31 20 28 61 6e 20 42 4c 4f 42  -page 1 (an BLOB
1ef40 5f 49 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a  _INTKEY table)..
1ef50 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
1ef60 66 28 20 28 70 43 78 2d 3e 70 4b 65 79 49 6e 66  f( (pCx->pKeyInf
1ef70 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70  o = pKeyInfo = p
1ef80 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 29  Op->p4.pKeyInfo)
1ef90 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  !=0 ){.        a
1efa0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
1efb0 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29  pe==P4_KEYINFO )
1efc0 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  ;.        rc = s
1efd0 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74  qlite3BtreeCreat
1efe0 65 54 61 62 6c 65 28 70 43 78 2d 3e 70 42 74 78  eTable(pCx->pBtx
1eff0 2c 20 28 69 6e 74 2a 29 26 70 43 78 2d 3e 70 67  , (int*)&pCx->pg
1f000 6e 6f 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20  noRoot,.        
1f010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f020 20 20 20 20 20 20 20 20 20 20 20 20 20 42 54 52               BTR
1f030 45 45 5f 42 4c 4f 42 4b 45 59 20 7c 20 70 4f 70  EE_BLOBKEY | pOp
1f040 2d 3e 70 35 29 3b 20 0a 20 20 20 20 20 20 20 20  ->p5); .        
1f050 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
1f060 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61  K ){.          a
1f070 73 73 65 72 74 28 20 70 43 78 2d 3e 70 67 6e 6f  ssert( pCx->pgno
1f080 52 6f 6f 74 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f  Root==MASTER_ROO
1f090 54 2b 31 20 29 3b 0a 20 20 20 20 20 20 20 20 20  T+1 );.         
1f0a0 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66   assert( pKeyInf
1f0b0 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20  o->db==db );.   
1f0c0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
1f0d0 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e  KeyInfo->enc==EN
1f0e0 43 28 64 62 29 20 29 3b 0a 20 20 20 20 20 20 20  C(db) );.       
1f0f0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1f100 74 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e  treeCursor(pCx->
1f110 70 42 74 78 2c 20 70 43 78 2d 3e 70 67 6e 6f 52  pBtx, pCx->pgnoR
1f120 6f 6f 74 2c 20 42 54 52 45 45 5f 57 52 43 53 52  oot, BTREE_WRCSR
1f130 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1f140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f150 20 20 20 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43      pKeyInfo, pC
1f160 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a  x->uc.pCursor);.
1f170 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1f180 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d    pCx->isTable =
1f190 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   0;.      }else{
1f1a0 0a 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70 67  .        pCx->pg
1f1b0 6e 6f 52 6f 6f 74 20 3d 20 4d 41 53 54 45 52 5f  noRoot = MASTER_
1f1c0 52 4f 4f 54 3b 0a 20 20 20 20 20 20 20 20 72 63  ROOT;.        rc
1f1d0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
1f1e0 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 78 2c  ursor(pCx->pBtx,
1f1f0 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20 42 54   MASTER_ROOT, BT
1f200 52 45 45 5f 57 52 43 53 52 2c 0a 20 20 20 20 20  REE_WRCSR,.     
1f210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f220 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 70 43             0, pC
1f230 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a  x->uc.pCursor);.
1f240 20 20 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54          pCx->isT
1f250 61 62 6c 65 20 3d 20 31 3b 0a 20 20 20 20 20 20  able = 1;.      
1f260 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 78 2d  }.    }.    pCx-
1f270 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 28 70 4f  >isOrdered = (pO
1f280 70 2d 3e 70 35 21 3d 42 54 52 45 45 5f 55 4e 4f  p->p5!=BTREE_UNO
1f290 52 44 45 52 45 44 29 3b 0a 20 20 7d 0a 20 20 69  RDERED);.  }.  i
1f2a0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
1f2b0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1f2c0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1f2d0 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 4f 70  Opcode: SorterOp
1f2e0 65 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  en P1 P2 P3 P4 *
1f2f0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
1f300 64 65 20 77 6f 72 6b 73 20 6c 69 6b 65 20 4f 50  de works like OP
1f310 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 65  _OpenEphemeral e
1f320 78 63 65 70 74 20 74 68 61 74 20 69 74 20 6f 70  xcept that it op
1f330 65 6e 73 0a 2a 2a 20 61 20 74 72 61 6e 73 69 65  ens.** a transie
1f340 6e 74 20 69 6e 64 65 78 20 74 68 61 74 20 69 73  nt index that is
1f350 20 73 70 65 63 69 66 69 63 61 6c 6c 79 20 64 65   specifically de
1f360 73 69 67 6e 65 64 20 74 6f 20 73 6f 72 74 20 6c  signed to sort l
1f370 61 72 67 65 0a 2a 2a 20 74 61 62 6c 65 73 20 75  arge.** tables u
1f380 73 69 6e 67 20 61 6e 20 65 78 74 65 72 6e 61 6c  sing an external
1f390 20 6d 65 72 67 65 2d 73 6f 72 74 20 61 6c 67 6f   merge-sort algo
1f3a0 72 69 74 68 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  rithm..**.** If 
1f3b0 61 72 67 75 6d 65 6e 74 20 50 33 20 69 73 20 6e  argument P3 is n
1f3c0 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74  on-zero, then it
1f3d0 20 69 6e 64 69 63 61 74 65 73 20 74 68 61 74 20   indicates that 
1f3e0 74 68 65 20 73 6f 72 74 65 72 20 6d 61 79 0a 2a  the sorter may.*
1f3f0 2a 20 61 73 73 75 6d 65 20 74 68 61 74 20 61 20  * assume that a 
1f400 73 74 61 62 6c 65 20 73 6f 72 74 20 63 6f 6e 73  stable sort cons
1f410 69 64 65 72 69 6e 67 20 74 68 65 20 66 69 72 73  idering the firs
1f420 74 20 50 33 20 66 69 65 6c 64 73 20 6f 66 20 65  t P3 fields of e
1f430 61 63 68 0a 2a 2a 20 6b 65 79 20 69 73 20 73 75  ach.** key is su
1f440 66 66 69 63 69 65 6e 74 20 74 6f 20 70 72 6f 64  fficient to prod
1f450 75 63 65 20 74 68 65 20 72 65 71 75 69 72 65 64  uce the required
1f460 20 72 65 73 75 6c 74 73 2e 0a 2a 2f 0a 63 61 73   results..*/.cas
1f470 65 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 3a  e OP_SorterOpen:
1f480 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
1f490 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28  *pCx;..  assert(
1f4a0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20   pOp->p1>=0 );. 
1f4b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
1f4c0 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61  >=0 );.  pCx = a
1f4d0 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c  llocateCursor(p,
1f4e0 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
1f4f0 32 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 53  2, -1, CURTYPE_S
1f500 4f 52 54 45 52 29 3b 0a 20 20 69 66 28 20 70 43  ORTER);.  if( pC
1f510 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  x==0 ) goto no_m
1f520 65 6d 3b 0a 20 20 70 43 78 2d 3e 70 4b 65 79 49  em;.  pCx->pKeyI
1f530 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b  nfo = pOp->p4.pK
1f540 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74  eyInfo;.  assert
1f550 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d  ( pCx->pKeyInfo-
1f560 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 61 73 73  >db==db );.  ass
1f570 65 72 74 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e  ert( pCx->pKeyIn
1f580 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29  fo->enc==ENC(db)
1f590 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
1f5a0 65 33 56 64 62 65 53 6f 72 74 65 72 49 6e 69 74  e3VdbeSorterInit
1f5b0 28 64 62 2c 20 70 4f 70 2d 3e 70 33 2c 20 70 43  (db, pOp->p3, pC
1f5c0 78 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  x);.  if( rc ) g
1f5d0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1f5e0 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
1f5f0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
1f600 65 71 75 65 6e 63 65 54 65 73 74 20 50 31 20 50  equenceTest P1 P
1f610 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
1f620 73 69 73 3a 20 69 66 28 20 63 75 72 73 6f 72 5b  sis: if( cursor[
1f630 50 31 5d 2e 63 74 72 2b 2b 20 29 20 70 63 20 3d  P1].ctr++ ) pc =
1f640 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20   P2.**.** P1 is 
1f650 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 2e  a sorter cursor.
1f660 20 49 66 20 74 68 65 20 73 65 71 75 65 6e 63 65   If the sequence
1f670 20 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72   counter is curr
1f680 65 6e 74 6c 79 20 7a 65 72 6f 2c 20 6a 75 6d 70  ently zero, jump
1f690 0a 2a 2a 20 74 6f 20 50 32 2e 20 52 65 67 61 72  .** to P2. Regar
1f6a0 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72  dless of whether
1f6b0 20 6f 72 20 6e 6f 74 20 74 68 65 20 6a 75 6d 70   or not the jump
1f6c0 20 69 73 20 74 61 6b 65 6e 2c 20 69 6e 63 72 65   is taken, incre
1f6d0 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 74 68 65 20  ment the.** the 
1f6e0 73 65 71 75 65 6e 63 65 20 76 61 6c 75 65 2e 0a  sequence value..
1f6f0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75 65  */.case OP_Seque
1f700 6e 63 65 54 65 73 74 3a 20 7b 0a 20 20 56 64 62  nceTest: {.  Vdb
1f710 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61  eCursor *pC;.  a
1f720 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1f730 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1f740 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
1f750 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1f760 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69  p1];.  assert( i
1f770 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20  sSorter(pC) );. 
1f780 20 69 66 28 20 28 70 43 2d 3e 73 65 71 43 6f 75   if( (pC->seqCou
1f790 6e 74 2b 2b 29 3d 3d 30 20 29 7b 0a 20 20 20 20  nt++)==0 ){.    
1f7a0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
1f7b0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1f7c0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
1f7d0 50 73 65 75 64 6f 20 50 31 20 50 32 20 50 33 20  Pseudo P1 P2 P3 
1f7e0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
1f7f0 20 50 33 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 72   P3 columns in r
1f800 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20  [P2].**.** Open 
1f810 61 20 6e 65 77 20 63 75 72 73 6f 72 20 74 68 61  a new cursor tha
1f820 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66 61  t points to a fa
1f830 6b 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f  ke table that co
1f840 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a  ntains a single.
1f850 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74 61 2e 20  ** row of data. 
1f860 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   The content of 
1f870 74 68 61 74 20 6f 6e 65 20 72 6f 77 20 69 73 20  that one row is 
1f880 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 6d  the content of m
1f890 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69 73 74 65  emory.** registe
1f8a0 72 20 50 32 2e 20 20 49 6e 20 6f 74 68 65 72 20  r P2.  In other 
1f8b0 77 6f 72 64 73 2c 20 63 75 72 73 6f 72 20 50 31  words, cursor P1
1f8c0 20 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61   becomes an alia
1f8d0 73 20 66 6f 72 20 74 68 65 20 0a 2a 2a 20 4d 45  s for the .** ME
1f8e0 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 20 63  M_Blob content c
1f8f0 6f 6e 74 61 69 6e 65 64 20 69 6e 20 72 65 67 69  ontained in regi
1f900 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41  ster P2..**.** A
1f910 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 72   pseudo-table cr
1f920 65 61 74 65 64 20 62 79 20 74 68 69 73 20 6f 70  eated by this op
1f930 63 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20  code is used to 
1f940 68 6f 6c 64 20 61 20 73 69 6e 67 6c 65 0a 2a 2a  hold a single.**
1f950 20 72 6f 77 20 6f 75 74 70 75 74 20 66 72 6f 6d   row output from
1f960 20 74 68 65 20 73 6f 72 74 65 72 20 73 6f 20 74   the sorter so t
1f970 68 61 74 20 74 68 65 20 72 6f 77 20 63 61 6e 20  hat the row can 
1f980 62 65 20 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e  be decomposed in
1f990 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c  to.** individual
1f9a0 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74   columns using t
1f9b0 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  he OP_Column opc
1f9c0 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c  ode.  The OP_Col
1f9d0 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73  umn opcode.** is
1f9e0 20 74 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72   the only cursor
1f9f0 20 6f 70 63 6f 64 65 20 74 68 61 74 20 77 6f 72   opcode that wor
1fa00 6b 73 20 77 69 74 68 20 61 20 70 73 65 75 64 6f  ks with a pseudo
1fa10 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33  -table..**.** P3
1fa20 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
1fa30 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
1fa40 72 65 63 6f 72 64 73 20 74 68 61 74 20 77 69 6c  records that wil
1fa50 6c 20 62 65 20 73 74 6f 72 65 64 20 62 79 0a 2a  l be stored by.*
1fa60 2a 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62  * the pseudo-tab
1fa70 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  le..*/.case OP_O
1fa80 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56  penPseudo: {.  V
1fa90 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a  dbeCursor *pCx;.
1faa0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1fab0 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  p1>=0 );.  asser
1fac0 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 29 3b  t( pOp->p3>=0 );
1fad0 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74  .  pCx = allocat
1fae0 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
1faf0 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c  p1, pOp->p3, -1,
1fb00 20 43 55 52 54 59 50 45 5f 50 53 45 55 44 4f 29   CURTYPE_PSEUDO)
1fb10 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29  ;.  if( pCx==0 )
1fb20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
1fb30 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31  pCx->nullRow = 1
1fb40 3b 0a 20 20 70 43 78 2d 3e 73 65 65 6b 52 65 73  ;.  pCx->seekRes
1fb50 75 6c 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  ult = pOp->p2;. 
1fb60 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20   pCx->isTable = 
1fb70 31 3b 0a 20 20 2f 2a 20 47 69 76 65 20 74 68 69  1;.  /* Give thi
1fb80 73 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 20  s pseudo-cursor 
1fb90 61 20 66 61 6b 65 20 42 74 43 75 72 73 6f 72 20  a fake BtCursor 
1fba0 70 6f 69 6e 74 65 72 20 73 6f 20 74 68 61 74 20  pointer so that 
1fbb0 70 43 78 0a 20 20 2a 2a 20 63 61 6e 20 62 65 20  pCx.  ** can be 
1fbc0 73 61 66 65 6c 79 20 70 61 73 73 65 64 20 74 6f  safely passed to
1fbd0 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
1fbe0 6f 72 4d 6f 76 65 74 6f 28 29 2e 20 20 54 68 69  orMoveto().  Thi
1fbf0 73 20 61 76 6f 69 64 73 20 61 20 74 65 73 74 0a  s avoids a test.
1fc00 20 20 2a 2a 20 66 6f 72 20 70 43 78 2d 3e 65 43    ** for pCx->eC
1fc10 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
1fc20 42 54 52 45 45 20 69 6e 73 69 64 65 20 6f 66 20  BTREE inside of 
1fc30 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
1fc40 72 4d 6f 76 65 74 6f 28 29 0a 20 20 2a 2a 20 77  rMoveto().  ** w
1fc50 68 69 63 68 20 69 73 20 61 20 70 65 72 66 6f 72  hich is a perfor
1fc60 6d 61 6e 63 65 20 6f 70 74 69 6d 69 7a 61 74 69  mance optimizati
1fc70 6f 6e 20 2a 2f 0a 20 20 70 43 78 2d 3e 75 63 2e  on */.  pCx->uc.
1fc80 70 43 75 72 73 6f 72 20 3d 20 73 71 6c 69 74 65  pCursor = sqlite
1fc90 33 42 74 72 65 65 46 61 6b 65 56 61 6c 69 64 43  3BtreeFakeValidC
1fca0 75 72 73 6f 72 28 29 3b 0a 20 20 61 73 73 65 72  ursor();.  asser
1fcb0 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b  t( pOp->p5==0 );
1fcc0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1fcd0 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50 31  Opcode: Close P1
1fce0 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43   * * * *.**.** C
1fcf0 6c 6f 73 65 20 61 20 63 75 72 73 6f 72 20 70 72  lose a cursor pr
1fd00 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20  eviously opened 
1fd10 61 73 20 50 31 2e 20 20 49 66 20 50 31 20 69 73  as P1.  If P1 is
1fd20 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74 6c   not.** currentl
1fd30 79 20 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e 73  y open, this ins
1fd40 74 72 75 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f  truction is a no
1fd50 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  -op..*/.case OP_
1fd60 43 6c 6f 73 65 3a 20 7b 0a 20 20 61 73 73 65 72  Close: {.  asser
1fd70 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1fd80 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
1fd90 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  sor );.  sqlite3
1fda0 56 64 62 65 46 72 65 65 43 75 72 73 6f 72 28 70  VdbeFreeCursor(p
1fdb0 2c 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  , p->apCsr[pOp->
1fdc0 70 31 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72  p1]);.  p->apCsr
1fdd0 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20  [pOp->p1] = 0;. 
1fde0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 64 65   break;.}..#ifde
1fdf0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
1fe00 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f 4d 41 53 4b  COLUMN_USED_MASK
1fe10 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75  ./* Opcode: Colu
1fe20 6d 6e 73 55 73 65 64 20 50 31 20 2a 20 2a 20 50  mnsUsed P1 * * P
1fe30 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  4 *.**.** This o
1fe40 70 63 6f 64 65 20 28 77 68 69 63 68 20 6f 6e 6c  pcode (which onl
1fe50 79 20 65 78 69 73 74 73 20 69 66 20 53 51 4c 69  y exists if SQLi
1fe60 74 65 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 20  te was compiled 
1fe70 77 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 45  with.** SQLITE_E
1fe80 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45  NABLE_COLUMN_USE
1fe90 44 5f 4d 41 53 4b 29 20 69 64 65 6e 74 69 66 69  D_MASK) identifi
1fea0 65 73 20 77 68 69 63 68 20 63 6f 6c 75 6d 6e 73  es which columns
1feb0 20 6f 66 20 74 68 65 0a 2a 2a 20 74 61 62 6c 65   of the.** table
1fec0 20 6f 72 20 69 6e 64 65 78 20 66 6f 72 20 63 75   or index for cu
1fed0 72 73 6f 72 20 50 31 20 61 72 65 20 75 73 65 64  rsor P1 are used
1fee0 2e 20 20 50 34 20 69 73 20 61 20 36 34 2d 62 69  .  P4 is a 64-bi
1fef0 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20 28 50 34  t integer.** (P4
1ff00 5f 49 4e 54 36 34 29 20 69 6e 20 77 68 69 63 68  _INT64) in which
1ff10 20 74 68 65 20 66 69 72 73 74 20 36 33 20 62 69   the first 63 bi
1ff20 74 73 20 61 72 65 20 6f 6e 65 20 66 6f 72 20 65  ts are one for e
1ff30 61 63 68 20 6f 66 20 74 68 65 0a 2a 2a 20 66 69  ach of the.** fi
1ff40 72 73 74 20 36 33 20 63 6f 6c 75 6d 6e 73 20 6f  rst 63 columns o
1ff50 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
1ff60 6e 64 65 78 20 74 68 61 74 20 61 72 65 20 61 63  ndex that are ac
1ff70 74 75 61 6c 6c 79 20 75 73 65 64 0a 2a 2a 20 62  tually used.** b
1ff80 79 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 54  y the cursor.  T
1ff90 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69  he high-order bi
1ffa0 74 20 69 73 20 73 65 74 20 69 66 20 61 6e 79 20  t is set if any 
1ffb0 63 6f 6c 75 6d 6e 20 61 66 74 65 72 0a 2a 2a 20  column after.** 
1ffc0 74 68 65 20 36 34 74 68 20 69 73 20 75 73 65 64  the 64th is used
1ffd0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c  ..*/.case OP_Col
1ffe0 75 6d 6e 73 55 73 65 64 3a 20 7b 0a 20 20 56 64  umnsUsed: {.  Vd
1fff0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
20000 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
20010 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
20020 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
20030 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
20040 0a 20 20 70 43 2d 3e 6d 61 73 6b 55 73 65 64 20  .  pC->maskUsed 
20050 3d 20 2a 28 75 36 34 2a 29 70 4f 70 2d 3e 70 34  = *(u64*)pOp->p4
20060 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a  .pI64;.  break;.
20070 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63  }.#endif../* Opc
20080 6f 64 65 3a 20 53 65 65 6b 47 45 20 50 31 20 50  ode: SeekGE P1 P
20090 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
200a0 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
200b0 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72  P4].**.** If cur
200c0 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f  sor P1 refers to
200d0 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42   an SQL table (B
200e0 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20  -Tree that uses 
200f0 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a  integer keys), .
20100 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  ** use the value
20110 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
20120 61 73 20 74 68 65 20 6b 65 79 2e 20 20 49 66 20  as the key.  If 
20130 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
20140 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69   .** to an SQL i
20150 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73  ndex, then P3 is
20160 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e   the first in an
20170 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67   array of P4 reg
20180 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20  isters .** that 
20190 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75  are used as an u
201a0 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
201b0 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69  y. .**.** Reposi
201c0 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73  tion cursor P1 s
201d0 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74  o that  it point
201e0 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73  s to the smalles
201f0 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  t entry that .**
20200 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
20210 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
20220 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74   key value. If t
20230 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
20240 72 64 73 20 0a 2a 2a 20 67 72 65 61 74 65 72 20  rds .** greater 
20250 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
20260 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20   the key and P2 
20270 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
20280 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
20290 0a 2a 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f  .** If the curso
202a0 72 20 50 31 20 77 61 73 20 6f 70 65 6e 65 64 20  r P1 was opened 
202b0 75 73 69 6e 67 20 74 68 65 20 4f 50 46 4c 41 47  using the OPFLAG
202c0 5f 53 45 45 4b 45 51 20 66 6c 61 67 2c 20 74 68  _SEEKEQ flag, th
202d0 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64  en this.** opcod
202e0 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 6c 61  e will always la
202f0 6e 64 20 6f 6e 20 61 20 72 65 63 6f 72 64 20 74  nd on a record t
20300 68 61 74 20 65 71 75 61 6c 6c 79 20 65 71 75 61  hat equally equa
20310 6c 73 20 74 68 65 20 6b 65 79 2c 20 6f 72 0a 2a  ls the key, or.*
20320 2a 20 65 6c 73 65 20 6a 75 6d 70 20 69 6d 6d 65  * else jump imme
20330 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20  diately to P2.  
20340 57 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20  When the cursor 
20350 69 73 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51  is OPFLAG_SEEKEQ
20360 2c 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65  , this.** opcode
20370 20 6d 75 73 74 20 62 65 20 66 6f 6c 6c 6f 77 65   must be followe
20380 64 20 62 79 20 61 6e 20 49 64 78 4c 45 20 6f 70  d by an IdxLE op
20390 63 6f 64 65 20 77 69 74 68 20 74 68 65 20 73 61  code with the sa
203a0 6d 65 20 61 72 67 75 6d 65 6e 74 73 2e 0a 2a 2a  me arguments..**
203b0 20 54 68 65 20 49 64 78 4c 45 20 6f 70 63 6f 64   The IdxLE opcod
203c0 65 20 77 69 6c 6c 20 62 65 20 73 6b 69 70 70 65  e will be skippe
203d0 64 20 69 66 20 74 68 69 73 20 6f 70 63 6f 64 65  d if this opcode
203e0 20 73 75 63 63 65 65 64 73 2c 20 62 75 74 20 74   succeeds, but t
203f0 68 65 0a 2a 2a 20 49 64 78 4c 45 20 6f 70 63 6f  he.** IdxLE opco
20400 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20  de will be used 
20410 6f 6e 20 73 75 62 73 65 71 75 65 6e 74 20 6c 6f  on subsequent lo
20420 6f 70 20 69 74 65 72 61 74 69 6f 6e 73 2e 0a 2a  op iterations..*
20430 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
20440 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
20450 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  or configured to
20460 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64   move in forward
20470 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20   order,.** from 
20480 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f  the beginning to
20490 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49  ward the end.  I
204a0 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
204b0 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20  he cursor is.** 
204c0 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73  configured to us
204d0 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76  e Next, not Prev
204e0 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
204f0 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
20500 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47  d, SeekLt, SeekG
20510 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20  t, SeekLe.*/./* 
20520 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 54 20 50  Opcode: SeekGT P
20530 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
20540 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
20550 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20  P3@P4].**.** If 
20560 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
20570 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   to an SQL table
20580 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73   (B-Tree that us
20590 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29  es integer keys)
205a0 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61  , .** use the va
205b0 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
205c0 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20  P3 as a key. If 
205d0 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
205e0 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69   .** to an SQL i
205f0 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73  ndex, then P3 is
20600 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e   the first in an
20610 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67   array of P4 reg
20620 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20  isters .** that 
20630 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75  are used as an u
20640 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
20650 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69  y. .**.** Reposi
20660 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73  tion cursor P1 s
20670 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74  o that  it point
20680 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73  s to the smalles
20690 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  t entry that .**
206a0 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
206b0 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
206c0 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
206d0 72 65 63 6f 72 64 73 20 67 72 65 61 74 65 72 20  records greater 
206e0 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79  than .** the key
206f0 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a   and P2 is not z
20700 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74  ero, then jump t
20710 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  o P2..**.** This
20720 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74   opcode leaves t
20730 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67  he cursor config
20740 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20  ured to move in 
20750 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a  forward order,.*
20760 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  * from the begin
20770 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20  ning toward the 
20780 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  end.  In other w
20790 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72  ords, the cursor
207a0 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65   is.** configure
207b0 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e  d to use Next, n
207c0 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53  ot Prev..**.** S
207d0 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
207e0 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74  NotFound, SeekLt
207f0 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65  , SeekGe, SeekLe
20800 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
20810 65 65 6b 4c 54 20 50 31 20 50 32 20 50 33 20 50  eekLT P1 P2 P3 P
20820 34 20 2a 20 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 * .** Synopsis
20830 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
20840 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50  *.** If cursor P
20850 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53  1 refers to an S
20860 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65  QL table (B-Tree
20870 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67   that uses integ
20880 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73  er keys), .** us
20890 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
208a0 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20  egister P3 as a 
208b0 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50  key. If cursor P
208c0 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20  1 refers .** to 
208d0 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68  an SQL index, th
208e0 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72  en P3 is the fir
208f0 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  st in an array o
20900 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a  f P4 registers .
20910 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ** that are used
20920 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20   as an unpacked 
20930 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a  index key. .**.*
20940 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72  * Reposition cur
20950 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20  sor P1 so that  
20960 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
20970 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74   largest entry t
20980 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20  hat .** is less 
20990 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c  than the key val
209a0 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ue. If there are
209b0 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c 65 73 73   no records less
209c0 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65   than .** the ke
209d0 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20  y and P2 is not 
209e0 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20  zero, then jump 
209f0 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  to P2..**.** Thi
20a00 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20  s opcode leaves 
20a10 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69  the cursor confi
20a20 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e  gured to move in
20a30 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a   reverse order,.
20a40 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20  ** from the end 
20a50 74 6f 77 61 72 64 20 74 68 65 20 62 65 67 69 6e  toward the begin
20a60 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20  ning.  In other 
20a70 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f  words, the curso
20a80 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72  r is.** configur
20a90 65 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20  ed to use Prev, 
20aa0 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20  not Next..**.** 
20ab0 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
20ac0 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 47   NotFound, SeekG
20ad0 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c  t, SeekGe, SeekL
20ae0 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
20af0 53 65 65 6b 4c 45 20 50 31 20 50 32 20 50 33 20  SeekLE P1 P2 P3 
20b00 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
20b10 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
20b20 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50  *.** If cursor P
20b30 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53  1 refers to an S
20b40 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65  QL table (B-Tree
20b50 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67   that uses integ
20b60 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73  er keys), .** us
20b70 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
20b80 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20  egister P3 as a 
20b90 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50  key. If cursor P
20ba0 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20  1 refers .** to 
20bb0 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68  an SQL index, th
20bc0 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72  en P3 is the fir
20bd0 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  st in an array o
20be0 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a  f P4 registers .
20bf0 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ** that are used
20c00 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20   as an unpacked 
20c10 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a  index key. .**.*
20c20 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72  * Reposition cur
20c30 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69  sor P1 so that i
20c40 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
20c50 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68  largest entry th
20c60 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74  at .** is less t
20c70 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
20c80 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49  the key value. I
20c90 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72  f there are no r
20ca0 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65 73 73 20  ecords .** less 
20cb0 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
20cc0 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20   the key and P2 
20cd0 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
20ce0 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
20cf0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
20d00 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
20d10 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  r configured to 
20d20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65 20  move in reverse 
20d30 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74  order,.** from t
20d40 68 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68  he end toward th
20d50 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e  e beginning.  In
20d60 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
20d70 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63  e cursor is.** c
20d80 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65  onfigured to use
20d90 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e   Prev, not Next.
20da0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 75  .**.** If the cu
20db0 72 73 6f 72 20 50 31 20 77 61 73 20 6f 70 65 6e  rsor P1 was open
20dc0 65 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50 46  ed using the OPF
20dd0 4c 41 47 5f 53 45 45 4b 45 51 20 66 6c 61 67 2c  LAG_SEEKEQ flag,
20de0 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70   then this.** op
20df0 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73  code will always
20e00 20 6c 61 6e 64 20 6f 6e 20 61 20 72 65 63 6f 72   land on a recor
20e10 64 20 74 68 61 74 20 65 71 75 61 6c 6c 79 20 65  d that equally e
20e20 71 75 61 6c 73 20 74 68 65 20 6b 65 79 2c 20 6f  quals the key, o
20e30 72 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d 70 20 69  r.** else jump i
20e40 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
20e50 2e 20 20 57 68 65 6e 20 74 68 65 20 63 75 72 73  .  When the curs
20e60 6f 72 20 69 73 20 4f 50 46 4c 41 47 5f 53 45 45  or is OPFLAG_SEE
20e70 4b 45 51 2c 20 74 68 69 73 0a 2a 2a 20 6f 70 63  KEQ, this.** opc
20e80 6f 64 65 20 6d 75 73 74 20 62 65 20 66 6f 6c 6c  ode must be foll
20e90 6f 77 65 64 20 62 79 20 61 6e 20 49 64 78 47 45  owed by an IdxGE
20ea0 20 6f 70 63 6f 64 65 20 77 69 74 68 20 74 68 65   opcode with the
20eb0 20 73 61 6d 65 20 61 72 67 75 6d 65 6e 74 73 2e   same arguments.
20ec0 0a 2a 2a 20 54 68 65 20 49 64 78 47 45 20 6f 70  .** The IdxGE op
20ed0 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 6b 69  code will be ski
20ee0 70 70 65 64 20 69 66 20 74 68 69 73 20 6f 70 63  pped if this opc
20ef0 6f 64 65 20 73 75 63 63 65 65 64 73 2c 20 62 75  ode succeeds, bu
20f00 74 20 74 68 65 0a 2a 2a 20 49 64 78 47 45 20 6f  t the.** IdxGE o
20f10 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73  pcode will be us
20f20 65 64 20 6f 6e 20 73 75 62 73 65 71 75 65 6e 74  ed on subsequent
20f30 20 6c 6f 6f 70 20 69 74 65 72 61 74 69 6f 6e 73   loop iterations
20f40 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
20f50 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
20f60 64 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47  d, SeekGt, SeekG
20f70 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73  e, SeekLt.*/.cas
20f80 65 20 4f 50 5f 53 65 65 6b 4c 54 3a 20 20 20 20  e OP_SeekLT:    
20f90 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
20fa0 33 2c 20 67 72 6f 75 70 20 2a 2f 0a 63 61 73 65  3, group */.case
20fb0 20 4f 50 5f 53 65 65 6b 4c 45 3a 20 20 20 20 20   OP_SeekLE:     
20fc0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
20fd0 2c 20 67 72 6f 75 70 20 2a 2f 0a 63 61 73 65 20  , group */.case 
20fe0 4f 50 5f 53 65 65 6b 47 45 3a 20 20 20 20 20 20  OP_SeekGE:      
20ff0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 2c     /* jump, in3,
21000 20 67 72 6f 75 70 20 2a 2f 0a 63 61 73 65 20 4f   group */.case O
21010 50 5f 53 65 65 6b 47 54 3a 20 7b 20 20 20 20 20  P_SeekGT: {     
21020 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 2c 20    /* jump, in3, 
21030 67 72 6f 75 70 20 2a 2f 0a 20 20 69 6e 74 20 72  group */.  int r
21040 65 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  es;           /*
21050 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73 75   Comparison resu
21060 6c 74 20 2a 2f 0a 20 20 69 6e 74 20 6f 63 3b 20  lt */.  int oc; 
21070 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70             /* Op
21080 63 6f 64 65 20 2a 2f 0a 20 20 56 64 62 65 43 75  code */.  VdbeCu
21090 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20  rsor *pC;    /* 
210a0 54 68 65 20 63 75 72 73 6f 72 20 74 6f 20 73 65  The cursor to se
210b0 65 6b 20 2a 2f 0a 20 20 55 6e 70 61 63 6b 65 64  ek */.  Unpacked
210c0 52 65 63 6f 72 64 20 72 3b 20 20 2f 2a 20 54 68  Record r;  /* Th
210d0 65 20 6b 65 79 20 74 6f 20 73 65 65 6b 20 66 6f  e key to seek fo
210e0 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c  r */.  int nFiel
210f0 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  d;        /* Num
21100 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 6f  ber of columns o
21110 72 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  r fields in the 
21120 6b 65 79 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65  key */.  i64 iKe
21130 79 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  y;          /* T
21140 68 65 20 72 6f 77 69 64 20 77 65 20 61 72 65 20  he rowid we are 
21150 74 6f 20 73 65 65 6b 20 74 6f 20 2a 2f 0a 20 20  to seek to */.  
21160 69 6e 74 20 65 71 4f 6e 6c 79 3b 20 20 20 20 20  int eqOnly;     
21170 20 20 20 2f 2a 20 4f 6e 6c 79 20 69 6e 74 65 72     /* Only inter
21180 65 73 74 65 64 20 69 6e 20 3d 3d 20 72 65 73 75  ested in == resu
21190 6c 74 73 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74  lts */..  assert
211a0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
211b0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
211c0 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
211d0 70 4f 70 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20  pOp->p2!=0 );.  
211e0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
211f0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
21200 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
21210 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
21220 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
21230 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50   );.  assert( OP
21240 5f 53 65 65 6b 4c 45 20 3d 3d 20 4f 50 5f 53 65  _SeekLE == OP_Se
21250 65 6b 4c 54 2b 31 20 29 3b 0a 20 20 61 73 73 65  ekLT+1 );.  asse
21260 72 74 28 20 4f 50 5f 53 65 65 6b 47 45 20 3d 3d  rt( OP_SeekGE ==
21270 20 4f 50 5f 53 65 65 6b 4c 54 2b 32 20 29 3b 0a   OP_SeekLT+2 );.
21280 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
21290 6b 47 54 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54  kGT == OP_SeekLT
212a0 2b 33 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  +3 );.  assert( 
212b0 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b  pC->isOrdered );
212c0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75  .  assert( pC->u
212d0 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  c.pCursor!=0 );.
212e0 20 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f    oc = pOp->opco
212f0 64 65 3b 0a 20 20 65 71 4f 6e 6c 79 20 3d 20 30  de;.  eqOnly = 0
21300 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
21310 3d 20 30 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  = 0;.#ifdef SQLI
21320 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73  TE_DEBUG.  pC->s
21330 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63  eekOp = pOp->opc
21340 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 69  ode;.#endif..  i
21350 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  f( pC->isTable )
21360 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 42 54 52  {.    /* The BTR
21370 45 45 5f 53 45 45 4b 5f 45 51 20 66 6c 61 67 20  EE_SEEK_EQ flag 
21380 69 73 20 6f 6e 6c 79 20 73 65 74 20 6f 6e 20 69  is only set on i
21390 6e 64 65 78 20 63 75 72 73 6f 72 73 20 2a 2f 0a  ndex cursors */.
213a0 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
213b0 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 48 61  te3BtreeCursorHa
213c0 73 48 69 6e 74 28 70 43 2d 3e 75 63 2e 70 43 75  sHint(pC->uc.pCu
213d0 72 73 6f 72 2c 20 42 54 52 45 45 5f 53 45 45 4b  rsor, BTREE_SEEK
213e0 5f 45 51 29 3d 3d 30 0a 20 20 20 20 20 20 20 20  _EQ)==0.        
213f0 20 20 20 20 20 20 7c 7c 20 43 4f 52 52 55 50 54        || CORRUPT
21400 5f 44 42 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 54  _DB );..    /* T
21410 68 65 20 69 6e 70 75 74 20 76 61 6c 75 65 20 69  he input value i
21420 6e 20 50 33 20 6d 69 67 68 74 20 62 65 20 6f 66  n P3 might be of
21430 20 61 6e 79 20 74 79 70 65 3a 20 69 6e 74 65 67   any type: integ
21440 65 72 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e 67  er, real, string
21450 2c 0a 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f  ,.    ** blob, o
21460 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74 20  r NULL.  But it 
21470 6e 65 65 64 73 20 74 6f 20 62 65 20 61 6e 20 69  needs to be an i
21480 6e 74 65 67 65 72 20 62 65 66 6f 72 65 20 77 65  nteger before we
21490 20 63 61 6e 20 64 6f 0a 20 20 20 20 2a 2a 20 74   can do.    ** t
214a0 68 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f 6e 76  he seek, so conv
214b0 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20 70  ert it. */.    p
214c0 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
214d0 3e 70 33 5d 3b 0a 20 20 20 20 69 66 28 20 28 70  >p3];.    if( (p
214e0 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  In3->flags & (ME
214f0 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d  M_Int|MEM_Real|M
21500 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74  EM_Str))==MEM_St
21510 72 20 29 7b 0a 20 20 20 20 20 20 61 70 70 6c 79  r ){.      apply
21520 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
21530 70 49 6e 33 2c 20 30 29 3b 0a 20 20 20 20 7d 0a  pIn3, 0);.    }.
21540 20 20 20 20 69 4b 65 79 20 3d 20 73 71 6c 69 74      iKey = sqlit
21550 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
21560 49 6e 33 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66  In3);..    /* If
21570 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 63 6f   the P3 value co
21580 75 6c 64 20 6e 6f 74 20 62 65 20 63 6f 6e 76 65  uld not be conve
21590 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74  rted into an int
215a0 65 67 65 72 20 77 69 74 68 6f 75 74 0a 20 20 20  eger without.   
215b0 20 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f   ** loss of info
215c0 72 6d 61 74 69 6f 6e 2c 20 74 68 65 6e 20 73 70  rmation, then sp
215d0 65 63 69 61 6c 20 70 72 6f 63 65 73 73 69 6e 67  ecial processing
215e0 20 69 73 20 72 65 71 75 69 72 65 64 2e 2e 2e 20   is required... 
215f0 2a 2f 0a 20 20 20 20 69 66 28 20 28 70 49 6e 33  */.    if( (pIn3
21600 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
21610 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69  t)==0 ){.      i
21620 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  f( (pIn3->flags 
21630 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29  & MEM_Real)==0 )
21640 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20  {.        /* If 
21650 74 68 65 20 50 33 20 76 61 6c 75 65 20 63 61 6e  the P3 value can
21660 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64  not be converted
21670 20 69 6e 74 6f 20 61 6e 79 20 6b 69 6e 64 20 6f   into any kind o
21680 66 20 61 20 6e 75 6d 62 65 72 2c 0a 20 20 20 20  f a number,.    
21690 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20      ** then the 
216a0 73 65 65 6b 20 69 73 20 6e 6f 74 20 70 6f 73 73  seek is not poss
216b0 69 62 6c 65 2c 20 73 6f 20 6a 75 6d 70 20 74 6f  ible, so jump to
216c0 20 50 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 56   P2 */.        V
216d0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31  dbeBranchTaken(1
216e0 2c 32 29 3b 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  ,2); goto jump_t
216f0 6f 5f 70 32 3b 0a 20 20 20 20 20 20 20 20 62 72  o_p2;.        br
21700 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  eak;.      }..  
21710 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 61 70      /* If the ap
21720 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79  proximation iKey
21730 20 69 73 20 6c 61 72 67 65 72 20 74 68 61 6e 20   is larger than 
21740 74 68 65 20 61 63 74 75 61 6c 20 72 65 61 6c 20  the actual real 
21750 73 65 61 72 63 68 0a 20 20 20 20 20 20 2a 2a 20  search.      ** 
21760 74 65 72 6d 2c 20 73 75 62 73 74 69 74 75 74 65  term, substitute
21770 20 3e 3d 20 66 6f 72 20 3e 20 61 6e 64 20 3c 20   >= for > and < 
21780 66 6f 72 20 3c 3d 2e 20 65 2e 67 2e 20 69 66 20  for <=. e.g. if 
21790 74 68 65 20 73 65 61 72 63 68 20 74 65 72 6d 0a  the search term.
217a0 20 20 20 20 20 20 2a 2a 20 69 73 20 34 2e 39 20        ** is 4.9 
217b0 61 6e 64 20 74 68 65 20 69 6e 74 65 67 65 72 20  and the integer 
217c0 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 35 3a  approximation 5:
217d0 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20  .      **.      
217e0 2a 2a 20 20 20 20 20 20 20 20 28 78 20 3e 20 20  **        (x >  
217f0 34 2e 39 29 20 20 20 20 2d 3e 20 20 20 20 20 28  4.9)    ->     (
21800 78 20 3e 3d 20 35 29 0a 20 20 20 20 20 20 2a 2a  x >= 5).      **
21810 20 20 20 20 20 20 20 20 28 78 20 3c 3d 20 34 2e          (x <= 4.
21820 39 29 20 20 20 20 2d 3e 20 20 20 20 20 28 78 20  9)    ->     (x 
21830 3c 20 20 35 29 0a 20 20 20 20 20 20 2a 2f 0a 20  <  5).      */. 
21840 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75       if( pIn3->u
21850 2e 72 3c 28 64 6f 75 62 6c 65 29 69 4b 65 79 20  .r<(double)iKey 
21860 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
21870 74 28 20 4f 50 5f 53 65 65 6b 47 45 3d 3d 28 4f  t( OP_SeekGE==(O
21880 50 5f 53 65 65 6b 47 54 2d 31 29 20 29 3b 0a 20  P_SeekGT-1) );. 
21890 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f         assert( O
218a0 50 5f 53 65 65 6b 4c 54 3d 3d 28 4f 50 5f 53 65  P_SeekLT==(OP_Se
218b0 65 6b 4c 45 2d 31 29 20 29 3b 0a 20 20 20 20 20  ekLE-1) );.     
218c0 20 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f 53     assert( (OP_S
218d0 65 65 6b 4c 45 20 26 20 30 78 30 30 30 31 29 3d  eekLE & 0x0001)=
218e0 3d 28 4f 50 5f 53 65 65 6b 47 54 20 26 20 30 78  =(OP_SeekGT & 0x
218f0 30 30 30 31 29 20 29 3b 0a 20 20 20 20 20 20 20  0001) );.       
21900 20 69 66 28 20 28 6f 63 20 26 20 30 78 30 30 30   if( (oc & 0x000
21910 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20 26  1)==(OP_SeekGT &
21920 20 30 78 30 30 30 31 29 20 29 20 6f 63 2d 2d 3b   0x0001) ) oc--;
21930 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
21940 2f 2a 20 49 66 20 74 68 65 20 61 70 70 72 6f 78  /* If the approx
21950 69 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69 73 20  imation iKey is 
21960 73 6d 61 6c 6c 65 72 20 74 68 61 6e 20 74 68 65  smaller than the
21970 20 61 63 74 75 61 6c 20 72 65 61 6c 20 73 65 61   actual real sea
21980 72 63 68 0a 20 20 20 20 20 20 2a 2a 20 74 65 72  rch.      ** ter
21990 6d 2c 20 73 75 62 73 74 69 74 75 74 65 20 3c 3d  m, substitute <=
219a0 20 66 6f 72 20 3c 20 61 6e 64 20 3e 20 66 6f 72   for < and > for
219b0 20 3e 3d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 65   >=.  */.      e
219c0 6c 73 65 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e  lse if( pIn3->u.
219d0 72 3e 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29  r>(double)iKey )
219e0 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
219f0 28 20 4f 50 5f 53 65 65 6b 4c 45 3d 3d 28 4f 50  ( OP_SeekLE==(OP
21a00 5f 53 65 65 6b 4c 54 2b 31 29 20 29 3b 0a 20 20  _SeekLT+1) );.  
21a10 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50        assert( OP
21a20 5f 53 65 65 6b 47 54 3d 3d 28 4f 50 5f 53 65 65  _SeekGT==(OP_See
21a30 6b 47 45 2b 31 29 20 29 3b 0a 20 20 20 20 20 20  kGE+1) );.      
21a40 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f 53 65    assert( (OP_Se
21a50 65 6b 4c 54 20 26 20 30 78 30 30 30 31 29 3d 3d  ekLT & 0x0001)==
21a60 28 4f 50 5f 53 65 65 6b 47 45 20 26 20 30 78 30  (OP_SeekGE & 0x0
21a70 30 30 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20  001) );.        
21a80 69 66 28 20 28 6f 63 20 26 20 30 78 30 30 30 31  if( (oc & 0x0001
21a90 29 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20  )==(OP_SeekLT & 
21aa0 30 78 30 30 30 31 29 20 29 20 6f 63 2b 2b 3b 0a  0x0001) ) oc++;.
21ab0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 0a 20        }.    } . 
21ac0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
21ad0 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
21ae0 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  ed(pC->uc.pCurso
21af0 72 2c 20 30 2c 20 28 75 36 34 29 69 4b 65 79 2c  r, 0, (u64)iKey,
21b00 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70   0, &res);.    p
21b10 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20  C->movetoTarget 
21b20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73 65 64  = iKey;  /* Used
21b30 20 62 79 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f   by OP_Delete */
21b40 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c  .    if( rc!=SQL
21b50 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
21b60 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
21b70 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  o_error;.    }. 
21b80 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 46   }else{.    /* F
21b90 6f 72 20 61 20 63 75 72 73 6f 72 20 77 69 74 68  or a cursor with
21ba0 20 74 68 65 20 42 54 52 45 45 5f 53 45 45 4b 5f   the BTREE_SEEK_
21bb0 45 51 20 68 69 6e 74 2c 20 6f 6e 6c 79 20 74 68  EQ hint, only th
21bc0 65 20 4f 50 5f 53 65 65 6b 47 45 20 61 6e 64 0a  e OP_SeekGE and.
21bd0 20 20 20 20 2a 2a 20 4f 50 5f 53 65 65 6b 4c 45      ** OP_SeekLE
21be0 20 6f 70 63 6f 64 65 73 20 61 72 65 20 61 6c 6c   opcodes are all
21bf0 6f 77 65 64 2c 20 61 6e 64 20 74 68 65 73 65 20  owed, and these 
21c00 6d 75 73 74 20 62 65 20 69 6d 6d 65 64 69 61 74  must be immediat
21c10 65 6c 79 20 66 6f 6c 6c 6f 77 65 64 0a 20 20 20  ely followed.   
21c20 20 2a 2a 20 62 79 20 61 6e 20 4f 50 5f 49 64 78   ** by an OP_Idx
21c30 47 54 20 6f 72 20 4f 50 5f 49 64 78 4c 54 20 6f  GT or OP_IdxLT o
21c40 70 63 6f 64 65 2c 20 72 65 73 70 65 63 74 69 76  pcode, respectiv
21c50 65 6c 79 2c 20 77 69 74 68 20 74 68 65 20 73 61  ely, with the sa
21c60 6d 65 20 6b 65 79 2e 0a 20 20 20 20 2a 2f 0a 20  me key..    */. 
21c70 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 42 74     if( sqlite3Bt
21c80 72 65 65 43 75 72 73 6f 72 48 61 73 48 69 6e 74  reeCursorHasHint
21c90 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
21ca0 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 29 20   BTREE_SEEK_EQ) 
21cb0 29 7b 0a 20 20 20 20 20 20 65 71 4f 6e 6c 79 20  ){.      eqOnly 
21cc0 3d 20 31 3b 0a 20 20 20 20 20 20 61 73 73 65 72  = 1;.      asser
21cd0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
21ce0 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20 70 4f 70  OP_SeekGE || pOp
21cf0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65  ->opcode==OP_See
21d00 6b 4c 45 20 29 3b 0a 20 20 20 20 20 20 61 73 73  kLE );.      ass
21d10 65 72 74 28 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f  ert( pOp[1].opco
21d20 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 7c 7c 20  de==OP_IdxLT || 
21d30 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  pOp[1].opcode==O
21d40 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20 20  P_IdxGT );.     
21d50 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e   assert( pOp[1].
21d60 70 31 3d 3d 70 4f 70 5b 30 5d 2e 70 31 20 29 3b  p1==pOp[0].p1 );
21d70 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
21d80 4f 70 5b 31 5d 2e 70 32 3d 3d 70 4f 70 5b 30 5d  Op[1].p2==pOp[0]
21d90 2e 70 32 20 29 3b 0a 20 20 20 20 20 20 61 73 73  .p2 );.      ass
21da0 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 33 3d 3d  ert( pOp[1].p3==
21db0 70 4f 70 5b 30 5d 2e 70 33 20 29 3b 0a 20 20 20  pOp[0].p3 );.   
21dc0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31     assert( pOp[1
21dd0 5d 2e 70 34 2e 69 3d 3d 70 4f 70 5b 30 5d 2e 70  ].p4.i==pOp[0].p
21de0 34 2e 69 20 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  4.i );.    }..  
21df0 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e    nField = pOp->
21e00 70 34 2e 69 3b 0a 20 20 20 20 61 73 73 65 72 74  p4.i;.    assert
21e10 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
21e20 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20 20 61  4_INT32 );.    a
21e30 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20  ssert( nField>0 
21e40 29 3b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66  );.    r.pKeyInf
21e50 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  o = pC->pKeyInfo
21e60 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d  ;.    r.nField =
21e70 20 28 75 31 36 29 6e 46 69 65 6c 64 3b 0a 0a 20   (u16)nField;.. 
21e80 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 6c     /* The next l
21e90 69 6e 65 20 6f 66 20 63 6f 64 65 20 63 6f 6d 70  ine of code comp
21ea0 75 74 65 73 20 61 73 20 66 6f 6c 6c 6f 77 73 2c  utes as follows,
21eb0 20 6f 6e 6c 79 20 66 61 73 74 65 72 3a 0a 20 20   only faster:.  
21ec0 20 20 2a 2a 20 20 20 69 66 28 20 6f 63 3d 3d 4f    **   if( oc==O
21ed0 50 5f 53 65 65 6b 47 54 20 7c 7c 20 6f 63 3d 3d  P_SeekGT || oc==
21ee0 4f 50 5f 53 65 65 6b 4c 45 20 29 7b 0a 20 20 20  OP_SeekLE ){.   
21ef0 20 2a 2a 20 20 20 20 20 72 2e 64 65 66 61 75 6c   **     r.defaul
21f00 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20 20 20 2a  t_rc = -1;.    *
21f10 2a 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2a  *   }else{.    *
21f20 2a 20 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f  *     r.default_
21f30 72 63 20 3d 20 2b 31 3b 0a 20 20 20 20 2a 2a 20  rc = +1;.    ** 
21f40 20 20 7d 0a 20 20 20 20 2a 2f 0a 20 20 20 20 72    }.    */.    r
21f50 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 28 28  .default_rc = ((
21f60 31 20 26 20 28 6f 63 20 2d 20 4f 50 5f 53 65 65  1 & (oc - OP_See
21f70 6b 4c 54 29 29 20 3f 20 2d 31 20 3a 20 2b 31 29  kLT)) ? -1 : +1)
21f80 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63  ;.    assert( oc
21f90 21 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 72  !=OP_SeekGT || r
21fa0 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2d 31 20  .default_rc==-1 
21fb0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f  );.    assert( o
21fc0 63 21 3d 4f 50 5f 53 65 65 6b 4c 45 20 7c 7c 20  c!=OP_SeekLE || 
21fd0 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2d 31  r.default_rc==-1
21fe0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
21ff0 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c  oc!=OP_SeekGE ||
22000 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2b   r.default_rc==+
22010 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  1 );.    assert(
22020 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c   oc!=OP_SeekLT |
22030 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d  | r.default_rc==
22040 2b 31 20 29 3b 0a 0a 20 20 20 20 72 2e 61 4d 65  +1 );..    r.aMe
22050 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
22060 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  3];.#ifdef SQLIT
22070 45 5f 44 45 42 55 47 0a 20 20 20 20 7b 20 69 6e  E_DEBUG.    { in
22080 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c  t i; for(i=0; i<
22090 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61  r.nField; i++) a
220a0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
220b0 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b  d(&r.aMem[i]) );
220c0 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 72 2e   }.#endif.    r.
220d0 65 71 53 65 65 6e 20 3d 20 30 3b 0a 20 20 20 20  eqSeen = 0;.    
220e0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
220f0 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
22100 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
22110 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b  &r, 0, 0, &res);
22120 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c  .    if( rc!=SQL
22130 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
22140 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
22150 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  o_error;.    }. 
22160 20 20 20 69 66 28 20 65 71 4f 6e 6c 79 20 26 26     if( eqOnly &&
22170 20 72 2e 65 71 53 65 65 6e 3d 3d 30 20 29 7b 0a   r.eqSeen==0 ){.
22180 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72 65        assert( re
22190 73 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 67 6f  s!=0 );.      go
221a0 74 6f 20 73 65 65 6b 5f 6e 6f 74 5f 66 6f 75 6e  to seek_not_foun
221b0 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70  d;.    }.  }.  p
221c0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
221d0 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63  o = 0;.  pC->cac
221e0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
221f0 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65 66 20 53  _STALE;.#ifdef S
22200 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c  QLITE_TEST.  sql
22210 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e  ite3_search_coun
22220 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66  t++;.#endif.  if
22230 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 45 20  ( oc>=OP_SeekGE 
22240 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d  ){  assert( oc==
22250 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20 6f 63 3d  OP_SeekGE || oc=
22260 3d 4f 50 5f 53 65 65 6b 47 54 20 29 3b 0a 20 20  =OP_SeekGT );.  
22270 20 20 69 66 28 20 72 65 73 3c 30 20 7c 7c 20 28    if( res<0 || (
22280 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50  res==0 && oc==OP
22290 5f 53 65 65 6b 47 54 29 20 29 7b 0a 20 20 20 20  _SeekGT) ){.    
222a0 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20    res = 0;.     
222b0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
222c0 65 65 4e 65 78 74 28 70 43 2d 3e 75 63 2e 70 43  eeNext(pC->uc.pC
222d0 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20 20 20 20  ursor, 0);.     
222e0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
222f0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66  OK ){.        if
22300 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e  ( rc==SQLITE_DON
22310 45 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72  E ){.          r
22320 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
22330 20 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 31           res = 1
22340 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
22350 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
22360 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
22370 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  or;.        }.  
22380 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
22390 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a  .      res = 0;.
223a0 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
223b0 20 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f     assert( oc==O
223c0 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 6f 63 3d 3d  P_SeekLT || oc==
223d0 4f 50 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20  OP_SeekLE );.   
223e0 20 69 66 28 20 72 65 73 3e 30 20 7c 7c 20 28 72   if( res>0 || (r
223f0 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f  es==0 && oc==OP_
22400 53 65 65 6b 4c 54 29 20 29 7b 0a 20 20 20 20 20  SeekLT) ){.     
22410 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20   res = 0;.      
22420 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
22430 65 50 72 65 76 69 6f 75 73 28 70 43 2d 3e 75 63  ePrevious(pC->uc
22440 2e 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20  .pCursor, 0);.  
22450 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
22460 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
22470 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
22480 44 4f 4e 45 20 29 7b 0a 20 20 20 20 20 20 20 20  DONE ){.        
22490 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
224a0 3b 0a 20 20 20 20 20 20 20 20 20 20 72 65 73 20  ;.          res 
224b0 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  = 1;.        }el
224c0 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f  se{.          go
224d0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
224e0 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d  error;.        }
224f0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
22500 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 72 65 73  se{.      /* res
22510 20 6d 69 67 68 74 20 62 65 20 6e 65 67 61 74 69   might be negati
22520 76 65 20 62 65 63 61 75 73 65 20 74 68 65 20 74  ve because the t
22530 61 62 6c 65 20 69 73 20 65 6d 70 74 79 2e 20 20  able is empty.  
22540 43 68 65 63 6b 20 74 6f 0a 20 20 20 20 20 20 2a  Check to.      *
22550 2a 20 73 65 65 20 69 66 20 74 68 69 73 20 69 73  * see if this is
22560 20 74 68 65 20 63 61 73 65 2e 0a 20 20 20 20 20   the case..     
22570 20 2a 2f 0a 20 20 20 20 20 20 72 65 73 20 3d 20   */.      res = 
22580 73 71 6c 69 74 65 33 42 74 72 65 65 45 6f 66 28  sqlite3BtreeEof(
22590 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  pC->uc.pCursor);
225a0 0a 20 20 20 20 7d 0a 20 20 7d 0a 73 65 65 6b 5f  .    }.  }.seek_
225b0 6e 6f 74 5f 66 6f 75 6e 64 3a 0a 20 20 61 73 73  not_found:.  ass
225c0 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29  ert( pOp->p2>0 )
225d0 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
225e0 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20  ken(res!=0,2);. 
225f0 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
22600 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
22610 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 65 71 4f  .  }else if( eqO
22620 6e 6c 79 20 29 7b 0a 20 20 20 20 61 73 73 65 72  nly ){.    asser
22630 74 28 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65  t( pOp[1].opcode
22640 3d 3d 4f 50 5f 49 64 78 4c 54 20 7c 7c 20 70 4f  ==OP_IdxLT || pO
22650 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  p[1].opcode==OP_
22660 49 64 78 47 54 20 29 3b 0a 20 20 20 20 70 4f 70  IdxGT );.    pOp
22670 2b 2b 3b 20 2f 2a 20 53 6b 69 70 20 74 68 65 20  ++; /* Skip the 
22680 4f 50 5f 49 64 78 4c 74 20 6f 72 20 4f 50 5f 49  OP_IdxLt or OP_I
22690 64 78 47 54 20 74 68 61 74 20 66 6f 6c 6c 6f 77  dxGT that follow
226a0 73 20 2a 2f 0a 20 20 7d 0a 20 20 62 72 65 61 6b  s */.  }.  break
226b0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
226c0 53 65 65 6b 48 69 74 20 50 31 20 50 32 20 2a 20  SeekHit P1 P2 * 
226d0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
226e0 20 73 65 65 6b 48 69 74 3d 50 32 0a 2a 2a 0a 2a   seekHit=P2.**.*
226f0 2a 20 53 65 74 20 74 68 65 20 73 65 65 6b 48 69  * Set the seekHi
22700 74 20 66 6c 61 67 20 6f 6e 20 63 75 72 73 6f 72  t flag on cursor
22710 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65   P1 to the value
22720 20 69 6e 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73   in P2..** The s
22730 65 65 6b 48 69 74 20 66 6c 61 67 20 69 73 20 75  eekHit flag is u
22740 73 65 64 20 62 79 20 74 68 65 20 49 66 4e 6f 48  sed by the IfNoH
22750 6f 70 65 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  ope opcode..**.*
22760 2a 20 50 31 20 6d 75 73 74 20 62 65 20 61 20 76  * P1 must be a v
22770 61 6c 69 64 20 62 2d 74 72 65 65 20 63 75 72 73  alid b-tree curs
22780 6f 72 2e 20 20 50 32 20 6d 75 73 74 20 62 65 20  or.  P2 must be 
22790 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2c  a boolean value,
227a0 0a 2a 2a 20 65 69 74 68 65 72 20 30 20 6f 72 20  .** either 0 or 
227b0 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  1..*/.case OP_Se
227c0 65 6b 48 69 74 3a 20 7b 0a 20 20 56 64 62 65 43  ekHit: {.  VdbeC
227d0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61 73 73  ursor *pC;.  ass
227e0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
227f0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
22800 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
22810 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
22820 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
22830 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
22840 70 4f 70 2d 3e 70 32 3d 3d 30 20 7c 7c 20 70 4f  pOp->p2==0 || pO
22850 70 2d 3e 70 32 3d 3d 31 20 29 3b 0a 20 20 70 43  p->p2==1 );.  pC
22860 2d 3e 73 65 65 6b 48 69 74 20 3d 20 70 4f 70 2d  ->seekHit = pOp-
22870 3e 70 32 20 26 20 31 3b 0a 20 20 62 72 65 61 6b  >p2 & 1;.  break
22880 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
22890 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 50  Found P1 P2 P3 P
228a0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
228b0 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
228c0 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65  .** If P4==0 the
228d0 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f  n register P3 ho
228e0 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74  lds a blob const
228f0 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65  ructed by MakeRe
22900 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e  cord.  If.** P4>
22910 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
22920 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
22930 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
22940 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70  that form an unp
22950 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e  acked.** record.
22960 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31  .**.** Cursor P1
22970 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20   is on an index 
22980 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72  btree.  If the r
22990 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64  ecord identified
229a0 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a   by P3 and P4.**
229b0 20 69 73 20 61 20 70 72 65 66 69 78 20 6f 66 20   is a prefix of 
229c0 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20  any entry in P1 
229d0 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d  then a jump is m
229e0 61 64 65 20 74 6f 20 50 32 20 61 6e 64 0a 2a 2a  ade to P2 and.**
229f0 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e   P1 is left poin
22a00 74 69 6e 67 20 61 74 20 74 68 65 20 6d 61 74 63  ting at the matc
22a10 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a  hing entry..**.*
22a20 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e  * This operation
22a30 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
22a40 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68  or in a state wh
22a50 65 72 65 20 69 74 20 63 61 6e 20 62 65 0a 2a 2a  ere it can be.**
22a60 20 61 64 76 61 6e 63 65 64 20 69 6e 20 74 68 65   advanced in the
22a70 20 66 6f 72 77 61 72 64 20 64 69 72 65 63 74 69   forward directi
22a80 6f 6e 2e 20 20 54 68 65 20 4e 65 78 74 20 69 6e  on.  The Next in
22a90 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 77  struction will w
22aa0 6f 72 6b 2c 0a 2a 2a 20 62 75 74 20 6e 6f 74 20  ork,.** but not 
22ab0 74 68 65 20 50 72 65 76 20 69 6e 73 74 72 75 63  the Prev instruc
22ac0 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  tion..**.** See 
22ad0 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20  also: NotFound, 
22ae0 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 4e 6f 74 45  NoConflict, NotE
22af0 78 69 73 74 73 2e 20 53 65 65 6b 47 65 0a 2a 2f  xists. SeekGe.*/
22b00 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46  ./* Opcode: NotF
22b10 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 50 34  ound P1 P2 P3 P4
22b20 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
22b30 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
22b40 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e  ** If P4==0 then
22b50 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c   register P3 hol
22b60 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72  ds a blob constr
22b70 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63  ucted by MakeRec
22b80 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30  ord.  If.** P4>0
22b90 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
22ba0 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f  3 is the first o
22bb0 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74  f P4 registers t
22bc0 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61  hat form an unpa
22bd0 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a  cked.** record..
22be0 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31  ** .** Cursor P1
22bf0 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20   is on an index 
22c00 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72  btree.  If the r
22c10 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64  ecord identified
22c20 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a   by P3 and P4.**
22c30 20 69 73 20 6e 6f 74 20 74 68 65 20 70 72 65 66   is not the pref
22c40 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20  ix of any entry 
22c50 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d  in P1 then a jum
22c60 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 2e  p is made to P2.
22c70 20 20 49 66 20 50 31 20 0a 2a 2a 20 64 6f 65 73    If P1 .** does
22c80 20 63 6f 6e 74 61 69 6e 20 61 6e 20 65 6e 74 72   contain an entr
22c90 79 20 77 68 6f 73 65 20 70 72 65 66 69 78 20 6d  y whose prefix m
22ca0 61 74 63 68 65 73 20 74 68 65 20 50 33 2f 50 34  atches the P3/P4
22cb0 20 72 65 63 6f 72 64 20 74 68 65 6e 20 63 6f 6e   record then con
22cc0 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74 68  trol.** falls th
22cd0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
22ce0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 6e  t instruction an
22cf0 64 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69  d P1 is left poi
22d00 6e 74 69 6e 67 20 61 74 20 74 68 65 0a 2a 2a 20  nting at the.** 
22d10 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a  matching entry..
22d20 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61  **.** This opera
22d30 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20  tion leaves the 
22d40 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74  cursor in a stat
22d50 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f  e where it canno
22d60 74 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64  t be.** advanced
22d70 20 69 6e 20 65 69 74 68 65 72 20 64 69 72 65 63   in either direc
22d80 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20  tion.  In other 
22d90 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20  words, the Next 
22da0 61 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f  and Prev.** opco
22db0 64 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20  des do not work 
22dc0 61 66 74 65 72 20 74 68 69 73 20 6f 70 65 72 61  after this opera
22dd0 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  tion..**.** See 
22de0 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
22df0 45 78 69 73 74 73 2c 20 4e 6f 43 6f 6e 66 6c 69  Exists, NoConfli
22e00 63 74 2c 20 49 66 4e 6f 48 6f 70 65 0a 2a 2f 0a  ct, IfNoHope.*/.
22e10 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 48  /* Opcode: IfNoH
22e20 6f 70 65 20 50 31 20 50 32 20 50 33 20 50 34 20  ope P1 P2 P3 P4 
22e30 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
22e40 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
22e50 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 69 73  * Register P3 is
22e60 20 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34   the first of P4
22e70 20 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20   registers that 
22e80 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
22e90 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a  .** record..**.*
22ea0 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f  * Cursor P1 is o
22eb0 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65  n an index btree
22ec0 2e 20 20 49 66 20 74 68 65 20 73 65 65 6b 48 69  .  If the seekHi
22ed0 74 20 66 6c 61 67 20 69 73 20 73 65 74 20 6f 6e  t flag is set on
22ee0 20 50 31 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 69   P1, then.** thi
22ef0 73 20 6f 70 63 6f 64 65 20 69 73 20 61 20 6e 6f  s opcode is a no
22f00 2d 6f 70 2e 20 20 42 75 74 20 69 66 20 74 68 65  -op.  But if the
22f10 20 73 65 65 6b 48 69 74 20 66 6c 61 67 20 6f 66   seekHit flag of
22f20 20 50 31 20 69 73 20 63 6c 65 61 72 2c 20 74 68   P1 is clear, th
22f30 65 6e 0a 2a 2a 20 63 68 65 63 6b 20 74 6f 20 73  en.** check to s
22f40 65 65 20 69 66 20 74 68 65 72 65 20 69 73 20 61  ee if there is a
22f50 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74  ny entry in P1 t
22f60 68 61 74 20 6d 61 74 63 68 65 73 20 74 68 65 0a  hat matches the.
22f70 2a 2a 20 70 72 65 66 69 78 20 69 64 65 6e 74 69  ** prefix identi
22f80 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50  fied by P3 and P
22f90 34 2e 20 20 49 66 20 6e 6f 20 65 6e 74 72 79 20  4.  If no entry 
22fa0 6d 61 74 63 68 65 73 20 74 68 65 20 70 72 65 66  matches the pref
22fb0 69 78 2c 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 50  ix,.** jump to P
22fc0 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20 66 61  2.  Otherwise fa
22fd0 6c 6c 20 74 68 72 6f 75 67 68 2e 0a 2a 2a 0a 2a  ll through..**.*
22fe0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 62 65  * This opcode be
22ff0 68 61 76 65 73 20 6c 69 6b 65 20 4f 50 5f 4e 6f  haves like OP_No
23000 74 46 6f 75 6e 64 20 69 66 20 74 68 65 20 73 65  tFound if the se
23010 65 6b 48 69 74 0a 2a 2a 20 66 6c 61 67 20 69 73  ekHit.** flag is
23020 20 63 6c 65 61 72 20 61 6e 64 20 69 74 20 62 65   clear and it be
23030 68 61 76 65 73 20 6c 69 6b 65 20 4f 50 5f 4e 6f  haves like OP_No
23040 6f 70 20 69 66 20 74 68 65 20 73 65 65 6b 48 69  op if the seekHi
23050 74 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a  t flag is set..*
23060 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
23070 20 69 73 20 75 73 65 64 20 69 6e 20 49 4e 20 63   is used in IN c
23080 6c 61 75 73 65 20 70 72 6f 63 65 73 73 69 6e 67  lause processing
23090 20 66 6f 72 20 61 20 6d 75 6c 74 69 2d 63 6f 6c   for a multi-col
230a0 75 6d 6e 20 6b 65 79 2e 0a 2a 2a 20 49 66 20 61  umn key..** If a
230b0 6e 20 49 4e 20 63 6c 61 75 73 65 20 69 73 20 61  n IN clause is a
230c0 74 74 61 63 68 65 64 20 74 6f 20 61 6e 20 65 6c  ttached to an el
230d0 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6b 65 79  ement of the key
230e0 20 6f 74 68 65 72 20 74 68 61 6e 20 74 68 65 0a   other than the.
230f0 2a 2a 20 6c 65 66 74 2d 6d 6f 73 74 20 65 6c 65  ** left-most ele
23100 6d 65 6e 74 2c 20 61 6e 64 20 69 66 20 74 68 65  ment, and if the
23110 72 65 20 61 72 65 20 6e 6f 20 6d 61 74 63 68 65  re are no matche
23120 73 20 6f 6e 20 74 68 65 20 6d 6f 73 74 20 72 65  s on the most re
23130 63 65 6e 74 0a 2a 2a 20 73 65 65 6b 20 6f 76 65  cent.** seek ove
23140 72 20 74 68 65 20 77 68 6f 6c 65 20 6b 65 79 2c  r the whole key,
23150 20 74 68 65 6e 20 69 74 20 6d 69 67 68 74 20 62   then it might b
23160 65 20 74 68 61 74 20 6f 6e 65 20 6f 66 20 74 68  e that one of th
23170 65 20 6b 65 79 20 65 6c 65 6d 65 6e 74 0a 2a 2a  e key element.**
23180 20 74 6f 20 74 68 65 20 6c 65 66 74 20 69 73 20   to the left is 
23190 70 72 6f 68 69 62 69 74 69 6e 67 20 61 20 6d 61  prohibiting a ma
231a0 74 63 68 2c 20 61 6e 64 20 68 65 6e 63 65 20 74  tch, and hence t
231b0 68 65 72 65 20 69 73 20 22 6e 6f 20 68 6f 70 65  here is "no hope
231c0 22 20 6f 66 0a 2a 2a 20 61 6e 79 20 6d 61 74 63  " of.** any matc
231d0 68 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  h regardless of 
231e0 68 6f 77 20 6d 61 6e 79 20 49 4e 20 63 6c 61 75  how many IN clau
231f0 73 65 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 20  se elements are 
23200 63 68 65 63 6b 65 64 2e 0a 2a 2a 20 49 6e 20 73  checked..** In s
23210 75 63 68 20 61 20 63 61 73 65 2c 20 77 65 20 61  uch a case, we a
23220 62 61 6e 64 6f 6e 20 74 68 65 20 49 4e 20 63 6c  bandon the IN cl
23230 61 75 73 65 20 73 65 61 72 63 68 20 65 61 72 6c  ause search earl
23240 79 2c 20 75 73 69 6e 67 20 74 68 69 73 0a 2a 2a  y, using this.**
23250 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 6f 70   opcode.  The op
23260 63 6f 64 65 20 6e 61 6d 65 20 63 6f 6d 65 73 20  code name comes 
23270 66 72 6f 6d 20 74 68 65 20 66 61 63 74 20 74 68  from the fact th
23280 61 74 20 74 68 65 0a 2a 2a 20 6a 75 6d 70 20 69  at the.** jump i
23290 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 72 65  s taken if there
232a0 20 69 73 20 22 6e 6f 20 68 6f 70 65 22 20 6f 66   is "no hope" of
232b0 20 61 63 68 69 65 76 69 6e 67 20 61 20 6d 61 74   achieving a mat
232c0 63 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ch..**.** See al
232d0 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65  so: NotFound, Se
232e0 65 6b 48 69 74 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  ekHit.*/./* Opco
232f0 64 65 3a 20 4e 6f 43 6f 6e 66 6c 69 63 74 20 50  de: NoConflict P
23300 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
23310 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
23320 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20  P3@P4].**.** If 
23330 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73  P4==0 then regis
23340 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62  ter P3 holds a b
23350 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20  lob constructed 
23360 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20  by MakeRecord.  
23370 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20  If.** P4>0 then 
23380 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74  register P3 is t
23390 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72  he first of P4 r
233a0 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f  egisters that fo
233b0 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a  rm an unpacked.*
233c0 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a  * record..** .**
233d0 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e   Cursor P1 is on
233e0 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e   an index btree.
233f0 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20    If the record 
23400 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33  identified by P3
23410 20 61 6e 64 20 50 34 0a 2a 2a 20 63 6f 6e 74 61   and P4.** conta
23420 69 6e 73 20 61 6e 79 20 4e 55 4c 4c 20 76 61 6c  ins any NULL val
23430 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  ue, jump immedia
23440 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20  tely to P2.  If 
23450 61 6c 6c 20 74 65 72 6d 73 20 6f 66 20 74 68 65  all terms of the
23460 0a 2a 2a 20 72 65 63 6f 72 64 20 61 72 65 20 6e  .** record are n
23470 6f 74 2d 4e 55 4c 4c 20 74 68 65 6e 20 61 20 63  ot-NULL then a c
23480 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 74 6f 20  heck is done to 
23490 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61 6e 79  determine if any
234a0 20 72 6f 77 20 69 6e 20 74 68 65 0a 2a 2a 20 50   row in the.** P
234b0 31 20 69 6e 64 65 78 20 62 74 72 65 65 20 68 61  1 index btree ha
234c0 73 20 61 20 6d 61 74 63 68 69 6e 67 20 6b 65 79  s a matching key
234d0 20 70 72 65 66 69 78 2e 20 20 49 66 20 74 68 65   prefix.  If the
234e0 72 65 20 61 72 65 20 6e 6f 20 6d 61 74 63 68 65  re are no matche
234f0 73 2c 20 6a 75 6d 70 0a 2a 2a 20 69 6d 6d 65 64  s, jump.** immed
23500 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49  iately to P2.  I
23510 66 20 74 68 65 72 65 20 69 73 20 61 20 6d 61 74  f there is a mat
23520 63 68 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ch, fall through
23530 20 61 6e 64 20 6c 65 61 76 65 20 74 68 65 20 50   and leave the P
23540 31 0a 2a 2a 20 63 75 72 73 6f 72 20 70 6f 69 6e  1.** cursor poin
23550 74 69 6e 67 20 74 6f 20 74 68 65 20 6d 61 74 63  ting to the matc
23560 68 69 6e 67 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20  hing row..**.** 
23570 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 73  This opcode is s
23580 69 6d 69 6c 61 72 20 74 6f 20 4f 50 5f 4e 6f 74  imilar to OP_Not
23590 46 6f 75 6e 64 20 77 69 74 68 20 74 68 65 20 65  Found with the e
235a0 78 63 65 70 74 69 6f 6e 73 20 74 68 61 74 20 74  xceptions that t
235b0 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 69 73 20  he.** branch is 
235c0 61 6c 77 61 79 73 20 74 61 6b 65 6e 20 69 66 20  always taken if 
235d0 61 6e 79 20 70 61 72 74 20 6f 66 20 74 68 65 20  any part of the 
235e0 73 65 61 72 63 68 20 6b 65 79 20 69 6e 70 75 74  search key input
235f0 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20   is NULL..**.** 
23600 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c  This operation l
23610 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
23620 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72   in a state wher
23630 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a  e it cannot be.*
23640 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20 65 69  * advanced in ei
23650 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20  ther direction. 
23660 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
23670 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72   the Next and Pr
23680 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f  ev.** opcodes do
23690 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65 72 20   not work after 
236a0 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a  this operation..
236b0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
236c0 4e 6f 74 46 6f 75 6e 64 2c 20 46 6f 75 6e 64 2c  NotFound, Found,
236d0 20 4e 6f 74 45 78 69 73 74 73 0a 2a 2f 0a 63 61   NotExists.*/.ca
236e0 73 65 20 4f 50 5f 49 66 4e 6f 48 6f 70 65 3a 20  se OP_IfNoHope: 
236f0 7b 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69  {     /* jump, i
23700 6e 33 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  n3 */.  VdbeCurs
23710 6f 72 20 2a 70 43 3b 0a 20 20 61 73 73 65 72 74  or *pC;.  assert
23720 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
23730 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
23740 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
23750 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
23760 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
23770 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 73 65 65  );.  if( pC->see
23780 6b 48 69 74 20 29 20 62 72 65 61 6b 3b 0a 20 20  kHit ) break;.  
23790 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
237a0 69 6e 74 6f 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64  into OP_NotFound
237b0 20 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50 5f 4e 6f   */.}.case OP_No
237c0 43 6f 6e 66 6c 69 63 74 3a 20 20 20 20 20 2f 2a  Conflict:     /*
237d0 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61   jump, in3 */.ca
237e0 73 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20  se OP_NotFound: 
237f0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
23800 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6f  n3 */.case OP_Fo
23810 75 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  und: {        /*
23820 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
23830 69 6e 74 20 61 6c 72 65 61 64 79 45 78 69 73 74  int alreadyExist
23840 73 3b 0a 20 20 69 6e 74 20 74 61 6b 65 4a 75 6d  s;.  int takeJum
23850 70 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 20 20 56  p;.  int ii;.  V
23860 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
23870 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61   int res;.  Unpa
23880 63 6b 65 64 52 65 63 6f 72 64 20 2a 70 46 72 65  ckedRecord *pFre
23890 65 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  e;.  UnpackedRec
238a0 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b 0a 20 20  ord *pIdxKey;.  
238b0 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
238c0 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
238d0 5f 54 45 53 54 0a 20 20 69 66 28 20 70 4f 70 2d  _TEST.  if( pOp-
238e0 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 6f 43 6f  >opcode!=OP_NoCo
238f0 6e 66 6c 69 63 74 20 29 20 73 71 6c 69 74 65 33  nflict ) sqlite3
23900 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a  _found_count++;.
23910 23 65 6e 64 69 66 0a 0a 20 20 61 73 73 65 72 74  #endif..  assert
23920 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
23930 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
23940 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
23950 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
23960 49 4e 54 33 32 20 29 3b 0a 20 20 70 43 20 3d 20  INT32 );.  pC = 
23970 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
23980 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
23990 3d 30 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  =0 );.#ifdef SQL
239a0 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e  ITE_DEBUG.  pC->
239b0 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70  seekOp = pOp->op
239c0 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 20 20 70  code;.#endif.  p
239d0 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
239e0 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p3];.  assert( 
239f0 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
23a00 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
23a10 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e   assert( pC->uc.
23a20 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
23a30 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
23a40 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20  ble==0 );.  if( 
23a50 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a 20  pOp->p4.i>0 ){. 
23a60 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20     r.pKeyInfo = 
23a70 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
23a80 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31    r.nField = (u1
23a90 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20  6)pOp->p4.i;.   
23aa0 20 72 2e 61 4d 65 6d 20 3d 20 70 49 6e 33 3b 0a   r.aMem = pIn3;.
23ab0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
23ac0 42 55 47 0a 20 20 20 20 66 6f 72 28 69 69 3d 30  BUG.    for(ii=0
23ad0 3b 20 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69  ; ii<r.nField; i
23ae0 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65  i++){.      asse
23af0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
23b00 72 2e 61 4d 65 6d 5b 69 69 5d 29 20 29 3b 0a 20  r.aMem[ii]) );. 
23b10 20 20 20 20 20 61 73 73 65 72 74 28 20 28 72 2e       assert( (r.
23b20 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26  aMem[ii].flags &
23b30 20 4d 45 4d 5f 5a 65 72 6f 29 3d 3d 30 20 7c 7c   MEM_Zero)==0 ||
23b40 20 72 2e 61 4d 65 6d 5b 69 69 5d 2e 6e 3d 3d 30   r.aMem[ii].n==0
23b50 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 69 69   );.      if( ii
23b60 20 29 20 52 45 47 49 53 54 45 52 5f 54 52 41 43   ) REGISTER_TRAC
23b70 45 28 70 4f 70 2d 3e 70 33 2b 69 69 2c 20 26 72  E(pOp->p3+ii, &r
23b80 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 20 20 20 20  .aMem[ii]);.    
23b90 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 70 49 64  }.#endif.    pId
23ba0 78 4b 65 79 20 3d 20 26 72 3b 0a 20 20 20 20 70  xKey = &r;.    p
23bb0 46 72 65 65 20 3d 20 30 3b 0a 20 20 7d 65 6c 73  Free = 0;.  }els
23bc0 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
23bd0 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
23be0 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 72 63 20  _Blob );.    rc 
23bf0 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  = ExpandBlob(pIn
23c00 33 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  3);.    assert( 
23c10 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
23c20 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45   rc==SQLITE_NOME
23c30 4d 20 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20  M );.    if( rc 
23c40 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
23c50 20 20 20 70 46 72 65 65 20 3d 20 70 49 64 78 4b     pFree = pIdxK
23c60 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  ey = sqlite3Vdbe
23c70 41 6c 6c 6f 63 55 6e 70 61 63 6b 65 64 52 65 63  AllocUnpackedRec
23c80 6f 72 64 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  ord(pC->pKeyInfo
23c90 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64 78 4b  );.    if( pIdxK
23ca0 65 79 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  ey==0 ) goto no_
23cb0 6d 65 6d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  mem;.    sqlite3
23cc0 56 64 62 65 52 65 63 6f 72 64 55 6e 70 61 63 6b  VdbeRecordUnpack
23cd0 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70  (pC->pKeyInfo, p
23ce0 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c  In3->n, pIn3->z,
23cf0 20 70 49 64 78 4b 65 79 29 3b 0a 20 20 7d 0a 20   pIdxKey);.  }. 
23d00 20 70 49 64 78 4b 65 79 2d 3e 64 65 66 61 75 6c   pIdxKey->defaul
23d10 74 5f 72 63 20 3d 20 30 3b 0a 20 20 74 61 6b 65  t_rc = 0;.  take
23d20 4a 75 6d 70 20 3d 20 30 3b 0a 20 20 69 66 28 20  Jump = 0;.  if( 
23d30 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
23d40 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 7b 0a 20 20  NoConflict ){.  
23d50 20 20 2f 2a 20 46 6f 72 20 74 68 65 20 4f 50 5f    /* For the OP_
23d60 4e 6f 43 6f 6e 66 6c 69 63 74 20 6f 70 63 6f 64  NoConflict opcod
23d70 65 2c 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  e, take the jump
23d80 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 0a 20   if any of the. 
23d90 20 20 20 2a 2a 20 69 6e 70 75 74 20 66 69 65 6c     ** input fiel
23da0 64 73 20 61 72 65 20 4e 55 4c 4c 2c 20 73 69 6e  ds are NULL, sin
23db0 63 65 20 61 6e 79 20 6b 65 79 20 77 69 74 68 20  ce any key with 
23dc0 61 20 4e 55 4c 4c 20 77 69 6c 6c 20 6e 6f 74 0a  a NULL will not.
23dd0 20 20 20 20 2a 2a 20 63 6f 6e 66 6c 69 63 74 20      ** conflict 
23de0 2a 2f 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b  */.    for(ii=0;
23df0 20 69 69 3c 70 49 64 78 4b 65 79 2d 3e 6e 46 69   ii<pIdxKey->nFi
23e00 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20  eld; ii++){.    
23e10 20 20 69 66 28 20 70 49 64 78 4b 65 79 2d 3e 61    if( pIdxKey->a
23e20 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20  Mem[ii].flags & 
23e30 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
23e40 20 20 20 20 74 61 6b 65 4a 75 6d 70 20 3d 20 31      takeJump = 1
23e50 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
23e60 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
23e70 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65   }.  rc = sqlite
23e80 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
23e90 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72  cked(pC->uc.pCur
23ea0 73 6f 72 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c  sor, pIdxKey, 0,
23eb0 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28   0, &res);.  if(
23ec0 20 70 46 72 65 65 20 29 20 73 71 6c 69 74 65 33   pFree ) sqlite3
23ed0 44 62 46 72 65 65 4e 4e 28 64 62 2c 20 70 46 72  DbFreeNN(db, pFr
23ee0 65 65 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53  ee);.  if( rc!=S
23ef0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
23f00 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
23f10 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70  o_error;.  }.  p
23f20 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  C->seekResult = 
23f30 72 65 73 3b 0a 20 20 61 6c 72 65 61 64 79 45 78  res;.  alreadyEx
23f40 69 73 74 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b  ists = (res==0);
23f50 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
23f60 20 31 2d 61 6c 72 65 61 64 79 45 78 69 73 74 73   1-alreadyExists
23f70 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64  ;.  pC->deferred
23f80 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43  Moveto = 0;.  pC
23f90 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
23fa0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69  CACHE_STALE;.  i
23fb0 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
23fc0 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20  OP_Found ){.    
23fd0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
23fe0 61 6c 72 65 61 64 79 45 78 69 73 74 73 21 3d 30  alreadyExists!=0
23ff0 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 61 6c 72  ,2);.    if( alr
24000 65 61 64 79 45 78 69 73 74 73 20 29 20 67 6f 74  eadyExists ) got
24010 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
24020 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42  }else{.    VdbeB
24030 72 61 6e 63 68 54 61 6b 65 6e 28 74 61 6b 65 4a  ranchTaken(takeJ
24040 75 6d 70 7c 7c 61 6c 72 65 61 64 79 45 78 69 73  ump||alreadyExis
24050 74 73 3d 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66  ts==0,2);.    if
24060 28 20 74 61 6b 65 4a 75 6d 70 20 7c 7c 20 21 61  ( takeJump || !a
24070 6c 72 65 61 64 79 45 78 69 73 74 73 20 29 20 67  lreadyExists ) g
24080 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
24090 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
240a0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 52  /* Opcode: SeekR
240b0 6f 77 69 64 20 50 31 20 50 32 20 50 33 20 2a 20  owid P1 P2 P3 * 
240c0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
240d0 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a  ntkey=r[P3].**.*
240e0 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65  * P1 is the inde
240f0 78 20 6f 66 20 61 20 63 75 72 73 6f 72 20 6f 70  x of a cursor op
24100 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61 62  en on an SQL tab
24110 6c 65 20 62 74 72 65 65 20 28 77 69 74 68 20 69  le btree (with i
24120 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29 2e  nteger.** keys).
24130 20 20 49 66 20 72 65 67 69 73 74 65 72 20 50 33    If register P3
24140 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69   does not contai
24150 6e 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20  n an integer or 
24160 69 66 20 50 31 20 64 6f 65 73 20 6e 6f 74 0a 2a  if P1 does not.*
24170 2a 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f  * contain a reco
24180 72 64 20 77 69 74 68 20 72 6f 77 69 64 20 50 33  rd with rowid P3
24190 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64   then jump immed
241a0 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 0a  iately to P2.  .
241b0 2a 2a 20 4f 72 2c 20 69 66 20 50 32 20 69 73 20  ** Or, if P2 is 
241c0 30 2c 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49  0, raise an SQLI
241d0 54 45 5f 43 4f 52 52 55 50 54 20 65 72 72 6f 72  TE_CORRUPT error
241e0 2e 20 49 66 20 50 31 20 64 6f 65 73 20 63 6f 6e  . If P1 does con
241f0 74 61 69 6e 0a 2a 2a 20 61 20 72 65 63 6f 72 64  tain.** a record
24200 20 77 69 74 68 20 72 6f 77 69 64 20 50 33 20 74   with rowid P3 t
24210 68 65 6e 20 0a 2a 2a 20 6c 65 61 76 65 20 74 68  hen .** leave th
24220 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e  e cursor pointin
24230 67 20 61 74 20 74 68 61 74 20 72 65 63 6f 72 64  g at that record
24240 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67   and fall throug
24250 68 20 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a 2a  h to the next.**
24260 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
24270 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 45 78  .** The OP_NotEx
24280 69 73 74 73 20 6f 70 63 6f 64 65 20 70 65 72 66  ists opcode perf
24290 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70  orms the same op
242a0 65 72 61 74 69 6f 6e 2c 20 62 75 74 20 77 69 74  eration, but wit
242b0 68 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 0a 2a  h OP_NotExists.*
242c0 2a 20 74 68 65 20 50 33 20 72 65 67 69 73 74 65  * the P3 registe
242d0 72 20 6d 75 73 74 20 62 65 20 67 75 61 72 61 6e  r must be guaran
242e0 74 65 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20  teed to contain 
242f0 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
24300 2e 20 20 57 69 74 68 20 74 68 69 73 0a 2a 2a 20  .  With this.** 
24310 6f 70 63 6f 64 65 2c 20 72 65 67 69 73 74 65 72  opcode, register
24320 20 50 33 20 6d 69 67 68 74 20 6e 6f 74 20 63 6f   P3 might not co
24330 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72  ntain an integer
24340 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e  ..**.** The OP_N
24350 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70  otFound opcode p
24360 65 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65  erforms the same
24370 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e   operation on in
24380 64 65 78 20 62 74 72 65 65 73 0a 2a 2a 20 28 77  dex btrees.** (w
24390 69 74 68 20 61 72 62 69 74 72 61 72 79 20 6d 75  ith arbitrary mu
243a0 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e  lti-value keys).
243b0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
243c0 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
243d0 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20  rsor in a state 
243e0 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20  where it cannot 
243f0 62 65 20 61 64 76 61 6e 63 65 64 0a 2a 2a 20 69  be advanced.** i
24400 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74 69  n either directi
24410 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  on.  In other wo
24420 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e  rds, the Next an
24430 64 20 50 72 65 76 20 6f 70 63 6f 64 65 73 20 77  d Prev opcodes w
24440 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20  ill.** not work 
24450 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 69 73 20 6f  following this o
24460 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  pcode..**.** See
24470 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
24480 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69  tFound, NoConfli
24490 63 74 2c 20 53 65 65 6b 52 6f 77 69 64 0a 2a 2f  ct, SeekRowid.*/
244a0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45  ./* Opcode: NotE
244b0 78 69 73 74 73 20 50 31 20 50 32 20 50 33 20 2a  xists P1 P2 P3 *
244c0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
244d0 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a  intkey=r[P3].**.
244e0 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64  ** P1 is the ind
244f0 65 78 20 6f 66 20 61 20 63 75 72 73 6f 72 20 6f  ex of a cursor o
24500 70 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61  pen on an SQL ta
24510 62 6c 65 20 62 74 72 65 65 20 28 77 69 74 68 20  ble btree (with 
24520 69 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29  integer.** keys)
24530 2e 20 20 50 33 20 69 73 20 61 6e 20 69 6e 74 65  .  P3 is an inte
24540 67 65 72 20 72 6f 77 69 64 2e 20 20 49 66 20 50  ger rowid.  If P
24550 31 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61  1 does not conta
24560 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74 68  in a record with
24570 0a 2a 2a 20 72 6f 77 69 64 20 50 33 20 74 68 65  .** rowid P3 the
24580 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  n jump immediate
24590 6c 79 20 74 6f 20 50 32 2e 20 20 4f 72 2c 20 69  ly to P2.  Or, i
245a0 66 20 50 32 20 69 73 20 30 2c 20 72 61 69 73 65  f P2 is 0, raise
245b0 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 43 4f   an.** SQLITE_CO
245c0 52 52 55 50 54 20 65 72 72 6f 72 2e 20 49 66 20  RRUPT error. If 
245d0 50 31 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20  P1 does contain 
245e0 61 20 72 65 63 6f 72 64 20 77 69 74 68 20 72 6f  a record with ro
245f0 77 69 64 20 50 33 20 74 68 65 6e 20 0a 2a 2a 20  wid P3 then .** 
24600 6c 65 61 76 65 20 74 68 65 20 63 75 72 73 6f 72  leave the cursor
24610 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 61   pointing at tha
24620 74 20 72 65 63 6f 72 64 20 61 6e 64 20 66 61 6c  t record and fal
24630 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
24640 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63   next.** instruc
24650 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  tion..**.** The 
24660 4f 50 5f 53 65 65 6b 52 6f 77 69 64 20 6f 70 63  OP_SeekRowid opc
24670 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65  ode performs the
24680 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20   same operation 
24690 62 75 74 20 61 6c 73 6f 20 61 6c 6c 6f 77 73 20  but also allows 
246a0 74 68 65 0a 2a 2a 20 50 33 20 72 65 67 69 73 74  the.** P3 regist
246b0 65 72 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61 20  er to contain a 
246c0 6e 6f 6e 2d 69 6e 74 65 67 65 72 20 76 61 6c 75  non-integer valu
246d0 65 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73 65  e, in which case
246e0 20 74 68 65 20 6a 75 6d 70 20 69 73 0a 2a 2a 20   the jump is.** 
246f0 61 6c 77 61 79 73 20 74 61 6b 65 6e 2e 20 20 54  always taken.  T
24700 68 69 73 20 6f 70 63 6f 64 65 20 72 65 71 75 69  his opcode requi
24710 72 65 73 20 74 68 61 74 20 50 33 20 61 6c 77 61  res that P3 alwa
24720 79 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  ys contain an in
24730 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  teger..**.** The
24740 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70 63   OP_NotFound opc
24750 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65  ode performs the
24760 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20   same operation 
24770 6f 6e 20 69 6e 64 65 78 20 62 74 72 65 65 73 0a  on index btrees.
24780 2a 2a 20 28 77 69 74 68 20 61 72 62 69 74 72 61  ** (with arbitra
24790 72 79 20 6d 75 6c 74 69 2d 76 61 6c 75 65 20 6b  ry multi-value k
247a0 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  eys)..**.** This
247b0 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74   opcode leaves t
247c0 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73  he cursor in a s
247d0 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63 61  tate where it ca
247e0 6e 6e 6f 74 20 62 65 20 61 64 76 61 6e 63 65 64  nnot be advanced
247f0 0a 2a 2a 20 69 6e 20 65 69 74 68 65 72 20 64 69  .** in either di
24800 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68  rection.  In oth
24810 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65  er words, the Ne
24820 78 74 20 61 6e 64 20 50 72 65 76 20 6f 70 63 6f  xt and Prev opco
24830 64 65 73 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20  des will.** not 
24840 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69 6e 67 20 74  work following t
24850 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  his opcode..**.*
24860 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
24870 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43  d, NotFound, NoC
24880 6f 6e 66 6c 69 63 74 2c 20 53 65 65 6b 52 6f 77  onflict, SeekRow
24890 69 64 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  id.*/.case OP_Se
248a0 65 6b 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20  ekRowid: {      
248b0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
248c0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
248d0 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
248e0 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
248f0 3b 0a 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20  ;.  u64 iKey;.. 
24900 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
24910 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70  p->p3];.  if( (p
24920 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
24930 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  _Int)==0 ){.    
24940 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 70 49 6e  /* Make sure pIn
24950 33 2d 3e 75 2e 69 20 63 6f 6e 74 61 69 6e 73 20  3->u.i contains 
24960 61 20 76 61 6c 69 64 20 69 6e 74 65 67 65 72 20  a valid integer 
24970 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
24980 66 0a 20 20 20 20 2a 2a 20 74 68 65 20 6b 65 79  f.    ** the key
24990 20 76 61 6c 75 65 2c 20 62 75 74 20 64 6f 20 6e   value, but do n
249a0 6f 74 20 63 68 61 6e 67 65 20 74 68 65 20 64 61  ot change the da
249b0 74 61 74 79 70 65 20 6f 66 20 74 68 65 20 72 65  tatype of the re
249c0 67 69 73 74 65 72 2c 20 61 73 0a 20 20 20 20 2a  gister, as.    *
249d0 2a 20 6f 74 68 65 72 20 70 61 72 74 73 20 6f 66  * other parts of
249e0 20 74 68 65 20 70 65 72 70 61 72 65 64 20 73 74   the perpared st
249f0 61 74 65 6d 65 6e 74 20 6d 69 67 68 74 20 62 65  atement might be
24a00 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68   depending on th
24a10 65 0a 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74  e.    ** current
24a20 20 64 61 74 61 74 79 70 65 2e 20 2a 2f 0a 20 20   datatype. */.  
24a30 20 20 75 31 36 20 6f 72 69 67 46 6c 61 67 73 20    u16 origFlags 
24a40 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20  = pIn3->flags;. 
24a50 20 20 20 69 6e 74 20 69 73 4e 6f 74 49 6e 74 3b     int isNotInt;
24a60 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69  .    applyAffini
24a70 74 79 28 70 49 6e 33 2c 20 53 51 4c 49 54 45 5f  ty(pIn3, SQLITE_
24a80 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e 63  AFF_NUMERIC, enc
24a90 6f 64 69 6e 67 29 3b 0a 20 20 20 20 69 73 4e 6f  oding);.    isNo
24aa0 74 49 6e 74 20 3d 20 28 70 49 6e 33 2d 3e 66 6c  tInt = (pIn3->fl
24ab0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d  ags & MEM_Int)==
24ac0 30 3b 0a 20 20 20 20 70 49 6e 33 2d 3e 66 6c 61  0;.    pIn3->fla
24ad0 67 73 20 3d 20 6f 72 69 67 46 6c 61 67 73 3b 0a  gs = origFlags;.
24ae0 20 20 20 20 69 66 28 20 69 73 4e 6f 74 49 6e 74      if( isNotInt
24af0 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
24b00 70 32 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c  p2;.  }.  /* Fal
24b10 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
24b20 50 5f 4e 6f 74 45 78 69 73 74 73 20 2a 2f 0a 63  P_NotExists */.c
24b30 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73  ase OP_NotExists
24b40 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
24b50 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e  mp, in3 */.  pIn
24b60 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
24b70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  3];.  assert( (p
24b80 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
24b90 5f 49 6e 74 29 21 3d 30 20 7c 7c 20 70 4f 70 2d  _Int)!=0 || pOp-
24ba0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b  >opcode==OP_Seek
24bb0 52 6f 77 69 64 20 29 3b 0a 20 20 61 73 73 65 72  Rowid );.  asser
24bc0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
24bd0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
24be0 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
24bf0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
24c00 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
24c10 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   );.#ifdef SQLIT
24c20 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f  E_DEBUG.  if( pO
24c30 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65  p->opcode==OP_Se
24c40 65 6b 52 6f 77 69 64 20 29 20 70 43 2d 3e 73 65  ekRowid ) pC->se
24c50 65 6b 4f 70 20 3d 20 4f 50 5f 53 65 65 6b 52 6f  ekOp = OP_SeekRo
24c60 77 69 64 3b 0a 23 65 6e 64 69 66 0a 20 20 61 73  wid;.#endif.  as
24c70 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
24c80 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  e );.  assert( p
24c90 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
24ca0 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
24cb0 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70  pCrsr = pC->uc.p
24cc0 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74  Cursor;.  assert
24cd0 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20  ( pCrsr!=0 );.  
24ce0 72 65 73 20 3d 20 30 3b 0a 20 20 69 4b 65 79 20  res = 0;.  iKey 
24cf0 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 72  = pIn3->u.i;.  r
24d00 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
24d10 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
24d20 43 72 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30  Crsr, 0, iKey, 0
24d30 2c 20 26 72 65 73 29 3b 0a 20 20 61 73 73 65 72  , &res);.  asser
24d40 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
24d50 20 7c 7c 20 72 65 73 3d 3d 30 20 29 3b 0a 20 20   || res==0 );.  
24d60 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
24d70 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73 65   = iKey;  /* Use
24d80 64 20 62 79 20 4f 50 5f 44 65 6c 65 74 65 20 2a  d by OP_Delete *
24d90 2f 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  /.  pC->nullRow 
24da0 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 0;.  pC->cache
24db0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
24dc0 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 64 65 66 65  TALE;.  pC->defe
24dd0 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
24de0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
24df0 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 70  n(res!=0,2);.  p
24e00 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  C->seekResult = 
24e10 72 65 73 3b 0a 20 20 69 66 28 20 72 65 73 21 3d  res;.  if( res!=
24e20 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
24e30 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
24e40 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
24e50 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63  2==0 ){.      rc
24e60 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50   = SQLITE_CORRUP
24e70 54 5f 42 4b 50 54 3b 0a 20 20 20 20 7d 65 6c 73  T_BKPT;.    }els
24e80 65 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a 75  e{.      goto ju
24e90 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a  mp_to_p2;.    }.
24ea0 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67    }.  if( rc ) g
24eb0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
24ec0 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
24ed0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
24ee0 65 71 75 65 6e 63 65 20 50 31 20 50 32 20 2a 20  equence P1 P2 * 
24ef0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
24f00 20 72 5b 50 32 5d 3d 63 75 72 73 6f 72 5b 50 31   r[P2]=cursor[P1
24f10 5d 2e 63 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20 46 69  ].ctr++.**.** Fi
24f20 6e 64 20 74 68 65 20 6e 65 78 74 20 61 76 61 69  nd the next avai
24f30 6c 61 62 6c 65 20 73 65 71 75 65 6e 63 65 20 6e  lable sequence n
24f40 75 6d 62 65 72 20 66 6f 72 20 63 75 72 73 6f 72  umber for cursor
24f50 20 50 31 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68   P1..** Write th
24f60 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65  e sequence numbe
24f70 72 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  r into register 
24f80 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65 71 75 65  P2..** The seque
24f90 6e 63 65 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68  nce number on th
24fa0 65 20 63 75 72 73 6f 72 20 69 73 20 69 6e 63 72  e cursor is incr
24fb0 65 6d 65 6e 74 65 64 20 61 66 74 65 72 20 74 68  emented after th
24fc0 69 73 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f  is.** instructio
24fd0 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  n.  .*/.case OP_
24fe0 53 65 71 75 65 6e 63 65 3a 20 7b 20 20 20 20 20  Sequence: {     
24ff0 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
25000 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
25010 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
25020 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
25030 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73   assert( p->apCs
25040 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b  r[pOp->p1]!=0 );
25050 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70  .  assert( p->ap
25060 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 65 43  Csr[pOp->p1]->eC
25070 75 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f  urType!=CURTYPE_
25080 56 54 41 42 20 29 3b 0a 20 20 70 4f 75 74 20 3d  VTAB );.  pOut =
25090 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
250a0 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d  p, pOp);.  pOut-
250b0 3e 75 2e 69 20 3d 20 70 2d 3e 61 70 43 73 72 5b  >u.i = p->apCsr[
250c0 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f 75  pOp->p1]->seqCou
250d0 6e 74 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  nt++;.  break;.}
250e0 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65  .../* Opcode: Ne
250f0 77 52 6f 77 69 64 20 50 31 20 50 32 20 50 33 20  wRowid P1 P2 P3 
25100 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
25110 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a   r[P2]=rowid.**.
25120 2a 2a 20 47 65 74 20 61 20 6e 65 77 20 69 6e 74  ** Get a new int
25130 65 67 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62  eger record numb
25140 65 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64  er (a.k.a "rowid
25150 22 29 20 75 73 65 64 20 61 73 20 74 68 65 20 6b  ") used as the k
25160 65 79 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a  ey to a table..*
25170 2a 20 54 68 65 20 72 65 63 6f 72 64 20 6e 75 6d  * The record num
25180 62 65 72 20 69 73 20 6e 6f 74 20 70 72 65 76 69  ber is not previ
25190 6f 75 73 6c 79 20 75 73 65 64 20 61 73 20 61 20  ously used as a 
251a0 6b 65 79 20 69 6e 20 74 68 65 20 64 61 74 61 62  key in the datab
251b0 61 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61  ase.** table tha
251c0 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e  t cursor P1 poin
251d0 74 73 20 74 6f 2e 20 20 54 68 65 20 6e 65 77 20  ts to.  The new 
251e0 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73  record number is
251f0 20 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74   written.** writ
25200 74 65 6e 20 74 6f 20 72 65 67 69 73 74 65 72 20  ten to register 
25210 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e  P2..**.** If P3>
25220 30 20 74 68 65 6e 20 50 33 20 69 73 20 61 20 72  0 then P3 is a r
25230 65 67 69 73 74 65 72 20 69 6e 20 74 68 65 20 72  egister in the r
25240 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69  oot frame of thi
25250 73 20 56 44 42 45 20 74 68 61 74 20 68 6f 6c 64  s VDBE that hold
25260 73 20 0a 2a 2a 20 74 68 65 20 6c 61 72 67 65 73  s .** the larges
25270 74 20 70 72 65 76 69 6f 75 73 6c 79 20 67 65 6e  t previously gen
25280 65 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75  erated record nu
25290 6d 62 65 72 2e 20 4e 6f 20 6e 65 77 20 72 65 63  mber. No new rec
252a0 6f 72 64 20 6e 75 6d 62 65 72 73 20 61 72 65 0a  ord numbers are.
252b0 2a 2a 20 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65  ** allowed to be
252c0 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20   less than this 
252d0 76 61 6c 75 65 2e 20 57 68 65 6e 20 74 68 69 73  value. When this
252e0 20 76 61 6c 75 65 20 72 65 61 63 68 65 73 20 69   value reaches i
252f0 74 73 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20  ts maximum, .** 
25300 61 6e 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20 65  an SQLITE_FULL e
25310 72 72 6f 72 20 69 73 20 67 65 6e 65 72 61 74 65  rror is generate
25320 64 2e 20 54 68 65 20 50 33 20 72 65 67 69 73 74  d. The P3 regist
25330 65 72 20 69 73 20 75 70 64 61 74 65 64 20 77 69  er is updated wi
25340 74 68 20 74 68 65 20 27 0a 2a 2a 20 67 65 6e 65  th the '.** gene
25350 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d  rated record num
25360 62 65 72 2e 20 54 68 69 73 20 50 33 20 6d 65 63  ber. This P3 mec
25370 68 61 6e 69 73 6d 20 69 73 20 75 73 65 64 20 74  hanism is used t
25380 6f 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74  o help implement
25390 20 74 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43 52   the.** AUTOINCR
253a0 45 4d 45 4e 54 20 66 65 61 74 75 72 65 2e 0a 2a  EMENT feature..*
253b0 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f 77  /.case OP_NewRow
253c0 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  id: {           
253d0 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 36 34  /* out2 */.  i64
253e0 20 76 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   v;             
253f0 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72      /* The new r
25400 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62 65 43 75  owid */.  VdbeCu
25410 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20 20 20  rsor *pC;       
25420 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66 20 74 61   /* Cursor of ta
25430 62 6c 65 20 74 6f 20 67 65 74 20 74 68 65 20 6e  ble to get the n
25440 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 6e  ew rowid */.  in
25450 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20 20  t res;          
25460 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f       /* Result o
25470 66 20 61 6e 20 73 71 6c 69 74 65 33 42 74 72 65  f an sqlite3Btre
25480 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 69 6e 74  eLast() */.  int
25490 20 63 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20   cnt;           
254a0 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 74      /* Counter t
254b0 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d 62  o limit the numb
254c0 65 72 20 6f 66 20 73 65 61 72 63 68 65 73 20 2a  er of searches *
254d0 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20  /.  Mem *pMem;  
254e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
254f0 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 6c  gister holding l
25500 61 72 67 65 73 74 20 72 6f 77 69 64 20 66 6f 72  argest rowid for
25510 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a   AUTOINCREMENT *
25520 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70  /.  VdbeFrame *p
25530 46 72 61 6d 65 3b 20 20 20 20 20 2f 2a 20 52 6f  Frame;     /* Ro
25540 6f 74 20 66 72 61 6d 65 20 6f 66 20 56 44 42 45  ot frame of VDBE
25550 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a 20 20   */..  v = 0;.  
25560 72 65 73 20 3d 20 30 3b 0a 20 20 70 4f 75 74 20  res = 0;.  pOut 
25570 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
25580 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65  (p, pOp);.  asse
25590 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
255a0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
255b0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
255c0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
255d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
255e0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
255f0 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
25600 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
25610 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
25620 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28  REE );.  assert(
25630 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21   pC->uc.pCursor!
25640 3d 30 20 29 3b 0a 20 20 7b 0a 20 20 20 20 2f 2a  =0 );.  {.    /*
25650 20 54 68 65 20 6e 65 78 74 20 72 6f 77 69 64 20   The next rowid 
25660 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  or record number
25670 20 28 64 69 66 66 65 72 65 6e 74 20 74 65 72 6d   (different term
25680 73 20 66 6f 72 20 74 68 65 20 73 61 6d 65 0a 20  s for the same. 
25690 20 20 20 2a 2a 20 74 68 69 6e 67 29 20 69 73 20     ** thing) is 
256a0 6f 62 74 61 69 6e 65 64 20 69 6e 20 61 20 74 77  obtained in a tw
256b0 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69 74 68 6d  o-step algorithm
256c0 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
256d0 46 69 72 73 74 20 77 65 20 61 74 74 65 6d 70 74  First we attempt
256e0 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 72   to find the lar
256f0 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f  gest existing ro
25700 77 69 64 20 61 6e 64 20 61 64 64 20 6f 6e 65 0a  wid and add one.
25710 20 20 20 20 2a 2a 20 74 6f 20 74 68 61 74 2e 20      ** to that. 
25720 20 42 75 74 20 69 66 20 74 68 65 20 6c 61 72 67   But if the larg
25730 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77  est existing row
25740 69 64 20 69 73 20 61 6c 72 65 61 64 79 20 74 68  id is already th
25750 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20 2a 2a  e maximum.    **
25760 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65   positive intege
25770 72 2c 20 77 65 20 68 61 76 65 20 74 6f 20 66 61  r, we have to fa
25780 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
25790 65 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a 2a 20  e second.    ** 
257a0 70 72 6f 62 61 62 69 6c 69 73 74 69 63 20 61 6c  probabilistic al
257b0 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a 0a 20  gorithm.    **. 
257c0 20 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64     ** The second
257d0 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 74 6f   algorithm is to
257e0 20 73 65 6c 65 63 74 20 61 20 72 6f 77 69 64 20   select a rowid 
257f0 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 73 65  at random and se
25800 65 20 69 66 0a 20 20 20 20 2a 2a 20 69 74 20 61  e if.    ** it a
25810 6c 72 65 61 64 79 20 65 78 69 73 74 73 20 69 6e  lready exists in
25820 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20   the table.  If 
25830 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  it does not exis
25840 74 2c 20 77 65 20 68 61 76 65 0a 20 20 20 20 2a  t, we have.    *
25850 2a 20 73 75 63 63 65 65 64 65 64 2e 20 20 49 66  * succeeded.  If
25860 20 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f 77 69   the random rowi
25870 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20 77 65  d does exist, we
25880 20 73 65 6c 65 63 74 20 61 20 6e 65 77 20 6f 6e   select a new on
25890 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74 72 79  e.    ** and try
258a0 20 61 67 61 69 6e 2c 20 75 70 20 74 6f 20 31 30   again, up to 10
258b0 30 20 74 69 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a  0 times..    */.
258c0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
258d0 69 73 54 61 62 6c 65 20 29 3b 0a 0a 23 69 66 64  isTable );..#ifd
258e0 65 66 20 53 51 4c 49 54 45 5f 33 32 42 49 54 5f  ef SQLITE_32BIT_
258f0 52 4f 57 49 44 0a 23 20 20 20 64 65 66 69 6e 65  ROWID.#   define
25900 20 4d 41 58 5f 52 4f 57 49 44 20 30 78 37 66 66   MAX_ROWID 0x7ff
25910 66 66 66 66 66 0a 23 65 6c 73 65 0a 20 20 20 20  fffff.#else.    
25920 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72  /* Some compiler
25930 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74  s complain about
25940 20 63 6f 6e 73 74 61 6e 74 73 20 6f 66 20 74 68   constants of th
25950 65 20 66 6f 72 6d 20 30 78 37 66 66 66 66 66 66  e form 0x7ffffff
25960 66 66 66 66 66 66 66 66 66 2e 0a 20 20 20 20 2a  fffffffff..    *
25970 2a 20 4f 74 68 65 72 73 20 63 6f 6d 70 6c 61 69  * Others complai
25980 6e 20 61 62 6f 75 74 20 30 78 37 66 66 66 66 66  n about 0x7fffff
25990 66 66 66 66 66 66 66 66 66 66 66 4c 4c 2e 20 20  fffffffffffLL.  
259a0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
259b0 63 72 6f 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a  cro seems.    **
259c0 20 74 6f 20 70 72 6f 76 69 64 65 20 74 68 65 20   to provide the 
259d0 63 6f 6e 73 74 61 6e 74 20 77 68 69 6c 65 20 6d  constant while m
259e0 61 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c  aking all compil
259f0 65 72 73 20 68 61 70 70 79 2e 0a 20 20 20 20 2a  ers happy..    *
25a00 2f 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58  /.#   define MAX
25a10 5f 52 4f 57 49 44 20 20 28 69 36 34 29 28 20 28  _ROWID  (i64)( (
25a20 28 28 75 36 34 29 30 78 37 66 66 66 66 66 66 66  ((u64)0x7fffffff
25a30 29 3c 3c 33 32 29 20 7c 20 28 75 36 34 29 30 78  )<<32) | (u64)0x
25a40 66 66 66 66 66 66 66 66 20 29 0a 23 65 6e 64 69  ffffffff ).#endi
25a50 66 0a 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e  f..    if( !pC->
25a60 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29  useRandomRowid )
25a70 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
25a80 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43  ite3BtreeLast(pC
25a90 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72  ->uc.pCursor, &r
25aa0 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  es);.      if( r
25ab0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
25ac0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
25ad0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
25ae0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
25af0 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20  f( res ){.      
25b00 20 20 76 20 3d 20 31 3b 20 20 20 2f 2a 20 49 4d    v = 1;   /* IM
25b10 50 3a 20 52 2d 36 31 39 31 34 2d 34 38 30 37 34  P: R-61914-48074
25b20 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   */.      }else{
25b30 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        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 2d 3e 75  sorIsValid(pC->u
25b60 63 2e 70 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  c.pCursor) );.  
25b70 20 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65        v = sqlite
25b80 33 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79  3BtreeIntegerKey
25b90 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  (pC->uc.pCursor)
25ba0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 76 3e  ;.        if( v>
25bb0 3d 4d 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20  =MAX_ROWID ){.  
25bc0 20 20 20 20 20 20 20 20 70 43 2d 3e 75 73 65 52          pC->useR
25bd0 61 6e 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a  andomRowid = 1;.
25be0 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
25bf0 20 20 20 20 20 20 20 20 20 76 2b 2b 3b 20 20 20           v++;   
25c00 2f 2a 20 49 4d 50 3a 20 52 2d 32 39 35 33 38 2d  /* IMP: R-29538-
25c10 33 34 39 38 37 20 2a 2f 0a 20 20 20 20 20 20 20  34987 */.       
25c20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d   }.      }.    }
25c30 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
25c40 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
25c50 45 4e 54 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  ENT.    if( pOp-
25c60 3e 70 33 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  >p3 ){.      /* 
25c70 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69  Assert that P3 i
25c80 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79  s a valid memory
25c90 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20   cell. */.      
25ca0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
25cb0 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  0 );.      if( p
25cc0 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20  ->pFrame ){.    
25cd0 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70      for(pFrame=p
25ce0 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65  ->pFrame; pFrame
25cf0 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d  ->pParent; pFram
25d00 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  e=pFrame->pParen
25d10 74 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41  t);.        /* A
25d20 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73  ssert that P3 is
25d30 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20   a valid memory 
25d40 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20  cell. */.       
25d50 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
25d60 3c 3d 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29  <=pFrame->nMem )
25d70 3b 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d  ;.        pMem =
25d80 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70   &pFrame->aMem[p
25d90 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 7d  Op->p3];.      }
25da0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a  else{.        /*
25db0 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20   Assert that P3 
25dc0 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72  is a valid memor
25dd0 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20  y cell. */.     
25de0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
25df0 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p3<=(p->nMem+1 -
25e00 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
25e10 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26          pMem = &
25e20 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
25e30 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54         memAboutT
25e40 6f 43 68 61 6e 67 65 28 70 2c 20 70 4d 65 6d 29  oChange(p, pMem)
25e50 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
25e60 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
25e70 69 64 28 70 4d 65 6d 29 20 29 3b 0a 0a 20 20 20  id(pMem) );..   
25e80 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
25e90 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d 29  E(pOp->p3, pMem)
25ea0 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
25eb0 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
25ec0 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 61 73  (pMem);.      as
25ed0 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61  sert( (pMem->fla
25ee0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
25ef0 20 29 3b 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20   );  /* mem(P3) 
25f00 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72  holds an integer
25f10 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4d   */.      if( pM
25f20 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57  em->u.i==MAX_ROW
25f30 49 44 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e  ID || pC->useRan
25f40 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20  domRowid ){.    
25f50 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
25f60 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20  FULL;   /* IMP: 
25f70 52 2d 31 37 38 31 37 2d 30 30 36 33 30 20 2a 2f  R-17817-00630 */
25f80 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
25f90 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
25fa0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
25fb0 69 66 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b  if( v<pMem->u.i+
25fc0 31 20 29 7b 0a 20 20 20 20 20 20 20 20 76 20 3d  1 ){.        v =
25fd0 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a   pMem->u.i + 1;.
25fe0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 4d        }.      pM
25ff0 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20  em->u.i = v;.   
26000 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66   }.#endif.    if
26010 28 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52  ( pC->useRandomR
26020 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 2f 2a  owid ){.      /*
26030 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d   IMPLEMENTATION-
26040 4f 46 3a 20 52 2d 30 37 36 37 37 2d 34 31 38 38  OF: R-07677-4188
26050 31 20 49 66 20 74 68 65 20 6c 61 72 67 65 73 74  1 If the largest
26060 20 52 4f 57 49 44 20 69 73 20 65 71 75 61 6c 20   ROWID is equal 
26070 74 6f 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20  to the.      ** 
26080 6c 61 72 67 65 73 74 20 70 6f 73 73 69 62 6c 65  largest possible
26090 20 69 6e 74 65 67 65 72 20 28 39 32 32 33 33 37   integer (922337
260a0 32 30 33 36 38 35 34 37 37 35 38 30 37 29 20 74  2036854775807) t
260b0 68 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  hen the database
260c0 0a 20 20 20 20 20 20 2a 2a 20 65 6e 67 69 6e 65  .      ** engine
260d0 20 73 74 61 72 74 73 20 70 69 63 6b 69 6e 67 20   starts picking 
260e0 70 6f 73 69 74 69 76 65 20 63 61 6e 64 69 64 61  positive candida
260f0 74 65 20 52 4f 57 49 44 73 20 61 74 20 72 61 6e  te ROWIDs at ran
26100 64 6f 6d 20 75 6e 74 69 6c 0a 20 20 20 20 20 20  dom until.      
26110 2a 2a 20 69 74 20 66 69 6e 64 73 20 6f 6e 65 20  ** it finds one 
26120 74 68 61 74 20 69 73 20 6e 6f 74 20 70 72 65 76  that is not prev
26130 69 6f 75 73 6c 79 20 75 73 65 64 2e 20 2a 2f 0a  iously used. */.
26140 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
26150 70 2d 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20  p->p3==0 );  /* 
26160 57 65 20 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20  We cannot be in 
26170 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 6d 6f 64  random rowid mod
26180 65 20 69 66 20 74 68 69 73 20 69 73 0a 20 20 20  e if this is.   
26190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261a0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 6e 20            ** an 
261b0 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61  AUTOINCREMENT ta
261c0 62 6c 65 2e 20 2a 2f 0a 20 20 20 20 20 20 63 6e  ble. */.      cn
261d0 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 64 6f 7b  t = 0;.      do{
261e0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
261f0 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65  _randomness(size
26200 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20 20 20 20  of(v), &v);.    
26210 20 20 20 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f      v &= (MAX_RO
26220 57 49 44 3e 3e 31 29 3b 20 76 2b 2b 3b 20 20 2f  WID>>1); v++;  /
26230 2a 20 45 6e 73 75 72 65 20 74 68 61 74 20 76 20  * Ensure that v 
26240 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
26250 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20 7d 77  zero */.      }w
26260 68 69 6c 65 28 20 20 28 28 72 63 20 3d 20 73 71  hile(  ((rc = sq
26270 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
26280 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e  Unpacked(pC->uc.
26290 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34  pCursor, 0, (u64
262a0 29 76 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  )v,.            
262b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262d0 20 20 20 20 20 30 2c 20 26 72 65 73 29 29 3d 3d       0, &res))==
262e0 53 51 4c 49 54 45 5f 4f 4b 29 0a 20 20 20 20 20  SQLITE_OK).     
262f0 20 20 20 20 20 20 20 26 26 20 28 72 65 73 3d 3d         && (res==
26300 30 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 26  0).            &
26310 26 20 28 2b 2b 63 6e 74 3c 31 30 30 29 29 3b 0a  & (++cnt<100));.
26320 20 20 20 20 20 20 69 66 28 20 72 63 20 29 20 67        if( rc ) g
26330 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
26340 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 69 66  _error;.      if
26350 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20  ( res==0 ){.    
26360 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
26370 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20  FULL;   /* IMP: 
26380 52 2d 33 38 32 31 39 2d 35 33 30 30 32 20 2a 2f  R-38219-53002 */
26390 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
263a0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
263b0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
263c0 61 73 73 65 72 74 28 20 76 3e 30 20 29 3b 20 20  assert( v>0 );  
263d0 2f 2a 20 45 56 3a 20 52 2d 34 30 38 31 32 2d 30  /* EV: R-40812-0
263e0 33 35 37 30 20 2a 2f 0a 20 20 20 20 7d 0a 20 20  3570 */.    }.  
263f0 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
26400 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43  veto = 0;.    pC
26410 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
26420 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d  CACHE_STALE;.  }
26430 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76  .  pOut->u.i = v
26440 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
26450 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 20   Opcode: Insert 
26460 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
26470 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b  * Synopsis: intk
26480 65 79 3d 72 5b 50 33 5d 20 64 61 74 61 3d 72 5b  ey=r[P3] data=r[
26490 50 32 5d 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  P2].**.** Write 
264a0 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20 74 68  an entry into th
264b0 65 20 74 61 62 6c 65 20 6f 66 20 63 75 72 73 6f  e table of curso
264c0 72 20 50 31 2e 20 20 41 20 6e 65 77 20 65 6e 74  r P1.  A new ent
264d0 72 79 20 69 73 0a 2a 2a 20 63 72 65 61 74 65 64  ry is.** created
264e0 20 69 66 20 69 74 20 64 6f 65 73 6e 27 74 20 61   if it doesn't a
264f0 6c 72 65 61 64 79 20 65 78 69 73 74 20 6f 72 20  lready exist or 
26500 74 68 65 20 64 61 74 61 20 66 6f 72 20 61 6e 20  the data for an 
26510 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72  existing.** entr
26520 79 20 69 73 20 6f 76 65 72 77 72 69 74 74 65 6e  y is overwritten
26530 2e 20 20 54 68 65 20 64 61 74 61 20 69 73 20 74  .  The data is t
26540 68 65 20 76 61 6c 75 65 20 4d 45 4d 5f 42 6c 6f  he value MEM_Blo
26550 62 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  b stored in regi
26560 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50  ster.** number P
26570 32 2e 20 54 68 65 20 6b 65 79 20 69 73 20 73 74  2. The key is st
26580 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
26590 20 50 33 2e 20 54 68 65 20 6b 65 79 20 6d 75 73   P3. The key mus
265a0 74 0a 2a 2a 20 62 65 20 61 20 4d 45 4d 5f 49 6e  t.** be a MEM_In
265b0 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  t..**.** If the 
265c0 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66  OPFLAG_NCHANGE f
265d0 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
265e0 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63  , then the row c
265f0 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a  hange count is.*
26600 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f  * incremented (o
26610 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 20 20  therwise not).  
26620 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 41  If the OPFLAG_LA
26630 53 54 52 4f 57 49 44 20 66 6c 61 67 20 6f 66 20  STROWID flag of 
26640 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20 74 68  P5 is set,.** th
26650 65 6e 20 72 6f 77 69 64 20 69 73 20 73 74 6f 72  en rowid is stor
26660 65 64 20 66 6f 72 20 73 75 62 73 65 71 75 65 6e  ed for subsequen
26670 74 20 72 65 74 75 72 6e 20 62 79 20 74 68 65 0a  t return by the.
26680 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f  ** sqlite3_last_
26690 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66  insert_rowid() f
266a0 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72 77 69  unction (otherwi
266b0 73 65 20 69 74 20 69 73 20 75 6e 6d 6f 64 69 66  se it is unmodif
266c0 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ied)..**.** If t
266d0 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45  he OPFLAG_USESEE
266e0 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6f 66 20  KRESULT flag of 
266f0 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 20 69  P5 is set, the i
26700 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69  mplementation mi
26710 67 68 74 0a 2a 2a 20 72 75 6e 20 66 61 73 74 65  ght.** run faste
26720 72 20 62 79 20 61 76 6f 69 64 69 6e 67 20 61 6e  r by avoiding an
26730 20 75 6e 6e 65 63 65 73 73 61 72 79 20 73 65 65   unnecessary see
26740 6b 20 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e 20  k on cursor P1. 
26750 20 48 6f 77 65 76 65 72 2c 0a 2a 2a 20 74 68 65   However,.** the
26760 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
26770 45 53 55 4c 54 20 66 6c 61 67 20 6d 75 73 74 20  ESULT flag must 
26780 6f 6e 6c 79 20 62 65 20 73 65 74 20 69 66 20 74  only be set if t
26790 68 65 72 65 20 68 61 76 65 20 62 65 65 6e 20 6e  here have been n
267a0 6f 20 70 72 69 6f 72 0a 2a 2a 20 73 65 65 6b 73  o prior.** seeks
267b0 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6f   on the cursor o
267c0 72 20 69 66 20 74 68 65 20 6d 6f 73 74 20 72 65  r if the most re
267d0 63 65 6e 74 20 73 65 65 6b 20 75 73 65 64 20 61  cent seek used a
267e0 20 6b 65 79 20 65 71 75 61 6c 20 74 6f 20 50 33   key equal to P3
267f0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
26800 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 66  PFLAG_ISUPDATE f
26810 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e  lag is set, then
26820 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   this opcode is 
26830 70 61 72 74 20 6f 66 20 61 6e 0a 2a 2a 20 55 50  part of an.** UP
26840 44 41 54 45 20 6f 70 65 72 61 74 69 6f 6e 2e 20  DATE operation. 
26850 20 4f 74 68 65 72 77 69 73 65 20 28 69 66 20 74   Otherwise (if t
26860 68 65 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72  he flag is clear
26870 29 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f  ) then this opco
26880 64 65 0a 2a 2a 20 69 73 20 70 61 72 74 20 6f 66  de.** is part of
26890 20 61 6e 20 49 4e 53 45 52 54 20 6f 70 65 72 61   an INSERT opera
268a0 74 69 6f 6e 2e 20 20 54 68 65 20 64 69 66 66 65  tion.  The diffe
268b0 72 65 6e 63 65 20 69 73 20 6f 6e 6c 79 20 69 6d  rence is only im
268c0 70 6f 72 74 61 6e 74 20 74 6f 0a 2a 2a 20 74 68  portant to.** th
268d0 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 2e 0a 2a  e update hook..*
268e0 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20 50  *.** Parameter P
268f0 34 20 6d 61 79 20 70 6f 69 6e 74 20 74 6f 20 61  4 may point to a
26900 20 54 61 62 6c 65 20 73 74 72 75 63 74 75 72 65   Table structure
26910 2c 20 6f 72 20 6d 61 79 20 62 65 20 4e 55 4c 4c  , or may be NULL
26920 2e 20 49 66 20 69 74 20 69 73 20 0a 2a 2a 20 6e  . If it is .** n
26930 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68  ot NULL, then th
26940 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 28 73  e update-hook (s
26950 71 6c 69 74 65 33 2e 78 55 70 64 61 74 65 43 61  qlite3.xUpdateCa
26960 6c 6c 62 61 63 6b 29 20 69 73 20 69 6e 76 6f 6b  llback) is invok
26970 65 64 20 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67  ed .** following
26980 20 61 20 73 75 63 63 65 73 73 66 75 6c 20 69 6e   a successful in
26990 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52  sert..**.** (WAR
269a0 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49 66 20 50 31  NING/TODO: If P1
269b0 20 69 73 20 61 20 70 73 65 75 64 6f 2d 63 75 72   is a pseudo-cur
269c0 73 6f 72 20 61 6e 64 20 50 32 20 69 73 20 64 79  sor and P2 is dy
269d0 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c  namically.** all
269e0 6f 63 61 74 65 64 2c 20 74 68 65 6e 20 6f 77 6e  ocated, then own
269f0 65 72 73 68 69 70 20 6f 66 20 50 32 20 69 73 20  ership of P2 is 
26a00 74 72 61 6e 73 66 65 72 72 65 64 20 74 6f 20 74  transferred to t
26a10 68 65 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72  he pseudo-cursor
26a20 0a 2a 2a 20 61 6e 64 20 72 65 67 69 73 74 65 72  .** and register
26a30 20 50 32 20 62 65 63 6f 6d 65 73 20 65 70 68 65   P2 becomes ephe
26a40 6d 65 72 61 6c 2e 20 20 49 66 20 74 68 65 20 63  meral.  If the c
26a50 75 72 73 6f 72 20 69 73 20 63 68 61 6e 67 65 64  ursor is changed
26a60 2c 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f  , the.** value o
26a70 66 20 72 65 67 69 73 74 65 72 20 50 32 20 77 69  f register P2 wi
26a80 6c 6c 20 74 68 65 6e 20 63 68 61 6e 67 65 2e 20  ll then change. 
26a90 20 4d 61 6b 65 20 73 75 72 65 20 74 68 69 73 20   Make sure this 
26aa0 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 61 75 73  does not.** caus
26ab0 65 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 29  e any problems.)
26ac0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
26ad0 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72  ruction only wor
26ae0 6b 73 20 6f 6e 20 74 61 62 6c 65 73 2e 20 20 54  ks on tables.  T
26af0 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e  he equivalent in
26b00 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72  struction.** for
26b10 20 69 6e 64 69 63 65 73 20 69 73 20 4f 50 5f 49   indices is OP_I
26b20 64 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20  dxInsert..*/./* 
26b30 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 49 6e  Opcode: InsertIn
26b40 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
26b50 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e  .** Synopsis: in
26b60 74 6b 65 79 3d 50 33 20 64 61 74 61 3d 72 5b 50  tkey=P3 data=r[P
26b70 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  2].**.** This wo
26b80 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65  rks exactly like
26b90 20 4f 50 5f 49 6e 73 65 72 74 20 65 78 63 65 70   OP_Insert excep
26ba0 74 20 74 68 61 74 20 74 68 65 20 6b 65 79 20 69  t that the key i
26bb0 73 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72  s the.** integer
26bc0 20 76 61 6c 75 65 20 50 33 2c 20 6e 6f 74 20 74   value P3, not t
26bd0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
26be0 69 6e 74 65 67 65 72 20 73 74 6f 72 65 64 20 69  integer stored i
26bf0 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
26c00 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74  /.case OP_Insert
26c10 3a 20 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72  : .case OP_Inser
26c20 74 49 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70  tInt: {.  Mem *p
26c30 44 61 74 61 3b 20 20 20 20 20 20 20 2f 2a 20 4d  Data;       /* M
26c40 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20  EM cell holding 
26c50 64 61 74 61 20 66 6f 72 20 74 68 65 20 72 65 63  data for the rec
26c60 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74  ord to be insert
26c70 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b 65  ed */.  Mem *pKe
26c80 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d  y;        /* MEM
26c90 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b 65   cell holding ke
26ca0 79 20 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72  y  for the recor
26cb0 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  d */.  VdbeCurso
26cc0 72 20 2a 70 43 3b 20 20 20 2f 2a 20 43 75 72 73  r *pC;   /* Curs
26cd0 6f 72 20 74 6f 20 74 61 62 6c 65 20 69 6e 74 6f  or to table into
26ce0 20 77 68 69 63 68 20 69 6e 73 65 72 74 20 69 73   which insert is
26cf0 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e   written */.  in
26d00 74 20 73 65 65 6b 52 65 73 75 6c 74 3b 20 20 20  t seekResult;   
26d10 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 70 72 69  /* Result of pri
26d20 6f 72 20 73 65 65 6b 20 6f 72 20 30 20 69 66 20  or seek or 0 if 
26d30 6e 6f 20 55 53 45 53 45 45 4b 52 45 53 55 4c 54  no USESEEKRESULT
26d40 20 66 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e 73 74   flag */.  const
26d50 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 2f 2a 20   char *zDb;  /* 
26d60 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 2d 20  database name - 
26d70 75 73 65 64 20 62 79 20 74 68 65 20 75 70 64 61  used by the upda
26d80 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 54 61 62  te hook */.  Tab
26d90 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f  le *pTab;      /
26da0 2a 20 54 61 62 6c 65 20 73 74 72 75 63 74 75 72  * Table structur
26db0 65 20 2d 20 75 73 65 64 20 62 79 20 75 70 64 61  e - used by upda
26dc0 74 65 20 61 6e 64 20 70 72 65 2d 75 70 64 61 74  te and pre-updat
26dd0 65 20 68 6f 6f 6b 73 20 2a 2f 0a 20 20 42 74 72  e hooks */.  Btr
26de0 65 65 50 61 79 6c 6f 61 64 20 78 3b 20 20 20 2f  eePayload x;   /
26df0 2a 20 50 61 79 6c 6f 61 64 20 74 6f 20 62 65 20  * Payload to be 
26e00 69 6e 73 65 72 74 65 64 20 2a 2f 0a 0a 20 20 70  inserted */..  p
26e10 44 61 74 61 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  Data = &aMem[pOp
26e20 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
26e30 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
26e40 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
26e50 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d  r );.  assert( m
26e60 65 6d 49 73 56 61 6c 69 64 28 70 44 61 74 61 29  emIsValid(pData)
26e70 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
26e80 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
26e90 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
26ea0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
26eb0 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
26ec0 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65  _BTREE );.  asse
26ed0 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  rt( pC->uc.pCurs
26ee0 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  or!=0 );.  asser
26ef0 74 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50  t( (pOp->p5 & OP
26f00 46 4c 41 47 5f 49 53 4e 4f 4f 50 29 20 7c 7c 20  FLAG_ISNOOP) || 
26f10 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  pC->isTable );. 
26f20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
26f30 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20 7c  type==P4_TABLE |
26f40 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65 3e 3d 50  | pOp->p4type>=P
26f50 34 5f 53 54 41 54 49 43 20 29 3b 0a 20 20 52 45  4_STATIC );.  RE
26f60 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
26f70 2d 3e 70 32 2c 20 70 44 61 74 61 29 3b 0a 20 20  ->p2, pData);.  
26f80 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57  sqlite3VdbeIncrW
26f90 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 70  riteCounter(p, p
26fa0 43 29 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e  C);..  if( pOp->
26fb0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72  opcode==OP_Inser
26fc0 74 20 29 7b 0a 20 20 20 20 70 4b 65 79 20 3d 20  t ){.    pKey = 
26fd0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
26fe0 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79      assert( pKey
26ff0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
27000 74 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  t );.    assert(
27010 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4b 65 79   memIsValid(pKey
27020 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  ) );.    REGISTE
27030 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
27040 20 70 4b 65 79 29 3b 0a 20 20 20 20 78 2e 6e 4b   pKey);.    x.nK
27050 65 79 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a  ey = pKey->u.i;.
27060 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
27070 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
27080 3d 3d 4f 50 5f 49 6e 73 65 72 74 49 6e 74 20 29  ==OP_InsertInt )
27090 3b 0a 20 20 20 20 78 2e 6e 4b 65 79 20 3d 20 70  ;.    x.nKey = p
270a0 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69  Op->p3;.  }..  i
270b0 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
270c0 50 34 5f 54 41 42 4c 45 20 26 26 20 48 41 53 5f  P4_TABLE && HAS_
270d0 55 50 44 41 54 45 5f 48 4f 4f 4b 28 64 62 29 20  UPDATE_HOOK(db) 
270e0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
270f0 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20  C->iDb>=0 );.   
27100 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70   zDb = db->aDb[p
27110 43 2d 3e 69 44 62 5d 2e 7a 44 62 53 4e 61 6d 65  C->iDb].zDbSName
27120 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 70 4f 70  ;.    pTab = pOp
27130 2d 3e 70 34 2e 70 54 61 62 3b 0a 20 20 20 20 61  ->p4.pTab;.    a
27140 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20  ssert( (pOp->p5 
27150 26 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 29  & OPFLAG_ISNOOP)
27160 20 7c 7c 20 48 61 73 52 6f 77 69 64 28 70 54 61   || HasRowid(pTa
27170 62 29 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  b) );.  }else{. 
27180 20 20 20 70 54 61 62 20 3d 20 30 3b 0a 20 20 20     pTab = 0;.   
27190 20 7a 44 62 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f   zDb = 0;  /* No
271a0 74 20 6e 65 65 64 65 64 2e 20 20 53 69 6c 65 6e  t needed.  Silen
271b0 63 65 20 61 20 63 6f 6d 70 69 6c 65 72 20 77 61  ce a compiler wa
271c0 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 7d 0a 0a 23  rning. */.  }..#
271d0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
271e0 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f  BLE_PREUPDATE_HO
271f0 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  OK.  /* Invoke t
27200 68 65 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f  he pre-update ho
27210 6f 6b 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20  ok, if any */.  
27220 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20  if( pTab ){.    
27230 69 66 28 20 64 62 2d 3e 78 50 72 65 55 70 64 61  if( db->xPreUpda
27240 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 21 28  teCallback && !(
27250 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
27260 5f 49 53 55 50 44 41 54 45 29 20 29 7b 0a 20 20  _ISUPDATE) ){.  
27270 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
27280 72 65 55 70 64 61 74 65 48 6f 6f 6b 28 70 2c 20  reUpdateHook(p, 
27290 70 43 2c 20 53 51 4c 49 54 45 5f 49 4e 53 45 52  pC, SQLITE_INSER
272a0 54 2c 20 7a 44 62 2c 20 70 54 61 62 2c 20 78 2e  T, zDb, pTab, x.
272b0 6e 4b 65 79 2c 70 4f 70 2d 3e 70 32 29 3b 0a 20  nKey,pOp->p2);. 
272c0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 64 62 2d     }.    if( db-
272d0 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
272e0 3d 3d 30 20 7c 7c 20 70 54 61 62 2d 3e 61 43 6f  ==0 || pTab->aCo
272f0 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a  l==0 ){.      /*
27300 20 50 72 65 76 65 6e 74 20 70 6f 73 74 2d 75 70   Prevent post-up
27310 64 61 74 65 20 68 6f 6f 6b 20 66 72 6f 6d 20 72  date hook from r
27320 75 6e 6e 69 6e 67 20 69 6e 20 63 61 73 65 73 20  unning in cases 
27330 77 68 65 6e 20 69 74 20 73 68 6f 75 6c 64 20 6e  when it should n
27340 6f 74 20 2a 2f 0a 20 20 20 20 20 20 70 54 61 62  ot */.      pTab
27350 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   = 0;.    }.  }.
27360 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
27370 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 29 20  OPFLAG_ISNOOP ) 
27380 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20  break;.#endif.. 
27390 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f   if( pOp->p5 & O
273a0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20  PFLAG_NCHANGE ) 
273b0 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20  p->nChange++;.  
273c0 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  if( pOp->p5 & OP
273d0 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 29  FLAG_LASTROWID )
273e0 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d   db->lastRowid =
273f0 20 78 2e 6e 4b 65 79 3b 0a 20 20 61 73 73 65 72   x.nKey;.  asser
27400 74 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20  t( pData->flags 
27410 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f  & (MEM_Blob|MEM_
27420 53 74 72 29 20 29 3b 0a 20 20 78 2e 70 44 61 74  Str) );.  x.pDat
27430 61 20 3d 20 70 44 61 74 61 2d 3e 7a 3b 0a 20 20  a = pData->z;.  
27440 78 2e 6e 44 61 74 61 20 3d 20 70 44 61 74 61 2d  x.nData = pData-
27450 3e 6e 3b 0a 20 20 73 65 65 6b 52 65 73 75 6c 74  >n;.  seekResult
27460 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f   = ((pOp->p5 & O
27470 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
27480 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52  ULT) ? pC->seekR
27490 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20 69 66  esult : 0);.  if
274a0 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26  ( pData->flags &
274b0 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
274c0 20 78 2e 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61   x.nZero = pData
274d0 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c  ->u.nZero;.  }el
274e0 73 65 7b 0a 20 20 20 20 78 2e 6e 5a 65 72 6f 20  se{.    x.nZero 
274f0 3d 20 30 3b 0a 20 20 7d 0a 20 20 78 2e 70 4b 65  = 0;.  }.  x.pKe
27500 79 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71  y = 0;.  rc = sq
27510 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74  lite3BtreeInsert
27520 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
27530 20 26 78 2c 0a 20 20 20 20 20 20 28 70 4f 70 2d   &x,.      (pOp-
27540 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 41 50  >p5 & (OPFLAG_AP
27550 50 45 4e 44 7c 4f 50 46 4c 41 47 5f 53 41 56 45  PEND|OPFLAG_SAVE
27560 50 4f 53 49 54 49 4f 4e 29 29 2c 20 73 65 65 6b  POSITION)), seek
27570 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20 20 70 43  Result.  );.  pC
27580 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
27590 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
275a0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
275b0 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76  STALE;..  /* Inv
275c0 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68  oke the update-h
275d0 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e  ook if required.
275e0 20 2a 2f 0a 20 20 69 66 28 20 72 63 20 29 20 67   */.  if( rc ) g
275f0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
27600 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 70 54  _error;.  if( pT
27610 61 62 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  ab ){.    assert
27620 28 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c  ( db->xUpdateCal
27630 6c 62 61 63 6b 21 3d 30 20 29 3b 0a 20 20 20 20  lback!=0 );.    
27640 61 73 73 65 72 74 28 20 70 54 61 62 2d 3e 61 43  assert( pTab->aC
27650 6f 6c 21 3d 30 20 29 3b 0a 20 20 20 20 64 62 2d  ol!=0 );.    db-
27660 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
27670 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c  (db->pUpdateArg,
27680 0a 20 20 20 20 20 20 20 20 20 20 20 28 70 4f 70  .           (pOp
27690 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53  ->p5 & OPFLAG_IS
276a0 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45  UPDATE) ? SQLITE
276b0 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45  _UPDATE : SQLITE
276c0 5f 49 4e 53 45 52 54 2c 0a 20 20 20 20 20 20 20  _INSERT,.       
276d0 20 20 20 20 7a 44 62 2c 20 70 54 61 62 2d 3e 7a      zDb, pTab->z
276e0 4e 61 6d 65 2c 20 78 2e 6e 4b 65 79 29 3b 0a 20  Name, x.nKey);. 
276f0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
27700 2a 20 4f 70 63 6f 64 65 3a 20 44 65 6c 65 74 65  * Opcode: Delete
27710 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
27720 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68 65  **.** Delete the
27730 20 72 65 63 6f 72 64 20 61 74 20 77 68 69 63 68   record at which
27740 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 69   the P1 cursor i
27750 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
27760 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ting..**.** If t
27770 68 65 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f  he OPFLAG_SAVEPO
27780 53 49 54 49 4f 4e 20 62 69 74 20 6f 66 20 74 68  SITION bit of th
27790 65 20 50 35 20 70 61 72 61 6d 65 74 65 72 20 69  e P5 parameter i
277a0 73 20 73 65 74 2c 20 74 68 65 6e 0a 2a 2a 20 74  s set, then.** t
277b0 68 65 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62  he cursor will b
277c0 65 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20  e left pointing 
277d0 61 74 20 20 65 69 74 68 65 72 20 74 68 65 20 6e  at  either the n
277e0 65 78 74 20 6f 72 20 74 68 65 20 70 72 65 76 69  ext or the previ
277f0 6f 75 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e  ous.** record in
27800 20 74 68 65 20 74 61 62 6c 65 2e 20 49 66 20 69   the table. If i
27810 74 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69  t is left pointi
27820 6e 67 20 61 74 20 74 68 65 20 6e 65 78 74 20 72  ng at the next r
27830 65 63 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20 74  ecord, then.** t
27840 68 65 20 6e 65 78 74 20 4e 65 78 74 20 69 6e 73  he next Next ins
27850 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65  truction will be
27860 20 61 20 6e 6f 2d 6f 70 2e 20 41 73 20 61 20 72   a no-op. As a r
27870 65 73 75 6c 74 2c 20 69 6e 20 74 68 69 73 20 63  esult, in this c
27880 61 73 65 0a 2a 2a 20 69 74 20 69 73 20 6f 6b 20  ase.** it is ok 
27890 74 6f 20 64 65 6c 65 74 65 20 61 20 72 65 63 6f  to delete a reco
278a0 72 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61  rd from within a
278b0 20 4e 65 78 74 20 6c 6f 6f 70 2e 20 49 66 20 0a   Next loop. If .
278c0 2a 2a 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f  ** OPFLAG_SAVEPO
278d0 53 49 54 49 4f 4e 20 62 69 74 20 6f 66 20 50 35  SITION bit of P5
278e0 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20   is clear, then 
278f0 74 68 65 20 63 75 72 73 6f 72 20 77 69 6c 6c 20  the cursor will 
27900 62 65 0a 2a 2a 20 6c 65 66 74 20 69 6e 20 61 6e  be.** left in an
27910 20 75 6e 64 65 66 69 6e 65 64 20 73 74 61 74 65   undefined state
27920 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
27930 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20  PFLAG_AUXDELETE 
27940 62 69 74 20 69 73 20 73 65 74 20 6f 6e 20 50 35  bit is set on P5
27950 2c 20 74 68 61 74 20 69 6e 64 69 63 61 74 65 73  , that indicates
27960 20 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 64 65   that this.** de
27970 6c 65 74 65 20 6f 6e 65 20 6f 66 20 73 65 76 65  lete one of seve
27980 72 61 6c 20 61 73 73 6f 63 69 61 74 65 64 20 77  ral associated w
27990 69 74 68 20 64 65 6c 65 74 69 6e 67 20 61 20 74  ith deleting a t
279a0 61 62 6c 65 20 72 6f 77 20 61 6e 64 20 61 6c 6c  able row and all
279b0 20 69 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74   its.** associat
279c0 65 64 20 69 6e 64 65 78 20 65 6e 74 72 69 65 73  ed index entries
279d0 2e 20 20 45 78 61 63 74 6c 79 20 6f 6e 65 20 6f  .  Exactly one o
279e0 66 20 74 68 6f 73 65 20 64 65 6c 65 74 65 73 20  f those deletes 
279f0 69 73 20 74 68 65 20 22 70 72 69 6d 61 72 79 22  is the "primary"
27a00 0a 2a 2a 20 64 65 6c 65 74 65 2e 20 20 54 68 65  .** delete.  The
27a10 20 6f 74 68 65 72 73 20 61 72 65 20 61 6c 6c 20   others are all 
27a20 6f 6e 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c  on OPFLAG_FORDEL
27a30 45 54 45 20 63 75 72 73 6f 72 73 20 6f 72 20 65  ETE cursors or e
27a40 6c 73 65 20 61 72 65 0a 2a 2a 20 6d 61 72 6b 65  lse are.** marke
27a50 64 20 77 69 74 68 20 74 68 65 20 41 55 58 44 45  d with the AUXDE
27a60 4c 45 54 45 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a  LETE flag..**.**
27a70 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e   If the OPFLAG_N
27a80 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50  CHANGE flag of P
27a90 32 20 28 4e 42 3a 20 50 32 20 6e 6f 74 20 50 35  2 (NB: P2 not P5
27aa0 29 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74  ) is set, then t
27ab0 68 65 20 72 6f 77 0a 2a 2a 20 63 68 61 6e 67 65  he row.** change
27ac0 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d   count is increm
27ad0 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65  ented (otherwise
27ae0 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20   not)..**.** P1 
27af0 6d 75 73 74 20 6e 6f 74 20 62 65 20 70 73 65 75  must not be pseu
27b00 64 6f 2d 74 61 62 6c 65 2e 20 20 49 74 20 68 61  do-table.  It ha
27b10 73 20 74 6f 20 62 65 20 61 20 72 65 61 6c 20 74  s to be a real t
27b20 61 62 6c 65 20 77 69 74 68 0a 2a 2a 20 6d 75 6c  able with.** mul
27b30 74 69 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a  tiple rows..**.*
27b40 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e  * If P4 is not N
27b50 55 4c 4c 20 74 68 65 6e 20 69 74 20 70 6f 69 6e  ULL then it poin
27b60 74 73 20 74 6f 20 61 20 54 61 62 6c 65 20 6f 62  ts to a Table ob
27b70 6a 65 63 74 2e 20 49 6e 20 74 68 69 73 20 63 61  ject. In this ca
27b80 73 65 20 65 69 74 68 65 72 20 0a 2a 2a 20 74 68  se either .** th
27b90 65 20 75 70 64 61 74 65 20 6f 72 20 70 72 65 2d  e update or pre-
27ba0 75 70 64 61 74 65 20 68 6f 6f 6b 2c 20 6f 72 20  update hook, or 
27bb0 62 6f 74 68 2c 20 6d 61 79 20 62 65 20 69 6e 76  both, may be inv
27bc0 6f 6b 65 64 2e 20 54 68 65 20 50 31 20 63 75 72  oked. The P1 cur
27bd0 73 6f 72 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65  sor must.** have
27be0 20 62 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64   been positioned
27bf0 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75   using OP_NotFou
27c00 6e 64 20 70 72 69 6f 72 20 74 6f 20 69 6e 76 6f  nd prior to invo
27c10 6b 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65  king this opcode
27c20 20 69 6e 20 0a 2a 2a 20 74 68 69 73 20 63 61 73   in .** this cas
27c30 65 2e 20 53 70 65 63 69 66 69 63 61 6c 6c 79 2c  e. Specifically,
27c40 20 69 66 20 6f 6e 65 20 69 73 20 63 6f 6e 66 69   if one is confi
27c50 67 75 72 65 64 2c 20 74 68 65 20 70 72 65 2d 75  gured, the pre-u
27c60 70 64 61 74 65 20 68 6f 6f 6b 20 69 73 20 0a 2a  pdate hook is .*
27c70 2a 20 69 6e 76 6f 6b 65 64 20 69 66 20 50 34 20  * invoked if P4 
27c80 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 54 68 65  is not NULL. The
27c90 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 73 20   update-hook is 
27ca0 69 6e 76 6f 6b 65 64 20 69 66 20 6f 6e 65 20 69  invoked if one i
27cb0 73 20 63 6f 6e 66 69 67 75 72 65 64 2c 20 0a 2a  s configured, .*
27cc0 2a 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  * P4 is not NULL
27cd0 2c 20 61 6e 64 20 74 68 65 20 4f 50 46 4c 41 47  , and the OPFLAG
27ce0 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 69 73  _NCHANGE flag is
27cf0 20 73 65 74 20 69 6e 20 50 32 2e 0a 2a 2a 0a 2a   set in P2..**.*
27d00 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
27d10 49 53 55 50 44 41 54 45 20 66 6c 61 67 20 69 73  ISUPDATE flag is
27d20 20 73 65 74 20 69 6e 20 50 32 2c 20 74 68 65 6e   set in P2, then
27d30 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P3 contains the
27d40 20 61 64 64 72 65 73 73 0a 2a 2a 20 6f 66 20 74   address.** of t
27d50 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74  he memory cell t
27d60 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
27d70 20 76 61 6c 75 65 20 74 68 61 74 20 74 68 65 20   value that the 
27d80 72 6f 77 69 64 20 6f 66 20 74 68 65 20 72 6f 77  rowid of the row
27d90 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 73 65 74 20   will.** be set 
27da0 74 6f 20 62 79 20 74 68 65 20 75 70 64 61 74 65  to by the update
27db0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 6c  ..*/.case OP_Del
27dc0 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ete: {.  VdbeCur
27dd0 73 6f 72 20 2a 70 43 3b 0a 20 20 63 6f 6e 73 74  sor *pC;.  const
27de0 20 63 68 61 72 20 2a 7a 44 62 3b 0a 20 20 54 61   char *zDb;.  Ta
27df0 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 69 6e 74  ble *pTab;.  int
27e00 20 6f 70 66 6c 61 67 73 3b 0a 0a 20 20 6f 70 66   opflags;..  opf
27e10 6c 61 67 73 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  lags = pOp->p2;.
27e20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
27e30 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
27e40 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
27e50 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
27e60 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
27e70 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
27e80 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
27e90 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
27ea0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
27eb0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20  ->uc.pCursor!=0 
27ec0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
27ed0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
27ee0 3d 30 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  =0 );.  sqlite3V
27ef0 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e  dbeIncrWriteCoun
27f00 74 65 72 28 70 2c 20 70 43 29 3b 0a 0a 23 69 66  ter(p, pC);..#if
27f10 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
27f20 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79  .  if( pOp->p4ty
27f30 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26 20  pe==P4_TABLE && 
27f40 48 61 73 52 6f 77 69 64 28 70 4f 70 2d 3e 70 34  HasRowid(pOp->p4
27f50 2e 70 54 61 62 29 20 26 26 20 70 4f 70 2d 3e 70  .pTab) && pOp->p
27f60 35 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49  5==0 ){.    /* I
27f70 66 20 70 35 20 69 73 20 7a 65 72 6f 2c 20 74 68  f p5 is zero, th
27f80 65 20 73 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e  e seek operation
27f90 20 74 68 61 74 20 70 6f 73 69 74 69 6f 6e 65 64   that positioned
27fa0 20 74 68 65 20 63 75 72 73 6f 72 20 70 72 69 6f   the cursor prio
27fb0 72 20 74 6f 0a 20 20 20 20 2a 2a 20 4f 50 5f 44  r to.    ** OP_D
27fc0 65 6c 65 74 65 20 77 69 6c 6c 20 68 61 76 65 20  elete will have 
27fd0 61 6c 73 6f 20 73 65 74 20 74 68 65 20 70 43 2d  also set the pC-
27fe0 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 66 69  >movetoTarget fi
27ff0 65 6c 64 20 74 6f 20 74 68 65 20 72 6f 77 69 64  eld to the rowid
28000 20 6f 66 0a 20 20 20 20 2a 2a 20 74 68 65 20 72   of.    ** the r
28010 6f 77 20 74 68 61 74 20 69 73 20 62 65 69 6e 67  ow that is being
28020 20 64 65 6c 65 74 65 64 20 2a 2f 0a 20 20 20 20   deleted */.    
28030 69 36 34 20 69 4b 65 79 20 3d 20 73 71 6c 69 74  i64 iKey = sqlit
28040 65 33 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65  e3BtreeIntegerKe
28050 79 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  y(pC->uc.pCursor
28060 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
28070 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3d  C->movetoTarget=
28080 3d 69 4b 65 79 20 29 3b 0a 20 20 7d 0a 23 65 6e  =iKey );.  }.#en
28090 64 69 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65  dif..  /* If the
280a0 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 72 20   update-hook or 
280b0 70 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20  pre-update-hook 
280c0 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c  will be invoked,
280d0 20 73 65 74 20 7a 44 62 20 74 6f 0a 20 20 2a 2a   set zDb to.  **
280e0 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
280f0 20 64 62 20 74 6f 20 70 61 73 73 20 61 73 20 74   db to pass as t
28100 6f 20 69 74 2e 20 41 6c 73 6f 20 73 65 74 20 6c  o it. Also set l
28110 6f 63 61 6c 20 70 54 61 62 20 74 6f 20 61 20 63  ocal pTab to a c
28120 6f 70 79 0a 20 20 2a 2a 20 6f 66 20 70 34 2e 70  opy.  ** of p4.p
28130 54 61 62 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66  Tab. Finally, if
28140 20 70 35 20 69 73 20 74 72 75 65 2c 20 69 6e 64   p5 is true, ind
28150 69 63 61 74 69 6e 67 20 74 68 61 74 20 74 68 69  icating that thi
28160 73 20 63 75 72 73 6f 72 20 77 61 73 0a 20 20 2a  s cursor was.  *
28170 2a 20 6c 61 73 74 20 6d 6f 76 65 64 20 77 69 74  * last moved wit
28180 68 20 4f 50 5f 4e 65 78 74 20 6f 72 20 4f 50 5f  h OP_Next or OP_
28190 50 72 65 76 2c 20 6e 6f 74 20 53 65 65 6b 20 6f  Prev, not Seek o
281a0 72 20 4e 6f 74 46 6f 75 6e 64 2c 20 73 65 74 20  r NotFound, set 
281b0 0a 20 20 2a 2a 20 56 64 62 65 43 75 72 73 6f 72  .  ** VdbeCursor
281c0 2e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 74 6f  .movetoTarget to
281d0 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
281e0 69 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f  id.  */.  if( pO
281f0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41  p->p4type==P4_TA
28200 42 4c 45 20 26 26 20 48 41 53 5f 55 50 44 41 54  BLE && HAS_UPDAT
28210 45 5f 48 4f 4f 4b 28 64 62 29 20 29 7b 0a 20 20  E_HOOK(db) ){.  
28220 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44    assert( pC->iD
28230 62 3e 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65  b>=0 );.    asse
28240 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62  rt( pOp->p4.pTab
28250 21 3d 30 20 29 3b 0a 20 20 20 20 7a 44 62 20 3d  !=0 );.    zDb =
28260 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62   db->aDb[pC->iDb
28270 5d 2e 7a 44 62 53 4e 61 6d 65 3b 0a 20 20 20 20  ].zDbSName;.    
28280 70 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  pTab = pOp->p4.p
28290 54 61 62 3b 0a 20 20 20 20 69 66 28 20 28 70 4f  Tab;.    if( (pO
282a0 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 53  p->p5 & OPFLAG_S
282b0 41 56 45 50 4f 53 49 54 49 4f 4e 29 21 3d 30 20  AVEPOSITION)!=0 
282c0 26 26 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  && pC->isTable )
282d0 7b 0a 20 20 20 20 20 20 70 43 2d 3e 6d 6f 76 65  {.      pC->move
282e0 74 6f 54 61 72 67 65 74 20 3d 20 73 71 6c 69 74  toTarget = sqlit
282f0 65 33 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65  e3BtreeIntegerKe
28300 79 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  y(pC->uc.pCursor
28310 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  );.    }.  }else
28320 7b 0a 20 20 20 20 7a 44 62 20 3d 20 30 3b 20 20  {.    zDb = 0;  
28330 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20   /* Not needed. 
28340 20 53 69 6c 65 6e 63 65 20 61 20 63 6f 6d 70 69   Silence a compi
28350 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a  ler warning. */.
28360 20 20 20 20 70 54 61 62 20 3d 20 30 3b 20 20 2f      pTab = 0;  /
28370 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 53  * Not needed.  S
28380 69 6c 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65  ilence a compile
28390 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  r warning. */.  
283a0 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  }..#ifdef SQLITE
283b0 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54  _ENABLE_PREUPDAT
283c0 45 5f 48 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f  E_HOOK.  /* Invo
283d0 6b 65 20 74 68 65 20 70 72 65 2d 75 70 64 61 74  ke the pre-updat
283e0 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72  e-hook if requir
283f0 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d  ed. */.  if( db-
28400 3e 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62  >xPreUpdateCallb
28410 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 70  ack && pOp->p4.p
28420 54 61 62 20 29 7b 0a 20 20 20 20 61 73 73 65 72  Tab ){.    asser
28430 74 28 20 21 28 6f 70 66 6c 61 67 73 20 26 20 4f  t( !(opflags & O
28440 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20  PFLAG_ISUPDATE) 
28450 0a 20 20 20 20 20 20 20 20 20 7c 7c 20 48 61 73  .         || Has
28460 52 6f 77 69 64 28 70 54 61 62 29 3d 3d 30 20 0a  Rowid(pTab)==0 .
28470 20 20 20 20 20 20 20 20 20 7c 7c 20 28 61 4d 65           || (aMe
28480 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 66 6c 61 67 73  m[pOp->p3].flags
28490 20 26 20 4d 45 4d 5f 49 6e 74 29 20 0a 20 20 20   & MEM_Int) .   
284a0 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   );.    sqlite3V
284b0 64 62 65 50 72 65 55 70 64 61 74 65 48 6f 6f 6b  dbePreUpdateHook
284c0 28 70 2c 20 70 43 2c 0a 20 20 20 20 20 20 20 20  (p, pC,.        
284d0 28 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41  (opflags & OPFLA
284e0 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53 51  G_ISUPDATE) ? SQ
284f0 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53 51  LITE_UPDATE : SQ
28500 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20 0a 20 20  LITE_DELETE, .  
28510 20 20 20 20 20 20 7a 44 62 2c 20 70 54 61 62 2c        zDb, pTab,
28520 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65   pC->movetoTarge
28530 74 2c 0a 20 20 20 20 20 20 20 20 70 4f 70 2d 3e  t,.        pOp->
28540 70 33 0a 20 20 20 20 29 3b 0a 20 20 7d 0a 20 20  p3.    );.  }.  
28550 69 66 28 20 6f 70 66 6c 61 67 73 20 26 20 4f 50  if( opflags & OP
28560 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 29 20 62 72  FLAG_ISNOOP ) br
28570 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 20 0a 20 20  eak;.#endif. .  
28580 2f 2a 20 4f 6e 6c 79 20 66 6c 61 67 73 20 74 68  /* Only flags th
28590 61 74 20 63 61 6e 20 62 65 20 73 65 74 20 61 72  at can be set ar
285a0 65 20 53 41 56 45 50 4f 49 53 54 49 4f 4e 20 61  e SAVEPOISTION a
285b0 6e 64 20 41 55 58 44 45 4c 45 54 45 20 2a 2f 20  nd AUXDELETE */ 
285c0 0a 20 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d  .  assert( (pOp-
285d0 3e 70 35 20 26 20 7e 28 4f 50 46 4c 41 47 5f 53  >p5 & ~(OPFLAG_S
285e0 41 56 45 50 4f 53 49 54 49 4f 4e 7c 4f 50 46 4c  AVEPOSITION|OPFL
285f0 41 47 5f 41 55 58 44 45 4c 45 54 45 29 29 3d 3d  AG_AUXDELETE))==
28600 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f  0 );.  assert( O
28610 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49  PFLAG_SAVEPOSITI
28620 4f 4e 3d 3d 42 54 52 45 45 5f 53 41 56 45 50 4f  ON==BTREE_SAVEPO
28630 53 49 54 49 4f 4e 20 29 3b 0a 20 20 61 73 73 65  SITION );.  asse
28640 72 74 28 20 4f 50 46 4c 41 47 5f 41 55 58 44 45  rt( OPFLAG_AUXDE
28650 4c 45 54 45 3d 3d 42 54 52 45 45 5f 41 55 58 44  LETE==BTREE_AUXD
28660 45 4c 45 54 45 20 29 3b 0a 0a 23 69 66 64 65 66  ELETE );..#ifdef
28670 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
28680 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 3d 3d 30  if( p->pFrame==0
28690 20 29 7b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e   ){.    if( pC->
286a0 69 73 45 70 68 65 6d 65 72 61 6c 3d 3d 30 0a 20  isEphemeral==0. 
286b0 20 20 20 20 20 20 20 26 26 20 28 70 4f 70 2d 3e         && (pOp->
286c0 70 35 20 26 20 4f 50 46 4c 41 47 5f 41 55 58 44  p5 & OPFLAG_AUXD
286d0 45 4c 45 54 45 29 3d 3d 30 0a 20 20 20 20 20 20  ELETE)==0.      
286e0 20 20 26 26 20 28 70 43 2d 3e 77 72 46 6c 61 67    && (pC->wrFlag
286f0 20 26 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c   & OPFLAG_FORDEL
28700 45 54 45 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b  ETE)==0.      ){
28710 0a 20 20 20 20 20 20 6e 45 78 74 72 61 44 65 6c  .      nExtraDel
28720 65 74 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20  ete++;.    }.   
28730 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f   if( pOp->p2 & O
28740 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 7b  PFLAG_NCHANGE ){
28750 0a 20 20 20 20 20 20 6e 45 78 74 72 61 44 65 6c  .      nExtraDel
28760 65 74 65 2d 2d 3b 0a 20 20 20 20 7d 0a 20 20 7d  ete--;.    }.  }
28770 0a 23 65 6e 64 69 66 0a 0a 20 20 72 63 20 3d 20  .#endif..  rc = 
28780 73 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65  sqlite3BtreeDele
28790 74 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  te(pC->uc.pCurso
287a0 72 2c 20 70 4f 70 2d 3e 70 35 29 3b 0a 20 20 70  r, pOp->p5);.  p
287b0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
287c0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
287d0 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d  pC->seekResult =
287e0 20 30 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67   0;.  if( rc ) g
287f0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
28800 5f 65 72 72 6f 72 3b 0a 0a 20 20 2f 2a 20 49 6e  _error;..  /* In
28810 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d  voke the update-
28820 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64  hook if required
28830 2e 20 2a 2f 0a 20 20 69 66 28 20 6f 70 66 6c 61  . */.  if( opfla
28840 67 73 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41  gs & OPFLAG_NCHA
28850 4e 47 45 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43  NGE ){.    p->nC
28860 68 61 6e 67 65 2b 2b 3b 0a 20 20 20 20 69 66 28  hange++;.    if(
28870 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
28880 62 61 63 6b 20 26 26 20 48 61 73 52 6f 77 69 64  back && HasRowid
28890 28 70 54 61 62 29 20 29 7b 0a 20 20 20 20 20 20  (pTab) ){.      
288a0 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
288b0 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41  ack(db->pUpdateA
288c0 72 67 2c 20 53 51 4c 49 54 45 5f 44 45 4c 45 54  rg, SQLITE_DELET
288d0 45 2c 20 7a 44 62 2c 20 70 54 61 62 2d 3e 7a 4e  E, zDb, pTab->zN
288e0 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20 70  ame,.          p
288f0 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 29  C->movetoTarget)
28900 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
28910 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20  pC->iDb>=0 );.  
28920 20 20 7d 0a 20 20 7d 0a 0a 20 20 62 72 65 61 6b    }.  }..  break
28930 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  ;.}./* Opcode: R
28940 65 73 65 74 43 6f 75 6e 74 20 2a 20 2a 20 2a 20  esetCount * * * 
28950 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61  * *.**.** The va
28960 6c 75 65 20 6f 66 20 74 68 65 20 63 68 61 6e 67  lue of the chang
28970 65 20 63 6f 75 6e 74 65 72 20 69 73 20 63 6f 70  e counter is cop
28980 69 65 64 20 74 6f 20 74 68 65 20 64 61 74 61 62  ied to the datab
28990 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68  ase handle.** ch
289a0 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 28 72 65  ange counter (re
289b0 74 75 72 6e 65 64 20 62 79 20 73 75 62 73 65 71  turned by subseq
289c0 75 65 6e 74 20 63 61 6c 6c 73 20 74 6f 20 73 71  uent calls to sq
289d0 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 29  lite3_changes())
289e0 2e 0a 2a 2a 20 54 68 65 6e 20 74 68 65 20 56 4d  ..** Then the VM
289f0 73 20 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67  s internal chang
28a00 65 20 63 6f 75 6e 74 65 72 20 72 65 73 65 74 73  e counter resets
28a10 20 74 6f 20 30 2e 0a 2a 2a 20 54 68 69 73 20 69   to 0..** This i
28a20 73 20 75 73 65 64 20 62 79 20 74 72 69 67 67 65  s used by trigge
28a30 72 20 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63  r programs..*/.c
28a40 61 73 65 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e  ase OP_ResetCoun
28a50 74 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64  t: {.  sqlite3Vd
28a60 62 65 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c  beSetChanges(db,
28a70 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20   p->nChange);.  
28a80 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a  p->nChange = 0;.
28a90 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
28aa0 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 43 6f 6d  pcode: SorterCom
28ab0 70 61 72 65 20 50 31 20 50 32 20 50 33 20 50 34  pare P1 P2 P3 P4
28ac0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
28ad0 20 6b 65 79 28 50 31 29 21 3d 74 72 69 6d 28 72   key(P1)!=trim(r
28ae0 5b 50 33 5d 2c 50 34 29 20 67 6f 74 6f 20 50 32  [P3],P4) goto P2
28af0 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 73  .**.** P1 is a s
28b00 6f 72 74 65 72 20 63 75 72 73 6f 72 2e 20 54 68  orter cursor. Th
28b10 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63  is instruction c
28b20 6f 6d 70 61 72 65 73 20 61 20 70 72 65 66 69 78  ompares a prefix
28b30 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72   of the.** recor
28b40 64 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74  d blob in regist
28b50 65 72 20 50 33 20 61 67 61 69 6e 73 74 20 61 20  er P3 against a 
28b60 70 72 65 66 69 78 20 6f 66 20 74 68 65 20 65 6e  prefix of the en
28b70 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 74 68 65  try that .** the
28b80 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 20 63   sorter cursor c
28b90 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 73 20  urrently points 
28ba0 74 6f 2e 20 20 4f 6e 6c 79 20 74 68 65 20 66 69  to.  Only the fi
28bb0 72 73 74 20 50 34 20 66 69 65 6c 64 73 0a 2a 2a  rst P4 fields.**
28bc0 20 6f 66 20 72 5b 50 33 5d 20 61 6e 64 20 74 68   of r[P3] and th
28bd0 65 20 73 6f 72 74 65 72 20 72 65 63 6f 72 64 20  e sorter record 
28be0 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 0a 2a 2a  are compared..**
28bf0 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 33  .** If either P3
28c00 20 6f 72 20 74 68 65 20 73 6f 72 74 65 72 20 63   or the sorter c
28c10 6f 6e 74 61 69 6e 73 20 61 20 4e 55 4c 4c 20 69  ontains a NULL i
28c20 6e 20 6f 6e 65 20 6f 66 20 74 68 65 69 72 20 73  n one of their s
28c30 69 67 6e 69 66 69 63 61 6e 74 0a 2a 2a 20 66 69  ignificant.** fi
28c40 65 6c 64 73 20 28 6e 6f 74 20 63 6f 75 6e 74 69  elds (not counti
28c50 6e 67 20 74 68 65 20 50 34 20 66 69 65 6c 64 73  ng the P4 fields
28c60 20 61 74 20 74 68 65 20 65 6e 64 20 77 68 69 63   at the end whic
28c70 68 20 61 72 65 20 69 67 6e 6f 72 65 64 29 20 74  h are ignored) t
28c80 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61  hen.** the compa
28c90 72 69 73 6f 6e 20 69 73 20 61 73 73 75 6d 65 64  rison is assumed
28ca0 20 74 6f 20 62 65 20 65 71 75 61 6c 2e 0a 2a 2a   to be equal..**
28cb0 0a 2a 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68  .** Fall through
28cc0 20 74 6f 20 6e 65 78 74 20 69 6e 73 74 72 75 63   to next instruc
28cd0 74 69 6f 6e 20 69 66 20 74 68 65 20 74 77 6f 20  tion if the two 
28ce0 72 65 63 6f 72 64 73 20 63 6f 6d 70 61 72 65 20  records compare 
28cf0 65 71 75 61 6c 20 74 6f 0a 2a 2a 20 65 61 63 68  equal to.** each
28d00 20 6f 74 68 65 72 2e 20 20 4a 75 6d 70 20 74 6f   other.  Jump to
28d10 20 50 32 20 69 66 20 74 68 65 79 20 61 72 65 20   P2 if they are 
28d20 64 69 66 66 65 72 65 6e 74 2e 0a 2a 2f 0a 63 61  different..*/.ca
28d30 73 65 20 4f 50 5f 53 6f 72 74 65 72 43 6f 6d 70  se OP_SorterComp
28d40 61 72 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  are: {.  VdbeCur
28d50 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72  sor *pC;.  int r
28d60 65 73 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 43 6f  es;.  int nKeyCo
28d70 6c 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70  l;..  pC = p->ap
28d80 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
28d90 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72  assert( isSorter
28da0 28 70 43 29 20 29 3b 0a 20 20 61 73 73 65 72 74  (pC) );.  assert
28db0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
28dc0 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70 49 6e  4_INT32 );.  pIn
28dd0 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
28de0 33 5d 3b 0a 20 20 6e 4b 65 79 43 6f 6c 20 3d 20  3];.  nKeyCol = 
28df0 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 72 65 73  pOp->p4.i;.  res
28e00 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c   = 0;.  rc = sql
28e10 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 43 6f  ite3VdbeSorterCo
28e20 6d 70 61 72 65 28 70 43 2c 20 70 49 6e 33 2c 20  mpare(pC, pIn3, 
28e30 6e 4b 65 79 43 6f 6c 2c 20 26 72 65 73 29 3b 0a  nKeyCol, &res);.
28e40 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
28e50 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69  n(res!=0,2);.  i
28e60 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
28e70 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
28e80 0a 20 20 69 66 28 20 72 65 73 20 29 20 67 6f 74  .  if( res ) got
28e90 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
28ea0 62 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70  break;.};../* Op
28eb0 63 6f 64 65 3a 20 53 6f 72 74 65 72 44 61 74 61  code: SorterData
28ec0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
28ed0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
28ee0 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74  =data.**.** Writ
28ef0 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
28f00 50 32 20 74 68 65 20 63 75 72 72 65 6e 74 20 73  P2 the current s
28f10 6f 72 74 65 72 20 64 61 74 61 20 66 6f 72 20 73  orter data for s
28f20 6f 72 74 65 72 20 63 75 72 73 6f 72 20 50 31 2e  orter cursor P1.
28f30 0a 2a 2a 20 54 68 65 6e 20 63 6c 65 61 72 20 74  .** Then clear t
28f40 68 65 20 63 6f 6c 75 6d 6e 20 68 65 61 64 65 72  he column header
28f50 20 63 61 63 68 65 20 6f 6e 20 63 75 72 73 6f 72   cache on cursor
28f60 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P3..**.** This 
28f70 6f 70 63 6f 64 65 20 69 73 20 6e 6f 72 6d 61 6c  opcode is normal
28f80 6c 79 20 75 73 65 20 74 6f 20 6d 6f 76 65 20 61  ly use to move a
28f90 20 72 65 63 6f 72 64 20 6f 75 74 20 6f 66 20 74   record out of t
28fa0 68 65 20 73 6f 72 74 65 72 20 61 6e 64 20 69 6e  he sorter and in
28fb0 74 6f 0a 2a 2a 20 61 20 72 65 67 69 73 74 65 72  to.** a register
28fc0 20 74 68 61 74 20 69 73 20 74 68 65 20 73 6f 75   that is the sou
28fd0 72 63 65 20 66 6f 72 20 61 20 70 73 65 75 64 6f  rce for a pseudo
28fe0 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 20 63 72  -table cursor cr
28ff0 65 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20 4f  eated using.** O
29000 70 65 6e 50 73 65 75 64 6f 2e 20 20 54 68 61 74  penPseudo.  That
29010 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75   pseudo-table cu
29020 72 73 6f 72 20 69 73 20 74 68 65 20 6f 6e 65 20  rsor is the one 
29030 74 68 61 74 20 69 73 20 69 64 65 6e 74 69 66 69  that is identifi
29040 65 64 20 62 79 0a 2a 2a 20 70 61 72 61 6d 65 74  ed by.** paramet
29050 65 72 20 50 33 2e 20 20 43 6c 65 61 72 69 6e 67  er P3.  Clearing
29060 20 74 68 65 20 50 33 20 63 6f 6c 75 6d 6e 20 63   the P3 column c
29070 61 63 68 65 20 61 73 20 70 61 72 74 20 6f 66 20  ache as part of 
29080 74 68 69 73 20 6f 70 63 6f 64 65 20 73 61 76 65  this opcode save
29090 73 0a 2a 2a 20 75 73 20 66 72 6f 6d 20 68 61 76  s.** us from hav
290a0 69 6e 67 20 74 6f 20 69 73 73 75 65 20 61 20 73  ing to issue a s
290b0 65 70 61 72 61 74 65 20 4e 75 6c 6c 52 6f 77 20  eparate NullRow 
290c0 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 6f 20 63  instruction to c
290d0 6c 65 61 72 20 74 68 61 74 20 63 61 63 68 65 2e  lear that cache.
290e0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74  .*/.case OP_Sort
290f0 65 72 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65  erData: {.  Vdbe
29100 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 70  Cursor *pC;..  p
29110 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
29120 3e 70 32 5d 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  >p2];.  pC = p->
29130 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
29140 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74    assert( isSort
29150 65 72 28 70 43 29 20 29 3b 0a 20 20 72 63 20 3d  er(pC) );.  rc =
29160 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
29170 65 72 52 6f 77 6b 65 79 28 70 43 2c 20 70 4f 75  erRowkey(pC, pOu
29180 74 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63  t);.  assert( rc
29190 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28  !=SQLITE_OK || (
291a0 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pOut->flags & ME
291b0 4d 5f 42 6c 6f 62 29 20 29 3b 0a 20 20 61 73 73  M_Blob) );.  ass
291c0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
291d0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
291e0 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 72  ursor );.  if( r
291f0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
29200 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70  ue_to_error;.  p
29210 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 33 5d  ->apCsr[pOp->p3]
29220 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
29230 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 62  CACHE_STALE;.  b
29240 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
29250 64 65 3a 20 52 6f 77 44 61 74 61 20 50 31 20 50  de: RowData P1 P
29260 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
29270 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61  psis: r[P2]=data
29280 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74  .**.** Write int
29290 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74 68  o register P2 th
292a0 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 63  e complete row c
292b0 6f 6e 74 65 6e 74 20 66 6f 72 20 74 68 65 20 72  ontent for the r
292c0 6f 77 20 61 74 20 0a 2a 2a 20 77 68 69 63 68 20  ow at .** which 
292d0 63 75 72 73 6f 72 20 50 31 20 69 73 20 63 75 72  cursor P1 is cur
292e0 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e  rently pointing.
292f0 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20  .** There is no 
29300 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f  interpretation o
29310 66 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a  f the data.  .**
29320 20 49 74 20 69 73 20 6a 75 73 74 20 63 6f 70 69   It is just copi
29330 65 64 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72  ed onto the P2 r
29340 65 67 69 73 74 65 72 20 65 78 61 63 74 6c 79 20  egister exactly 
29350 61 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75  as .** it is fou
29360 6e 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  nd in the databa
29370 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  se file..**.** I
29380 66 20 63 75 72 73 6f 72 20 50 31 20 69 73 20 61  f cursor P1 is a
29390 6e 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 74 68  n index, then th
293a0 65 20 63 6f 6e 74 65 6e 74 20 69 73 20 74 68 65  e content is the
293b0 20 6b 65 79 20 6f 66 20 74 68 65 20 72 6f 77 2e   key of the row.
293c0 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 32  .** If cursor P2
293d0 20 69 73 20 61 20 74 61 62 6c 65 2c 20 74 68 65   is a table, the
293e0 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 65 78  n the content ex
293f0 74 72 61 63 74 65 64 20 69 73 20 74 68 65 20 64  tracted is the d
29400 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ata..**.** If th
29410 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74  e P1 cursor must
29420 20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20   be pointing to 
29430 61 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74  a valid row (not
29440 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20   a NULL row).** 
29450 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c  of a real table,
29460 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61   not a pseudo-ta
29470 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33  ble..**.** If P3
29480 21 3d 30 20 74 68 65 6e 20 74 68 69 73 20 6f 70  !=0 then this op
29490 63 6f 64 65 20 69 73 20 61 6c 6c 6f 77 65 64 20  code is allowed 
294a0 74 6f 20 6d 61 6b 65 20 61 6e 20 65 70 68 65 6d  to make an ephem
294b0 65 72 61 6c 20 70 6f 69 6e 74 65 72 0a 2a 2a 20  eral pointer.** 
294c0 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  into the databas
294d0 65 20 70 61 67 65 2e 20 20 54 68 61 74 20 6d 65  e page.  That me
294e0 61 6e 73 20 74 68 61 74 20 74 68 65 20 63 6f 6e  ans that the con
294f0 74 65 6e 74 20 6f 66 20 74 68 65 20 6f 75 74 70  tent of the outp
29500 75 74 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 77  ut.** register w
29510 69 6c 6c 20 62 65 20 69 6e 76 61 6c 69 64 61 74  ill be invalidat
29520 65 64 20 61 73 20 73 6f 6f 6e 20 61 73 20 74 68  ed as soon as th
29530 65 20 63 75 72 73 6f 72 20 6d 6f 76 65 73 20 2d  e cursor moves -
29540 20 69 6e 63 6c 75 64 69 6e 67 0a 2a 2a 20 6d 6f   including.** mo
29550 76 65 73 20 63 61 75 73 65 64 20 62 79 20 6f 74  ves caused by ot
29560 68 65 72 20 63 75 72 73 6f 72 73 20 74 68 61 74  her cursors that
29570 20 22 73 61 76 65 22 20 74 68 65 20 63 75 72 72   "save" the curr
29580 65 6e 74 20 63 75 72 73 6f 72 73 0a 2a 2a 20 70  ent cursors.** p
29590 6f 73 69 74 69 6f 6e 20 69 6e 20 6f 72 64 65 72  osition in order
295a0 20 74 68 61 74 20 74 68 65 79 20 63 61 6e 20 77   that they can w
295b0 72 69 74 65 20 74 6f 20 74 68 65 20 73 61 6d 65  rite to the same
295c0 20 74 61 62 6c 65 2e 20 20 49 66 20 50 33 3d 3d   table.  If P3==
295d0 30 0a 2a 2a 20 74 68 65 6e 20 61 20 63 6f 70 79  0.** then a copy
295e0 20 6f 66 20 74 68 65 20 64 61 74 61 20 69 73 20   of the data is 
295f0 6d 61 64 65 20 69 6e 74 6f 20 6d 65 6d 6f 72 79  made into memory
29600 2e 20 20 50 33 21 3d 30 20 69 73 20 66 61 73 74  .  P3!=0 is fast
29610 65 72 2c 20 62 75 74 0a 2a 2a 20 50 33 3d 3d 30  er, but.** P3==0
29620 20 69 73 20 73 61 66 65 72 2e 0a 2a 2a 0a 2a 2a   is safer..**.**
29630 20 49 66 20 50 33 21 3d 30 20 74 68 65 6e 20 74   If P3!=0 then t
29640 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68  he content of th
29650 65 20 50 32 20 72 65 67 69 73 74 65 72 20 69 73  e P2 register is
29660 20 75 6e 73 75 69 74 61 62 6c 65 20 66 6f 72 20   unsuitable for 
29670 75 73 65 0a 2a 2a 20 69 6e 20 4f 50 5f 52 65 73  use.** in OP_Res
29680 75 6c 74 20 61 6e 64 20 61 6e 79 20 4f 50 5f 52  ult and any OP_R
29690 65 73 75 6c 74 20 77 69 6c 6c 20 69 6e 76 61 6c  esult will inval
296a0 69 64 61 74 65 20 74 68 65 20 50 32 20 72 65 67  idate the P2 reg
296b0 69 73 74 65 72 20 63 6f 6e 74 65 6e 74 2e 0a 2a  ister content..*
296c0 2a 20 54 68 65 20 50 32 20 72 65 67 69 73 74 65  * The P2 registe
296d0 72 20 63 6f 6e 74 65 6e 74 20 69 73 20 69 6e 76  r content is inv
296e0 61 6c 69 64 61 74 65 64 20 62 79 20 6f 70 63 6f  alidated by opco
296f0 64 65 73 20 6c 69 6b 65 20 4f 50 5f 46 75 6e 63  des like OP_Func
29700 74 69 6f 6e 20 6f 72 0a 2a 2a 20 62 79 20 61 6e  tion or.** by an
29710 79 20 75 73 65 20 6f 66 20 61 6e 6f 74 68 65 72  y use of another
29720 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67   cursor pointing
29730 20 74 6f 20 74 68 65 20 73 61 6d 65 20 74 61 62   to the same tab
29740 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  le..*/.case OP_R
29750 6f 77 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65  owData: {.  Vdbe
29760 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
29770 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
29780 20 75 33 32 20 6e 3b 0a 0a 20 20 70 4f 75 74 20   u32 n;..  pOut 
29790 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
297a0 28 70 2c 20 70 4f 70 29 3b 0a 0a 20 20 61 73 73  (p, pOp);..  ass
297b0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
297c0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
297d0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
297e0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
297f0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
29800 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
29810 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
29820 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
29830 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65   assert( isSorte
29840 72 28 70 43 29 3d 3d 30 20 29 3b 0a 20 20 61 73  r(pC)==0 );.  as
29850 73 65 72 74 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f  sert( pC->nullRo
29860 77 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  w==0 );.  assert
29870 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  ( pC->uc.pCursor
29880 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  !=0 );.  pCrsr =
29890 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b   pC->uc.pCursor;
298a0 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 52 6f  ..  /* The OP_Ro
298b0 77 44 61 74 61 20 6f 70 63 6f 64 65 73 20 61 6c  wData opcodes al
298c0 77 61 79 73 20 66 6f 6c 6c 6f 77 20 4f 50 5f 4e  ways follow OP_N
298d0 6f 74 45 78 69 73 74 73 20 6f 72 0a 20 20 2a 2a  otExists or.  **
298e0 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64 20 6f 72   OP_SeekRowid or
298f0 20 4f 50 5f 52 65 77 69 6e 64 2f 4f 70 5f 4e 65   OP_Rewind/Op_Ne
29900 78 74 20 77 69 74 68 20 6e 6f 20 69 6e 74 65 72  xt with no inter
29910 76 65 6e 69 6e 67 20 69 6e 73 74 72 75 63 74 69  vening instructi
29920 6f 6e 73 0a 20 20 2a 2a 20 74 68 61 74 20 6d 69  ons.  ** that mi
29930 67 68 74 20 69 6e 76 61 6c 69 64 61 74 65 20 74  ght invalidate t
29940 68 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2a 20  he cursor..  ** 
29950 49 66 20 74 68 69 73 20 77 68 65 72 65 20 6e 6f  If this where no
29960 74 20 74 68 65 20 63 61 73 65 2c 20 6f 6e 20 6f  t the case, on o
29970 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
29980 61 73 73 65 72 74 28 29 73 0a 20 20 2a 2a 20 77  assert()s.  ** w
29990 6f 75 6c 64 20 66 61 69 6c 2e 20 20 53 68 6f 75  ould fail.  Shou
299a0 6c 64 20 74 68 69 73 20 65 76 65 72 20 63 68 61  ld this ever cha
299b0 6e 67 65 20 28 62 65 63 61 75 73 65 20 6f 66 20  nge (because of 
299c0 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 63  changes in the c
299d0 6f 64 65 0a 20 20 2a 2a 20 67 65 6e 65 72 61 74  ode.  ** generat
299e0 6f 72 29 20 74 68 65 6e 20 74 68 65 20 66 69 78  or) then the fix
299f0 20 77 6f 75 6c 64 20 62 65 20 74 6f 20 69 6e 73   would be to ins
29a00 65 72 74 20 61 20 63 61 6c 6c 20 74 6f 0a 20 20  ert a call to.  
29a10 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 43 75  ** sqlite3VdbeCu
29a20 72 73 6f 72 4d 6f 76 65 74 6f 28 29 2e 0a 20 20  rsorMoveto()..  
29a30 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  */.  assert( pC-
29a40 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
29a50 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
29a60 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
29a70 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29  orIsValid(pCrsr)
29a80 20 29 3b 0a 23 69 66 20 30 20 20 2f 2a 20 4e 6f   );.#if 0  /* No
29a90 74 20 72 65 71 75 69 72 65 64 20 64 75 65 20 74  t required due t
29aa0 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 74  o the previous t
29ab0 6f 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  o assert() state
29ac0 6d 65 6e 74 73 20 2a 2f 0a 20 20 72 63 20 3d 20  ments */.  rc = 
29ad0 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
29ae0 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69  rMoveto(pC);.  i
29af0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
29b00 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
29b10 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64  e_to_error;.#end
29b20 69 66 0a 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65  if..  n = sqlite
29b30 33 42 74 72 65 65 50 61 79 6c 6f 61 64 53 69 7a  3BtreePayloadSiz
29b40 65 28 70 43 72 73 72 29 3b 0a 20 20 69 66 28 20  e(pCrsr);.  if( 
29b50 6e 3e 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69  n>(u32)db->aLimi
29b60 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
29b70 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
29b80 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
29b90 20 20 74 65 73 74 63 61 73 65 28 20 6e 3d 3d 30    testcase( n==0
29ba0 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
29bb0 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72  e3VdbeMemFromBtr
29bc0 65 65 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20  ee(pCrsr, 0, n, 
29bd0 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 72 63 20  pOut);.  if( rc 
29be0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
29bf0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28  _to_error;.  if(
29c00 20 21 70 4f 70 2d 3e 70 33 20 29 20 44 65 65 70   !pOp->p3 ) Deep
29c10 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29  hemeralize(pOut)
29c20 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
29c30 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
29c40 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
29c50 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a  pOp->p2, pOut);.
29c60 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
29c70 70 63 6f 64 65 3a 20 52 6f 77 69 64 20 50 31 20  pcode: Rowid P1 
29c80 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
29c90 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69  psis: r[P2]=rowi
29ca0 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e  d.**.** Store in
29cb0 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20   register P2 an 
29cc0 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73  integer which is
29cd0 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65 20   the key of the 
29ce0 74 61 62 6c 65 20 65 6e 74 72 79 20 74 68 61 74  table entry that
29cf0 0a 2a 2a 20 50 31 20 69 73 20 63 75 72 72 65 6e  .** P1 is curren
29d00 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a  tly point to..**
29d10 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65 20 65 69  .** P1 can be ei
29d20 74 68 65 72 20 61 6e 20 6f 72 64 69 6e 61 72 79  ther an ordinary
29d30 20 74 61 62 6c 65 20 6f 72 20 61 20 76 69 72 74   table or a virt
29d40 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65 72  ual table.  Ther
29d50 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20  e used to.** be 
29d60 61 20 73 65 70 61 72 61 74 65 20 4f 50 5f 56 52  a separate OP_VR
29d70 6f 77 69 64 20 6f 70 63 6f 64 65 20 66 6f 72 20  owid opcode for 
29d80 75 73 65 20 77 69 74 68 20 76 69 72 74 75 61 6c  use with virtual
29d90 20 74 61 62 6c 65 73 2c 20 62 75 74 20 74 68 69   tables, but thi
29da0 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65 20  s.** one opcode 
29db0 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f  now works for bo
29dc0 74 68 20 74 61 62 6c 65 20 74 79 70 65 73 2e 0a  th table types..
29dd0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69 64  */.case OP_Rowid
29de0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
29df0 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
29e00 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
29e10 0a 20 20 69 36 34 20 76 3b 0a 20 20 73 71 6c 69  .  i64 v;.  sqli
29e20 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
29e30 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
29e40 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
29e50 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  ;..  pOut = out2
29e60 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
29e70 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p);.  assert( pO
29e80 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
29e90 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
29ea0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
29eb0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
29ec0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
29ed0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
29ee0 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f 50  rType!=CURTYPE_P
29ef0 53 45 55 44 4f 20 7c 7c 20 70 43 2d 3e 6e 75 6c  SEUDO || pC->nul
29f00 6c 52 6f 77 20 29 3b 0a 20 20 69 66 28 20 70 43  lRow );.  if( pC
29f10 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
29f20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
29f30 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62 72 65  EM_Null;.    bre
29f40 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ak;.  }else if( 
29f50 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
29f60 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d 20 70 43  to ){.    v = pC
29f70 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b 0a  ->movetoTarget;.
29f80 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
29f90 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
29fa0 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d  .  }else if( pC-
29fb0 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
29fc0 50 45 5f 56 54 41 42 20 29 7b 0a 20 20 20 20 61  PE_VTAB ){.    a
29fd0 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 56  ssert( pC->uc.pV
29fe0 43 75 72 21 3d 30 20 29 3b 0a 20 20 20 20 70 56  Cur!=0 );.    pV
29ff0 74 61 62 20 3d 20 70 43 2d 3e 75 63 2e 70 56 43  tab = pC->uc.pVC
2a000 75 72 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20 70  ur->pVtab;.    p
2a010 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
2a020 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73 73  pModule;.    ass
2a030 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52  ert( pModule->xR
2a040 6f 77 69 64 20 29 3b 0a 20 20 20 20 72 63 20 3d  owid );.    rc =
2a050 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64   pModule->xRowid
2a060 28 70 43 2d 3e 75 63 2e 70 56 43 75 72 2c 20 26  (pC->uc.pVCur, &
2a070 76 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  v);.    sqlite3V
2a080 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
2a090 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69  p, pVtab);.    i
2a0a0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
2a0b0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2a0c0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2a0d0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2a0e0 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a  BLE */.  }else{.
2a0f0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
2a100 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
2a110 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20 61  E_BTREE );.    a
2a120 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
2a130 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20  ursor!=0 );.    
2a140 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
2a150 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43  CursorRestore(pC
2a160 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  );.    if( rc ) 
2a170 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2a180 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69 66 28  o_error;.    if(
2a190 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a   pC->nullRow ){.
2a1a0 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67        pOut->flag
2a1b0 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
2a1c0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
2a1d0 0a 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33  .    v = sqlite3
2a1e0 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28  BtreeIntegerKey(
2a1f0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  pC->uc.pCursor);
2a200 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  .  }.  pOut->u.i
2a210 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = v;.  break;.}
2a220 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c  ../* Opcode: Nul
2a230 6c 52 6f 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  lRow P1 * * * *.
2a240 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63  **.** Move the c
2a250 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 6e 75  ursor P1 to a nu
2a260 6c 6c 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f  ll row.  Any OP_
2a270 43 6f 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e  Column operation
2a280 73 0a 2a 2a 20 74 68 61 74 20 6f 63 63 75 72 20  s.** that occur 
2a290 77 68 69 6c 65 20 74 68 65 20 63 75 72 73 6f 72  while the cursor
2a2a0 20 69 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20   is on the null 
2a2b0 72 6f 77 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a  row will always.
2a2c0 2a 2a 20 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e  ** write a NULL.
2a2d0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c  .*/.case OP_Null
2a2e0 52 6f 77 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  Row: {.  VdbeCur
2a2f0 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65  sor *pC;..  asse
2a300 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
2a310 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
2a320 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
2a330 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
2a340 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
2a350 30 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  0 );.  pC->nullR
2a360 6f 77 20 3d 20 31 3b 0a 20 20 70 43 2d 3e 63 61  ow = 1;.  pC->ca
2a370 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
2a380 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70  E_STALE;.  if( p
2a390 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
2a3a0 54 59 50 45 5f 42 54 52 45 45 20 29 7b 0a 20 20  TYPE_BTREE ){.  
2a3b0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63    assert( pC->uc
2a3c0 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  .pCursor!=0 );. 
2a3d0 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43     sqlite3BtreeC
2a3e0 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e 75  learCursor(pC->u
2a3f0 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a  c.pCursor);.  }.
2a400 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
2a410 42 55 47 0a 20 20 69 66 28 20 70 43 2d 3e 73 65  BUG.  if( pC->se
2a420 65 6b 4f 70 3d 3d 30 20 29 20 70 43 2d 3e 73 65  ekOp==0 ) pC->se
2a430 65 6b 4f 70 20 3d 20 4f 50 5f 4e 75 6c 6c 52 6f  ekOp = OP_NullRo
2a440 77 3b 0a 23 65 6e 64 69 66 0a 20 20 62 72 65 61  w;.#endif.  brea
2a450 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2a460 20 53 65 65 6b 45 6e 64 20 50 31 20 2a 20 2a 20   SeekEnd P1 * * 
2a470 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 6f 73 69 74 69  * *.**.** Positi
2a480 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 61 74 20  on cursor P1 at 
2a490 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 62  the end of the b
2a4a0 74 72 65 65 20 66 6f 72 20 74 68 65 20 70 75 72  tree for the pur
2a4b0 70 6f 73 65 20 6f 66 0a 2a 2a 20 61 70 70 65 6e  pose of.** appen
2a4c0 64 69 6e 67 20 61 20 6e 65 77 20 65 6e 74 72 79  ding a new entry
2a4d0 20 6f 6e 74 6f 20 74 68 65 20 62 74 72 65 65 2e   onto the btree.
2a4e0 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 61 73 73  .**.** It is ass
2a4f0 75 6d 65 64 20 74 68 61 74 20 74 68 65 20 63 75  umed that the cu
2a500 72 73 6f 72 20 69 73 20 75 73 65 64 20 6f 6e 6c  rsor is used onl
2a510 79 20 66 6f 72 20 61 70 70 65 6e 64 69 6e 67 20  y for appending 
2a520 61 6e 64 20 73 6f 0a 2a 2a 20 69 66 20 74 68 65  and so.** if the
2a530 20 63 75 72 73 6f 72 20 69 73 20 76 61 6c 69 64   cursor is valid
2a540 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72 73 6f  , then the curso
2a550 72 20 6d 75 73 74 20 61 6c 72 65 61 64 79 20 62  r must already b
2a560 65 20 70 6f 69 6e 74 69 6e 67 0a 2a 2a 20 61 74  e pointing.** at
2a570 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
2a580 62 74 72 65 65 20 61 6e 64 20 73 6f 20 6e 6f 20  btree and so no 
2a590 63 68 61 6e 67 65 73 20 61 72 65 20 6d 61 64 65  changes are made
2a5a0 20 74 6f 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f   to.** the curso
2a5b0 72 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  r..*/./* Opcode:
2a5c0 20 4c 61 73 74 20 50 31 20 50 32 20 2a 20 2a 20   Last P1 P2 * * 
2a5d0 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74  *.**.** The next
2a5e0 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69   use of the Rowi
2a5f0 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 50  d or Column or P
2a600 72 65 76 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  rev instruction 
2a610 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20  for P1 .** will 
2a620 72 65 66 65 72 20 74 6f 20 74 68 65 20 6c 61 73  refer to the las
2a630 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64  t entry in the d
2a640 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72  atabase table or
2a650 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68   index..** If th
2a660 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
2a670 20 69 73 20 65 6d 70 74 79 20 61 6e 64 20 50 32   is empty and P2
2a680 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d  >0, then jump im
2a690 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
2a6a0 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 30 20 6f  .** If P2 is 0 o
2a6b0 72 20 69 66 20 74 68 65 20 74 61 62 6c 65 20 6f  r if the table o
2a6c0 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65  r index is not e
2a6d0 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75  mpty, fall throu
2a6e0 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c  gh.** to the fol
2a6f0 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69  lowing instructi
2a700 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  on..**.** This o
2a710 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65  pcode leaves the
2a720 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72   cursor configur
2a730 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65  ed to move in re
2a740 76 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20  verse order,.** 
2a750 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77  from the end tow
2a760 61 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  ard the beginnin
2a770 67 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  g.  In other wor
2a780 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69  ds, the cursor i
2a790 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20  s.** configured 
2a7a0 74 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74  to use Prev, not
2a7b0 20 4e 65 78 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f   Next..*/.case O
2a7c0 50 5f 53 65 65 6b 45 6e 64 3a 0a 63 61 73 65 20  P_SeekEnd:.case 
2a7d0 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20  OP_Last: {      
2a7e0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56    /* jump */.  V
2a7f0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
2a800 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
2a810 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20  ;.  int res;..  
2a820 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2a830 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
2a840 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
2a850 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
2a860 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2a870 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
2a880 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
2a890 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
2a8a0 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
2a8b0 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 72 65  uc.pCursor;.  re
2a8c0 73 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  s = 0;.  assert(
2a8d0 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 23 69 66   pCrsr!=0 );.#if
2a8e0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
2a8f0 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20  .  pC->seekOp = 
2a900 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e  pOp->opcode;.#en
2a910 64 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f  dif.  if( pOp->o
2a920 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 45 6e  pcode==OP_SeekEn
2a930 64 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  d ){.    assert(
2a940 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20   pOp->p2==0 );. 
2a950 20 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c     pC->seekResul
2a960 74 20 3d 20 2d 31 3b 0a 20 20 20 20 69 66 28 20  t = -1;.    if( 
2a970 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
2a980 6f 72 49 73 56 61 6c 69 64 4e 4e 28 70 43 72 73  orIsValidNN(pCrs
2a990 72 29 20 29 7b 0a 20 20 20 20 20 20 62 72 65 61  r) ){.      brea
2a9a0 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72  k;.    }.  }.  r
2a9b0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
2a9c0 4c 61 73 74 28 70 43 72 73 72 2c 20 26 72 65 73  Last(pCrsr, &res
2a9d0 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  );.  pC->nullRow
2a9e0 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70 43   = (u8)res;.  pC
2a9f0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
2aa00 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
2aa10 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
2aa20 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 72 63 20  STALE;.  if( rc 
2aa30 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2aa40 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28  _to_error;.  if(
2aa50 20 70 4f 70 2d 3e 70 32 3e 30 20 29 7b 0a 20 20   pOp->p2>0 ){.  
2aa60 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
2aa70 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 20  n(res!=0,2);.   
2aa80 20 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20   if( res ) goto 
2aa90 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
2aaa0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2aab0 70 63 6f 64 65 3a 20 49 66 53 6d 61 6c 6c 65 72  pcode: IfSmaller
2aac0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
2aad0 0a 2a 2a 20 45 73 74 69 6d 61 74 65 20 74 68 65  .** Estimate the
2aae0 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
2aaf0 69 6e 20 74 68 65 20 74 61 62 6c 65 20 50 31 2e  in the table P1.
2ab00 20 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20    Jump to P2 if 
2ab10 74 68 61 74 0a 2a 2a 20 65 73 74 69 6d 61 74 65  that.** estimate
2ab20 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 61 70   is less than ap
2ab30 70 72 6f 78 69 6d 61 74 65 6c 79 20 32 2a 2a 28  proximately 2**(
2ab40 30 2e 31 2a 50 33 29 2e 0a 2a 2f 0a 63 61 73 65  0.1*P3)..*/.case
2ab50 20 4f 50 5f 49 66 53 6d 61 6c 6c 65 72 3a 20 7b   OP_IfSmaller: {
2ab60 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
2ab70 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
2ab80 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
2ab90 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65  *pCrsr;.  int re
2aba0 73 3b 0a 20 20 69 36 34 20 73 7a 3b 0a 0a 20 20  s;.  i64 sz;..  
2abb0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2abc0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
2abd0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
2abe0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
2abf0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2ac00 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  pC!=0 );.  pCrsr
2ac10 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f   = pC->uc.pCurso
2ac20 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72  r;.  assert( pCr
2ac30 73 72 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  sr );.  rc = sql
2ac40 69 74 65 33 42 74 72 65 65 46 69 72 73 74 28 70  ite3BtreeFirst(p
2ac50 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 69  Crsr, &res);.  i
2ac60 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
2ac70 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2ac80 0a 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b  .  if( res==0 ){
2ac90 0a 20 20 20 20 73 7a 20 3d 20 73 71 6c 69 74 65  .    sz = sqlite
2aca0 33 42 74 72 65 65 52 6f 77 43 6f 75 6e 74 45 73  3BtreeRowCountEs
2acb0 74 28 70 43 72 73 72 29 3b 0a 20 20 20 20 69 66  t(pCrsr);.    if
2acc0 28 20 41 4c 57 41 59 53 28 73 7a 3e 3d 30 29 20  ( ALWAYS(sz>=0) 
2acd0 26 26 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  && sqlite3LogEst
2ace0 28 28 75 36 34 29 73 7a 29 3c 70 4f 70 2d 3e 70  ((u64)sz)<pOp->p
2acf0 33 20 29 20 72 65 73 20 3d 20 31 3b 0a 20 20 7d  3 ) res = 1;.  }
2ad00 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
2ad10 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
2ad20 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a  if( res ) goto j
2ad30 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65  ump_to_p2;.  bre
2ad40 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.}.../* Opcod
2ad50 65 3a 20 53 6f 72 74 65 72 53 6f 72 74 20 50 31  e: SorterSort P1
2ad60 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
2ad70 41 66 74 65 72 20 61 6c 6c 20 72 65 63 6f 72 64  After all record
2ad80 73 20 68 61 76 65 20 62 65 65 6e 20 69 6e 73 65  s have been inse
2ad90 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20 53 6f  rted into the So
2ada0 72 74 65 72 20 6f 62 6a 65 63 74 0a 2a 2a 20 69  rter object.** i
2adb0 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 31 2c  dentified by P1,
2adc0 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63   invoke this opc
2add0 6f 64 65 20 74 6f 20 61 63 74 75 61 6c 6c 79 20  ode to actually 
2ade0 64 6f 20 74 68 65 20 73 6f 72 74 69 6e 67 2e 0a  do the sorting..
2adf0 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
2ae00 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
2ae10 63 6f 72 64 73 20 74 6f 20 62 65 20 73 6f 72 74  cords to be sort
2ae20 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  ed..**.** This o
2ae30 70 63 6f 64 65 20 69 73 20 61 6e 20 61 6c 69 61  pcode is an alia
2ae40 73 20 66 6f 72 20 4f 50 5f 53 6f 72 74 20 61 6e  s for OP_Sort an
2ae50 64 20 4f 50 5f 52 65 77 69 6e 64 20 74 68 61 74  d OP_Rewind that
2ae60 20 69 73 20 75 73 65 64 0a 2a 2a 20 66 6f 72 20   is used.** for 
2ae70 53 6f 72 74 65 72 20 6f 62 6a 65 63 74 73 2e 0a  Sorter objects..
2ae80 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  */./* Opcode: So
2ae90 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  rt P1 P2 * * *.*
2aea0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
2aeb0 20 64 6f 65 73 20 65 78 61 63 74 6c 79 20 74 68   does exactly th
2aec0 65 20 73 61 6d 65 20 74 68 69 6e 67 20 61 73 20  e same thing as 
2aed0 4f 50 5f 52 65 77 69 6e 64 20 65 78 63 65 70 74  OP_Rewind except
2aee0 20 74 68 61 74 0a 2a 2a 20 69 74 20 69 6e 63 72   that.** it incr
2aef0 65 6d 65 6e 74 73 20 61 6e 20 75 6e 64 6f 63 75  ements an undocu
2af00 6d 65 6e 74 65 64 20 67 6c 6f 62 61 6c 20 76 61  mented global va
2af10 72 69 61 62 6c 65 20 75 73 65 64 20 66 6f 72 20  riable used for 
2af20 74 65 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53  testing..**.** S
2af30 6f 72 74 69 6e 67 20 69 73 20 61 63 63 6f 6d 70  orting is accomp
2af40 6c 69 73 68 65 64 20 62 79 20 77 72 69 74 69 6e  lished by writin
2af50 67 20 72 65 63 6f 72 64 73 20 69 6e 74 6f 20 61  g records into a
2af60 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 2c 0a   sorting index,.
2af70 2a 2a 20 74 68 65 6e 20 72 65 77 69 6e 64 69 6e  ** then rewindin
2af80 67 20 74 68 61 74 20 69 6e 64 65 78 20 61 6e 64  g that index and
2af90 20 70 6c 61 79 69 6e 67 20 69 74 20 62 61 63 6b   playing it back
2afa0 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 20   from beginning 
2afb0 74 6f 0a 2a 2a 20 65 6e 64 2e 20 20 57 65 20 75  to.** end.  We u
2afc0 73 65 20 74 68 65 20 4f 50 5f 53 6f 72 74 20 6f  se the OP_Sort o
2afd0 70 63 6f 64 65 20 69 6e 73 74 65 61 64 20 6f 66  pcode instead of
2afe0 20 4f 50 5f 52 65 77 69 6e 64 20 74 6f 20 64 6f   OP_Rewind to do
2aff0 20 74 68 65 0a 2a 2a 20 72 65 77 69 6e 64 69 6e   the.** rewindin
2b000 67 20 73 6f 20 74 68 61 74 20 74 68 65 20 67 6c  g so that the gl
2b010 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 77 69  obal variable wi
2b020 6c 6c 20 62 65 20 69 6e 63 72 65 6d 65 6e 74 65  ll be incremente
2b030 64 20 61 6e 64 0a 2a 2a 20 72 65 67 72 65 73 73  d and.** regress
2b040 69 6f 6e 20 74 65 73 74 73 20 63 61 6e 20 64 65  ion tests can de
2b050 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
2b060 6f 72 20 6e 6f 74 20 74 68 65 20 6f 70 74 69 6d  or not the optim
2b070 69 7a 65 72 20 69 73 0a 2a 2a 20 63 6f 72 72 65  izer is.** corre
2b080 63 74 6c 79 20 6f 70 74 69 6d 69 7a 69 6e 67 20  ctly optimizing 
2b090 6f 75 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61  out sorts..*/.ca
2b0a0 73 65 20 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74  se OP_SorterSort
2b0b0 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a  :    /* jump */.
2b0c0 63 61 73 65 20 4f 50 5f 53 6f 72 74 3a 20 7b 20  case OP_Sort: { 
2b0d0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
2b0e0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
2b0f0 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73  TEST.  sqlite3_s
2b100 6f 72 74 5f 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73  ort_count++;.  s
2b110 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f  qlite3_search_co
2b120 75 6e 74 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20 20  unt--;.#endif.  
2b130 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49  p->aCounter[SQLI
2b140 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f  TE_STMTSTATUS_SO
2b150 52 54 5d 2b 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c  RT]++;.  /* Fall
2b160 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50   through into OP
2b170 5f 52 65 77 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20  _Rewind */.}./* 
2b180 4f 70 63 6f 64 65 3a 20 52 65 77 69 6e 64 20 50  Opcode: Rewind P
2b190 31 20 50 32 20 2a 20 2a 20 50 35 0a 2a 2a 0a 2a  1 P2 * * P5.**.*
2b1a0 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f  * The next use o
2b1b0 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43  f the Rowid or C
2b1c0 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e  olumn or Next in
2b1d0 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31  struction for P1
2b1e0 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20   .** will refer 
2b1f0 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6e 74  to the first ent
2b200 72 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ry in the databa
2b210 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  se table or inde
2b220 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62  x..** If the tab
2b230 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65  le or index is e
2b240 6d 70 74 79 2c 20 6a 75 6d 70 20 69 6d 6d 65 64  mpty, jump immed
2b250 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a  iately to P2..**
2b260 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   If the table or
2b270 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d   index is not em
2b280 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  pty, fall throug
2b290 68 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  h to the followi
2b2a0 6e 67 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69  ng .** instructi
2b2b0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  on..**.** If P5 
2b2c0 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 61 6e 64 20  is non-zero and 
2b2d0 74 68 65 20 74 61 62 6c 65 20 69 73 20 6e 6f 74  the table is not
2b2e0 20 65 6d 70 74 79 2c 20 74 68 65 6e 20 74 68 65   empty, then the
2b2f0 20 22 73 6b 69 70 2d 6e 65 78 74 22 0a 2a 2a 20   "skip-next".** 
2b300 66 6c 61 67 20 69 73 20 73 65 74 20 6f 6e 20 74  flag is set on t
2b310 68 65 20 63 75 72 73 6f 72 20 73 6f 20 74 68 61  he cursor so tha
2b320 74 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 4e 65  t the next OP_Ne
2b330 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 0a  xt instruction .
2b340 2a 2a 20 65 78 65 63 75 74 65 64 20 6f 6e 20 69  ** executed on i
2b350 74 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2a  t is a no-op..**
2b360 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
2b370 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
2b380 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  r configured to 
2b390 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20  move in forward 
2b3a0 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74  order,.** from t
2b3b0 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77  he beginning tow
2b3c0 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e  ard the end.  In
2b3d0 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
2b3e0 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63  e cursor is.** c
2b3f0 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65  onfigured to use
2b400 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e   Next, not Prev.
2b410 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77 69  .*/.case OP_Rewi
2b420 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  nd: {        /* 
2b430 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75  jump */.  VdbeCu
2b440 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
2b450 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
2b460 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72  nt res;..  asser
2b470 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
2b480 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
2b490 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
2b4a0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
2b4b0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
2b4c0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73   );.  assert( is
2b4d0 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70  Sorter(pC)==(pOp
2b4e0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72  ->opcode==OP_Sor
2b4f0 74 65 72 53 6f 72 74 29 20 29 3b 0a 20 20 72 65  terSort) );.  re
2b500 73 20 3d 20 31 3b 0a 23 69 66 64 65 66 20 53 51  s = 1;.#ifdef SQ
2b510 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d  LITE_DEBUG.  pC-
2b520 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 52 65 77  >seekOp = OP_Rew
2b530 69 6e 64 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66  ind;.#endif.  if
2b540 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
2b550 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
2b560 65 33 56 64 62 65 53 6f 72 74 65 72 52 65 77 69  e3VdbeSorterRewi
2b570 6e 64 28 70 43 2c 20 26 72 65 73 29 3b 0a 20 20  nd(pC, &res);.  
2b580 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
2b590 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
2b5a0 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
2b5b0 3b 0a 20 20 20 20 70 43 72 73 72 20 3d 20 70 43  ;.    pCrsr = pC
2b5c0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20  ->uc.pCursor;.  
2b5d0 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20    assert( pCrsr 
2b5e0 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
2b5f0 74 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43  te3BtreeFirst(pC
2b600 72 73 72 2c 20 26 72 65 73 29 3b 0a 23 69 66 6e  rsr, &res);.#ifn
2b610 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2b620 57 49 4e 44 4f 57 46 55 4e 43 0a 20 20 20 20 69  WINDOWFUNC.    i
2b630 66 28 20 70 4f 70 2d 3e 70 35 20 29 20 73 71 6c  f( pOp->p5 ) sql
2b640 69 74 65 33 42 74 72 65 65 53 6b 69 70 4e 65 78  ite3BtreeSkipNex
2b650 74 28 70 43 72 73 72 29 3b 0a 23 65 6e 64 69 66  t(pCrsr);.#endif
2b660 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65  .    pC->deferre
2b670 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20  dMoveto = 0;.   
2b680 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
2b690 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
2b6a0 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67    }.  if( rc ) g
2b6b0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2b6c0 5f 65 72 72 6f 72 3b 0a 20 20 70 43 2d 3e 6e 75  _error;.  pC->nu
2b6d0 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b  llRow = (u8)res;
2b6e0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2b6f0 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c  p2>0 && pOp->p2<
2b700 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 56 64 62 65  p->nOp );.  Vdbe
2b710 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21  BranchTaken(res!
2b720 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73  =0,2);.  if( res
2b730 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
2b740 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p2;.  break;.}..
2b750 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20  /* Opcode: Next 
2b760 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
2b770 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 63 75 72  *.** Advance cur
2b780 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69  sor P1 so that i
2b790 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
2b7a0 6e 65 78 74 20 6b 65 79 2f 64 61 74 61 20 70 61  next key/data pa
2b7b0 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62  ir in its.** tab
2b7c0 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66  le or index.  If
2b7d0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f   there are no mo
2b7e0 72 65 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69  re key/value pai
2b7f0 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  rs then fall thr
2b800 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66  ough.** to the f
2b810 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63  ollowing instruc
2b820 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68  tion.  But if th
2b830 65 20 63 75 72 73 6f 72 20 61 64 76 61 6e 63 65  e cursor advance
2b840 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c   was successful,
2b850 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  .** jump immedia
2b860 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  tely to P2..**.*
2b870 2a 20 54 68 65 20 4e 65 78 74 20 6f 70 63 6f 64  * The Next opcod
2b880 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20  e is only valid 
2b890 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53 65 65  following an See
2b8a0 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 6f 72 0a  kGT, SeekGE, or.
2b8b0 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 20 6f 70 63  ** OP_Rewind opc
2b8c0 6f 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73 69  ode used to posi
2b8d0 74 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 2e  tion the cursor.
2b8e0 20 20 4e 65 78 74 20 69 73 20 6e 6f 74 20 61 6c    Next is not al
2b8f0 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c  lowed.** to foll
2b900 6f 77 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c  ow SeekLT, SeekL
2b910 45 2c 20 6f 72 20 4f 50 5f 4c 61 73 74 2e 0a 2a  E, or OP_Last..*
2b920 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73  *.** The P1 curs
2b930 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61  or must be for a
2b940 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
2b950 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
2b960 20 20 50 31 20 6d 75 73 74 20 68 61 76 65 0a 2a    P1 must have.*
2b970 2a 20 62 65 65 6e 20 6f 70 65 6e 65 64 20 70 72  * been opened pr
2b980 69 6f 72 20 74 6f 20 74 68 69 73 20 6f 70 63 6f  ior to this opco
2b990 64 65 20 6f 72 20 74 68 65 20 70 72 6f 67 72 61  de or the progra
2b9a0 6d 20 77 69 6c 6c 20 73 65 67 66 61 75 6c 74 2e  m will segfault.
2b9b0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20 76 61  .**.** The P3 va
2b9c0 6c 75 65 20 69 73 20 61 20 68 69 6e 74 20 74 6f  lue is a hint to
2b9d0 20 74 68 65 20 62 74 72 65 65 20 69 6d 70 6c 65   the btree imple
2b9e0 6d 65 6e 74 61 74 69 6f 6e 2e 20 49 66 20 50 33  mentation. If P3
2b9f0 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a 20 6d 65 61  ==1, that.** mea
2ba00 6e 73 20 50 31 20 69 73 20 61 6e 20 53 51 4c 20  ns P1 is an SQL 
2ba10 69 6e 64 65 78 20 61 6e 64 20 74 68 61 74 20 74  index and that t
2ba20 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
2ba30 63 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 0a  could have been.
2ba40 2a 2a 20 6f 6d 69 74 74 65 64 20 69 66 20 74 68  ** omitted if th
2ba50 61 74 20 69 6e 64 65 78 20 68 61 64 20 62 65 65  at index had bee
2ba60 6e 20 75 6e 69 71 75 65 2e 20 20 50 33 20 69 73  n unique.  P3 is
2ba70 20 75 73 75 61 6c 6c 79 20 30 2e 20 20 50 33 20   usually 0.  P3 
2ba80 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 65 69 74  is.** always eit
2ba90 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a  her 0 or 1..**.*
2baa0 2a 20 50 34 20 69 73 20 61 6c 77 61 79 73 20 6f  * P4 is always o
2bab0 66 20 74 79 70 65 20 50 34 5f 41 44 56 41 4e 43  f type P4_ADVANC
2bac0 45 2e 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20  E. The function 
2bad0 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74 73 20 74  pointer points t
2bae0 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65  o.** sqlite3Btre
2baf0 65 4e 65 78 74 28 29 2e 0a 2a 2a 0a 2a 2a 20 49  eNext()..**.** I
2bb00 66 20 50 35 20 69 73 20 70 6f 73 69 74 69 76 65  f P5 is positive
2bb10 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73   and the jump is
2bb20 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65   taken, then eve
2bb30 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75  nt counter.** nu
2bb40 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65  mber P5-1 in the
2bb50 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
2bb60 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  ent is increment
2bb70 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ed..**.** See al
2bb80 73 6f 3a 20 50 72 65 76 0a 2a 2f 0a 2f 2a 20 4f  so: Prev.*/./* O
2bb90 70 63 6f 64 65 3a 20 50 72 65 76 20 50 31 20 50  pcode: Prev P1 P
2bba0 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
2bbb0 20 42 61 63 6b 20 75 70 20 63 75 72 73 6f 72 20   Back up cursor 
2bbc0 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f  P1 so that it po
2bbd0 69 6e 74 73 20 74 6f 20 74 68 65 20 70 72 65 76  ints to the prev
2bbe0 69 6f 75 73 20 6b 65 79 2f 64 61 74 61 20 70 61  ious key/data pa
2bbf0 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62  ir in its.** tab
2bc00 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66  le or index.  If
2bc10 20 74 68 65 72 65 20 69 73 20 6e 6f 20 70 72 65   there is no pre
2bc20 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65 20  vious key/value 
2bc30 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20  pairs then fall 
2bc40 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
2bc50 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
2bc60 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66  ruction.  But if
2bc70 20 74 68 65 20 63 75 72 73 6f 72 20 62 61 63 6b   the cursor back
2bc80 75 70 20 77 61 73 20 73 75 63 63 65 73 73 66 75  up was successfu
2bc90 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64  l,.** jump immed
2bca0 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a  iately to P2..**
2bcb0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 72 65 76 20  .**.** The Prev 
2bcc0 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76  opcode is only v
2bcd0 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61  alid following a
2bce0 6e 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45  n SeekLT, SeekLE
2bcf0 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 4c 61 73 74 20  , or.** OP_Last 
2bd00 6f 70 63 6f 64 65 20 75 73 65 64 20 74 6f 20 70  opcode used to p
2bd10 6f 73 69 74 69 6f 6e 20 74 68 65 20 63 75 72 73  osition the curs
2bd20 6f 72 2e 20 20 50 72 65 76 20 69 73 20 6e 6f 74  or.  Prev is not
2bd30 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66   allowed.** to f
2bd40 6f 6c 6c 6f 77 20 53 65 65 6b 47 54 2c 20 53 65  ollow SeekGT, Se
2bd50 65 6b 47 45 2c 20 6f 72 20 4f 50 5f 52 65 77 69  ekGE, or OP_Rewi
2bd60 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31  nd..**.** The P1
2bd70 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
2bd80 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65  for a real table
2bd90 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74  , not a pseudo-t
2bda0 61 62 6c 65 2e 20 20 49 66 20 50 31 20 69 73 0a  able.  If P1 is.
2bdb0 2a 2a 20 6e 6f 74 20 6f 70 65 6e 20 74 68 65 6e  ** not open then
2bdc0 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69 73   the behavior is
2bdd0 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a   undefined..**.*
2bde0 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65 20 69  * The P3 value i
2bdf0 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20  s a hint to the 
2be00 62 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61  btree implementa
2be10 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20  tion. If P3==1, 
2be20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31  that.** means P1
2be30 20 69 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   is an SQL index
2be40 20 61 6e 64 20 74 68 61 74 20 74 68 69 73 20 69   and that this i
2be50 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64  nstruction could
2be60 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d   have been.** om
2be70 69 74 74 65 64 20 69 66 20 74 68 61 74 20 69 6e  itted if that in
2be80 64 65 78 20 68 61 64 20 62 65 65 6e 20 75 6e 69  dex had been uni
2be90 71 75 65 2e 20 20 50 33 20 69 73 20 75 73 75 61  que.  P3 is usua
2bea0 6c 6c 79 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a  lly 0.  P3 is.**
2beb0 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 20 30   always either 0
2bec0 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20   or 1..**.** P4 
2bed0 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70  is always of typ
2bee0 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68  e P4_ADVANCE. Th
2bef0 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74  e function point
2bf00 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20  er points to.** 
2bf10 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76  sqlite3BtreePrev
2bf20 69 6f 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66  ious()..**.** If
2bf30 20 50 35 20 69 73 20 70 6f 73 69 74 69 76 65 20   P5 is positive 
2bf40 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20  and the jump is 
2bf50 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e  taken, then even
2bf60 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d  t counter.** num
2bf70 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20  ber P5-1 in the 
2bf80 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
2bf90 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  nt is incremente
2bfa0 64 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  d..*/./* Opcode:
2bfb0 20 53 6f 72 74 65 72 4e 65 78 74 20 50 31 20 50   SorterNext P1 P
2bfc0 32 20 2a 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 54  2 * * P5.**.** T
2bfd0 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73  his opcode works
2bfe0 20 6a 75 73 74 20 6c 69 6b 65 20 4f 50 5f 4e 65   just like OP_Ne
2bff0 78 74 20 65 78 63 65 70 74 20 74 68 61 74 20 50  xt except that P
2c000 31 20 6d 75 73 74 20 62 65 20 61 0a 2a 2a 20 73  1 must be a.** s
2c010 6f 72 74 65 72 20 6f 62 6a 65 63 74 20 66 6f 72  orter object for
2c020 20 77 68 69 63 68 20 74 68 65 20 4f 50 5f 53 6f   which the OP_So
2c030 72 74 65 72 53 6f 72 74 20 6f 70 63 6f 64 65 20  rterSort opcode 
2c040 68 61 73 20 62 65 65 6e 0a 2a 2a 20 69 6e 76 6f  has been.** invo
2c050 6b 65 64 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ked.  This opcod
2c060 65 20 61 64 76 61 6e 63 65 73 20 74 68 65 20 63  e advances the c
2c070 75 72 73 6f 72 20 74 6f 20 74 68 65 20 6e 65 78  ursor to the nex
2c080 74 20 73 6f 72 74 65 64 0a 2a 2a 20 72 65 63 6f  t sorted.** reco
2c090 72 64 2c 20 6f 72 20 6a 75 6d 70 73 20 74 6f 20  rd, or jumps to 
2c0a0 50 32 20 69 66 20 74 68 65 72 65 20 61 72 65 20  P2 if there are 
2c0b0 6e 6f 20 6d 6f 72 65 20 73 6f 72 74 65 64 20 72  no more sorted r
2c0c0 65 63 6f 72 64 73 2e 0a 2a 2f 0a 63 61 73 65 20  ecords..*/.case 
2c0d0 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 3a 20 7b  OP_SorterNext: {
2c0e0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56    /* jump */.  V
2c0f0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a  dbeCursor *pC;..
2c100 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
2c110 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2c120 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
2c130 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
2c140 65 33 56 64 62 65 53 6f 72 74 65 72 4e 65 78 74  e3VdbeSorterNext
2c150 28 64 62 2c 20 70 43 29 3b 0a 20 20 67 6f 74 6f  (db, pC);.  goto
2c160 20 6e 65 78 74 5f 74 61 69 6c 3b 0a 63 61 73 65   next_tail;.case
2c170 20 4f 50 5f 50 72 65 76 3a 20 20 20 20 20 20 20   OP_Prev:       
2c180 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
2c190 73 65 20 4f 50 5f 4e 65 78 74 3a 20 20 20 20 20  se OP_Next:     
2c1a0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
2c1b0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2c1c0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
2c1d0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
2c1e0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c  assert( pOp->p5<
2c1f0 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 61 43 6f  ArraySize(p->aCo
2c200 75 6e 74 65 72 29 20 29 3b 0a 20 20 70 43 20 3d  unter) );.  pC =
2c210 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2c220 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
2c230 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
2c240 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
2c250 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  eto==0 );.  asse
2c260 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
2c270 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
2c280 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
2c290 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78  ->opcode!=OP_Nex
2c2a0 74 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64  t || pOp->p4.xAd
2c2b0 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74  vance==sqlite3Bt
2c2c0 72 65 65 4e 65 78 74 20 29 3b 0a 20 20 61 73 73  reeNext );.  ass
2c2d0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
2c2e0 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70  !=OP_Prev || pOp
2c2f0 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73  ->p4.xAdvance==s
2c300 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69  qlite3BtreePrevi
2c310 6f 75 73 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 65  ous );..  /* The
2c320 20 4e 65 78 74 20 6f 70 63 6f 64 65 20 69 73 20   Next opcode is 
2c330 6f 6e 6c 79 20 75 73 65 64 20 61 66 74 65 72 20  only used after 
2c340 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20  SeekGT, SeekGE, 
2c350 52 65 77 69 6e 64 2c 20 61 6e 64 20 46 6f 75 6e  Rewind, and Foun
2c360 64 2e 0a 20 20 2a 2a 20 54 68 65 20 50 72 65 76  d..  ** The Prev
2c370 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20   opcode is only 
2c380 75 73 65 64 20 61 66 74 65 72 20 53 65 65 6b 4c  used after SeekL
2c390 54 2c 20 53 65 65 6b 4c 45 2c 20 61 6e 64 20 4c  T, SeekLE, and L
2c3a0 61 73 74 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74  ast. */.  assert
2c3b0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  ( pOp->opcode!=O
2c3c0 50 5f 4e 65 78 74 0a 20 20 20 20 20 20 20 7c 7c  P_Next.       ||
2c3d0 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f   pC->seekOp==OP_
2c3e0 53 65 65 6b 47 54 20 7c 7c 20 70 43 2d 3e 73 65  SeekGT || pC->se
2c3f0 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 45 0a  ekOp==OP_SeekGE.
2c400 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65         || pC->se
2c410 65 6b 4f 70 3d 3d 4f 50 5f 52 65 77 69 6e 64 20  ekOp==OP_Rewind 
2c420 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f  || pC->seekOp==O
2c430 50 5f 46 6f 75 6e 64 20 0a 20 20 20 20 20 20 20  P_Found .       
2c440 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f  || pC->seekOp==O
2c450 50 5f 4e 75 6c 6c 52 6f 77 7c 7c 20 70 43 2d 3e  P_NullRow|| pC->
2c460 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 52  seekOp==OP_SeekR
2c470 6f 77 69 64 29 3b 0a 20 20 61 73 73 65 72 74 28  owid);.  assert(
2c480 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
2c490 5f 50 72 65 76 0a 20 20 20 20 20 20 20 7c 7c 20  _Prev.       || 
2c4a0 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53  pC->seekOp==OP_S
2c4b0 65 65 6b 4c 54 20 7c 7c 20 70 43 2d 3e 73 65 65  eekLT || pC->see
2c4c0 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c 45 0a 20  kOp==OP_SeekLE. 
2c4d0 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65        || pC->see
2c4e0 6b 4f 70 3d 3d 4f 50 5f 4c 61 73 74 20 0a 20 20  kOp==OP_Last .  
2c4f0 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b       || pC->seek
2c500 4f 70 3d 3d 4f 50 5f 4e 75 6c 6c 52 6f 77 29 3b  Op==OP_NullRow);
2c510 0a 0a 20 20 72 63 20 3d 20 70 4f 70 2d 3e 70 34  ..  rc = pOp->p4
2c520 2e 78 41 64 76 61 6e 63 65 28 70 43 2d 3e 75 63  .xAdvance(pC->uc
2c530 2e 70 43 75 72 73 6f 72 2c 20 70 4f 70 2d 3e 70  .pCursor, pOp->p
2c540 33 29 3b 0a 6e 65 78 74 5f 74 61 69 6c 3a 0a 20  3);.next_tail:. 
2c550 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
2c560 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
2c570 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
2c580 6e 28 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 2c  n(rc==SQLITE_OK,
2c590 32 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  2);.  if( rc==SQ
2c5a0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 70  LITE_OK ){.    p
2c5b0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  C->nullRow = 0;.
2c5c0 20 20 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b      p->aCounter[
2c5d0 70 4f 70 2d 3e 70 35 5d 2b 2b 3b 0a 23 69 66 64  pOp->p5]++;.#ifd
2c5e0 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
2c5f0 20 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63     sqlite3_searc
2c600 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69  h_count++;.#endi
2c610 66 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f  f.    goto jump_
2c620 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f  to_p2_and_check_
2c630 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20  for_interrupt;. 
2c640 20 7d 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c   }.  if( rc!=SQL
2c650 49 54 45 5f 44 4f 4e 45 20 29 20 67 6f 74 6f 20  ITE_DONE ) goto 
2c660 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2c670 6f 72 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54  or;.  rc = SQLIT
2c680 45 5f 4f 4b 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c  E_OK;.  pC->null
2c690 52 6f 77 20 3d 20 31 3b 0a 20 20 67 6f 74 6f 20  Row = 1;.  goto 
2c6a0 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72  check_for_interr
2c6b0 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  upt;.}../* Opcod
2c6c0 65 3a 20 49 64 78 49 6e 73 65 72 74 20 50 31 20  e: IdxInsert P1 
2c6d0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
2c6e0 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
2c6f0 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  2].**.** Registe
2c700 72 20 50 32 20 68 6f 6c 64 73 20 61 6e 20 53 51  r P2 holds an SQ
2c710 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d 61 64 65  L index key made
2c720 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61   using the.** Ma
2c730 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63  keRecord instruc
2c740 74 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70 63  tions.  This opc
2c750 6f 64 65 20 77 72 69 74 65 73 20 74 68 61 74 20  ode writes that 
2c760 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20  key.** into the 
2c770 69 6e 64 65 78 20 50 31 2e 20 20 44 61 74 61 20  index P1.  Data 
2c780 66 6f 72 20 74 68 65 20 65 6e 74 72 79 20 69 73  for the entry is
2c790 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50   nil..**.** If P
2c7a0 34 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  4 is not zero, t
2c7b0 68 65 6e 20 69 74 20 69 73 20 74 68 65 20 6e 75  hen it is the nu
2c7c0 6d 62 65 72 20 6f 66 20 76 61 6c 75 65 73 20 69  mber of values i
2c7d0 6e 20 74 68 65 20 75 6e 70 61 63 6b 65 64 0a 2a  n the unpacked.*
2c7e0 2a 20 6b 65 79 20 6f 66 20 72 65 67 28 50 32 29  * key of reg(P2)
2c7f0 2e 20 20 49 6e 20 74 68 61 74 20 63 61 73 65 2c  .  In that case,
2c800 20 50 33 20 69 73 20 74 68 65 20 69 6e 64 65 78   P3 is the index
2c810 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 72 65   of the first re
2c820 67 69 73 74 65 72 0a 2a 2a 20 66 6f 72 20 74 68  gister.** for th
2c830 65 20 75 6e 70 61 63 6b 65 64 20 6b 65 79 2e 20  e unpacked key. 
2c840 20 54 68 65 20 61 76 61 69 6c 61 62 69 6c 69 74   The availabilit
2c850 79 20 6f 66 20 74 68 65 20 75 6e 70 61 63 6b 65  y of the unpacke
2c860 64 20 6b 65 79 20 63 61 6e 20 73 6f 6d 65 74 69  d key can someti
2c870 6d 65 73 0a 2a 2a 20 62 65 20 61 6e 20 6f 70 74  mes.** be an opt
2c880 69 6d 69 7a 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  imization..**.**
2c890 20 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f   If P5 has the O
2c8a0 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 62 69 74  PFLAG_APPEND bit
2c8b0 20 73 65 74 2c 20 74 68 61 74 20 69 73 20 61 20   set, that is a 
2c8c0 68 69 6e 74 20 74 6f 20 74 68 65 20 62 2d 74 72  hint to the b-tr
2c8d0 65 65 20 6c 61 79 65 72 0a 2a 2a 20 74 68 61 74  ee layer.** that
2c8e0 20 74 68 69 73 20 69 6e 73 65 72 74 20 69 73 20   this insert is 
2c8f0 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20  likely to be an 
2c900 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  append..**.** If
2c910 20 50 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c   P5 has the OPFL
2c920 41 47 5f 4e 43 48 41 4e 47 45 20 62 69 74 20 73  AG_NCHANGE bit s
2c930 65 74 2c 20 74 68 65 6e 20 74 68 65 20 63 68 61  et, then the cha
2c940 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 0a 2a  nge counter is.*
2c950 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79  * incremented by
2c960 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
2c970 6e 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41  n.  If the OPFLA
2c980 47 5f 4e 43 48 41 4e 47 45 20 62 69 74 20 69 73  G_NCHANGE bit is
2c990 20 63 6c 65 61 72 2c 0a 2a 2a 20 74 68 65 6e 20   clear,.** then 
2c9a0 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  the change count
2c9b0 65 72 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e  er is unchanged.
2c9c0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
2c9d0 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
2c9e0 4c 54 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73  LT flag of P5 is
2c9f0 20 73 65 74 2c 20 74 68 65 20 69 6d 70 6c 65 6d   set, the implem
2ca00 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68 74 0a 2a  entation might.*
2ca10 2a 20 72 75 6e 20 66 61 73 74 65 72 20 62 79 20  * run faster by 
2ca20 61 76 6f 69 64 69 6e 67 20 61 6e 20 75 6e 6e 65  avoiding an unne
2ca30 63 65 73 73 61 72 79 20 73 65 65 6b 20 6f 6e 20  cessary seek on 
2ca40 63 75 72 73 6f 72 20 50 31 2e 20 20 48 6f 77 65  cursor P1.  Howe
2ca50 76 65 72 2c 0a 2a 2a 20 74 68 65 20 4f 50 46 4c  ver,.** the OPFL
2ca60 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
2ca70 20 66 6c 61 67 20 6d 75 73 74 20 6f 6e 6c 79 20   flag must only 
2ca80 62 65 20 73 65 74 20 69 66 20 74 68 65 72 65 20  be set if there 
2ca90 68 61 76 65 20 62 65 65 6e 20 6e 6f 20 70 72 69  have been no pri
2caa0 6f 72 0a 2a 2a 20 73 65 65 6b 73 20 6f 6e 20 74  or.** seeks on t
2cab0 68 65 20 63 75 72 73 6f 72 20 6f 72 20 69 66 20  he cursor or if 
2cac0 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  the most recent 
2cad0 73 65 65 6b 20 75 73 65 64 20 61 20 6b 65 79 20  seek used a key 
2cae0 65 71 75 69 76 61 6c 65 6e 74 0a 2a 2a 20 74 6f  equivalent.** to
2caf0 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73   P2. .**.** This
2cb00 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c   instruction onl
2cb10 79 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e 64 69  y works for indi
2cb20 63 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61  ces.  The equiva
2cb30 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  lent instruction
2cb40 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73 20 69  .** for tables i
2cb50 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a  s OP_Insert..*/.
2cb60 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65  /* Opcode: Sorte
2cb70 72 49 6e 73 65 72 74 20 50 31 20 50 32 20 2a 20  rInsert P1 P2 * 
2cb80 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2cb90 20 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a   key=r[P2].**.**
2cba0 20 52 65 67 69 73 74 65 72 20 50 32 20 68 6f 6c   Register P2 hol
2cbb0 64 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20  ds an SQL index 
2cbc0 6b 65 79 20 6d 61 64 65 20 75 73 69 6e 67 20 74  key made using t
2cbd0 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64  he.** MakeRecord
2cbe0 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20 20   instructions.  
2cbf0 54 68 69 73 20 6f 70 63 6f 64 65 20 77 72 69 74  This opcode writ
2cc00 65 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69  es that key.** i
2cc10 6e 74 6f 20 74 68 65 20 73 6f 72 74 65 72 20 50  nto the sorter P
2cc20 31 2e 20 20 44 61 74 61 20 66 6f 72 20 74 68 65  1.  Data for the
2cc30 20 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a   entry is nil..*
2cc40 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
2cc50 49 6e 73 65 72 74 3a 20 20 20 20 20 20 20 2f 2a  Insert:       /*
2cc60 20 69 6e 32 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in2 */.case OP_
2cc70 49 64 78 49 6e 73 65 72 74 3a 20 7b 20 20 20 20  IdxInsert: {    
2cc80 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20      /* in2 */.  
2cc90 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
2cca0 20 20 42 74 72 65 65 50 61 79 6c 6f 61 64 20 78    BtreePayload x
2ccb0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
2ccc0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
2ccd0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
2cce0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
2ccf0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 73 71 6c  [pOp->p1];.  sql
2cd00 69 74 65 33 56 64 62 65 49 6e 63 72 57 72 69 74  ite3VdbeIncrWrit
2cd10 65 43 6f 75 6e 74 65 72 28 70 2c 20 70 43 29 3b  eCounter(p, pC);
2cd20 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
2cd30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73   );.  assert( is
2cd40 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70  Sorter(pC)==(pOp
2cd50 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72  ->opcode==OP_Sor
2cd60 74 65 72 49 6e 73 65 72 74 29 20 29 3b 0a 20 20  terInsert) );.  
2cd70 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
2cd80 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
2cd90 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn2->flags & M
2cda0 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 69 66 28  EM_Blob );.  if(
2cdb0 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41   pOp->p5 & OPFLA
2cdc0 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e  G_NCHANGE ) p->n
2cdd0 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 61 73 73 65  Change++;.  asse
2cde0 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
2cdf0 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
2ce00 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
2ce10 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 20  OP_SorterInsert 
2ce20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
2ce30 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20  >isTable==0 );. 
2ce40 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62   rc = ExpandBlob
2ce50 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 72 63  (pIn2);.  if( rc
2ce60 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2ce70 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66  e_to_error;.  if
2ce80 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
2ce90 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 20 29  P_SorterInsert )
2cea0 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
2ceb0 65 33 56 64 62 65 53 6f 72 74 65 72 57 72 69 74  e3VdbeSorterWrit
2cec0 65 28 70 43 2c 20 70 49 6e 32 29 3b 0a 20 20 7d  e(pC, pIn2);.  }
2ced0 65 6c 73 65 7b 0a 20 20 20 20 78 2e 6e 4b 65 79  else{.    x.nKey
2cee0 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20 20   = pIn2->n;.    
2cef0 78 2e 70 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 7a  x.pKey = pIn2->z
2cf00 3b 0a 20 20 20 20 78 2e 61 4d 65 6d 20 3d 20 61  ;.    x.aMem = a
2cf10 4d 65 6d 20 2b 20 70 4f 70 2d 3e 70 33 3b 0a 20  Mem + pOp->p3;. 
2cf20 20 20 20 78 2e 6e 4d 65 6d 20 3d 20 28 75 31 36     x.nMem = (u16
2cf30 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20  )pOp->p4.i;.    
2cf40 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2cf50 65 49 6e 73 65 72 74 28 70 43 2d 3e 75 63 2e 70  eInsert(pC->uc.p
2cf60 43 75 72 73 6f 72 2c 20 26 78 2c 0a 20 20 20 20  Cursor, &x,.    
2cf70 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26 20       (pOp->p5 & 
2cf80 28 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 7c 4f  (OPFLAG_APPEND|O
2cf90 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49  PFLAG_SAVEPOSITI
2cfa0 4f 4e 29 29 2c 20 0a 20 20 20 20 20 20 20 20 28  ON)), .        (
2cfb0 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
2cfc0 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29  G_USESEEKRESULT)
2cfd0 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c   ? pC->seekResul
2cfe0 74 20 3a 20 30 29 0a 20 20 20 20 20 20 20 20 29  t : 0).        )
2cff0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
2d000 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
2d010 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e 63  ==0 );.    pC->c
2d020 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
2d030 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20  HE_STALE;.  }.  
2d040 69 66 28 20 72 63 29 20 67 6f 74 6f 20 61 62 6f  if( rc) goto abo
2d050 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2d060 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2d070 4f 70 63 6f 64 65 3a 20 49 64 78 44 65 6c 65 74  Opcode: IdxDelet
2d080 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
2d090 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
2d0a0 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 54  r[P2@P3].**.** T
2d0b0 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50 33  he content of P3
2d0c0 20 72 65 67 69 73 74 65 72 73 20 73 74 61 72 74   registers start
2d0d0 69 6e 67 20 61 74 20 72 65 67 69 73 74 65 72 20  ing at register 
2d0e0 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e  P2 form.** an un
2d0f0 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
2d100 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65  . This opcode re
2d110 6d 6f 76 65 73 20 74 68 61 74 20 65 6e 74 72 79  moves that entry
2d120 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69 6e   from the .** in
2d130 64 65 78 20 6f 70 65 6e 65 64 20 62 79 20 63 75  dex opened by cu
2d140 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65  rsor P1..*/.case
2d150 20 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a 20 7b   OP_IdxDelete: {
2d160 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
2d170 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
2d180 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
2d190 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
2d1a0 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  d r;..  assert( 
2d1b0 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 61  pOp->p3>0 );.  a
2d1c0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
2d1d0 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d   && pOp->p2+pOp-
2d1e0 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p3<=(p->nMem+1 
2d1f0 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  - p->nCursor)+1 
2d200 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
2d210 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
2d220 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
2d230 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
2d240 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2d250 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
2d260 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
2d270 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
2d280 52 45 45 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  REE );.  sqlite3
2d290 56 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75  VdbeIncrWriteCou
2d2a0 6e 74 65 72 28 70 2c 20 70 43 29 3b 0a 20 20 70  nter(p, pC);.  p
2d2b0 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43  Crsr = pC->uc.pC
2d2c0 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28  ursor;.  assert(
2d2d0 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 61   pCrsr!=0 );.  a
2d2e0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d  ssert( pOp->p5==
2d2f0 30 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66  0 );.  r.pKeyInf
2d300 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  o = pC->pKeyInfo
2d310 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28  ;.  r.nField = (
2d320 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 72  u16)pOp->p3;.  r
2d330 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b  .default_rc = 0;
2d340 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65  .  r.aMem = &aMe
2d350 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 72 63  m[pOp->p2];.  rc
2d360 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
2d370 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
2d380 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26  rsr, &r, 0, 0, &
2d390 72 65 73 29 3b 0a 20 20 69 66 28 20 72 63 20 29  res);.  if( rc )
2d3a0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2d3b0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20  to_error;.  if( 
2d3c0 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63  res==0 ){.    rc
2d3d0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
2d3e0 65 6c 65 74 65 28 70 43 72 73 72 2c 20 42 54 52  elete(pCrsr, BTR
2d3f0 45 45 5f 41 55 58 44 45 4c 45 54 45 29 3b 0a 20  EE_AUXDELETE);. 
2d400 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
2d410 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2d420 72 6f 72 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  ror;.  }.  asser
2d430 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
2d440 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 70 43  oveto==0 );.  pC
2d450 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
2d460 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70  CACHE_STALE;.  p
2d470 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  C->seekResult = 
2d480 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  0;.  break;.}../
2d490 2a 20 4f 70 63 6f 64 65 3a 20 44 65 66 65 72 72  * Opcode: Deferr
2d4a0 65 64 53 65 65 6b 20 50 31 20 2a 20 50 33 20 50  edSeek P1 * P3 P
2d4b0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
2d4c0 20 4d 6f 76 65 20 50 33 20 74 6f 20 50 31 2e 72   Move P3 to P1.r
2d4d0 6f 77 69 64 20 69 66 20 6e 65 65 64 65 64 0a 2a  owid if needed.*
2d4e0 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20 6f 70  *.** P1 is an op
2d4f0 65 6e 20 69 6e 64 65 78 20 63 75 72 73 6f 72 20  en index cursor 
2d500 61 6e 64 20 50 33 20 69 73 20 61 20 63 75 72 73  and P3 is a curs
2d510 6f 72 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73  or on the corres
2d520 70 6f 6e 64 69 6e 67 0a 2a 2a 20 74 61 62 6c 65  ponding.** table
2d530 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64  .  This opcode d
2d540 6f 65 73 20 61 20 64 65 66 65 72 72 65 64 20 73  oes a deferred s
2d550 65 65 6b 20 6f 66 20 74 68 65 20 50 33 20 74 61  eek of the P3 ta
2d560 62 6c 65 20 63 75 72 73 6f 72 0a 2a 2a 20 74 6f  ble cursor.** to
2d570 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 63 6f   the row that co
2d580 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
2d590 20 63 75 72 72 65 6e 74 20 72 6f 77 20 6f 66 20   current row of 
2d5a0 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  P1..**.** This i
2d5b0 73 20 61 20 64 65 66 65 72 72 65 64 20 73 65 65  s a deferred see
2d5c0 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63 74 75  k.  Nothing actu
2d5d0 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 75 6e 74  ally happens unt
2d5e0 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72  il.** the cursor
2d5f0 20 69 73 20 75 73 65 64 20 74 6f 20 72 65 61 64   is used to read
2d600 20 61 20 72 65 63 6f 72 64 2e 20 20 54 68 61 74   a record.  That
2d610 20 77 61 79 2c 20 69 66 20 6e 6f 20 72 65 61 64   way, if no read
2d620 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75  s.** occur, no u
2d630 6e 6e 65 63 65 73 73 61 72 79 20 49 2f 4f 20 68  nnecessary I/O h
2d640 61 70 70 65 6e 73 2e 0a 2a 2a 0a 2a 2a 20 50 34  appens..**.** P4
2d650 20 6d 61 79 20 62 65 20 61 6e 20 61 72 72 61 79   may be an array
2d660 20 6f 66 20 69 6e 74 65 67 65 72 73 20 28 74 79   of integers (ty
2d670 70 65 20 50 34 5f 49 4e 54 41 52 52 41 59 29 20  pe P4_INTARRAY) 
2d680 63 6f 6e 74 61 69 6e 69 6e 67 0a 2a 2a 20 6f 6e  containing.** on
2d690 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68  e entry for each
2d6a0 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 50   column in the P
2d6b0 33 20 74 61 62 6c 65 2e 20 20 49 66 20 61 72 72  3 table.  If arr
2d6c0 61 79 20 65 6e 74 72 79 20 61 28 69 29 0a 2a 2a  ay entry a(i).**
2d6d0 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
2d6e0 65 6e 20 72 65 61 64 69 6e 67 20 63 6f 6c 75 6d  en reading colum
2d6f0 6e 20 61 28 69 29 2d 31 20 66 72 6f 6d 20 63 75  n a(i)-1 from cu
2d700 72 73 6f 72 20 50 33 20 69 73 20 0a 2a 2a 20 65  rsor P3 is .** e
2d710 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 70 65 72  quivalent to per
2d720 66 6f 72 6d 69 6e 67 20 74 68 65 20 64 65 66 65  forming the defe
2d730 72 72 65 64 20 73 65 65 6b 20 61 6e 64 20 74 68  rred seek and th
2d740 65 6e 20 72 65 61 64 69 6e 67 20 63 6f 6c 75 6d  en reading colum
2d750 6e 20 69 20 0a 2a 2a 20 66 72 6f 6d 20 50 31 2e  n i .** from P1.
2d760 20 20 54 68 69 73 20 69 6e 66 6f 72 6d 61 74 69    This informati
2d770 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  on is stored in 
2d780 50 33 20 61 6e 64 20 75 73 65 64 20 74 6f 20 72  P3 and used to r
2d790 65 64 69 72 65 63 74 0a 2a 2a 20 72 65 61 64 73  edirect.** reads
2d7a0 20 61 67 61 69 6e 73 74 20 50 33 20 6f 76 65 72   against P3 over
2d7b0 20 74 6f 20 50 31 2c 20 74 68 75 73 20 70 6f 73   to P1, thus pos
2d7c0 73 69 62 6c 79 20 61 76 6f 69 64 69 6e 67 20 74  sibly avoiding t
2d7d0 68 65 20 6e 65 65 64 20 74 6f 0a 2a 2a 20 73 65  he need to.** se
2d7e0 65 6b 20 61 6e 64 20 72 65 61 64 20 63 75 72 73  ek and read curs
2d7f0 6f 72 20 50 33 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  or P3..*/./* Opc
2d800 6f 64 65 3a 20 49 64 78 52 6f 77 69 64 20 50 31  ode: IdxRowid P1
2d810 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
2d820 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77  opsis: r[P2]=row
2d830 69 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69  id.**.** Write i
2d840 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20  nto register P2 
2d850 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68  an integer which
2d860 20 69 73 20 74 68 65 20 6c 61 73 74 20 65 6e 74   is the last ent
2d870 72 79 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ry in the record
2d880 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f   at.** the end o
2d890 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 20  f the index key 
2d8a0 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20 63 75  pointed to by cu
2d8b0 72 73 6f 72 20 50 31 2e 20 20 54 68 69 73 20 69  rsor P1.  This i
2d8c0 6e 74 65 67 65 72 20 73 68 6f 75 6c 64 20 62 65  nteger should be
2d8d0 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64 20 6f 66  .** the rowid of
2d8e0 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79   the table entry
2d8f0 20 74 6f 20 77 68 69 63 68 20 74 68 69 73 20 69   to which this i
2d900 6e 64 65 78 20 65 6e 74 72 79 20 70 6f 69 6e 74  ndex entry point
2d910 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  s..**.** See als
2d920 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65 52 65  o: Rowid, MakeRe
2d930 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  cord..*/.case OP
2d940 5f 44 65 66 65 72 72 65 64 53 65 65 6b 3a 0a 63  _DeferredSeek:.c
2d950 61 73 65 20 4f 50 5f 49 64 78 52 6f 77 69 64 3a  ase OP_IdxRowid:
2d960 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
2d970 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62 65 43 75  out2 */.  VdbeCu
2d980 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20 20 20  rsor *pC;       
2d990 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 31 20        /* The P1 
2d9a0 69 6e 64 65 78 20 63 75 72 73 6f 72 20 2a 2f 0a  index cursor */.
2d9b0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 54    VdbeCursor *pT
2d9c0 61 62 43 75 72 3b 20 20 20 20 20 20 20 20 2f 2a  abCur;        /*
2d9d0 20 54 68 65 20 50 32 20 74 61 62 6c 65 20 63 75   The P2 table cu
2d9e0 72 73 6f 72 20 28 4f 50 5f 44 65 66 65 72 72 65  rsor (OP_Deferre
2d9f0 64 53 65 65 6b 20 6f 6e 6c 79 29 20 2a 2f 0a 20  dSeek only) */. 
2da00 20 69 36 34 20 72 6f 77 69 64 3b 20 20 20 20 20   i64 rowid;     
2da10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2da20 52 6f 77 69 64 20 74 68 61 74 20 50 31 20 63 75  Rowid that P1 cu
2da30 72 72 65 6e 74 20 70 6f 69 6e 74 73 20 74 6f 20  rrent points to 
2da40 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  */..  assert( pO
2da50 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
2da60 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
2da70 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
2da80 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
2da90 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
2daa0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
2dab0 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
2dac0 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74  TREE );.  assert
2dad0 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  ( pC->uc.pCursor
2dae0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
2daf0 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
2db00 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
2db10 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
2db20 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2db30 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 7c 7c 20  !pC->nullRow || 
2db40 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2db50 49 64 78 52 6f 77 69 64 20 29 3b 0a 0a 20 20 2f  IdxRowid );..  /
2db60 2a 20 54 68 65 20 49 64 78 52 6f 77 69 64 20 61  * The IdxRowid a
2db70 6e 64 20 53 65 65 6b 20 6f 70 63 6f 64 65 73 20  nd Seek opcodes 
2db80 61 72 65 20 63 6f 6d 62 69 6e 65 64 20 62 65 63  are combined bec
2db90 61 75 73 65 20 6f 66 20 74 68 65 20 63 6f 6d 6d  ause of the comm
2dba0 6f 6e 61 6c 69 74 79 0a 20 20 2a 2a 20 6f 66 20  onality.  ** of 
2dbb0 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
2dbc0 72 52 65 73 74 6f 72 65 28 29 20 61 6e 64 20 73  rRestore() and s
2dbd0 71 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f 77  qlite3VdbeIdxRow
2dbe0 69 64 28 29 2e 20 2a 2f 0a 20 20 72 63 20 3d 20  id(). */.  rc = 
2dbf0 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
2dc00 72 52 65 73 74 6f 72 65 28 70 43 29 3b 0a 0a 20  rRestore(pC);.. 
2dc10 20 2f 2a 20 73 71 6c 69 74 65 33 56 62 65 43 75   /* sqlite3VbeCu
2dc20 72 73 6f 72 52 65 73 74 6f 72 65 28 29 20 63 61  rsorRestore() ca
2dc30 6e 20 6f 6e 6c 79 20 66 61 69 6c 20 69 66 20 74  n only fail if t
2dc40 68 65 20 72 65 63 6f 72 64 20 68 61 73 20 62 65  he record has be
2dc50 65 6e 20 64 65 6c 65 74 65 64 0a 20 20 2a 2a 20  en deleted.  ** 
2dc60 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65 72 20 74  out from under t
2dc70 68 65 20 63 75 72 73 6f 72 2e 20 20 54 68 61 74  he cursor.  That
2dc80 20 77 69 6c 6c 20 6e 65 76 65 72 20 68 61 70 70   will never happ
2dc90 65 6e 73 20 66 6f 72 20 61 6e 20 49 64 78 52 6f  ens for an IdxRo
2dca0 77 69 64 0a 20 20 2a 2a 20 6f 72 20 53 65 65 6b  wid.  ** or Seek
2dcb0 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69 66 28   opcode */.  if(
2dcc0 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54   NEVER(rc!=SQLIT
2dcd0 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f  E_OK) ) goto abo
2dce0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2dcf0 0a 0a 20 20 69 66 28 20 21 70 43 2d 3e 6e 75 6c  ..  if( !pC->nul
2dd00 6c 52 6f 77 20 29 7b 0a 20 20 20 20 72 6f 77 69  lRow ){.    rowi
2dd10 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e  d = 0;  /* Not n
2dd20 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65  eeded.  Only use
2dd30 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77  d to silence a w
2dd40 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72  arning. */.    r
2dd50 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  c = sqlite3VdbeI
2dd60 64 78 52 6f 77 69 64 28 64 62 2c 20 70 43 2d 3e  dxRowid(db, pC->
2dd70 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 6f 77  uc.pCursor, &row
2dd80 69 64 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21  id);.    if( rc!
2dd90 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
2dda0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
2ddb0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
2ddc0 20 7d 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e   }.    if( pOp->
2ddd0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 44 65 66 65 72  opcode==OP_Defer
2dde0 72 65 64 53 65 65 6b 20 29 7b 0a 20 20 20 20 20  redSeek ){.     
2ddf0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
2de00 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 70  >=0 && pOp->p3<p
2de10 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 20  ->nCursor );.   
2de20 20 20 20 70 54 61 62 43 75 72 20 3d 20 70 2d 3e     pTabCur = p->
2de30 61 70 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  apCsr[pOp->p3];.
2de40 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 54        assert( pT
2de50 61 62 43 75 72 21 3d 30 20 29 3b 0a 20 20 20 20  abCur!=0 );.    
2de60 20 20 61 73 73 65 72 74 28 20 70 54 61 62 43 75    assert( pTabCu
2de70 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  r->eCurType==CUR
2de80 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
2de90 20 20 20 20 61 73 73 65 72 74 28 20 70 54 61 62      assert( pTab
2dea0 43 75 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21  Cur->uc.pCursor!
2deb0 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  =0 );.      asse
2dec0 72 74 28 20 70 54 61 62 43 75 72 2d 3e 69 73 54  rt( pTabCur->isT
2ded0 61 62 6c 65 20 29 3b 0a 20 20 20 20 20 20 70 54  able );.      pT
2dee0 61 62 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  abCur->nullRow =
2def0 20 30 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75   0;.      pTabCu
2df00 72 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20  r->movetoTarget 
2df10 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 20 20 70  = rowid;.      p
2df20 54 61 62 43 75 72 2d 3e 64 65 66 65 72 72 65 64  TabCur->deferred
2df30 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20 20 20 20  Moveto = 1;.    
2df40 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2df50 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52  4type==P4_INTARR
2df60 41 59 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 61 69  AY || pOp->p4.ai
2df70 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 70 54 61  ==0 );.      pTa
2df80 62 43 75 72 2d 3e 61 41 6c 74 4d 61 70 20 3d 20  bCur->aAltMap = 
2df90 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 20 20  pOp->p4.ai;.    
2dfa0 20 20 70 54 61 62 43 75 72 2d 3e 70 41 6c 74 43    pTabCur->pAltC
2dfb0 75 72 73 6f 72 20 3d 20 70 43 3b 0a 20 20 20 20  ursor = pC;.    
2dfc0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 4f 75  }else{.      pOu
2dfd0 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
2dfe0 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 20 20  se(p, pOp);.    
2dff0 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f    pOut->u.i = ro
2e000 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  wid;.    }.  }el
2e010 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
2e020 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2e030 49 64 78 52 6f 77 69 64 20 29 3b 0a 20 20 20 20  IdxRowid );.    
2e040 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2e050 74 4e 75 6c 6c 28 26 61 4d 65 6d 5b 70 4f 70 2d  tNull(&aMem[pOp-
2e060 3e 70 32 5d 29 3b 0a 20 20 7d 0a 20 20 62 72 65  >p2]);.  }.  bre
2e070 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2e080 3a 20 49 64 78 47 45 20 50 31 20 50 32 20 50 33  : IdxGE P1 P2 P3
2e090 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
2e0a0 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
2e0b0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65  .**.** The P4 re
2e0c0 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65  gister values be
2e0d0 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20  ginning with P3 
2e0e0 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
2e0f0 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74   index .** key t
2e100 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52  hat omits the PR
2e110 49 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70  IMARY KEY.  Comp
2e120 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c  are this key val
2e130 75 65 20 61 67 61 69 6e 73 74 20 74 68 65 20 69  ue against the i
2e140 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31  ndex .** that P1
2e150 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
2e160 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72  inting to, ignor
2e170 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20  ing the PRIMARY 
2e180 4b 45 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a  KEY or ROWID .**
2e190 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20 65   fields at the e
2e1a0 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  nd..**.** If the
2e1b0 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20   P1 index entry 
2e1c0 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
2e1d0 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
2e1e0 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65  key value.** the
2e1f0 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f  n jump to P2.  O
2e200 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68  therwise fall th
2e210 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
2e220 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
2e230 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  /./* Opcode: Idx
2e240 47 54 20 50 31 20 50 32 20 50 33 20 50 34 20 50  GT P1 P2 P3 P4 P
2e250 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  5.** Synopsis: k
2e260 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
2e270 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65  * The P4 registe
2e280 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69  r values beginni
2e290 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20  ng with P3 form 
2e2a0 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
2e2b0 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f  x .** key that o
2e2c0 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59  mits the PRIMARY
2e2d0 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65 20 74   KEY.  Compare t
2e2e0 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67  his key value ag
2e2f0 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20  ainst the index 
2e300 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20 63  .** that P1 is c
2e310 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
2e320 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74  g to, ignoring t
2e330 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f  he PRIMARY KEY o
2e340 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c  r ROWID .** fiel
2e350 64 73 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a  ds at the end..*
2e360 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69  *.** If the P1 i
2e370 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 67 72  ndex entry is gr
2e380 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b  eater than the k
2e390 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e  ey value.** then
2e3a0 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74   jump to P2.  Ot
2e3b0 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72  herwise fall thr
2e3c0 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
2e3d0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
2e3e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c  ./* Opcode: IdxL
2e3f0 54 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  T P1 P2 P3 P4 P5
2e400 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
2e410 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
2e420 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72   The P4 register
2e430 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e   values beginnin
2e440 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61  g with P3 form a
2e450 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
2e460 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d   .** key that om
2e470 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20  its the PRIMARY 
2e480 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20 43  KEY or ROWID.  C
2e490 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
2e4a0 76 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a  value against.**
2e4b0 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20   the index that 
2e4c0 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
2e4d0 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e  pointing to, ign
2e4e0 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52  oring the PRIMAR
2e4f0 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49  Y KEY or.** ROWI
2e500 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65  D on the P1 inde
2e510 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  x..**.** If the 
2e520 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69  P1 index entry i
2e530 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20  s less than the 
2e540 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a  key value then j
2e550 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74  ump to P2..** Ot
2e560 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72  herwise fall thr
2e570 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
2e580 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
2e590 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c  ./* Opcode: IdxL
2e5a0 45 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  E P1 P2 P3 P4 P5
2e5b0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
2e5c0 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
2e5d0 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72   The P4 register
2e5e0 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e   values beginnin
2e5f0 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61  g with P3 form a
2e600 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
2e610 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d   .** key that om
2e620 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20  its the PRIMARY 
2e630 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20 43  KEY or ROWID.  C
2e640 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
2e650 76 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a  value against.**
2e660 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20   the index that 
2e670 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
2e680 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e  pointing to, ign
2e690 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52  oring the PRIMAR
2e6a0 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49  Y KEY or.** ROWI
2e6b0 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65  D on the P1 inde
2e6c0 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  x..**.** If the 
2e6d0 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69  P1 index entry i
2e6e0 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  s less than or e
2e6f0 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
2e700 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 0a  value then jump.
2e710 2a 2a 20 74 6f 20 50 32 2e 20 4f 74 68 65 72 77  ** to P2. Otherw
2e720 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ise fall through
2e730 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
2e740 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
2e750 65 20 4f 50 5f 49 64 78 4c 45 3a 20 20 20 20 20  e OP_IdxLE:     
2e760 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
2e770 63 61 73 65 20 4f 50 5f 49 64 78 47 54 3a 20 20  case OP_IdxGT:  
2e780 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
2e790 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 54  */.case OP_IdxLT
2e7a0 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
2e7b0 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  mp */.case OP_Id
2e7c0 78 47 45 3a 20 20 7b 20 20 20 20 20 20 20 2f 2a  xGE:  {       /*
2e7d0 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
2e7e0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74  ursor *pC;.  int
2e7f0 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64   res;.  Unpacked
2e800 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73  Record r;..  ass
2e810 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2e820 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
2e830 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
2e840 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
2e850 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
2e860 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2e870 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b  pC->isOrdered );
2e880 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
2e890 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
2e8a0 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65  _BTREE );.  asse
2e8b0 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  rt( pC->uc.pCurs
2e8c0 6f 72 21 3d 30 29 3b 0a 20 20 61 73 73 65 72 74  or!=0);.  assert
2e8d0 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
2e8e0 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73  veto==0 );.  ass
2e8f0 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  ert( pOp->p5==0 
2e900 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b  || pOp->p5==1 );
2e910 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2e920 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
2e930 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f   );.  r.pKeyInfo
2e940 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b   = pC->pKeyInfo;
2e950 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75  .  r.nField = (u
2e960 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20  16)pOp->p4.i;.  
2e970 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3c  if( pOp->opcode<
2e980 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20 20 20 20  OP_IdxLT ){.    
2e990 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
2e9a0 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c  ode==OP_IdxLE ||
2e9b0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
2e9c0 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20 72 2e  _IdxGT );.    r.
2e9d0 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b  default_rc = -1;
2e9e0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
2e9f0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
2ea00 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70  e==OP_IdxGE || p
2ea10 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
2ea20 64 78 4c 54 20 29 3b 0a 20 20 20 20 72 2e 64 65  dxLT );.    r.de
2ea30 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20  fault_rc = 0;.  
2ea40 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d  }.  r.aMem = &aM
2ea50 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66  em[pOp->p3];.#if
2ea60 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
2ea70 0a 20 20 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a  .  {.    int i;.
2ea80 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72      for(i=0; i<r
2ea90 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 7b 0a 20  .nField; i++){. 
2eaa0 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
2eab0 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b  IsValid(&r.aMem[
2eac0 69 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47  i]) );.      REG
2ead0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
2eae0 3e 70 33 2b 69 2c 20 26 61 4d 65 6d 5b 70 4f 70  >p3+i, &aMem[pOp
2eaf0 2d 3e 70 33 2b 69 5d 29 3b 0a 20 20 20 20 7d 0a  ->p3+i]);.    }.
2eb00 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72 65 73    }.#endif.  res
2eb10 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65   = 0;  /* Not ne
2eb20 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64  eded.  Only used
2eb30 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61   to silence a wa
2eb40 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d  rning. */.  rc =
2eb50 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78 4b   sqlite3VdbeIdxK
2eb60 65 79 43 6f 6d 70 61 72 65 28 64 62 2c 20 70 43  eyCompare(db, pC
2eb70 2c 20 26 72 2c 20 26 72 65 73 29 3b 0a 20 20 61  , &r, &res);.  a
2eb80 73 73 65 72 74 28 20 28 4f 50 5f 49 64 78 4c 45  ssert( (OP_IdxLE
2eb90 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31  &1)==(OP_IdxLT&1
2eba0 29 20 26 26 20 28 4f 50 5f 49 64 78 47 45 26 31  ) && (OP_IdxGE&1
2ebb0 29 3d 3d 28 4f 50 5f 49 64 78 47 54 26 31 29 20  )==(OP_IdxGT&1) 
2ebc0 29 3b 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f  );.  if( (pOp->o
2ebd0 70 63 6f 64 65 26 31 29 3d 3d 28 4f 50 5f 49 64  pcode&1)==(OP_Id
2ebe0 78 4c 54 26 31 29 20 29 7b 0a 20 20 20 20 61 73  xLT&1) ){.    as
2ebf0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
2ec00 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70  e==OP_IdxLE || p
2ec10 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
2ec20 64 78 4c 54 20 29 3b 0a 20 20 20 20 72 65 73 20  dxLT );.    res 
2ec30 3d 20 2d 72 65 73 3b 0a 20 20 7d 65 6c 73 65 7b  = -res;.  }else{
2ec40 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
2ec50 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
2ec60 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  GE || pOp->opcod
2ec70 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20  e==OP_IdxGT );. 
2ec80 20 20 20 72 65 73 2b 2b 3b 0a 20 20 7d 0a 20 20     res++;.  }.  
2ec90 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2eca0 72 65 73 3e 30 2c 32 29 3b 0a 20 20 69 66 28 20  res>0,2);.  if( 
2ecb0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
2ecc0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2ecd0 69 66 28 20 72 65 73 3e 30 20 29 20 67 6f 74 6f  if( res>0 ) goto
2ece0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62   jump_to_p2;.  b
2ecf0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2ed00 64 65 3a 20 44 65 73 74 72 6f 79 20 50 31 20 50  de: Destroy P1 P
2ed10 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44  2 P3 * *.**.** D
2ed20 65 6c 65 74 65 20 61 6e 20 65 6e 74 69 72 65 20  elete an entire 
2ed30 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
2ed40 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f  r index whose ro
2ed50 6f 74 20 70 61 67 65 20 69 6e 20 74 68 65 20 64  ot page in the d
2ed60 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 20  atabase.** file 
2ed70 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e 0a  is given by P1..
2ed80 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20  **.** The table 
2ed90 62 65 69 6e 67 20 64 65 73 74 72 6f 79 65 64 20  being destroyed 
2eda0 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  is in the main d
2edb0 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
2edc0 50 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 33  P3==0.  If.** P3
2edd0 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61 62  ==1 then the tab
2ede0 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69  le to be clear i
2edf0 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61  s in the auxilia
2ee00 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
2ee10 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65 64  .** that is used
2ee20 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73   to store tables
2ee30 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43 52   create using CR
2ee40 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54  EATE TEMPORARY T
2ee50 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41  ABLE..**.** If A
2ee60 55 54 4f 56 41 43 55 55 4d 20 69 73 20 65 6e 61  UTOVACUUM is ena
2ee70 62 6c 65 64 20 74 68 65 6e 20 69 74 20 69 73 20  bled then it is 
2ee80 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e  possible that an
2ee90 6f 74 68 65 72 20 72 6f 6f 74 20 70 61 67 65 0a  other root page.
2eea0 2a 2a 20 6d 69 67 68 74 20 62 65 20 6d 6f 76 65  ** might be move
2eeb0 64 20 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c 79  d into the newly
2eec0 20 64 65 6c 65 74 65 64 20 72 6f 6f 74 20 70 61   deleted root pa
2eed0 67 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b  ge in order to k
2eee0 65 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20  eep all.** root 
2eef0 70 61 67 65 73 20 63 6f 6e 74 69 67 75 6f 75 73  pages contiguous
2ef00 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   at the beginnin
2ef10 67 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  g of the databas
2ef20 65 2e 20 20 54 68 65 20 66 6f 72 6d 65 72 0a 2a  e.  The former.*
2ef30 2a 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72  * value of the r
2ef40 6f 6f 74 20 70 61 67 65 20 74 68 61 74 20 6d 6f  oot page that mo
2ef50 76 65 64 20 2d 20 69 74 73 20 76 61 6c 75 65 20  ved - its value 
2ef60 62 65 66 6f 72 65 20 74 68 65 20 6d 6f 76 65 20  before the move 
2ef70 6f 63 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69 73  occurred -.** is
2ef80 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
2ef90 74 65 72 20 50 32 2e 20 49 66 20 6e 6f 20 70 61  ter P2. If no pa
2efa0 67 65 20 6d 6f 76 65 6d 65 6e 74 20 77 61 73 20  ge movement was 
2efb0 72 65 71 75 69 72 65 64 20 28 62 65 63 61 75 73  required (becaus
2efc0 65 20 74 68 65 0a 2a 2a 20 74 61 62 6c 65 20 62  e the.** table b
2efd0 65 69 6e 67 20 64 72 6f 70 70 65 64 20 77 61 73  eing dropped was
2efe0 20 61 6c 72 65 61 64 79 20 74 68 65 20 6c 61 73   already the las
2eff0 74 20 6f 6e 65 20 69 6e 20 74 68 65 20 64 61 74  t one in the dat
2f000 61 62 61 73 65 29 20 74 68 65 6e 20 61 20 0a 2a  abase) then a .*
2f010 2a 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64  * zero is stored
2f020 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
2f030 20 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20    If AUTOVACUUM 
2f040 69 73 20 64 69 73 61 62 6c 65 64 20 74 68 65 6e  is disabled then
2f050 20 61 20 7a 65 72 6f 20 0a 2a 2a 20 69 73 20 73   a zero .** is s
2f060 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
2f070 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P2..**.** This
2f080 20 6f 70 63 6f 64 65 20 74 68 72 6f 77 73 20 61   opcode throws a
2f090 6e 20 65 72 72 6f 72 20 69 66 20 74 68 65 72 65  n error if there
2f0a0 20 61 72 65 20 61 6e 79 20 61 63 74 69 76 65 20   are any active 
2f0b0 72 65 61 64 65 72 20 56 4d 73 20 77 68 65 6e 0a  reader VMs when.
2f0c0 2a 2a 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64  ** it is invoked
2f0d0 2e 20 54 68 69 73 20 69 73 20 64 6f 6e 65 20 74  . This is done t
2f0e0 6f 20 61 76 6f 69 64 20 74 68 65 20 64 69 66 66  o avoid the diff
2f0f0 69 63 75 6c 74 79 20 61 73 73 6f 63 69 61 74 65  iculty associate
2f100 64 20 77 69 74 68 20 0a 2a 2a 20 75 70 64 61 74  d with .** updat
2f110 69 6e 67 20 65 78 69 73 74 69 6e 67 20 63 75 72  ing existing cur
2f120 73 6f 72 73 20 77 68 65 6e 20 61 20 72 6f 6f 74  sors when a root
2f130 20 70 61 67 65 20 69 73 20 6d 6f 76 65 64 20 69   page is moved i
2f140 6e 20 61 6e 20 41 55 54 4f 56 41 43 55 55 4d 20  n an AUTOVACUUM 
2f150 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 54 68  .** database. Th
2f160 69 73 20 65 72 72 6f 72 20 69 73 20 74 68 72 6f  is error is thro
2f170 77 6e 20 65 76 65 6e 20 69 66 20 74 68 65 20 64  wn even if the d
2f180 61 74 61 62 61 73 65 20 69 73 20 6e 6f 74 20 61  atabase is not a
2f190 6e 20 41 55 54 4f 56 41 43 55 55 4d 20 0a 2a 2a  n AUTOVACUUM .**
2f1a0 20 64 62 20 69 6e 20 6f 72 64 65 72 20 74 6f 20   db in order to 
2f1b0 61 76 6f 69 64 20 69 6e 74 72 6f 64 75 63 69 6e  avoid introducin
2f1c0 67 20 61 6e 20 69 6e 63 6f 6d 70 61 74 69 62 69  g an incompatibi
2f1d0 6c 69 74 79 20 62 65 74 77 65 65 6e 20 61 75 74  lity between aut
2f1e0 6f 76 61 63 75 75 6d 20 0a 2a 2a 20 61 6e 64 20  ovacuum .** and 
2f1f0 6e 6f 6e 2d 61 75 74 6f 76 61 63 75 75 6d 20 6d  non-autovacuum m
2f200 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  odes..**.** See 
2f210 61 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63  also: Clear.*/.c
2f220 61 73 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a 20  ase OP_Destroy: 
2f230 7b 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f  {     /* out2 */
2f240 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64 3b 0a 20  .  int iMoved;. 
2f250 20 69 6e 74 20 69 44 62 3b 0a 0a 20 20 73 71 6c   int iDb;..  sql
2f260 69 74 65 33 56 64 62 65 49 6e 63 72 57 72 69 74  ite3VdbeIncrWrit
2f270 65 43 6f 75 6e 74 65 72 28 70 2c 20 30 29 3b 0a  eCounter(p, 0);.
2f280 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
2f290 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73  dOnly==0 );.  as
2f2a0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 31 20  sert( pOp->p1>1 
2f2b0 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  );.  pOut = out2
2f2c0 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
2f2d0 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  p);.  pOut->flag
2f2e0 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
2f2f0 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 52 65 61  if( db->nVdbeRea
2f300 64 20 3e 20 64 62 2d 3e 6e 56 44 65 73 74 72 6f  d > db->nVDestro
2f310 79 2b 31 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  y+1 ){.    rc = 
2f320 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20  SQLITE_LOCKED;. 
2f330 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f     p->errorActio
2f340 6e 20 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a 20 20  n = OE_Abort;.  
2f350 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
2f360 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 65 6c  _to_error;.  }el
2f370 73 65 7b 0a 20 20 20 20 69 44 62 20 3d 20 70 4f  se{.    iDb = pO
2f380 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73 73 65 72  p->p3;.    asser
2f390 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
2f3a0 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29  >btreeMask, iDb)
2f3b0 20 29 3b 0a 20 20 20 20 69 4d 6f 76 65 64 20 3d   );.    iMoved =
2f3c0 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64   0;  /* Not need
2f3d0 65 64 2e 20 20 4f 6e 6c 79 20 74 6f 20 73 69 6c  ed.  Only to sil
2f3e0 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20  ence a warning. 
2f3f0 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  */.    rc = sqli
2f400 74 65 33 42 74 72 65 65 44 72 6f 70 54 61 62 6c  te3BtreeDropTabl
2f410 65 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  e(db->aDb[iDb].p
2f420 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d  Bt, pOp->p1, &iM
2f430 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f 75 74 2d  oved);.    pOut-
2f440 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
2f450 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  ;.    pOut->u.i 
2f460 3d 20 69 4d 6f 76 65 64 3b 0a 20 20 20 20 69 66  = iMoved;.    if
2f470 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
2f480 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2f490 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2f4a0 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20  MIT_AUTOVACUUM. 
2f4b0 20 20 20 69 66 28 20 69 4d 6f 76 65 64 21 3d 30     if( iMoved!=0
2f4c0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
2f4d0 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 64  3RootPageMoved(d
2f4e0 62 2c 20 69 44 62 2c 20 69 4d 6f 76 65 64 2c 20  b, iDb, iMoved, 
2f4f0 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 20 20  pOp->p1);.      
2f500 2f 2a 20 41 6c 6c 20 4f 50 5f 44 65 73 74 72 6f  /* All OP_Destro
2f510 79 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 63 63  y operations occ
2f520 75 72 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 62  ur on the same b
2f530 74 72 65 65 20 2a 2f 0a 20 20 20 20 20 20 61 73  tree */.      as
2f540 73 65 72 74 28 20 72 65 73 65 74 53 63 68 65 6d  sert( resetSchem
2f550 61 4f 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c 20 72  aOnFault==0 || r
2f560 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c  esetSchemaOnFaul
2f570 74 3d 3d 69 44 62 2b 31 20 29 3b 0a 20 20 20 20  t==iDb+1 );.    
2f580 20 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46    resetSchemaOnF
2f590 61 75 6c 74 20 3d 20 69 44 62 2b 31 3b 0a 20 20  ault = iDb+1;.  
2f5a0 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20    }.#endif.  }. 
2f5b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2f5c0 63 6f 64 65 3a 20 43 6c 65 61 72 20 50 31 20 50  code: Clear P1 P
2f5d0 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74  2 P3.**.** Delet
2f5e0 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 6f  e all contents o
2f5f0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  f the database t
2f600 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68  able or index wh
2f610 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a  ose root page.**
2f620 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
2f630 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62   file is given b
2f640 79 20 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c 69  y P1.  But, unli
2f650 6b 65 20 44 65 73 74 72 6f 79 2c 20 64 6f 20 6e  ke Destroy, do n
2f660 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68 65  ot.** remove the
2f670 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
2f680 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
2f690 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  e file..**.** Th
2f6a0 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c  e table being cl
2f6b0 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 6d 61  ear is in the ma
2f6c0 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
2f6d0 20 69 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a   if P2==0.  If.*
2f6e0 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20 74 68 65  * P2==1 then the
2f6f0 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65   table to be cle
2f700 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75 78  ar is in the aux
2f710 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20  iliary database 
2f720 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20  file.** that is 
2f730 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61  used to store ta
2f740 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69 6e  bles create usin
2f750 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41  g CREATE TEMPORA
2f760 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20  RY TABLE..**.** 
2f770 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20  If the P3 value 
2f780 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
2f790 6e 20 74 68 65 20 74 61 62 6c 65 20 72 65 66 65  n the table refe
2f7a0 72 72 65 64 20 74 6f 20 6d 75 73 74 20 62 65 20  rred to must be 
2f7b0 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61 62  an.** intkey tab
2f7c0 6c 65 20 28 61 6e 20 53 51 4c 20 74 61 62 6c 65  le (an SQL table
2f7d0 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29 2e  , not an index).
2f7e0 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68   In this case th
2f7f0 65 20 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a 2a  e row change .**
2f800 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d   count is increm
2f810 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d  ented by the num
2f820 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
2f830 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63  he table being c
2f840 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20 50  leared. .** If P
2f850 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  3 is greater tha
2f860 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  n zero, then the
2f870 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69 6e   value stored in
2f880 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 0a   register P3 is.
2f890 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65 6e  ** also incremen
2f8a0 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65  ted by the numbe
2f8b0 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
2f8c0 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65   table being cle
2f8d0 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  ared..**.** See 
2f8e0 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a 2f  also: Destroy.*/
2f8f0 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a 20  .case OP_Clear: 
2f900 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b  {.  int nChange;
2f910 0a 20 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  . .  sqlite3Vdbe
2f920 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72  IncrWriteCounter
2f930 28 70 2c 20 30 29 3b 0a 20 20 6e 43 68 61 6e 67  (p, 0);.  nChang
2f940 65 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  e = 0;.  assert(
2f950 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
2f960 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
2f970 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
2f980 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 32 29 20 29  Mask, pOp->p2) )
2f990 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2f9a0 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65 28  BtreeClearTable(
2f9b0 0a 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 70  .      db->aDb[p
2f9c0 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70  Op->p2].pBt, pOp
2f9d0 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e 70 33 20 3f  ->p1, (pOp->p3 ?
2f9e0 20 26 6e 43 68 61 6e 67 65 20 3a 20 30 29 0a 20   &nChange : 0). 
2f9f0 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   );.  if( pOp->p
2fa00 33 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61  3 ){.    p->nCha
2fa10 6e 67 65 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a  nge += nChange;.
2fa20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e      if( pOp->p3>
2fa30 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
2fa40 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61  t( memIsValid(&a
2fa50 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b  Mem[pOp->p3]) );
2fa60 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  .      memAboutT
2fa70 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d  oChange(p, &aMem
2fa80 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20  [pOp->p3]);.    
2fa90 20 20 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e    aMem[pOp->p3].
2faa0 75 2e 69 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a  u.i += nChange;.
2fab0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
2fac0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
2fad0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2fae0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2faf0 6f 64 65 3a 20 52 65 73 65 74 53 6f 72 74 65 72  ode: ResetSorter
2fb00 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
2fb10 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e  * Delete all con
2fb20 74 65 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 65  tents from the e
2fb30 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 6f  phemeral table o
2fb40 72 20 73 6f 72 74 65 72 0a 2a 2a 20 74 68 61 74  r sorter.** that
2fb50 20 69 73 20 6f 70 65 6e 20 6f 6e 20 63 75 72 73   is open on curs
2fb60 6f 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  or P1..**.** Thi
2fb70 73 20 6f 70 63 6f 64 65 20 6f 6e 6c 79 20 77 6f  s opcode only wo
2fb80 72 6b 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20  rks for cursors 
2fb90 75 73 65 64 20 66 6f 72 20 73 6f 72 74 69 6e 67  used for sorting
2fba0 20 61 6e 64 0a 2a 2a 20 6f 70 65 6e 65 64 20 77   and.** opened w
2fbb0 69 74 68 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d  ith OP_OpenEphem
2fbc0 65 72 61 6c 20 6f 72 20 4f 50 5f 53 6f 72 74 65  eral or OP_Sorte
2fbd0 72 4f 70 65 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  rOpen..*/.case O
2fbe0 50 5f 52 65 73 65 74 53 6f 72 74 65 72 3a 20 7b  P_ResetSorter: {
2fbf0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
2fc00 43 3b 0a 20 0a 20 20 61 73 73 65 72 74 28 20 70  C;. .  assert( p
2fc10 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
2fc20 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
2fc30 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
2fc40 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
2fc50 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
2fc60 20 20 69 66 28 20 69 73 53 6f 72 74 65 72 28 70    if( isSorter(p
2fc70 43 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  C) ){.    sqlite
2fc80 33 56 64 62 65 53 6f 72 74 65 72 52 65 73 65 74  3VdbeSorterReset
2fc90 28 64 62 2c 20 70 43 2d 3e 75 63 2e 70 53 6f 72  (db, pC->uc.pSor
2fca0 74 65 72 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ter);.  }else{. 
2fcb0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65     assert( pC->e
2fcc0 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
2fcd0 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20 61 73  _BTREE );.    as
2fce0 73 65 72 74 28 20 70 43 2d 3e 69 73 45 70 68 65  sert( pC->isEphe
2fcf0 6d 65 72 61 6c 20 29 3b 0a 20 20 20 20 72 63 20  meral );.    rc 
2fd00 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c  = sqlite3BtreeCl
2fd10 65 61 72 54 61 62 6c 65 4f 66 43 75 72 73 6f 72  earTableOfCursor
2fd20 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  (pC->uc.pCursor)
2fd30 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67  ;.    if( rc ) g
2fd40 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2fd50 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72  _error;.  }.  br
2fd60 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2fd70 65 3a 20 43 72 65 61 74 65 42 74 72 65 65 20 50  e: CreateBtree P
2fd80 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
2fd90 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
2fda0 6f 6f 74 20 69 44 62 3d 50 31 20 66 6c 61 67 73  oot iDb=P1 flags
2fdb0 3d 50 33 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61  =P3.**.** Alloca
2fdc0 74 65 20 61 20 6e 65 77 20 62 2d 74 72 65 65 20  te a new b-tree 
2fdd0 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
2fde0 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d  base file if P1=
2fdf0 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20  =0 or in the.** 
2fe00 54 45 4d 50 20 64 61 74 61 62 61 73 65 20 66 69  TEMP database fi
2fe10 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69  le if P1==1 or i
2fe20 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  n an attached da
2fe30 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e  tabase if.** P1>
2fe40 31 2e 20 20 54 68 65 20 50 33 20 61 72 67 75 6d  1.  The P3 argum
2fe50 65 6e 74 20 6d 75 73 74 20 62 65 20 31 20 28 42  ent must be 1 (B
2fe60 54 52 45 45 5f 49 4e 54 4b 45 59 29 20 66 6f 72  TREE_INTKEY) for
2fe70 20 61 20 72 6f 77 69 64 20 74 61 62 6c 65 0a 2a   a rowid table.*
2fe80 2a 20 69 74 20 6d 75 73 74 20 62 65 20 32 20 28  * it must be 2 (
2fe90 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 29 20 66  BTREE_BLOBKEY) f
2fea0 6f 72 20 61 6e 20 69 6e 64 65 78 20 6f 72 20 57  or an index or W
2feb0 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62  ITHOUT ROWID tab
2fec0 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20  le..** The root 
2fed0 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74  page number of t
2fee0 68 65 20 6e 65 77 20 62 2d 74 72 65 65 20 69 73  he new b-tree is
2fef0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
2ff00 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
2ff10 4f 50 5f 43 72 65 61 74 65 42 74 72 65 65 3a 20  OP_CreateBtree: 
2ff20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75  {          /* ou
2ff30 74 32 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f  t2 */.  int pgno
2ff40 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20  ;.  Db *pDb;..  
2ff50 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57  sqlite3VdbeIncrW
2ff60 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 30  riteCounter(p, 0
2ff70 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  );.  pOut = out2
2ff80 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
2ff90 70 29 3b 0a 20 20 70 67 6e 6f 20 3d 20 30 3b 0a  p);.  pgno = 0;.
2ffa0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2ffb0 33 3d 3d 42 54 52 45 45 5f 49 4e 54 4b 45 59 20  3==BTREE_INTKEY 
2ffc0 7c 7c 20 70 4f 70 2d 3e 70 33 3d 3d 42 54 52 45  || pOp->p3==BTRE
2ffd0 45 5f 42 4c 4f 42 4b 45 59 20 29 3b 0a 20 20 61  E_BLOBKEY );.  a
2ffe0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2fff0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
30000 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
30010 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
30020 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e  btreeMask, pOp->
30030 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  p1) );.  assert(
30040 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
30050 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e  );.  pDb = &db->
30060 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  aDb[pOp->p1];.  
30070 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74  assert( pDb->pBt
30080 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  !=0 );.  rc = sq
30090 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65  lite3BtreeCreate
300a0 54 61 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20  Table(pDb->pBt, 
300b0 26 70 67 6e 6f 2c 20 70 4f 70 2d 3e 70 33 29 3b  &pgno, pOp->p3);
300c0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
300d0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
300e0 72 6f 72 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  ror;.  pOut->u.i
300f0 20 3d 20 70 67 6e 6f 3b 0a 20 20 62 72 65 61 6b   = pgno;.  break
30100 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
30110 53 71 6c 45 78 65 63 20 2a 20 2a 20 2a 20 50 34  SqlExec * * * P4
30120 20 2a 0a 2a 2a 0a 2a 2a 20 52 75 6e 20 74 68 65   *.**.** Run the
30130 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 6f   SQL statement o
30140 72 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65  r statements spe
30150 63 69 66 69 65 64 20 69 6e 20 74 68 65 20 50 34  cified in the P4
30160 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 63 61 73 65   string..*/.case
30170 20 4f 50 5f 53 71 6c 45 78 65 63 3a 20 7b 0a 20   OP_SqlExec: {. 
30180 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72   sqlite3VdbeIncr
30190 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20  WriteCounter(p, 
301a0 30 29 3b 0a 20 20 64 62 2d 3e 6e 53 71 6c 45 78  0);.  db->nSqlEx
301b0 65 63 2b 2b 3b 0a 20 20 72 63 20 3d 20 73 71 6c  ec++;.  rc = sql
301c0 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20 70 4f  ite3_exec(db, pO
301d0 70 2d 3e 70 34 2e 7a 2c 20 30 2c 20 30 2c 20 30  p->p4.z, 0, 0, 0
301e0 29 3b 0a 20 20 64 62 2d 3e 6e 53 71 6c 45 78 65  );.  db->nSqlExe
301f0 63 2d 2d 3b 0a 20 20 69 66 28 20 72 63 20 29 20  c--;.  if( rc ) 
30200 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
30210 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
30220 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
30230 50 61 72 73 65 53 63 68 65 6d 61 20 50 31 20 2a  ParseSchema P1 *
30240 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
30250 61 64 20 61 6e 64 20 70 61 72 73 65 20 61 6c 6c  ad and parse all
30260 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68   entries from th
30270 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20  e SQLITE_MASTER 
30280 74 61 62 6c 65 20 6f 66 20 64 61 74 61 62 61 73  table of databas
30290 65 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74  e P1.** that mat
302a0 63 68 20 74 68 65 20 57 48 45 52 45 20 63 6c 61  ch the WHERE cla
302b0 75 73 65 20 50 34 2e 20 20 49 66 20 50 34 20 69  use P4.  If P4 i
302c0 73 20 61 20 4e 55 4c 4c 20 70 6f 69 6e 74 65 72  s a NULL pointer
302d0 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 65 6e  , then the.** en
302e0 74 69 72 65 20 73 63 68 65 6d 61 20 66 6f 72 20  tire schema for 
302f0 50 31 20 69 73 20 72 65 70 61 72 73 65 64 2e 0a  P1 is reparsed..
30300 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
30310 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 70 61  e invokes the pa
30320 72 73 65 72 20 74 6f 20 63 72 65 61 74 65 20 61  rser to create a
30330 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63   new virtual mac
30340 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 75  hine,.** then ru
30350 6e 73 20 74 68 65 20 6e 65 77 20 76 69 72 74 75  ns the new virtu
30360 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 74 20  al machine.  It 
30370 69 73 20 74 68 75 73 20 61 20 72 65 2d 65 6e 74  is thus a re-ent
30380 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a  rant opcode..*/.
30390 63 61 73 65 20 4f 50 5f 50 61 72 73 65 53 63 68  case OP_ParseSch
303a0 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20 69 44 62  ema: {.  int iDb
303b0 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
303c0 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68 61 72 20  zMaster;.  char 
303d0 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74 44 61 74  *zSql;.  InitDat
303e0 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20 2f  a initData;..  /
303f0 2a 20 41 6e 79 20 70 72 65 70 61 72 65 64 20 73  * Any prepared s
30400 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 69 6e  tatement that in
30410 76 6f 6b 65 73 20 74 68 69 73 20 6f 70 63 6f 64  vokes this opcod
30420 65 20 77 69 6c 6c 20 68 6f 6c 64 20 6d 75 74 65  e will hold mute
30430 78 65 73 0a 20 20 2a 2a 20 6f 6e 20 65 76 65 72  xes.  ** on ever
30440 79 20 62 74 72 65 65 2e 20 20 54 68 69 73 20 69  y btree.  This i
30450 73 20 61 20 70 72 65 72 65 71 75 69 73 69 74 65  s a prerequisite
30460 20 66 6f 72 20 69 6e 76 6f 6b 69 6e 67 20 0a 20   for invoking . 
30470 20 2a 2a 20 73 71 6c 69 74 65 33 49 6e 69 74 43   ** sqlite3InitC
30480 61 6c 6c 62 61 63 6b 28 29 2e 0a 20 20 2a 2f 0a  allback()..  */.
30490 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
304a0 42 55 47 0a 20 20 66 6f 72 28 69 44 62 3d 30 3b  BUG.  for(iDb=0;
304b0 20 69 44 62 3c 64 62 2d 3e 6e 44 62 3b 20 69 44   iDb<db->nDb; iD
304c0 62 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  b++){.    assert
304d0 28 20 69 44 62 3d 3d 31 20 7c 7c 20 73 71 6c 69  ( iDb==1 || sqli
304e0 74 65 33 42 74 72 65 65 48 6f 6c 64 73 4d 75 74  te3BtreeHoldsMut
304f0 65 78 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  ex(db->aDb[iDb].
30500 70 42 74 29 20 29 3b 0a 20 20 7d 0a 23 65 6e 64  pBt) );.  }.#end
30510 69 66 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d  if..  iDb = pOp-
30520 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69  >p1;.  assert( i
30530 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d  Db>=0 && iDb<db-
30540 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
30550 28 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28  ( DbHasProperty(
30560 64 62 2c 20 69 44 62 2c 20 44 42 5f 53 63 68 65  db, iDb, DB_Sche
30570 6d 61 4c 6f 61 64 65 64 29 20 29 3b 0a 0a 23 69  maLoaded) );..#i
30580 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
30590 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20 69  T_ALTERTABLE.  i
305a0 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20  f( pOp->p4.z==0 
305b0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 63  ){.    sqlite3Sc
305c0 68 65 6d 61 43 6c 65 61 72 28 64 62 2d 3e 61 44  hemaClear(db->aD
305d0 62 5b 69 44 62 5d 2e 70 53 63 68 65 6d 61 29 3b  b[iDb].pSchema);
305e0 0a 20 20 20 20 64 62 2d 3e 6d 44 62 46 6c 61 67  .    db->mDbFlag
305f0 73 20 26 3d 20 7e 44 42 46 4c 41 47 5f 53 63 68  s &= ~DBFLAG_Sch
30600 65 6d 61 4b 6e 6f 77 6e 4f 6b 3b 0a 20 20 20 20  emaKnownOk;.    
30610 72 63 20 3d 20 73 71 6c 69 74 65 33 49 6e 69 74  rc = sqlite3Init
30620 4f 6e 65 28 64 62 2c 20 69 44 62 2c 20 26 70 2d  One(db, iDb, &p-
30630 3e 7a 45 72 72 4d 73 67 2c 20 49 4e 49 54 46 4c  >zErrMsg, INITFL
30640 41 47 5f 41 6c 74 65 72 54 61 62 6c 65 29 3b 0a  AG_AlterTable);.
30650 20 20 20 20 64 62 2d 3e 6d 44 62 46 6c 61 67 73      db->mDbFlags
30660 20 7c 3d 20 44 42 46 4c 41 47 5f 53 63 68 65 6d   |= DBFLAG_Schem
30670 61 43 68 61 6e 67 65 3b 0a 20 20 20 20 70 2d 3e  aChange;.    p->
30680 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d  expired = 0;.  }
30690 65 6c 73 65 0a 23 65 6e 64 69 66 0a 20 20 7b 0a  else.#endif.  {.
306a0 20 20 20 20 7a 4d 61 73 74 65 72 20 3d 20 4d 41      zMaster = MA
306b0 53 54 45 52 5f 4e 41 4d 45 3b 0a 20 20 20 20 69  STER_NAME;.    i
306c0 6e 69 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b  nitData.db = db;
306d0 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 69 44  .    initData.iD
306e0 62 20 3d 20 69 44 62 3b 0a 20 20 20 20 69 6e 69  b = iDb;.    ini
306f0 74 44 61 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d  tData.pzErrMsg =
30700 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20   &p->zErrMsg;.  
30710 20 20 69 6e 69 74 44 61 74 61 2e 6d 49 6e 69 74    initData.mInit
30720 46 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 7a  Flags = 0;.    z
30730 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50 72  Sql = sqlite3MPr
30740 69 6e 74 66 28 64 62 2c 0a 20 20 20 20 20 20 20  intf(db,.       
30750 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 72 6f  "SELECT name, ro
30760 6f 74 70 61 67 65 2c 20 73 71 6c 20 46 52 4f 4d  otpage, sql FROM
30770 20 27 25 71 27 2e 25 73 20 57 48 45 52 45 20 25   '%q'.%s WHERE %
30780 73 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64  s ORDER BY rowid
30790 22 2c 0a 20 20 20 20 20 20 20 64 62 2d 3e 61 44  ",.       db->aD
307a0 62 5b 69 44 62 5d 2e 7a 44 62 53 4e 61 6d 65 2c  b[iDb].zDbSName,
307b0 20 7a 4d 61 73 74 65 72 2c 20 70 4f 70 2d 3e 70   zMaster, pOp->p
307c0 34 2e 7a 29 3b 0a 20 20 20 20 69 66 28 20 7a 53  4.z);.    if( zS
307d0 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72  ql==0 ){.      r
307e0 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  c = SQLITE_NOMEM
307f0 5f 42 4b 50 54 3b 0a 20 20 20 20 7d 65 6c 73 65  _BKPT;.    }else
30800 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
30810 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30  db->init.busy==0
30820 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e   );.      db->in
30830 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20 20  it.busy = 1;.   
30840 20 20 20 69 6e 69 74 44 61 74 61 2e 72 63 20 3d     initData.rc =
30850 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20   SQLITE_OK;.    
30860 20 20 69 6e 69 74 44 61 74 61 2e 6e 49 6e 69 74    initData.nInit
30870 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 61  Row = 0;.      a
30880 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c  ssert( !db->mall
30890 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20  ocFailed );.    
308a0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65    rc = sqlite3_e
308b0 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20 73 71  xec(db, zSql, sq
308c0 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
308d0 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c 20 30 29  k, &initData, 0)
308e0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  ;.      if( rc==
308f0 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72 63 20 3d  SQLITE_OK ) rc =
30900 20 69 6e 69 74 44 61 74 61 2e 72 63 3b 0a 20 20   initData.rc;.  
30910 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
30920 54 45 5f 4f 4b 20 26 26 20 69 6e 69 74 44 61 74  TE_OK && initDat
30930 61 2e 6e 49 6e 69 74 52 6f 77 3d 3d 30 20 29 7b  a.nInitRow==0 ){
30940 0a 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  .        /* The 
30950 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61 20 6f  OP_ParseSchema o
30960 70 63 6f 64 65 20 77 69 74 68 20 61 20 6e 6f 6e  pcode with a non
30970 2d 4e 55 4c 4c 20 50 34 20 61 72 67 75 6d 65 6e  -NULL P4 argumen
30980 74 20 73 68 6f 75 6c 64 20 70 61 72 73 65 0a 20  t should parse. 
30990 20 20 20 20 20 20 20 2a 2a 20 61 74 20 6c 65 61         ** at lea
309a0 73 74 20 6f 6e 65 20 53 51 4c 20 73 74 61 74 65  st one SQL state
309b0 6d 65 6e 74 2e 20 41 6e 79 20 6c 65 73 73 20 74  ment. Any less t
309c0 68 61 6e 20 74 68 61 74 20 69 6e 64 69 63 61 74  han that indicat
309d0 65 73 20 74 68 61 74 0a 20 20 20 20 20 20 20 20  es that.        
309e0 2a 2a 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61  ** the sqlite_ma
309f0 73 74 65 72 20 74 61 62 6c 65 20 69 73 20 63 6f  ster table is co
30a00 72 72 75 70 74 2e 20 2a 2f 0a 20 20 20 20 20 20  rrupt. */.      
30a10 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f    rc = SQLITE_CO
30a20 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20  RRUPT_BKPT;.    
30a30 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
30a40 33 44 62 46 72 65 65 4e 4e 28 64 62 2c 20 7a 53  3DbFreeNN(db, zS
30a50 71 6c 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69  ql);.      db->i
30a60 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20  nit.busy = 0;.  
30a70 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63    }.  }.  if( rc
30a80 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52   ){.    sqlite3R
30a90 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66  esetAllSchemasOf
30aa0 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a  Connection(db);.
30ab0 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
30ac0 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20  TE_NOMEM ){.    
30ad0 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
30ae0 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 61 62     }.    goto ab
30af0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
30b00 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20  ;.  }.  break;  
30b10 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .}..#if !defined
30b20 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41  (SQLITE_OMIT_ANA
30b30 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a  LYZE)./* Opcode:
30b40 20 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20 50 31   LoadAnalysis P1
30b50 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52   * * * *.**.** R
30b60 65 61 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73  ead the sqlite_s
30b70 74 61 74 31 20 74 61 62 6c 65 20 66 6f 72 20 64  tat1 table for d
30b80 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20 6c  atabase P1 and l
30b90 6f 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a  oad the content.
30ba0 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65  ** of that table
30bb0 20 69 6e 74 6f 20 74 68 65 20 69 6e 74 65 72 6e   into the intern
30bc0 61 6c 20 69 6e 64 65 78 20 68 61 73 68 20 74 61  al index hash ta
30bd0 62 6c 65 2e 20 20 54 68 69 73 20 77 69 6c 6c 20  ble.  This will 
30be0 63 61 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61  cause.** the ana
30bf0 6c 79 73 69 73 20 74 6f 20 62 65 20 75 73 65 64  lysis to be used
30c00 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20   when preparing 
30c10 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20 71  all subsequent q
30c20 75 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20  ueries..*/.case 
30c30 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a  OP_LoadAnalysis:
30c40 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
30c50 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
30c60 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
30c70 72 63 20 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c  rc = sqlite3Anal
30c80 79 73 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70  ysisLoad(db, pOp
30c90 2d 3e 70 31 29 3b 0a 20 20 69 66 28 20 72 63 20  ->p1);.  if( rc 
30ca0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
30cb0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
30cc0 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69 66 20 2f  ak;  .}.#endif /
30cd0 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  * !defined(SQLIT
30ce0 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 20  E_OMIT_ANALYZE) 
30cf0 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  */../* Opcode: D
30d00 72 6f 70 54 61 62 6c 65 20 50 31 20 2a 20 2a 20  ropTable P1 * * 
30d10 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76  P4 *.**.** Remov
30d20 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28  e the internal (
30d30 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20  in-memory) data 
30d40 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20  structures that 
30d50 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20  describe.** the 
30d60 74 61 62 6c 65 20 6e 61 6d 65 64 20 50 34 20 69  table named P4 i
30d70 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
30d80 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61  This is called a
30d90 66 74 65 72 20 61 20 74 61 62 6c 65 0a 2a 2a 20  fter a table.** 
30da0 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20  is dropped from 
30db0 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20  disk (using the 
30dc0 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 20  Destroy opcode) 
30dd0 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
30de0 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e 61   .** the interna
30df0 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  l representation
30e00 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d   of the.** schem
30e10 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74  a consistent wit
30e20 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73  h what is on dis
30e30 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72  k..*/.case OP_Dr
30e40 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c  opTable: {.  sql
30e50 69 74 65 33 56 64 62 65 49 6e 63 72 57 72 69 74  ite3VdbeIncrWrit
30e60 65 43 6f 75 6e 74 65 72 28 70 2c 20 30 29 3b 0a  eCounter(p, 0);.
30e70 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41    sqlite3UnlinkA
30e80 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28 64 62  ndDeleteTable(db
30e90 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
30ea0 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  p4.z);.  break;.
30eb0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72  }../* Opcode: Dr
30ec0 6f 70 49 6e 64 65 78 20 50 31 20 2a 20 2a 20 50  opIndex P1 * * P
30ed0 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65  4 *.**.** Remove
30ee0 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69   the internal (i
30ef0 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73  n-memory) data s
30f00 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64  tructures that d
30f10 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 69  escribe.** the i
30f20 6e 64 65 78 20 6e 61 6d 65 64 20 50 34 20 69 6e  ndex named P4 in
30f30 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54   database P1.  T
30f40 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66  his is called af
30f50 74 65 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20  ter an index.** 
30f60 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20  is dropped from 
30f70 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20  disk (using the 
30f80 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 0a  Destroy opcode).
30f90 2a 2a 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b  ** in order to k
30fa0 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  eep the internal
30fb0 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
30fc0 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  of the.** schema
30fd0 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68   consistent with
30fe0 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b   what is on disk
30ff0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f  ..*/.case OP_Dro
31000 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c 69  pIndex: {.  sqli
31010 74 65 33 56 64 62 65 49 6e 63 72 57 72 69 74 65  te3VdbeIncrWrite
31020 43 6f 75 6e 74 65 72 28 70 2c 20 30 29 3b 0a 20  Counter(p, 0);. 
31030 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
31040 64 44 65 6c 65 74 65 49 6e 64 65 78 28 64 62 2c  dDeleteIndex(db,
31050 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
31060 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.z);.  break;.}
31070 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f  ../* Opcode: Dro
31080 70 54 72 69 67 67 65 72 20 50 31 20 2a 20 2a 20  pTrigger P1 * * 
31090 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76  P4 *.**.** Remov
310a0 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28  e the internal (
310b0 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20  in-memory) data 
310c0 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20  structures that 
310d0 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20  describe.** the 
310e0 74 72 69 67 67 65 72 20 6e 61 6d 65 64 20 50 34  trigger named P4
310f0 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
31100 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64    This is called
31110 20 61 66 74 65 72 20 61 20 74 72 69 67 67 65 72   after a trigger
31120 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66  .** is dropped f
31130 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20  rom disk (using 
31140 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f  the Destroy opco
31150 64 65 29 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  de) in order to 
31160 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74  keep .** the int
31170 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
31180 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
31190 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74  chema consistent
311a0 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e   with what is on
311b0 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f   disk..*/.case O
311c0 50 5f 44 72 6f 70 54 72 69 67 67 65 72 3a 20 7b  P_DropTrigger: {
311d0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e  .  sqlite3VdbeIn
311e0 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70  crWriteCounter(p
311f0 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 55  , 0);.  sqlite3U
31200 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
31210 69 67 67 65 72 28 64 62 2c 20 70 4f 70 2d 3e 70  igger(db, pOp->p
31220 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  1, pOp->p4.z);. 
31230 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e   break;.}...#ifn
31240 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
31250 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a  INTEGRITY_CHECK.
31260 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67  /* Opcode: Integ
31270 72 69 74 79 43 6b 20 50 31 20 50 32 20 50 33 20  rityCk P1 P2 P3 
31280 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61  P4 P5.**.** Do a
31290 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66 20 74 68  n analysis of th
312a0 65 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e  e currently open
312b0 20 64 61 74 61 62 61 73 65 2e 20 20 53 74 6f 72   database.  Stor
312c0 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72  e in.** register
312d0 20 50 31 20 74 68 65 20 74 65 78 74 20 6f 66 20   P1 the text of 
312e0 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an error message
312f0 20 64 65 73 63 72 69 62 69 6e 67 20 61 6e 79 20   describing any 
31300 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20  problems..** If 
31310 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61 72 65 20  no problems are 
31320 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20 61 20 4e  found, store a N
31330 55 4c 4c 20 69 6e 20 72 65 67 69 73 74 65 72 20  ULL in register 
31340 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65  P1..**.** The re
31350 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69  gister P3 contai
31360 6e 73 20 6f 6e 65 20 6c 65 73 73 20 74 68 61 6e  ns one less than
31370 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d   the maximum num
31380 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65  ber of allowed e
31390 72 72 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73  rrors..** At mos
313a0 74 20 72 65 67 28 50 33 29 20 65 72 72 6f 72 73  t reg(P3) errors
313b0 20 77 69 6c 6c 20 62 65 20 72 65 70 6f 72 74 65   will be reporte
313c0 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  d..** In other w
313d0 6f 72 64 73 2c 20 74 68 65 20 61 6e 61 6c 79 73  ords, the analys
313e0 69 73 20 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e  is stops as soon
313f0 20 61 73 20 72 65 67 28 50 31 29 20 65 72 72 6f   as reg(P1) erro
31400 72 73 20 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e  rs are .** seen.
31410 20 20 52 65 67 28 50 31 29 20 69 73 20 75 70 64    Reg(P1) is upd
31420 61 74 65 64 20 77 69 74 68 20 74 68 65 20 6e 75  ated with the nu
31430 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72  mber of errors r
31440 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20  emaining..**.** 
31450 54 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  The root page nu
31460 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20 74 61 62  mbers of all tab
31470 6c 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62  les in the datab
31480 61 73 65 20 61 72 65 20 69 6e 74 65 67 65 72 73  ase are integers
31490 0a 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 50 34  .** stored in P4
314a0 5f 49 4e 54 41 52 52 41 59 20 61 72 67 75 6d 65  _INTARRAY argume
314b0 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  nt..**.** If P5 
314c0 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
314d0 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 6f   check is done o
314e0 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20  n the auxiliary 
314f0 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65  database.** file
31500 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20 64  , not the main d
31510 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a  atabase file..**
31520 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
31530 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65  is used to imple
31540 6d 65 6e 74 20 74 68 65 20 69 6e 74 65 67 72 69  ment the integri
31550 74 79 5f 63 68 65 63 6b 20 70 72 61 67 6d 61 2e  ty_check pragma.
31560 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65  .*/.case OP_Inte
31570 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e 74  grityCk: {.  int
31580 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20   nRoot;      /* 
31590 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73  Number of tables
315a0 20 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75 6d   to check.  (Num
315b0 62 65 72 20 6f 66 20 72 6f 6f 74 20 70 61 67 65  ber of root page
315c0 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 52  s.) */.  int *aR
315d0 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72 72 61  oot;     /* Arra
315e0 79 20 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e 75  y of rootpage nu
315f0 6d 62 65 72 73 20 66 6f 72 20 74 61 62 6c 65 73  mbers for tables
31600 20 74 6f 20 62 65 20 63 68 65 63 6b 65 64 20 2a   to be checked *
31610 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20  /.  int nErr;   
31620 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
31630 20 65 72 72 6f 72 73 20 72 65 70 6f 72 74 65 64   errors reported
31640 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20   */.  char *z;  
31650 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66        /* Text of
31660 20 74 68 65 20 65 72 72 6f 72 20 72 65 70 6f 72   the error repor
31670 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72  t */.  Mem *pnEr
31680 72 3b 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74  r;     /* Regist
31690 65 72 20 6b 65 65 70 69 6e 67 20 74 72 61 63 6b  er keeping track
316a0 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69   of errors remai
316b0 6e 69 6e 67 20 2a 2f 0a 0a 20 20 61 73 73 65 72  ning */..  asser
316c0 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
316d0 29 3b 0a 20 20 6e 52 6f 6f 74 20 3d 20 70 4f 70  );.  nRoot = pOp
316e0 2d 3e 70 32 3b 0a 20 20 61 52 6f 6f 74 20 3d 20  ->p2;.  aRoot = 
316f0 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 61 73  pOp->p4.ai;.  as
31700 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b  sert( nRoot>0 );
31710 0a 20 20 61 73 73 65 72 74 28 20 61 52 6f 6f 74  .  assert( aRoot
31720 5b 30 5d 3d 3d 6e 52 6f 6f 74 20 29 3b 0a 20 20  [0]==nRoot );.  
31730 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
31740 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
31750 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
31760 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 6e 45 72  ursor) );.  pnEr
31770 72 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  r = &aMem[pOp->p
31780 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  3];.  assert( (p
31790 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45  nErr->flags & ME
317a0 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61  M_Int)!=0 );.  a
317b0 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66  ssert( (pnErr->f
317c0 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c  lags & (MEM_Str|
317d0 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b  MEM_Blob))==0 );
317e0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
317f0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
31800 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e  rt( pOp->p5<db->
31810 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
31820 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
31830 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70  treeMask, pOp->p
31840 35 29 20 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69  5) );.  z = sqli
31850 74 65 33 42 74 72 65 65 49 6e 74 65 67 72 69 74  te3BtreeIntegrit
31860 79 43 68 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70  yCheck(db->aDb[p
31870 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c 20 26 61 52  Op->p5].pBt, &aR
31880 6f 6f 74 5b 31 5d 2c 20 6e 52 6f 6f 74 2c 0a 20  oot[1], nRoot,. 
31890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
318a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
318b0 28 69 6e 74 29 70 6e 45 72 72 2d 3e 75 2e 69 2b  (int)pnErr->u.i+
318c0 31 2c 20 26 6e 45 72 72 29 3b 0a 20 20 73 71 6c  1, &nErr);.  sql
318d0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
318e0 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 69 66 28 20  ll(pIn1);.  if( 
318f0 6e 45 72 72 3d 3d 30 20 29 7b 0a 20 20 20 20 61  nErr==0 ){.    a
31900 73 73 65 72 74 28 20 7a 3d 3d 30 20 29 3b 0a 20  ssert( z==0 );. 
31910 20 7d 65 6c 73 65 20 69 66 28 20 7a 3d 3d 30 20   }else if( z==0 
31920 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  ){.    goto no_m
31930 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  em;.  }else{.   
31940 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e   pnErr->u.i -= n
31950 45 72 72 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74  Err-1;.    sqlit
31960 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28  e3VdbeMemSetStr(
31970 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c  pIn1, z, -1, SQL
31980 49 54 45 5f 55 54 46 38 2c 20 73 71 6c 69 74 65  ITE_UTF8, sqlite
31990 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55  3_free);.  }.  U
319a0 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
319b0 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69  ZE(pIn1);.  sqli
319c0 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
319d0 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f  oding(pIn1, enco
319e0 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  ding);.  break;.
319f0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
31a00 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54  TE_OMIT_INTEGRIT
31a10 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f  Y_CHECK */../* O
31a20 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 41 64 64  pcode: RowSetAdd
31a30 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
31a40 53 79 6e 6f 70 73 69 73 3a 20 72 6f 77 73 65 74  Synopsis: rowset
31a50 28 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  (P1)=r[P2].**.**
31a60 20 49 6e 73 65 72 74 20 74 68 65 20 69 6e 74 65   Insert the inte
31a70 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20 62  ger value held b
31a80 79 20 72 65 67 69 73 74 65 72 20 50 32 20 69 6e  y register P2 in
31a90 74 6f 20 61 20 52 6f 77 53 65 74 20 6f 62 6a 65  to a RowSet obje
31aa0 63 74 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65  ct.** held in re
31ab0 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a  gister P1..**.**
31ac0 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
31ad0 69 6c 73 20 69 66 20 50 32 20 69 73 20 6e 6f 74  ils if P2 is not
31ae0 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a   an integer..*/.
31af0 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 41 64  case OP_RowSetAd
31b00 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e  d: {       /* in
31b10 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31  1, in2 */.  pIn1
31b20 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
31b30 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  ];.  pIn2 = &aMe
31b40 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
31b50 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61  sert( (pIn2->fla
31b60 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
31b70 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d   );.  if( (pIn1-
31b80 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
31b90 62 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28  b)==0 ){.    if(
31ba0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
31bb0 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29 20 29  etRowSet(pIn1) )
31bc0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
31bd0 7d 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  }.  assert( sqli
31be0 74 65 33 56 64 62 65 4d 65 6d 49 73 52 6f 77 53  te3VdbeMemIsRowS
31bf0 65 74 28 70 49 6e 31 29 20 29 3b 0a 20 20 73 71  et(pIn1) );.  sq
31c00 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72  lite3RowSetInser
31c10 74 28 28 52 6f 77 53 65 74 2a 29 70 49 6e 31 2d  t((RowSet*)pIn1-
31c20 3e 7a 2c 20 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a  >z, pIn2->u.i);.
31c30 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
31c40 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 52 65 61  pcode: RowSetRea
31c50 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
31c60 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
31c70 5d 3d 72 6f 77 73 65 74 28 50 31 29 0a 2a 2a 0a  ]=rowset(P1).**.
31c80 2a 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 73  ** Extract the s
31c90 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 66 72  mallest value fr
31ca0 6f 6d 20 74 68 65 20 52 6f 77 53 65 74 20 6f 62  om the RowSet ob
31cb0 6a 65 63 74 20 69 6e 20 50 31 0a 2a 2a 20 61 6e  ject in P1.** an
31cc0 64 20 70 75 74 20 74 68 61 74 20 76 61 6c 75 65  d put that value
31cd0 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
31ce0 33 2e 0a 2a 2a 20 4f 72 2c 20 69 66 20 52 6f 77  3..** Or, if Row
31cf0 53 65 74 20 6f 62 6a 65 63 74 20 50 31 20 69 73  Set object P1 is
31d00 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74 79   initially empty
31d10 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e  , leave P3.** un
31d20 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70  changed and jump
31d30 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
31d40 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  P2..*/.case OP_R
31d50 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20 20 20  owSetRead: {    
31d60 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c     /* jump, in1,
31d70 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 76   out3 */.  i64 v
31d80 61 6c 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61  al;..  pIn1 = &a
31d90 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
31da0 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66  assert( (pIn1->f
31db0 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29  lags & MEM_Blob)
31dc0 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33 56 64  ==0 || sqlite3Vd
31dd0 62 65 4d 65 6d 49 73 52 6f 77 53 65 74 28 70 49  beMemIsRowSet(pI
31de0 6e 31 29 20 29 3b 0a 20 20 69 66 28 20 28 70 49  n1) );.  if( (pI
31df0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
31e00 42 6c 6f 62 29 3d 3d 30 20 0a 20 20 20 7c 7c 20  Blob)==0 .   || 
31e10 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78  sqlite3RowSetNex
31e20 74 28 28 52 6f 77 53 65 74 2a 29 70 49 6e 31 2d  t((RowSet*)pIn1-
31e30 3e 7a 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29  >z, &val)==0.  )
31e40 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f  {.    /* The boo
31e50 6c 65 61 6e 20 69 6e 64 65 78 20 69 73 20 65 6d  lean index is em
31e60 70 74 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74  pty */.    sqlit
31e70 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
31e80 28 70 49 6e 31 29 3b 0a 20 20 20 20 56 64 62 65  (pIn1);.    Vdbe
31e90 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29  BranchTaken(1,2)
31ea0 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f  ;.    goto jump_
31eb0 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f  to_p2_and_check_
31ec0 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20  for_interrupt;. 
31ed0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41   }else{.    /* A
31ee0 20 76 61 6c 75 65 20 77 61 73 20 70 75 6c 6c 65   value was pulle
31ef0 64 20 66 72 6f 6d 20 74 68 65 20 69 6e 64 65 78  d from the index
31f00 20 2a 2f 0a 20 20 20 20 56 64 62 65 42 72 61 6e   */.    VdbeBran
31f10 63 68 54 61 6b 65 6e 28 30 2c 32 29 3b 0a 20 20  chTaken(0,2);.  
31f20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
31f30 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70  SetInt64(&aMem[p
31f40 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c 29 3b 0a 20  Op->p3], val);. 
31f50 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f   }.  goto check_
31f60 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d  for_interrupt;.}
31f70 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
31f80 53 65 74 54 65 73 74 20 50 31 20 50 32 20 50 33  SetTest P1 P2 P3
31f90 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P4.** Synopsis:
31fa0 20 69 66 20 72 5b 50 33 5d 20 69 6e 20 72 6f 77   if r[P3] in row
31fb0 73 65 74 28 50 31 29 20 67 6f 74 6f 20 50 32 0a  set(P1) goto P2.
31fc0 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  **.** Register P
31fd0 33 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20  3 is assumed to 
31fe0 68 6f 6c 64 20 61 20 36 34 2d 62 69 74 20 69 6e  hold a 64-bit in
31ff0 74 65 67 65 72 20 76 61 6c 75 65 2e 20 49 66 20  teger value. If 
32000 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 63  register P1.** c
32010 6f 6e 74 61 69 6e 73 20 61 20 52 6f 77 53 65 74  ontains a RowSet
32020 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 61 74   object and that
32030 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 63   RowSet object c
32040 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74 68 65 20 76  ontains.** the v
32050 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 50 33 2c  alue held in P3,
32060 20 6a 75 6d 70 20 74 6f 20 72 65 67 69 73 74 65   jump to registe
32070 72 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c  r P2. Otherwise,
32080 20 69 6e 73 65 72 74 20 74 68 65 0a 2a 2a 20 69   insert the.** i
32090 6e 74 65 67 65 72 20 69 6e 20 50 33 20 69 6e 74  nteger in P3 int
320a0 6f 20 74 68 65 20 52 6f 77 53 65 74 20 61 6e 64  o the RowSet and
320b0 20 63 6f 6e 74 69 6e 75 65 20 6f 6e 20 74 6f 20   continue on to 
320c0 74 68 65 0a 2a 2a 20 6e 65 78 74 20 6f 70 63 6f  the.** next opco
320d0 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 6f  de..**.** The Ro
320e0 77 53 65 74 20 6f 62 6a 65 63 74 20 69 73 20 6f  wSet object is o
320f0 70 74 69 6d 69 7a 65 64 20 66 6f 72 20 74 68 65  ptimized for the
32100 20 63 61 73 65 20 77 68 65 72 65 20 73 65 74 73   case where sets
32110 20 6f 66 20 69 6e 74 65 67 65 72 73 0a 2a 2a 20   of integers.** 
32120 61 72 65 20 69 6e 73 65 72 74 65 64 20 69 6e 20  are inserted in 
32130 64 69 73 74 69 6e 63 74 20 70 68 61 73 65 73 2c  distinct phases,
32140 20 77 68 69 63 68 20 65 61 63 68 20 73 65 74 20   which each set 
32150 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70 6c  contains no dupl
32160 69 63 61 74 65 73 2e 0a 2a 2a 20 45 61 63 68 20  icates..** Each 
32170 73 65 74 20 69 73 20 69 64 65 6e 74 69 66 69 65  set is identifie
32180 64 20 62 79 20 61 20 75 6e 69 71 75 65 20 50 34  d by a unique P4
32190 20 76 61 6c 75 65 2e 20 54 68 65 20 66 69 72 73   value. The firs
321a0 74 20 73 65 74 0a 2a 2a 20 6d 75 73 74 20 68 61  t set.** must ha
321b0 76 65 20 50 34 3d 3d 30 2c 20 74 68 65 20 66 69  ve P4==0, the fi
321c0 6e 61 6c 20 73 65 74 20 6d 75 73 74 20 68 61 76  nal set must hav
321d0 65 20 50 34 3d 3d 2d 31 2c 20 61 6e 64 20 66 6f  e P4==-1, and fo
321e0 72 20 61 6c 6c 20 6f 74 68 65 72 20 73 65 74 73  r all other sets
321f0 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65 20 50 34  .** must have P4
32200 3e 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 61  >0..**.** This a
32210 6c 6c 6f 77 73 20 6f 70 74 69 6d 69 7a 61 74 69  llows optimizati
32220 6f 6e 73 3a 20 28 61 29 20 77 68 65 6e 20 50 34  ons: (a) when P4
32230 3d 3d 30 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ==0 there is no 
32240 6e 65 65 64 20 74 6f 20 74 65 73 74 0a 2a 2a 20  need to test.** 
32250 74 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63  the RowSet objec
32260 74 20 66 6f 72 20 50 33 2c 20 61 73 20 69 74 20  t for P3, as it 
32270 69 73 20 67 75 61 72 61 6e 74 65 65 64 20 6e 6f  is guaranteed no
32280 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20 69 74 2c  t to contain it,
32290 0a 2a 2a 20 28 62 29 20 77 68 65 6e 20 50 34 3d  .** (b) when P4=
322a0 3d 2d 31 20 74 68 65 72 65 20 69 73 20 6e 6f 20  =-1 there is no 
322b0 6e 65 65 64 20 74 6f 20 69 6e 73 65 72 74 20 74  need to insert t
322c0 68 65 20 76 61 6c 75 65 2c 20 61 73 20 69 74 20  he value, as it 
322d0 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20 62 65  will.** never be
322e0 20 74 65 73 74 65 64 20 66 6f 72 2c 20 61 6e 64   tested for, and
322f0 20 28 63 29 20 77 68 65 6e 20 61 20 76 61 6c 75   (c) when a valu
32300 65 20 74 68 61 74 20 69 73 20 70 61 72 74 20 6f  e that is part o
32310 66 20 73 65 74 20 58 20 69 73 0a 2a 2a 20 69 6e  f set X is.** in
32320 73 65 72 74 65 64 2c 20 74 68 65 72 65 20 69 73  serted, there is
32330 20 6e 6f 20 6e 65 65 64 20 74 6f 20 73 65 61 72   no need to sear
32340 63 68 20 74 6f 20 73 65 65 20 69 66 20 74 68 65  ch to see if the
32350 20 73 61 6d 65 20 76 61 6c 75 65 20 77 61 73 0a   same value was.
32360 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 69 6e  ** previously in
32370 73 65 72 74 65 64 20 61 73 20 70 61 72 74 20 6f  serted as part o
32380 66 20 73 65 74 20 58 20 28 6f 6e 6c 79 20 69 66  f set X (only if
32390 20 69 74 20 77 61 73 20 70 72 65 76 69 6f 75 73   it was previous
323a0 6c 79 0a 2a 2a 20 69 6e 73 65 72 74 65 64 20 61  ly.** inserted a
323b0 73 20 70 61 72 74 20 6f 66 20 73 6f 6d 65 20 6f  s part of some o
323c0 74 68 65 72 20 73 65 74 29 2e 0a 2a 2f 0a 63 61  ther set)..*/.ca
323d0 73 65 20 4f 50 5f 52 6f 77 53 65 74 54 65 73 74  se OP_RowSetTest
323e0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
323f0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
32400 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69   in1, in3 */.  i
32410 6e 74 20 69 53 65 74 3b 0a 20 20 69 6e 74 20 65  nt iSet;.  int e
32420 78 69 73 74 73 3b 0a 0a 20 20 70 49 6e 31 20 3d  xists;..  pIn1 =
32430 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
32440 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
32450 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 53 65 74  pOp->p3];.  iSet
32460 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20   = pOp->p4.i;.  
32470 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c  assert( pIn3->fl
32480 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 0a  ags&MEM_Int );..
32490 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73    /* If there is
324a0 20 61 6e 79 74 68 69 6e 67 20 6f 74 68 65 72 20   anything other 
324b0 74 68 61 6e 20 61 20 72 6f 77 73 65 74 20 6f 62  than a rowset ob
324c0 6a 65 63 74 20 69 6e 20 6d 65 6d 6f 72 79 20 63  ject in memory c
324d0 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20 64 65 6c  ell P1,.  ** del
324e0 65 74 65 20 69 74 20 6e 6f 77 20 61 6e 64 20 69  ete it now and i
324f0 6e 69 74 69 61 6c 69 7a 65 20 50 31 20 77 69 74  nitialize P1 wit
32500 68 20 61 6e 20 65 6d 70 74 79 20 72 6f 77 73 65  h an empty rowse
32510 74 0a 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 49  t.  */.  if( (pI
32520 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
32530 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Blob)==0 ){.    
32540 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
32550 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31  emSetRowSet(pIn1
32560 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  ) ) goto no_mem;
32570 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 73  .  }.  assert( s
32580 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 73 52  qlite3VdbeMemIsR
32590 6f 77 53 65 74 28 70 49 6e 31 29 20 29 3b 0a 20  owSet(pIn1) );. 
325a0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
325b0 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
325c0 3b 0a 20 20 61 73 73 65 72 74 28 20 69 53 65 74  ;.  assert( iSet
325d0 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20  ==-1 || iSet>=0 
325e0 29 3b 0a 20 20 69 66 28 20 69 53 65 74 20 29 7b  );.  if( iSet ){
325f0 0a 20 20 20 20 65 78 69 73 74 73 20 3d 20 73 71  .    exists = sq
32600 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28  lite3RowSetTest(
32610 28 52 6f 77 53 65 74 2a 29 70 49 6e 31 2d 3e 7a  (RowSet*)pIn1->z
32620 2c 20 69 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e  , iSet, pIn3->u.
32630 69 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e  i);.    VdbeBran
32640 63 68 54 61 6b 65 6e 28 65 78 69 73 74 73 21 3d  chTaken(exists!=
32650 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 65 78  0,2);.    if( ex
32660 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70  ists ) goto jump
32670 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 69 66  _to_p2;.  }.  if
32680 28 20 69 53 65 74 3e 3d 30 20 29 7b 0a 20 20 20  ( iSet>=0 ){.   
32690 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e   sqlite3RowSetIn
326a0 73 65 72 74 28 28 52 6f 77 53 65 74 2a 29 70 49  sert((RowSet*)pI
326b0 6e 31 2d 3e 7a 2c 20 70 49 6e 33 2d 3e 75 2e 69  n1->z, pIn3->u.i
326c0 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
326d0 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  }...#ifndef SQLI
326e0 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a  TE_OMIT_TRIGGER.
326f0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 6f 67  ./* Opcode: Prog
32700 72 61 6d 20 50 31 20 50 32 20 50 33 20 50 34 20  ram P1 P2 P3 P4 
32710 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65  P5.**.** Execute
32720 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f   the trigger pro
32730 67 72 61 6d 20 70 61 73 73 65 64 20 61 73 20 50  gram passed as P
32740 34 20 28 74 79 70 65 20 50 34 5f 53 55 42 50 52  4 (type P4_SUBPR
32750 4f 47 52 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a 20 50  OGRAM). .**.** P
32760 31 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61  1 contains the a
32770 64 64 72 65 73 73 20 6f 66 20 74 68 65 20 6d 65  ddress of the me
32780 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20 63  mory cell that c
32790 6f 6e 74 61 69 6e 73 20 74 68 65 20 66 69 72 73  ontains the firs
327a0 74 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c  t memory .** cel
327b0 6c 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  l in an array of
327c0 20 76 61 6c 75 65 73 20 75 73 65 64 20 61 73 20   values used as 
327d0 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65  arguments to the
327e0 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 50 32   sub-program. P2
327f0 20 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 74 68   .** contains th
32800 65 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75 6d  e address to jum
32810 70 20 74 6f 20 69 66 20 74 68 65 20 73 75 62 2d  p to if the sub-
32820 70 72 6f 67 72 61 6d 20 74 68 72 6f 77 73 20 61  program throws a
32830 6e 20 49 47 4e 4f 52 45 20 0a 2a 2a 20 65 78 63  n IGNORE .** exc
32840 65 70 74 69 6f 6e 20 75 73 69 6e 67 20 74 68 65  eption using the
32850 20 52 41 49 53 45 28 29 20 66 75 6e 63 74 69 6f   RAISE() functio
32860 6e 2e 20 52 65 67 69 73 74 65 72 20 50 33 20 63  n. Register P3 c
32870 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72  ontains the addr
32880 65 73 73 20 0a 2a 2a 20 6f 66 20 61 20 6d 65 6d  ess .** of a mem
32890 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 69 73  ory cell in this
328a0 20 28 74 68 65 20 70 61 72 65 6e 74 29 20 56 4d   (the parent) VM
328b0 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f   that is used to
328c0 20 61 6c 6c 6f 63 61 74 65 20 74 68 65 20 0a 2a   allocate the .*
328d0 2a 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  * memory require
328e0 64 20 62 79 20 74 68 65 20 73 75 62 2d 76 64 62  d by the sub-vdb
328f0 65 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a 2a 2a  e at runtime..**
32900 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
32910 74 65 72 20 74 6f 20 74 68 65 20 56 4d 20 63 6f  ter to the VM co
32920 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69  ntaining the tri
32930 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a  gger program..**
32940 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e  .** If P5 is non
32950 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 72 65 63 75  -zero, then recu
32960 72 73 69 76 65 20 70 72 6f 67 72 61 6d 20 69 6e  rsive program in
32970 76 6f 63 61 74 69 6f 6e 20 69 73 20 65 6e 61 62  vocation is enab
32980 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  led..*/.case OP_
32990 50 72 6f 67 72 61 6d 3a 20 7b 20 20 20 20 20 20  Program: {      
329a0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
329b0 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt nMem;        
329c0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
329d0 20 6f 66 20 6d 65 6d 6f 72 79 20 72 65 67 69 73   of memory regis
329e0 74 65 72 73 20 66 6f 72 20 73 75 62 2d 70 72 6f  ters for sub-pro
329f0 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 42  gram */.  int nB
32a00 79 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  yte;            
32a10 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 72 75    /* Bytes of ru
32a20 6e 74 69 6d 65 20 73 70 61 63 65 20 72 65 71 75  ntime space requ
32a30 69 72 65 64 20 66 6f 72 20 73 75 62 2d 70 72 6f  ired for sub-pro
32a40 67 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  gram */.  Mem *p
32a50 52 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Rt;             
32a60 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f    /* Register to
32a70 20 61 6c 6c 6f 63 61 74 65 20 72 75 6e 74 69 6d   allocate runtim
32a80 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 4d 65 6d  e space */.  Mem
32a90 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *pMem;         
32aa0 20 20 20 20 20 2f 2a 20 55 73 65 64 20 74 6f 20       /* Used to 
32ab0 69 74 65 72 61 74 65 20 74 68 72 6f 75 67 68 20  iterate through 
32ac0 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 2a 2f 0a  memory cells */.
32ad0 20 20 4d 65 6d 20 2a 70 45 6e 64 3b 20 20 20 20    Mem *pEnd;    
32ae0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73            /* Las
32af0 74 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e  t memory cell in
32b00 20 6e 65 77 20 61 72 72 61 79 20 2a 2f 0a 20 20   new array */.  
32b10 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
32b20 65 3b 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 76  e;      /* New v
32b30 64 62 65 20 66 72 61 6d 65 20 74 6f 20 65 78 65  dbe frame to exe
32b40 63 75 74 65 20 69 6e 20 2a 2f 0a 20 20 53 75 62  cute in */.  Sub
32b50 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61  Program *pProgra
32b60 6d 3b 20 20 20 2f 2a 20 53 75 62 2d 70 72 6f 67  m;   /* Sub-prog
32b70 72 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20 2a  ram to execute *
32b80 2f 0a 20 20 76 6f 69 64 20 2a 74 3b 20 20 20 20  /.  void *t;    
32b90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
32ba0 6f 6b 65 6e 20 69 64 65 6e 74 69 66 79 69 6e 67  oken identifying
32bb0 20 74 72 69 67 67 65 72 20 2a 2f 0a 0a 20 20 70   trigger */..  p
32bc0 50 72 6f 67 72 61 6d 20 3d 20 70 4f 70 2d 3e 70  Program = pOp->p
32bd0 34 2e 70 50 72 6f 67 72 61 6d 3b 0a 20 20 70 52  4.pProgram;.  pR
32be0 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
32bf0 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 50  3];.  assert( pP
32c00 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b  rogram->nOp>0 );
32c10 0a 20 20 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  .  .  /* If the 
32c20 70 35 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72  p5 flag is clear
32c30 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69 76 65  , then recursive
32c40 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74   invocation of t
32c50 72 69 67 67 65 72 73 20 69 73 20 0a 20 20 2a 2a  riggers is .  **
32c60 20 64 69 73 61 62 6c 65 64 20 66 6f 72 20 62 61   disabled for ba
32c70 63 6b 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62  ckwards compatib
32c80 69 6c 69 74 79 20 28 70 35 20 69 73 20 73 65 74  ility (p5 is set
32c90 20 69 66 20 74 68 69 73 20 73 75 62 2d 70 72 6f   if this sub-pro
32ca0 67 72 61 6d 0a 20 20 2a 2a 20 69 73 20 72 65 61  gram.  ** is rea
32cb0 6c 6c 79 20 61 20 74 72 69 67 67 65 72 2c 20 6e  lly a trigger, n
32cc0 6f 74 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79  ot a foreign key
32cd0 20 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65   action, and the
32ce0 20 66 6c 61 67 20 73 65 74 0a 20 20 2a 2a 20 61   flag set.  ** a
32cf0 6e 64 20 63 6c 65 61 72 65 64 20 62 79 20 74 68  nd cleared by th
32d00 65 20 22 50 52 41 47 4d 41 20 72 65 63 75 72 73  e "PRAGMA recurs
32d10 69 76 65 5f 74 72 69 67 67 65 72 73 22 20 63 6f  ive_triggers" co
32d20 6d 6d 61 6e 64 20 69 73 20 63 6c 65 61 72 29 2e  mmand is clear).
32d30 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 74 20 69  .  ** .  ** It i
32d40 73 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f  s recursive invo
32d50 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65  cation of trigge
32d60 72 73 2c 20 61 74 20 74 68 65 20 53 51 4c 20 6c  rs, at the SQL l
32d70 65 76 65 6c 2c 20 74 68 61 74 20 69 73 20 0a 20  evel, that is . 
32d80 20 2a 2a 20 64 69 73 61 62 6c 65 64 2e 20 49 6e   ** disabled. In
32d90 20 73 6f 6d 65 20 63 61 73 65 73 20 61 20 73 69   some cases a si
32da0 6e 67 6c 65 20 74 72 69 67 67 65 72 20 6d 61 79  ngle trigger may
32db0 20 67 65 6e 65 72 61 74 65 20 6d 6f 72 65 20 74   generate more t
32dc0 68 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20 53 75  han one .  ** Su
32dd0 62 50 72 6f 67 72 61 6d 20 28 69 66 20 74 68 65  bProgram (if the
32de0 20 74 72 69 67 67 65 72 20 6d 61 79 20 62 65 20   trigger may be 
32df0 65 78 65 63 75 74 65 64 20 77 69 74 68 20 6d 6f  executed with mo
32e00 72 65 20 74 68 61 6e 20 6f 6e 65 20 64 69 66 66  re than one diff
32e10 65 72 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20 43  erent .  ** ON C
32e20 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68  ONFLICT algorith
32e30 6d 29 2e 20 53 75 62 50 72 6f 67 72 61 6d 20 73  m). SubProgram s
32e40 74 72 75 63 74 75 72 65 73 20 61 73 73 6f 63 69  tructures associ
32e50 61 74 65 64 20 77 69 74 68 20 61 0a 20 20 2a 2a  ated with a.  **
32e60 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20   single trigger 
32e70 61 6c 6c 20 68 61 76 65 20 74 68 65 20 73 61 6d  all have the sam
32e80 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20  e value for the 
32e90 53 75 62 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e  SubProgram.token
32ea0 20 0a 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 2e   .  ** variable.
32eb0 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e    */.  if( pOp->
32ec0 70 35 20 29 7b 0a 20 20 20 20 74 20 3d 20 70 50  p5 ){.    t = pP
32ed0 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20  rogram->token;. 
32ee0 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d     for(pFrame=p-
32ef0 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 20  >pFrame; pFrame 
32f00 26 26 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e  && pFrame->token
32f10 21 3d 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61  !=t; pFrame=pFra
32f20 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20  me->pParent);.  
32f30 20 20 69 66 28 20 70 46 72 61 6d 65 20 29 20 62    if( pFrame ) b
32f40 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  reak;.  }..  if(
32f50 20 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e   p->nFrame>=db->
32f60 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
32f70 4d 49 54 5f 54 52 49 47 47 45 52 5f 44 45 50 54  MIT_TRIGGER_DEPT
32f80 48 5d 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  H] ){.    rc = S
32f90 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
32fa0 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
32fb0 72 28 70 2c 20 22 74 6f 6f 20 6d 61 6e 79 20 6c  r(p, "too many l
32fc0 65 76 65 6c 73 20 6f 66 20 74 72 69 67 67 65 72  evels of trigger
32fd0 20 72 65 63 75 72 73 69 6f 6e 22 29 3b 0a 20 20   recursion");.  
32fe0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
32ff0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a  _to_error;.  }..
33000 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 70 52    /* Register pR
33010 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  t is used to sto
33020 72 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65  re the memory re
33030 71 75 69 72 65 64 20 74 6f 20 73 61 76 65 20 74  quired to save t
33040 68 65 20 73 74 61 74 65 0a 20 20 2a 2a 20 6f 66  he state.  ** of
33050 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f   the current pro
33060 67 72 61 6d 2c 20 61 6e 64 20 74 68 65 20 6d 65  gram, and the me
33070 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 61 74  mory required at
33080 20 72 75 6e 74 69 6d 65 20 74 6f 20 65 78 65 63   runtime to exec
33090 75 74 65 0a 20 20 2a 2a 20 74 68 65 20 74 72 69  ute.  ** the tri
330a0 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 20 49 66  gger program. If
330b0 20 74 68 69 73 20 74 72 69 67 67 65 72 20 68 61   this trigger ha
330c0 73 20 62 65 65 6e 20 66 69 72 65 64 20 62 65 66  s been fired bef
330d0 6f 72 65 2c 20 74 68 65 6e 20 70 52 74 20 0a 20  ore, then pRt . 
330e0 20 2a 2a 20 69 73 20 61 6c 72 65 61 64 79 20 61   ** is already a
330f0 6c 6c 6f 63 61 74 65 64 2e 20 4f 74 68 65 72 77  llocated. Otherw
33100 69 73 65 2c 20 69 74 20 6d 75 73 74 20 62 65 20  ise, it must be 
33110 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 20 2a 2f  initialized.  */
33120 0a 20 20 69 66 28 20 28 70 52 74 2d 3e 66 6c 61  .  if( (pRt->fla
33130 67 73 26 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20  gs&MEM_Blob)==0 
33140 29 7b 0a 20 20 20 20 2f 2a 20 53 75 62 50 72 6f  ){.    /* SubPro
33150 67 72 61 6d 2e 6e 4d 65 6d 20 69 73 20 73 65 74  gram.nMem is set
33160 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   to the number o
33170 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75  f memory cells u
33180 73 65 64 20 62 79 20 74 68 65 20 0a 20 20 20 20  sed by the .    
33190 2a 2a 20 70 72 6f 67 72 61 6d 20 73 74 6f 72 65  ** program store
331a0 64 20 69 6e 20 53 75 62 50 72 6f 67 72 61 6d 2e  d in SubProgram.
331b0 61 4f 70 2e 20 41 73 20 77 65 6c 6c 20 61 73 20  aOp. As well as 
331c0 74 68 65 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72  these, one memor
331d0 79 0a 20 20 20 20 2a 2a 20 63 65 6c 6c 20 69 73  y.    ** cell is
331e0 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 65 61   required for ea
331f0 63 68 20 63 75 72 73 6f 72 20 75 73 65 64 20 62  ch cursor used b
33200 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 53  y the program. S
33210 65 74 20 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a 20  et local.    ** 
33220 76 61 72 69 61 62 6c 65 20 6e 4d 65 6d 20 28 61  variable nMem (a
33230 6e 64 20 6c 61 74 65 72 2c 20 56 64 62 65 46 72  nd later, VdbeFr
33240 61 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d 29 20 74  ame.nChildMem) t
33250 6f 20 74 68 69 73 20 76 61 6c 75 65 2e 0a 20 20  o this value..  
33260 20 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d 20    */.    nMem = 
33270 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b  pProgram->nMem +
33280 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b   pProgram->nCsr;
33290 0a 20 20 20 20 61 73 73 65 72 74 28 20 6e 4d 65  .    assert( nMe
332a0 6d 3e 30 20 29 3b 0a 20 20 20 20 69 66 28 20 70  m>0 );.    if( p
332b0 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 30  Program->nCsr==0
332c0 20 29 20 6e 4d 65 6d 2b 2b 3b 0a 20 20 20 20 6e   ) nMem++;.    n
332d0 42 79 74 65 20 3d 20 52 4f 55 4e 44 38 28 73 69  Byte = ROUND8(si
332e0 7a 65 6f 66 28 56 64 62 65 46 72 61 6d 65 29 29  zeof(VdbeFrame))
332f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b  .              +
33300 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d   nMem * sizeof(M
33310 65 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  em).            
33320 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43    + pProgram->nC
33330 73 72 20 2a 20 73 69 7a 65 6f 66 28 56 64 62 65  sr * sizeof(Vdbe
33340 43 75 72 73 6f 72 2a 29 0a 20 20 20 20 20 20 20  Cursor*).       
33350 20 20 20 20 20 20 20 2b 20 28 70 50 72 6f 67 72         + (pProgr
33360 61 6d 2d 3e 6e 4f 70 20 2b 20 37 29 2f 38 3b 0a  am->nOp + 7)/8;.
33370 20 20 20 20 70 46 72 61 6d 65 20 3d 20 73 71 6c      pFrame = sql
33380 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f  ite3DbMallocZero
33390 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20  (db, nByte);.   
333a0 20 69 66 28 20 21 70 46 72 61 6d 65 20 29 7b 0a   if( !pFrame ){.
333b0 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65        goto no_me
333c0 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  m;.    }.    sql
333d0 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
333e0 73 65 28 70 52 74 29 3b 0a 20 20 20 20 70 52 74  se(pRt);.    pRt
333f0 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c  ->flags = MEM_Bl
33400 6f 62 7c 4d 45 4d 5f 44 79 6e 3b 0a 20 20 20 20  ob|MEM_Dyn;.    
33410 70 52 74 2d 3e 7a 20 3d 20 28 63 68 61 72 2a 29  pRt->z = (char*)
33420 70 46 72 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d  pFrame;.    pRt-
33430 3e 6e 20 3d 20 6e 42 79 74 65 3b 0a 20 20 20 20  >n = nByte;.    
33440 70 52 74 2d 3e 78 44 65 6c 20 3d 20 73 71 6c 69  pRt->xDel = sqli
33450 74 65 33 56 64 62 65 46 72 61 6d 65 4d 65 6d 44  te3VdbeFrameMemD
33460 65 6c 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d  el;..    pFrame-
33470 3e 76 20 3d 20 70 3b 0a 20 20 20 20 70 46 72 61  >v = p;.    pFra
33480 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20  me->nChildMem = 
33490 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65  nMem;.    pFrame
334a0 2d 3e 6e 43 68 69 6c 64 43 73 72 20 3d 20 70 50  ->nChildCsr = pP
334b0 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20  rogram->nCsr;.  
334c0 20 20 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20 28    pFrame->pc = (
334d0 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b  int)(pOp - aOp);
334e0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d 65  .    pFrame->aMe
334f0 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20  m = p->aMem;.   
33500 20 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20   pFrame->nMem = 
33510 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72  p->nMem;.    pFr
33520 61 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d 3e  ame->apCsr = p->
33530 61 70 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d  apCsr;.    pFram
33540 65 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d 3e  e->nCursor = p->
33550 6e 43 75 72 73 6f 72 3b 0a 20 20 20 20 70 46 72  nCursor;.    pFr
33560 61 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f  ame->aOp = p->aO
33570 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  p;.    pFrame->n
33580 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20  Op = p->nOp;.   
33590 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d   pFrame->token =
335a0 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e   pProgram->token
335b0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
335c0 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e  ENABLE_STMT_SCAN
335d0 53 54 41 54 55 53 0a 20 20 20 20 70 46 72 61 6d  STATUS.    pFram
335e0 65 2d 3e 61 6e 45 78 65 63 20 3d 20 70 2d 3e 61  e->anExec = p->a
335f0 6e 45 78 65 63 3b 0a 23 65 6e 64 69 66 0a 23 69  nExec;.#endif.#i
33600 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
33610 47 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 69 46  G.    pFrame->iF
33620 72 61 6d 65 4d 61 67 69 63 20 3d 20 53 51 4c 49  rameMagic = SQLI
33630 54 45 5f 46 52 41 4d 45 5f 4d 41 47 49 43 3b 0a  TE_FRAME_MAGIC;.
33640 23 65 6e 64 69 66 0a 0a 20 20 20 20 70 45 6e 64  #endif..    pEnd
33650 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d 65 6d   = &VdbeFrameMem
33660 28 70 46 72 61 6d 65 29 5b 70 46 72 61 6d 65 2d  (pFrame)[pFrame-
33670 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a 20 20 20  >nChildMem];.   
33680 20 66 6f 72 28 70 4d 65 6d 3d 56 64 62 65 46 72   for(pMem=VdbeFr
33690 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 3b 20  ameMem(pFrame); 
336a0 70 4d 65 6d 21 3d 70 45 6e 64 3b 20 70 4d 65 6d  pMem!=pEnd; pMem
336b0 2b 2b 29 7b 0a 20 20 20 20 20 20 70 4d 65 6d 2d  ++){.      pMem-
336c0 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64  >flags = MEM_Und
336d0 65 66 69 6e 65 64 3b 0a 20 20 20 20 20 20 70 4d  efined;.      pM
336e0 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20 20  em->db = db;.   
336f0 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
33700 70 46 72 61 6d 65 20 3d 20 28 56 64 62 65 46 72  pFrame = (VdbeFr
33710 61 6d 65 2a 29 70 52 74 2d 3e 7a 3b 0a 20 20 20  ame*)pRt->z;.   
33720 20 61 73 73 65 72 74 28 20 70 52 74 2d 3e 78 44   assert( pRt->xD
33730 65 6c 3d 3d 73 71 6c 69 74 65 33 56 64 62 65 46  el==sqlite3VdbeF
33740 72 61 6d 65 4d 65 6d 44 65 6c 20 29 3b 0a 20 20  rameMemDel );.  
33750 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72    assert( pProgr
33760 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72 61  am->nMem+pProgra
33770 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d  m->nCsr==pFrame-
33780 3e 6e 43 68 69 6c 64 4d 65 6d 20 0a 20 20 20 20  >nChildMem .    
33790 20 20 20 20 7c 7c 20 28 70 50 72 6f 67 72 61 6d      || (pProgram
337a0 2d 3e 6e 43 73 72 3d 3d 30 20 26 26 20 70 50 72  ->nCsr==0 && pPr
337b0 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 31 3d 3d 70  ogram->nMem+1==p
337c0 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
337d0 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ) );.    assert(
337e0 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d   pProgram->nCsr=
337f0 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43  =pFrame->nChildC
33800 73 72 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  sr );.    assert
33810 28 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f  ( (int)(pOp - aO
33820 70 29 3d 3d 70 46 72 61 6d 65 2d 3e 70 63 20 29  p)==pFrame->pc )
33830 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61  ;.  }..  p->nFra
33840 6d 65 2b 2b 3b 0a 20 20 70 46 72 61 6d 65 2d 3e  me++;.  pFrame->
33850 70 50 61 72 65 6e 74 20 3d 20 70 2d 3e 70 46 72  pParent = p->pFr
33860 61 6d 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6c  ame;.  pFrame->l
33870 61 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c  astRowid = db->l
33880 61 73 74 52 6f 77 69 64 3b 0a 20 20 70 46 72 61  astRowid;.  pFra
33890 6d 65 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70 2d  me->nChange = p-
338a0 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70 46 72 61  >nChange;.  pFra
338b0 6d 65 2d 3e 6e 44 62 43 68 61 6e 67 65 20 3d 20  me->nDbChange = 
338c0 70 2d 3e 64 62 2d 3e 6e 43 68 61 6e 67 65 3b 0a  p->db->nChange;.
338d0 20 20 61 73 73 65 72 74 28 20 70 46 72 61 6d 65    assert( pFrame
338e0 2d 3e 70 41 75 78 44 61 74 61 3d 3d 30 20 29 3b  ->pAuxData==0 );
338f0 0a 20 20 70 46 72 61 6d 65 2d 3e 70 41 75 78 44  .  pFrame->pAuxD
33900 61 74 61 20 3d 20 70 2d 3e 70 41 75 78 44 61 74  ata = p->pAuxDat
33910 61 3b 0a 20 20 70 2d 3e 70 41 75 78 44 61 74 61  a;.  p->pAuxData
33920 20 3d 20 30 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e   = 0;.  p->nChan
33930 67 65 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72  ge = 0;.  p->pFr
33940 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20  ame = pFrame;.  
33950 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d  p->aMem = aMem =
33960 20 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46   VdbeFrameMem(pF
33970 72 61 6d 65 29 3b 0a 20 20 70 2d 3e 6e 4d 65 6d  rame);.  p->nMem
33980 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c   = pFrame->nChil
33990 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72 73  dMem;.  p->nCurs
339a0 6f 72 20 3d 20 28 75 31 36 29 70 46 72 61 6d 65  or = (u16)pFrame
339b0 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a 20 20 70  ->nChildCsr;.  p
339c0 2d 3e 61 70 43 73 72 20 3d 20 28 56 64 62 65 43  ->apCsr = (VdbeC
339d0 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b 70  ursor **)&aMem[p
339e0 2d 3e 6e 4d 65 6d 5d 3b 0a 20 20 70 46 72 61 6d  ->nMem];.  pFram
339f0 65 2d 3e 61 4f 6e 63 65 20 3d 20 28 75 38 2a 29  e->aOnce = (u8*)
33a00 26 70 2d 3e 61 70 43 73 72 5b 70 50 72 6f 67 72  &p->apCsr[pProgr
33a10 61 6d 2d 3e 6e 43 73 72 5d 3b 0a 20 20 6d 65 6d  am->nCsr];.  mem
33a20 73 65 74 28 70 46 72 61 6d 65 2d 3e 61 4f 6e 63  set(pFrame->aOnc
33a30 65 2c 20 30 2c 20 28 70 50 72 6f 67 72 61 6d 2d  e, 0, (pProgram-
33a40 3e 6e 4f 70 20 2b 20 37 29 2f 38 29 3b 0a 20 20  >nOp + 7)/8);.  
33a50 70 2d 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70  p->aOp = aOp = p
33a60 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20  Program->aOp;.  
33a70 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61  p->nOp = pProgra
33a80 6d 2d 3e 6e 4f 70 3b 0a 23 69 66 64 65 66 20 53  m->nOp;.#ifdef S
33a90 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d  QLITE_ENABLE_STM
33aa0 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20 70  T_SCANSTATUS.  p
33ab0 2d 3e 61 6e 45 78 65 63 20 3d 20 30 3b 0a 23 65  ->anExec = 0;.#e
33ac0 6e 64 69 66 0a 20 20 70 4f 70 20 3d 20 26 61 4f  ndif.  pOp = &aO
33ad0 70 5b 2d 31 5d 3b 0a 0a 20 20 62 72 65 61 6b 3b  p[-1];..  break;
33ae0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .}../* Opcode: P
33af0 61 72 61 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a  aram P1 P2 * * *
33b00 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
33b10 64 65 20 69 73 20 6f 6e 6c 79 20 65 76 65 72 20  de is only ever 
33b20 70 72 65 73 65 6e 74 20 69 6e 20 73 75 62 2d 70  present in sub-p
33b30 72 6f 67 72 61 6d 73 20 63 61 6c 6c 65 64 20 76  rograms called v
33b40 69 61 20 74 68 65 20 0a 2a 2a 20 4f 50 5f 50 72  ia the .** OP_Pr
33b50 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f  ogram instructio
33b60 6e 2e 20 43 6f 70 79 20 61 20 76 61 6c 75 65 20  n. Copy a value 
33b70 63 75 72 72 65 6e 74 6c 79 20 73 74 6f 72 65 64  currently stored
33b80 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a   in a memory .**
33b90 20 63 65 6c 6c 20 6f 66 20 74 68 65 20 63 61 6c   cell of the cal
33ba0 6c 69 6e 67 20 28 70 61 72 65 6e 74 29 20 66 72  ling (parent) fr
33bb0 61 6d 65 20 74 6f 20 63 65 6c 6c 20 50 32 20 69  ame to cell P2 i
33bc0 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72  n the current fr
33bd0 61 6d 65 73 20 0a 2a 2a 20 61 64 64 72 65 73 73  ames .** address
33be0 20 73 70 61 63 65 2e 20 54 68 69 73 20 69 73 20   space. This is 
33bf0 75 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20  used by trigger 
33c00 70 72 6f 67 72 61 6d 73 20 74 6f 20 61 63 63 65  programs to acce
33c10 73 73 20 74 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a  ss the new.* .**
33c20 20 61 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c 75 65   and old.* value
33c30 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 64 64  s..**.** The add
33c40 72 65 73 73 20 6f 66 20 74 68 65 20 63 65 6c 6c  ress of the cell
33c50 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 66   in the parent f
33c60 72 61 6d 65 20 69 73 20 64 65 74 65 72 6d 69 6e  rame is determin
33c70 65 64 20 62 79 20 61 64 64 69 6e 67 0a 2a 2a 20  ed by adding.** 
33c80 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
33c90 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20   P1 argument to 
33ca0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
33cb0 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20   P1 argument to 
33cc0 74 68 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f  the.** calling O
33cd0 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75  P_Program instru
33ce0 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
33cf0 50 5f 50 61 72 61 6d 3a 20 7b 20 20 20 20 20 20  P_Param: {      
33d00 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
33d10 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
33d20 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b  ame;.  Mem *pIn;
33d30 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
33d40 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
33d50 3b 0a 20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e  ;.  pFrame = p->
33d60 70 46 72 61 6d 65 3b 0a 20 20 70 49 6e 20 3d 20  pFrame;.  pIn = 
33d70 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f  &pFrame->aMem[pO
33d80 70 2d 3e 70 31 20 2b 20 70 46 72 61 6d 65 2d 3e  p->p1 + pFrame->
33d90 61 4f 70 5b 70 46 72 61 6d 65 2d 3e 70 63 5d 2e  aOp[pFrame->pc].
33da0 70 31 5d 3b 20 20 20 0a 20 20 73 71 6c 69 74 65  p1];   .  sqlite
33db0 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
33dc0 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 2c 20 4d  opy(pOut, pIn, M
33dd0 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 62 72 65  EM_Ephem);.  bre
33de0 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a  ak;.}..#endif /*
33df0 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f   #ifndef SQLITE_
33e00 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 2a 2f 0a  OMIT_TRIGGER */.
33e10 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
33e20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
33e30 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 43 6f  ./* Opcode: FkCo
33e40 75 6e 74 65 72 20 50 31 20 50 32 20 2a 20 2a 20  unter P1 P2 * * 
33e50 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 66  *.** Synopsis: f
33e60 6b 63 74 72 5b 50 31 5d 2b 3d 50 32 0a 2a 2a 0a  kctr[P1]+=P2.**.
33e70 2a 2a 20 49 6e 63 72 65 6d 65 6e 74 20 61 20 22  ** Increment a "
33e80 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74  constraint count
33e90 65 72 22 20 62 79 20 50 32 20 28 50 32 20 6d 61  er" by P2 (P2 ma
33ea0 79 20 62 65 20 6e 65 67 61 74 69 76 65 20 6f 72  y be negative or
33eb0 20 70 6f 73 69 74 69 76 65 29 2e 0a 2a 2a 20 49   positive)..** I
33ec0 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P1 is non-zero
33ed0 2c 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  , the database c
33ee0 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65  onstraint counte
33ef0 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  r is incremented
33f00 20 0a 2a 2a 20 28 64 65 66 65 72 72 65 64 20 66   .** (deferred f
33f10 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
33f20 72 61 69 6e 74 73 29 2e 20 4f 74 68 65 72 77 69  raints). Otherwi
33f30 73 65 2c 20 69 66 20 50 31 20 69 73 20 7a 65 72  se, if P1 is zer
33f40 6f 2c 20 74 68 65 20 0a 2a 2a 20 73 74 61 74 65  o, the .** state
33f50 6d 65 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20  ment counter is 
33f60 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 69 6d 6d  incremented (imm
33f70 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b  ediate foreign k
33f80 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e  ey constraints).
33f90 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 43 6f  .*/.case OP_FkCo
33fa0 75 6e 74 65 72 3a 20 7b 0a 20 20 69 66 28 20 64  unter: {.  if( d
33fb0 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
33fc0 45 5f 44 65 66 65 72 46 4b 73 20 29 7b 0a 20 20  E_DeferFKs ){.  
33fd0 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49    db->nDeferredI
33fe0 6d 6d 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70  mmCons += pOp->p
33ff0 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  2;.  }else if( p
34000 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 64 62  Op->p1 ){.    db
34010 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20  ->nDeferredCons 
34020 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65  += pOp->p2;.  }e
34030 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b 43  lse{.    p->nFkC
34040 6f 6e 73 74 72 61 69 6e 74 20 2b 3d 20 70 4f 70  onstraint += pOp
34050 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  ->p2;.  }.  brea
34060 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
34070 20 46 6b 49 66 5a 65 72 6f 20 50 31 20 50 32 20   FkIfZero P1 P2 
34080 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
34090 73 3a 20 69 66 20 66 6b 63 74 72 5b 50 31 5d 3d  s: if fkctr[P1]=
340a0 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  =0 goto P2.**.**
340b0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 74 65 73   This opcode tes
340c0 74 73 20 69 66 20 61 20 66 6f 72 65 69 67 6e 20  ts if a foreign 
340d0 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63  key constraint-c
340e0 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e  ounter is curren
340f0 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20  tly zero..** If 
34100 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74  so, jump to inst
34110 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65  ruction P2. Othe
34120 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f  rwise, fall thro
34130 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
34140 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  .** instruction.
34150 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  .**.** If P1 is 
34160 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74  non-zero, then t
34170 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
34180 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65   if the database
34190 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e   constraint-coun
341a0 74 65 72 0a 2a 2a 20 69 73 20 7a 65 72 6f 20 28  ter.** is zero (
341b0 74 68 65 20 6f 6e 65 20 74 68 61 74 20 63 6f 75  the one that cou
341c0 6e 74 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e  nts deferred con
341d0 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
341e0 6e 73 29 2e 20 49 66 20 50 31 20 69 73 0a 2a 2a  ns). If P1 is.**
341f0 20 7a 65 72 6f 2c 20 74 68 65 20 6a 75 6d 70 20   zero, the jump 
34200 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20  is taken if the 
34210 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e 73 74 72  statement constr
34220 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20  aint-counter is 
34230 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69 61  zero.** (immedia
34240 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  te foreign key c
34250 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
34260 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ions)..*/.case O
34270 50 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b 20 20 20  P_FkIfZero: {   
34280 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
34290 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29  .  if( pOp->p1 )
342a0 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  {.    VdbeBranch
342b0 54 61 6b 65 6e 28 64 62 2d 3e 6e 44 65 66 65 72  Taken(db->nDefer
342c0 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62  redCons==0 && db
342d0 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
342e0 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69  ns==0, 2);.    i
342f0 66 28 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  f( db->nDeferred
34300 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e  Cons==0 && db->n
34310 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d  DeferredImmCons=
34320 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  =0 ) goto jump_t
34330 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  o_p2;.  }else{. 
34340 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
34350 65 6e 28 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61  en(p->nFkConstra
34360 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44  int==0 && db->nD
34370 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d  eferredImmCons==
34380 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20 70  0, 2);.    if( p
34390 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d  ->nFkConstraint=
343a0 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72  =0 && db->nDefer
343b0 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20  redImmCons==0 ) 
343c0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
343d0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
343e0 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65  #endif /* #ifnde
343f0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
34400 52 45 49 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69  REIGN_KEY */..#i
34410 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
34420 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  T_AUTOINCREMENT.
34430 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61  /* Opcode: MemMa
34440 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  x P1 P2 * * *.**
34450 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d   Synopsis: r[P1]
34460 3d 6d 61 78 28 72 5b 50 31 5d 2c 72 5b 50 32 5d  =max(r[P1],r[P2]
34470 29 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  ).**.** P1 is a 
34480 72 65 67 69 73 74 65 72 20 69 6e 20 74 68 65 20  register in the 
34490 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68  root frame of th
344a0 69 73 20 56 4d 20 28 74 68 65 20 72 6f 6f 74 20  is VM (the root 
344b0 66 72 61 6d 65 20 69 73 0a 2a 2a 20 64 69 66 66  frame is.** diff
344c0 65 72 65 6e 74 20 66 72 6f 6d 20 74 68 65 20 63  erent from the c
344d0 75 72 72 65 6e 74 20 66 72 61 6d 65 20 69 66 20  urrent frame if 
344e0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
344f0 20 69 73 20 62 65 69 6e 67 20 65 78 65 63 75 74   is being execut
34500 65 64 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 73  ed.** within a s
34510 75 62 2d 70 72 6f 67 72 61 6d 29 2e 20 53 65 74  ub-program). Set
34520 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65   the value of re
34530 67 69 73 74 65 72 20 50 31 20 74 6f 20 74 68 65  gister P1 to the
34540 20 6d 61 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20   maximum of .** 
34550 69 74 73 20 63 75 72 72 65 6e 74 20 76 61 6c 75  its current valu
34560 65 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20  e and the value 
34570 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
34580 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
34590 75 63 74 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e  uction throws an
345a0 20 65 72 72 6f 72 20 69 66 20 74 68 65 20 6d 65   error if the me
345b0 6d 6f 72 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74  mory cell is not
345c0 20 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e   initially.** an
345d0 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73   integer..*/.cas
345e0 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20  e OP_MemMax: {  
345f0 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a        /* in2 */.
34600 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
34610 61 6d 65 3b 0a 20 20 69 66 28 20 70 2d 3e 70 46  ame;.  if( p->pF
34620 72 61 6d 65 20 29 7b 0a 20 20 20 20 66 6f 72 28  rame ){.    for(
34630 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65  pFrame=p->pFrame
34640 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  ; pFrame->pParen
34650 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65  t; pFrame=pFrame
34660 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20  ->pParent);.    
34670 70 49 6e 31 20 3d 20 26 70 46 72 61 6d 65 2d 3e  pIn1 = &pFrame->
34680 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
34690 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31   }else{.    pIn1
346a0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
346b0 5d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  ];.  }.  assert(
346c0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31   memIsValid(pIn1
346d0 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  ) );.  sqlite3Vd
346e0 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
346f0 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20  pIn1);.  pIn2 = 
34700 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
34710 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
34720 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32 29  Integerify(pIn2)
34730 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e  ;.  if( pIn1->u.
34740 69 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20  i<pIn2->u.i){.  
34750 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 49    pIn1->u.i = pI
34760 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 62  n2->u.i;.  }.  b
34770 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
34780 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  * SQLITE_OMIT_AU
34790 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a  TOINCREMENT */..
347a0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 50 6f 73  /* Opcode: IfPos
347b0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
347c0 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
347d0 50 31 5d 3e 30 20 74 68 65 6e 20 72 5b 50 31 5d  P1]>0 then r[P1]
347e0 2d 3d 50 33 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a  -=P3, goto P2.**
347f0 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31 20  .** Register P1 
34800 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20  must contain an 
34810 69 6e 74 65 67 65 72 2e 0a 2a 2a 20 49 66 20 74  integer..** If t
34820 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  he value of regi
34830 73 74 65 72 20 50 31 20 69 73 20 31 20 6f 72 20  ster P1 is 1 or 
34840 67 72 65 61 74 65 72 2c 20 73 75 62 74 72 61 63  greater, subtrac
34850 74 20 50 33 20 66 72 6f 6d 20 74 68 65 0a 2a 2a  t P3 from the.**
34860 20 76 61 6c 75 65 20 69 6e 20 50 31 20 61 6e 64   value in P1 and
34870 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
34880 2a 2a 20 49 66 20 74 68 65 20 69 6e 69 74 69 61  ** If the initia
34890 6c 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  l value of regis
348a0 74 65 72 20 50 31 20 69 73 20 6c 65 73 73 20 74  ter P1 is less t
348b0 68 61 6e 20 31 2c 20 74 68 65 6e 20 74 68 65 0a  han 1, then the.
348c0 2a 2a 20 76 61 6c 75 65 20 69 73 20 75 6e 63 68  ** value is unch
348d0 61 6e 67 65 64 20 61 6e 64 20 63 6f 6e 74 72 6f  anged and contro
348e0 6c 20 70 61 73 73 65 73 20 74 68 72 6f 75 67 68  l passes through
348f0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
34900 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
34910 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20  e OP_IfPos: {   
34920 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
34930 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
34940 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
34950 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
34960 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  ags&MEM_Int );. 
34970 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
34980 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 2c 20 32  ( pIn1->u.i>0, 2
34990 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75  );.  if( pIn1->u
349a0 2e 69 3e 30 20 29 7b 0a 20 20 20 20 70 49 6e 31  .i>0 ){.    pIn1
349b0 2d 3e 75 2e 69 20 2d 3d 20 70 4f 70 2d 3e 70 33  ->u.i -= pOp->p3
349c0 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f  ;.    goto jump_
349d0 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
349e0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
349f0 3a 20 4f 66 66 73 65 74 4c 69 6d 69 74 20 50 31  : OffsetLimit P1
34a00 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
34a10 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
34a20 3e 30 20 74 68 65 6e 20 72 5b 50 32 5d 3d 72 5b  >0 then r[P2]=r[
34a30 50 31 5d 2b 6d 61 78 28 30 2c 72 5b 50 33 5d 29  P1]+max(0,r[P3])
34a40 20 65 6c 73 65 20 72 5b 50 32 5d 3d 28 2d 31 29   else r[P2]=(-1)
34a50 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
34a60 64 65 20 70 65 72 66 6f 72 6d 73 20 61 20 63 6f  de performs a co
34a70 6d 6d 6f 6e 6c 79 20 75 73 65 64 20 63 6f 6d 70  mmonly used comp
34a80 75 74 61 74 69 6f 6e 20 61 73 73 6f 63 69 61 74  utation associat
34a90 65 64 20 77 69 74 68 0a 2a 2a 20 4c 49 4d 49 54  ed with.** LIMIT
34aa0 20 61 6e 64 20 4f 46 46 53 45 54 20 70 72 6f 63   and OFFSET proc
34ab0 65 73 73 2e 20 20 72 5b 50 31 5d 20 68 6f 6c 64  ess.  r[P1] hold
34ac0 73 20 74 68 65 20 6c 69 6d 69 74 20 63 6f 75 6e  s the limit coun
34ad0 74 65 72 2e 20 20 72 5b 50 33 5d 0a 2a 2a 20 68  ter.  r[P3].** h
34ae0 6f 6c 64 73 20 74 68 65 20 6f 66 66 73 65 74 20  olds the offset 
34af0 63 6f 75 6e 74 65 72 2e 20 20 54 68 65 20 6f 70  counter.  The op
34b00 63 6f 64 65 20 63 6f 6d 70 75 74 65 73 20 74 68  code computes th
34b10 65 20 63 6f 6d 62 69 6e 65 64 20 76 61 6c 75 65  e combined value
34b20 0a 2a 2a 20 6f 66 20 74 68 65 20 4c 49 4d 49 54  .** of the LIMIT
34b30 20 61 6e 64 20 4f 46 46 53 45 54 20 61 6e 64 20   and OFFSET and 
34b40 73 74 6f 72 65 73 20 74 68 61 74 20 76 61 6c 75  stores that valu
34b50 65 20 69 6e 20 72 5b 50 32 5d 2e 20 20 54 68 65  e in r[P2].  The
34b60 20 72 5b 50 32 5d 0a 2a 2a 20 76 61 6c 75 65 20   r[P2].** value 
34b70 63 6f 6d 70 75 74 65 64 20 69 73 20 74 68 65 20  computed is the 
34b80 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
34b90 72 6f 77 73 20 74 68 61 74 20 77 69 6c 6c 20 6e  rows that will n
34ba0 65 65 64 20 74 6f 20 62 65 0a 2a 2a 20 76 69 73  eed to be.** vis
34bb0 69 74 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f  ited in order to
34bc0 20 63 6f 6d 70 6c 65 74 65 20 74 68 65 20 71 75   complete the qu
34bd0 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 72 5b  ery..**.** If r[
34be0 50 33 5d 20 69 73 20 7a 65 72 6f 20 6f 72 20 6e  P3] is zero or n
34bf0 65 67 61 74 69 76 65 2c 20 74 68 61 74 20 6d 65  egative, that me
34c00 61 6e 73 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ans there is no 
34c10 4f 46 46 53 45 54 0a 2a 2a 20 61 6e 64 20 72 5b  OFFSET.** and r[
34c20 50 32 5d 20 69 73 20 73 65 74 20 74 6f 20 62 65  P2] is set to be
34c30 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
34c40 65 20 4c 49 4d 49 54 2c 20 72 5b 50 31 5d 2e 0a  e LIMIT, r[P1]..
34c50 2a 2a 0a 2a 2a 20 69 66 20 72 5b 50 31 5d 20 69  **.** if r[P1] i
34c60 73 20 7a 65 72 6f 20 6f 72 20 6e 65 67 61 74 69  s zero or negati
34c70 76 65 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  ve, that means t
34c80 68 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54  here is no LIMIT
34c90 0a 2a 2a 20 61 6e 64 20 72 5b 50 32 5d 20 69 73  .** and r[P2] is
34ca0 20 73 65 74 20 74 6f 20 2d 31 2e 20 0a 2a 2a 0a   set to -1. .**.
34cb0 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 72 5b  ** Otherwise, r[
34cc0 50 32 5d 20 69 73 20 73 65 74 20 74 6f 20 74 68  P2] is set to th
34cd0 65 20 73 75 6d 20 6f 66 20 72 5b 50 31 5d 20 61  e sum of r[P1] a
34ce0 6e 64 20 72 5b 50 33 5d 2e 0a 2a 2f 0a 63 61 73  nd r[P3]..*/.cas
34cf0 65 20 4f 50 5f 4f 66 66 73 65 74 4c 69 6d 69 74  e OP_OffsetLimit
34d00 3a 20 7b 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6f  : {    /* in1, o
34d10 75 74 32 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 36  ut2, in3 */.  i6
34d20 34 20 78 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  4 x;.  pIn1 = &a
34d30 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
34d40 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
34d50 2d 3e 70 33 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p3];.  pOut = 
34d60 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
34d70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74  , pOp);.  assert
34d80 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
34d90 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73  MEM_Int );.  ass
34da0 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73  ert( pIn3->flags
34db0 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20   & MEM_Int );.  
34dc0 78 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20  x = pIn1->u.i;. 
34dd0 20 69 66 28 20 78 3c 3d 30 20 7c 7c 20 73 71 6c   if( x<=0 || sql
34de0 69 74 65 33 41 64 64 49 6e 74 36 34 28 26 78 2c  ite3AddInt64(&x,
34df0 20 70 49 6e 33 2d 3e 75 2e 69 3e 30 3f 70 49 6e   pIn3->u.i>0?pIn
34e00 33 2d 3e 75 2e 69 3a 30 29 20 29 7b 0a 20 20 20  3->u.i:0) ){.   
34e10 20 2f 2a 20 49 66 20 74 68 65 20 4c 49 4d 49 54   /* If the LIMIT
34e20 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72   is less than or
34e30 20 65 71 75 61 6c 20 74 6f 20 7a 65 72 6f 2c 20   equal to zero, 
34e40 6c 6f 6f 70 20 66 6f 72 65 76 65 72 2e 20 20 54  loop forever.  T
34e50 68 69 73 0a 20 20 20 20 2a 2a 20 69 73 20 64 6f  his.    ** is do
34e60 63 75 6d 65 6e 74 65 64 2e 20 20 42 75 74 20 61  cumented.  But a
34e70 6c 73 6f 2c 20 69 66 20 74 68 65 20 4c 49 4d 49  lso, if the LIMI
34e80 54 2b 4f 46 46 53 45 54 20 65 78 63 65 65 64 73  T+OFFSET exceeds
34e90 20 32 5e 36 33 20 74 68 65 6e 0a 20 20 20 20 2a   2^63 then.    *
34ea0 2a 20 61 6c 73 6f 20 6c 6f 6f 70 20 66 6f 72 65  * also loop fore
34eb0 76 65 72 2e 20 20 54 68 69 73 20 69 73 20 75 6e  ver.  This is un
34ec0 64 6f 63 75 6d 65 6e 74 65 64 2e 20 20 49 6e 20  documented.  In 
34ed0 66 61 63 74 2c 20 6f 6e 65 20 63 6f 75 6c 64 20  fact, one could 
34ee0 61 72 67 75 65 0a 20 20 20 20 2a 2a 20 74 68 61  argue.    ** tha
34ef0 74 20 74 68 65 20 6c 6f 6f 70 20 73 68 6f 75 6c  t the loop shoul
34f00 64 20 74 65 72 6d 69 6e 61 74 65 2e 20 20 42 75  d terminate.  Bu
34f10 74 20 61 73 73 75 6d 69 6e 67 20 31 20 62 69 6c  t assuming 1 bil
34f20 6c 69 6f 6e 20 69 74 65 72 61 74 69 6f 6e 73 0a  lion iterations.
34f30 20 20 20 20 2a 2a 20 70 65 72 20 73 65 63 6f 6e      ** per secon
34f40 64 20 28 66 61 72 20 65 78 63 65 65 64 69 6e 67  d (far exceeding
34f50 20 74 68 65 20 63 61 70 61 62 69 6c 69 74 69 65   the capabilitie
34f60 73 20 6f 66 20 61 6e 79 20 63 75 72 72 65 6e 74  s of any current
34f70 20 68 61 72 64 77 61 72 65 29 0a 20 20 20 20 2a   hardware).    *
34f80 2a 20 69 74 20 77 6f 75 6c 64 20 74 61 6b 65 20  * it would take 
34f90 6e 65 61 72 6c 79 20 33 30 30 20 79 65 61 72 73  nearly 300 years
34fa0 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 72 65 61   to actually rea
34fb0 63 68 20 74 68 65 20 6c 69 6d 69 74 2e 20 20 53  ch the limit.  S
34fc0 6f 0a 20 20 20 20 2a 2a 20 6c 6f 6f 70 69 6e 67  o.    ** looping
34fd0 20 66 6f 72 65 76 65 72 20 69 73 20 61 20 72 65   forever is a re
34fe0 61 73 6f 6e 61 62 6c 65 20 61 70 70 72 6f 78 69  asonable approxi
34ff0 6d 61 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 70  mation. */.    p
35000 4f 75 74 2d 3e 75 2e 69 20 3d 20 2d 31 3b 0a 20  Out->u.i = -1;. 
35010 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74   }else{.    pOut
35020 2d 3e 75 2e 69 20 3d 20 78 3b 0a 20 20 7d 0a 20  ->u.i = x;.  }. 
35030 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
35040 63 6f 64 65 3a 20 49 66 4e 6f 74 5a 65 72 6f 20  code: IfNotZero 
35050 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
35060 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
35070 5d 21 3d 30 20 74 68 65 6e 20 72 5b 50 31 5d 2d  ]!=0 then r[P1]-
35080 2d 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  -, goto P2.**.**
35090 20 52 65 67 69 73 74 65 72 20 50 31 20 6d 75 73   Register P1 mus
350a0 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
350b0 65 67 65 72 2e 20 20 49 66 20 74 68 65 20 63 6f  eger.  If the co
350c0 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
350d0 72 20 50 31 20 69 73 0a 2a 2a 20 69 6e 69 74 69  r P1 is.** initi
350e0 61 6c 6c 79 20 67 72 65 61 74 65 72 20 74 68 61  ally greater tha
350f0 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 64 65 63  n zero, then dec
35100 72 65 6d 65 6e 74 20 74 68 65 20 76 61 6c 75 65  rement the value
35110 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
35120 0a 2a 2a 20 49 66 20 69 74 20 69 73 20 6e 6f 6e  .** If it is non
35130 2d 7a 65 72 6f 20 28 6e 65 67 61 74 69 76 65 20  -zero (negative 
35140 6f 72 20 70 6f 73 69 74 69 76 65 29 20 61 6e 64  or positive) and
35150 20 74 68 65 6e 20 61 6c 73 6f 20 6a 75 6d 70 20   then also jump 
35160 74 6f 20 50 32 2e 20 20 0a 2a 2a 20 49 66 20 72  to P2.  .** If r
35170 65 67 69 73 74 65 72 20 50 31 20 69 73 20 69 6e  egister P1 is in
35180 69 74 69 61 6c 6c 79 20 7a 65 72 6f 2c 20 6c 65  itially zero, le
35190 61 76 65 20 69 74 20 75 6e 63 68 61 6e 67 65 64  ave it unchanged
351a0 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67   and fall throug
351b0 68 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  h..*/.case OP_If
351c0 4e 6f 74 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20  NotZero: {      
351d0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
351e0 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
351f0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
35200 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
35210 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64  &MEM_Int );.  Vd
35220 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49  beBranchTaken(pI
35230 6e 31 2d 3e 75 2e 69 3c 30 2c 20 32 29 3b 0a 20  n1->u.i<0, 2);. 
35240 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 20 29   if( pIn1->u.i )
35250 7b 0a 20 20 20 20 20 69 66 28 20 70 49 6e 31 2d  {.     if( pIn1-
35260 3e 75 2e 69 3e 30 20 29 20 70 49 6e 31 2d 3e 75  >u.i>0 ) pIn1->u
35270 2e 69 2d 2d 3b 0a 20 20 20 20 20 67 6f 74 6f 20  .i--;.     goto 
35280 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
35290 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
352a0 70 63 6f 64 65 3a 20 44 65 63 72 4a 75 6d 70 5a  pcode: DecrJumpZ
352b0 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ero P1 P2 * * *.
352c0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
352d0 28 2d 2d 72 5b 50 31 5d 29 3d 3d 30 20 67 6f 74  (--r[P1])==0 got
352e0 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  o P2.**.** Regis
352f0 74 65 72 20 50 31 20 6d 75 73 74 20 68 6f 6c 64  ter P1 must hold
35300 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 44 65   an integer.  De
35310 63 72 65 6d 65 6e 74 20 74 68 65 20 76 61 6c 75  crement the valu
35320 65 20 69 6e 20 50 31 0a 2a 2a 20 61 6e 64 20 6a  e in P1.** and j
35330 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
35340 20 6e 65 77 20 76 61 6c 75 65 20 69 73 20 65 78   new value is ex
35350 61 63 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2f 0a 63  actly zero..*/.c
35360 61 73 65 20 4f 50 5f 44 65 63 72 4a 75 6d 70 5a  ase OP_DecrJumpZ
35370 65 72 6f 3a 20 7b 20 20 20 20 20 20 2f 2a 20 6a  ero: {      /* j
35380 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
35390 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
353a0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
353b0 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In1->flags&MEM_I
353c0 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  nt );.  if( pIn1
353d0 2d 3e 75 2e 69 3e 53 4d 41 4c 4c 45 53 54 5f 49  ->u.i>SMALLEST_I
353e0 4e 54 36 34 20 29 20 70 49 6e 31 2d 3e 75 2e 69  NT64 ) pIn1->u.i
353f0 2d 2d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  --;.  VdbeBranch
35400 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3d  Taken(pIn1->u.i=
35410 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49  =0, 2);.  if( pI
35420 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 20 67 6f 74  n1->u.i==0 ) got
35430 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
35440 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
35450 63 6f 64 65 3a 20 41 67 67 53 74 65 70 20 2a 20  code: AggStep * 
35460 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
35470 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72  ynopsis: accum=r
35480 5b 50 33 5d 20 73 74 65 70 28 72 5b 50 32 40 50  [P3] step(r[P2@P
35490 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74  5]).**.** Execut
354a0 65 20 74 68 65 20 78 53 74 65 70 20 66 75 6e 63  e the xStep func
354b0 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72  tion for an aggr
354c0 65 67 61 74 65 2e 0a 2a 2a 20 54 68 65 20 66 75  egate..** The fu
354d0 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61 72  nction has P5 ar
354e0 67 75 6d 65 6e 74 73 2e 20 20 50 34 20 69 73 20  guments.  P4 is 
354f0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
35500 20 0a 2a 2a 20 46 75 6e 63 44 65 66 20 73 74 72   .** FuncDef str
35510 75 63 74 75 72 65 20 74 68 61 74 20 73 70 65 63  ucture that spec
35520 69 66 69 65 73 20 74 68 65 20 66 75 6e 63 74 69  ifies the functi
35530 6f 6e 2e 20 20 52 65 67 69 73 74 65 72 20 50 33  on.  Register P3
35540 20 69 73 20 74 68 65 0a 2a 2a 20 61 63 63 75 6d   is the.** accum
35550 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68  ulator..**.** Th
35560 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61  e P5 arguments a
35570 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65  re taken from re
35580 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 69 74  gister P2 and it
35590 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e  s.** successors.
355a0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .*/./* Opcode: A
355b0 67 67 49 6e 76 65 72 73 65 20 2a 20 50 32 20 50  ggInverse * P2 P
355c0 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
355d0 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d  sis: accum=r[P3]
355e0 20 69 6e 76 65 72 73 65 28 72 5b 50 32 40 50 35   inverse(r[P2@P5
355f0 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65  ]).**.** Execute
35600 20 74 68 65 20 78 49 6e 76 65 72 73 65 20 66 75   the xInverse fu
35610 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67  nction for an ag
35620 67 72 65 67 61 74 65 2e 0a 2a 2a 20 54 68 65 20  gregate..** The 
35630 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20  function has P5 
35640 61 72 67 75 6d 65 6e 74 73 2e 20 20 50 34 20 69  arguments.  P4 i
35650 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
35660 68 65 20 0a 2a 2a 20 46 75 6e 63 44 65 66 20 73  he .** FuncDef s
35670 74 72 75 63 74 75 72 65 20 74 68 61 74 20 73 70  tructure that sp
35680 65 63 69 66 69 65 73 20 74 68 65 20 66 75 6e 63  ecifies the func
35690 74 69 6f 6e 2e 20 20 52 65 67 69 73 74 65 72 20  tion.  Register 
356a0 50 33 20 69 73 20 74 68 65 0a 2a 2a 20 61 63 63  P3 is the.** acc
356b0 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20  umulator..**.** 
356c0 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73  The P5 arguments
356d0 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20   are taken from 
356e0 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20  register P2 and 
356f0 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72  its.** successor
35700 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  s..*/./* Opcode:
35710 20 41 67 67 53 74 65 70 31 20 50 31 20 50 32 20   AggStep1 P1 P2 
35720 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
35730 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33  psis: accum=r[P3
35740 5d 20 73 74 65 70 28 72 5b 50 32 40 50 35 5d 29  ] step(r[P2@P5])
35750 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74  .**.** Execute t
35760 68 65 20 78 53 74 65 70 20 28 69 66 20 50 31 3d  he xStep (if P1=
35770 3d 30 29 20 6f 72 20 78 49 6e 76 65 72 73 65 20  =0) or xInverse 
35780 28 69 66 20 50 31 21 3d 30 29 20 66 75 6e 63 74  (if P1!=0) funct
35790 69 6f 6e 20 66 6f 72 20 61 6e 0a 2a 2a 20 61 67  ion for an.** ag
357a0 67 72 65 67 61 74 65 2e 20 20 54 68 65 20 66 75  gregate.  The fu
357b0 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61 72  nction has P5 ar
357c0 67 75 6d 65 6e 74 73 2e 20 20 50 34 20 69 73 20  guments.  P4 is 
357d0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
357e0 20 0a 2a 2a 20 46 75 6e 63 44 65 66 20 73 74 72   .** FuncDef str
357f0 75 63 74 75 72 65 20 74 68 61 74 20 73 70 65 63  ucture that spec
35800 69 66 69 65 73 20 74 68 65 20 66 75 6e 63 74 69  ifies the functi
35810 6f 6e 2e 20 20 52 65 67 69 73 74 65 72 20 50 33  on.  Register P3
35820 20 69 73 20 74 68 65 0a 2a 2a 20 61 63 63 75 6d   is the.** accum
35830 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68  ulator..**.** Th
35840 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61  e P5 arguments a
35850 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65  re taken from re
35860 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 69 74  gister P2 and it
35870 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e  s.** successors.
35880 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
35890 64 65 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20  de is initially 
358a0 63 6f 64 65 64 20 61 73 20 4f 50 5f 41 67 67 53  coded as OP_AggS
358b0 74 65 70 30 2e 20 20 4f 6e 20 66 69 72 73 74 20  tep0.  On first 
358c0 65 76 61 6c 75 61 74 69 6f 6e 2c 0a 2a 2a 20 74  evaluation,.** t
358d0 68 65 20 46 75 6e 63 44 65 66 20 73 74 6f 72 65  he FuncDef store
358e0 64 20 69 6e 20 50 34 20 69 73 20 63 6f 6e 76 65  d in P4 is conve
358f0 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 73 71 6c  rted into an sql
35900 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 61 6e 64  ite3_context and
35910 0a 2a 2a 20 74 68 65 20 6f 70 63 6f 64 65 20 69  .** the opcode i
35920 73 20 63 68 61 6e 67 65 64 2e 20 20 49 6e 20 74  s changed.  In t
35930 68 69 73 20 77 61 79 2c 20 74 68 65 20 69 6e 69  his way, the ini
35940 74 69 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 20 74  tialization of t
35950 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f  he.** sqlite3_co
35960 6e 74 65 78 74 20 6f 6e 6c 79 20 68 61 70 70 65  ntext only happe
35970 6e 73 20 6f 6e 63 65 2c 20 69 6e 73 74 65 61 64  ns once, instead
35980 20 6f 66 20 6f 6e 20 65 61 63 68 20 63 61 6c 6c   of on each call
35990 20 74 6f 20 74 68 65 0a 2a 2a 20 73 74 65 70 20   to the.** step 
359a0 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  function..*/.cas
359b0 65 20 4f 50 5f 41 67 67 49 6e 76 65 72 73 65 3a  e OP_AggInverse:
359c0 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65 70  .case OP_AggStep
359d0 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 73  : {.  int n;.  s
359e0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
359f0 70 43 74 78 3b 0a 0a 20 20 61 73 73 65 72 74 28  pCtx;..  assert(
35a00 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
35a10 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20 20 6e 20  _FUNCDEF );.  n 
35a20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73  = pOp->p5;.  ass
35a30 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
35a40 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  & pOp->p3<=(p->n
35a50 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
35a60 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  or) );.  assert(
35a70 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70   n==0 || (pOp->p
35a80 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e  2>0 && pOp->p2+n
35a90 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
35aa0 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 29 20 29 3b  ->nCursor)+1) );
35ab0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
35ac0 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f  p3<pOp->p2 || pO
35ad0 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e  p->p3>=pOp->p2+n
35ae0 20 29 3b 0a 20 20 70 43 74 78 20 3d 20 73 71 6c   );.  pCtx = sql
35af0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e  ite3DbMallocRawN
35b00 4e 28 64 62 2c 20 6e 2a 73 69 7a 65 6f 66 28 73  N(db, n*sizeof(s
35b10 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 20 2b  qlite3_value*) +
35b20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35b30 28 73 69 7a 65 6f 66 28 70 43 74 78 5b 30 5d 29  (sizeof(pCtx[0])
35b40 20 2b 20 73 69 7a 65 6f 66 28 4d 65 6d 29 20 2d   + sizeof(Mem) -
35b50 20 73 69 7a 65 6f 66 28 73 71 6c 69 74 65 33 5f   sizeof(sqlite3_
35b60 76 61 6c 75 65 2a 29 29 29 3b 0a 20 20 69 66 28  value*)));.  if(
35b70 20 70 43 74 78 3d 3d 30 20 29 20 67 6f 74 6f 20   pCtx==0 ) goto 
35b80 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 74 78 2d 3e  no_mem;.  pCtx->
35b90 70 4d 65 6d 20 3d 20 30 3b 0a 20 20 70 43 74 78  pMem = 0;.  pCtx
35ba0 2d 3e 70 4f 75 74 20 3d 20 28 4d 65 6d 2a 29 26  ->pOut = (Mem*)&
35bb0 28 70 43 74 78 2d 3e 61 72 67 76 5b 6e 5d 29 3b  (pCtx->argv[n]);
35bc0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
35bd0 6d 49 6e 69 74 28 70 43 74 78 2d 3e 70 4f 75 74  mInit(pCtx->pOut
35be0 2c 20 64 62 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  , db, MEM_Null);
35bf0 0a 20 20 70 43 74 78 2d 3e 70 46 75 6e 63 20 3d  .  pCtx->pFunc =
35c00 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a   pOp->p4.pFunc;.
35c10 20 20 70 43 74 78 2d 3e 69 4f 70 20 3d 20 28 69    pCtx->iOp = (i
35c20 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a  nt)(pOp - aOp);.
35c30 20 20 70 43 74 78 2d 3e 70 56 64 62 65 20 3d 20    pCtx->pVdbe = 
35c40 70 3b 0a 20 20 70 43 74 78 2d 3e 73 6b 69 70 46  p;.  pCtx->skipF
35c50 6c 61 67 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d  lag = 0;.  pCtx-
35c60 3e 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20  >isError = 0;.  
35c70 70 43 74 78 2d 3e 61 72 67 63 20 3d 20 6e 3b 0a  pCtx->argc = n;.
35c80 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20    pOp->p4type = 
35c90 50 34 5f 46 55 4e 43 43 54 58 3b 0a 20 20 70 4f  P4_FUNCCTX;.  pO
35ca0 70 2d 3e 70 34 2e 70 43 74 78 20 3d 20 70 43 74  p->p4.pCtx = pCt
35cb0 78 3b 0a 0a 20 20 2f 2a 20 4f 50 5f 41 67 67 49  x;..  /* OP_AggI
35cc0 6e 76 65 72 73 65 20 6d 75 73 74 20 68 61 76 65  nverse must have
35cd0 20 50 31 3d 3d 31 20 61 6e 64 20 4f 50 5f 41 67   P1==1 and OP_Ag
35ce0 67 53 74 65 70 20 6d 75 73 74 20 68 61 76 65 20  gStep must have 
35cf0 50 31 3d 3d 30 20 2a 2f 0a 20 20 61 73 73 65 72  P1==0 */.  asser
35d00 74 28 20 70 4f 70 2d 3e 70 31 3d 3d 28 70 4f 70  t( pOp->p1==(pOp
35d10 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 67 67  ->opcode==OP_Agg
35d20 49 6e 76 65 72 73 65 29 20 29 3b 0a 0a 20 20 70  Inverse) );..  p
35d30 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f  Op->opcode = OP_
35d40 41 67 67 53 74 65 70 31 3b 0a 20 20 2f 2a 20 46  AggStep1;.  /* F
35d50 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f  all through into
35d60 20 4f 50 5f 41 67 67 53 74 65 70 20 2a 2f 0a 7d   OP_AggStep */.}
35d70 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65 70  .case OP_AggStep
35d80 31 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  1: {.  int i;.  
35d90 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
35da0 2a 70 43 74 78 3b 0a 20 20 4d 65 6d 20 2a 70 4d  *pCtx;.  Mem *pM
35db0 65 6d 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  em;..  assert( p
35dc0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46  Op->p4type==P4_F
35dd0 55 4e 43 43 54 58 20 29 3b 0a 20 20 70 43 74 78  UNCCTX );.  pCtx
35de0 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78 3b   = pOp->p4.pCtx;
35df0 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b  .  pMem = &aMem[
35e00 70 4f 70 2d 3e 70 33 5d 3b 0a 0a 23 69 66 64 65  pOp->p3];..#ifde
35e10 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
35e20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a   if( pOp->p1 ){.
35e30 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 61      /* This is a
35e40 6e 20 4f 50 5f 41 67 67 49 6e 76 65 72 73 65 20  n OP_AggInverse 
35e50 63 61 6c 6c 2e 20 20 56 65 72 69 66 79 20 74 68  call.  Verify th
35e60 61 74 20 78 53 74 65 70 20 68 61 73 20 61 6c 77  at xStep has alw
35e70 61 79 73 0a 20 20 20 20 2a 2a 20 62 65 65 6e 20  ays.    ** been 
35e80 63 61 6c 6c 65 64 20 61 74 20 6c 65 61 73 74 20  called at least 
35e90 6f 6e 63 65 20 70 72 69 6f 72 20 74 6f 20 61 6e  once prior to an
35ea0 79 20 78 49 6e 76 65 72 73 65 20 63 61 6c 6c 2e  y xInverse call.
35eb0 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20   */.    assert( 
35ec0 70 4d 65 6d 2d 3e 75 54 65 6d 70 3d 3d 30 78 31  pMem->uTemp==0x1
35ed0 31 32 32 65 30 65 33 20 29 3b 0a 20 20 7d 65 6c  122e0e3 );.  }el
35ee0 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20  se{.    /* This 
35ef0 69 73 20 61 6e 20 4f 50 5f 41 67 67 53 74 65 70  is an OP_AggStep
35f00 20 63 61 6c 6c 2e 20 20 4d 61 72 6b 20 69 74 20   call.  Mark it 
35f10 61 73 20 73 75 63 68 2e 20 2a 2f 0a 20 20 20 20  as such. */.    
35f20 70 4d 65 6d 2d 3e 75 54 65 6d 70 20 3d 20 30 78  pMem->uTemp = 0x
35f30 31 31 32 32 65 30 65 33 3b 0a 20 20 7d 0a 23 65  1122e0e3;.  }.#e
35f40 6e 64 69 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68  ndif..  /* If th
35f50 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69  is function is i
35f60 6e 73 69 64 65 20 6f 66 20 61 20 74 72 69 67 67  nside of a trigg
35f70 65 72 2c 20 74 68 65 20 72 65 67 69 73 74 65 72  er, the register
35f80 20 61 72 72 61 79 20 69 6e 20 61 4d 65 6d 5b 5d   array in aMem[]
35f90 0a 20 20 2a 2a 20 6d 69 67 68 74 20 63 68 61 6e  .  ** might chan
35fa0 67 65 20 66 72 6f 6d 20 6f 6e 65 20 65 76 61 6c  ge from one eval
35fb0 75 61 74 69 6f 6e 20 74 6f 20 74 68 65 20 6e 65  uation to the ne
35fc0 78 74 2e 20 20 54 68 65 20 6e 65 78 74 20 62 6c  xt.  The next bl
35fd0 6f 63 6b 20 6f 66 20 63 6f 64 65 0a 20 20 2a 2a  ock of code.  **
35fe0 20 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69   checks to see i
35ff0 66 20 74 68 65 20 72 65 67 69 73 74 65 72 20 61  f the register a
36000 72 72 61 79 20 68 61 73 20 63 68 61 6e 67 65 64  rray has changed
36010 2c 20 61 6e 64 20 69 66 20 73 6f 20 69 74 0a 20  , and if so it. 
36020 20 2a 2a 20 72 65 69 6e 69 74 69 61 6c 69 7a 65   ** reinitialize
36030 73 20 74 68 65 20 72 65 6c 61 76 61 6e 74 20 70  s the relavant p
36040 61 72 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69  arts of the sqli
36050 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65  te3_context obje
36060 63 74 20 2a 2f 0a 20 20 69 66 28 20 70 43 74 78  ct */.  if( pCtx
36070 2d 3e 70 4d 65 6d 20 21 3d 20 70 4d 65 6d 20 29  ->pMem != pMem )
36080 7b 0a 20 20 20 20 70 43 74 78 2d 3e 70 4d 65 6d  {.    pCtx->pMem
36090 20 3d 20 70 4d 65 6d 3b 0a 20 20 20 20 66 6f 72   = pMem;.    for
360a0 28 69 3d 70 43 74 78 2d 3e 61 72 67 63 2d 31 3b  (i=pCtx->argc-1;
360b0 20 69 3e 3d 30 3b 20 69 2d 2d 29 20 70 43 74 78   i>=0; i--) pCtx
360c0 2d 3e 61 72 67 76 5b 69 5d 20 3d 20 26 61 4d 65  ->argv[i] = &aMe
360d0 6d 5b 70 4f 70 2d 3e 70 32 2b 69 5d 3b 0a 20 20  m[pOp->p2+i];.  
360e0 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  }..#ifdef SQLITE
360f0 5f 44 45 42 55 47 0a 20 20 66 6f 72 28 69 3d 30  _DEBUG.  for(i=0
36100 3b 20 69 3c 70 43 74 78 2d 3e 61 72 67 63 3b 20  ; i<pCtx->argc; 
36110 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  i++){.    assert
36120 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 43 74  ( memIsValid(pCt
36130 78 2d 3e 61 72 67 76 5b 69 5d 29 20 29 3b 0a 20  x->argv[i]) );. 
36140 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
36150 45 28 70 4f 70 2d 3e 70 32 2b 69 2c 20 70 43 74  E(pOp->p2+i, pCt
36160 78 2d 3e 61 72 67 76 5b 69 5d 29 3b 0a 20 20 7d  x->argv[i]);.  }
36170 0a 23 65 6e 64 69 66 0a 0a 20 20 70 4d 65 6d 2d  .#endif..  pMem-
36180 3e 6e 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20  >n++;.  assert( 
36190 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 66 6c 61 67  pCtx->pOut->flag
361a0 73 3d 3d 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20  s==MEM_Null );. 
361b0 20 61 73 73 65 72 74 28 20 70 43 74 78 2d 3e 69   assert( pCtx->i
361c0 73 45 72 72 6f 72 3d 3d 30 20 29 3b 0a 20 20 61  sError==0 );.  a
361d0 73 73 65 72 74 28 20 70 43 74 78 2d 3e 73 6b 69  ssert( pCtx->ski
361e0 70 46 6c 61 67 3d 3d 30 20 29 3b 0a 23 69 66 6e  pFlag==0 );.#ifn
361f0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
36200 57 49 4e 44 4f 57 46 55 4e 43 0a 20 20 69 66 28  WINDOWFUNC.  if(
36210 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20   pOp->p1 ){.    
36220 28 70 43 74 78 2d 3e 70 46 75 6e 63 2d 3e 78 49  (pCtx->pFunc->xI
36230 6e 76 65 72 73 65 29 28 70 43 74 78 2c 70 43 74  nverse)(pCtx,pCt
36240 78 2d 3e 61 72 67 63 2c 70 43 74 78 2d 3e 61 72  x->argc,pCtx->ar
36250 67 76 29 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e  gv);.  }else.#en
36260 64 69 66 0a 20 20 28 70 43 74 78 2d 3e 70 46 75  dif.  (pCtx->pFu
36270 6e 63 2d 3e 78 53 46 75 6e 63 29 28 70 43 74 78  nc->xSFunc)(pCtx
36280 2c 70 43 74 78 2d 3e 61 72 67 63 2c 70 43 74 78  ,pCtx->argc,pCtx
36290 2d 3e 61 72 67 76 29 3b 20 2f 2a 20 49 4d 50 3a  ->argv); /* IMP:
362a0 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a   R-24505-23230 *
362b0 2f 0a 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 69  /..  if( pCtx->i
362c0 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 69 66  sError ){.    if
362d0 28 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 3e  ( pCtx->isError>
362e0 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
362f0 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22  e3VdbeError(p, "
36300 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  %s", sqlite3_val
36310 75 65 5f 74 65 78 74 28 70 43 74 78 2d 3e 70 4f  ue_text(pCtx->pO
36320 75 74 29 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  ut));.      rc =
36330 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 3b 0a   pCtx->isError;.
36340 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 43      }.    if( pC
36350 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20 29 7b 0a  tx->skipFlag ){.
36360 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
36370 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  p[-1].opcode==OP
36380 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20  _CollSeq );.    
36390 20 20 69 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 31    i = pOp[-1].p1
363a0 3b 0a 20 20 20 20 20 20 69 66 28 20 69 20 29 20  ;.      if( i ) 
363b0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
363c0 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 69 5d 2c  tInt64(&aMem[i],
363d0 20 31 29 3b 0a 20 20 20 20 20 20 70 43 74 78 2d   1);.      pCtx-
363e0 3e 73 6b 69 70 46 6c 61 67 20 3d 20 30 3b 0a 20  >skipFlag = 0;. 
363f0 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
36400 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70  VdbeMemRelease(p
36410 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 20 20 20 20  Ctx->pOut);.    
36420 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 66 6c 61 67  pCtx->pOut->flag
36430 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
36440 20 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 20    pCtx->isError 
36450 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 72 63 20  = 0;.    if( rc 
36460 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
36470 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20  _to_error;.  }. 
36480 20 61 73 73 65 72 74 28 20 70 43 74 78 2d 3e 70   assert( pCtx->p
36490 4f 75 74 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f  Out->flags==MEM_
364a0 4e 75 6c 6c 20 29 3b 0a 20 20 61 73 73 65 72 74  Null );.  assert
364b0 28 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67  ( pCtx->skipFlag
364c0 3d 3d 30 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  ==0 );.  break;.
364d0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67  }../* Opcode: Ag
364e0 67 46 69 6e 61 6c 20 50 31 20 50 32 20 2a 20 50  gFinal P1 P2 * P
364f0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
36500 20 61 63 63 75 6d 3d 72 5b 50 31 5d 20 4e 3d 50   accum=r[P1] N=P
36510 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68  2.**.** P1 is th
36520 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  e memory locatio
36530 6e 20 74 68 61 74 20 69 73 20 74 68 65 20 61 63  n that is the ac
36540 63 75 6d 75 6c 61 74 6f 72 20 66 6f 72 20 61 6e  cumulator for an
36550 20 61 67 67 72 65 67 61 74 65 0a 2a 2a 20 6f 72   aggregate.** or
36560 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e   window function
36570 2e 20 20 45 78 65 63 75 74 65 20 74 68 65 20 66  .  Execute the f
36580 69 6e 61 6c 69 7a 65 72 20 66 75 6e 63 74 69 6f  inalizer functio
36590 6e 20 0a 2a 2a 20 66 6f 72 20 61 6e 20 61 67 67  n .** for an agg
365a0 72 65 67 61 74 65 20 61 6e 64 20 73 74 6f 72 65  regate and store
365b0 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 50   the result in P
365c0 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74  1..**.** P2 is t
365d0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67  he number of arg
365e0 75 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65 20  uments that the 
365f0 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74 61  step function ta
36600 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73  kes and.** P4 is
36610 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
36620 65 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74 68  e FuncDef for th
36630 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68  is function.  Th
36640 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  e P2.** argument
36650 20 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20   is not used by 
36660 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49 74  this opcode.  It
36670 20 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20 74   is only there t
36680 6f 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a 2a  o disambiguate.*
36690 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74  * functions that
366a0 20 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69 6e   can take varyin
366b0 67 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72 67  g numbers of arg
366c0 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20  uments.  The.** 
366d0 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f  P4 argument is o
366e0 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20 74  nly needed for t
366f0 68 65 20 63 61 73 65 20 77 68 65 72 65 0a 2a 2a  he case where.**
36700 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69   the step functi
36710 6f 6e 20 77 61 73 20 6e 6f 74 20 70 72 65 76 69  on was not previ
36720 6f 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f  ously called..*/
36730 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 56  ./* Opcode: AggV
36740 61 6c 75 65 20 2a 20 50 32 20 50 33 20 50 34 20  alue * P2 P3 P4 
36750 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
36760 5b 50 33 5d 3d 76 61 6c 75 65 20 4e 3d 50 32 0a  [P3]=value N=P2.
36770 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65  **.** Invoke the
36780 20 78 56 61 6c 75 65 28 29 20 66 75 6e 63 74 69   xValue() functi
36790 6f 6e 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  on and store the
367a0 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
367b0 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 50 32  ter P3..**.** P2
367c0 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
367d0 66 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74  f arguments that
367e0 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69   the step functi
367f0 6f 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20  on takes and.** 
36800 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
36810 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66 20 66  to the FuncDef f
36820 6f 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e  or this function
36830 2e 20 20 54 68 65 20 50 32 0a 2a 2a 20 61 72 67  .  The P2.** arg
36840 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75 73 65  ument is not use
36850 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65  d by this opcode
36860 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 74 68  .  It is only th
36870 65 72 65 20 74 6f 20 64 69 73 61 6d 62 69 67 75  ere to disambigu
36880 61 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  ate.** functions
36890 20 74 68 61 74 20 63 61 6e 20 74 61 6b 65 20 76   that can take v
368a0 61 72 79 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f  arying numbers o
368b0 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 54 68  f arguments.  Th
368c0 65 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e 74  e.** P4 argument
368d0 20 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20   is only needed 
368e0 66 6f 72 20 74 68 65 20 63 61 73 65 20 77 68 65  for the case whe
368f0 72 65 0a 2a 2a 20 74 68 65 20 73 74 65 70 20 66  re.** the step f
36900 75 6e 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20  unction was not 
36910 70 72 65 76 69 6f 75 73 6c 79 20 63 61 6c 6c 65  previously calle
36920 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67  d..*/.case OP_Ag
36930 67 56 61 6c 75 65 3a 0a 63 61 73 65 20 4f 50 5f  gValue:.case OP_
36940 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65  AggFinal: {.  Me
36950 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72  m *pMem;.  asser
36960 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20  t( pOp->p1>0 && 
36970 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p1<=(p->nMe
36980 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
36990 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
369a0 4f 70 2d 3e 70 33 3d 3d 30 20 7c 7c 20 70 4f 70  Op->p3==0 || pOp
369b0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 67 67  ->opcode==OP_Agg
369c0 56 61 6c 75 65 20 29 3b 0a 20 20 70 4d 65 6d 20  Value );.  pMem 
369d0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
369e0 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65  ;.  assert( (pMe
369f0 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d  m->flags & ~(MEM
36a00 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d  _Null|MEM_Agg))=
36a10 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  =0 );.#ifndef SQ
36a20 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57  LITE_OMIT_WINDOW
36a30 46 55 4e 43 0a 20 20 69 66 28 20 70 4f 70 2d 3e  FUNC.  if( pOp->
36a40 70 33 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  p3 ){.    rc = s
36a50 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 67 67  qlite3VdbeMemAgg
36a60 56 61 6c 75 65 28 70 4d 65 6d 2c 20 26 61 4d 65  Value(pMem, &aMe
36a70 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 70 4f 70 2d  m[pOp->p3], pOp-
36a80 3e 70 34 2e 70 46 75 6e 63 29 3b 0a 20 20 20 20  >p4.pFunc);.    
36a90 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pMem = &aMem[pOp
36aa0 2d 3e 70 33 5d 3b 0a 20 20 7d 65 6c 73 65 0a 23  ->p3];.  }else.#
36ab0 65 6e 64 69 66 0a 20 20 7b 0a 20 20 20 20 72 63  endif.  {.    rc
36ac0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
36ad0 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c 20  mFinalize(pMem, 
36ae0 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a  pOp->p4.pFunc);.
36af0 20 20 7d 0a 20 20 0a 20 20 69 66 28 20 72 63 20    }.  .  if( rc 
36b00 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
36b10 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c  beError(p, "%s",
36b20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
36b30 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20 20 20  ext(pMem));.    
36b40 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
36b50 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73  o_error;.  }.  s
36b60 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
36b70 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d 2c 20 65  Encoding(pMem, e
36b80 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44 41  ncoding);.  UPDA
36b90 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
36ba0 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20 73 71 6c  pMem);.  if( sql
36bb0 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
36bc0 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20 20 67  g(pMem) ){.    g
36bd0 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
36be0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
36bf0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
36c00 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  _WAL./* Opcode: 
36c10 43 68 65 63 6b 70 6f 69 6e 74 20 50 31 20 50 32  Checkpoint P1 P2
36c20 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68   P3 * *.**.** Ch
36c30 65 63 6b 70 6f 69 6e 74 20 64 61 74 61 62 61 73  eckpoint databas
36c40 65 20 50 31 2e 20 54 68 69 73 20 69 73 20 61 20  e P1. This is a 
36c50 6e 6f 2d 6f 70 20 69 66 20 50 31 20 69 73 20 6e  no-op if P1 is n
36c60 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 0a  ot currently in.
36c70 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e 20 50 61 72  ** WAL mode. Par
36c80 61 6d 65 74 65 72 20 50 32 20 69 73 20 6f 6e 65  ameter P2 is one
36c90 20 6f 66 20 53 51 4c 49 54 45 5f 43 48 45 43 4b   of SQLITE_CHECK
36ca0 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 2c 20 46  POINT_PASSIVE, F
36cb0 55 4c 4c 2c 0a 2a 2a 20 52 45 53 54 41 52 54 2c  ULL,.** RESTART,
36cc0 20 6f 72 20 54 52 55 4e 43 41 54 45 2e 20 20 57   or TRUNCATE.  W
36cd0 72 69 74 65 20 31 20 6f 72 20 30 20 69 6e 74 6f  rite 1 or 0 into
36ce0 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74 68 65 20   mem[P3] if the 
36cf0 63 68 65 63 6b 70 6f 69 6e 74 20 72 65 74 75 72  checkpoint retur
36d00 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53  ns.** SQLITE_BUS
36d10 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73 70 65 63  Y or not, respec
36d20 74 69 76 65 6c 79 2e 20 20 57 72 69 74 65 20 74  tively.  Write t
36d30 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  he number of pag
36d40 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20 57 41 4c  es in the.** WAL
36d50 20 61 66 74 65 72 20 74 68 65 20 63 68 65 63 6b   after the check
36d60 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b 50  point into mem[P
36d70 33 2b 31 5d 20 61 6e 64 20 74 68 65 20 6e 75 6d  3+1] and the num
36d80 62 65 72 20 6f 66 20 70 61 67 65 73 0a 2a 2a 20  ber of pages.** 
36d90 69 6e 20 74 68 65 20 57 41 4c 20 74 68 61 74 20  in the WAL that 
36da0 68 61 76 65 20 62 65 65 6e 20 63 68 65 63 6b 70  have been checkp
36db0 6f 69 6e 74 65 64 20 61 66 74 65 72 20 74 68 65  ointed after the
36dc0 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20 63   checkpoint.** c
36dd0 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f 20 6d 65  ompletes into me
36de0 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77 65 76 65  m[P3+2].  Howeve
36df0 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72 2c 20 6d  r on an error, m
36e00 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a 20  em[P3+1] and.** 
36e10 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65 20 69 6e  mem[P3+2] are in
36e20 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 2d 31 2e  itialized to -1.
36e30 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68 65 63  .*/.case OP_Chec
36e40 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20  kpoint: {.  int 
36e50 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
36e60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
36e70 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  oop counter */. 
36e80 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b 20 20 20   int aRes[3];   
36e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ea0 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a 20   /* Results */. 
36eb0 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20   Mem *pMem;     
36ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ed0 20 2f 2a 20 57 72 69 74 65 20 72 65 73 75 6c 74   /* Write result
36ee0 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61 73 73  s here */..  ass
36ef0 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
36f00 3d 3d 30 20 29 3b 0a 20 20 61 52 65 73 5b 30 5d  ==0 );.  aRes[0]
36f10 20 3d 20 30 3b 0a 20 20 61 52 65 73 5b 31 5d 20   = 0;.  aRes[1] 
36f20 3d 20 61 52 65 73 5b 32 5d 20 3d 20 2d 31 3b 0a  = aRes[2] = -1;.
36f30 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
36f40 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  2==SQLITE_CHECKP
36f50 4f 49 4e 54 5f 50 41 53 53 49 56 45 0a 20 20 20  OINT_PASSIVE.   
36f60 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d      || pOp->p2==
36f70 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
36f80 54 5f 46 55 4c 4c 0a 20 20 20 20 20 20 20 7c 7c  T_FULL.       ||
36f90 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
36fa0 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54  _CHECKPOINT_REST
36fb0 41 52 54 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f  ART.       || pO
36fc0 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48  p->p2==SQLITE_CH
36fd0 45 43 4b 50 4f 49 4e 54 5f 54 52 55 4e 43 41 54  ECKPOINT_TRUNCAT
36fe0 45 0a 20 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  E.  );.  rc = sq
36ff0 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28  lite3Checkpoint(
37000 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
37010 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31 5d 2c 20  ->p2, &aRes[1], 
37020 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20 69 66 28  &aRes[2]);.  if(
37030 20 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20 72   rc ){.    if( r
37040 63 21 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  c!=SQLITE_BUSY )
37050 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
37060 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 72 63  to_error;.    rc
37070 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
37080 20 20 61 52 65 73 5b 30 5d 20 3d 20 31 3b 0a 20    aRes[0] = 1;. 
37090 20 7d 0a 20 20 66 6f 72 28 69 3d 30 2c 20 70 4d   }.  for(i=0, pM
370a0 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
370b0 70 33 5d 3b 20 69 3c 33 3b 20 69 2b 2b 2c 20 70  p3]; i<3; i++, p
370c0 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69  Mem++){.    sqli
370d0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74  te3VdbeMemSetInt
370e0 36 34 28 70 4d 65 6d 2c 20 28 69 36 34 29 61 52  64(pMem, (i64)aR
370f0 65 73 5b 69 5d 29 3b 0a 20 20 7d 20 20 20 20 0a  es[i]);.  }    .
37100 20 20 62 72 65 61 6b 3b 0a 7d 3b 20 20 0a 23 65    break;.};  .#e
37110 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
37120 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41  LITE_OMIT_PRAGMA
37130 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 6f 75 72  ./* Opcode: Jour
37140 6e 61 6c 4d 6f 64 65 20 50 31 20 50 32 20 50 33  nalMode P1 P2 P3
37150 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67   * *.**.** Chang
37160 65 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f  e the journal mo
37170 64 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 50  de of database P
37180 31 20 74 6f 20 50 33 2e 20 50 33 20 6d 75 73 74  1 to P3. P3 must
37190 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 0a 2a   be one of the.*
371a0 2a 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  * PAGER_JOURNALM
371b0 4f 44 45 5f 58 58 58 20 76 61 6c 75 65 73 2e 20  ODE_XXX values. 
371c0 49 66 20 63 68 61 6e 67 69 6e 67 20 62 65 74 77  If changing betw
371d0 65 65 6e 20 74 68 65 20 76 61 72 69 6f 75 73 20  een the various 
371e0 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6d 6f 64 65  rollback.** mode
371f0 73 20 28 64 65 6c 65 74 65 2c 20 74 72 75 6e 63  s (delete, trunc
37200 61 74 65 2c 20 70 65 72 73 69 73 74 2c 20 6f 66  ate, persist, of
37210 66 20 61 6e 64 20 6d 65 6d 6f 72 79 29 2c 20 74  f and memory), t
37220 68 69 73 20 69 73 20 61 20 73 69 6d 70 6c 65 0a  his is a simple.
37230 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 4e 6f  ** operation. No
37240 20 49 4f 20 69 73 20 72 65 71 75 69 72 65 64 2e   IO is required.
37250 0a 2a 2a 0a 2a 2a 20 49 66 20 63 68 61 6e 67 69  .**.** If changi
37260 6e 67 20 69 6e 74 6f 20 6f 72 20 6f 75 74 20 6f  ng into or out o
37270 66 20 57 41 4c 20 6d 6f 64 65 20 74 68 65 20 70  f WAL mode the p
37280 72 6f 63 65 64 75 72 65 20 69 73 20 6d 6f 72 65  rocedure is more
37290 20 63 6f 6d 70 6c 69 63 61 74 65 64 2e 0a 2a 2a   complicated..**
372a0 0a 2a 2a 20 57 72 69 74 65 20 61 20 73 74 72 69  .** Write a stri
372b0 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ng containing th
372c0 65 20 66 69 6e 61 6c 20 6a 6f 75 72 6e 61 6c 2d  e final journal-
372d0 6d 6f 64 65 20 74 6f 20 72 65 67 69 73 74 65 72  mode to register
372e0 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
372f0 4a 6f 75 72 6e 61 6c 4d 6f 64 65 3a 20 7b 20 20  JournalMode: {  
37300 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 42    /* out2 */.  B
37310 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20  tree *pBt;      
37320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
37330 2a 20 42 74 72 65 65 20 74 6f 20 63 68 61 6e 67  * Btree to chang
37340 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f  e journal mode o
37350 66 20 2a 2f 0a 20 20 50 61 67 65 72 20 2a 70 50  f */.  Pager *pP
37360 61 67 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  ager;           
37370 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 72 20         /* Pager 
37380 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
37390 70 42 74 20 2a 2f 0a 20 20 69 6e 74 20 65 4e 65  pBt */.  int eNe
373a0 77 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  w;              
373b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 77 20           /* New 
373c0 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a  journal mode */.
373d0 20 20 69 6e 74 20 65 4f 6c 64 3b 20 20 20 20 20    int eOld;     
373e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
373f0 20 20 2f 2a 20 54 68 65 20 6f 6c 64 20 6a 6f 75    /* The old jou
37400 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 23 69 66  rnal mode */.#if
37410 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
37420 5f 57 41 4c 0a 20 20 63 6f 6e 73 74 20 63 68 61  _WAL.  const cha
37430 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 20 20 20  r *zFilename;   
37440 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
37450 66 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  f database file 
37460 66 6f 72 20 70 50 61 67 65 72 20 2a 2f 0a 23 65  for pPager */.#e
37470 6e 64 69 66 0a 0a 20 20 70 4f 75 74 20 3d 20 6f  ndif..  pOut = o
37480 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
37490 20 70 4f 70 29 3b 0a 20 20 65 4e 65 77 20 3d 20   pOp);.  eNew = 
374a0 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72  pOp->p3;.  asser
374b0 74 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  t( eNew==PAGER_J
374c0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45 54  OURNALMODE_DELET
374d0 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  E .       || eNe
374e0 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
374f0 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45 20 0a 20  MODE_TRUNCATE . 
37500 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50        || eNew==P
37510 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
37520 5f 50 45 52 53 49 53 54 20 0a 20 20 20 20 20 20  _PERSIST .      
37530 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
37540 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 0a  JOURNALMODE_OFF.
37550 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
37560 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
37570 45 5f 4d 45 4d 4f 52 59 0a 20 20 20 20 20 20 20  E_MEMORY.       
37580 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
37590 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20  OURNALMODE_WAL. 
375a0 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50        || eNew==P
375b0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
375c0 5f 51 55 45 52 59 0a 20 20 29 3b 0a 20 20 61 73  _QUERY.  );.  as
375d0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
375e0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
375f0 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
37600 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
37610 29 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e  );..  pBt = db->
37620 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74  aDb[pOp->p1].pBt
37630 3b 0a 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c  ;.  pPager = sql
37640 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70  ite3BtreePager(p
37650 42 74 29 3b 0a 20 20 65 4f 6c 64 20 3d 20 73 71  Bt);.  eOld = sq
37660 6c 69 74 65 33 50 61 67 65 72 47 65 74 4a 6f 75  lite3PagerGetJou
37670 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29  rnalMode(pPager)
37680 3b 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41  ;.  if( eNew==PA
37690 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
376a0 51 55 45 52 59 20 29 20 65 4e 65 77 20 3d 20 65  QUERY ) eNew = e
376b0 4f 6c 64 3b 0a 20 20 69 66 28 20 21 73 71 6c 69  Old;.  if( !sqli
376c0 74 65 33 50 61 67 65 72 4f 6b 54 6f 43 68 61 6e  te3PagerOkToChan
376d0 67 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50  geJournalMode(pP
376e0 61 67 65 72 29 20 29 20 65 4e 65 77 20 3d 20 65  ager) ) eNew = e
376f0 4f 6c 64 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  Old;..#ifndef SQ
37700 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
37710 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 73 71 6c 69  zFilename = sqli
37720 74 65 33 50 61 67 65 72 46 69 6c 65 6e 61 6d 65  te3PagerFilename
37730 28 70 50 61 67 65 72 2c 20 31 29 3b 0a 0a 20 20  (pPager, 1);..  
37740 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20  /* Do not allow 
37750 61 20 74 72 61 6e 73 69 74 69 6f 6e 20 74 6f 20  a transition to 
37760 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c  journal_mode=WAL
37770 20 66 6f 72 20 61 20 64 61 74 61 62 61 73 65 0a   for a database.
37780 20 20 2a 2a 20 69 6e 20 74 65 6d 70 6f 72 61 72    ** in temporar
37790 79 20 73 74 6f 72 61 67 65 20 6f 72 20 69 66 20  y storage or if 
377a0 74 68 65 20 56 46 53 20 64 6f 65 73 20 6e 6f 74  the VFS does not
377b0 20 73 75 70 70 6f 72 74 20 73 68 61 72 65 64 20   support shared 
377c0 6d 65 6d 6f 72 79 20 0a 20 20 2a 2f 0a 20 20 69  memory .  */.  i
377d0 66 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  f( eNew==PAGER_J
377e0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20  OURNALMODE_WAL. 
377f0 20 20 26 26 20 28 73 71 6c 69 74 65 33 53 74 72    && (sqlite3Str
37800 6c 65 6e 33 30 28 7a 46 69 6c 65 6e 61 6d 65 29  len30(zFilename)
37810 3d 3d 30 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ==0           /*
37820 20 54 65 6d 70 20 66 69 6c 65 20 2a 2f 0a 20 20   Temp file */.  
37830 20 20 20 20 20 7c 7c 20 21 73 71 6c 69 74 65 33       || !sqlite3
37840 50 61 67 65 72 57 61 6c 53 75 70 70 6f 72 74 65  PagerWalSupporte
37850 64 28 70 50 61 67 65 72 29 29 20 20 20 2f 2a 20  d(pPager))   /* 
37860 4e 6f 20 73 68 61 72 65 64 2d 6d 65 6d 6f 72 79  No shared-memory
37870 20 73 75 70 70 6f 72 74 20 2a 2f 0a 20 20 29 7b   support */.  ){
37880 0a 20 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64  .    eNew = eOld
37890 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 28 65 4e  ;.  }..  if( (eN
378a0 65 77 21 3d 65 4f 6c 64 29 0a 20 20 20 26 26 20  ew!=eOld).   && 
378b0 28 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55  (eOld==PAGER_JOU
378c0 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20  RNALMODE_WAL || 
378d0 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
378e0 4e 41 4c 4d 4f 44 45 5f 57 41 4c 29 0a 20 20 29  NALMODE_WAL).  )
378f0 7b 0a 20 20 20 20 69 66 28 20 21 64 62 2d 3e 61  {.    if( !db->a
37900 75 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d  utoCommit || db-
37910 3e 6e 56 64 62 65 52 65 61 64 3e 31 20 29 7b 0a  >nVdbeRead>1 ){.
37920 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
37930 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 73  E_ERROR;.      s
37940 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
37950 70 2c 0a 20 20 20 20 20 20 20 20 20 20 22 63 61  p,.          "ca
37960 6e 6e 6f 74 20 63 68 61 6e 67 65 20 25 73 20 77  nnot change %s w
37970 61 6c 20 6d 6f 64 65 20 66 72 6f 6d 20 77 69 74  al mode from wit
37980 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  hin a transactio
37990 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 28 65  n",.          (e
379a0 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
379b0 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 22 69 6e  ALMODE_WAL ? "in
379c0 74 6f 22 20 3a 20 22 6f 75 74 20 6f 66 22 29 0a  to" : "out of").
379d0 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 67        );.      g
379e0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
379f0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73  _error;.    }els
37a00 65 7b 0a 20 0a 20 20 20 20 20 20 69 66 28 20 65  e{. .      if( e
37a10 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  Old==PAGER_JOURN
37a20 41 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a 20 20  ALMODE_WAL ){.  
37a30 20 20 20 20 20 20 2f 2a 20 49 66 20 6c 65 61 76        /* If leav
37a40 69 6e 67 20 57 41 4c 20 6d 6f 64 65 2c 20 63 6c  ing WAL mode, cl
37a50 6f 73 65 20 74 68 65 20 6c 6f 67 20 66 69 6c 65  ose the log file
37a60 2e 20 49 66 20 73 75 63 63 65 73 73 66 75 6c 2c  . If successful,
37a70 20 74 68 65 20 63 61 6c 6c 0a 20 20 20 20 20 20   the call.      
37a80 20 20 2a 2a 20 74 6f 20 50 61 67 65 72 43 6c 6f    ** to PagerClo
37a90 73 65 57 61 6c 28 29 20 63 68 65 63 6b 70 6f 69  seWal() checkpoi
37aa0 6e 74 73 20 61 6e 64 20 64 65 6c 65 74 65 73 20  nts and deletes 
37ab0 74 68 65 20 77 72 69 74 65 2d 61 68 65 61 64 2d  the write-ahead-
37ac0 6c 6f 67 20 0a 20 20 20 20 20 20 20 20 2a 2a 20  log .        ** 
37ad0 66 69 6c 65 2e 20 41 6e 20 45 58 43 4c 55 53 49  file. An EXCLUSI
37ae0 56 45 20 6c 6f 63 6b 20 6d 61 79 20 73 74 69 6c  VE lock may stil
37af0 6c 20 62 65 20 68 65 6c 64 20 6f 6e 20 74 68 65  l be held on the
37b00 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 0a   database file .
37b10 20 20 20 20 20 20 20 20 2a 2a 20 61 66 74 65 72          ** after
37b20 20 61 20 73 75 63 63 65 73 73 66 75 6c 20 72 65   a successful re
37b30 74 75 72 6e 2e 20 0a 20 20 20 20 20 20 20 20 2a  turn. .        *
37b40 2f 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  /.        rc = s
37b50 71 6c 69 74 65 33 50 61 67 65 72 43 6c 6f 73 65  qlite3PagerClose
37b60 57 61 6c 28 70 50 61 67 65 72 2c 20 64 62 29 3b  Wal(pPager, db);
37b70 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 3d  .        if( rc=
37b80 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
37b90 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50          sqlite3P
37ba0 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f  agerSetJournalMo
37bb0 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77 29  de(pPager, eNew)
37bc0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
37bd0 20 20 7d 65 6c 73 65 20 69 66 28 20 65 4f 6c 64    }else if( eOld
37be0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
37bf0 4f 44 45 5f 4d 45 4d 4f 52 59 20 29 7b 0a 20 20  ODE_MEMORY ){.  
37c00 20 20 20 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20        /* Cannot 
37c10 74 72 61 6e 73 69 74 69 6f 6e 20 64 69 72 65 63  transition direc
37c20 74 6c 79 20 66 72 6f 6d 20 4d 45 4d 4f 52 59 20  tly from MEMORY 
37c30 74 6f 20 57 41 4c 2e 20 20 55 73 65 20 6d 6f 64  to WAL.  Use mod
37c40 65 20 4f 46 46 0a 20 20 20 20 20 20 20 20 2a 2a  e OFF.        **
37c50 20 61 73 20 61 6e 20 69 6e 74 65 72 6d 65 64 69   as an intermedi
37c60 61 74 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 73  ate */.        s
37c70 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f  qlite3PagerSetJo
37c80 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72  urnalMode(pPager
37c90 2c 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  , PAGER_JOURNALM
37ca0 4f 44 45 5f 4f 46 46 29 3b 0a 20 20 20 20 20 20  ODE_OFF);.      
37cb0 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 4f 70  }.  .      /* Op
37cc0 65 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  en a transaction
37cd0 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
37ce0 20 66 69 6c 65 2e 20 52 65 67 61 72 64 6c 65 73   file. Regardles
37cf0 73 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c  s of the journal
37d00 0a 20 20 20 20 20 20 2a 2a 20 6d 6f 64 65 2c 20  .      ** mode, 
37d10 74 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e  this transaction
37d20 20 61 6c 77 61 79 73 20 75 73 65 73 20 61 20 72   always uses a r
37d30 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e  ollback journal.
37d40 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
37d50 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
37d60 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42  treeIsInTrans(pB
37d70 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69  t)==0 );.      i
37d80 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
37d90 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
37da0 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74   sqlite3BtreeSet
37db0 56 65 72 73 69 6f 6e 28 70 42 74 2c 20 28 65 4e  Version(pBt, (eN
37dc0 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
37dd0 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 32 20 3a 20  LMODE_WAL ? 2 : 
37de0 31 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  1));.      }.   
37df0 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a   }.  }.#endif /*
37e00 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f   ifndef SQLITE_O
37e10 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20 20 69 66  MIT_WAL */..  if
37e20 28 20 72 63 20 29 20 65 4e 65 77 20 3d 20 65 4f  ( rc ) eNew = eO
37e30 6c 64 3b 0a 20 20 65 4e 65 77 20 3d 20 73 71 6c  ld;.  eNew = sql
37e40 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72  ite3PagerSetJour
37e50 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20  nalMode(pPager, 
37e60 65 4e 65 77 29 3b 0a 0a 20 20 70 4f 75 74 2d 3e  eNew);..  pOut->
37e70 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c  flags = MEM_Str|
37e80 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54  MEM_Static|MEM_T
37e90 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d  erm;.  pOut->z =
37ea0 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33   (char *)sqlite3
37eb0 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28  JournalModename(
37ec0 65 4e 65 77 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e  eNew);.  pOut->n
37ed0 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e   = sqlite3Strlen
37ee0 33 30 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70  30(pOut->z);.  p
37ef0 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54  Out->enc = SQLIT
37f00 45 5f 55 54 46 38 3b 0a 20 20 73 71 6c 69 74 65  E_UTF8;.  sqlite
37f10 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
37f20 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69  ing(pOut, encodi
37f30 6e 67 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  ng);.  if( rc ) 
37f40 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
37f50 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
37f60 3b 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  ;.};.#endif /* S
37f70 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d  QLITE_OMIT_PRAGM
37f80 41 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e  A */..#if !defin
37f90 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
37fa0 41 43 55 55 4d 29 20 26 26 20 21 64 65 66 69 6e  ACUUM) && !defin
37fb0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
37fc0 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63 6f 64 65  TTACH)./* Opcode
37fd0 3a 20 56 61 63 75 75 6d 20 50 31 20 50 32 20 2a  : Vacuum P1 P2 *
37fe0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75   * *.**.** Vacuu
37ff0 6d 20 74 68 65 20 65 6e 74 69 72 65 20 64 61 74  m the entire dat
38000 61 62 61 73 65 20 50 31 2e 20 20 50 31 20 69 73  abase P1.  P1 is
38010 20 30 20 66 6f 72 20 22 6d 61 69 6e 22 2c 20 61   0 for "main", a
38020 6e 64 20 32 20 6f 72 20 6d 6f 72 65 0a 2a 2a 20  nd 2 or more.** 
38030 66 6f 72 20 61 6e 20 61 74 74 61 63 68 65 64 20  for an attached 
38040 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 22  database.  The "
38050 74 65 6d 70 22 20 64 61 74 61 62 61 73 65 20 6d  temp" database m
38060 61 79 20 6e 6f 74 20 62 65 20 76 61 63 75 75 6d  ay not be vacuum
38070 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20  ed..**.** If P2 
38080 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
38090 6e 20 69 74 20 69 73 20 61 20 72 65 67 69 73 74  n it is a regist
380a0 65 72 20 68 6f 6c 64 69 6e 67 20 61 20 73 74 72  er holding a str
380b0 69 6e 67 20 77 68 69 63 68 20 69 73 0a 2a 2a 20  ing which is.** 
380c0 74 68 65 20 66 69 6c 65 20 69 6e 74 6f 20 77 68  the file into wh
380d0 69 63 68 20 74 68 65 20 72 65 73 75 6c 74 20 6f  ich the result o
380e0 66 20 76 61 63 75 75 6d 20 73 68 6f 75 6c 64 20  f vacuum should 
380f0 62 65 20 77 72 69 74 74 65 6e 2e 20 20 57 68 65  be written.  Whe
38100 6e 0a 2a 2a 20 50 32 20 69 73 20 7a 65 72 6f 2c  n.** P2 is zero,
38110 20 74 68 65 20 76 61 63 75 75 6d 20 6f 76 65 72   the vacuum over
38120 77 72 69 74 65 73 20 74 68 65 20 6f 72 69 67 69  writes the origi
38130 6e 61 6c 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f  nal database..*/
38140 0a 63 61 73 65 20 4f 50 5f 56 61 63 75 75 6d 3a  .case OP_Vacuum:
38150 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e   {.  assert( p->
38160 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
38170 20 72 63 20 3d 20 73 71 6c 69 74 65 33 52 75 6e   rc = sqlite3Run
38180 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d  Vacuum(&p->zErrM
38190 73 67 2c 20 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  sg, db, pOp->p1,
381a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
381b0 20 20 20 20 20 20 20 20 20 70 4f 70 2d 3e 70 32           pOp->p2
381c0 20 3f 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   ? &aMem[pOp->p2
381d0 5d 20 3a 20 30 29 3b 0a 20 20 69 66 28 20 72 63  ] : 0);.  if( rc
381e0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
381f0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
38200 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  eak;.}.#endif..#
38210 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
38220 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
38230 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  UM)./* Opcode: I
38240 6e 63 72 56 61 63 75 75 6d 20 50 31 20 50 32 20  ncrVacuum P1 P2 
38250 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66  * * *.**.** Perf
38260 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20 73 74 65  orm a single ste
38270 70 20 6f 66 20 74 68 65 2