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

Artifact 22b46c3b725e950e9f2760e2d76953d592600ad4:


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 4f 4d 49  fined(SQLITE_OMI
0fa0: 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 29 0a  T_BUILTIN_TEST).
0fb0: 23 20 64 65 66 69 6e 65 20 55 50 44 41 54 45 5f  # define UPDATE_
0fc0: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 50 29 20  MAX_BLOBSIZE(P) 
0fd0: 20 75 70 64 61 74 65 4d 61 78 42 6c 6f 62 73 69   updateMaxBlobsi
0fe0: 7a 65 28 50 29 0a 23 65 6c 73 65 0a 23 20 64 65  ze(P).#else.# de
0ff0: 66 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f  fine UPDATE_MAX_
1000: 42 4c 4f 42 53 49 5a 45 28 50 29 0a 23 65 6e 64  BLOBSIZE(P).#end
1010: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65  if../*.** Invoke
1020: 20 74 68 65 20 56 44 42 45 20 63 6f 76 65 72 61   the VDBE covera
1030: 67 65 20 63 61 6c 6c 62 61 63 6b 2c 20 69 66 20  ge callback, if 
1040: 74 68 61 74 20 63 61 6c 6c 62 61 63 6b 20 69 73  that callback is
1050: 20 64 65 66 69 6e 65 64 2e 20 20 54 68 69 73 0a   defined.  This.
1060: 2a 2a 20 66 65 61 74 75 72 65 20 69 73 20 75 73  ** feature is us
1070: 65 64 20 66 6f 72 20 74 65 73 74 20 73 75 69 74  ed for test suit
1080: 65 20 76 61 6c 69 64 61 74 69 6f 6e 20 6f 6e 6c  e validation onl
1090: 79 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 61  y and does not a
10a0: 70 70 65 61 72 20 61 6e 0a 2a 2a 20 70 72 6f 64  ppear an.** prod
10b0: 75 63 74 69 6f 6e 20 62 75 69 6c 64 73 2e 0a 2a  uction builds..*
10c0: 2a 0a 2a 2a 20 4d 20 69 73 20 61 6e 20 69 6e 74  *.** M is an int
10d0: 65 67 65 72 2c 20 32 20 6f 72 20 33 2c 20 74 68  eger, 2 or 3, th
10e0: 61 74 20 69 6e 64 69 63 65 73 20 68 6f 77 20 6d  at indices how m
10f0: 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77 61  any different wa
1100: 79 73 20 74 68 65 0a 2a 2a 20 62 72 61 6e 63 68  ys the.** branch
1110: 20 63 61 6e 20 67 6f 2e 20 20 49 74 20 69 73 20   can go.  It is 
1120: 75 73 75 61 6c 6c 79 20 32 2e 20 20 22 49 22 20  usually 2.  "I" 
1130: 69 73 20 74 68 65 20 64 69 72 65 63 74 69 6f 6e  is the direction
1140: 20 74 68 65 20 62 72 61 6e 63 68 0a 2a 2a 20 67   the branch.** g
1150: 6f 65 73 2e 20 20 30 20 6d 65 61 6e 73 20 66 61  oes.  0 means fa
1160: 6c 6c 73 20 74 68 72 6f 75 67 68 2e 20 20 31 20  lls through.  1 
1170: 6d 65 61 6e 73 20 62 72 61 6e 63 68 20 69 73 20  means branch is 
1180: 74 61 6b 65 6e 2e 20 20 32 20 6d 65 61 6e 73 20  taken.  2 means 
1190: 74 68 65 0a 2a 2a 20 73 65 63 6f 6e 64 20 61 6c  the.** second al
11a0: 74 65 72 6e 61 74 69 76 65 20 62 72 61 6e 63 68  ternative branch
11b0: 20 69 73 20 74 61 6b 65 6e 2e 0a 2a 2a 0a 2a 2a   is taken..**.**
11c0: 20 69 53 72 63 4c 69 6e 65 20 69 73 20 74 68 65   iSrcLine is the
11d0: 20 73 6f 75 72 63 65 20 63 6f 64 65 20 6c 69 6e   source code lin
11e0: 65 20 28 66 72 6f 6d 20 74 68 65 20 5f 5f 4c 49  e (from the __LI
11f0: 4e 45 5f 5f 20 6d 61 63 72 6f 29 20 74 68 61 74  NE__ macro) that
1200: 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 74 68  .** generated th
1210: 65 20 56 44 42 45 20 69 6e 73 74 72 75 63 74 69  e VDBE instructi
1220: 6f 6e 2e 20 20 54 68 69 73 20 69 6e 73 74 72 75  on.  This instru
1230: 6d 65 6e 74 61 74 69 6f 6e 20 61 73 73 75 6d 65  mentation assume
1240: 73 20 74 68 61 74 20 61 6c 6c 0a 2a 2a 20 73 6f  s that all.** so
1250: 75 72 63 65 20 63 6f 64 65 20 69 73 20 69 6e 20  urce code is in 
1260: 61 20 73 69 6e 67 6c 65 20 66 69 6c 65 20 28 74  a single file (t
1270: 68 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 29  he amalgamation)
1280: 2e 20 20 53 70 65 63 69 61 6c 20 76 61 6c 75 65  .  Special value
1290: 73 20 31 0a 2a 2a 20 61 6e 64 20 32 20 66 6f 72  s 1.** and 2 for
12a0: 20 74 68 65 20 69 53 72 63 4c 69 6e 65 20 70 61   the iSrcLine pa
12b0: 72 61 6d 65 74 65 72 20 6d 65 61 6e 20 74 68 61  rameter mean tha
12c0: 74 20 74 68 69 73 20 70 61 72 74 69 63 75 6c 61  t this particula
12d0: 72 20 62 72 61 6e 63 68 20 69 73 0a 2a 2a 20 61  r branch is.** a
12e0: 6c 77 61 79 73 20 74 61 6b 65 6e 20 6f 72 20 6e  lways taken or n
12f0: 65 76 65 72 20 74 61 6b 65 6e 2c 20 72 65 73 70  ever taken, resp
1300: 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 23 69 66  ectively..*/.#if
1310: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1320: 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 29 0a  _VDBE_COVERAGE).
1330: 23 20 64 65 66 69 6e 65 20 56 64 62 65 42 72 61  # define VdbeBra
1340: 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29 0a 23 65  nchTaken(I,M).#e
1350: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 56 64 62  lse.# define Vdb
1360: 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 49 2c 4d  eBranchTaken(I,M
1370: 29 20 76 64 62 65 54 61 6b 65 42 72 61 6e 63 68  ) vdbeTakeBranch
1380: 28 70 4f 70 2d 3e 69 53 72 63 4c 69 6e 65 2c 49  (pOp->iSrcLine,I
1390: 2c 4d 29 0a 20 20 73 74 61 74 69 63 20 76 6f 69  ,M).  static voi
13a0: 64 20 76 64 62 65 54 61 6b 65 42 72 61 6e 63 68  d vdbeTakeBranch
13b0: 28 69 6e 74 20 69 53 72 63 4c 69 6e 65 2c 20 75  (int iSrcLine, u
13c0: 38 20 49 2c 20 75 38 20 4d 29 7b 0a 20 20 20 20  8 I, u8 M){.    
13d0: 69 66 28 20 69 53 72 63 4c 69 6e 65 3c 3d 32 20  if( iSrcLine<=2 
13e0: 26 26 20 41 4c 57 41 59 53 28 69 53 72 63 4c 69  && ALWAYS(iSrcLi
13f0: 6e 65 3e 30 29 20 29 7b 0a 20 20 20 20 20 20 4d  ne>0) ){.      M
1400: 20 3d 20 69 53 72 63 4c 69 6e 65 3b 0a 20 20 20   = iSrcLine;.   
1410: 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 65     /* Assert the
1420: 20 74 72 75 74 68 20 6f 66 20 56 64 62 65 43 6f   truth of VdbeCo
1430: 76 65 72 61 67 65 41 6c 77 61 79 73 54 61 6b 65  verageAlwaysTake
1440: 6e 28 29 20 61 6e 64 20 0a 20 20 20 20 20 20 2a  n() and .      *
1450: 2a 20 56 64 62 65 43 6f 76 65 72 61 67 65 4e 65  * VdbeCoverageNe
1460: 76 65 72 54 61 6b 65 6e 28 29 20 2a 2f 0a 20 20  verTaken() */.  
1470: 20 20 20 20 61 73 73 65 72 74 28 20 28 4d 20 26      assert( (M &
1480: 20 49 29 3d 3d 49 20 29 3b 0a 20 20 20 20 7d 65   I)==I );.    }e
1490: 6c 73 65 7b 0a 20 20 20 20 20 20 69 66 28 20 73  lse{.      if( s
14a0: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
14b0: 69 67 2e 78 56 64 62 65 42 72 61 6e 63 68 3d 3d  ig.xVdbeBranch==
14c0: 30 20 29 20 72 65 74 75 72 6e 3b 20 20 2f 2a 4e  0 ) return;  /*N
14d0: 4f 5f 54 45 53 54 2a 2f 0a 20 20 20 20 20 20 73  O_TEST*/.      s
14e0: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
14f0: 69 67 2e 78 56 64 62 65 42 72 61 6e 63 68 28 73  ig.xVdbeBranch(s
1500: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
1510: 69 67 2e 70 56 64 62 65 42 72 61 6e 63 68 41 72  ig.pVdbeBranchAr
1520: 67 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  g,.             
1530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1540: 20 20 20 20 20 20 20 20 20 69 53 72 63 4c 69 6e           iSrcLin
1550: 65 2c 49 2c 4d 29 3b 0a 20 20 20 20 7d 0a 20 20  e,I,M);.    }.  
1560: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
1570: 43 6f 6e 76 65 72 74 20 74 68 65 20 67 69 76 65  Convert the give
1580: 6e 20 72 65 67 69 73 74 65 72 20 69 6e 74 6f 20  n register into 
1590: 61 20 73 74 72 69 6e 67 20 69 66 20 69 74 20 69  a string if it i
15a0: 73 6e 27 74 20 6f 6e 65 0a 2a 2a 20 61 6c 72 65  sn't one.** alre
15b0: 61 64 79 2e 20 52 65 74 75 72 6e 20 6e 6f 6e 2d  ady. Return non-
15c0: 7a 65 72 6f 20 69 66 20 61 20 6d 61 6c 6c 6f 63  zero if a malloc
15d0: 28 29 20 66 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65  () fails..*/.#de
15e0: 66 69 6e 65 20 53 74 72 69 6e 67 69 66 79 28 50  fine Stringify(P
15f0: 2c 20 65 6e 63 29 20 5c 0a 20 20 20 69 66 28 28  , enc) \.   if((
1600: 28 50 29 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f  (P)->flags&(MEM_
1610: 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d  Str|MEM_Blob))==
1620: 30 20 26 26 20 73 71 6c 69 74 65 33 56 64 62 65  0 && sqlite3Vdbe
1630: 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 50 2c 65  MemStringify(P,e
1640: 6e 63 2c 30 29 29 20 5c 0a 20 20 20 20 20 7b 20  nc,0)) \.     { 
1650: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 20 7d 0a 0a  goto no_mem; }..
1660: 2f 2a 0a 2a 2a 20 41 6e 20 65 70 68 65 6d 65 72  /*.** An ephemer
1670: 61 6c 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20  al string value 
1680: 28 73 69 67 6e 69 66 69 65 64 20 62 79 20 74 68  (signified by th
1690: 65 20 4d 45 4d 5f 45 70 68 65 6d 20 66 6c 61 67  e MEM_Ephem flag
16a0: 29 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 61 20  ) contains.** a 
16b0: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 64 79 6e  pointer to a dyn
16c0: 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74  amically allocat
16d0: 65 64 20 73 74 72 69 6e 67 20 77 68 65 72 65 20  ed string where 
16e0: 73 6f 6d 65 20 6f 74 68 65 72 20 65 6e 74 69 74  some other entit
16f0: 79 0a 2a 2a 20 69 73 20 72 65 73 70 6f 6e 73 69  y.** is responsi
1700: 62 6c 65 20 66 6f 72 20 64 65 61 6c 6c 6f 63 61  ble for dealloca
1710: 74 69 6e 67 20 74 68 61 74 20 73 74 72 69 6e 67  ting that string
1720: 2e 20 20 42 65 63 61 75 73 65 20 74 68 65 20 72  .  Because the r
1730: 65 67 69 73 74 65 72 0a 2a 2a 20 64 6f 65 73 20  egister.** does 
1740: 6e 6f 74 20 63 6f 6e 74 72 6f 6c 20 74 68 65 20  not control the 
1750: 73 74 72 69 6e 67 2c 20 69 74 20 6d 69 67 68 74  string, it might
1760: 20 62 65 20 64 65 6c 65 74 65 64 20 77 69 74 68   be deleted with
1770: 6f 75 74 20 74 68 65 20 72 65 67 69 73 74 65 72  out the register
1780: 0a 2a 2a 20 6b 6e 6f 77 69 6e 67 20 69 74 2e 0a  .** knowing it..
1790: 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69  **.** This routi
17a0: 6e 65 20 63 6f 6e 76 65 72 74 73 20 61 6e 20 65  ne converts an e
17b0: 70 68 65 6d 65 72 61 6c 20 73 74 72 69 6e 67 20  phemeral string 
17c0: 69 6e 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c  into a dynamical
17d0: 6c 79 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20  ly allocated.** 
17e0: 73 74 72 69 6e 67 20 74 68 61 74 20 74 68 65 20  string that the 
17f0: 72 65 67 69 73 74 65 72 20 69 74 73 65 6c 66 20  register itself 
1800: 63 6f 6e 74 72 6f 6c 73 2e 20 20 49 6e 20 6f 74  controls.  In ot
1810: 68 65 72 20 77 6f 72 64 73 2c 20 69 74 0a 2a 2a  her words, it.**
1820: 20 63 6f 6e 76 65 72 74 73 20 61 6e 20 4d 45 4d   converts an MEM
1830: 5f 45 70 68 65 6d 20 73 74 72 69 6e 67 20 69 6e  _Ephem string in
1840: 74 6f 20 61 20 73 74 72 69 6e 67 20 77 69 74 68  to a string with
1850: 20 50 2e 7a 3d 3d 50 2e 7a 4d 61 6c 6c 6f 63 2e   P.z==P.zMalloc.
1860: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 65 65 70  .*/.#define Deep
1870: 68 65 6d 65 72 61 6c 69 7a 65 28 50 29 20 5c 0a  hemeralize(P) \.
1880: 20 20 20 69 66 28 20 28 28 50 29 2d 3e 66 6c 61     if( ((P)->fla
1890: 67 73 26 4d 45 4d 5f 45 70 68 65 6d 29 21 3d 30  gs&MEM_Ephem)!=0
18a0: 20 5c 0a 20 20 20 20 20 20 20 26 26 20 73 71 6c   \.       && sql
18b0: 69 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65 57  ite3VdbeMemMakeW
18c0: 72 69 74 65 61 62 6c 65 28 50 29 20 29 7b 20 67  riteable(P) ){ g
18d0: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a  oto no_mem;}../*
18e0: 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20   Return true if 
18f0: 74 68 65 20 63 75 72 73 6f 72 20 77 61 73 20 6f  the cursor was o
1900: 70 65 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20  pened using the 
1910: 4f 50 5f 4f 70 65 6e 53 6f 72 74 65 72 20 6f 70  OP_OpenSorter op
1920: 63 6f 64 65 2e 20 2a 2f 0a 23 64 65 66 69 6e 65  code. */.#define
1930: 20 69 73 53 6f 72 74 65 72 28 78 29 20 28 28 78   isSorter(x) ((x
1940: 29 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  )->eCurType==CUR
1950: 54 59 50 45 5f 53 4f 52 54 45 52 29 0a 0a 2f 2a  TYPE_SORTER)../*
1960: 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 56 64 62  .** Allocate Vdb
1970: 65 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 69  eCursor number i
1980: 43 75 72 2e 20 20 52 65 74 75 72 6e 20 61 20 70  Cur.  Return a p
1990: 6f 69 6e 74 65 72 20 74 6f 20 69 74 2e 20 20 52  ointer to it.  R
19a0: 65 74 75 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66  eturn NULL.** if
19b0: 20 77 65 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d   we run out of m
19c0: 65 6d 6f 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63  emory..*/.static
19d0: 20 56 64 62 65 43 75 72 73 6f 72 20 2a 61 6c 6c   VdbeCursor *all
19e0: 6f 63 61 74 65 43 75 72 73 6f 72 28 0a 20 20 56  ocateCursor(.  V
19f0: 64 62 65 20 2a 70 2c 20 20 20 20 20 20 20 20 20  dbe *p,         
1a00: 20 20 20 20 20 2f 2a 20 54 68 65 20 76 69 72 74       /* The virt
1a10: 75 61 6c 20 6d 61 63 68 69 6e 65 20 2a 2f 0a 20  ual machine */. 
1a20: 20 69 6e 74 20 69 43 75 72 2c 20 20 20 20 20 20   int iCur,      
1a30: 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
1a40: 6f 66 20 74 68 65 20 6e 65 77 20 56 64 62 65 43  of the new VdbeC
1a50: 75 72 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  ursor */.  int n
1a60: 46 69 65 6c 64 2c 20 20 20 20 20 20 20 20 20 20  Field,          
1a70: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69   /* Number of fi
1a80: 65 6c 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c  elds in the tabl
1a90: 65 20 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20  e or index */.  
1aa0: 69 6e 74 20 69 44 62 2c 20 20 20 20 20 20 20 20  int iDb,        
1ab0: 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73        /* Databas
1ac0: 65 20 74 68 65 20 63 75 72 73 6f 72 20 62 65 6c  e the cursor bel
1ad0: 6f 6e 67 73 20 74 6f 2c 20 6f 72 20 2d 31 20 2a  ongs to, or -1 *
1ae0: 2f 0a 20 20 75 38 20 65 43 75 72 54 79 70 65 20  /.  u8 eCurType 
1af0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 79 70            /* Typ
1b00: 65 20 6f 66 20 74 68 65 20 6e 65 77 20 63 75 72  e of the new cur
1b10: 73 6f 72 20 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 46  sor */.){.  /* F
1b20: 69 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 63  ind the memory c
1b30: 65 6c 6c 20 74 68 61 74 20 77 69 6c 6c 20 62 65  ell that will be
1b40: 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
1b50: 68 65 20 62 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72  he blob of memor
1b60: 79 0a 20 20 2a 2a 20 72 65 71 75 69 72 65 64 20  y.  ** required 
1b70: 66 6f 72 20 74 68 69 73 20 56 64 62 65 43 75 72  for this VdbeCur
1b80: 73 6f 72 20 73 74 72 75 63 74 75 72 65 2e 20 49  sor structure. I
1b90: 74 20 69 73 20 63 6f 6e 76 65 6e 69 65 6e 74 20  t is convenient 
1ba0: 74 6f 20 75 73 65 20 61 20 0a 20 20 2a 2a 20 76  to use a .  ** v
1bb0: 64 62 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  dbe memory cell 
1bc0: 74 6f 20 6d 61 6e 61 67 65 20 74 68 65 20 6d 65  to manage the me
1bd0: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
1be0: 72 65 71 75 69 72 65 64 20 66 6f 72 20 61 0a 20  required for a. 
1bf0: 20 2a 2a 20 56 64 62 65 43 75 72 73 6f 72 20 73   ** VdbeCursor s
1c00: 74 72 75 63 74 75 72 65 20 66 6f 72 20 74 68 65  tructure for the
1c10: 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 65 61 73 6f   following reaso
1c20: 6e 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20  ns:.  **.  **   
1c30: 2a 20 53 6f 6d 65 74 69 6d 65 73 20 63 75 72 73  * Sometimes curs
1c40: 6f 72 20 6e 75 6d 62 65 72 73 20 61 72 65 20 75  or numbers are u
1c50: 73 65 64 20 66 6f 72 20 61 20 63 6f 75 70 6c 65  sed for a couple
1c60: 20 6f 66 20 64 69 66 66 65 72 65 6e 74 0a 20 20   of different.  
1c70: 2a 2a 20 20 20 20 20 70 75 72 70 6f 73 65 73 20  **     purposes 
1c80: 69 6e 20 61 20 76 64 62 65 20 70 72 6f 67 72 61  in a vdbe progra
1c90: 6d 2e 20 54 68 65 20 64 69 66 66 65 72 65 6e 74  m. The different
1ca0: 20 75 73 65 73 20 6d 69 67 68 74 20 72 65 71 75   uses might requ
1cb0: 69 72 65 0a 20 20 2a 2a 20 20 20 20 20 64 69 66  ire.  **     dif
1cc0: 66 65 72 65 6e 74 20 73 69 7a 65 64 20 61 6c 6c  ferent sized all
1cd0: 6f 63 61 74 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79  ocations. Memory
1ce0: 20 63 65 6c 6c 73 20 70 72 6f 76 69 64 65 20 67   cells provide g
1cf0: 72 6f 77 61 62 6c 65 0a 20 20 2a 2a 20 20 20 20  rowable.  **    
1d00: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e 0a 20 20   allocations..  
1d10: 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 57 68 65 6e  **.  **   * When
1d20: 20 75 73 69 6e 67 20 45 4e 41 42 4c 45 5f 4d 45   using ENABLE_ME
1d30: 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c  MORY_MANAGEMENT,
1d40: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 62 75 66   memory cell buf
1d50: 66 65 72 73 20 63 61 6e 0a 20 20 2a 2a 20 20 20  fers can.  **   
1d60: 20 20 62 65 20 66 72 65 65 64 20 6c 61 7a 69 6c    be freed lazil
1d70: 79 20 76 69 61 20 74 68 65 20 73 71 6c 69 74 65  y via the sqlite
1d80: 33 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79  3_release_memory
1d90: 28 29 20 41 50 49 2e 20 54 68 69 73 0a 20 20 2a  () API. This.  *
1da0: 2a 20 20 20 20 20 6d 69 6e 69 6d 69 7a 65 73 20  *     minimizes 
1db0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 61  the number of ma
1dc0: 6c 6c 6f 63 20 63 61 6c 6c 73 20 6d 61 64 65 20  lloc calls made 
1dd0: 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 20  by the system.. 
1de0: 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 6d 65 6d   **.  ** The mem
1df0: 6f 72 79 20 63 65 6c 6c 20 66 6f 72 20 63 75 72  ory cell for cur
1e00: 73 6f 72 20 30 20 69 73 20 61 4d 65 6d 5b 30 5d  sor 0 is aMem[0]
1e10: 2e 20 54 68 65 20 72 65 73 74 20 61 72 65 20 61  . The rest are a
1e20: 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d 0a 20 20  llocated from.  
1e30: 2a 2a 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  ** the top of th
1e40: 65 20 72 65 67 69 73 74 65 72 20 73 70 61 63 65  e register space
1e50: 2e 20 20 43 75 72 73 6f 72 20 31 20 69 73 20 61  .  Cursor 1 is a
1e60: 74 20 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 31 5d  t Mem[p->nMem-1]
1e70: 2e 0a 20 20 2a 2a 20 43 75 72 73 6f 72 20 32 20  ..  ** Cursor 2 
1e80: 69 73 20 61 74 20 4d 65 6d 5b 70 2d 3e 6e 4d 65  is at Mem[p->nMe
1e90: 6d 2d 32 5d 2e 20 41 6e 64 20 73 6f 20 66 6f 72  m-2]. And so for
1ea0: 74 68 2e 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20 2a  th..  */.  Mem *
1eb0: 70 4d 65 6d 20 3d 20 69 43 75 72 3e 30 20 3f 20  pMem = iCur>0 ? 
1ec0: 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d  &p->aMem[p->nMem
1ed0: 2d 69 43 75 72 5d 20 3a 20 70 2d 3e 61 4d 65 6d  -iCur] : p->aMem
1ee0: 3b 0a 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a  ;..  int nByte;.
1ef0: 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1f00: 78 20 3d 20 30 3b 0a 20 20 6e 42 79 74 65 20 3d  x = 0;.  nByte =
1f10: 20 0a 20 20 20 20 20 20 52 4f 55 4e 44 38 28 73   .      ROUND8(s
1f20: 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72  izeof(VdbeCursor
1f30: 29 29 20 2b 20 32 2a 73 69 7a 65 6f 66 28 75 33  )) + 2*sizeof(u3
1f40: 32 29 2a 6e 46 69 65 6c 64 20 2b 20 0a 20 20 20  2)*nField + .   
1f50: 20 20 20 28 65 43 75 72 54 79 70 65 3d 3d 43 55     (eCurType==CU
1f60: 52 54 59 50 45 5f 42 54 52 45 45 3f 73 71 6c 69  RTYPE_BTREE?sqli
1f70: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 53 69  te3BtreeCursorSi
1f80: 7a 65 28 29 3a 30 29 3b 0a 0a 20 20 61 73 73 65  ze():0);..  asse
1f90: 72 74 28 20 69 43 75 72 3e 3d 30 20 26 26 20 69  rt( iCur>=0 && i
1fa0: 43 75 72 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  Cur<p->nCursor )
1fb0: 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72  ;.  if( p->apCsr
1fc0: 5b 69 43 75 72 5d 20 29 7b 20 2f 2a 4f 50 54 49  [iCur] ){ /*OPTI
1fd0: 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53  MIZATION-IF-FALS
1fe0: 45 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56  E*/.    sqlite3V
1ff0: 64 62 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c  dbeFreeCursor(p,
2000: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 29   p->apCsr[iCur])
2010: 3b 0a 20 20 20 20 70 2d 3e 61 70 43 73 72 5b 69  ;.    p->apCsr[i
2020: 43 75 72 5d 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Cur] = 0;.  }.  
2030: 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 73  if( SQLITE_OK==s
2040: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65  qlite3VdbeMemCle
2050: 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4d 65 6d  arAndResize(pMem
2060: 2c 20 6e 42 79 74 65 29 20 29 7b 0a 20 20 20 20  , nByte) ){.    
2070: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d  p->apCsr[iCur] =
2080: 20 70 43 78 20 3d 20 28 56 64 62 65 43 75 72 73   pCx = (VdbeCurs
2090: 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 20  or*)pMem->z;.   
20a0: 20 6d 65 6d 73 65 74 28 70 43 78 2c 20 30 2c 20   memset(pCx, 0, 
20b0: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
20c0: 72 29 29 3b 0a 20 20 20 20 70 43 78 2d 3e 65 43  r));.    pCx->eC
20d0: 75 72 54 79 70 65 20 3d 20 65 43 75 72 54 79 70  urType = eCurTyp
20e0: 65 3b 0a 20 20 20 20 70 43 78 2d 3e 69 44 62 20  e;.    pCx->iDb 
20f0: 3d 20 69 44 62 3b 0a 20 20 20 20 70 43 78 2d 3e  = iDb;.    pCx->
2100: 6e 46 69 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b  nField = nField;
2110: 0a 20 20 20 20 70 43 78 2d 3e 61 4f 66 66 73 65  .    pCx->aOffse
2120: 74 20 3d 20 26 70 43 78 2d 3e 61 54 79 70 65 5b  t = &pCx->aType[
2130: 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20 69 66 28  nField];.    if(
2140: 20 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59   eCurType==CURTY
2150: 50 45 5f 42 54 52 45 45 20 29 7b 0a 20 20 20 20  PE_BTREE ){.    
2160: 20 20 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f    pCx->uc.pCurso
2170: 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29 0a  r = (BtCursor*).
2180: 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d 2d            &pMem-
2190: 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66  >z[ROUND8(sizeof
21a0: 28 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32 2a  (VdbeCursor))+2*
21b0: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
21c0: 6c 64 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ld];.      sqlit
21d0: 65 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65 72  e3BtreeCursorZer
21e0: 6f 28 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f  o(pCx->uc.pCurso
21f0: 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  r);.    }.  }.  
2200: 72 65 74 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f  return pCx;.}../
2210: 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76  *.** Try to conv
2220: 65 72 74 20 61 20 76 61 6c 75 65 20 69 6e 74 6f  ert a value into
2230: 20 61 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65   a numeric repre
2240: 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 77 65 20  sentation if we 
2250: 63 61 6e 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74  can.** do so wit
2260: 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66  hout loss of inf
2270: 6f 72 6d 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74  ormation.  In ot
2280: 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68  her words, if th
2290: 65 20 73 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b  e string.** look
22a0: 73 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c  s like a number,
22b0: 20 63 6f 6e 76 65 72 74 20 69 74 20 69 6e 74 6f   convert it into
22c0: 20 61 20 6e 75 6d 62 65 72 2e 20 20 49 66 20 69   a number.  If i
22d0: 74 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f  t does not.** lo
22e0: 6f 6b 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72  ok like a number
22f0: 2c 20 6c 65 61 76 65 20 69 74 20 61 6c 6f 6e 65  , leave it alone
2300: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 62  ..**.** If the b
2310: 54 72 79 46 6f 72 49 6e 74 20 66 6c 61 67 20 69  TryForInt flag i
2320: 73 20 74 72 75 65 2c 20 74 68 65 6e 20 65 78 74  s true, then ext
2330: 72 61 20 65 66 66 6f 72 74 20 69 73 20 6d 61 64  ra effort is mad
2340: 65 20 74 6f 20 67 69 76 65 0a 2a 2a 20 61 6e 20  e to give.** an 
2350: 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e  integer represen
2360: 74 61 74 69 6f 6e 2e 20 20 53 74 72 69 6e 67 73  tation.  Strings
2370: 20 74 68 61 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20   that look like 
2380: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 0a 2a  floating point.*
2390: 2a 20 76 61 6c 75 65 73 20 62 75 74 20 77 68 69  * values but whi
23a0: 63 68 20 68 61 76 65 20 6e 6f 20 66 72 61 63 74  ch have no fract
23b0: 69 6f 6e 61 6c 20 63 6f 6d 70 6f 6e 65 6e 74 20  ional component 
23c0: 28 65 78 61 6d 70 6c 65 3a 20 27 34 38 2e 30 30  (example: '48.00
23d0: 27 29 0a 2a 2a 20 77 69 6c 6c 20 68 61 76 65 20  ').** will have 
23e0: 61 20 4d 45 4d 5f 49 6e 74 20 72 65 70 72 65 73  a MEM_Int repres
23f0: 65 6e 74 61 74 69 6f 6e 20 77 68 65 6e 20 62 54  entation when bT
2400: 72 79 46 6f 72 49 6e 74 20 69 73 20 74 72 75 65  ryForInt is true
2410: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 62 54 72 79 46  ..**.** If bTryF
2420: 6f 72 49 6e 74 20 69 73 20 66 61 6c 73 65 2c 20  orInt is false, 
2430: 74 68 65 6e 20 69 66 20 74 68 65 20 69 6e 70 75  then if the inpu
2440: 74 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e  t string contain
2450: 73 20 61 20 64 65 63 69 6d 61 6c 0a 2a 2a 20 70  s a decimal.** p
2460: 6f 69 6e 74 20 6f 72 20 65 78 70 6f 6e 65 6e 74  oint or exponent
2470: 69 61 6c 20 6e 6f 74 61 74 69 6f 6e 2c 20 74 68  ial notation, th
2480: 65 20 72 65 73 75 6c 74 20 69 73 20 6f 6e 6c 79  e result is only
2490: 20 4d 45 4d 5f 52 65 61 6c 2c 20 65 76 65 6e 0a   MEM_Real, even.
24a0: 2a 2a 20 69 66 20 74 68 65 72 65 20 69 73 20 61  ** if there is a
24b0: 6e 20 65 78 61 63 74 20 69 6e 74 65 67 65 72 20  n exact integer 
24c0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
24d0: 66 20 74 68 65 20 71 75 61 6e 74 69 74 79 2e 0a  f the quantity..
24e0: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61  */.static void a
24f0: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
2500: 69 74 79 28 4d 65 6d 20 2a 70 52 65 63 2c 20 69  ity(Mem *pRec, i
2510: 6e 74 20 62 54 72 79 46 6f 72 49 6e 74 29 7b 0a  nt bTryForInt){.
2520: 20 20 64 6f 75 62 6c 65 20 72 56 61 6c 75 65 3b    double rValue;
2530: 0a 20 20 69 36 34 20 69 56 61 6c 75 65 3b 0a 20  .  i64 iValue;. 
2540: 20 75 38 20 65 6e 63 20 3d 20 70 52 65 63 2d 3e   u8 enc = pRec->
2550: 65 6e 63 3b 0a 20 20 61 73 73 65 72 74 28 20 28  enc;.  assert( (
2560: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pRec->flags & (M
2570: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 49 6e 74 7c 4d  EM_Str|MEM_Int|M
2580: 45 4d 5f 52 65 61 6c 29 29 3d 3d 4d 45 4d 5f 53  EM_Real))==MEM_S
2590: 74 72 20 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  tr );.  if( sqli
25a0: 74 65 33 41 74 6f 46 28 70 52 65 63 2d 3e 7a 2c  te3AtoF(pRec->z,
25b0: 20 26 72 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e   &rValue, pRec->
25c0: 6e 2c 20 65 6e 63 29 3d 3d 30 20 29 20 72 65 74  n, enc)==0 ) ret
25d0: 75 72 6e 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71  urn;.  if( 0==sq
25e0: 6c 69 74 65 33 41 74 6f 69 36 34 28 70 52 65 63  lite3Atoi64(pRec
25f0: 2d 3e 7a 2c 20 26 69 56 61 6c 75 65 2c 20 70 52  ->z, &iValue, pR
2600: 65 63 2d 3e 6e 2c 20 65 6e 63 29 20 29 7b 0a 20  ec->n, enc) ){. 
2610: 20 20 20 70 52 65 63 2d 3e 75 2e 69 20 3d 20 69     pRec->u.i = i
2620: 56 61 6c 75 65 3b 0a 20 20 20 20 70 52 65 63 2d  Value;.    pRec-
2630: 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e  >flags |= MEM_In
2640: 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  t;.  }else{.    
2650: 70 52 65 63 2d 3e 75 2e 72 20 3d 20 72 56 61 6c  pRec->u.r = rVal
2660: 75 65 3b 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c  ue;.    pRec->fl
2670: 61 67 73 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c 3b  ags |= MEM_Real;
2680: 0a 20 20 20 20 69 66 28 20 62 54 72 79 46 6f 72  .    if( bTryFor
2690: 49 6e 74 20 29 20 73 71 6c 69 74 65 33 56 64 62  Int ) sqlite3Vdb
26a0: 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79  eIntegerAffinity
26b0: 28 70 52 65 63 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f  (pRec);.  }.}../
26c0: 2a 0a 2a 2a 20 50 72 6f 63 65 73 73 69 6e 67 20  *.** Processing 
26d0: 69 73 20 64 65 74 65 72 6d 69 6e 65 20 62 79 20  is determine by 
26e0: 74 68 65 20 61 66 66 69 6e 69 74 79 20 70 61 72  the affinity par
26f0: 61 6d 65 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51  ameter:.**.** SQ
2700: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
2710: 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  :.** SQLITE_AFF_
2720: 52 45 41 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f  REAL:.** SQLITE_
2730: 41 46 46 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20  AFF_NUMERIC:.** 
2740: 20 20 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72     Try to conver
2750: 74 20 70 52 65 63 20 74 6f 20 61 6e 20 69 6e 74  t pRec to an int
2760: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
2770: 69 6f 6e 20 6f 72 20 61 20 0a 2a 2a 20 20 20 20  ion or a .**    
2780: 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 72  floating-point r
2790: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66  epresentation if
27a0: 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72   an integer repr
27b0: 65 73 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20 20  esentation.**   
27c0: 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
27d0: 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  .  Note that the
27e0: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
27f0: 6e 74 61 74 69 6f 6e 20 69 73 0a 2a 2a 20 20 20  ntation is.**   
2800: 20 61 6c 77 61 79 73 20 70 72 65 66 65 72 72 65   always preferre
2810: 64 2c 20 65 76 65 6e 20 69 66 20 74 68 65 20 61  d, even if the a
2820: 66 66 69 6e 69 74 79 20 69 73 20 52 45 41 4c 2c  ffinity is REAL,
2830: 20 62 65 63 61 75 73 65 0a 2a 2a 20 20 20 20 61   because.**    a
2840: 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73  n integer repres
2850: 65 6e 74 61 74 69 6f 6e 20 69 73 20 6d 6f 72 65  entation is more
2860: 20 73 70 61 63 65 20 65 66 66 69 63 69 65 6e 74   space efficient
2870: 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20   on disk..**.** 
2880: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 3a  SQLITE_AFF_TEXT:
2890: 0a 2a 2a 20 20 20 20 43 6f 6e 76 65 72 74 20 70  .**    Convert p
28a0: 52 65 63 20 74 6f 20 61 20 74 65 78 74 20 72 65  Rec to a text re
28b0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a  presentation..**
28c0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 42  .** SQLITE_AFF_B
28d0: 4c 4f 42 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70  LOB:.**    No-op
28e0: 2e 20 20 70 52 65 63 20 69 73 20 75 6e 63 68 61  .  pRec is uncha
28f0: 6e 67 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  nged..*/.static 
2900: 76 6f 69 64 20 61 70 70 6c 79 41 66 66 69 6e 69  void applyAffini
2910: 74 79 28 0a 20 20 4d 65 6d 20 2a 70 52 65 63 2c  ty(.  Mem *pRec,
2920: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
2930: 20 76 61 6c 75 65 20 74 6f 20 61 70 70 6c 79 20   value to apply 
2940: 61 66 66 69 6e 69 74 79 20 74 6f 20 2a 2f 0a 20  affinity to */. 
2950: 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 2c 20   char affinity, 
2960: 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69       /* The affi
2970: 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69  nity to be appli
2980: 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 20 20  ed */.  u8 enc  
2990: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
29a0: 73 65 20 74 68 69 73 20 74 65 78 74 20 65 6e 63  se this text enc
29b0: 6f 64 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66  oding */.){.  if
29c0: 28 20 61 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49  ( affinity>=SQLI
29d0: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29  TE_AFF_NUMERIC )
29e0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 61 66  {.    assert( af
29f0: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2a00: 46 46 5f 49 4e 54 45 47 45 52 20 7c 7c 20 61 66  FF_INTEGER || af
2a10: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2a20: 46 46 5f 52 45 41 4c 0a 20 20 20 20 20 20 20 20  FF_REAL.        
2a30: 20 20 20 20 20 7c 7c 20 61 66 66 69 6e 69 74 79       || affinity
2a40: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  ==SQLITE_AFF_NUM
2a50: 45 52 49 43 20 29 3b 0a 20 20 20 20 69 66 28 20  ERIC );.    if( 
2a60: 28 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d  (pRec->flags & M
2a70: 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 20 2f 2a  EM_Int)==0 ){ /*
2a80: 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d  OPTIMIZATION-IF-
2a90: 46 41 4c 53 45 2a 2f 0a 20 20 20 20 20 20 69 66  FALSE*/.      if
2aa0: 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  ( (pRec->flags &
2ab0: 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b   MEM_Real)==0 ){
2ac0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 52 65  .        if( pRe
2ad0: 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53  c->flags & MEM_S
2ae0: 74 72 20 29 20 61 70 70 6c 79 4e 75 6d 65 72 69  tr ) applyNumeri
2af0: 63 41 66 66 69 6e 69 74 79 28 70 52 65 63 2c 31  cAffinity(pRec,1
2b00: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
2b10: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
2b20: 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69  dbeIntegerAffini
2b30: 74 79 28 70 52 65 63 29 3b 0a 20 20 20 20 20 20  ty(pRec);.      
2b40: 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20  }.    }.  }else 
2b50: 69 66 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51  if( affinity==SQ
2b60: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29 7b  LITE_AFF_TEXT ){
2b70: 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 74 74  .    /* Only att
2b80: 65 6d 70 74 20 74 68 65 20 63 6f 6e 76 65 72 73  empt the convers
2b90: 69 6f 6e 20 74 6f 20 54 45 58 54 20 69 66 20 74  ion to TEXT if t
2ba0: 68 65 72 65 20 69 73 20 61 6e 20 69 6e 74 65 67  here is an integ
2bb0: 65 72 20 6f 72 20 72 65 61 6c 0a 20 20 20 20 2a  er or real.    *
2bc0: 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  * representation
2bd0: 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55 4c 4c 20   (blob and NULL 
2be0: 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f 6e 76 65  do not get conve
2bf0: 72 74 65 64 29 20 62 75 74 20 6e 6f 20 73 74 72  rted) but no str
2c00: 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 70 72 65  ing.    ** repre
2c10: 73 65 6e 74 61 74 69 6f 6e 2e 20 20 49 74 20 77  sentation.  It w
2c20: 6f 75 6c 64 20 62 65 20 68 61 72 6d 6c 65 73 73  ould be harmless
2c30: 20 74 6f 20 72 65 70 65 61 74 20 74 68 65 20 63   to repeat the c
2c40: 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 0a 20 20  onversion if .  
2c50: 20 20 2a 2a 20 74 68 65 72 65 20 69 73 20 61 6c    ** there is al
2c60: 72 65 61 64 79 20 61 20 73 74 72 69 6e 67 20 72  ready a string r
2c70: 65 70 2c 20 62 75 74 20 69 74 20 69 73 20 70 6f  ep, but it is po
2c80: 69 6e 74 6c 65 73 73 20 74 6f 20 77 61 73 74 65  intless to waste
2c90: 20 74 68 6f 73 65 0a 20 20 20 20 2a 2a 20 43 50   those.    ** CP
2ca0: 55 20 63 79 63 6c 65 73 2e 20 2a 2f 0a 20 20 20  U cycles. */.   
2cb0: 20 69 66 28 20 30 3d 3d 28 70 52 65 63 2d 3e 66   if( 0==(pRec->f
2cc0: 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 20 29 7b  lags&MEM_Str) ){
2cd0: 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d   /*OPTIMIZATION-
2ce0: 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 20  IF-FALSE*/.     
2cf0: 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67   if( (pRec->flag
2d00: 73 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f  s&(MEM_Real|MEM_
2d10: 49 6e 74 29 29 20 29 7b 0a 20 20 20 20 20 20 20  Int)) ){.       
2d20: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2d30: 74 72 69 6e 67 69 66 79 28 70 52 65 63 2c 20 65  tringify(pRec, e
2d40: 6e 63 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a  nc, 1);.      }.
2d50: 20 20 20 20 7d 0a 20 20 20 20 70 52 65 63 2d 3e      }.    pRec->
2d60: 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 52  flags &= ~(MEM_R
2d70: 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  eal|MEM_Int);.  
2d80: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74  }.}../*.** Try t
2d90: 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20 74 79  o convert the ty
2da0: 70 65 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  pe of a function
2db0: 20 61 72 67 75 6d 65 6e 74 20 6f 72 20 61 20 72   argument or a r
2dc0: 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a 2a 20  esult column.** 
2dd0: 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72  into a numeric r
2de0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20  epresentation.  
2df0: 55 73 65 20 65 69 74 68 65 72 20 49 4e 54 45 47  Use either INTEG
2e00: 45 52 20 6f 72 20 52 45 41 4c 20 77 68 69 63 68  ER or REAL which
2e10: 65 76 65 72 0a 2a 2a 20 69 73 20 61 70 70 72 6f  ever.** is appro
2e20: 70 72 69 61 74 65 2e 20 20 42 75 74 20 6f 6e 6c  priate.  But onl
2e30: 79 20 64 6f 20 74 68 65 20 63 6f 6e 76 65 72 73  y do the convers
2e40: 69 6f 6e 20 69 66 20 69 74 20 69 73 20 70 6f 73  ion if it is pos
2e50: 73 69 62 6c 65 20 77 69 74 68 6f 75 74 0a 2a 2a  sible without.**
2e60: 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61   loss of informa
2e70: 74 69 6f 6e 20 61 6e 64 20 72 65 74 75 72 6e 20  tion and return 
2e80: 74 68 65 20 72 65 76 69 73 65 64 20 74 79 70 65  the revised type
2e90: 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   of the argument
2ea0: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
2eb0: 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63 5f 74  _value_numeric_t
2ec0: 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ype(sqlite3_valu
2ed0: 65 20 2a 70 56 61 6c 29 7b 0a 20 20 69 6e 74 20  e *pVal){.  int 
2ee0: 65 54 79 70 65 20 3d 20 73 71 6c 69 74 65 33 5f  eType = sqlite3_
2ef0: 76 61 6c 75 65 5f 74 79 70 65 28 70 56 61 6c 29  value_type(pVal)
2f00: 3b 0a 20 20 69 66 28 20 65 54 79 70 65 3d 3d 53  ;.  if( eType==S
2f10: 51 4c 49 54 45 5f 54 45 58 54 20 29 7b 0a 20 20  QLITE_TEXT ){.  
2f20: 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20 28 4d    Mem *pMem = (M
2f30: 65 6d 2a 29 70 56 61 6c 3b 0a 20 20 20 20 61 70  em*)pVal;.    ap
2f40: 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
2f50: 74 79 28 70 4d 65 6d 2c 20 30 29 3b 0a 20 20 20  ty(pMem, 0);.   
2f60: 20 65 54 79 70 65 20 3d 20 73 71 6c 69 74 65 33   eType = sqlite3
2f70: 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 56 61 6c  _value_type(pVal
2f80: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
2f90: 65 54 79 70 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  eType;.}../*.** 
2fa0: 45 78 70 6f 72 74 65 64 20 76 65 72 73 69 6f 6e  Exported version
2fb0: 20 6f 66 20 61 70 70 6c 79 41 66 66 69 6e 69 74   of applyAffinit
2fc0: 79 28 29 2e 20 54 68 69 73 20 6f 6e 65 20 77 6f  y(). This one wo
2fd0: 72 6b 73 20 6f 6e 20 73 71 6c 69 74 65 33 5f 76  rks on sqlite3_v
2fe0: 61 6c 75 65 2a 2c 20 0a 2a 2a 20 6e 6f 74 20 74  alue*, .** not t
2ff0: 68 65 20 69 6e 74 65 72 6e 61 6c 20 4d 65 6d 2a  he internal Mem*
3000: 20 74 79 70 65 2e 0a 2a 2f 0a 76 6f 69 64 20 73   type..*/.void s
3010: 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79  qlite3ValueApply
3020: 41 66 66 69 6e 69 74 79 28 0a 20 20 73 71 6c 69  Affinity(.  sqli
3030: 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 2c  te3_value *pVal,
3040: 20 0a 20 20 75 38 20 61 66 66 69 6e 69 74 79 2c   .  u8 affinity,
3050: 20 0a 20 20 75 38 20 65 6e 63 0a 29 7b 0a 20 20   .  u8 enc.){.  
3060: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 28 4d  applyAffinity((M
3070: 65 6d 20 2a 29 70 56 61 6c 2c 20 61 66 66 69 6e  em *)pVal, affin
3080: 69 74 79 2c 20 65 6e 63 29 3b 0a 7d 0a 0a 2f 2a  ity, enc);.}../*
3090: 0a 2a 2a 20 70 4d 65 6d 20 63 75 72 72 65 6e 74  .** pMem current
30a0: 6c 79 20 6f 6e 6c 79 20 68 6f 6c 64 73 20 61 20  ly only holds a 
30b0: 73 74 72 69 6e 67 20 74 79 70 65 20 28 6f 72 20  string type (or 
30c0: 6d 61 79 62 65 20 61 20 42 4c 4f 42 20 74 68 61  maybe a BLOB tha
30d0: 74 20 77 65 20 63 61 6e 0a 2a 2a 20 69 6e 74 65  t we can.** inte
30e0: 72 70 72 65 74 20 61 73 20 61 20 73 74 72 69 6e  rpret as a strin
30f0: 67 20 69 66 20 77 65 20 77 61 6e 74 20 74 6f 29  g if we want to)
3100: 2e 20 20 43 6f 6d 70 75 74 65 20 69 74 73 20 63  .  Compute its c
3110: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a 2a 2a 20  orresponding.** 
3120: 6e 75 6d 65 72 69 63 20 74 79 70 65 2c 20 69 66  numeric type, if
3130: 20 68 61 73 20 6f 6e 65 2e 20 20 53 65 74 20 74   has one.  Set t
3140: 68 65 20 70 4d 65 6d 2d 3e 75 2e 72 20 61 6e 64  he pMem->u.r and
3150: 20 70 4d 65 6d 2d 3e 75 2e 69 20 66 69 65 6c 64   pMem->u.i field
3160: 73 0a 2a 2a 20 61 63 63 6f 72 64 69 6e 67 6c 79  s.** accordingly
3170: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31 36 20  ..*/.static u16 
3180: 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20  SQLITE_NOINLINE 
3190: 63 6f 6d 70 75 74 65 4e 75 6d 65 72 69 63 54 79  computeNumericTy
31a0: 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20  pe(Mem *pMem){. 
31b0: 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e   assert( (pMem->
31c0: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74  flags & (MEM_Int
31d0: 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d 3d 30 20 29  |MEM_Real))==0 )
31e0: 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65  ;.  assert( (pMe
31f0: 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  m->flags & (MEM_
3200: 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 21 3d  Str|MEM_Blob))!=
3210: 30 20 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  0 );.  if( sqlit
3220: 65 33 41 74 6f 46 28 70 4d 65 6d 2d 3e 7a 2c 20  e3AtoF(pMem->z, 
3230: 26 70 4d 65 6d 2d 3e 75 2e 72 2c 20 70 4d 65 6d  &pMem->u.r, pMem
3240: 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63 29 3d  ->n, pMem->enc)=
3250: 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  =0 ){.    return
3260: 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71   0;.  }.  if( sq
3270: 6c 69 74 65 33 41 74 6f 69 36 34 28 70 4d 65 6d  lite3Atoi64(pMem
3280: 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e 69 2c  ->z, &pMem->u.i,
3290: 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e   pMem->n, pMem->
32a0: 65 6e 63 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  enc)==SQLITE_OK 
32b0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 4d 45  ){.    return ME
32c0: 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20 72 65 74  M_Int;.  }.  ret
32d0: 75 72 6e 20 4d 45 4d 5f 52 65 61 6c 3b 0a 7d 0a  urn MEM_Real;.}.
32e0: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  ./*.** Return th
32f0: 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 66  e numeric type f
3300: 6f 72 20 70 4d 65 6d 2c 20 65 69 74 68 65 72 20  or pMem, either 
3310: 4d 45 4d 5f 49 6e 74 20 6f 72 20 4d 45 4d 5f 52  MEM_Int or MEM_R
3320: 65 61 6c 20 6f 72 20 62 6f 74 68 20 6f 72 0a 2a  eal or both or.*
3330: 2a 20 6e 6f 6e 65 2e 20 20 0a 2a 2a 0a 2a 2a 20  * none.  .**.** 
3340: 55 6e 6c 69 6b 65 20 61 70 70 6c 79 4e 75 6d 65  Unlike applyNume
3350: 72 69 63 41 66 66 69 6e 69 74 79 28 29 2c 20 74  ricAffinity(), t
3360: 68 69 73 20 72 6f 75 74 69 6e 65 20 64 6f 65 73  his routine does
3370: 20 6e 6f 74 20 6d 6f 64 69 66 79 20 70 4d 65 6d   not modify pMem
3380: 2d 3e 66 6c 61 67 73 2e 0a 2a 2a 20 42 75 74 20  ->flags..** But 
3390: 69 74 20 64 6f 65 73 20 73 65 74 20 70 4d 65 6d  it does set pMem
33a0: 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e  ->u.r and pMem->
33b0: 75 2e 69 20 61 70 70 72 6f 70 72 69 61 74 65 6c  u.i appropriatel
33c0: 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31 36  y..*/.static u16
33d0: 20 6e 75 6d 65 72 69 63 54 79 70 65 28 4d 65 6d   numericType(Mem
33e0: 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 66 28 20 70   *pMem){.  if( p
33f0: 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  Mem->flags & (ME
3400: 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 20  M_Int|MEM_Real) 
3410: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 70 4d  ){.    return pM
3420: 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  em->flags & (MEM
3430: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 3b 0a  _Int|MEM_Real);.
3440: 20 20 7d 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e    }.  if( pMem->
3450: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72  flags & (MEM_Str
3460: 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a 20 20  |MEM_Blob) ){.  
3470: 20 20 72 65 74 75 72 6e 20 63 6f 6d 70 75 74 65    return compute
3480: 4e 75 6d 65 72 69 63 54 79 70 65 28 70 4d 65 6d  NumericType(pMem
3490: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
34a0: 30 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c  0;.}..#ifdef SQL
34b0: 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20  ITE_DEBUG./*.** 
34c0: 57 72 69 74 65 20 61 20 6e 69 63 65 20 73 74 72  Write a nice str
34d0: 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74 69  ing representati
34e0: 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e  on of the conten
34f0: 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65 6d 0a  ts of cell pMem.
3500: 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72 20 7a  ** into buffer z
3510: 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42 75 66  Buf, length nBuf
3520: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
3530: 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72  3VdbeMemPrettyPr
3540: 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63  int(Mem *pMem, c
3550: 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20 63 68  har *zBuf){.  ch
3560: 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75 66 3b  ar *zCsr = zBuf;
3570: 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65 6d 2d  .  int f = pMem-
3580: 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61 74 69  >flags;..  stati
3590: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f  c const char *co
35a0: 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d  nst encnames[] =
35b0: 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22 2c 20   {"(X)", "(8)", 
35c0: 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36 42 45  "(16LE)", "(16BE
35d0: 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26 4d 45  )"};..  if( f&ME
35e0: 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20 69 6e  M_Blob ){.    in
35f0: 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20 63 3b  t i;.    char c;
3600: 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d  .    if( f & MEM
3610: 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 63 20  _Dyn ){.      c 
3620: 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73  = 'z';.      ass
3630: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53  ert( (f & (MEM_S
3640: 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29  tatic|MEM_Ephem)
3650: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
3660: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74  e if( f & MEM_St
3670: 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20 63 20  atic ){.      c 
3680: 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73  = 't';.      ass
3690: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44  ert( (f & (MEM_D
36a0: 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d  yn|MEM_Ephem))==
36b0: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  0 );.    }else i
36c0: 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d  f( f & MEM_Ephem
36d0: 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 65   ){.      c = 'e
36e0: 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ';.      assert(
36f0: 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69   (f & (MEM_Stati
3700: 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29  c|MEM_Dyn))==0 )
3710: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
3720: 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20 20 20     c = 's';.    
3730: 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  }..    sqlite3_s
3740: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3750: 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a 20 20 20  r, "%c", c);.   
3760: 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33   zCsr += sqlite3
3770: 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a  Strlen30(zCsr);.
3780: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
3790: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20  intf(100, zCsr, 
37a0: 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b  "%d[", pMem->n);
37b0: 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c  .    zCsr += sql
37c0: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73  ite3Strlen30(zCs
37d0: 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b  r);.    for(i=0;
37e0: 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d   i<16 && i<pMem-
37f0: 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  >n; i++){.      
3800: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
3810: 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 30 32  (100, zCsr, "%02
3820: 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d 2d 3e  X", ((int)pMem->
3830: 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b 0a 20  z[i] & 0xFF));. 
3840: 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c       zCsr += sql
3850: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73  ite3Strlen30(zCs
3860: 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f  r);.    }.    fo
3870: 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69  r(i=0; i<16 && i
3880: 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a  <pMem->n; i++){.
3890: 20 20 20 20 20 20 63 68 61 72 20 7a 20 3d 20 70        char z = p
38a0: 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20 20 20  Mem->z[i];.     
38b0: 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a 3e 31   if( z<32 || z>1
38c0: 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d 20 27  26 ) *zCsr++ = '
38d0: 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73 65 20 2a  .';.      else *
38e0: 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20 20 20  zCsr++ = z;.    
38f0: 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  }..    sqlite3_s
3900: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3910: 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63 6e 61 6d  r, "]%s", encnam
3920: 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a  es[pMem->enc]);.
3930: 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69      zCsr += sqli
3940: 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72  te3Strlen30(zCsr
3950: 29 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  );.    if( f & M
3960: 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20  EM_Zero ){.     
3970: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
3980: 66 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b 25 64  f(100, zCsr,"+%d
3990: 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72 6f  z",pMem->u.nZero
39a0: 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d  );.      zCsr +=
39b0: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
39c0: 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20  (zCsr);.    }.  
39d0: 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27 3b 0a    *zCsr = '\0';.
39e0: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
39f0: 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 69  MEM_Str ){.    i
3a00: 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42 75  nt j, k;.    zBu
3a10: 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20  f[0] = ' ';.    
3a20: 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20  if( f & MEM_Dyn 
3a30: 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d  ){.      zBuf[1]
3a40: 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73   = 'z';.      as
3a50: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
3a60: 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d  Static|MEM_Ephem
3a70: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
3a80: 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53  se if( f & MEM_S
3a90: 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20 7a  tatic ){.      z
3aa0: 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a 20 20  Buf[1] = 't';.  
3ab0: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
3ac0: 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70   (MEM_Dyn|MEM_Ep
3ad0: 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  hem))==0 );.    
3ae0: 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45  }else if( f & ME
3af0: 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20  M_Ephem ){.     
3b00: 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27 3b 0a   zBuf[1] = 'e';.
3b10: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
3b20: 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d   & (MEM_Static|M
3b30: 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20  EM_Dyn))==0 );. 
3b40: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
3b50: 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b 0a 20  zBuf[1] = 's';. 
3b60: 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32 3b 0a     }.    k = 2;.
3b70: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
3b80: 69 6e 74 66 28 31 30 30 2c 20 26 7a 42 75 66 5b  intf(100, &zBuf[
3b90: 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d 2d 3e  k], "%d", pMem->
3ba0: 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c  n);.    k += sql
3bb0: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42  ite3Strlen30(&zB
3bc0: 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66  uf[k]);.    zBuf
3bd0: 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20 20 20  [k++] = '[';.   
3be0: 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35 20 26   for(j=0; j<15 &
3bf0: 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b  & j<pMem->n; j++
3c00: 29 7b 0a 20 20 20 20 20 20 75 38 20 63 20 3d 20  ){.      u8 c = 
3c10: 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20 20  pMem->z[j];.    
3c20: 20 20 69 66 28 20 63 3e 3d 30 78 32 30 20 26 26    if( c>=0x20 &&
3c30: 20 63 3c 30 78 37 66 20 29 7b 0a 20 20 20 20 20   c<0x7f ){.     
3c40: 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 63     zBuf[k++] = c
3c50: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
3c60: 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d         zBuf[k++]
3c70: 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 7d 0a   = '.';.      }.
3c80: 20 20 20 20 7d 0a 20 20 20 20 7a 42 75 66 5b 6b      }.    zBuf[k
3c90: 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20 20 73  ++] = ']';.    s
3ca0: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
3cb0: 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20 65 6e  100,&zBuf[k], en
3cc0: 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63  cnames[pMem->enc
3cd0: 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c  ]);.    k += sql
3ce0: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42  ite3Strlen30(&zB
3cf0: 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66  uf[k]);.    zBuf
3d00: 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d  [k++] = 0;.  }.}
3d10: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
3d20: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a  SQLITE_DEBUG./*.
3d30: 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 76 61 6c  ** Print the val
3d40: 75 65 20 6f 66 20 61 20 72 65 67 69 73 74 65 72  ue of a register
3d50: 20 66 6f 72 20 74 72 61 63 69 6e 67 20 70 75 72   for tracing pur
3d60: 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74 69 63  poses:.*/.static
3d70: 20 76 6f 69 64 20 6d 65 6d 54 72 61 63 65 50 72   void memTracePr
3d80: 69 6e 74 28 4d 65 6d 20 2a 70 29 7b 0a 20 20 69  int(Mem *p){.  i
3d90: 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  f( p->flags & ME
3da0: 4d 5f 55 6e 64 65 66 69 6e 65 64 20 29 7b 0a 20  M_Undefined ){. 
3db0: 20 20 20 70 72 69 6e 74 66 28 22 20 75 6e 64 65     printf(" unde
3dc0: 66 69 6e 65 64 22 29 3b 0a 20 20 7d 65 6c 73 65  fined");.  }else
3dd0: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3de0: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
3df0: 70 72 69 6e 74 66 28 22 20 4e 55 4c 4c 22 29 3b  printf(" NULL");
3e00: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28 70 2d  .  }else if( (p-
3e10: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e  >flags & (MEM_In
3e20: 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28 4d 45  t|MEM_Str))==(ME
3e30: 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 20 29  M_Int|MEM_Str) )
3e40: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 73  {.    printf(" s
3e50: 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29  i:%lld", p->u.i)
3e60: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d  ;.  }else if( p-
3e70: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
3e80: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
3e90: 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69   i:%lld", p->u.i
3ea0: 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
3eb0: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
3ec0: 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20 69 66  POINT.  }else if
3ed0: 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ( p->flags & MEM
3ee0: 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70 72 69  _Real ){.    pri
3ef0: 6e 74 66 28 22 20 72 3a 25 67 22 2c 20 70 2d 3e  ntf(" r:%g", p->
3f00: 75 2e 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d  u.r);.#endif.  }
3f10: 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67  else if( p->flag
3f20: 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 20 29  s & MEM_RowSet )
3f30: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 28  {.    printf(" (
3f40: 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d 65 6c  rowset)");.  }el
3f50: 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a 42 75  se{.    char zBu
3f60: 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71 6c 69  f[200];.    sqli
3f70: 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79  te3VdbeMemPretty
3f80: 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29 3b 0a  Print(p, zBuf);.
3f90: 20 20 20 20 70 72 69 6e 74 66 28 22 20 25 73 22      printf(" %s"
3fa0: 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 20 20 69  , zBuf);.  }.  i
3fb0: 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  f( p->flags & ME
3fc0: 4d 5f 53 75 62 74 79 70 65 20 29 20 70 72 69 6e  M_Subtype ) prin
3fd0: 74 66 28 22 20 73 75 62 74 79 70 65 3d 30 78 25  tf(" subtype=0x%
3fe0: 30 32 78 22 2c 20 70 2d 3e 65 53 75 62 74 79 70  02x", p->eSubtyp
3ff0: 65 29 3b 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69  e);.}.static voi
4000: 64 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28  d registerTrace(
4010: 69 6e 74 20 69 52 65 67 2c 20 4d 65 6d 20 2a 70  int iReg, Mem *p
4020: 29 7b 0a 20 20 70 72 69 6e 74 66 28 22 52 45 47  ){.  printf("REG
4030: 5b 25 64 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b  [%d] = ", iReg);
4040: 0a 20 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74  .  memTracePrint
4050: 28 70 29 3b 0a 20 20 70 72 69 6e 74 66 28 22 5c  (p);.  printf("\
4060: 6e 22 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  n");.}.#endif..#
4070: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
4080: 55 47 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47  UG.#  define REG
4090: 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29  ISTER_TRACE(R,M)
40a0: 20 69 66 28 64 62 2d 3e 66 6c 61 67 73 26 53 51   if(db->flags&SQ
40b0: 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 29 72  LITE_VdbeTrace)r
40c0: 65 67 69 73 74 65 72 54 72 61 63 65 28 52 2c 4d  egisterTrace(R,M
40d0: 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  ).#else.#  defin
40e0: 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45  e REGISTER_TRACE
40f0: 28 52 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 0a 23  (R,M).#endif...#
4100: 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49  ifdef VDBE_PROFI
4110: 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77 74 69 6d  LE../* .** hwtim
4120: 65 2e 68 20 63 6f 6e 74 61 69 6e 73 20 69 6e 6c  e.h contains inl
4130: 69 6e 65 20 61 73 73 65 6d 62 6c 65 72 20 63 6f  ine assembler co
4140: 64 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e 74  de for implement
4150: 69 6e 67 20 0a 2a 2a 20 68 69 67 68 2d 70 65 72  ing .** high-per
4160: 66 6f 72 6d 61 6e 63 65 20 74 69 6d 69 6e 67 20  formance timing 
4170: 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23 69 6e  routines..*/.#in
4180: 63 6c 75 64 65 20 22 68 77 74 69 6d 65 2e 68 22  clude "hwtime.h"
4190: 0a 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ..#endif..#ifnde
41a0: 66 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 54  f NDEBUG./*.** T
41b0: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
41c0: 6f 6e 6c 79 20 63 61 6c 6c 65 64 20 66 72 6f 6d  only called from
41d0: 20 77 69 74 68 69 6e 20 61 6e 20 61 73 73 65 72   within an asser
41e0: 74 28 29 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  t() expression. 
41f0: 49 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74 68 61  It.** checks tha
4200: 74 20 74 68 65 20 73 71 6c 69 74 65 33 2e 6e 54  t the sqlite3.nT
4210: 72 61 6e 73 61 63 74 69 6f 6e 20 76 61 72 69 61  ransaction varia
4220: 62 6c 65 20 69 73 20 63 6f 72 72 65 63 74 6c 79  ble is correctly
4230: 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e   set to.** the n
4240: 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61  umber of non-tra
4250: 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
4260: 6e 74 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  nts currently in
4270: 20 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b 65 64 20   the .** linked 
4280: 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74  list starting at
4290: 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f   sqlite3.pSavepo
42a0: 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55 73 61 67  int..** .** Usag
42b0: 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73  e:.**.**     ass
42c0: 65 72 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f  ert( checkSavepo
42d0: 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a  intCount(db) );.
42e0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63 68  */.static int ch
42f0: 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e  eckSavepointCoun
4300: 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a  t(sqlite3 *db){.
4310: 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20 20 53    int n = 0;.  S
4320: 61 76 65 70 6f 69 6e 74 20 2a 70 3b 0a 20 20 66  avepoint *p;.  f
4330: 6f 72 28 70 3d 64 62 2d 3e 70 53 61 76 65 70 6f  or(p=db->pSavepo
4340: 69 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e 70 4e 65  int; p; p=p->pNe
4350: 78 74 29 20 6e 2b 2b 3b 0a 20 20 61 73 73 65 72  xt) n++;.  asser
4360: 74 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53 61 76 65  t( n==(db->nSave
4370: 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 69 73 54 72  point + db->isTr
4380: 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
4390: 6e 74 29 20 29 3b 0a 20 20 72 65 74 75 72 6e 20  nt) );.  return 
43a0: 31 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  1;.}.#endif../*.
43b0: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 72 65  ** Return the re
43c0: 67 69 73 74 65 72 20 6f 66 20 70 4f 70 2d 3e 70  gister of pOp->p
43d0: 32 20 61 66 74 65 72 20 66 69 72 73 74 20 70 72  2 after first pr
43e0: 65 70 61 72 69 6e 67 20 69 74 20 74 6f 20 62 65  eparing it to be
43f0: 0a 2a 2a 20 6f 76 65 72 77 72 69 74 74 65 6e 20  .** overwritten 
4400: 77 69 74 68 20 61 6e 20 69 6e 74 65 67 65 72 20  with an integer 
4410: 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  value..*/.static
4420: 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45   SQLITE_NOINLINE
4430: 20 4d 65 6d 20 2a 6f 75 74 32 50 72 65 72 65 6c   Mem *out2Prerel
4440: 65 61 73 65 57 69 74 68 43 6c 65 61 72 28 4d 65  easeWithClear(Me
4450: 6d 20 2a 70 4f 75 74 29 7b 0a 20 20 73 71 6c 69  m *pOut){.  sqli
4460: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
4470: 6c 28 70 4f 75 74 29 3b 0a 20 20 70 4f 75 74 2d  l(pOut);.  pOut-
4480: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
4490: 3b 0a 20 20 72 65 74 75 72 6e 20 70 4f 75 74 3b  ;.  return pOut;
44a0: 0a 7d 0a 73 74 61 74 69 63 20 4d 65 6d 20 2a 6f  .}.static Mem *o
44b0: 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 56 64  ut2Prerelease(Vd
44c0: 62 65 20 2a 70 2c 20 56 64 62 65 4f 70 20 2a 70  be *p, VdbeOp *p
44d0: 4f 70 29 7b 0a 20 20 4d 65 6d 20 2a 70 4f 75 74  Op){.  Mem *pOut
44e0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
44f0: 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  >p2>0 );.  asser
4500: 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e  t( pOp->p2<=(p->
4510: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
4520: 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 20 3d  sor) );.  pOut =
4530: 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
4540: 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  2];.  memAboutTo
4550: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
4560: 0a 20 20 69 66 28 20 56 64 62 65 4d 65 6d 44 79  .  if( VdbeMemDy
4570: 6e 61 6d 69 63 28 70 4f 75 74 29 20 29 7b 20 2f  namic(pOut) ){ /
4580: 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46  *OPTIMIZATION-IF
4590: 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 72 65 74  -FALSE*/.    ret
45a0: 75 72 6e 20 6f 75 74 32 50 72 65 72 65 6c 65 61  urn out2Prerelea
45b0: 73 65 57 69 74 68 43 6c 65 61 72 28 70 4f 75 74  seWithClear(pOut
45c0: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
45d0: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
45e0: 4d 5f 49 6e 74 3b 0a 20 20 20 20 72 65 74 75 72  M_Int;.    retur
45f0: 6e 20 70 4f 75 74 3b 0a 20 20 7d 0a 7d 0a 0a 0a  n pOut;.  }.}...
4600: 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 61 73  /*.** Execute as
4610: 20 6d 75 63 68 20 6f 66 20 61 20 56 44 42 45 20   much of a VDBE 
4620: 70 72 6f 67 72 61 6d 20 61 73 20 77 65 20 63 61  program as we ca
4630: 6e 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68  n..** This is th
4640: 65 20 63 6f 72 65 20 6f 66 20 73 71 6c 69 74 65  e core of sqlite
4650: 33 5f 73 74 65 70 28 29 2e 20 20 0a 2a 2f 0a 69  3_step().  .*/.i
4660: 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 45 78  nt sqlite3VdbeEx
4670: 65 63 28 0a 20 20 56 64 62 65 20 2a 70 20 20 20  ec(.  Vdbe *p   
4680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4690: 20 2f 2a 20 54 68 65 20 56 44 42 45 20 2a 2f 0a   /* The VDBE */.
46a0: 29 7b 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20 70  ){.  Op *aOp = p
46b0: 2d 3e 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20  ->aOp;          
46c0: 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4f  /* Copy of p->aO
46d0: 70 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 20 3d  p */.  Op *pOp =
46e0: 20 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20 20   aOp;           
46f0: 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70 65    /* Current ope
4700: 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 20 64 65  ration */.#if de
4710: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
4720: 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 56  UG) || defined(V
4730: 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a 20 20 4f  DBE_PROFILE).  O
4740: 70 20 2a 70 4f 72 69 67 4f 70 3b 20 20 20 20 20  p *pOrigOp;     
4750: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
4760: 75 65 20 6f 66 20 70 4f 70 20 61 74 20 74 68 65  ue of pOp at the
4770: 20 74 6f 70 20 6f 66 20 74 68 65 20 6c 6f 6f 70   top of the loop
4780: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64 65   */.#endif.#ifde
4790: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
47a0: 20 69 6e 74 20 6e 45 78 74 72 61 44 65 6c 65 74   int nExtraDelet
47b0: 65 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 56  e = 0;      /* V
47c0: 65 72 69 66 69 65 73 20 46 4f 52 44 45 4c 45 54  erifies FORDELET
47d0: 45 20 61 6e 64 20 41 55 58 44 45 4c 45 54 45 20  E and AUXDELETE 
47e0: 66 6c 61 67 73 20 2a 2f 0a 23 65 6e 64 69 66 0a  flags */.#endif.
47f0: 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54    int rc = SQLIT
4800: 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20 2f 2a 20  E_OK;        /* 
4810: 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
4820: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  */.  sqlite3 *db
4830: 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20 20 20 20   = p->db;       
4840: 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
4850: 2a 2f 0a 20 20 75 38 20 72 65 73 65 74 53 63 68  */.  u8 resetSch
4860: 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 30 3b 20  emaOnFault = 0; 
4870: 2f 2a 20 52 65 73 65 74 20 73 63 68 65 6d 61 20  /* Reset schema 
4880: 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 69  after an error i
4890: 66 20 70 6f 73 69 74 69 76 65 20 2a 2f 0a 20 20  f positive */.  
48a0: 75 38 20 65 6e 63 6f 64 69 6e 67 20 3d 20 45 4e  u8 encoding = EN
48b0: 43 28 64 62 29 3b 20 20 20 20 20 2f 2a 20 54 68  C(db);     /* Th
48c0: 65 20 64 61 74 61 62 61 73 65 20 65 6e 63 6f 64  e database encod
48d0: 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 43 6f  ing */.  int iCo
48e0: 6d 70 61 72 65 20 3d 20 30 3b 20 20 20 20 20 20  mpare = 0;      
48f0: 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66      /* Result of
4900: 20 6c 61 73 74 20 4f 50 5f 43 6f 6d 70 61 72 65   last OP_Compare
4910: 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 20 20   operation */.  
4920: 75 6e 73 69 67 6e 65 64 20 6e 56 6d 53 74 65 70  unsigned nVmStep
4930: 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e 75   = 0;      /* Nu
4940: 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20  mber of virtual 
4950: 6d 61 63 68 69 6e 65 20 73 74 65 70 73 20 2a 2f  machine steps */
4960: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
4970: 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41  OMIT_PROGRESS_CA
4980: 4c 4c 42 41 43 4b 0a 20 20 75 6e 73 69 67 6e 65  LLBACK.  unsigne
4990: 64 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74  d nProgressLimit
49a0: 20 3d 20 30 3b 2f 2a 20 49 6e 76 6f 6b 65 20 78   = 0;/* Invoke x
49b0: 50 72 6f 67 72 65 73 73 28 29 20 77 68 65 6e 20  Progress() when 
49c0: 6e 56 6d 53 74 65 70 20 72 65 61 63 68 65 73 20  nVmStep reaches 
49d0: 74 68 69 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  this */.#endif. 
49e0: 20 4d 65 6d 20 2a 61 4d 65 6d 20 3d 20 70 2d 3e   Mem *aMem = p->
49f0: 61 4d 65 6d 3b 20 20 20 20 20 20 20 2f 2a 20 43  aMem;       /* C
4a00: 6f 70 79 20 6f 66 20 70 2d 3e 61 4d 65 6d 20 2a  opy of p->aMem *
4a10: 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 20 3d 20  /.  Mem *pIn1 = 
4a20: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
4a30: 2a 20 31 73 74 20 69 6e 70 75 74 20 6f 70 65 72  * 1st input oper
4a40: 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49  and */.  Mem *pI
4a50: 6e 32 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  n2 = 0;         
4a60: 20 20 20 20 2f 2a 20 32 6e 64 20 69 6e 70 75 74      /* 2nd input
4a70: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65   operand */.  Me
4a80: 6d 20 2a 70 49 6e 33 20 3d 20 30 3b 20 20 20 20  m *pIn3 = 0;    
4a90: 20 20 20 20 20 20 20 20 20 2f 2a 20 33 72 64 20           /* 3rd 
4aa0: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
4ab0: 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20 3d 20 30  .  Mem *pOut = 0
4ac0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
4ad0: 20 4f 75 74 70 75 74 20 6f 70 65 72 61 6e 64 20   Output operand 
4ae0: 2a 2f 0a 20 20 69 6e 74 20 2a 61 50 65 72 6d 75  */.  int *aPermu
4af0: 74 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  te = 0;         
4b00: 2f 2a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f  /* Permutation o
4b10: 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 4f 50  f columns for OP
4b20: 5f 43 6f 6d 70 61 72 65 20 2a 2f 0a 20 20 69 36  _Compare */.  i6
4b30: 34 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62  4 lastRowid = db
4b40: 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 20 20 2f 2a  ->lastRowid;  /*
4b50: 20 53 61 76 65 64 20 76 61 6c 75 65 20 6f 66 20   Saved value of 
4b60: 74 68 65 20 6c 61 73 74 20 69 6e 73 65 72 74 20  the last insert 
4b70: 52 4f 57 49 44 20 2a 2f 0a 23 69 66 64 65 66 20  ROWID */.#ifdef 
4b80: 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 75  VDBE_PROFILE.  u
4b90: 36 34 20 73 74 61 72 74 3b 20 20 20 20 20 20 20  64 start;       
4ba0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 50 55            /* CPU
4bb0: 20 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61 74 20   clock count at 
4bc0: 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65 20  start of opcode 
4bd0: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 2a 2a  */.#endif.  /***
4be0: 20 49 4e 53 45 52 54 20 53 54 41 43 4b 20 55 4e   INSERT STACK UN
4bf0: 49 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a 0a 20  ION HERE ***/.. 
4c00: 20 61 73 73 65 72 74 28 20 70 2d 3e 6d 61 67 69   assert( p->magi
4c10: 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55  c==VDBE_MAGIC_RU
4c20: 4e 20 29 3b 20 20 2f 2a 20 73 71 6c 69 74 65 33  N );  /* sqlite3
4c30: 5f 73 74 65 70 28 29 20 76 65 72 69 66 69 65 73  _step() verifies
4c40: 20 74 68 69 73 20 2a 2f 0a 20 20 73 71 6c 69 74   this */.  sqlit
4c50: 65 33 56 64 62 65 45 6e 74 65 72 28 70 29 3b 0a  e3VdbeEnter(p);.
4c60: 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c    if( p->rc==SQL
4c70: 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20  ITE_NOMEM ){.   
4c80: 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73   /* This happens
4c90: 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 69   if a malloc() i
4ca0: 6e 73 69 64 65 20 61 20 63 61 6c 6c 20 74 6f 20  nside a call to 
4cb0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
4cc0: 65 78 74 28 29 20 6f 72 0a 20 20 20 20 2a 2a 20  ext() or.    ** 
4cd0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
4ce0: 65 78 74 31 36 28 29 20 66 61 69 6c 65 64 2e 20  ext16() failed. 
4cf0: 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f   */.    goto no_
4d00: 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  mem;.  }.  asser
4d10: 74 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45  t( p->rc==SQLITE
4d20: 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63 26 30 78  _OK || (p->rc&0x
4d30: 66 66 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59  ff)==SQLITE_BUSY
4d40: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
4d50: 3e 62 49 73 52 65 61 64 65 72 20 7c 7c 20 70 2d  >bIsReader || p-
4d60: 3e 72 65 61 64 4f 6e 6c 79 21 3d 30 20 29 3b 0a  >readOnly!=0 );.
4d70: 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45    p->rc = SQLITE
4d80: 5f 4f 4b 3b 0a 20 20 70 2d 3e 69 43 75 72 72 65  _OK;.  p->iCurre
4d90: 6e 74 54 69 6d 65 20 3d 20 30 3b 0a 20 20 61 73  ntTime = 0;.  as
4da0: 73 65 72 74 28 20 70 2d 3e 65 78 70 6c 61 69 6e  sert( p->explain
4db0: 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e 70 52 65 73  ==0 );.  p->pRes
4dc0: 75 6c 74 53 65 74 20 3d 20 30 3b 0a 20 20 64 62  ultSet = 0;.  db
4dd0: 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42  ->busyHandler.nB
4de0: 75 73 79 20 3d 20 30 3b 0a 20 20 69 66 28 20 64  usy = 0;.  if( d
4df0: 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70  b->u1.isInterrup
4e00: 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  ted ) goto abort
4e10: 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70  _due_to_interrup
4e20: 74 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  t;.  sqlite3Vdbe
4e30: 49 4f 54 72 61 63 65 53 71 6c 28 70 29 3b 0a 23  IOTraceSql(p);.#
4e40: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
4e50: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
4e60: 42 41 43 4b 0a 20 20 69 66 28 20 64 62 2d 3e 78  BACK.  if( db->x
4e70: 50 72 6f 67 72 65 73 73 20 29 7b 0a 20 20 20 20  Progress ){.    
4e80: 75 33 32 20 69 50 72 69 6f 72 20 3d 20 70 2d 3e  u32 iPrior = p->
4e90: 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f  aCounter[SQLITE_
4ea0: 53 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f 53 54  STMTSTATUS_VM_ST
4eb0: 45 50 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  EP];.    assert(
4ec0: 20 30 20 3c 20 64 62 2d 3e 6e 50 72 6f 67 72 65   0 < db->nProgre
4ed0: 73 73 4f 70 73 20 29 3b 0a 20 20 20 20 6e 50 72  ssOps );.    nPr
4ee0: 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 64 62  ogressLimit = db
4ef0: 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 2d  ->nProgressOps -
4f00: 20 28 69 50 72 69 6f 72 20 25 20 64 62 2d 3e 6e   (iPrior % db->n
4f10: 50 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a 20 20  ProgressOps);.  
4f20: 7d 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  }.#endif.#ifdef 
4f30: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 73  SQLITE_DEBUG.  s
4f40: 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67  qlite3BeginBenig
4f50: 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 69 66 28  nMalloc();.  if(
4f60: 20 70 2d 3e 70 63 3d 3d 30 0a 20 20 20 26 26 20   p->pc==0.   && 
4f70: 28 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20  (p->db->flags & 
4f80: 28 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74  (SQLITE_VdbeList
4f90: 69 6e 67 7c 53 51 4c 49 54 45 5f 56 64 62 65 45  ing|SQLITE_VdbeE
4fa0: 51 50 7c 53 51 4c 49 54 45 5f 56 64 62 65 54 72  QP|SQLITE_VdbeTr
4fb0: 61 63 65 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20  ace))!=0.  ){.  
4fc0: 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 69 6e 74    int i;.    int
4fd0: 20 6f 6e 63 65 20 3d 20 31 3b 0a 20 20 20 20 73   once = 1;.    s
4fe0: 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 53  qlite3VdbePrintS
4ff0: 71 6c 28 70 29 3b 0a 20 20 20 20 69 66 28 20 70  ql(p);.    if( p
5000: 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51  ->db->flags & SQ
5010: 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67  LITE_VdbeListing
5020: 20 29 7b 0a 20 20 20 20 20 20 70 72 69 6e 74 66   ){.      printf
5030: 28 22 56 44 42 45 20 50 72 6f 67 72 61 6d 20 4c  ("VDBE Program L
5040: 69 73 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20  isting:\n");.   
5050: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d     for(i=0; i<p-
5060: 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  >nOp; i++){.    
5070: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
5080: 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 69  rintOp(stdout, i
5090: 2c 20 26 61 4f 70 5b 69 5d 29 3b 0a 20 20 20 20  , &aOp[i]);.    
50a0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66    }.    }.    if
50b0: 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26  ( p->db->flags &
50c0: 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20   SQLITE_VdbeEQP 
50d0: 29 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  ){.      for(i=0
50e0: 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29  ; i<p->nOp; i++)
50f0: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 61 4f  {.        if( aO
5100: 70 5b 69 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  p[i].opcode==OP_
5110: 45 78 70 6c 61 69 6e 20 29 7b 0a 20 20 20 20 20  Explain ){.     
5120: 20 20 20 20 20 69 66 28 20 6f 6e 63 65 20 29 20       if( once ) 
5130: 70 72 69 6e 74 66 28 22 56 44 42 45 20 51 75 65  printf("VDBE Que
5140: 72 79 20 50 6c 61 6e 3a 5c 6e 22 29 3b 0a 20 20  ry Plan:\n");.  
5150: 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22          printf("
5160: 25 73 5c 6e 22 2c 20 61 4f 70 5b 69 5d 2e 70 34  %s\n", aOp[i].p4
5170: 2e 7a 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f  .z);.          o
5180: 6e 63 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  nce = 0;.       
5190: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d   }.      }.    }
51a0: 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e  .    if( p->db->
51b0: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
51c0: 64 62 65 54 72 61 63 65 20 29 20 20 70 72 69 6e  dbeTrace )  prin
51d0: 74 66 28 22 56 44 42 45 20 54 72 61 63 65 3a 5c  tf("VDBE Trace:\
51e0: 6e 22 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  n");.  }.  sqlit
51f0: 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
5200: 63 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 66 6f  c();.#endif.  fo
5210: 72 28 70 4f 70 3d 26 61 4f 70 5b 70 2d 3e 70 63  r(pOp=&aOp[p->pc
5220: 5d 3b 20 31 3b 20 70 4f 70 2b 2b 29 7b 0a 20 20  ]; 1; pOp++){.  
5230: 20 20 2f 2a 20 45 72 72 6f 72 73 20 61 72 65 20    /* Errors are 
5240: 64 65 74 65 63 74 65 64 20 62 79 20 69 6e 64 69  detected by indi
5250: 76 69 64 75 61 6c 20 6f 70 63 6f 64 65 73 2c 20  vidual opcodes, 
5260: 77 69 74 68 20 61 6e 20 69 6d 6d 65 64 69 61 74  with an immediat
5270: 65 0a 20 20 20 20 2a 2a 20 6a 75 6d 70 73 20 74  e.    ** jumps t
5280: 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
5290: 72 72 6f 72 2e 20 2a 2f 0a 20 20 20 20 61 73 73  rror. */.    ass
52a0: 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
52b0: 4f 4b 20 29 3b 0a 0a 20 20 20 20 61 73 73 65 72  OK );..    asser
52c0: 74 28 20 70 4f 70 3e 3d 61 4f 70 20 26 26 20 70  t( pOp>=aOp && p
52d0: 4f 70 3c 26 61 4f 70 5b 70 2d 3e 6e 4f 70 5d 29  Op<&aOp[p->nOp])
52e0: 3b 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  ;.#ifdef VDBE_PR
52f0: 4f 46 49 4c 45 0a 20 20 20 20 73 74 61 72 74 20  OFILE.    start 
5300: 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28  = sqlite3Hwtime(
5310: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 6e 56  );.#endif.    nV
5320: 6d 53 74 65 70 2b 2b 3b 0a 23 69 66 64 65 66 20  mStep++;.#ifdef 
5330: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
5340: 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20  MT_SCANSTATUS.  
5350: 20 20 69 66 28 20 70 2d 3e 61 6e 45 78 65 63 20    if( p->anExec 
5360: 29 20 70 2d 3e 61 6e 45 78 65 63 5b 28 69 6e 74  ) p->anExec[(int
5370: 29 28 70 4f 70 2d 61 4f 70 29 5d 2b 2b 3b 0a 23  )(pOp-aOp)]++;.#
5380: 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e  endif..    /* On
5390: 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63 69 6e 67  ly allow tracing
53a0: 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47   if SQLITE_DEBUG
53b0: 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20   is defined..   
53c0: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
53d0: 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20  E_DEBUG.    if( 
53e0: 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
53f0: 54 45 5f 56 64 62 65 54 72 61 63 65 20 29 7b 0a  TE_VdbeTrace ){.
5400: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
5410: 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c  ePrintOp(stdout,
5420: 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
5430: 29 2c 20 70 4f 70 29 3b 0a 20 20 20 20 7d 0a 23  ), pOp);.    }.#
5440: 65 6e 64 69 66 0a 20 20 20 20 20 20 0a 0a 20 20  endif.      ..  
5450: 20 20 2f 2a 20 43 68 65 63 6b 20 74 6f 20 73 65    /* Check to se
5460: 65 20 69 66 20 77 65 20 6e 65 65 64 20 74 6f 20  e if we need to 
5470: 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e 74 65  simulate an inte
5480: 72 72 75 70 74 2e 20 20 54 68 69 73 20 6f 6e 6c  rrupt.  This onl
5490: 79 20 68 61 70 70 65 6e 73 0a 20 20 20 20 2a 2a  y happens.    **
54a0: 20 69 66 20 77 65 20 68 61 76 65 20 61 20 73 70   if we have a sp
54b0: 65 63 69 61 6c 20 74 65 73 74 20 62 75 69 6c 64  ecial test build
54c0: 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20  ..    */.#ifdef 
54d0: 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20  SQLITE_TEST.    
54e0: 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65  if( sqlite3_inte
54f0: 72 72 75 70 74 5f 63 6f 75 6e 74 3e 30 20 29 7b  rrupt_count>0 ){
5500: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69  .      sqlite3_i
5510: 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 2d 2d  nterrupt_count--
5520: 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  ;.      if( sqli
5530: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
5540: 75 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  unt==0 ){.      
5550: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72    sqlite3_interr
5560: 75 70 74 28 64 62 29 3b 0a 20 20 20 20 20 20 7d  upt(db);.      }
5570: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  .    }.#endif.. 
5580: 20 20 20 2f 2a 20 53 61 6e 69 74 79 20 63 68 65     /* Sanity che
5590: 63 6b 69 6e 67 20 6f 6e 20 6f 74 68 65 72 20 6f  cking on other o
55a0: 70 65 72 61 6e 64 73 20 2a 2f 0a 23 69 66 64 65  perands */.#ifde
55b0: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
55c0: 20 20 20 7b 0a 20 20 20 20 20 20 75 38 20 6f 70     {.      u8 op
55d0: 50 72 6f 70 65 72 74 79 20 3d 20 73 71 6c 69 74  Property = sqlit
55e0: 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79  e3OpcodeProperty
55f0: 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 5d 3b 0a 20  [pOp->opcode];. 
5600: 20 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70       if( (opProp
5610: 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 31  erty & OPFLG_IN1
5620: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
5630: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
5640: 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  0 );.        ass
5650: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 28 70  ert( pOp->p1<=(p
5660: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
5670: 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
5680: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
5690: 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  alid(&aMem[pOp->
56a0: 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20  p1]) );.        
56b0: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56  assert( sqlite3V
56c0: 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72  dbeCheckMemInvar
56d0: 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d  iants(&aMem[pOp-
56e0: 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 20  >p1]) );.       
56f0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
5700: 70 4f 70 2d 3e 70 31 2c 20 26 61 4d 65 6d 5b 70  pOp->p1, &aMem[p
5710: 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 20 20 20 20  Op->p1]);.      
5720: 7d 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70 50  }.      if( (opP
5730: 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f  roperty & OPFLG_
5740: 49 4e 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  IN2)!=0 ){.     
5750: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5760: 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20  p2>0 );.        
5770: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c  assert( pOp->p2<
5780: 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
5790: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
57a0: 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
57b0: 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f  IsValid(&aMem[pO
57c0: 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20  p->p2]) );.     
57d0: 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
57e0: 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e  e3VdbeCheckMemIn
57f0: 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70  variants(&aMem[p
5800: 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20  Op->p2]) );.    
5810: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
5820: 43 45 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65  CE(pOp->p2, &aMe
5830: 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20  m[pOp->p2]);.   
5840: 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28     }.      if( (
5850: 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46  opProperty & OPF
5860: 4c 47 5f 49 4e 33 29 21 3d 30 20 29 7b 0a 20 20  LG_IN3)!=0 ){.  
5870: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5880: 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20  p->p3>0 );.     
5890: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
58a0: 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p3<=(p->nMem+1 -
58b0: 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
58c0: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
58d0: 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
58e0: 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20  [pOp->p3]) );.  
58f0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
5900: 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65  lite3VdbeCheckMe
5910: 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65  mInvariants(&aMe
5920: 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20  m[pOp->p3]) );. 
5930: 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f         REGISTER_
5940: 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26  TRACE(pOp->p3, &
5950: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a  aMem[pOp->p3]);.
5960: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
5970: 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20  ( (opProperty & 
5980: 4f 50 46 4c 47 5f 4f 55 54 32 29 21 3d 30 20 29  OPFLG_OUT2)!=0 )
5990: 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
59a0: 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
59b0: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
59c0: 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p2<=(p->nMem
59d0: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
59e0: 20 29 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41   );.        memA
59f0: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
5a00: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b  &aMem[pOp->p2]);
5a10: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
5a20: 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26  f( (opProperty &
5a30: 20 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d 30 20   OPFLG_OUT3)!=0 
5a40: 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
5a50: 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
5a60: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
5a70: 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
5a80: 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
5a90: 29 20 29 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d  ) );.        mem
5aa0: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
5ab0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29   &aMem[pOp->p3])
5ac0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
5ad0: 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
5ae0: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
5af0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 56 44 42 45   || defined(VDBE
5b00: 5f 50 52 4f 46 49 4c 45 29 0a 20 20 20 20 70 4f  _PROFILE).    pO
5b10: 72 69 67 4f 70 20 3d 20 70 4f 70 3b 0a 23 65 6e  rigOp = pOp;.#en
5b20: 64 69 66 0a 20 20 0a 20 20 20 20 73 77 69 74 63  dif.  .    switc
5b30: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
5b40: 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  {../************
5b50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b70: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b80: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b90: 2a 0a 2a 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77  *.** What follow
5ba0: 73 20 69 73 20 61 20 6d 61 73 73 69 76 65 20 73  s is a massive s
5bb0: 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20  witch statement 
5bc0: 77 68 65 72 65 20 65 61 63 68 20 63 61 73 65 20  where each case 
5bd0: 69 6d 70 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20  implements a.** 
5be0: 73 65 70 61 72 61 74 65 20 69 6e 73 74 72 75 63  separate instruc
5bf0: 74 69 6f 6e 20 69 6e 20 74 68 65 20 76 69 72 74  tion in the virt
5c00: 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 66  ual machine.  If
5c10: 20 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75   we follow the u
5c20: 73 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74  sual.** indentat
5c30: 69 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c  ion conventions,
5c40: 20 65 61 63 68 20 63 61 73 65 20 73 68 6f 75 6c   each case shoul
5c50: 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62 79  d be indented by
5c60: 20 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 0a   6 spaces.  But.
5c70: 2a 2a 20 74 68 61 74 20 69 73 20 61 20 6c 6f 74  ** that is a lot
5c80: 20 6f 66 20 77 61 73 74 65 64 20 73 70 61 63 65   of wasted space
5c90: 20 6f 6e 20 74 68 65 20 6c 65 66 74 20 6d 61 72   on the left mar
5ca0: 67 69 6e 2e 20 20 53 6f 20 74 68 65 20 63 6f 64  gin.  So the cod
5cb0: 65 20 77 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20  e within.** the 
5cc0: 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74  switch statement
5cd0: 20 77 69 6c 6c 20 62 72 65 61 6b 20 77 69 74 68   will break with
5ce0: 20 63 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20   convention and 
5cf0: 62 65 20 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41  be flush-left. A
5d00: 6e 6f 74 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f  nother.** big co
5d10: 6d 6d 65 6e 74 20 28 73 69 6d 69 6c 61 72 20 74  mment (similar t
5d20: 6f 20 74 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c  o this one) will
5d30: 20 6d 61 72 6b 20 74 68 65 20 70 6f 69 6e 74 20   mark the point 
5d40: 69 6e 20 74 68 65 20 63 6f 64 65 20 77 68 65 72  in the code wher
5d50: 65 0a 2a 2a 20 77 65 20 74 72 61 6e 73 69 74 69  e.** we transiti
5d60: 6f 6e 20 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61  on back to norma
5d70: 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a  l indentation..*
5d80: 2a 0a 2a 2a 20 54 68 65 20 66 6f 72 6d 61 74 74  *.** The formatt
5d90: 69 6e 67 20 6f 66 20 65 61 63 68 20 63 61 73 65  ing of each case
5da0: 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20   is important.  
5db0: 54 68 65 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72  The makefile for
5dc0: 20 53 51 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72   SQLite.** gener
5dd0: 61 74 65 73 20 74 77 6f 20 43 20 66 69 6c 65 73  ates two C files
5de0: 20 22 6f 70 63 6f 64 65 73 2e 68 22 20 61 6e 64   "opcodes.h" and
5df0: 20 22 6f 70 63 6f 64 65 73 2e 63 22 20 62 79 20   "opcodes.c" by 
5e00: 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a  scanning this.**
5e10: 20 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f   file looking fo
5e20: 72 20 6c 69 6e 65 73 20 74 68 61 74 20 62 65 67  r lines that beg
5e30: 69 6e 20 77 69 74 68 20 22 63 61 73 65 20 4f 50  in with "case OP
5e40: 5f 22 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 73  _".  The opcodes
5e50: 2e 68 20 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c  .h files.** will
5e60: 20 62 65 20 66 69 6c 6c 65 64 20 77 69 74 68 20   be filled with 
5e70: 23 64 65 66 69 6e 65 73 20 74 68 61 74 20 67 69  #defines that gi
5e80: 76 65 20 75 6e 69 71 75 65 20 69 6e 74 65 67 65  ve unique intege
5e90: 72 20 76 61 6c 75 65 73 20 74 6f 20 65 61 63 68  r values to each
5ea0: 0a 2a 2a 20 6f 70 63 6f 64 65 20 61 6e 64 20 74  .** opcode and t
5eb0: 68 65 20 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c  he opcodes.c fil
5ec0: 65 20 69 73 20 66 69 6c 6c 65 64 20 77 69 74 68  e is filled with
5ed0: 20 61 6e 20 61 72 72 61 79 20 6f 66 20 73 74 72   an array of str
5ee0: 69 6e 67 73 20 77 68 65 72 65 0a 2a 2a 20 65 61  ings where.** ea
5ef0: 63 68 20 73 74 72 69 6e 67 20 69 73 20 74 68 65  ch string is the
5f00: 20 73 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66   symbolic name f
5f10: 6f 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  or the correspon
5f20: 64 69 6e 67 20 6f 70 63 6f 64 65 2e 20 20 49 66  ding opcode.  If
5f30: 20 74 68 65 0a 2a 2a 20 63 61 73 65 20 73 74 61   the.** case sta
5f40: 74 65 6d 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77  tement is follow
5f50: 65 64 20 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20  ed by a comment 
5f60: 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 2f 23 20  of the form "/# 
5f70: 73 61 6d 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a  same as ... #/".
5f80: 2a 2a 20 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20  ** that comment 
5f90: 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72  is used to deter
5fa0: 6d 69 6e 65 20 74 68 65 20 70 61 72 74 69 63 75  mine the particu
5fb0: 6c 61 72 20 76 61 6c 75 65 20 6f 66 20 74 68 65  lar value of the
5fc0: 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f   opcode..**.** O
5fd0: 74 68 65 72 20 6b 65 79 77 6f 72 64 73 20 69 6e  ther keywords in
5fe0: 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61   the comment tha
5ff0: 74 20 66 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63  t follows each c
6000: 61 73 65 20 61 72 65 20 75 73 65 64 20 74 6f 0a  ase are used to.
6010: 2a 2a 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65  ** construct the
6020: 20 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a   OPFLG_INITIALIZ
6030: 45 52 20 76 61 6c 75 65 20 74 68 61 74 20 69 6e  ER value that in
6040: 69 74 69 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65  itializes opcode
6050: 50 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b  Property[]..** K
6060: 65 79 77 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a  eywords include:
6070: 20 69 6e 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20   in1, in2, in3, 
6080: 6f 75 74 32 2c 20 6f 75 74 33 2e 20 20 53 65 65  out2, out3.  See
6090: 0a 2a 2a 20 74 68 65 20 6d 6b 6f 70 63 6f 64 65  .** the mkopcode
60a0: 68 2e 61 77 6b 20 73 63 72 69 70 74 20 66 6f 72  h.awk script for
60b0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
60c0: 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44  rmation..**.** D
60d0: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62 6f  ocumentation abo
60e0: 75 74 20 56 44 42 45 20 6f 70 63 6f 64 65 73 20  ut VDBE opcodes 
60f0: 69 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20  is generated by 
6100: 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 20 66 69  scanning this fi
6110: 6c 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65 73 20  le.** for lines 
6120: 6f 66 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 20  of that contain 
6130: 22 4f 70 63 6f 64 65 3a 22 2e 20 20 54 68 61 74  "Opcode:".  That
6140: 20 6c 69 6e 65 20 61 6e 64 20 61 6c 6c 20 73 75   line and all su
6150: 62 73 65 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d  bsequent.** comm
6160: 65 6e 74 20 6c 69 6e 65 73 20 61 72 65 20 75 73  ent lines are us
6170: 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61  ed in the genera
6180: 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 63 6f  tion of the opco
6190: 64 65 2e 68 74 6d 6c 20 64 6f 63 75 6d 65 6e 74  de.html document
61a0: 61 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a  ation.** file..*
61b0: 2a 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a  *.** SUMMARY:.**
61c0: 0a 2a 2a 20 20 20 20 20 46 6f 72 6d 61 74 74 69  .**     Formatti
61d0: 6e 67 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20  ng is important 
61e0: 74 6f 20 73 63 72 69 70 74 73 20 74 68 61 74 20  to scripts that 
61f0: 73 63 61 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a  scan this file..
6200: 2a 2a 20 20 20 20 20 44 6f 20 6e 6f 74 20 64 65  **     Do not de
6210: 76 69 61 74 65 20 66 72 6f 6d 20 74 68 65 20 66  viate from the f
6220: 6f 72 6d 61 74 74 69 6e 67 20 73 74 79 6c 65 20  ormatting style 
6230: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65  currently in use
6240: 2e 0a 2a 2a 0a 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: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6280: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6290: 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  **/../* Opcode: 
62a0: 20 47 6f 74 6f 20 2a 20 50 32 20 2a 20 2a 20 2a   Goto * P2 * * *
62b0: 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64  .**.** An uncond
62c0: 69 74 69 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f 20  itional jump to 
62d0: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 20 54  address P2..** T
62e0: 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
62f0: 69 6f 6e 20 65 78 65 63 75 74 65 64 20 77 69 6c  ion executed wil
6300: 6c 20 62 65 20 0a 2a 2a 20 74 68 65 20 6f 6e 65  l be .** the one
6310: 20 61 74 20 69 6e 64 65 78 20 50 32 20 66 72 6f   at index P2 fro
6320: 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  m the beginning 
6330: 6f 66 0a 2a 2a 20 74 68 65 20 70 72 6f 67 72 61  of.** the progra
6340: 6d 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20  m..**.** The P1 
6350: 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74  parameter is not
6360: 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64 20 62   actually used b
6370: 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20  y this opcode.  
6380: 48 6f 77 65 76 65 72 2c 20 69 74 0a 2a 2a 20 69  However, it.** i
6390: 73 20 73 6f 6d 65 74 69 6d 65 73 20 73 65 74 20  s sometimes set 
63a0: 74 6f 20 31 20 69 6e 73 74 65 61 64 20 6f 66 20  to 1 instead of 
63b0: 30 20 61 73 20 61 20 68 69 6e 74 20 74 6f 20 74  0 as a hint to t
63c0: 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20  he command-line 
63d0: 73 68 65 6c 6c 0a 2a 2a 20 74 68 61 74 20 74 68  shell.** that th
63e0: 69 73 20 47 6f 74 6f 20 69 73 20 74 68 65 20 62  is Goto is the b
63f0: 6f 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20  ottom of a loop 
6400: 61 6e 64 20 74 68 61 74 20 74 68 65 20 6c 69 6e  and that the lin
6410: 65 73 20 66 72 6f 6d 20 50 32 20 64 6f 77 6e 0a  es from P2 down.
6420: 2a 2a 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e  ** to the curren
6430: 74 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 62 65  t line should be
6440: 20 69 6e 64 65 6e 74 65 64 20 66 6f 72 20 45 58   indented for EX
6450: 50 4c 41 49 4e 20 6f 75 74 70 75 74 2e 0a 2a 2f  PLAIN output..*/
6460: 0a 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b  .case OP_Goto: {
6470: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
6480: 6a 75 6d 70 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f  jump */.jump_to_
6490: 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72  p2_and_check_for
64a0: 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 70 4f  _interrupt:.  pO
64b0: 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32  p = &aOp[pOp->p2
64c0: 20 2d 20 31 5d 3b 0a 0a 20 20 2f 2a 20 4f 70 63   - 1];..  /* Opc
64d0: 6f 64 65 73 20 74 68 61 74 20 61 72 65 20 75 73  odes that are us
64e0: 65 64 20 61 73 20 74 68 65 20 62 6f 74 74 6f 6d  ed as the bottom
64f0: 20 6f 66 20 61 20 6c 6f 6f 70 20 28 4f 50 5f 4e   of a loop (OP_N
6500: 65 78 74 2c 20 4f 50 5f 50 72 65 76 2c 0a 20 20  ext, OP_Prev,.  
6510: 2a 2a 20 4f 50 5f 56 4e 65 78 74 2c 20 4f 50 5f  ** OP_VNext, OP_
6520: 52 6f 77 53 65 74 4e 65 78 74 2c 20 6f 72 20 4f  RowSetNext, or O
6530: 50 5f 53 6f 72 74 65 72 4e 65 78 74 29 20 61 6c  P_SorterNext) al
6540: 6c 20 6a 75 6d 70 20 68 65 72 65 20 75 70 6f 6e  l jump here upon
6550: 0a 20 20 2a 2a 20 63 6f 6d 70 6c 65 74 69 6f 6e  .  ** completion
6560: 2e 20 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20  .  Check to see 
6570: 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  if sqlite3_inter
6580: 72 75 70 74 28 29 20 68 61 73 20 62 65 65 6e 20  rupt() has been 
6590: 63 61 6c 6c 65 64 0a 20 20 2a 2a 20 6f 72 20 69  called.  ** or i
65a0: 66 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  f the progress c
65b0: 61 6c 6c 62 61 63 6b 20 6e 65 65 64 73 20 74 6f  allback needs to
65c0: 20 62 65 20 69 6e 76 6f 6b 65 64 2e 20 0a 20 20   be invoked. .  
65d0: 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 63 6f 64  **.  ** This cod
65e0: 65 20 75 73 65 73 20 75 6e 73 74 72 75 63 74 75  e uses unstructu
65f0: 72 65 64 20 22 67 6f 74 6f 22 20 73 74 61 74 65  red "goto" state
6600: 6d 65 6e 74 73 20 61 6e 64 20 64 6f 65 73 20 6e  ments and does n
6610: 6f 74 20 6c 6f 6f 6b 20 63 6c 65 61 6e 2e 0a 20  ot look clean.. 
6620: 20 2a 2a 20 42 75 74 20 74 68 61 74 20 69 73 20   ** But that is 
6630: 6e 6f 74 20 64 75 65 20 74 6f 20 73 6c 6f 70 70  not due to slopp
6640: 79 20 63 6f 64 69 6e 67 20 68 61 62 69 74 73 2e  y coding habits.
6650: 20 54 68 65 20 63 6f 64 65 20 69 73 20 77 72 69   The code is wri
6660: 74 74 65 6e 20 74 68 69 73 0a 20 20 2a 2a 20 77  tten this.  ** w
6670: 61 79 20 66 6f 72 20 70 65 72 66 6f 72 6d 61 6e  ay for performan
6680: 63 65 2c 20 74 6f 20 61 76 6f 69 64 20 68 61 76  ce, to avoid hav
6690: 69 6e 67 20 74 6f 20 72 75 6e 20 74 68 65 20 69  ing to run the i
66a0: 6e 74 65 72 72 75 70 74 20 61 6e 64 20 70 72 6f  nterrupt and pro
66b0: 67 72 65 73 73 0a 20 20 2a 2a 20 63 68 65 63 6b  gress.  ** check
66c0: 73 20 6f 6e 20 65 76 65 72 79 20 6f 70 63 6f 64  s on every opcod
66d0: 65 2e 20 20 54 68 69 73 20 68 65 6c 70 73 20 73  e.  This helps s
66e0: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 74 6f  qlite3_step() to
66f0: 20 72 75 6e 20 61 62 6f 75 74 20 31 2e 35 25 0a   run about 1.5%.
6700: 20 20 2a 2a 20 66 61 73 74 65 72 20 61 63 63 6f    ** faster acco
6710: 72 64 69 6e 67 20 74 6f 20 22 76 61 6c 67 72 69  rding to "valgri
6720: 6e 64 20 2d 2d 74 6f 6f 6c 3d 63 61 63 68 65 67  nd --tool=cacheg
6730: 72 69 6e 64 22 20 2a 2f 0a 63 68 65 63 6b 5f 66  rind" */.check_f
6740: 6f 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20  or_interrupt:.  
6750: 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74  if( db->u1.isInt
6760: 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20  errupted ) goto 
6770: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74  abort_due_to_int
6780: 65 72 72 75 70 74 3b 0a 23 69 66 6e 64 65 66 20  errupt;.#ifndef 
6790: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47  SQLITE_OMIT_PROG
67a0: 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20  RESS_CALLBACK.  
67b0: 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70 72 6f 67  /* Call the prog
67c0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 69 66  ress callback if
67d0: 20 69 74 20 69 73 20 63 6f 6e 66 69 67 75 72 65   it is configure
67e0: 64 20 61 6e 64 20 74 68 65 20 72 65 71 75 69 72  d and the requir
67f0: 65 64 20 6e 75 6d 62 65 72 0a 20 20 2a 2a 20 6f  ed number.  ** o
6800: 66 20 56 44 42 45 20 6f 70 73 20 68 61 76 65 20  f VDBE ops have 
6810: 62 65 65 6e 20 65 78 65 63 75 74 65 64 20 28 65  been executed (e
6820: 69 74 68 65 72 20 73 69 6e 63 65 20 74 68 69 73  ither since this
6830: 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a 20   invocation of. 
6840: 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 45   ** sqlite3VdbeE
6850: 78 65 63 28 29 20 6f 72 20 73 69 6e 63 65 20 6c  xec() or since l
6860: 61 73 74 20 74 69 6d 65 20 74 68 65 20 70 72 6f  ast time the pro
6870: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 77  gress callback w
6880: 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20 2a 2a  as called)..  **
6890: 20 49 66 20 74 68 65 20 70 72 6f 67 72 65 73 73   If the progress
68a0: 20 63 61 6c 6c 62 61 63 6b 20 72 65 74 75 72 6e   callback return
68b0: 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69 74  s non-zero, exit
68c0: 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   the virtual mac
68d0: 68 69 6e 65 20 77 69 74 68 0a 20 20 2a 2a 20 61  hine with.  ** a
68e0: 20 72 65 74 75 72 6e 20 63 6f 64 65 20 53 51 4c   return code SQL
68f0: 49 54 45 5f 41 42 4f 52 54 2e 0a 20 20 2a 2f 0a  ITE_ABORT..  */.
6900: 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72    if( db->xProgr
6910: 65 73 73 21 3d 30 20 26 26 20 6e 56 6d 53 74 65  ess!=0 && nVmSte
6920: 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69  p>=nProgressLimi
6930: 74 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  t ){.    assert(
6940: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
6950: 73 21 3d 30 20 29 3b 0a 20 20 20 20 6e 50 72 6f  s!=0 );.    nPro
6960: 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 6e 56 6d  gressLimit = nVm
6970: 53 74 65 70 20 2b 20 64 62 2d 3e 6e 50 72 6f 67  Step + db->nProg
6980: 72 65 73 73 4f 70 73 20 2d 20 28 6e 56 6d 53 74  ressOps - (nVmSt
6990: 65 70 25 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73  ep%db->nProgress
69a0: 4f 70 73 29 3b 0a 20 20 20 20 69 66 28 20 64 62  Ops);.    if( db
69b0: 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e  ->xProgress(db->
69c0: 70 50 72 6f 67 72 65 73 73 41 72 67 29 20 29 7b  pProgressArg) ){
69d0: 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
69e0: 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  TE_INTERRUPT;.  
69f0: 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
6a00: 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
6a10: 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20   }.  }.#endif.  
6a20: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
6a30: 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62 20 50  Opcode:  Gosub P
6a40: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
6a50: 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65   Write the curre
6a60: 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74 6f 20  nt address onto 
6a70: 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 61  register P1.** a
6a80: 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  nd then jump to 
6a90: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a 63  address P2..*/.c
6aa0: 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b 20  ase OP_Gosub: { 
6ab0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
6ac0: 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
6ad0: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
6ae0: 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p1<=(p->nMem+1
6af0: 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
6b00: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
6b10: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
6b20: 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61  ert( VdbeMemDyna
6b30: 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20 29 3b 0a  mic(pIn1)==0 );.
6b40: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
6b50: 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 70  ge(p, pIn1);.  p
6b60: 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  In1->flags = MEM
6b70: 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e  _Int;.  pIn1->u.
6b80: 69 20 3d 20 28 69 6e 74 29 28 70 4f 70 2d 61 4f  i = (int)(pOp-aO
6b90: 70 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  p);.  REGISTER_T
6ba0: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49  RACE(pOp->p1, pI
6bb0: 6e 31 29 3b 0a 0a 20 20 2f 2a 20 4d 6f 73 74 20  n1);..  /* Most 
6bc0: 6a 75 6d 70 20 6f 70 65 72 61 74 69 6f 6e 73 20  jump operations 
6bd0: 64 6f 20 61 20 67 6f 74 6f 20 74 6f 20 74 68 69  do a goto to thi
6be0: 73 20 73 70 6f 74 20 69 6e 20 6f 72 64 65 72 20  s spot in order 
6bf0: 74 6f 20 75 70 64 61 74 65 0a 20 20 2a 2a 20 74  to update.  ** t
6c00: 68 65 20 70 4f 70 20 70 6f 69 6e 74 65 72 2e 20  he pOp pointer. 
6c10: 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32 3a 0a 20  */.jump_to_p2:. 
6c20: 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d   pOp = &aOp[pOp-
6c30: 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 62 72 65 61  >p2 - 1];.  brea
6c40: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
6c50: 20 20 52 65 74 75 72 6e 20 50 31 20 2a 20 2a 20    Return P1 * * 
6c60: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
6c70: 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
6c80: 75 63 74 69 6f 6e 20 61 66 74 65 72 20 74 68 65  uction after the
6c90: 20 61 64 64 72 65 73 73 20 69 6e 20 72 65 67 69   address in regi
6ca0: 73 74 65 72 20 50 31 2e 20 20 41 66 74 65 72 0a  ster P1.  After.
6cb0: 2a 2a 20 74 68 65 20 6a 75 6d 70 2c 20 72 65 67  ** the jump, reg
6cc0: 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65 73  ister P1 becomes
6cd0: 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 63   undefined..*/.c
6ce0: 61 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a 20 7b  ase OP_Return: {
6cf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
6d00: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
6d10: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
6d20: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
6d30: 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a  ags==MEM_Int );.
6d40: 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 49 6e    pOp = &aOp[pIn
6d50: 31 2d 3e 75 2e 69 5d 3b 0a 20 20 70 49 6e 31 2d  1->u.i];.  pIn1-
6d60: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64  >flags = MEM_Und
6d70: 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b  efined;.  break;
6d80: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
6d90: 6e 69 74 43 6f 72 6f 75 74 69 6e 65 20 50 31 20  nitCoroutine P1 
6da0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
6db0: 53 65 74 20 75 70 20 72 65 67 69 73 74 65 72 20  Set up register 
6dc0: 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 77 69  P1 so that it wi
6dd0: 6c 6c 20 59 69 65 6c 64 20 74 6f 20 74 68 65 20  ll Yield to the 
6de0: 63 6f 72 6f 75 74 69 6e 65 0a 2a 2a 20 6c 6f 63  coroutine.** loc
6df0: 61 74 65 64 20 61 74 20 61 64 64 72 65 73 73 20  ated at address 
6e00: 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 21  P3..**.** If P2!
6e10: 3d 30 20 74 68 65 6e 20 74 68 65 20 63 6f 72 6f  =0 then the coro
6e20: 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61  utine implementa
6e30: 74 69 6f 6e 20 69 6d 6d 65 64 69 61 74 65 6c 79  tion immediately
6e40: 20 66 6f 6c 6c 6f 77 73 0a 2a 2a 20 74 68 69 73   follows.** this
6e50: 20 6f 70 63 6f 64 65 2e 20 20 53 6f 20 6a 75 6d   opcode.  So jum
6e60: 70 20 6f 76 65 72 20 74 68 65 20 63 6f 72 6f 75  p over the corou
6e70: 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tine implementat
6e80: 69 6f 6e 20 74 6f 0a 2a 2a 20 61 64 64 72 65 73  ion to.** addres
6e90: 73 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  s P2..**.** See 
6ea0: 61 6c 73 6f 3a 20 45 6e 64 43 6f 72 6f 75 74 69  also: EndCorouti
6eb0: 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  ne.*/.case OP_In
6ec0: 69 74 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20  itCoroutine: {  
6ed0: 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
6ee0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
6ef0: 30 20 26 26 20 20 70 4f 70 2d 3e 70 31 3c 3d 28  0 &&  pOp->p1<=(
6f00: 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
6f10: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73  Cursor) );.  ass
6f20: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20  ert( pOp->p2>=0 
6f30: 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f  && pOp->p2<p->nO
6f40: 70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p );.  assert( p
6f50: 4f 70 2d 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70  Op->p3>=0 && pOp
6f60: 2d 3e 70 33 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20  ->p3<p->nOp );. 
6f70: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
6f80: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
6f90: 28 20 21 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69  ( !VdbeMemDynami
6fa0: 63 28 70 4f 75 74 29 20 29 3b 0a 20 20 70 4f 75  c(pOut) );.  pOu
6fb0: 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 33  t->u.i = pOp->p3
6fc0: 20 2d 20 31 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c   - 1;.  pOut->fl
6fd0: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
6fe0: 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 29 20 67   if( pOp->p2 ) g
6ff0: 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
7000: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
7010: 70 63 6f 64 65 3a 20 20 45 6e 64 43 6f 72 6f 75  pcode:  EndCorou
7020: 74 69 6e 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  tine P1 * * * *.
7030: 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 73 74 72 75  **.** The instru
7040: 63 74 69 6f 6e 20 61 74 20 74 68 65 20 61 64 64  ction at the add
7050: 72 65 73 73 20 69 6e 20 72 65 67 69 73 74 65 72  ress in register
7060: 20 50 31 20 69 73 20 61 20 59 69 65 6c 64 2e 0a   P1 is a Yield..
7070: 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 50  ** Jump to the P
7080: 32 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 74  2 parameter of t
7090: 68 61 74 20 59 69 65 6c 64 2e 0a 2a 2a 20 41 66  hat Yield..** Af
70a0: 74 65 72 20 74 68 65 20 6a 75 6d 70 2c 20 72 65  ter the jump, re
70b0: 67 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65  gister P1 become
70c0: 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a  s undefined..**.
70d0: 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69  ** See also: Ini
70e0: 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61  tCoroutine.*/.ca
70f0: 73 65 20 4f 50 5f 45 6e 64 43 6f 72 6f 75 74 69  se OP_EndCorouti
7100: 6e 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ne: {           
7110: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 56 64 62 65  /* in1 */.  Vdbe
7120: 4f 70 20 2a 70 43 61 6c 6c 65 72 3b 0a 20 20 70  Op *pCaller;.  p
7130: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
7140: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
7150: 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d  pIn1->flags==MEM
7160: 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74  _Int );.  assert
7170: 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 3d 30 20 26  ( pIn1->u.i>=0 &
7180: 26 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 2d 3e 6e  & pIn1->u.i<p->n
7190: 4f 70 20 29 3b 0a 20 20 70 43 61 6c 6c 65 72 20  Op );.  pCaller 
71a0: 3d 20 26 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69  = &aOp[pIn1->u.i
71b0: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 61  ];.  assert( pCa
71c0: 6c 6c 65 72 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50  ller->opcode==OP
71d0: 5f 59 69 65 6c 64 20 29 3b 0a 20 20 61 73 73 65  _Yield );.  asse
71e0: 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e 70 32 3e  rt( pCaller->p2>
71f0: 3d 30 20 26 26 20 70 43 61 6c 6c 65 72 2d 3e 70  =0 && pCaller->p
7200: 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f  2<p->nOp );.  pO
7210: 70 20 3d 20 26 61 4f 70 5b 70 43 61 6c 6c 65 72  p = &aOp[pCaller
7220: 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 70 49 6e  ->p2 - 1];.  pIn
7230: 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55  1->flags = MEM_U
7240: 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61  ndefined;.  brea
7250: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
7260: 20 20 59 69 65 6c 64 20 50 31 20 50 32 20 2a 20    Yield P1 P2 * 
7270: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74  * *.**.** Swap t
7280: 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74  he program count
7290: 65 72 20 77 69 74 68 20 74 68 65 20 76 61 6c 75  er with the valu
72a0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
72b0: 2e 20 20 54 68 69 73 0a 2a 2a 20 68 61 73 20 74  .  This.** has t
72c0: 68 65 20 65 66 66 65 63 74 20 6f 66 20 79 69 65  he effect of yie
72d0: 6c 64 69 6e 67 20 74 6f 20 61 20 63 6f 72 6f 75  lding to a corou
72e0: 74 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  tine..**.** If t
72f0: 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 74 68 61  he coroutine tha
7300: 74 20 69 73 20 6c 61 75 6e 63 68 65 64 20 62 79  t is launched by
7310: 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
7320: 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20 59  n ends with.** Y
7330: 69 65 6c 64 20 6f 72 20 52 65 74 75 72 6e 20 74  ield or Return t
7340: 68 65 6e 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20  hen continue to 
7350: 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
7360: 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 0a 2a 2a  tion.  But if.**
7370: 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 6c   the coroutine l
7380: 61 75 6e 63 68 65 64 20 62 79 20 74 68 69 73 20  aunched by this 
7390: 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e 64 73  instruction ends
73a0: 20 77 69 74 68 0a 2a 2a 20 45 6e 64 43 6f 72 6f   with.** EndCoro
73b0: 75 74 69 6e 65 2c 20 74 68 65 6e 20 6a 75 6d 70  utine, then jump
73c0: 20 74 6f 20 50 32 20 72 61 74 68 65 72 20 74 68   to P2 rather th
73d0: 61 6e 20 63 6f 6e 74 69 6e 75 69 6e 67 20 77 69  an continuing wi
73e0: 74 68 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 69  th the.** next i
73f0: 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
7400: 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74  * See also: Init
7410: 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73  Coroutine.*/.cas
7420: 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20 20  e OP_Yield: {   
7430: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c           /* in1,
7440: 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 70   jump */.  int p
7450: 63 44 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d 20  cDest;.  pIn1 = 
7460: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
7470: 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65    assert( VdbeMe
7480: 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d  mDynamic(pIn1)==
7490: 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  0 );.  pIn1->fla
74a0: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
74b0: 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29 70 49  pcDest = (int)pI
74c0: 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31 2d  n1->u.i;.  pIn1-
74d0: 3e 75 2e 69 20 3d 20 28 69 6e 74 29 28 70 4f 70  >u.i = (int)(pOp
74e0: 20 2d 20 61 4f 70 29 3b 0a 20 20 52 45 47 49 53   - aOp);.  REGIS
74f0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
7500: 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 4f 70 20  1, pIn1);.  pOp 
7510: 3d 20 26 61 4f 70 5b 70 63 44 65 73 74 5d 3b 0a  = &aOp[pcDest];.
7520: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
7530: 70 63 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e 75  pcode:  HaltIfNu
7540: 6c 6c 20 20 50 31 20 50 32 20 50 33 20 50 34 20  ll  P1 P2 P3 P4 
7550: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
7560: 20 69 66 20 72 5b 50 33 5d 3d 6e 75 6c 6c 20 68   if r[P3]=null h
7570: 61 6c 74 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20  alt.**.** Check 
7580: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
7590: 69 73 74 65 72 20 50 33 2e 20 20 49 66 20 69 74  ister P3.  If it
75a0: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61   is NULL then Ha
75b0: 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61  lt using.** para
75c0: 6d 65 74 65 72 20 50 31 2c 20 50 32 2c 20 61 6e  meter P1, P2, an
75d0: 64 20 50 34 20 61 73 20 69 66 20 74 68 69 73 20  d P4 as if this 
75e0: 77 65 72 65 20 61 20 48 61 6c 74 20 69 6e 73 74  were a Halt inst
75f0: 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65  ruction.  If the
7600: 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67  .** value in reg
7610: 69 73 74 65 72 20 50 33 20 69 73 20 6e 6f 74 20  ister P3 is not 
7620: 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73 20  NULL, then this 
7630: 72 6f 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d  routine is a no-
7640: 6f 70 2e 0a 2a 2a 20 54 68 65 20 50 35 20 70 61  op..** The P5 pa
7650: 72 61 6d 65 74 65 72 20 73 68 6f 75 6c 64 20 62  rameter should b
7660: 65 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  e 1..*/.case OP_
7670: 48 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20  HaltIfNull: {   
7680: 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 70     /* in3 */.  p
7690: 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
76a0: 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p3];.  if( (pIn
76b0: 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  3->flags & MEM_N
76c0: 75 6c 6c 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b  ull)==0 ) break;
76d0: 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
76e0: 67 68 20 69 6e 74 6f 20 4f 50 5f 48 61 6c 74 20  gh into OP_Halt 
76f0: 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  */.}../* Opcode:
7700: 20 20 48 61 6c 74 20 50 31 20 50 32 20 2a 20 50    Halt P1 P2 * P
7710: 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20  4 P5.**.** Exit 
7720: 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 41 6c  immediately.  Al
7730: 6c 20 6f 70 65 6e 20 63 75 72 73 6f 72 73 2c 20  l open cursors, 
7740: 65 74 63 20 61 72 65 20 63 6c 6f 73 65 64 0a 2a  etc are closed.*
7750: 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e  * automatically.
7760: 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65  .**.** P1 is the
7770: 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65 74   result code ret
7780: 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
7790: 5f 65 78 65 63 28 29 2c 20 73 71 6c 69 74 65 33  _exec(), sqlite3
77a0: 5f 72 65 73 65 74 28 29 2c 0a 2a 2a 20 6f 72 20  _reset(),.** or 
77b0: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
77c0: 28 29 2e 20 20 46 6f 72 20 61 20 6e 6f 72 6d 61  ().  For a norma
77d0: 6c 20 68 61 6c 74 2c 20 74 68 69 73 20 73 68 6f  l halt, this sho
77e0: 75 6c 64 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b  uld be SQLITE_OK
77f0: 20 28 30 29 2e 0a 2a 2a 20 46 6f 72 20 65 72 72   (0)..** For err
7800: 6f 72 73 2c 20 69 74 20 63 61 6e 20 62 65 20 73  ors, it can be s
7810: 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c 75 65 2e  ome other value.
7820: 20 20 49 66 20 50 31 21 3d 30 20 74 68 65 6e 20    If P1!=0 then 
7830: 50 32 20 77 69 6c 6c 20 64 65 74 65 72 6d 69 6e  P2 will determin
7840: 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20  e.** whether or 
7850: 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20  not to rollback 
7860: 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e  the current tran
7870: 73 61 63 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74  saction.  Do not
7880: 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66 20   rollback.** if 
7890: 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f 20  P2==OE_Fail. Do 
78a0: 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 69 66 20  the rollback if 
78b0: 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e  P2==OE_Rollback.
78c0: 20 20 49 66 20 50 32 3d 3d 4f 45 5f 41 62 6f 72    If P2==OE_Abor
78d0: 74 2c 0a 2a 2a 20 74 68 65 6e 20 62 61 63 6b 20  t,.** then back 
78e0: 6f 75 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 20  out all changes 
78f0: 74 68 61 74 20 68 61 76 65 20 6f 63 63 75 72 72  that have occurr
7900: 65 64 20 64 75 72 69 6e 67 20 74 68 69 73 20 65  ed during this e
7910: 78 65 63 75 74 69 6f 6e 20 6f 66 20 74 68 65 0a  xecution of the.
7920: 2a 2a 20 56 44 42 45 2c 20 62 75 74 20 64 6f 20  ** VDBE, but do 
7930: 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65  not rollback the
7940: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a   transaction. .*
7950: 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f  *.** If P4 is no
7960: 74 20 6e 75 6c 6c 20 74 68 65 6e 20 69 74 20 69  t null then it i
7970: 73 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  s an error messa
7980: 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a  ge string..**.**
7990: 20 50 35 20 69 73 20 61 20 76 61 6c 75 65 20 62   P5 is a value b
79a0: 65 74 77 65 65 6e 20 30 20 61 6e 64 20 34 2c 20  etween 0 and 4, 
79b0: 69 6e 63 6c 75 73 69 76 65 2c 20 74 68 61 74 20  inclusive, that 
79c0: 6d 6f 64 69 66 69 65 73 20 74 68 65 20 50 34 20  modifies the P4 
79d0: 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20  string..**.**   
79e0: 20 30 3a 20 20 28 6e 6f 20 63 68 61 6e 67 65 29   0:  (no change)
79f0: 0a 2a 2a 20 20 20 20 31 3a 20 20 4e 4f 54 20 4e  .**    1:  NOT N
7a00: 55 4c 4c 20 63 6f 6e 74 72 61 69 6e 74 20 66 61  ULL contraint fa
7a10: 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 32  iled: P4.**    2
7a20: 3a 20 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72  :  UNIQUE constr
7a30: 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a  aint failed: P4.
7a40: 2a 2a 20 20 20 20 33 3a 20 20 43 48 45 43 4b 20  **    3:  CHECK 
7a50: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
7a60: 64 3a 20 50 34 0a 2a 2a 20 20 20 20 34 3a 20 20  d: P4.**    4:  
7a70: 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73  FOREIGN KEY cons
7a80: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50  traint failed: P
7a90: 34 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  4.**.** If P5 is
7aa0: 20 6e 6f 74 20 7a 65 72 6f 20 61 6e 64 20 50 34   not zero and P4
7ab0: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 65   is NULL, then e
7ac0: 76 65 72 79 74 68 69 6e 67 20 61 66 74 65 72 20  verything after 
7ad0: 74 68 65 20 22 3a 22 20 69 73 0a 2a 2a 20 6f 6d  the ":" is.** om
7ae0: 69 74 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  itted..**.** The
7af0: 72 65 20 69 73 20 61 6e 20 69 6d 70 6c 69 65 64  re is an implied
7b00: 20 22 48 61 6c 74 20 30 20 30 20 30 22 20 69 6e   "Halt 0 0 0" in
7b10: 73 74 72 75 63 74 69 6f 6e 20 69 6e 73 65 72 74  struction insert
7b20: 65 64 20 61 74 20 74 68 65 20 76 65 72 79 20 65  ed at the very e
7b30: 6e 64 20 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70  nd of.** every p
7b40: 72 6f 67 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75  rogram.  So a ju
7b50: 6d 70 20 70 61 73 74 20 74 68 65 20 6c 61 73 74  mp past the last
7b60: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20   instruction of 
7b70: 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69  the program.** i
7b80: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 65 78  s the same as ex
7b90: 65 63 75 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f  ecuting Halt..*/
7ba0: 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b  .case OP_Halt: {
7bb0: 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
7bc0: 72 61 6d 65 3b 0a 20 20 69 6e 74 20 70 63 78 3b  rame;.  int pcx;
7bd0: 0a 0a 20 20 70 63 78 20 3d 20 28 69 6e 74 29 28  ..  pcx = (int)(
7be0: 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 69 66  pOp - aOp);.  if
7bf0: 28 20 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54  ( pOp->p1==SQLIT
7c00: 45 5f 4f 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d  E_OK && p->pFram
7c10: 65 20 29 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74  e ){.    /* Halt
7c20: 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
7c30: 2e 20 52 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c  . Return control
7c40: 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74 20 66   to the parent f
7c50: 72 61 6d 65 2e 20 2a 2f 0a 20 20 20 20 70 46 72  rame. */.    pFr
7c60: 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b  ame = p->pFrame;
7c70: 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d  .    p->pFrame =
7c80: 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74   pFrame->pParent
7c90: 3b 0a 20 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d  ;.    p->nFrame-
7ca0: 2d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  -;.    sqlite3Vd
7cb0: 62 65 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c  beSetChanges(db,
7cc0: 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20   p->nChange);.  
7cd0: 20 20 70 63 78 20 3d 20 73 71 6c 69 74 65 33 56    pcx = sqlite3V
7ce0: 64 62 65 46 72 61 6d 65 52 65 73 74 6f 72 65 28  dbeFrameRestore(
7cf0: 70 46 72 61 6d 65 29 3b 0a 20 20 20 20 6c 61 73  pFrame);.    las
7d00: 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73  tRowid = db->las
7d10: 74 52 6f 77 69 64 3b 0a 20 20 20 20 69 66 28 20  tRowid;.    if( 
7d20: 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f  pOp->p2==OE_Igno
7d30: 72 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  re ){.      /* I
7d40: 6e 73 74 72 75 63 74 69 6f 6e 20 70 63 78 20 69  nstruction pcx i
7d50: 73 20 74 68 65 20 4f 50 5f 50 72 6f 67 72 61 6d  s the OP_Program
7d60: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
7d70: 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 0a 20  e sub-program . 
7d80: 20 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 6c       ** currentl
7d90: 79 20 62 65 69 6e 67 20 68 61 6c 74 65 64 2e 20  y being halted. 
7da0: 49 66 20 74 68 65 20 70 32 20 69 6e 73 74 72 75  If the p2 instru
7db0: 63 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 4f 50  ction of this OP
7dc0: 5f 48 61 6c 74 0a 20 20 20 20 20 20 2a 2a 20 69  _Halt.      ** i
7dd0: 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 73 65  nstruction is se
7de0: 74 20 74 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c 20  t to OE_Ignore, 
7df0: 74 68 65 6e 20 74 68 65 20 73 75 62 2d 70 72 6f  then the sub-pro
7e00: 67 72 61 6d 20 69 73 20 74 68 72 6f 77 69 6e 67  gram is throwing
7e10: 0a 20 20 20 20 20 20 2a 2a 20 61 6e 20 49 47 4e  .      ** an IGN
7e20: 4f 52 45 20 65 78 63 65 70 74 69 6f 6e 2e 20 49  ORE exception. I
7e30: 6e 20 74 68 69 73 20 63 61 73 65 20 6a 75 6d 70  n this case jump
7e40: 20 74 6f 20 74 68 65 20 61 64 64 72 65 73 73 20   to the address 
7e50: 73 70 65 63 69 66 69 65 64 0a 20 20 20 20 20 20  specified.      
7e60: 2a 2a 20 61 73 20 74 68 65 20 70 32 20 6f 66 20  ** as the p2 of 
7e70: 74 68 65 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50  the calling OP_P
7e80: 72 6f 67 72 61 6d 2e 20 20 2a 2f 0a 20 20 20 20  rogram.  */.    
7e90: 20 20 70 63 78 20 3d 20 70 2d 3e 61 4f 70 5b 70    pcx = p->aOp[p
7ea0: 63 78 5d 2e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a  cx].p2-1;.    }.
7eb0: 20 20 20 20 61 4f 70 20 3d 20 70 2d 3e 61 4f 70      aOp = p->aOp
7ec0: 3b 0a 20 20 20 20 61 4d 65 6d 20 3d 20 70 2d 3e  ;.    aMem = p->
7ed0: 61 4d 65 6d 3b 0a 20 20 20 20 70 4f 70 20 3d 20  aMem;.    pOp = 
7ee0: 26 61 4f 70 5b 70 63 78 5d 3b 0a 20 20 20 20 62  &aOp[pcx];.    b
7ef0: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 2d 3e 72  reak;.  }.  p->r
7f00: 63 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  c = pOp->p1;.  p
7f10: 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20  ->errorAction = 
7f20: 28 75 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70  (u8)pOp->p2;.  p
7f30: 2d 3e 70 63 20 3d 20 70 63 78 3b 0a 20 20 61 73  ->pc = pcx;.  as
7f40: 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3e 3d 30  sert( pOp->p5>=0
7f50: 20 26 26 20 70 4f 70 2d 3e 70 35 3c 3d 34 20 29   && pOp->p5<=4 )
7f60: 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 20 29 7b  ;.  if( p->rc ){
7f70: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  .    if( pOp->p5
7f80: 20 29 7b 0a 20 20 20 20 20 20 73 74 61 74 69 63   ){.      static
7f90: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 63 6f   const char * co
7fa0: 6e 73 74 20 61 7a 54 79 70 65 5b 5d 20 3d 20 7b  nst azType[] = {
7fb0: 20 22 4e 4f 54 20 4e 55 4c 4c 22 2c 20 22 55 4e   "NOT NULL", "UN
7fc0: 49 51 55 45 22 2c 20 22 43 48 45 43 4b 22 2c 0a  IQUE", "CHECK",.
7fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46 4f               "FO
8000: 52 45 49 47 4e 20 4b 45 59 22 20 7d 3b 0a 20 20  REIGN KEY" };.  
8010: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f      testcase( pO
8020: 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 20 20  p->p5==1 );.    
8030: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
8040: 3e 70 35 3d 3d 32 20 29 3b 0a 20 20 20 20 20 20  >p5==2 );.      
8050: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
8060: 35 3d 3d 33 20 29 3b 0a 20 20 20 20 20 20 74 65  5==3 );.      te
8070: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d  stcase( pOp->p5=
8080: 3d 34 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  =4 );.      sqli
8090: 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
80a0: 22 25 73 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  "%s constraint f
80b0: 61 69 6c 65 64 22 2c 20 61 7a 54 79 70 65 5b 70  ailed", azType[p
80c0: 4f 70 2d 3e 70 35 2d 31 5d 29 3b 0a 20 20 20 20  Op->p5-1]);.    
80d0: 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20    if( pOp->p4.z 
80e0: 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 7a 45  ){.        p->zE
80f0: 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 4d  rrMsg = sqlite3M
8100: 50 72 69 6e 74 66 28 64 62 2c 20 22 25 7a 3a 20  Printf(db, "%z: 
8110: 25 73 22 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 2c  %s", p->zErrMsg,
8120: 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20   pOp->p4.z);.   
8130: 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
8140: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
8150: 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20  eError(p, "%s", 
8160: 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20  pOp->p4.z);.    
8170: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f  }.    sqlite3_lo
8180: 67 28 70 4f 70 2d 3e 70 31 2c 20 22 61 62 6f 72  g(pOp->p1, "abor
8190: 74 20 61 74 20 25 64 20 69 6e 20 5b 25 73 5d 3a  t at %d in [%s]:
81a0: 20 25 73 22 2c 20 70 63 78 2c 20 70 2d 3e 7a 53   %s", pcx, p->zS
81b0: 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  ql, p->zErrMsg);
81c0: 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
81d0: 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a  te3VdbeHalt(p);.
81e0: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
81f0: 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 72 63 3d  LITE_BUSY || rc=
8200: 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63  =SQLITE_OK || rc
8210: 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 29  ==SQLITE_ERROR )
8220: 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
8230: 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 70  TE_BUSY ){.    p
8240: 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  ->rc = SQLITE_BU
8250: 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  SY;.  }else{.   
8260: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
8270: 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63  ITE_OK || (p->rc
8280: 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43  &0xff)==SQLITE_C
8290: 4f 4e 53 54 52 41 49 4e 54 20 29 3b 0a 20 20 20  ONSTRAINT );.   
82a0: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
82b0: 49 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44  ITE_OK || db->nD
82c0: 65 66 65 72 72 65 64 43 6f 6e 73 3e 30 20 7c 7c  eferredCons>0 ||
82d0: 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
82e0: 6d 43 6f 6e 73 3e 30 20 29 3b 0a 20 20 20 20 72  mCons>0 );.    r
82f0: 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49  c = p->rc ? SQLI
8300: 54 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c 49 54  TE_ERROR : SQLIT
8310: 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f  E_DONE;.  }.  go
8320: 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
8330: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
8340: 74 65 67 65 72 20 50 31 20 50 32 20 2a 20 2a 20  teger P1 P2 * * 
8350: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
8360: 5b 50 32 5d 3d 50 31 0a 2a 2a 0a 2a 2a 20 54 68  [P2]=P1.**.** Th
8370: 65 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72  e 32-bit integer
8380: 20 76 61 6c 75 65 20 50 31 20 69 73 20 77 72 69   value P1 is wri
8390: 74 74 65 6e 20 69 6e 74 6f 20 72 65 67 69 73 74  tten into regist
83a0: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
83b0: 50 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20 20 20  P_Integer: {    
83c0: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
83d0: 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
83e0: 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
83f0: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
8400: 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61 6b 3b  Op->p1;.  break;
8410: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
8420: 6e 74 36 34 20 2a 20 50 32 20 2a 20 50 34 20 2a  nt64 * P2 * P4 *
8430: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
8440: 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20  P2]=P4.**.** P4 
8450: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
8460: 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72  a 64-bit integer
8470: 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65   value..** Write
8480: 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f   that value into
8490: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
84a0: 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36 34 3a 20  .case OP_Int64: 
84b0: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
84c0: 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20  ut2 */.  pOut = 
84d0: 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
84e0: 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74  , pOp);.  assert
84f0: 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36 34 21 3d  ( pOp->p4.pI64!=
8500: 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  0 );.  pOut->u.i
8510: 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 49 36 34   = *pOp->p4.pI64
8520: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  ;.  break;.}..#i
8530: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
8540: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
8550: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c  ./* Opcode: Real
8560: 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20   * P2 * P4 *.** 
8570: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
8580: 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  P4.**.** P4 is a
8590: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34   pointer to a 64
85a0: 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20 70 6f  -bit floating po
85b0: 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72  int value..** Wr
85c0: 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69  ite that value i
85d0: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
85e0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c  .*/.case OP_Real
85f0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
8600: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 46 4c 4f  * same as TK_FLO
8610: 41 54 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f  AT, out2 */.  pO
8620: 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
8630: 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70  ase(p, pOp);.  p
8640: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
8650: 5f 52 65 61 6c 3b 0a 20 20 61 73 73 65 72 74 28  _Real;.  assert(
8660: 20 21 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 2a   !sqlite3IsNaN(*
8670: 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 29 20 29  pOp->p4.pReal) )
8680: 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d 20  ;.  pOut->u.r = 
8690: 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a  *pOp->p4.pReal;.
86a0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
86b0: 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74  f../* Opcode: St
86c0: 72 69 6e 67 38 20 2a 20 50 32 20 2a 20 50 34 20  ring8 * P2 * P4 
86d0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
86e0: 5b 50 32 5d 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20  [P2]='P4'.**.** 
86f0: 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 6e  P4 points to a n
8700: 75 6c 20 74 65 72 6d 69 6e 61 74 65 64 20 55 54  ul terminated UT
8710: 46 2d 38 20 73 74 72 69 6e 67 2e 20 54 68 69 73  F-8 string. This
8720: 20 6f 70 63 6f 64 65 20 69 73 20 74 72 61 6e 73   opcode is trans
8730: 66 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f 20  formed .** into 
8740: 61 20 53 74 72 69 6e 67 20 6f 70 63 6f 64 65 20  a String opcode 
8750: 62 65 66 6f 72 65 20 69 74 20 69 73 20 65 78 65  before it is exe
8760: 63 75 74 65 64 20 66 6f 72 20 74 68 65 20 66 69  cuted for the fi
8770: 72 73 74 20 74 69 6d 65 2e 20 20 44 75 72 69 6e  rst time.  Durin
8780: 67 0a 2a 2a 20 74 68 69 73 20 74 72 61 6e 73 66  g.** this transf
8790: 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 6c 65  ormation, the le
87a0: 6e 67 74 68 20 6f 66 20 73 74 72 69 6e 67 20 50  ngth of string P
87b0: 34 20 69 73 20 63 6f 6d 70 75 74 65 64 20 61 6e  4 is computed an
87c0: 64 20 73 74 6f 72 65 64 0a 2a 2a 20 61 73 20 74  d stored.** as t
87d0: 68 65 20 50 31 20 70 61 72 61 6d 65 74 65 72 2e  he P1 parameter.
87e0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69  .*/.case OP_Stri
87f0: 6e 67 38 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  ng8: {         /
8800: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 52  * same as TK_STR
8810: 49 4e 47 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 61  ING, out2 */.  a
8820: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a  ssert( pOp->p4.z
8830: 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  !=0 );.  pOut = 
8840: 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
8850: 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 70 2d 3e 6f  , pOp);.  pOp->o
8860: 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72 69 6e  pcode = OP_Strin
8870: 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20 73  g;.  pOp->p1 = s
8880: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70  qlite3Strlen30(p
8890: 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e  Op->p4.z);..#ifn
88a0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
88b0: 55 54 46 31 36 0a 20 20 69 66 28 20 65 6e 63 6f  UTF16.  if( enco
88c0: 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55 54 46  ding!=SQLITE_UTF
88d0: 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  8 ){.    rc = sq
88e0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53  lite3VdbeMemSetS
88f0: 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34  tr(pOut, pOp->p4
8900: 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55  .z, -1, SQLITE_U
8910: 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  TF8, SQLITE_STAT
8920: 49 43 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  IC);.    assert(
8930: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc==SQLITE_OK |
8940: 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f  | rc==SQLITE_TOO
8950: 42 49 47 20 29 3b 0a 20 20 20 20 69 66 28 20 53  BIG );.    if( S
8960: 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65  QLITE_OK!=sqlite
8970: 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
8980: 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69  ing(pOut, encodi
8990: 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ng) ) goto no_me
89a0: 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  m;.    assert( p
89b0: 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 3e 30 20  Out->szMalloc>0 
89c0: 26 26 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63  && pOut->zMalloc
89d0: 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20 20  ==pOut->z );.   
89e0: 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d   assert( VdbeMem
89f0: 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 3d 3d 30  Dynamic(pOut)==0
8a00: 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 73 7a   );.    pOut->sz
8a10: 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20  Malloc = 0;.    
8a20: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pOut->flags |= M
8a30: 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20 20 69  EM_Static;.    i
8a40: 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
8a50: 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20  P4_DYNAMIC ){.  
8a60: 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
8a70: 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  e(db, pOp->p4.z)
8a80: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d  ;.    }.    pOp-
8a90: 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 44 59 4e  >p4type = P4_DYN
8aa0: 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  AMIC;.    pOp->p
8ab0: 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20  4.z = pOut->z;. 
8ac0: 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75     pOp->p1 = pOu
8ad0: 74 2d 3e 6e 3b 0a 20 20 7d 0a 20 20 74 65 73 74  t->n;.  }.  test
8ae0: 63 61 73 65 28 20 72 63 3d 3d 53 51 4c 49 54 45  case( rc==SQLITE
8af0: 5f 54 4f 4f 42 49 47 20 29 3b 0a 23 65 6e 64 69  _TOOBIG );.#endi
8b00: 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e  f.  if( pOp->p1>
8b10: 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
8b20: 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
8b30: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
8b40: 62 69 67 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  big;.  }.  asser
8b50: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
8b60: 20 29 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68   );.  /* Fall th
8b70: 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
8b80: 74 20 63 61 73 65 2c 20 4f 50 5f 53 74 72 69 6e  t case, OP_Strin
8b90: 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63  g */.}.  ./* Opc
8ba0: 6f 64 65 3a 20 53 74 72 69 6e 67 20 50 31 20 50  ode: String P1 P
8bb0: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
8bc0: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50  nopsis: r[P2]='P
8bd0: 34 27 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a  4' (len=P1).**.*
8be0: 2a 20 54 68 65 20 73 74 72 69 6e 67 20 76 61 6c  * The string val
8bf0: 75 65 20 50 34 20 6f 66 20 6c 65 6e 67 74 68 20  ue P4 of length 
8c00: 50 31 20 28 62 79 74 65 73 29 20 69 73 20 73 74  P1 (bytes) is st
8c10: 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
8c20: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33   P2..**.** If P3
8c30: 20 69 73 20 6e 6f 74 20 7a 65 72 6f 20 61 6e 64   is not zero and
8c40: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
8c50: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 65  register P3 is e
8c60: 71 75 61 6c 20 74 6f 20 50 35 2c 20 74 68 65 6e  qual to P5, then
8c70: 0a 2a 2a 20 74 68 65 20 64 61 74 61 74 79 70 65  .** the datatype
8c80: 20 6f 66 20 74 68 65 20 72 65 67 69 73 74 65 72   of the register
8c90: 20 50 32 20 69 73 20 63 6f 6e 76 65 72 74 65 64   P2 is converted
8ca0: 20 74 6f 20 42 4c 4f 42 2e 20 20 54 68 65 20 63   to BLOB.  The c
8cb0: 6f 6e 74 65 6e 74 20 69 73 0a 2a 2a 20 74 68 65  ontent is.** the
8cc0: 20 73 61 6d 65 20 73 65 71 75 65 6e 63 65 20 6f   same sequence o
8cd0: 66 20 62 79 74 65 73 2c 20 69 74 20 69 73 20 6d  f bytes, it is m
8ce0: 65 72 65 6c 79 20 69 6e 74 65 72 70 72 65 74 65  erely interprete
8cf0: 64 20 61 73 20 61 20 42 4c 4f 42 20 69 6e 73 74  d as a BLOB inst
8d00: 65 61 64 0a 2a 2a 20 6f 66 20 61 20 73 74 72 69  ead.** of a stri
8d10: 6e 67 2c 20 61 73 20 69 66 20 69 74 20 68 61 64  ng, as if it had
8d20: 20 62 65 65 6e 20 43 41 53 54 2e 20 20 49 6e 20   been CAST.  In 
8d30: 6f 74 68 65 72 20 77 6f 72 64 73 3a 0a 2a 2a 0a  other words:.**.
8d40: 2a 2a 20 69 66 28 20 50 33 21 3d 30 20 61 6e 64  ** if( P3!=0 and
8d50: 20 72 65 67 5b 50 33 5d 3d 3d 50 35 20 29 20 72   reg[P3]==P5 ) r
8d60: 65 67 5b 50 32 5d 20 3a 3d 20 43 41 53 54 28 72  eg[P2] := CAST(r
8d70: 65 67 5b 50 32 5d 20 61 73 20 42 4c 4f 42 29 0a  eg[P2] as BLOB).
8d80: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e  */.case OP_Strin
8d90: 67 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a  g: {          /*
8da0: 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72   out2 */.  asser
8db0: 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20  t( pOp->p4.z!=0 
8dc0: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  );.  pOut = out2
8dd0: 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
8de0: 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  p);.  pOut->flag
8df0: 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f  s = MEM_Str|MEM_
8e00: 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b  Static|MEM_Term;
8e10: 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70  .  pOut->z = pOp
8e20: 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e  ->p4.z;.  pOut->
8e30: 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  n = pOp->p1;.  p
8e40: 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  Out->enc = encod
8e50: 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ing;.  UPDATE_MA
8e60: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
8e70: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
8e80: 5f 4c 49 4b 45 5f 44 4f 45 53 4e 54 5f 4d 41 54  _LIKE_DOESNT_MAT
8e90: 43 48 5f 42 4c 4f 42 53 0a 20 20 69 66 28 20 70  CH_BLOBS.  if( p
8ea0: 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20  Op->p3>0 ){.    
8eb0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
8ec0: 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
8ed0: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
8ee0: 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
8ef0: 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73 65  p->p3];.    asse
8f00: 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  rt( pIn3->flags 
8f10: 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20  & MEM_Int );.   
8f20: 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 69 3d 3d   if( pIn3->u.i==
8f30: 70 4f 70 2d 3e 70 35 20 29 20 70 4f 75 74 2d 3e  pOp->p5 ) pOut->
8f40: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62  flags = MEM_Blob
8f50: 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  |MEM_Static|MEM_
8f60: 54 65 72 6d 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  Term;.  }.#endif
8f70: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
8f80: 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 50 31 20  Opcode: Null P1 
8f90: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
8fa0: 6f 70 73 69 73 3a 20 20 72 5b 50 32 2e 2e 50 33  opsis:  r[P2..P3
8fb0: 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 57 72 69  ]=NULL.**.** Wri
8fc0: 74 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f 20 72  te a NULL into r
8fd0: 65 67 69 73 74 65 72 73 20 50 32 2e 20 20 49 66  egisters P2.  If
8fe0: 20 50 33 20 67 72 65 61 74 65 72 20 74 68 61 6e   P3 greater than
8ff0: 20 50 32 2c 20 74 68 65 6e 20 61 6c 73 6f 20 77   P2, then also w
9000: 72 69 74 65 0a 2a 2a 20 4e 55 4c 4c 20 69 6e 74  rite.** NULL int
9010: 6f 20 72 65 67 69 73 74 65 72 20 50 33 20 61 6e  o register P3 an
9020: 64 20 65 76 65 72 79 20 72 65 67 69 73 74 65 72  d every register
9030: 20 69 6e 20 62 65 74 77 65 65 6e 20 50 32 20 61   in between P2 a
9040: 6e 64 20 50 33 2e 20 20 49 66 20 50 33 0a 2a 2a  nd P3.  If P3.**
9050: 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 50 32   is less than P2
9060: 20 28 74 79 70 69 63 61 6c 6c 79 20 50 33 20 69   (typically P3 i
9070: 73 20 7a 65 72 6f 29 20 74 68 65 6e 20 6f 6e 6c  s zero) then onl
9080: 79 20 72 65 67 69 73 74 65 72 20 50 32 20 69 73  y register P2 is
9090: 0a 2a 2a 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e  .** set to NULL.
90a0: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
90b0: 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65   value is non-ze
90c0: 72 6f 2c 20 74 68 65 6e 20 61 6c 73 6f 20 73 65  ro, then also se
90d0: 74 20 74 68 65 20 4d 45 4d 5f 43 6c 65 61 72 65  t the MEM_Cleare
90e0: 64 20 66 6c 61 67 20 73 6f 20 74 68 61 74 0a 2a  d flag so that.*
90f0: 2a 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 77 69  * NULL values wi
9100: 6c 6c 20 6e 6f 74 20 63 6f 6d 70 61 72 65 20 65  ll not compare e
9110: 71 75 61 6c 20 65 76 65 6e 20 69 66 20 53 51 4c  qual even if SQL
9120: 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65  ITE_NULLEQ is se
9130: 74 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e 65 20 6f 72  t on.** OP_Ne or
9140: 20 4f 50 5f 45 71 2e 0a 2a 2f 0a 63 61 73 65 20   OP_Eq..*/.case 
9150: 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20  OP_Null: {      
9160: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
9170: 20 20 69 6e 74 20 63 6e 74 3b 0a 20 20 75 31 36    int cnt;.  u16
9180: 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 70 4f 75   nullFlag;.  pOu
9190: 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
91a0: 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 63 6e  se(p, pOp);.  cn
91b0: 74 20 3d 20 70 4f 70 2d 3e 70 33 2d 70 4f 70 2d  t = pOp->p3-pOp-
91c0: 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p2;.  assert( p
91d0: 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
91e0: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
91f0: 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   );.  pOut->flag
9200: 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 20 3d 20 70  s = nullFlag = p
9210: 4f 70 2d 3e 70 31 20 3f 20 28 4d 45 4d 5f 4e 75  Op->p1 ? (MEM_Nu
9220: 6c 6c 7c 4d 45 4d 5f 43 6c 65 61 72 65 64 29 20  ll|MEM_Cleared) 
9230: 3a 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 77 68  : MEM_Null;.  wh
9240: 69 6c 65 28 20 63 6e 74 3e 30 20 29 7b 0a 20 20  ile( cnt>0 ){.  
9250: 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 6d 65    pOut++;.    me
9260: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
9270: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c  , pOut);.    sql
9280: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
9290: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 70 4f  ll(pOut);.    pO
92a0: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c  ut->flags = null
92b0: 46 6c 61 67 3b 0a 20 20 20 20 63 6e 74 2d 2d 3b  Flag;.    cnt--;
92c0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
92d0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 66 74  ./* Opcode: Soft
92e0: 4e 75 6c 6c 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  Null P1 * * * *.
92f0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
9300: 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 53  P1]=NULL.**.** S
9310: 65 74 20 72 65 67 69 73 74 65 72 20 50 31 20 74  et register P1 t
9320: 6f 20 68 61 76 65 20 74 68 65 20 76 61 6c 75 65  o have the value
9330: 20 4e 55 4c 4c 20 61 73 20 73 65 65 6e 20 62 79   NULL as seen by
9340: 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f   the OP_MakeReco
9350: 72 64 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f  rd.** instructio
9360: 6e 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 66 72  n, but do not fr
9370: 65 65 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72  ee any string or
9380: 20 62 6c 6f 62 20 6d 65 6d 6f 72 79 20 61 73 73   blob memory ass
9390: 6f 63 69 61 74 65 64 20 77 69 74 68 0a 2a 2a 20  ociated with.** 
93a0: 74 68 65 20 72 65 67 69 73 74 65 72 2c 20 73 6f  the register, so
93b0: 20 74 68 61 74 20 69 66 20 74 68 65 20 76 61 6c   that if the val
93c0: 75 65 20 77 61 73 20 61 20 73 74 72 69 6e 67 20  ue was a string 
93d0: 6f 72 20 62 6c 6f 62 20 74 68 61 74 20 77 61 73  or blob that was
93e0: 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 63  .** previously c
93f0: 6f 70 69 65 64 20 75 73 69 6e 67 20 4f 50 5f 53  opied using OP_S
9400: 43 6f 70 79 2c 20 74 68 65 20 63 6f 70 69 65 73  Copy, the copies
9410: 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75 65 20 74   will continue t
9420: 6f 20 62 65 20 76 61 6c 69 64 2e 0a 2a 2f 0a 63  o be valid..*/.c
9430: 61 73 65 20 4f 50 5f 53 6f 66 74 4e 75 6c 6c 3a  ase OP_SoftNull:
9440: 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
9450: 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p1>0 && pOp->p
9460: 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  1<=(p->nMem+1 - 
9470: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
9480: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
9490: 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 2d 3e  p->p1];.  pOut->
94a0: 66 6c 61 67 73 20 3d 20 28 70 4f 75 74 2d 3e 66  flags = (pOut->f
94b0: 6c 61 67 73 7c 4d 45 4d 5f 4e 75 6c 6c 29 26 7e  lags|MEM_Null)&~
94c0: 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20  MEM_Undefined;. 
94d0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
94e0: 63 6f 64 65 3a 20 42 6c 6f 62 20 50 31 20 50 32  code: Blob P1 P2
94f0: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
9500: 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 20 28 6c  sis: r[P2]=P4 (l
9510: 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 50 34 20  en=P1).**.** P4 
9520: 70 6f 69 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62  points to a blob
9530: 20 6f 66 20 64 61 74 61 20 50 31 20 62 79 74 65   of data P1 byte
9540: 73 20 6c 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74  s long.  Store t
9550: 68 69 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72  his.** blob in r
9560: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
9570: 61 73 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20  ase OP_Blob: {  
9580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9590: 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72   out2 */.  asser
95a0: 74 28 20 70 4f 70 2d 3e 70 31 20 3c 3d 20 53 51  t( pOp->p1 <= SQ
95b0: 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 20  LITE_MAX_LENGTH 
95c0: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  );.  pOut = out2
95d0: 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
95e0: 70 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  p);.  sqlite3Vdb
95f0: 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c  eMemSetStr(pOut,
9600: 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d   pOp->p4.z, pOp-
9610: 3e 70 31 2c 20 30 2c 20 30 29 3b 0a 20 20 70 4f  >p1, 0, 0);.  pO
9620: 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69  ut->enc = encodi
9630: 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  ng;.  UPDATE_MAX
9640: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
9650: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
9660: 4f 70 63 6f 64 65 3a 20 56 61 72 69 61 62 6c 65  Opcode: Variable
9670: 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
9680: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
9690: 3d 70 61 72 61 6d 65 74 65 72 28 50 31 2c 50 34  =parameter(P1,P4
96a0: 29 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72  ).**.** Transfer
96b0: 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 62   the values of b
96c0: 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72 20 50  ound parameter P
96d0: 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  1 into register 
96e0: 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  P2.**.** If the 
96f0: 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 61 6d  parameter is nam
9700: 65 64 2c 20 74 68 65 6e 20 69 74 73 20 6e 61 6d  ed, then its nam
9710: 65 20 61 70 70 65 61 72 73 20 69 6e 20 50 34 2e  e appears in P4.
9720: 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65  .** The P4 value
9730: 20 69 73 20 75 73 65 64 20 62 79 20 73 71 6c 69   is used by sqli
9740: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
9750: 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61  er_name()..*/.ca
9760: 73 65 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a 20  se OP_Variable: 
9770: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
9780: 6f 75 74 32 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  out2 */.  Mem *p
9790: 56 61 72 3b 20 20 20 20 20 20 20 2f 2a 20 56 61  Var;       /* Va
97a0: 6c 75 65 20 62 65 69 6e 67 20 74 72 61 6e 73 66  lue being transf
97b0: 65 72 72 65 64 20 2a 2f 0a 0a 20 20 61 73 73 65  erred */..  asse
97c0: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26  rt( pOp->p1>0 &&
97d0: 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 56 61   pOp->p1<=p->nVa
97e0: 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
97f0: 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c 20 70  Op->p4.z==0 || p
9800: 4f 70 2d 3e 70 34 2e 7a 3d 3d 70 2d 3e 61 7a 56  Op->p4.z==p->azV
9810: 61 72 5b 70 4f 70 2d 3e 70 31 2d 31 5d 20 29 3b  ar[pOp->p1-1] );
9820: 0a 20 20 70 56 61 72 20 3d 20 26 70 2d 3e 61 56  .  pVar = &p->aV
9830: 61 72 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b  ar[pOp->p1 - 1];
9840: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
9850: 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 56 61 72  beMemTooBig(pVar
9860: 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ) ){.    goto to
9870: 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 70 4f 75  o_big;.  }.  pOu
9880: 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
9890: 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 73 71  se(p, pOp);.  sq
98a0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
98b0: 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 56  lowCopy(pOut, pV
98c0: 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b  ar, MEM_Static);
98d0: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
98e0: 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
98f0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
9900: 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20 50 32 20  ode: Move P1 P2 
9910: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
9920: 69 73 3a 20 20 72 5b 50 32 40 50 33 5d 3d 72 5b  is:  r[P2@P3]=r[
9930: 50 31 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d 6f 76  P1@P3].**.** Mov
9940: 65 20 74 68 65 20 50 33 20 76 61 6c 75 65 73 20  e the P3 values 
9950: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 2e  in register P1..
9960: 50 31 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e 74  P1+P3-1 over int
9970: 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20 50  o.** registers P
9980: 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65 67  2..P2+P3-1.  Reg
9990: 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33  isters P1..P1+P3
99a0: 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20 68  -1 are.** left h
99b0: 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20 20  olding a NULL.  
99c0: 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66  It is an error f
99d0: 6f 72 20 72 65 67 69 73 74 65 72 20 72 61 6e 67  or register rang
99e0: 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33 2d  es.** P1..P1+P3-
99f0: 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33 2d  1 and P2..P2+P3-
9a00: 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e 20 20 49  1 to overlap.  I
9a10: 74 20 69 73 20 61 6e 20 65 72 72 6f 72 0a 2a 2a  t is an error.**
9a20: 20 66 6f 72 20 50 33 20 74 6f 20 62 65 20 6c 65   for P3 to be le
9a30: 73 73 20 74 68 61 6e 20 31 2e 0a 2a 2f 0a 63 61  ss than 1..*/.ca
9a40: 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20  se OP_Move: {.  
9a50: 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20  int n;          
9a60: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65   /* Number of re
9a70: 67 69 73 74 65 72 73 20 6c 65 66 74 20 74 6f 20  gisters left to 
9a80: 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20 70 31  copy */.  int p1
9a90: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  ;          /* Re
9aa0: 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 66  gister to copy f
9ab0: 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b  rom */.  int p2;
9ac0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
9ad0: 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 74 6f  ister to copy to
9ae0: 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e   */..  n = pOp->
9af0: 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e  p3;.  p1 = pOp->
9b00: 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e  p1;.  p2 = pOp->
9b10: 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e  p2;.  assert( n>
9b20: 30 20 26 26 20 70 31 3e 30 20 26 26 20 70 32 3e  0 && p1>0 && p2>
9b30: 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
9b40: 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c  1+n<=p2 || p2+n<
9b50: 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31 20 3d  =p1 );..  pIn1 =
9b60: 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f   &aMem[p1];.  pO
9b70: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a  ut = &aMem[p2];.
9b80: 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74    do{.    assert
9b90: 28 20 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b 28 70  ( pOut<=&aMem[(p
9ba0: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
9bb0: 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61  ursor)] );.    a
9bc0: 73 73 65 72 74 28 20 70 49 6e 31 3c 3d 26 61 4d  ssert( pIn1<=&aM
9bd0: 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  em[(p->nMem+1 - 
9be0: 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a  p->nCursor)] );.
9bf0: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
9c00: 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a  sValid(pIn1) );.
9c10: 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
9c20: 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20  ange(p, pOut);. 
9c30: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
9c40: 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e 31  mMove(pOut, pIn1
9c50: 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
9c60: 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 70  _DEBUG.    if( p
9c70: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3e  Out->pScopyFrom>
9c80: 3d 26 61 4d 65 6d 5b 70 31 5d 20 26 26 20 70 4f  =&aMem[p1] && pO
9c90: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3c 70  ut->pScopyFrom<p
9ca0: 4f 75 74 20 29 7b 0a 20 20 20 20 20 20 70 4f 75  Out ){.      pOu
9cb0: 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 2b 3d  t->pScopyFrom +=
9cc0: 20 70 4f 70 2d 3e 70 32 20 2d 20 70 31 3b 0a 20   pOp->p2 - p1;. 
9cd0: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20     }.#endif.    
9ce0: 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70  Deephemeralize(p
9cf0: 4f 75 74 29 3b 0a 20 20 20 20 52 45 47 49 53 54  Out);.    REGIST
9d00: 45 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c 20 70  ER_TRACE(p2++, p
9d10: 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b  Out);.    pIn1++
9d20: 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20  ;.    pOut++;.  
9d30: 7d 77 68 69 6c 65 28 20 2d 2d 6e 20 29 3b 0a 20  }while( --n );. 
9d40: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
9d50: 63 6f 64 65 3a 20 43 6f 70 79 20 50 31 20 50 32  code: Copy P1 P2
9d60: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
9d70: 73 69 73 3a 20 72 5b 50 32 40 50 33 2b 31 5d 3d  sis: r[P2@P3+1]=
9d80: 72 5b 50 31 40 50 33 2b 31 5d 0a 2a 2a 0a 2a 2a  r[P1@P3+1].**.**
9d90: 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20   Make a copy of 
9da0: 72 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31  registers P1..P1
9db0: 2b 50 33 20 69 6e 74 6f 20 72 65 67 69 73 74 65  +P3 into registe
9dc0: 72 73 20 50 32 2e 2e 50 32 2b 50 33 2e 0a 2a 2a  rs P2..P2+P3..**
9dd0: 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
9de0: 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65 65  tion makes a dee
9df0: 70 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61  p copy of the va
9e00: 6c 75 65 2e 20 20 41 20 64 75 70 6c 69 63 61 74  lue.  A duplicat
9e10: 65 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66 20  e.** is made of 
9e20: 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c  any string or bl
9e30: 6f 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53 65  ob constant.  Se
9e40: 65 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79 2e  e also OP_SCopy.
9e50: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70 79  .*/.case OP_Copy
9e60: 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20  : {.  int n;..  
9e70: 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70  n = pOp->p3;.  p
9e80: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
9e90: 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p1];.  pOut = &
9ea0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
9eb0: 20 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70   assert( pOut!=p
9ec0: 49 6e 31 20 29 3b 0a 20 20 77 68 69 6c 65 28 20  In1 );.  while( 
9ed0: 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  1 ){.    sqlite3
9ee0: 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
9ef0: 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d  py(pOut, pIn1, M
9f00: 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 20 20 44  EM_Ephem);.    D
9f10: 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f  eephemeralize(pO
9f20: 75 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  ut);.#ifdef SQLI
9f30: 54 45 5f 44 45 42 55 47 0a 20 20 20 20 70 4f 75  TE_DEBUG.    pOu
9f40: 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20  t->pScopyFrom = 
9f50: 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 52 45  0;.#endif.    RE
9f60: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
9f70: 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 2d 6e 2c 20  ->p2+pOp->p3-n, 
9f80: 70 4f 75 74 29 3b 0a 20 20 20 20 69 66 28 20 28  pOut);.    if( (
9f90: 6e 2d 2d 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b  n--)==0 ) break;
9fa0: 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20  .    pOut++;.   
9fb0: 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62   pIn1++;.  }.  b
9fc0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
9fd0: 64 65 3a 20 53 43 6f 70 79 20 50 31 20 50 32 20  de: SCopy P1 P2 
9fe0: 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
9ff0: 73 3a 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a  s: r[P2]=r[P1].*
a000: 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68 61 6c  *.** Make a shal
a010: 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72 65 67 69  low copy of regi
a020: 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67  ster P1 into reg
a030: 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
a040: 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
a050: 20 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c 6f 77   makes a shallow
a060: 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c   copy of the val
a070: 75 65 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  ue.  If the valu
a080: 65 0a 2a 2a 20 69 73 20 61 20 73 74 72 69 6e 67  e.** is a string
a090: 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e 20 74   or blob, then t
a0a0: 68 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c 79 20  he copy is only 
a0b0: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
a0c0: 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61 6e 64  .** original and
a0d0: 20 68 65 6e 63 65 20 69 66 20 74 68 65 20 6f 72   hence if the or
a0e0: 69 67 69 6e 61 6c 20 63 68 61 6e 67 65 73 20 73  iginal changes s
a0f0: 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f 70 79 2e  o will the copy.
a100: 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20 74 68  .** Worse, if th
a110: 65 20 6f 72 69 67 69 6e 61 6c 20 69 73 20 64 65  e original is de
a120: 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 20 63  allocated, the c
a130: 6f 70 79 20 62 65 63 6f 6d 65 73 20 69 6e 76 61  opy becomes inva
a140: 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74 68 65  lid..** Thus the
a150: 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20 67 75   program must gu
a160: 61 72 61 6e 74 65 65 20 74 68 61 74 20 74 68 65  arantee that the
a170: 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c 20 6e   original will n
a180: 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64 75 72  ot change.** dur
a190: 69 6e 67 20 74 68 65 20 6c 69 66 65 74 69 6d 65  ing the lifetime
a1a0: 20 6f 66 20 74 68 65 20 63 6f 70 79 2e 20 20 55   of the copy.  U
a1b0: 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20 6d 61  se OP_Copy to ma
a1c0: 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a  ke a complete.**
a1d0: 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f   copy..*/.case O
a1e0: 50 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20 20 20  P_SCopy: {      
a1f0: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
a200: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
a210: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74  pOp->p1];.  pOut
a220: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
a230: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75  ];.  assert( pOu
a240: 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c  t!=pIn1 );.  sql
a250: 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
a260: 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e  owCopy(pOut, pIn
a270: 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 23  1, MEM_Ephem);.#
a280: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
a290: 55 47 0a 20 20 69 66 28 20 70 4f 75 74 2d 3e 70  UG.  if( pOut->p
a2a0: 53 63 6f 70 79 46 72 6f 6d 3d 3d 30 20 29 20 70  ScopyFrom==0 ) p
a2b0: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20  Out->pScopyFrom 
a2c0: 3d 20 70 49 6e 31 3b 0a 23 65 6e 64 69 66 0a 20  = pIn1;.#endif. 
a2d0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
a2e0: 63 6f 64 65 3a 20 49 6e 74 43 6f 70 79 20 50 31  code: IntCopy P1
a2f0: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
a300: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 5b 50  opsis: r[P2]=r[P
a310: 31 5d 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65  1].**.** Transfe
a320: 72 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61  r the integer va
a330: 6c 75 65 20 68 65 6c 64 20 69 6e 20 72 65 67 69  lue held in regi
a340: 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67  ster P1 into reg
a350: 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
a360: 54 68 69 73 20 69 73 20 61 6e 20 6f 70 74 69 6d  This is an optim
a370: 69 7a 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20  ized version of 
a380: 53 43 6f 70 79 20 74 68 61 74 20 77 6f 72 6b 73  SCopy that works
a390: 20 6f 6e 6c 79 20 66 6f 72 20 69 6e 74 65 67 65   only for intege
a3a0: 72 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a 2f 0a  r.** values..*/.
a3b0: 63 61 73 65 20 4f 50 5f 49 6e 74 43 6f 70 79 3a  case OP_IntCopy:
a3c0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
a3d0: 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20   out2 */.  pIn1 
a3e0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
a3f0: 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e  ;.  assert( (pIn
a400: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
a410: 6e 74 29 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74  nt)!=0 );.  pOut
a420: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
a430: 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  ];.  sqlite3Vdbe
a440: 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74  MemSetInt64(pOut
a450: 2c 20 70 49 6e 31 2d 3e 75 2e 69 29 3b 0a 20 20  , pIn1->u.i);.  
a460: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
a470: 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f 77 20 50  ode: ResultRow P
a480: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
a490: 6e 6f 70 73 69 73 3a 20 20 6f 75 74 70 75 74 3d  nopsis:  output=
a4a0: 72 5b 50 31 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 54  r[P1@P2].**.** T
a4b0: 68 65 20 72 65 67 69 73 74 65 72 73 20 50 31 20  he registers P1 
a4c0: 74 68 72 6f 75 67 68 20 50 31 2b 50 32 2d 31 20  through P1+P2-1 
a4d0: 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c 65  contain a single
a4e0: 20 72 6f 77 20 6f 66 0a 2a 2a 20 72 65 73 75 6c   row of.** resul
a4f0: 74 73 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20  ts. This opcode 
a500: 63 61 75 73 65 73 20 74 68 65 20 73 71 6c 69 74  causes the sqlit
a510: 65 33 5f 73 74 65 70 28 29 20 63 61 6c 6c 20 74  e3_step() call t
a520: 6f 20 74 65 72 6d 69 6e 61 74 65 0a 2a 2a 20 77  o terminate.** w
a530: 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 52 4f  ith an SQLITE_RO
a540: 57 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61 6e  W return code an
a550: 64 20 69 74 20 73 65 74 73 20 75 70 20 74 68 65  d it sets up the
a560: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 0a 2a 2a   sqlite3_stmt.**
a570: 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 70 72   structure to pr
a580: 6f 76 69 64 65 20 61 63 63 65 73 73 20 74 6f 20  ovide access to 
a590: 74 68 65 20 72 28 50 31 29 2e 2e 72 28 50 31 2b  the r(P1)..r(P1+
a5a0: 50 32 2d 31 29 20 76 61 6c 75 65 73 20 61 73 0a  P2-1) values as.
a5b0: 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f  ** the result ro
a5c0: 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  w..*/.case OP_Re
a5d0: 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d  sultRow: {.  Mem
a5e0: 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b   *pMem;.  int i;
a5f0: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6e 52  .  assert( p->nR
a600: 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70  esColumn==pOp->p
a610: 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  2 );.  assert( p
a620: 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73  Op->p1>0 );.  as
a630: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f  sert( pOp->p1+pO
a640: 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p2<=(p->nMem+
a650: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  1 - p->nCursor)+
a660: 31 20 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  1 );..#ifndef SQ
a670: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
a680: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a  SS_CALLBACK.  /*
a690: 20 52 75 6e 20 74 68 65 20 70 72 6f 67 72 65 73   Run the progres
a6a0: 73 20 63 6f 75 6e 74 65 72 20 6a 75 73 74 20 62  s counter just b
a6b0: 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 2e  efore returning.
a6c0: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e  .  */.  if( db->
a6d0: 78 50 72 6f 67 72 65 73 73 21 3d 30 0a 20 20 20  xProgress!=0.   
a6e0: 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f  && nVmStep>=nPro
a6f0: 67 72 65 73 73 4c 69 6d 69 74 0a 20 20 20 26 26  gressLimit.   &&
a700: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64   db->xProgress(d
a710: 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29  b->pProgressArg)
a720: 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 72 63 20  !=0.  ){.    rc 
a730: 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55  = SQLITE_INTERRU
a740: 50 54 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f  PT;.    goto abo
a750: 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
a760: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f  .  }.#endif..  /
a770: 2a 20 49 66 20 74 68 69 73 20 73 74 61 74 65 6d  * If this statem
a780: 65 6e 74 20 68 61 73 20 76 69 6f 6c 61 74 65 64  ent has violated
a790: 20 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69   immediate forei
a7a0: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
a7b0: 74 73 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74 20  ts, do.  ** not 
a7c0: 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  return the numbe
a7d0: 72 20 6f 66 20 72 6f 77 73 20 6d 6f 64 69 66 69  r of rows modifi
a7e0: 65 64 2e 20 41 6e 64 20 64 6f 20 6e 6f 74 20 52  ed. And do not R
a7f0: 45 4c 45 41 53 45 20 74 68 65 20 73 74 61 74 65  ELEASE the state
a800: 6d 65 6e 74 0a 20 20 2a 2a 20 74 72 61 6e 73 61  ment.  ** transa
a810: 63 74 69 6f 6e 2e 20 49 74 20 6e 65 65 64 73 20  ction. It needs 
a820: 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  to be rolled bac
a830: 6b 2e 20 20 2a 2f 0a 20 20 69 66 28 20 53 51 4c  k.  */.  if( SQL
a840: 49 54 45 5f 4f 4b 21 3d 28 72 63 20 3d 20 73 71  ITE_OK!=(rc = sq
a850: 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b  lite3VdbeCheckFk
a860: 28 70 2c 20 30 29 29 20 29 7b 0a 20 20 20 20 61  (p, 0)) ){.    a
a870: 73 73 65 72 74 28 20 64 62 2d 3e 66 6c 61 67 73  ssert( db->flags
a880: 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77  &SQLITE_CountRow
a890: 73 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  s );.    assert(
a8a0: 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72   p->usesStmtJour
a8b0: 6e 61 6c 20 29 3b 0a 20 20 20 20 67 6f 74 6f 20  nal );.    goto 
a8c0: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
a8d0: 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66  or;.  }..  /* If
a8e0: 20 74 68 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e   the SQLITE_Coun
a8f0: 74 52 6f 77 73 20 66 6c 61 67 20 69 73 20 73 65  tRows flag is se
a900: 74 20 69 6e 20 73 71 6c 69 74 65 33 2e 66 6c 61  t in sqlite3.fla
a910: 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 0a 20  gs mask, then . 
a920: 20 2a 2a 20 44 4d 4c 20 73 74 61 74 65 6d 65 6e   ** DML statemen
a930: 74 73 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f  ts invoke this o
a940: 70 63 6f 64 65 20 74 6f 20 72 65 74 75 72 6e 20  pcode to return 
a950: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
a960: 77 73 20 0a 20 20 2a 2a 20 6d 6f 64 69 66 69 65  ws .  ** modifie
a970: 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54  d to the user. T
a980: 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20  his is the only 
a990: 77 61 79 20 74 68 61 74 20 61 20 56 4d 20 74 68  way that a VM th
a9a0: 61 74 0a 20 20 2a 2a 20 6f 70 65 6e 73 20 61 20  at.  ** opens a 
a9b0: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
a9c0: 63 74 69 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b 65  ction may invoke
a9d0: 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 20 20   this opcode..  
a9e0: 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63 61 73 65 20  **.  ** In case 
a9f0: 74 68 69 73 20 69 73 20 73 75 63 68 20 61 20 73  this is such a s
aa00: 74 61 74 65 6d 65 6e 74 2c 20 63 6c 6f 73 65 20  tatement, close 
aa10: 61 6e 79 20 73 74 61 74 65 6d 65 6e 74 20 74 72  any statement tr
aa20: 61 6e 73 61 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f  ansaction.  ** o
aa30: 70 65 6e 65 64 20 62 79 20 74 68 69 73 20 56 4d  pened by this VM
aa40: 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e   before returnin
aa50: 67 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65  g control to the
aa60: 20 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74   user. This is t
aa70: 6f 0a 20 20 2a 2a 20 65 6e 73 75 72 65 20 74 68  o.  ** ensure th
aa80: 61 74 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61  at statement-tra
aa90: 6e 73 61 63 74 69 6f 6e 73 20 61 72 65 20 61 6c  nsactions are al
aaa0: 77 61 79 73 20 6e 65 73 74 65 64 2c 20 6e 6f 74  ways nested, not
aab0: 20 6f 76 65 72 6c 61 70 70 69 6e 67 2e 0a 20 20   overlapping..  
aac0: 2a 2a 20 49 66 20 74 68 65 20 6f 70 65 6e 20 73  ** If the open s
aad0: 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63  tatement-transac
aae0: 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6c 6f 73  tion is not clos
aaf0: 65 64 20 68 65 72 65 2c 20 74 68 65 6e 20 74 68  ed here, then th
ab00: 65 20 75 73 65 72 0a 20 20 2a 2a 20 6d 61 79 20  e user.  ** may 
ab10: 73 74 65 70 20 61 6e 6f 74 68 65 72 20 56 4d 20  step another VM 
ab20: 74 68 61 74 20 6f 70 65 6e 73 20 69 74 73 20 6f  that opens its o
ab30: 77 6e 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  wn statement tra
ab40: 6e 73 61 63 74 69 6f 6e 2e 20 54 68 69 73 0a 20  nsaction. This. 
ab50: 20 2a 2a 20 6d 61 79 20 6c 65 61 64 20 74 6f 20   ** may lead to 
ab60: 6f 76 65 72 6c 61 70 70 69 6e 67 20 73 74 61 74  overlapping stat
ab70: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
ab80: 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  ns..  **.  ** Th
ab90: 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  e statement tran
aba0: 73 61 63 74 69 6f 6e 20 69 73 20 6e 65 76 65 72  saction is never
abb0: 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20 74 72 61   a top-level tra
abc0: 6e 73 61 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65  nsaction.  Hence
abd0: 0a 20 20 2a 2a 20 74 68 65 20 52 45 4c 45 41 53  .  ** the RELEAS
abe0: 45 20 63 61 6c 6c 20 62 65 6c 6f 77 20 63 61 6e  E call below can
abf0: 20 6e 65 76 65 72 20 66 61 69 6c 2e 0a 20 20 2a   never fail..  *
ac00: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 69  /.  assert( p->i
ac10: 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20  Statement==0 || 
ac20: 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45  db->flags&SQLITE
ac30: 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20  _CountRows );.  
ac40: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
ac50: 43 6c 6f 73 65 53 74 61 74 65 6d 65 6e 74 28 70  CloseStatement(p
ac60: 2c 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  , SAVEPOINT_RELE
ac70: 41 53 45 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ASE);.  assert( 
ac80: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
ac90: 0a 0a 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74  ..  /* Invalidat
aca0: 65 20 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c 20  e all ephemeral 
acb0: 63 75 72 73 6f 72 20 72 6f 77 20 63 61 63 68 65  cursor row cache
acc0: 73 20 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65 43  s */.  p->cacheC
acd0: 74 72 20 3d 20 28 70 2d 3e 63 61 63 68 65 43 74  tr = (p->cacheCt
ace0: 72 20 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20  r + 2)|1;..  /* 
acf0: 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 72 65  Make sure the re
ad00: 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 75 72  sults of the cur
ad10: 72 65 6e 74 20 72 6f 77 20 61 72 65 20 5c 30 30  rent row are \00
ad20: 30 20 74 65 72 6d 69 6e 61 74 65 64 0a 20 20 2a  0 terminated.  *
ad30: 2a 20 61 6e 64 20 68 61 76 65 20 61 6e 20 61 73  * and have an as
ad40: 73 69 67 6e 65 64 20 74 79 70 65 2e 20 20 54 68  signed type.  Th
ad50: 65 20 72 65 73 75 6c 74 73 20 61 72 65 20 64 65  e results are de
ad60: 2d 65 70 68 65 6d 65 72 61 6c 69 7a 65 64 20 61  -ephemeralized a
ad70: 73 0a 20 20 2a 2a 20 61 20 73 69 64 65 20 65 66  s.  ** a side ef
ad80: 66 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65  fect..  */.  pMe
ad90: 6d 20 3d 20 70 2d 3e 70 52 65 73 75 6c 74 53 65  m = p->pResultSe
ada0: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
adb0: 31 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  1];.  for(i=0; i
adc0: 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a  <pOp->p2; i++){.
add0: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
ade0: 73 56 61 6c 69 64 28 26 70 4d 65 6d 5b 69 5d 29  sValid(&pMem[i])
adf0: 20 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65   );.    Deepheme
ae00: 72 61 6c 69 7a 65 28 26 70 4d 65 6d 5b 69 5d 29  ralize(&pMem[i])
ae10: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70  ;.    assert( (p
ae20: 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 4d  Mem[i].flags & M
ae30: 45 4d 5f 45 70 68 65 6d 29 3d 3d 30 0a 20 20 20  EM_Ephem)==0.   
ae40: 20 20 20 20 20 20 20 20 20 7c 7c 20 28 70 4d 65           || (pMe
ae50: 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 28 4d 45  m[i].flags & (ME
ae60: 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29  M_Str|MEM_Blob))
ae70: 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  ==0 );.    sqlit
ae80: 65 33 56 64 62 65 4d 65 6d 4e 75 6c 54 65 72 6d  e3VdbeMemNulTerm
ae90: 69 6e 61 74 65 28 26 70 4d 65 6d 5b 69 5d 29 3b  inate(&pMem[i]);
aea0: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
aeb0: 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26  ACE(pOp->p1+i, &
aec0: 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20  pMem[i]);.  }.  
aed0: 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  if( db->mallocFa
aee0: 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  iled ) goto no_m
aef0: 65 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e  em;..  /* Return
af00: 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f   SQLITE_ROW.  */
af10: 0a 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29  .  p->pc = (int)
af20: 28 70 4f 70 20 2d 20 61 4f 70 29 20 2b 20 31 3b  (pOp - aOp) + 1;
af30: 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52  .  rc = SQLITE_R
af40: 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f  OW;.  goto vdbe_
af50: 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70  return;.}../* Op
af60: 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50 31 20  code: Concat P1 
af70: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
af80: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
af90: 32 5d 2b 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 41  2]+r[P1].**.** A
afa0: 64 64 20 74 68 65 20 74 65 78 74 20 69 6e 20 72  dd the text in r
afb0: 65 67 69 73 74 65 72 20 50 31 20 6f 6e 74 6f 20  egister P1 onto 
afc0: 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 74  the end of the t
afd0: 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74  ext in.** regist
afe0: 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20  er P2 and store 
aff0: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
b000: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
b010: 20 65 69 74 68 65 72 20 74 68 65 20 50 31 20 6f   either the P1 o
b020: 72 20 50 32 20 74 65 78 74 20 61 72 65 20 4e 55  r P2 text are NU
b030: 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 4e 55  LL then store NU
b040: 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  LL in P3..**.** 
b050: 20 20 50 33 20 3d 20 50 32 20 7c 7c 20 50 31 0a    P3 = P2 || P1.
b060: 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65  **.** It is ille
b070: 67 61 6c 20 66 6f 72 20 50 31 20 61 6e 64 20 50  gal for P1 and P
b080: 33 20 74 6f 20 62 65 20 74 68 65 20 73 61 6d 65  3 to be the same
b090: 20 72 65 67 69 73 74 65 72 2e 20 53 6f 6d 65 74   register. Somet
b0a0: 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33 20 69  imes,.** if P3 i
b0b0: 73 20 74 68 65 20 73 61 6d 65 20 72 65 67 69 73  s the same regis
b0c0: 74 65 72 20 61 73 20 50 32 2c 20 74 68 65 20 69  ter as P2, the i
b0d0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73  mplementation is
b0e0: 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f 69   able.** to avoi
b0f0: 64 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f  d a memcpy()..*/
b100: 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61 74 3a  .case OP_Concat:
b110: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
b120: 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e 43 41  same as TK_CONCA
b130: 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  T, in1, in2, out
b140: 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65  3 */.  i64 nByte
b150: 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  ;..  pIn1 = &aMe
b160: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
b170: 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
b180: 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p2];.  pOut = &a
b190: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
b1a0: 61 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70 4f  assert( pIn1!=pO
b1b0: 75 74 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  ut );.  if( (pIn
b1c0: 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d  1->flags | pIn2-
b1d0: 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75  >flags) & MEM_Nu
b1e0: 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ll ){.    sqlite
b1f0: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
b200: 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  pOut);.    break
b210: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 45 78 70 61  ;.  }.  if( Expa
b220: 6e 64 42 6c 6f 62 28 70 49 6e 31 29 20 7c 7c 20  ndBlob(pIn1) || 
b230: 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29  ExpandBlob(pIn2)
b240: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
b250: 20 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31    Stringify(pIn1
b260: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 53  , encoding);.  S
b270: 74 72 69 6e 67 69 66 79 28 70 49 6e 32 2c 20 65  tringify(pIn2, e
b280: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e 42 79 74  ncoding);.  nByt
b290: 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20 70 49  e = pIn1->n + pI
b2a0: 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e 42 79  n2->n;.  if( nBy
b2b0: 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  te>db->aLimit[SQ
b2c0: 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
b2d0: 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  H] ){.    goto t
b2e0: 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 69 66  oo_big;.  }.  if
b2f0: 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
b300: 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29  Grow(pOut, (int)
b310: 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74 3d 3d 70  nByte+2, pOut==p
b320: 49 6e 32 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  In2) ){.    goto
b330: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 4d   no_mem;.  }.  M
b340: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
b350: 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a 20 20  ut, MEM_Str);.  
b360: 69 66 28 20 70 4f 75 74 21 3d 70 49 6e 32 20 29  if( pOut!=pIn2 )
b370: 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 4f 75  {.    memcpy(pOu
b380: 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70  t->z, pIn2->z, p
b390: 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d  In2->n);.  }.  m
b3a0: 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e 7a 5b 70  emcpy(&pOut->z[p
b3b0: 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a  In2->n], pIn1->z
b3c0: 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f  , pIn1->n);.  pO
b3d0: 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 3d 30 3b 0a  ut->z[nByte]=0;.
b3e0: 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 2b    pOut->z[nByte+
b3f0: 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e  1] = 0;.  pOut->
b400: 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72  flags |= MEM_Ter
b410: 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28  m;.  pOut->n = (
b420: 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75  int)nByte;.  pOu
b430: 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e  t->enc = encodin
b440: 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  g;.  UPDATE_MAX_
b450: 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
b460: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
b470: 70 63 6f 64 65 3a 20 41 64 64 20 50 31 20 50 32  pcode: Add P1 P2
b480: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
b490: 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31  sis:  r[P3]=r[P1
b4a0: 5d 2b 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 41 64  ]+r[P2].**.** Ad
b4b0: 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  d the value in r
b4c0: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 74 68  egister P1 to th
b4d0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
b4e0: 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74  ter P2.** and st
b4f0: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
b500: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
b510: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
b520: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
b530: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
b540: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 6c  /./* Opcode: Mul
b550: 74 69 70 6c 79 20 50 31 20 50 32 20 50 33 20 2a  tiply P1 P2 P3 *
b560: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
b570: 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2a 72 5b 50   r[P3]=r[P1]*r[P
b580: 32 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74  2].**.**.** Mult
b590: 69 70 6c 79 20 74 68 65 20 76 61 6c 75 65 20 69  iply the value i
b5a0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79  n register P1 by
b5b0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
b5c0: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
b5d0: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
b5e0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
b5f0: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
b600: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
b610: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b620: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
b630: 53 75 62 74 72 61 63 74 20 50 31 20 50 32 20 50  Subtract P1 P2 P
b640: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
b650: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2d  s:  r[P3]=r[P2]-
b660: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 75 62 74  r[P1].**.** Subt
b670: 72 61 63 74 20 74 68 65 20 76 61 6c 75 65 20 69  ract the value i
b680: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 66 72  n register P1 fr
b690: 6f 6d 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  om the value in 
b6a0: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61  register P2.** a
b6b0: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
b6c0: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
b6d0: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
b6e0: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
b6f0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
b700: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
b710: 3a 20 44 69 76 69 64 65 20 50 31 20 50 32 20 50  : Divide P1 P2 P
b720: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
b730: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2f  s:  r[P3]=r[P2]/
b740: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 44 69 76 69  r[P1].**.** Divi
b750: 64 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  de the value in 
b760: 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74  register P1 by t
b770: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
b780: 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73  ster P2.** and s
b790: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
b7a0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 28  in register P3 (
b7b0: 50 33 3d 50 32 2f 50 31 29 2e 20 49 66 20 74 68  P3=P2/P1). If th
b7c0: 65 20 76 61 6c 75 65 20 69 6e 20 0a 2a 2a 20 72  e value in .** r
b7d0: 65 67 69 73 74 65 72 20 50 31 20 69 73 20 7a 65  egister P1 is ze
b7e0: 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ro, then the res
b7f0: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 49 66 20  ult is NULL. If 
b800: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
b810: 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65  .** NULL, the re
b820: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
b830: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d 61  ./* Opcode: Rema
b840: 69 6e 64 65 72 20 50 31 20 50 32 20 50 33 20 2a  inder P1 P2 P3 *
b850: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
b860: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 25 72 5b 50   r[P3]=r[P2]%r[P
b870: 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65  1].**.** Compute
b880: 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 61   the remainder a
b890: 66 74 65 72 20 69 6e 74 65 67 65 72 20 72 65 67  fter integer reg
b8a0: 69 73 74 65 72 20 50 32 20 69 73 20 64 69 76 69  ister P2 is divi
b8b0: 64 65 64 20 62 79 20 0a 2a 2a 20 72 65 67 69 73  ded by .** regis
b8c0: 74 65 72 20 50 31 20 61 6e 64 20 73 74 6f 72 65  ter P1 and store
b8d0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
b8e0: 65 67 69 73 74 65 72 20 50 33 2e 20 0a 2a 2a 20  egister P3. .** 
b8f0: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  If the value in 
b900: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 7a  register P1 is z
b910: 65 72 6f 20 74 68 65 20 72 65 73 75 6c 74 20 69  ero the result i
b920: 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69  s NULL..** If ei
b930: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
b940: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
b950: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73   is NULL..*/.cas
b960: 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20  e OP_Add:       
b970: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
b980: 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55 53 2c 20  ame as TK_PLUS, 
b990: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
b9a0: 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61  /.case OP_Subtra
b9b0: 63 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  ct:             
b9c0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4d   /* same as TK_M
b9d0: 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  INUS, in1, in2, 
b9e0: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
b9f0: 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 20 20 20  Multiply:       
ba00: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
ba10: 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e 31 2c 20  s TK_STAR, in1, 
ba20: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
ba30: 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 20 20 20  e OP_Divide:    
ba40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
ba50: 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41 53 48 2c  ame as TK_SLASH,
ba60: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
ba70: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6d 61 69  */.case OP_Remai
ba80: 6e 64 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20  nder: {         
ba90: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
baa0: 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  REM, in1, in2, o
bab0: 75 74 33 20 2a 2f 0a 20 20 63 68 61 72 20 62 49  ut3 */.  char bI
bac0: 6e 74 69 6e 74 3b 20 20 20 2f 2a 20 53 74 61 72  ntint;   /* Star
bad0: 74 65 64 20 6f 75 74 20 61 73 20 74 77 6f 20 69  ted out as two i
bae0: 6e 74 65 67 65 72 20 6f 70 65 72 61 6e 64 73 20  nteger operands 
baf0: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 3b 20  */.  u16 flags; 
bb00: 20 20 20 20 20 2f 2a 20 43 6f 6d 62 69 6e 65 64       /* Combined
bb10: 20 4d 45 4d 5f 2a 20 66 6c 61 67 73 20 66 72 6f   MEM_* flags fro
bb20: 6d 20 62 6f 74 68 20 69 6e 70 75 74 73 20 2a 2f  m both inputs */
bb30: 0a 20 20 75 31 36 20 74 79 70 65 31 3b 20 20 20  .  u16 type1;   
bb40: 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79     /* Numeric ty
bb50: 70 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61  pe of left opera
bb60: 6e 64 20 2a 2f 0a 20 20 75 31 36 20 74 79 70 65  nd */.  u16 type
bb70: 32 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72  2;      /* Numer
bb80: 69 63 20 74 79 70 65 20 6f 66 20 72 69 67 68 74  ic type of right
bb90: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36   operand */.  i6
bba0: 34 20 69 41 3b 20 20 20 20 20 20 20 20 20 2f 2a  4 iA;         /*
bbb0: 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f   Integer value o
bbc0: 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a  f left operand *
bbd0: 2f 0a 20 20 69 36 34 20 69 42 3b 20 20 20 20 20  /.  i64 iB;     
bbe0: 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76      /* Integer v
bbf0: 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70  alue of right op
bc00: 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c  erand */.  doubl
bc10: 65 20 72 41 3b 20 20 20 20 20 20 2f 2a 20 52 65  e rA;      /* Re
bc20: 61 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74  al value of left
bc30: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f   operand */.  do
bc40: 75 62 6c 65 20 72 42 3b 20 20 20 20 20 20 2f 2a  uble rB;      /*
bc50: 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 72   Real value of r
bc60: 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  ight operand */.
bc70: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
bc80: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 74 79 70 65  pOp->p1];.  type
bc90: 31 20 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28  1 = numericType(
bca0: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20  pIn1);.  pIn2 = 
bcb0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
bcc0: 20 20 74 79 70 65 32 20 3d 20 6e 75 6d 65 72 69    type2 = numeri
bcd0: 63 54 79 70 65 28 70 49 6e 32 29 3b 0a 20 20 70  cType(pIn2);.  p
bce0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
bcf0: 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 20 3d 20  >p3];.  flags = 
bd00: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
bd10: 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28  n2->flags;.  if(
bd20: 20 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75   (flags & MEM_Nu
bd30: 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f 20 61 72  ll)!=0 ) goto ar
bd40: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
bd50: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20 28  is_null;.  if( (
bd60: 74 79 70 65 31 20 26 20 74 79 70 65 32 20 26 20  type1 & type2 & 
bd70: 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20  MEM_Int)!=0 ){. 
bd80: 20 20 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e     iA = pIn1->u.
bd90: 69 3b 0a 20 20 20 20 69 42 20 3d 20 70 49 6e 32  i;.    iB = pIn2
bda0: 2d 3e 75 2e 69 3b 0a 20 20 20 20 62 49 6e 74 69  ->u.i;.    bInti
bdb0: 6e 74 20 3d 20 31 3b 0a 20 20 20 20 73 77 69 74  nt = 1;.    swit
bdc0: 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ch( pOp->opcode 
bdd0: 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  ){.      case OP
bde0: 5f 41 64 64 3a 20 20 20 20 20 20 20 69 66 28 20  _Add:       if( 
bdf0: 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28  sqlite3AddInt64(
be00: 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66  &iB,iA) ) goto f
be10: 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a  p_math;  break;.
be20: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75        case OP_Su
be30: 62 74 72 61 63 74 3a 20 20 69 66 28 20 73 71 6c  btract:  if( sql
be40: 69 74 65 33 53 75 62 49 6e 74 36 34 28 26 69 42  ite3SubInt64(&iB
be50: 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d  ,iA) ) goto fp_m
be60: 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20  ath;  break;.   
be70: 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69     case OP_Multi
be80: 70 6c 79 3a 20 20 69 66 28 20 73 71 6c 69 74 65  ply:  if( sqlite
be90: 33 4d 75 6c 49 6e 74 36 34 28 26 69 42 2c 69 41  3MulInt64(&iB,iA
bea0: 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68  ) ) goto fp_math
beb0: 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20  ;  break;.      
bec0: 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20  case OP_Divide: 
bed0: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  {.        if( iA
bee0: 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  ==0 ) goto arith
bef0: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
bf00: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66  null;.        if
bf10: 28 20 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d  ( iA==-1 && iB==
bf20: 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29  SMALLEST_INT64 )
bf30: 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 0a 20   goto fp_math;. 
bf40: 20 20 20 20 20 20 20 69 42 20 2f 3d 20 69 41 3b         iB /= iA;
bf50: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
bf60: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65        }.      de
bf70: 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20  fault: {.       
bf80: 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74   if( iA==0 ) got
bf90: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
bfa0: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
bfb0: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20       if( iA==-1 
bfc0: 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20  ) iA = 1;.      
bfd0: 20 20 69 42 20 25 3d 20 69 41 3b 0a 20 20 20 20    iB %= iA;.    
bfe0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
bff0: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75   }.    }.    pOu
c000: 74 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a 20 20 20  t->u.i = iB;.   
c010: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
c020: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
c030: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 62 49 6e    }else{.    bIn
c040: 74 69 6e 74 20 3d 20 30 3b 0a 66 70 5f 6d 61 74  tint = 0;.fp_mat
c050: 68 3a 0a 20 20 20 20 72 41 20 3d 20 73 71 6c 69  h:.    rA = sqli
c060: 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65  te3VdbeRealValue
c070: 28 70 49 6e 31 29 3b 0a 20 20 20 20 72 42 20 3d  (pIn1);.    rB =
c080: 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c   sqlite3VdbeReal
c090: 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20  Value(pIn2);.   
c0a0: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
c0b0: 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61  code ){.      ca
c0c0: 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20  se OP_Add:      
c0d0: 20 20 20 72 42 20 2b 3d 20 72 41 3b 20 20 20 20     rB += rA;    
c0e0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
c0f0: 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74  case OP_Subtract
c100: 3a 20 20 20 20 72 42 20 2d 3d 20 72 41 3b 20 20  :    rB -= rA;  
c110: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
c120: 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70    case OP_Multip
c130: 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20 72 41 3b  ly:    rB *= rA;
c140: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
c150: 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69      case OP_Divi
c160: 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a  de: {.        /*
c170: 20 28 64 6f 75 62 6c 65 29 30 20 49 6e 20 63 61   (double)0 In ca
c180: 73 65 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49  se of SQLITE_OMI
c190: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
c1a0: 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  ... */.        i
c1b0: 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29 30  f( rA==(double)0
c1c0: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
c1d0: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
c1e0: 6c 3b 0a 20 20 20 20 20 20 20 20 72 42 20 2f 3d  l;.        rB /=
c1f0: 20 72 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65   rA;.        bre
c200: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
c210: 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20    default: {.   
c220: 20 20 20 20 20 69 41 20 3d 20 28 69 36 34 29 72       iA = (i64)r
c230: 41 3b 0a 20 20 20 20 20 20 20 20 69 42 20 3d 20  A;.        iB = 
c240: 28 69 36 34 29 72 42 3b 0a 20 20 20 20 20 20 20  (i64)rB;.       
c250: 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74   if( iA==0 ) got
c260: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
c270: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
c280: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20       if( iA==-1 
c290: 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20  ) iA = 1;.      
c2a0: 20 20 72 42 20 3d 20 28 64 6f 75 62 6c 65 29 28    rB = (double)(
c2b0: 69 42 20 25 20 69 41 29 3b 0a 20 20 20 20 20 20  iB % iA);.      
c2c0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
c2d0: 0a 20 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51  .    }.#ifdef SQ
c2e0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
c2f0: 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f 75  NG_POINT.    pOu
c300: 74 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20 20  t->u.i = rB;.   
c310: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
c320: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
c330: 23 65 6c 73 65 0a 20 20 20 20 69 66 28 20 73 71  #else.    if( sq
c340: 6c 69 74 65 33 49 73 4e 61 4e 28 72 42 29 20 29  lite3IsNaN(rB) )
c350: 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69  {.      goto ari
c360: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
c370: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20  s_null;.    }.  
c380: 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d 20 72 42    pOut->u.r = rB
c390: 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
c3a0: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 52  Flag(pOut, MEM_R
c3b0: 65 61 6c 29 3b 0a 20 20 20 20 69 66 28 20 28 28  eal);.    if( ((
c3c0: 74 79 70 65 31 7c 74 79 70 65 32 29 26 4d 45 4d  type1|type2)&MEM
c3d0: 5f 52 65 61 6c 29 3d 3d 30 20 26 26 20 21 62 49  _Real)==0 && !bI
c3e0: 6e 74 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73  ntint ){.      s
c3f0: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65  qlite3VdbeIntege
c400: 72 41 66 66 69 6e 69 74 79 28 70 4f 75 74 29 3b  rAffinity(pOut);
c410: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
c420: 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61 72 69 74  }.  break;..arit
c430: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
c440: 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69 74 65 33  _null:.  sqlite3
c450: 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
c460: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
c470: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c  ../* Opcode: Col
c480: 6c 53 65 71 20 50 31 20 2a 20 2a 20 50 34 0a 2a  lSeq P1 * * P4.*
c490: 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
c4a0: 6e 74 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65  nter to a CollSe
c4b0: 71 20 73 74 72 75 63 74 2e 20 49 66 20 74 68 65  q struct. If the
c4c0: 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f 20 61 20   next call to a 
c4d0: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a  user function.**
c4e0: 20 6f 72 20 61 67 67 72 65 67 61 74 65 20 63 61   or aggregate ca
c4f0: 6c 6c 73 20 73 71 6c 69 74 65 33 47 65 74 46 75  lls sqlite3GetFu
c500: 6e 63 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69  ncCollSeq(), thi
c510: 73 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  s collation sequ
c520: 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20  ence will.** be 
c530: 72 65 74 75 72 6e 65 64 2e 20 54 68 69 73 20 69  returned. This i
c540: 73 20 75 73 65 64 20 62 79 20 74 68 65 20 62 75  s used by the bu
c550: 69 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61  ilt-in min(), ma
c560: 78 28 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29  x() and nullif()
c570: 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a  .** functions..*
c580: 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f  *.** If P1 is no
c590: 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20  t zero, then it 
c5a0: 69 73 20 61 20 72 65 67 69 73 74 65 72 20 74 68  is a register th
c5b0: 61 74 20 61 20 73 75 62 73 65 71 75 65 6e 74 20  at a subsequent 
c5c0: 6d 69 6e 28 29 20 6f 72 0a 2a 2a 20 6d 61 78 28  min() or.** max(
c5d0: 29 20 61 67 67 72 65 67 61 74 65 20 77 69 6c 6c  ) aggregate will
c5e0: 20 73 65 74 20 74 6f 20 31 20 69 66 20 74 68 65   set to 1 if the
c5f0: 20 63 75 72 72 65 6e 74 20 72 6f 77 20 69 73 20   current row is 
c600: 6e 6f 74 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20  not the minimum 
c610: 6f 72 0a 2a 2a 20 6d 61 78 69 6d 75 6d 2e 20 20  or.** maximum.  
c620: 54 68 65 20 50 31 20 72 65 67 69 73 74 65 72 20  The P1 register 
c630: 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74  is initialized t
c640: 6f 20 30 20 62 79 20 74 68 69 73 20 69 6e 73 74  o 0 by this inst
c650: 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ruction..**.** T
c660: 68 65 20 69 6e 74 65 72 66 61 63 65 20 75 73 65  he interface use
c670: 64 20 62 79 20 74 68 65 20 69 6d 70 6c 65 6d 65  d by the impleme
c680: 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 61  ntation of the a
c690: 66 6f 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66 75  forementioned fu
c6a0: 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65  nctions.** to re
c6b0: 74 72 69 65 76 65 20 74 68 65 20 63 6f 6c 6c 61  trieve the colla
c6c0: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 73 65  tion sequence se
c6d0: 74 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65  t by this opcode
c6e0: 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c   is not availabl
c6f0: 65 0a 2a 2a 20 70 75 62 6c 69 63 6c 79 2e 20 20  e.** publicly.  
c700: 4f 6e 6c 79 20 62 75 69 6c 74 2d 69 6e 20 66 75  Only built-in fu
c710: 6e 63 74 69 6f 6e 73 20 68 61 76 65 20 61 63 63  nctions have acc
c720: 65 73 73 20 74 6f 20 74 68 69 73 20 66 65 61 74  ess to this feat
c730: 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ure..*/.case OP_
c740: 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73 73  CollSeq: {.  ass
c750: 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
c760: 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a  ==P4_COLLSEQ );.
c770: 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b    if( pOp->p1 ){
c780: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
c790: 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65  MemSetInt64(&aMe
c7a0: 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 30 29 3b 0a  m[pOp->p1], 0);.
c7b0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
c7c0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 75 6e 63 74  /* Opcode: Funct
c7d0: 69 6f 6e 30 20 50 31 20 50 32 20 50 33 20 50 34  ion0 P1 P2 P3 P4
c7e0: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
c7f0: 20 72 5b 50 33 5d 3d 66 75 6e 63 28 72 5b 50 32   r[P3]=func(r[P2
c800: 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f  @P5]).**.** Invo
c810: 6b 65 20 61 20 75 73 65 72 20 66 75 6e 63 74 69  ke a user functi
c820: 6f 6e 20 28 50 34 20 69 73 20 61 20 70 6f 69 6e  on (P4 is a poin
c830: 74 65 72 20 74 6f 20 61 20 46 75 6e 63 44 65 66  ter to a FuncDef
c840: 20 6f 62 6a 65 63 74 20 74 68 61 74 0a 2a 2a 20   object that.** 
c850: 64 65 66 69 6e 65 73 20 74 68 65 20 66 75 6e 63  defines the func
c860: 74 69 6f 6e 29 20 77 69 74 68 20 50 35 20 61 72  tion) with P5 ar
c870: 67 75 6d 65 6e 74 73 20 74 61 6b 65 6e 20 66 72  guments taken fr
c880: 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61  om register P2 a
c890: 6e 64 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73  nd.** successors
c8a0: 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66  .  The result of
c8b0: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 73   the function is
c8c0: 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
c8d0: 74 65 72 20 50 33 2e 0a 2a 2a 20 52 65 67 69 73  ter P3..** Regis
c8e0: 74 65 72 20 50 33 20 6d 75 73 74 20 6e 6f 74 20  ter P3 must not 
c8f0: 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 75  be one of the fu
c900: 6e 63 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a  nction inputs..*
c910: 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 33 32 2d  *.** P1 is a 32-
c920: 62 69 74 20 62 69 74 6d 61 73 6b 20 69 6e 64 69  bit bitmask indi
c930: 63 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f  cating whether o
c940: 72 20 6e 6f 74 20 65 61 63 68 20 61 72 67 75 6d  r not each argum
c950: 65 6e 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66  ent to the .** f
c960: 75 6e 63 74 69 6f 6e 20 77 61 73 20 64 65 74 65  unction was dete
c970: 72 6d 69 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e  rmined to be con
c980: 73 74 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65  stant at compile
c990: 20 74 69 6d 65 2e 20 49 66 20 74 68 65 20 66 69   time. If the fi
c9a0: 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  rst.** argument 
c9b0: 77 61 73 20 63 6f 6e 73 74 61 6e 74 20 74 68 65  was constant the
c9c0: 6e 20 62 69 74 20 30 20 6f 66 20 50 31 20 69 73  n bit 0 of P1 is
c9d0: 20 73 65 74 2e 20 54 68 69 73 20 69 73 20 75 73   set. This is us
c9e0: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a  ed to determine.
c9f0: 2a 2a 20 77 68 65 74 68 65 72 20 6d 65 74 61 20  ** whether meta 
ca00: 64 61 74 61 20 61 73 73 6f 63 69 61 74 65 64 20  data associated 
ca10: 77 69 74 68 20 61 20 75 73 65 72 20 66 75 6e 63  with a user func
ca20: 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75 73  tion argument us
ca30: 69 6e 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74  ing the.** sqlit
ca40: 65 33 5f 73 65 74 5f 61 75 78 64 61 74 61 28 29  e3_set_auxdata()
ca50: 20 41 50 49 20 6d 61 79 20 62 65 20 73 61 66 65   API may be safe
ca60: 6c 79 20 72 65 74 61 69 6e 65 64 20 75 6e 74 69  ly retained unti
ca70: 6c 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e  l the next.** in
ca80: 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 69 73  vocation of this
ca90: 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53   opcode..**.** S
caa0: 65 65 20 61 6c 73 6f 3a 20 46 75 6e 63 74 69 6f  ee also: Functio
cab0: 6e 2c 20 41 67 67 53 74 65 70 2c 20 41 67 67 46  n, AggStep, AggF
cac0: 69 6e 61 6c 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  inal.*/./* Opcod
cad0: 65 3a 20 46 75 6e 63 74 69 6f 6e 20 50 31 20 50  e: Function P1 P
cae0: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
caf0: 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 66 75  nopsis: r[P3]=fu
cb00: 6e 63 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a  nc(r[P2@P5]).**.
cb10: 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73 65 72  ** Invoke a user
cb20: 20 66 75 6e 63 74 69 6f 6e 20 28 50 34 20 69 73   function (P4 is
cb30: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e   a pointer to an
cb40: 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
cb50: 20 6f 62 6a 65 63 74 20 74 68 61 74 0a 2a 2a 20   object that.** 
cb60: 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e 74  contains a point
cb70: 65 72 20 74 6f 20 74 68 65 20 66 75 6e 63 74 69  er to the functi
cb80: 6f 6e 20 74 6f 20 62 65 20 72 75 6e 29 20 77 69  on to be run) wi
cb90: 74 68 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20  th P5 arguments 
cba0: 74 61 6b 65 6e 0a 2a 2a 20 66 72 6f 6d 20 72 65  taken.** from re
cbb0: 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 73 75  gister P2 and su
cbc0: 63 63 65 73 73 6f 72 73 2e 20 20 54 68 65 20 72  ccessors.  The r
cbd0: 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e  esult of the fun
cbe0: 63 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 0a  ction is stored.
cbf0: 2a 2a 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ** in register P
cc00: 33 2e 20 20 52 65 67 69 73 74 65 72 20 50 33 20  3.  Register P3 
cc10: 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65 20  must not be one 
cc20: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  of the function 
cc30: 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31  inputs..**.** P1
cc40: 20 69 73 20 61 20 33 32 2d 62 69 74 20 62 69 74   is a 32-bit bit
cc50: 6d 61 73 6b 20 69 6e 64 69 63 61 74 69 6e 67 20  mask indicating 
cc60: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 65  whether or not e
cc70: 61 63 68 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  ach argument to 
cc80: 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e  the .** function
cc90: 20 77 61 73 20 64 65 74 65 72 6d 69 6e 65 64 20   was determined 
cca0: 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74 20 61  to be constant a
ccb0: 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e 20  t compile time. 
ccc0: 49 66 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  If the first.** 
ccd0: 61 72 67 75 6d 65 6e 74 20 77 61 73 20 63 6f 6e  argument was con
cce0: 73 74 61 6e 74 20 74 68 65 6e 20 62 69 74 20 30  stant then bit 0
ccf0: 20 6f 66 20 50 31 20 69 73 20 73 65 74 2e 20 54   of P1 is set. T
cd00: 68 69 73 20 69 73 20 75 73 65 64 20 74 6f 20 64  his is used to d
cd10: 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74  etermine.** whet
cd20: 68 65 72 20 6d 65 74 61 20 64 61 74 61 20 61 73  her meta data as
cd30: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
cd40: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 61 72  user function ar
cd50: 67 75 6d 65 6e 74 20 75 73 69 6e 67 20 74 68 65  gument using the
cd60: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65 74 5f  .** sqlite3_set_
cd70: 61 75 78 64 61 74 61 28 29 20 41 50 49 20 6d 61  auxdata() API ma
cd80: 79 20 62 65 20 73 61 66 65 6c 79 20 72 65 74 61  y be safely reta
cd90: 69 6e 65 64 20 75 6e 74 69 6c 20 74 68 65 20 6e  ined until the n
cda0: 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f  ext.** invocatio
cdb0: 6e 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65  n of this opcode
cdc0: 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 20 66 75 6e 63  ..**.** SQL func
cdd0: 74 69 6f 6e 73 20 61 72 65 20 69 6e 69 74 69 61  tions are initia
cde0: 6c 6c 79 20 63 6f 64 65 64 20 61 73 20 4f 50 5f  lly coded as OP_
cdf0: 46 75 6e 63 74 69 6f 6e 30 20 77 69 74 68 20 50  Function0 with P
ce00: 34 20 70 6f 69 6e 74 69 6e 67 0a 2a 2a 20 74 6f  4 pointing.** to
ce10: 20 61 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63   a FuncDef objec
ce20: 74 2e 20 20 42 75 74 20 6f 6e 20 66 69 72 73 74  t.  But on first
ce30: 20 65 76 61 6c 75 61 74 69 6f 6e 2c 20 74 68 65   evaluation, the
ce40: 20 50 34 20 6f 70 65 72 61 6e 64 20 69 73 0a 2a   P4 operand is.*
ce50: 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  * automatically 
ce60: 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61  converted into a
ce70: 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  n sqlite3_contex
ce80: 74 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 65  t object and the
ce90: 20 6f 70 65 72 61 74 69 6f 6e 0a 2a 2a 20 63 68   operation.** ch
cea0: 61 6e 67 65 64 20 74 6f 20 74 68 69 73 20 4f 50  anged to this OP
ceb0: 5f 46 75 6e 63 74 69 6f 6e 20 6f 70 63 6f 64 65  _Function opcode
cec0: 2e 20 20 49 6e 20 74 68 69 73 20 77 61 79 2c 20  .  In this way, 
ced0: 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  the initializati
cee0: 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 73 71 6c  on of.** the sql
cef0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a  ite3_context obj
cf00: 65 63 74 20 6f 63 63 75 72 73 20 6f 6e 6c 79 20  ect occurs only 
cf10: 6f 6e 63 65 2c 20 72 61 74 68 65 72 20 74 68 61  once, rather tha
cf20: 6e 20 6f 6e 63 65 20 66 6f 72 20 65 61 63 68 0a  n once for each.
cf30: 2a 2a 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66  ** evaluation of
cf40: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a   the function..*
cf50: 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
cf60: 75 6e 63 74 69 6f 6e 30 2c 20 41 67 67 53 74 65  unction0, AggSte
cf70: 70 2c 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63  p, AggFinal.*/.c
cf80: 61 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 30  ase OP_Function0
cf90: 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 73  : {.  int n;.  s
cfa0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
cfb0: 70 43 74 78 3b 0a 0a 20 20 61 73 73 65 72 74 28  pCtx;..  assert(
cfc0: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
cfd0: 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20 20 6e 20  _FUNCDEF );.  n 
cfe0: 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73  = pOp->p5;.  ass
cff0: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
d000: 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  & pOp->p3<=(p->n
d010: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
d020: 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  or) );.  assert(
d030: 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70   n==0 || (pOp->p
d040: 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e  2>0 && pOp->p2+n
d050: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
d060: 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 29 20 29 3b  ->nCursor)+1) );
d070: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
d080: 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f  p3<pOp->p2 || pO
d090: 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e  p->p3>=pOp->p2+n
d0a0: 20 29 3b 0a 20 20 70 43 74 78 20 3d 20 73 71 6c   );.  pCtx = sql
d0b0: 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e  ite3DbMallocRawN
d0c0: 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28 2a 70 43  N(db, sizeof(*pC
d0d0: 74 78 29 20 2b 20 28 6e 2d 31 29 2a 73 69 7a 65  tx) + (n-1)*size
d0e0: 6f 66 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  of(sqlite3_value
d0f0: 2a 29 29 3b 0a 20 20 69 66 28 20 70 43 74 78 3d  *));.  if( pCtx=
d100: 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
d110: 3b 0a 20 20 70 43 74 78 2d 3e 70 4f 75 74 20 3d  ;.  pCtx->pOut =
d120: 20 30 3b 0a 20 20 70 43 74 78 2d 3e 70 46 75 6e   0;.  pCtx->pFun
d130: 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e  c = pOp->p4.pFun
d140: 63 3b 0a 20 20 70 43 74 78 2d 3e 69 4f 70 20 3d  c;.  pCtx->iOp =
d150: 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
d160: 29 3b 0a 20 20 70 43 74 78 2d 3e 70 56 64 62 65  );.  pCtx->pVdbe
d170: 20 3d 20 70 3b 0a 20 20 70 43 74 78 2d 3e 61 72   = p;.  pCtx->ar
d180: 67 63 20 3d 20 6e 3b 0a 20 20 70 4f 70 2d 3e 70  gc = n;.  pOp->p
d190: 34 74 79 70 65 20 3d 20 50 34 5f 46 55 4e 43 43  4type = P4_FUNCC
d1a0: 54 58 3b 0a 20 20 70 4f 70 2d 3e 70 34 2e 70 43  TX;.  pOp->p4.pC
d1b0: 74 78 20 3d 20 70 43 74 78 3b 0a 20 20 70 4f 70  tx = pCtx;.  pOp
d1c0: 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 46 75  ->opcode = OP_Fu
d1d0: 6e 63 74 69 6f 6e 3b 0a 20 20 2f 2a 20 46 61 6c  nction;.  /* Fal
d1e0: 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
d1f0: 50 5f 46 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 0a  P_Function */.}.
d200: 63 61 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e  case OP_Function
d210: 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73  : {.  int i;.  s
d220: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
d230: 70 43 74 78 3b 0a 0a 20 20 61 73 73 65 72 74 28  pCtx;..  assert(
d240: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
d250: 5f 46 55 4e 43 43 54 58 20 29 3b 0a 20 20 70 43  _FUNCCTX );.  pC
d260: 74 78 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 43 74  tx = pOp->p4.pCt
d270: 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73  x;..  /* If this
d280: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e 73   function is ins
d290: 69 64 65 20 6f 66 20 61 20 74 72 69 67 67 65 72  ide of a trigger
d2a0: 2c 20 74 68 65 20 72 65 67 69 73 74 65 72 20 61  , the register a
d2b0: 72 72 61 79 20 69 6e 20 61 4d 65 6d 5b 5d 0a 20  rray in aMem[]. 
d2c0: 20 2a 2a 20 6d 69 67 68 74 20 63 68 61 6e 67 65   ** might change
d2d0: 20 66 72 6f 6d 20 6f 6e 65 20 65 76 61 6c 75 61   from one evalua
d2e0: 74 69 6f 6e 20 74 6f 20 74 68 65 20 6e 65 78 74  tion to the next
d2f0: 2e 20 20 54 68 65 20 6e 65 78 74 20 62 6c 6f 63  .  The next bloc
d300: 6b 20 6f 66 20 63 6f 64 65 0a 20 20 2a 2a 20 63  k of code.  ** c
d310: 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20  hecks to see if 
d320: 74 68 65 20 72 65 67 69 73 74 65 72 20 61 72 72  the register arr
d330: 61 79 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20  ay has changed, 
d340: 61 6e 64 20 69 66 20 73 6f 20 69 74 0a 20 20 2a  and if so it.  *
d350: 2a 20 72 65 69 6e 69 74 69 61 6c 69 7a 65 73 20  * reinitializes 
d360: 74 68 65 20 72 65 6c 61 76 61 6e 74 20 70 61 72  the relavant par
d370: 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ts of the sqlite
d380: 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74  3_context object
d390: 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d   */.  pOut = &aM
d3a0: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
d3b0: 66 28 20 70 43 74 78 2d 3e 70 4f 75 74 20 21 3d  f( pCtx->pOut !=
d3c0: 20 70 4f 75 74 20 29 7b 0a 20 20 20 20 70 43 74   pOut ){.    pCt
d3d0: 78 2d 3e 70 4f 75 74 20 3d 20 70 4f 75 74 3b 0a  x->pOut = pOut;.
d3e0: 20 20 20 20 66 6f 72 28 69 3d 70 43 74 78 2d 3e      for(i=pCtx->
d3f0: 61 72 67 63 2d 31 3b 20 69 3e 3d 30 3b 20 69 2d  argc-1; i>=0; i-
d400: 2d 29 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d  -) pCtx->argv[i]
d410: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
d420: 2b 69 5d 3b 0a 20 20 7d 0a 0a 20 20 6d 65 6d 41  +i];.  }..  memA
d430: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
d440: 70 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 23 69 66  pCtx->pOut);.#if
d450: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
d460: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 43  .  for(i=0; i<pC
d470: 74 78 2d 3e 61 72 67 63 3b 20 69 2b 2b 29 7b 0a  tx->argc; i++){.
d480: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
d490: 73 56 61 6c 69 64 28 70 43 74 78 2d 3e 61 72 67  sValid(pCtx->arg
d4a0: 76 5b 69 5d 29 20 29 3b 0a 20 20 20 20 52 45 47  v[i]) );.    REG
d4b0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
d4c0: 3e 70 32 2b 69 2c 20 70 43 74 78 2d 3e 61 72 67  >p2+i, pCtx->arg
d4d0: 76 5b 69 5d 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  v[i]);.  }.#endi
d4e0: 66 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  f.  MemSetTypeFl
d4f0: 61 67 28 70 43 74 78 2d 3e 70 4f 75 74 2c 20 4d  ag(pCtx->pOut, M
d500: 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 70 43 74 78  EM_Null);.  pCtx
d510: 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78 20 3d 20  ->fErrorOrAux = 
d520: 30 3b 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77  0;.  db->lastRow
d530: 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a  id = lastRowid;.
d540: 20 20 28 2a 70 43 74 78 2d 3e 70 46 75 6e 63 2d    (*pCtx->pFunc-
d550: 3e 78 53 46 75 6e 63 29 28 70 43 74 78 2c 20 70  >xSFunc)(pCtx, p
d560: 43 74 78 2d 3e 61 72 67 63 2c 20 70 43 74 78 2d  Ctx->argc, pCtx-
d570: 3e 61 72 67 76 29 3b 2f 2a 20 49 4d 50 3a 20 52  >argv);/* IMP: R
d580: 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a  -24505-23230 */.
d590: 20 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62    lastRowid = db
d5a0: 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 20 20 2f 2a  ->lastRowid;  /*
d5b0: 20 52 65 6d 65 6d 62 65 72 20 72 6f 77 69 64 20   Remember rowid 
d5c0: 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20  changes made by 
d5d0: 78 53 46 75 6e 63 20 2a 2f 0a 0a 20 20 2f 2a 20  xSFunc */..  /* 
d5e0: 49 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  If the function 
d5f0: 72 65 74 75 72 6e 65 64 20 61 6e 20 65 72 72 6f  returned an erro
d600: 72 2c 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65  r, throw an exce
d610: 70 74 69 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 70  ption */.  if( p
d620: 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78  Ctx->fErrorOrAux
d630: 20 29 7b 0a 20 20 20 20 69 66 28 20 70 43 74 78   ){.    if( pCtx
d640: 2d 3e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20  ->isError ){.   
d650: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
d660: 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71 6c  ror(p, "%s", sql
d670: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
d680: 70 43 74 78 2d 3e 70 4f 75 74 29 29 3b 0a 20 20  pCtx->pOut));.  
d690: 20 20 20 20 72 63 20 3d 20 70 43 74 78 2d 3e 69      rc = pCtx->i
d6a0: 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  sError;.    }.  
d6b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 44 65 6c    sqlite3VdbeDel
d6c0: 65 74 65 41 75 78 44 61 74 61 28 64 62 2c 20 26  eteAuxData(db, &
d6d0: 70 2d 3e 70 41 75 78 44 61 74 61 2c 20 70 43 74  p->pAuxData, pCt
d6e0: 78 2d 3e 69 4f 70 2c 20 70 4f 70 2d 3e 70 31 29  x->iOp, pOp->p1)
d6f0: 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67  ;.    if( rc ) g
d700: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
d710: 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f  _error;.  }..  /
d720: 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c  * Copy the resul
d730: 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  t of the functio
d740: 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  n into register 
d750: 50 33 20 2a 2f 0a 20 20 69 66 28 20 70 4f 75 74  P3 */.  if( pOut
d760: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
d770: 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a  tr|MEM_Blob) ){.
d780: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
d790: 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 43  hangeEncoding(pC
d7a0: 74 78 2d 3e 70 4f 75 74 2c 20 65 6e 63 6f 64 69  tx->pOut, encodi
d7b0: 6e 67 29 3b 0a 20 20 20 20 69 66 28 20 73 71 6c  ng);.    if( sql
d7c0: 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
d7d0: 67 28 70 43 74 78 2d 3e 70 4f 75 74 29 20 29 20  g(pCtx->pOut) ) 
d7e0: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
d7f0: 7d 0a 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  }..  REGISTER_TR
d800: 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 43 74  ACE(pOp->p3, pCt
d810: 78 2d 3e 70 4f 75 74 29 3b 0a 20 20 55 50 44 41  x->pOut);.  UPDA
d820: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
d830: 70 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 20 20 62  pCtx->pOut);.  b
d840: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
d850: 64 65 3a 20 42 69 74 41 6e 64 20 50 31 20 50 32  de: BitAnd P1 P2
d860: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
d870: 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31  sis:  r[P3]=r[P1
d880: 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61  ]&r[P2].**.** Ta
d890: 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20  ke the bit-wise 
d8a0: 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65  AND of the value
d8b0: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
d8c0: 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73   and P2 and.** s
d8d0: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
d8e0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
d8f0: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
d900: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
d910: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
d920: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  */./* Opcode: Bi
d930: 74 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a  tOr P1 P2 P3 * *
d940: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
d950: 5b 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b 50 32 5d  [P3]=r[P1]|r[P2]
d960: 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
d970: 62 69 74 2d 77 69 73 65 20 4f 52 20 6f 66 20 74  bit-wise OR of t
d980: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
d990: 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20  ister P1 and P2 
d9a0: 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  and.** store the
d9b0: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
d9c0: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
d9d0: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
d9e0: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
d9f0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
da00: 63 6f 64 65 3a 20 53 68 69 66 74 4c 65 66 74 20  code: ShiftLeft 
da10: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
da20: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
da30: 3d 72 5b 50 32 5d 3c 3c 72 5b 50 31 5d 0a 2a 2a  =r[P2]<<r[P1].**
da40: 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e  .** Shift the in
da50: 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72  teger value in r
da60: 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74 68  egister P2 to th
da70: 65 20 6c 65 66 74 20 62 79 20 74 68 65 0a 2a 2a  e left by the.**
da80: 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20   number of bits 
da90: 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65  specified by the
daa0: 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69   integer in regi
dab0: 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72  ster P1..** Stor
dac0: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
dad0: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
dae0: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
daf0: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
db00: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
db10: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74  /* Opcode: Shift
db20: 52 69 67 68 74 20 50 31 20 50 32 20 50 33 20 2a  Right P1 P2 P3 *
db30: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
db40: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3e 3e 72 5b   r[P3]=r[P2]>>r[
db50: 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20  P1].**.** Shift 
db60: 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  the integer valu
db70: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
db80: 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 62 79   to the right by
db90: 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f   the.** number o
dba0: 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65 64  f bits specified
dbb0: 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72 20   by the integer 
dbc0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
dbd0: 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65 73  ** Store the res
dbe0: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
dbf0: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
dc00: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
dc10: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
dc20: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42  LL..*/.case OP_B
dc30: 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20  itAnd:          
dc40: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
dc50: 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31  s TK_BITAND, in1
dc60: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
dc70: 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20  ase OP_BitOr:   
dc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
dc90: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54  * same as TK_BIT
dca0: 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  OR, in1, in2, ou
dcb0: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68  t3 */.case OP_Sh
dcc0: 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20 20 20  iftLeft:        
dcd0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
dce0: 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c   TK_LSHIFT, in1,
dcf0: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
dd00: 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74  se OP_ShiftRight
dd10: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
dd20: 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53 48 49   same as TK_RSHI
dd30: 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  FT, in1, in2, ou
dd40: 74 33 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 0a  t3 */.  i64 iA;.
dd50: 20 20 75 36 34 20 75 41 3b 0a 20 20 69 36 34 20    u64 uA;.  i64 
dd60: 69 42 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a 20 20  iB;.  u8 op;..  
dd70: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
dd80: 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20  ->p1];.  pIn2 = 
dd90: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
dda0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
ddb0: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28  Op->p3];.  if( (
ddc0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
ddd0: 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d  n2->flags) & MEM
dde0: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c  _Null ){.    sql
ddf0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
de00: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72  ll(pOut);.    br
de10: 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 41 20 3d 20  eak;.  }.  iA = 
de20: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
de30: 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 69 42 20  lue(pIn2);.  iB 
de40: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
de50: 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 6f  Value(pIn1);.  o
de60: 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b  p = pOp->opcode;
de70: 0a 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69  .  if( op==OP_Bi
de80: 74 41 6e 64 20 29 7b 0a 20 20 20 20 69 41 20 26  tAnd ){.    iA &
de90: 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66  = iB;.  }else if
dea0: 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72 20 29  ( op==OP_BitOr )
deb0: 7b 0a 20 20 20 20 69 41 20 7c 3d 20 69 42 3b 0a  {.    iA |= iB;.
dec0: 20 20 7d 65 6c 73 65 20 69 66 28 20 69 42 21 3d    }else if( iB!=
ded0: 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
dee0: 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67   op==OP_ShiftRig
def0: 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69  ht || op==OP_Shi
df00: 66 74 4c 65 66 74 20 29 3b 0a 0a 20 20 20 20 2f  ftLeft );..    /
df10: 2a 20 49 66 20 73 68 69 66 74 69 6e 67 20 62 79  * If shifting by
df20: 20 61 20 6e 65 67 61 74 69 76 65 20 61 6d 6f 75   a negative amou
df30: 6e 74 2c 20 73 68 69 66 74 20 69 6e 20 74 68 65  nt, shift in the
df40: 20 6f 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e   other direction
df50: 20 2a 2f 0a 20 20 20 20 69 66 28 20 69 42 3c 30   */.    if( iB<0
df60: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
df70: 28 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3d  ( OP_ShiftRight=
df80: 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 2b 31 20  =OP_ShiftLeft+1 
df90: 29 3b 0a 20 20 20 20 20 20 6f 70 20 3d 20 32 2a  );.      op = 2*
dfa0: 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 2b 20 31  OP_ShiftLeft + 1
dfb0: 20 2d 20 6f 70 3b 0a 20 20 20 20 20 20 69 42 20   - op;.      iB 
dfc0: 3d 20 69 42 3e 28 2d 36 34 29 20 3f 20 2d 69 42  = iB>(-64) ? -iB
dfd0: 20 3a 20 36 34 3b 0a 20 20 20 20 7d 0a 0a 20 20   : 64;.    }..  
dfe0: 20 20 69 66 28 20 69 42 3e 3d 36 34 20 29 7b 0a    if( iB>=64 ){.
dff0: 20 20 20 20 20 20 69 41 20 3d 20 28 69 41 3e 3d        iA = (iA>=
e000: 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66  0 || op==OP_Shif
e010: 74 4c 65 66 74 29 20 3f 20 30 20 3a 20 2d 31 3b  tLeft) ? 0 : -1;
e020: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
e030: 20 20 6d 65 6d 63 70 79 28 26 75 41 2c 20 26 69    memcpy(&uA, &i
e040: 41 2c 20 73 69 7a 65 6f 66 28 75 41 29 29 3b 0a  A, sizeof(uA));.
e050: 20 20 20 20 20 20 69 66 28 20 6f 70 3d 3d 4f 50        if( op==OP
e060: 5f 53 68 69 66 74 4c 65 66 74 20 29 7b 0a 20 20  _ShiftLeft ){.  
e070: 20 20 20 20 20 20 75 41 20 3c 3c 3d 20 69 42 3b        uA <<= iB;
e080: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
e090: 20 20 20 20 20 20 75 41 20 3e 3e 3d 20 69 42 3b        uA >>= iB;
e0a0: 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 69 67 6e  .        /* Sign
e0b0: 2d 65 78 74 65 6e 64 20 6f 6e 20 61 20 72 69 67  -extend on a rig
e0c0: 68 74 20 73 68 69 66 74 20 6f 66 20 61 20 6e 65  ht shift of a ne
e0d0: 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20 2a 2f  gative number */
e0e0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3c  .        if( iA<
e0f0: 30 20 29 20 75 41 20 7c 3d 20 28 28 28 28 75 36  0 ) uA |= ((((u6
e100: 34 29 30 78 66 66 66 66 66 66 66 66 29 3c 3c 33  4)0xffffffff)<<3
e110: 32 29 7c 30 78 66 66 66 66 66 66 66 66 29 20 3c  2)|0xffffffff) <
e120: 3c 20 28 36 34 2d 69 42 29 3b 0a 20 20 20 20 20  < (64-iB);.     
e130: 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28   }.      memcpy(
e140: 26 69 41 2c 20 26 75 41 2c 20 73 69 7a 65 6f 66  &iA, &uA, sizeof
e150: 28 69 41 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  (iA));.    }.  }
e160: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69  .  pOut->u.i = i
e170: 41 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  A;.  MemSetTypeF
e180: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
e190: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
e1a0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d  /* Opcode: AddIm
e1b0: 6d 20 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  m  P1 P2 * * *.*
e1c0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
e1d0: 31 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a 2a 20 0a  1]=r[P1]+P2.** .
e1e0: 2a 2a 20 41 64 64 20 74 68 65 20 63 6f 6e 73 74  ** Add the const
e1f0: 61 6e 74 20 50 32 20 74 6f 20 74 68 65 20 76 61  ant P2 to the va
e200: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
e210: 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c  P1..** The resul
e220: 74 20 69 73 20 61 6c 77 61 79 73 20 61 6e 20 69  t is always an i
e230: 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f  nteger..**.** To
e240: 20 66 6f 72 63 65 20 61 6e 79 20 72 65 67 69 73   force any regis
e250: 74 65 72 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  ter to be an int
e260: 65 67 65 72 2c 20 6a 75 73 74 20 61 64 64 20 30  eger, just add 0
e270: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64  ..*/.case OP_Add
e280: 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Imm: {          
e290: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49    /* in1 */.  pI
e2a0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
e2b0: 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p1];.  memAboutT
e2c0: 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29  oChange(p, pIn1)
e2d0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
e2e0: 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
e2f0: 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20  1);.  pIn1->u.i 
e300: 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72  += pOp->p2;.  br
e310: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
e320: 65 3a 20 4d 75 73 74 42 65 49 6e 74 20 50 31 20  e: MustBeInt P1 
e330: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20  P2 * * *.** .** 
e340: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
e350: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
e360: 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e  o be an integer.
e370: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
e380: 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f 74 20 61  * in P1 is not a
e390: 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20 63 61  n integer and ca
e3a0: 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65  nnot be converte
e3b0: 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65  d into an intege
e3c0: 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20 64 61 74  r.** without dat
e3d0: 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d  a loss, then jum
e3e0: 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
e3f0: 20 50 32 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30   P2, or if P2==0
e400: 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20 53 51 4c  .** raise an SQL
e410: 49 54 45 5f 4d 49 53 4d 41 54 43 48 20 65 78 63  ITE_MISMATCH exc
e420: 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  eption..*/.case 
e430: 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20  OP_MustBeInt: { 
e440: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
e450: 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
e460: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
e470: 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  1];.  if( (pIn1-
e480: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
e490: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70 70 6c  )==0 ){.    appl
e4a0: 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20  yAffinity(pIn1, 
e4b0: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
e4c0: 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  IC, encoding);. 
e4d0: 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
e4e0: 65 6e 28 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26  en((pIn1->flags&
e4f0: 4d 45 4d 5f 49 6e 74 29 3d 3d 30 2c 20 32 29 3b  MEM_Int)==0, 2);
e500: 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  .    if( (pIn1->
e510: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
e520: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ==0 ){.      if(
e530: 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20   pOp->p2==0 ){. 
e540: 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
e550: 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20  TE_MISMATCH;.   
e560: 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
e570: 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
e580: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
e590: 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
e5a0: 70 32 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  p2;.      }.    
e5b0: 7d 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79  }.  }.  MemSetTy
e5c0: 70 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d  peFlag(pIn1, MEM
e5d0: 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  _Int);.  break;.
e5e0: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
e5f0: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
e600: 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  POINT./* Opcode:
e610: 20 52 65 61 6c 41 66 66 69 6e 69 74 79 20 50 31   RealAffinity P1
e620: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49   * * * *.**.** I
e630: 66 20 72 65 67 69 73 74 65 72 20 50 31 20 68 6f  f register P1 ho
e640: 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 63  lds an integer c
e650: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 72  onvert it to a r
e660: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a  eal value..**.**
e670: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
e680: 75 73 65 64 20 77 68 65 6e 20 65 78 74 72 61 63  used when extrac
e690: 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ting information
e6a0: 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74   from a column t
e6b0: 68 61 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20  hat.** has REAL 
e6c0: 61 66 66 69 6e 69 74 79 2e 20 20 53 75 63 68 20  affinity.  Such 
e6d0: 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61  column values ma
e6e0: 79 20 73 74 69 6c 6c 20 62 65 20 73 74 6f 72 65  y still be store
e6f0: 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73  d as.** integers
e700: 2c 20 66 6f 72 20 73 70 61 63 65 20 65 66 66 69  , for space effi
e710: 63 69 65 6e 63 79 2c 20 62 75 74 20 61 66 74 65  ciency, but afte
e720: 72 20 65 78 74 72 61 63 74 69 6f 6e 20 77 65 20  r extraction we 
e730: 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20  want them.** to 
e740: 68 61 76 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c  have only a real
e750: 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20   value..*/.case 
e760: 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69 74 79 3a  OP_RealAffinity:
e770: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
e780: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
e790: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
e7a0: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p1];.  if( pIn
e7b0: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
e7c0: 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  nt ){.    sqlite
e7d0: 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28  3VdbeMemRealify(
e7e0: 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65  pIn1);.  }.  bre
e7f0: 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
e800: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
e810: 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65  T_CAST./* Opcode
e820: 3a 20 43 61 73 74 20 50 31 20 50 32 20 2a 20 2a  : Cast P1 P2 * *
e830: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
e840: 61 66 66 69 6e 69 74 79 28 72 5b 50 31 5d 29 0a  affinity(r[P1]).
e850: 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20  **.** Force the 
e860: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
e870: 72 20 50 31 20 74 6f 20 62 65 20 74 68 65 20 74  r P1 to be the t
e880: 79 70 65 20 64 65 66 69 6e 65 64 20 62 79 20 50  ype defined by P
e890: 32 2e 0a 2a 2a 20 0a 2a 2a 20 3c 75 6c 3e 0a 2a  2..** .** <ul>.*
e8a0: 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 39 37 22  * <li value="97"
e8b0: 3e 20 54 45 58 54 0a 2a 2a 20 3c 6c 69 20 76 61  > TEXT.** <li va
e8c0: 6c 75 65 3d 22 39 38 22 3e 20 42 4c 4f 42 0a 2a  lue="98"> BLOB.*
e8d0: 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 39 39 22  * <li value="99"
e8e0: 3e 20 4e 55 4d 45 52 49 43 0a 2a 2a 20 3c 6c 69  > NUMERIC.** <li
e8f0: 20 76 61 6c 75 65 3d 22 31 30 30 22 3e 20 49 4e   value="100"> IN
e900: 54 45 47 45 52 0a 2a 2a 20 3c 6c 69 20 76 61 6c  TEGER.** <li val
e910: 75 65 3d 22 31 30 31 22 3e 20 52 45 41 4c 0a 2a  ue="101"> REAL.*
e920: 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 41 20  * </ul>.**.** A 
e930: 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f  NULL value is no
e940: 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69  t changed by thi
e950: 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72  s routine.  It r
e960: 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  emains NULL..*/.
e970: 63 61 73 65 20 4f 50 5f 43 61 73 74 3a 20 7b 20  case OP_Cast: { 
e980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e990: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73   /* in1 */.  ass
e9a0: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 53 51  ert( pOp->p2>=SQ
e9b0: 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 26 26  LITE_AFF_BLOB &&
e9c0: 20 70 4f 70 2d 3e 70 32 3c 3d 53 51 4c 49 54 45   pOp->p2<=SQLITE
e9d0: 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20 74  _AFF_REAL );.  t
e9e0: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32  estcase( pOp->p2
e9f0: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  ==SQLITE_AFF_TEX
ea00: 54 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  T );.  testcase(
ea10: 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
ea20: 5f 41 46 46 5f 42 4c 4f 42 20 29 3b 0a 20 20 74  _AFF_BLOB );.  t
ea30: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32  estcase( pOp->p2
ea40: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  ==SQLITE_AFF_NUM
ea50: 45 52 49 43 20 29 3b 0a 20 20 74 65 73 74 63 61  ERIC );.  testca
ea60: 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c  se( pOp->p2==SQL
ea70: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20  ITE_AFF_INTEGER 
ea80: 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
ea90: 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41  Op->p2==SQLITE_A
eaa0: 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20 70 49 6e  FF_REAL );.  pIn
eab0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
eac0: 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  1];.  memAboutTo
ead0: 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b  Change(p, pIn1);
eae0: 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c  .  rc = ExpandBl
eaf0: 6f 62 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69  ob(pIn1);.  sqli
eb00: 74 65 33 56 64 62 65 4d 65 6d 43 61 73 74 28 70  te3VdbeMemCast(p
eb10: 49 6e 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 65 6e  In1, pOp->p2, en
eb20: 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54  coding);.  UPDAT
eb30: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
eb40: 49 6e 31 29 3b 0a 20 20 69 66 28 20 72 63 20 29  In1);.  if( rc )
eb50: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
eb60: 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
eb70: 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
eb80: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20  QLITE_OMIT_CAST 
eb90: 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  */../* Opcode: L
eba0: 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
ebb0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
ebc0: 20 72 5b 50 31 5d 3c 72 5b 50 33 5d 20 67 6f 74   r[P1]<r[P3] got
ebd0: 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61  o P2.**.** Compa
ebe0: 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  re the values in
ebf0: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
ec00: 20 50 33 2e 20 20 49 66 20 72 65 67 28 50 33 29   P3.  If reg(P3)
ec10: 3c 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a  <reg(P1) then.**
ec20: 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73   jump to address
ec30: 20 50 32 2e 20 20 0a 2a 2a 0a 2a 2a 20 49 66 20   P2.  .**.** If 
ec40: 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  the SQLITE_JUMPI
ec50: 46 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50 35 20  FNULL bit of P5 
ec60: 69 73 20 73 65 74 20 61 6e 64 20 65 69 74 68 65  is set and eithe
ec70: 72 20 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a 20  r reg(P1) or.** 
ec80: 72 65 67 28 50 33 29 20 69 73 20 4e 55 4c 4c 20  reg(P3) is NULL 
ec90: 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
eca0: 6d 70 2e 20 20 49 66 20 74 68 65 20 53 51 4c 49  mp.  If the SQLI
ecb0: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a  TE_JUMPIFNULL .*
ecc0: 2a 20 62 69 74 20 69 73 20 63 6c 65 61 72 20 74  * bit is clear t
ecd0: 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
ece0: 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   if either opera
ecf0: 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  nd is NULL..**.*
ed00: 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46  * The SQLITE_AFF
ed10: 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66  _MASK portion of
ed20: 20 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20 61   P5 must be an a
ed30: 66 66 69 6e 69 74 79 20 63 68 61 72 61 63 74 65  ffinity characte
ed40: 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  r -.** SQLITE_AF
ed50: 46 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f 41  F_TEXT, SQLITE_A
ed60: 46 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64 20  FF_INTEGER, and 
ed70: 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74 74  so forth. An att
ed80: 65 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a  empt is made .**
ed90: 20 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68 20   to coerce both 
eda0: 69 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e 67  inputs according
edb0: 20 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69 74   to this affinit
edc0: 79 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20  y before the.** 
edd0: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d 61  comparison is ma
ede0: 64 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49 54  de. If the SQLIT
edf0: 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30 78  E_AFF_MASK is 0x
ee00: 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69 63  00, then numeric
ee10: 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73 20  .** affinity is 
ee20: 75 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74 20  used. Note that 
ee30: 74 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f 6e  the affinity con
ee40: 76 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74 6f  versions are sto
ee50: 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f  red.** back into
ee60: 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73   the input regis
ee70: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 20  ters P1 and P3. 
ee80: 20 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20   So this opcode 
ee90: 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65 72  can cause.** per
eea0: 73 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73 20  sistent changes 
eeb0: 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 31 20  to registers P1 
eec0: 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e  and P3..**.** On
eed0: 63 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f  ce any conversio
eee0: 6e 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70 6c  ns have taken pl
eef0: 61 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65 72  ace, and neither
ef00: 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20   value is NULL, 
ef10: 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 61  .** the values a
ef20: 72 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66 20  re compared. If 
ef30: 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 20  both values are 
ef40: 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d  blobs then memcm
ef50: 70 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20 74  p() is.** used t
ef60: 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o determine the 
ef70: 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63  results of the c
ef80: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 62  omparison.  If b
ef90: 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72  oth values.** ar
efa0: 65 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68 65  e text, then the
efb0: 20 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f 6c   appropriate col
efc0: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
efd0: 73 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20  specified in.** 
efe0: 50 34 20 69 73 20 20 75 73 65 64 20 74 6f 20 64  P4 is  used to d
eff0: 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  o the comparison
f000: 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  .  If P4 is not 
f010: 73 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a 2a  specified then.*
f020: 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75 73  * memcmp() is us
f030: 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65  ed to compare te
f040: 78 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20 62  xt string.  If b
f050: 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a 2a  oth values are.*
f060: 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e 20  * numeric, then 
f070: 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61 72  a numeric compar
f080: 69 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49 66  ison is used. If
f090: 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73 0a   the two values.
f0a0: 2a 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65 72  ** are of differ
f0b0: 65 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e 20  ent types, then 
f0c0: 6e 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e 73  numbers are cons
f0d0: 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e  idered less than
f0e0: 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64 20  .** strings and 
f0f0: 73 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e 73  strings are cons
f100: 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e  idered less than
f110: 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66   blobs..**.** If
f120: 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f 52   the SQLITE_STOR
f130: 45 50 32 20 62 69 74 20 6f 66 20 50 35 20 69 73  EP2 bit of P5 is
f140: 20 73 65 74 2c 20 74 68 65 6e 20 64 6f 20 6e 6f   set, then do no
f150: 74 20 6a 75 6d 70 2e 20 20 49 6e 73 74 65 61 64  t jump.  Instead
f160: 2c 0a 2a 2a 20 73 74 6f 72 65 20 61 20 62 6f 6f  ,.** store a boo
f170: 6c 65 61 6e 20 72 65 73 75 6c 74 20 28 65 69 74  lean result (eit
f180: 68 65 72 20 30 2c 20 6f 72 20 31 2c 20 6f 72 20  her 0, or 1, or 
f190: 4e 55 4c 4c 29 20 69 6e 20 72 65 67 69 73 74 65  NULL) in registe
f1a0: 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  r P2..**.** If t
f1b0: 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  he SQLITE_NULLEQ
f1c0: 20 62 69 74 20 69 73 20 73 65 74 20 69 6e 20 50   bit is set in P
f1d0: 35 2c 20 74 68 65 6e 20 4e 55 4c 4c 20 76 61 6c  5, then NULL val
f1e0: 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ues are consider
f1f0: 65 64 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 20 6f  ed.** equal to o
f200: 6e 65 20 61 6e 6f 74 68 65 72 2c 20 70 72 6f 76  ne another, prov
f210: 69 64 65 64 20 74 68 61 74 20 74 68 65 79 20 64  ided that they d
f220: 6f 20 6e 6f 74 20 68 61 76 65 20 74 68 65 69 72  o not have their
f230: 20 4d 45 4d 5f 43 6c 65 61 72 65 64 0a 2a 2a 20   MEM_Cleared.** 
f240: 62 69 74 20 73 65 74 2e 0a 2a 2f 0a 2f 2a 20 4f  bit set..*/./* O
f250: 70 63 6f 64 65 3a 20 4e 65 20 50 31 20 50 32 20  pcode: Ne P1 P2 
f260: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
f270: 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d  psis: if r[P1]!=
f280: 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a  r[P3] goto P2.**
f290: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
f2a0: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
f2b0: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
f2c0: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
f2d0: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f  aken if.** the o
f2e0: 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73  perands in regis
f2f0: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61  ters P1 and P3 a
f300: 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53  re not equal.  S
f310: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
f320: 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e   for.** addition
f330: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
f340: 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f  **.** If SQLITE_
f350: 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e  NULLEQ is set in
f360: 20 50 35 20 74 68 65 6e 20 74 68 65 20 72 65 73   P5 then the res
f370: 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  ult of compariso
f380: 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69 74 68  n is always eith
f390: 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61  er.** true or fa
f3a0: 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72  lse and is never
f3b0: 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20   NULL.  If both 
f3c0: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c  operands are NUL
f3d0: 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  L then the resul
f3e0: 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73  t.** of comparis
f3f0: 6f 6e 20 69 73 20 66 61 6c 73 65 2e 20 20 49 66  on is false.  If
f400: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
f410: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  is NULL then the
f420: 20 72 65 73 75 6c 74 20 69 73 20 74 72 75 65 2e   result is true.
f430: 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f  .** If neither o
f440: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74  perand is NULL t
f450: 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65  he result is the
f460: 20 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75 6c   same as it woul
f470: 64 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20 53  d be if.** the S
f480: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61  QLITE_NULLEQ fla
f490: 67 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20 66  g were omitted f
f4a0: 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70  rom P5..*/./* Op
f4b0: 63 6f 64 65 3a 20 45 71 20 50 31 20 50 32 20 50  code: Eq P1 P2 P
f4c0: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
f4d0: 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3d 3d 72  sis: if r[P1]==r
f4e0: 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  [P3] goto P2.**.
f4f0: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
f500: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
f510: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
f520: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
f530: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70  ken if.** the op
f540: 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74  erands in regist
f550: 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72  ers P1 and P3 ar
f560: 65 20 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20  e equal..** See 
f570: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
f580: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
f590: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  ormation..**.** 
f5a0: 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  If SQLITE_NULLEQ
f5b0: 20 69 73 20 73 65 74 20 69 6e 20 50 35 20 74 68   is set in P5 th
f5c0: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  en the result of
f5d0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61   comparison is a
f5e0: 6c 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20  lways either.** 
f5f0: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e  true or false an
f600: 64 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e  d is never NULL.
f610: 20 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e    If both operan
f620: 64 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e  ds are NULL then
f630: 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f   the result.** o
f640: 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  f comparison is 
f650: 74 72 75 65 2e 20 20 49 66 20 65 69 74 68 65 72  true.  If either
f660: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
f670: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
f680: 20 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66   is false..** If
f690: 20 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64   neither operand
f6a0: 20 69 73 20 4e 55 4c 4c 20 74 68 65 20 72 65 73   is NULL the res
f6b0: 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65 20  ult is the same 
f6c0: 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69  as it would be i
f6d0: 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f  f.** the SQLITE_
f6e0: 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65  NULLEQ flag were
f6f0: 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35   omitted from P5
f700: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
f710: 4c 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Le P1 P2 P3 P4 P
f720: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  5.** Synopsis: i
f730: 66 20 72 5b 50 31 5d 3c 3d 72 5b 50 33 5d 20 67  f r[P1]<=r[P3] g
f740: 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69  oto P2.**.** Thi
f750: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
f760: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
f770: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
f780: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
f790: 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  .** the content 
f7a0: 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69  of register P3 i
f7b0: 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  s less than or e
f7c0: 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74  qual to the cont
f7d0: 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74  ent of.** regist
f7e0: 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20  er P1.  See the 
f7f0: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
f800: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
f810: 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
f820: 64 65 3a 20 47 74 20 50 31 20 50 32 20 50 33 20  de: Gt P1 P2 P3 
f830: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
f840: 73 3a 20 69 66 20 72 5b 50 31 5d 3e 72 5b 50 33  s: if r[P1]>r[P3
f850: 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  ] goto P2.**.** 
f860: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
f870: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
f880: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
f890: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
f8a0: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   if.** the conte
f8b0: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
f8c0: 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  3 is greater tha
f8d0: 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  n the content of
f8e0: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e  .** register P1.
f8f0: 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63    See the Lt opc
f900: 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
f910: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
f920: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65  */./* Opcode: Ge
f930: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
f940: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
f950: 72 5b 50 31 5d 3e 3d 72 5b 50 33 5d 20 67 6f 74  r[P1]>=r[P3] got
f960: 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  o P2.**.** This 
f970: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
f980: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
f990: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
f9a0: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
f9b0: 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * the content of
f9c0: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
f9d0: 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
f9e0: 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e  equal to the con
f9f0: 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73  tent of.** regis
fa00: 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65  ter P1.  See the
fa10: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61   Lt opcode for a
fa20: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
fa30: 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ation..*/.case O
fa40: 50 5f 45 71 3a 20 20 20 20 20 20 20 20 20 20 20  P_Eq:           
fa50: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
fa60: 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_EQ, jump, in1,
fa70: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
fa80: 4e 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Ne:             
fa90: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
faa0: 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  NE, jump, in1, i
fab0: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74  n3 */.case OP_Lt
fac0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
fad0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54  /* same as TK_LT
fae0: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
faf0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20   */.case OP_Le: 
fb00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
fb10: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20   same as TK_LE, 
fb20: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
fb30: 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20  /.case OP_Gt:   
fb40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
fb50: 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75  ame as TK_GT, ju
fb60: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
fb70: 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20  case OP_Ge: {   
fb80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
fb90: 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70  e as TK_GE, jump
fba0: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20  , in1, in3 */.  
fbb0: 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20  int res;        
fbc0: 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66      /* Result of
fbd0: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   the comparison 
fbe0: 6f 66 20 70 49 6e 31 20 61 67 61 69 6e 73 74 20  of pIn1 against 
fbf0: 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20 61  pIn3 */.  char a
fc00: 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a  ffinity;      /*
fc10: 20 41 66 66 69 6e 69 74 79 20 74 6f 20 75 73 65   Affinity to use
fc20: 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20   for comparison 
fc30: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 31 3b  */.  u16 flags1;
fc40: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79           /* Copy
fc50: 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75   of initial valu
fc60: 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67 73  e of pIn1->flags
fc70: 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 33   */.  u16 flags3
fc80: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70  ;         /* Cop
fc90: 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c  y of initial val
fca0: 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61 67  ue of pIn3->flag
fcb0: 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26  s */..  pIn1 = &
fcc0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
fcd0: 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
fce0: 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 31  p->p3];.  flags1
fcf0: 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a   = pIn1->flags;.
fd00: 20 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d    flags3 = pIn3-
fd10: 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66  >flags;.  if( (f
fd20: 6c 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29 26  lags1 | flags3)&
fd30: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
fd40: 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f  /* One or both o
fd50: 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c  perands are NULL
fd60: 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   */.    if( pOp-
fd70: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c  >p5 & SQLITE_NUL
fd80: 4c 45 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  LEQ ){.      /* 
fd90: 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  If SQLITE_NULLEQ
fda0: 20 69 73 20 73 65 74 20 28 77 68 69 63 68 20 77   is set (which w
fdb0: 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20  ill only happen 
fdc0: 69 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20  if the operator 
fdd0: 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45  is.      ** OP_E
fde0: 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e  q or OP_Ne) then
fdf0: 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f   take the jump o
fe00: 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20  r not depending 
fe10: 6f 6e 20 77 68 65 74 68 65 72 0a 20 20 20 20 20  on whether.     
fe20: 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20   ** or not both 
fe30: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 75 6c  operands are nul
fe40: 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  l..      */.    
fe50: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
fe60: 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20  pcode==OP_Eq || 
fe70: 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
fe80: 4e 65 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  Ne );.      asse
fe90: 72 74 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45  rt( (flags1 & ME
fea0: 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30 20 29 3b  M_Cleared)==0 );
feb0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
fec0: 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
fed0: 5f 4a 55 4d 50 49 46 4e 55 4c 4c 29 3d 3d 30 20  _JUMPIFNULL)==0 
fee0: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c  );.      if( (fl
fef0: 61 67 73 31 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  ags1&MEM_Null)!=
ff00: 30 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c 61  0.       && (fla
ff10: 67 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  gs3&MEM_Null)!=0
ff20: 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c 61 67  .       && (flag
ff30: 73 33 26 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d  s3&MEM_Cleared)=
ff40: 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20  =0.      ){.    
ff50: 20 20 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a      res = 0;  /*
ff60: 20 52 65 73 75 6c 74 73 20 61 72 65 20 65 71 75   Results are equ
ff70: 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73  al */.      }els
ff80: 65 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d  e{.        res =
ff90: 20 31 3b 20 20 2f 2a 20 52 65 73 75 6c 74 73 20   1;  /* Results 
ffa0: 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a 2f  are not equal */
ffb0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
ffc0: 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 53 51 4c  se{.      /* SQL
ffd0: 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 63 6c  ITE_NULLEQ is cl
ffe0: 65 61 72 20 61 6e 64 20 61 74 20 6c 65 61 73 74  ear and at least
fff0: 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69 73 20   one operand is 
10000 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a 20 74  NULL,.      ** t
10010 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
10020 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a 20  s always NULL.. 
10030 20 20 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70       ** The jump
10040 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65   is taken if the
10050 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
10060 4c 4c 20 62 69 74 20 69 73 20 73 65 74 2e 0a 20  LL bit is set.. 
10070 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66       */.      if
10080 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
10090 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20  TE_STOREP2 ){.  
100a0 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d        pOut = &aM
100b0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20  em[pOp->p2];.   
100c0 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
100d0 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
100e0 20 20 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79          MemSetTy
100f0 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
10100 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20  _Null);.        
10110 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
10120 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20  Op->p2, pOut);. 
10130 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
10140 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
10150 6b 65 6e 28 32 2c 33 29 3b 0a 20 20 20 20 20 20  ken(2,3);.      
10160 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
10170 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
10180 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67  L ){.          g
10190 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
101a0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
101b0 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  }.      break;. 
101c0 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
101d0 20 20 2f 2a 20 4e 65 69 74 68 65 72 20 6f 70 65    /* Neither ope
101e0 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 20 20 44  rand is NULL.  D
101f0 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  o a comparison. 
10200 2a 2f 0a 20 20 20 20 61 66 66 69 6e 69 74 79 20  */.    affinity 
10210 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  = pOp->p5 & SQLI
10220 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a 20 20 20  TE_AFF_MASK;.   
10230 20 69 66 28 20 61 66 66 69 6e 69 74 79 3e 3d 53   if( affinity>=S
10240 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
10250 43 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28  C ){.      if( (
10260 66 6c 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29  flags1 | flags3)
10270 26 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20  &MEM_Str ){.    
10280 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 20      if( (flags1 
10290 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
102a0 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d  eal|MEM_Str))==M
102b0 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20  EM_Str ){.      
102c0 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
102d0 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 30 29  Affinity(pIn1,0)
102e0 3b 0a 20 20 20 20 20 20 20 20 20 20 66 6c 61 67  ;.          flag
102f0 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73  s3 = pIn3->flags
10300 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
10310 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 33 20      if( (flags3 
10320 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
10330 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d  eal|MEM_Str))==M
10340 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20  EM_Str ){.      
10350 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
10360 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 30 29  Affinity(pIn3,0)
10370 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
10380 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 20 69 66    }.    }else if
10390 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49  ( affinity==SQLI
103a0 54 45 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a 20  TE_AFF_TEXT ){. 
103b0 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 31       if( (flags1
103c0 20 26 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26   & MEM_Str)==0 &
103d0 26 20 28 66 6c 61 67 73 31 20 26 20 28 4d 45 4d  & (flags1 & (MEM
103e0 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21  _Int|MEM_Real))!
103f0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 74 65  =0 ){.        te
10400 73 74 63 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c  stcase( pIn1->fl
10410 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
10420 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73  .        testcas
10430 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  e( pIn1->flags &
10440 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20   MEM_Real );.   
10450 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10460 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70 49 6e  MemStringify(pIn
10470 31 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b  1, encoding, 1);
10480 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73  .        testcas
10490 65 28 20 28 66 6c 61 67 73 31 26 4d 45 4d 5f 44  e( (flags1&MEM_D
104a0 79 6e 29 20 21 3d 20 28 70 49 6e 31 2d 3e 66 6c  yn) != (pIn1->fl
104b0 61 67 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a  ags&MEM_Dyn) );.
104c0 20 20 20 20 20 20 20 20 66 6c 61 67 73 31 20 3d          flags1 =
104d0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
104e0 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c  ~MEM_TypeMask) |
104f0 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 54   (flags1 & MEM_T
10500 79 70 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20  ypeMask);.      
10510 20 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d    flags3 = pIn3-
10520 3e 66 6c 61 67 73 3b 0a 20 20 20 20 20 20 7d 0a  >flags;.      }.
10530 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73        if( (flags
10540 33 20 26 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20  3 & MEM_Str)==0 
10550 26 26 20 28 66 6c 61 67 73 33 20 26 20 28 4d 45  && (flags3 & (ME
10560 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29  M_Int|MEM_Real))
10570 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 74  !=0 ){.        t
10580 65 73 74 63 61 73 65 28 20 70 49 6e 33 2d 3e 66  estcase( pIn3->f
10590 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
105a0 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61  ;.        testca
105b0 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  se( pIn3->flags 
105c0 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20  & MEM_Real );.  
105d0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
105e0 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70 49  eMemStringify(pI
105f0 6e 33 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29  n3, encoding, 1)
10600 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61  ;.        testca
10610 73 65 28 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f  se( (flags3&MEM_
10620 44 79 6e 29 20 21 3d 20 28 70 49 6e 33 2d 3e 66  Dyn) != (pIn3->f
10630 6c 61 67 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b  lags&MEM_Dyn) );
10640 0a 20 20 20 20 20 20 20 20 66 6c 61 67 73 33 20  .        flags3 
10650 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  = (pIn3->flags &
10660 20 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20   ~MEM_TypeMask) 
10670 7c 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f  | (flags3 & MEM_
10680 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20  TypeMask);.     
10690 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73   }.    }.    ass
106a0 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
106b0 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20  ==P4_COLLSEQ || 
106c0 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30  pOp->p4.pColl==0
106d0 20 29 3b 0a 20 20 20 20 69 66 28 20 66 6c 61 67   );.    if( flag
106e0 73 31 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b  s1 & MEM_Zero ){
106f0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
10700 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28  beMemExpandBlob(
10710 70 49 6e 31 29 3b 0a 20 20 20 20 20 20 66 6c 61  pIn1);.      fla
10720 67 73 31 20 26 3d 20 7e 4d 45 4d 5f 5a 65 72 6f  gs1 &= ~MEM_Zero
10730 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
10740 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 5a 65 72  flags3 & MEM_Zer
10750 6f 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  o ){.      sqlit
10760 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42  e3VdbeMemExpandB
10770 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20 20 20  lob(pIn3);.     
10780 20 66 6c 61 67 73 33 20 26 3d 20 7e 4d 45 4d 5f   flags3 &= ~MEM_
10790 5a 65 72 6f 3b 0a 20 20 20 20 7d 0a 20 20 20 20  Zero;.    }.    
107a0 72 65 73 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d  res = sqlite3Mem
107b0 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20 70 49  Compare(pIn3, pI
107c0 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c  n1, pOp->p4.pCol
107d0 6c 29 3b 0a 20 20 7d 0a 20 20 73 77 69 74 63 68  l);.  }.  switch
107e0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
107f0 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 45 71 3a  .    case OP_Eq:
10800 20 20 20 20 72 65 73 20 3d 20 72 65 73 3d 3d 30      res = res==0
10810 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
10820 20 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20   case OP_Ne:    
10830 72 65 73 20 3d 20 72 65 73 21 3d 30 3b 20 20 20  res = res!=0;   
10840 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
10850 65 20 4f 50 5f 4c 74 3a 20 20 20 20 72 65 73 20  e OP_Lt:    res 
10860 3d 20 72 65 73 3c 30 3b 20 20 20 20 20 20 62 72  = res<0;      br
10870 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50  eak;.    case OP
10880 5f 4c 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65  _Le:    res = re
10890 73 3c 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b  s<=0;     break;
108a0 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 47 74 3a  .    case OP_Gt:
108b0 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e 30 3b      res = res>0;
108c0 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
108d0 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20   default:       
108e0 72 65 73 20 3d 20 72 65 73 3e 3d 30 3b 20 20 20  res = res>=0;   
108f0 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
10900 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63 68 61 6e  /* Undo any chan
10910 67 65 73 20 6d 61 64 65 20 62 79 20 61 70 70 6c  ges made by appl
10920 79 41 66 66 69 6e 69 74 79 28 29 20 74 6f 20 74  yAffinity() to t
10930 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  he input registe
10940 72 73 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  rs. */.  assert(
10950 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
10960 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61  MEM_Dyn) == (fla
10970 67 73 31 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29  gs1 & MEM_Dyn) )
10980 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  ;.  pIn1->flags 
10990 3d 20 66 6c 61 67 73 31 3b 0a 20 20 61 73 73 65  = flags1;.  asse
109a0 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  rt( (pIn3->flags
109b0 20 26 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28   & MEM_Dyn) == (
109c0 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 44 79 6e  flags3 & MEM_Dyn
109d0 29 20 29 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c 61  ) );.  pIn3->fla
109e0 67 73 20 3d 20 66 6c 61 67 73 33 3b 0a 0a 20 20  gs = flags3;..  
109f0 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  if( pOp->p5 & SQ
10a00 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a  LITE_STOREP2 ){.
10a10 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d      pOut = &aMem
10a20 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 6d  [pOp->p2];.    m
10a30 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
10a40 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 4d 65  p, pOut);.    Me
10a50 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
10a60 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20  t, MEM_Int);.   
10a70 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 65 73   pOut->u.i = res
10a80 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
10a90 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f  RACE(pOp->p2, pO
10aa0 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ut);.  }else{.  
10ab0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
10ac0 6e 28 72 65 73 21 3d 30 2c 20 28 70 4f 70 2d 3e  n(res!=0, (pOp->
10ad0 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  p5 & SQLITE_NULL
10ae0 45 51 29 3f 32 3a 33 29 3b 0a 20 20 20 20 69 66  EQ)?2:3);.    if
10af0 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 67  ( res ){.      g
10b00 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
10b10 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
10b20 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
10b30 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 2a 20 2a   Permutation * *
10b40 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65   * P4 *.**.** Se
10b50 74 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f  t the permutatio
10b60 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 4f 50  n used by the OP
10b70 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 6f  _Compare operato
10b80 72 20 74 6f 20 62 65 20 74 68 65 20 61 72 72 61  r to be the arra
10b90 79 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73  y.** of integers
10ba0 20 69 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 54 68   in P4..**.** Th
10bb0 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 69 73  e permutation is
10bc0 20 6f 6e 6c 79 20 76 61 6c 69 64 20 75 6e 74 69   only valid unti
10bd0 6c 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 43 6f  l the next OP_Co
10be0 6d 70 61 72 65 20 74 68 61 74 20 68 61 73 0a 2a  mpare that has.*
10bf0 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f 50 45 52  * the OPFLAG_PER
10c00 4d 55 54 45 20 62 69 74 20 73 65 74 20 69 6e 20  MUTE bit set in 
10c10 50 35 2e 20 54 79 70 69 63 61 6c 6c 79 20 74 68  P5. Typically th
10c20 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e  e OP_Permutation
10c30 20 73 68 6f 75 6c 64 20 0a 2a 2a 20 6f 63 63 75   should .** occu
10c40 72 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 70 72  r immediately pr
10c50 69 6f 72 20 74 6f 20 74 68 65 20 4f 50 5f 43 6f  ior to the OP_Co
10c60 6d 70 61 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  mpare..**.** The
10c70 20 66 69 72 73 74 20 69 6e 74 65 67 65 72 20 69   first integer i
10c80 6e 20 74 68 65 20 50 34 20 69 6e 74 65 67 65 72  n the P4 integer
10c90 20 61 72 72 61 79 20 69 73 20 74 68 65 20 6c 65   array is the le
10ca0 6e 67 74 68 20 6f 66 20 74 68 65 20 61 72 72 61  ngth of the arra
10cb0 79 0a 2a 2a 20 61 6e 64 20 64 6f 65 73 20 6e 6f  y.** and does no
10cc0 74 20 62 65 63 6f 6d 65 20 70 61 72 74 20 6f 66  t become part of
10cd0 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   the permutation
10ce0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72  ..*/.case OP_Per
10cf0 6d 75 74 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73  mutation: {.  as
10d00 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
10d10 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29  e==P4_INTARRAY )
10d20 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
10d30 3e 70 34 2e 61 69 20 29 3b 0a 20 20 61 50 65 72  >p4.ai );.  aPer
10d40 6d 75 74 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 61  mute = pOp->p4.a
10d50 69 20 2b 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a  i + 1;.  break;.
10d60 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
10d70 6d 70 61 72 65 20 50 31 20 50 32 20 50 33 20 50  mpare P1 P2 P3 P
10d80 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
10d90 3a 20 72 5b 50 31 40 50 33 5d 20 3c 2d 3e 20 72  : r[P1@P3] <-> r
10da0 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 43 6f  [P2@P3].**.** Co
10db0 6d 70 61 72 65 20 74 77 6f 20 76 65 63 74 6f 72  mpare two vector
10dc0 73 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 69  s of registers i
10dd0 6e 20 72 65 67 28 50 31 29 2e 2e 72 65 67 28 50  n reg(P1)..reg(P
10de0 31 2b 50 33 2d 31 29 20 28 63 61 6c 6c 20 74 68  1+P3-1) (call th
10df0 69 73 0a 2a 2a 20 76 65 63 74 6f 72 20 22 41 22  is.** vector "A"
10e00 29 20 61 6e 64 20 69 6e 20 72 65 67 28 50 32 29  ) and in reg(P2)
10e10 2e 2e 72 65 67 28 50 32 2b 50 33 2d 31 29 20 28  ..reg(P2+P3-1) (
10e20 22 42 22 29 2e 20 20 53 61 76 65 20 74 68 65 20  "B").  Save the 
10e30 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65  result of.** the
10e40 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 6f 72 20   comparison for 
10e50 75 73 65 20 62 79 20 74 68 65 20 6e 65 78 74 20  use by the next 
10e60 4f 50 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63 74  OP_Jump instruct
10e70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61  ..**.** If P5 ha
10e80 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 50 45 52  s the OPFLAG_PER
10e90 4d 55 54 45 20 62 69 74 20 73 65 74 2c 20 74 68  MUTE bit set, th
10ea0 65 6e 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20  en the order of 
10eb0 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 0a 2a 2a  comparison is.**
10ec0 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74   determined by t
10ed0 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f  he most recent O
10ee0 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f 70  P_Permutation op
10ef0 65 72 61 74 6f 72 2e 20 20 49 66 20 74 68 65 0a  erator.  If the.
10f00 2a 2a 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54  ** OPFLAG_PERMUT
10f10 45 20 62 69 74 20 69 73 20 63 6c 65 61 72 2c 20  E bit is clear, 
10f20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 61 72  then register ar
10f30 65 20 63 6f 6d 70 61 72 65 64 20 69 6e 20 73 65  e compared in se
10f40 71 75 65 6e 74 69 61 6c 0a 2a 2a 20 6f 72 64 65  quential.** orde
10f50 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  r..**.** P4 is a
10f60 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75   KeyInfo structu
10f70 72 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  re that defines 
10f80 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
10f90 63 65 73 20 61 6e 64 20 73 6f 72 74 0a 2a 2a 20  ces and sort.** 
10fa0 6f 72 64 65 72 73 20 66 6f 72 20 74 68 65 20 63  orders for the c
10fb0 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 65 20  omparison.  The 
10fc0 70 65 72 6d 75 74 61 74 69 6f 6e 20 61 70 70 6c  permutation appl
10fd0 69 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73  ies to registers
10fe0 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 20 4b  .** only.  The K
10ff0 65 79 49 6e 66 6f 20 65 6c 65 6d 65 6e 74 73 20  eyInfo elements 
11000 61 72 65 20 75 73 65 64 20 73 65 71 75 65 6e 74  are used sequent
11010 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ially..**.** The
11020 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61   comparison is a
11030 20 73 6f 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e   sort comparison
11040 2c 20 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70 61  , so NULLs compa
11050 72 65 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c  re equal,.** NUL
11060 4c 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e  Ls are less than
11070 20 6e 75 6d 62 65 72 73 2c 20 6e 75 6d 62 65 72   numbers, number
11080 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20  s are less than 
11090 73 74 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20  strings,.** and 
110a0 73 74 72 69 6e 67 73 20 61 72 65 20 6c 65 73 73  strings are less
110b0 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a   than blobs..*/.
110c0 63 61 73 65 20 4f 50 5f 43 6f 6d 70 61 72 65 3a  case OP_Compare:
110d0 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e   {.  int n;.  in
110e0 74 20 69 3b 0a 20 20 69 6e 74 20 70 31 3b 0a 20  t i;.  int p1;. 
110f0 20 69 6e 74 20 70 32 3b 0a 20 20 63 6f 6e 73 74   int p2;.  const
11100 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
11110 66 6f 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20  fo;.  int idx;. 
11120 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b   CollSeq *pColl;
11130 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67      /* Collating
11140 20 73 65 71 75 65 6e 63 65 20 74 6f 20 75 73 65   sequence to use
11150 20 6f 6e 20 74 68 69 73 20 74 65 72 6d 20 2a 2f   on this term */
11160 0a 20 20 69 6e 74 20 62 52 65 76 3b 20 20 20 20  .  int bRev;    
11170 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f        /* True fo
11180 72 20 44 45 53 43 45 4e 44 49 4e 47 20 73 6f 72  r DESCENDING sor
11190 74 20 6f 72 64 65 72 20 2a 2f 0a 0a 20 20 69 66  t order */..  if
111a0 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  ( (pOp->p5 & OPF
111b0 4c 41 47 5f 50 45 52 4d 55 54 45 29 3d 3d 30 20  LAG_PERMUTE)==0 
111c0 29 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a  ) aPermute = 0;.
111d0 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20    n = pOp->p3;. 
111e0 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d   pKeyInfo = pOp-
111f0 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  >p4.pKeyInfo;.  
11200 61 73 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a 20  assert( n>0 );. 
11210 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66   assert( pKeyInf
11220 6f 21 3d 30 20 29 3b 0a 20 20 70 31 20 3d 20 70  o!=0 );.  p1 = p
11230 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70  Op->p1;.  p2 = p
11240 4f 70 2d 3e 70 32 3b 0a 23 69 66 20 53 51 4c 49  Op->p2;.#if SQLI
11250 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 61  TE_DEBUG.  if( a
11260 50 65 72 6d 75 74 65 20 29 7b 0a 20 20 20 20 69  Permute ){.    i
11270 6e 74 20 6b 2c 20 6d 78 20 3d 20 30 3b 0a 20 20  nt k, mx = 0;.  
11280 20 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20    for(k=0; k<n; 
11290 6b 2b 2b 29 20 69 66 28 20 61 50 65 72 6d 75 74  k++) if( aPermut
112a0 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78 20 3d 20 61  e[k]>mx ) mx = a
112b0 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a 20 20 20 20  Permute[k];.    
112c0 61 73 73 65 72 74 28 20 70 31 3e 30 20 26 26 20  assert( p1>0 && 
112d0 70 31 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p1+mx<=(p->nMem+
112e0 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  1 - p->nCursor)+
112f0 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  1 );.    assert(
11300 20 70 32 3e 30 20 26 26 20 70 32 2b 6d 78 3c 3d   p2>0 && p2+mx<=
11310 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
11320 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
11330 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
11340 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6e 3c  t( p1>0 && p1+n<
11350 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
11360 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20  >nCursor)+1 );. 
11370 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20     assert( p2>0 
11380 26 26 20 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65  && p2+n<=(p->nMe
11390 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
113a0 29 2b 31 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  )+1 );.  }.#endi
113b0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55  f /* SQLITE_DEBU
113c0 47 20 2a 2f 0a 20 20 66 6f 72 28 69 3d 30 3b 20  G */.  for(i=0; 
113d0 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  i<n; i++){.    i
113e0 64 78 20 3d 20 61 50 65 72 6d 75 74 65 20 3f 20  dx = aPermute ? 
113f0 61 50 65 72 6d 75 74 65 5b 69 5d 20 3a 20 69 3b  aPermute[i] : i;
11400 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
11410 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 31  IsValid(&aMem[p1
11420 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20 61 73  +idx]) );.    as
11430 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
11440 28 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 20  (&aMem[p2+idx]) 
11450 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
11460 54 52 41 43 45 28 70 31 2b 69 64 78 2c 20 26 61  TRACE(p1+idx, &a
11470 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 3b 0a 20 20  Mem[p1+idx]);.  
11480 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
11490 28 70 32 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70  (p2+idx, &aMem[p
114a0 32 2b 69 64 78 5d 29 3b 0a 20 20 20 20 61 73 73  2+idx]);.    ass
114b0 65 72 74 28 20 69 3c 70 4b 65 79 49 6e 66 6f 2d  ert( i<pKeyInfo-
114c0 3e 6e 46 69 65 6c 64 20 29 3b 0a 20 20 20 20 70  >nField );.    p
114d0 43 6f 6c 6c 20 3d 20 70 4b 65 79 49 6e 66 6f 2d  Coll = pKeyInfo-
114e0 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62  >aColl[i];.    b
114f0 52 65 76 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e  Rev = pKeyInfo->
11500 61 53 6f 72 74 4f 72 64 65 72 5b 69 5d 3b 0a 20  aSortOrder[i];. 
11510 20 20 20 69 43 6f 6d 70 61 72 65 20 3d 20 73 71     iCompare = sq
11520 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28  lite3MemCompare(
11530 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c 20 26  &aMem[p1+idx], &
11540 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 2c 20 70 43  aMem[p2+idx], pC
11550 6f 6c 6c 29 3b 0a 20 20 20 20 69 66 28 20 69 43  oll);.    if( iC
11560 6f 6d 70 61 72 65 20 29 7b 0a 20 20 20 20 20 20  ompare ){.      
11570 69 66 28 20 62 52 65 76 20 29 20 69 43 6f 6d 70  if( bRev ) iComp
11580 61 72 65 20 3d 20 2d 69 43 6f 6d 70 61 72 65 3b  are = -iCompare;
11590 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
115a0 20 20 7d 0a 20 20 7d 0a 20 20 61 50 65 72 6d 75    }.  }.  aPermu
115b0 74 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b  te = 0;.  break;
115c0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a  .}../* Opcode: J
115d0 75 6d 70 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ump P1 P2 P3 * *
115e0 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74  .**.** Jump to t
115f0 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  he instruction a
11600 74 20 61 64 64 72 65 73 73 20 50 31 2c 20 50 32  t address P1, P2
11610 2c 20 6f 72 20 50 33 20 64 65 70 65 6e 64 69 6e  , or P3 dependin
11620 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20  g on whether.** 
11630 69 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  in the most rece
11640 6e 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 69 6e  nt OP_Compare in
11650 73 74 72 75 63 74 69 6f 6e 20 74 68 65 20 50 31  struction the P1
11660 20 76 65 63 74 6f 72 20 77 61 73 20 6c 65 73 73   vector was less
11670 20 74 68 61 6e 0a 2a 2a 20 65 71 75 61 6c 20 74   than.** equal t
11680 6f 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74 68  o, or greater th
11690 61 6e 20 74 68 65 20 50 32 20 76 65 63 74 6f 72  an the P2 vector
116a0 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 0a  , respectively..
116b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70 3a  */.case OP_Jump:
116c0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
116d0 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20  * jump */.  if( 
116e0 69 43 6f 6d 70 61 72 65 3c 30 20 29 7b 0a 20 20  iCompare<0 ){.  
116f0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
11700 6e 28 30 2c 33 29 3b 20 70 4f 70 20 3d 20 26 61  n(0,3); pOp = &a
11710 4f 70 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b  Op[pOp->p1 - 1];
11720 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69 43 6f  .  }else if( iCo
11730 6d 70 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20 20  mpare==0 ){.    
11740 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
11750 31 2c 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70  1,3); pOp = &aOp
11760 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20  [pOp->p2 - 1];. 
11770 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65   }else{.    Vdbe
11780 42 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29  BranchTaken(2,3)
11790 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70  ; pOp = &aOp[pOp
117a0 2d 3e 70 33 20 2d 20 31 5d 3b 0a 20 20 7d 0a 20  ->p3 - 1];.  }. 
117b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
117c0 63 6f 64 65 3a 20 41 6e 64 20 50 31 20 50 32 20  code: And P1 P2 
117d0 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
117e0 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d  is: r[P3]=(r[P1]
117f0 20 26 26 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a   && r[P2]).**.**
11800 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61   Take the logica
11810 6c 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c  l AND of the val
11820 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 73  ues in registers
11830 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a   P1 and P2 and.*
11840 2a 20 77 72 69 74 65 20 74 68 65 20 72 65 73 75  * write the resu
11850 6c 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  lt into register
11860 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69   P3..**.** If ei
11870 74 68 65 72 20 50 31 20 6f 72 20 50 32 20 69 73  ther P1 or P2 is
11880 20 30 20 28 66 61 6c 73 65 29 20 74 68 65 6e 20   0 (false) then 
11890 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 30 20  the result is 0 
118a0 65 76 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f  even if.** the o
118b0 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
118c0 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20  LL.  A NULL and 
118d0 74 72 75 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c  true or two NULL
118e0 73 20 67 69 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c  s give.** a NULL
118f0 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f   output..*/./* O
11900 70 63 6f 64 65 3a 20 4f 72 20 50 31 20 50 32 20  pcode: Or P1 P2 
11910 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
11920 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d  is: r[P3]=(r[P1]
11930 20 7c 7c 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a   || r[P2]).**.**
11940 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61   Take the logica
11950 6c 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75  l OR of the valu
11960 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
11970 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20  1 and P2 and.** 
11980 73 74 6f 72 65 20 74 68 65 20 61 6e 73 77 65 72  store the answer
11990 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
119a0 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  .**.** If either
119b0 20 50 31 20 6f 72 20 50 32 20 69 73 20 6e 6f 6e   P1 or P2 is non
119c0 7a 65 72 6f 20 28 74 72 75 65 29 20 74 68 65 6e  zero (true) then
119d0 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 31   the result is 1
119e0 20 28 74 72 75 65 29 0a 2a 2a 20 65 76 65 6e 20   (true).** even 
119f0 69 66 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70  if the other inp
11a00 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e  ut is NULL.  A N
11a10 55 4c 4c 20 61 6e 64 20 66 61 6c 73 65 20 6f 72  ULL and false or
11a20 20 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69   two NULLs.** gi
11a30 76 65 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74  ve a NULL output
11a40 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64  ..*/.case OP_And
11a50 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  :              /
11a60 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44  * same as TK_AND
11a70 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
11a80 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 72 3a 20   */.case OP_Or: 
11a90 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
11aa0 20 73 61 6d 65 20 61 73 20 54 4b 5f 4f 52 2c 20   same as TK_OR, 
11ab0 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
11ac0 2f 0a 20 20 69 6e 74 20 76 31 3b 20 20 20 20 2f  /.  int v1;    /
11ad0 2a 20 4c 65 66 74 20 6f 70 65 72 61 6e 64 3a 20  * Left operand: 
11ae0 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52   0==FALSE, 1==TR
11af0 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f  UE, 2==UNKNOWN o
11b00 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20  r NULL */.  int 
11b10 76 32 3b 20 20 20 20 2f 2a 20 52 69 67 68 74 20  v2;    /* Right 
11b20 6f 70 65 72 61 6e 64 3a 20 30 3d 3d 46 41 4c 53  operand: 0==FALS
11b30 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55  E, 1==TRUE, 2==U
11b40 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a  NKNOWN or NULL *
11b50 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  /..  pIn1 = &aMe
11b60 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  m[pOp->p1];.  if
11b70 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
11b80 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
11b90 76 31 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b  v1 = 2;.  }else{
11ba0 0a 20 20 20 20 76 31 20 3d 20 73 71 6c 69 74 65  .    v1 = sqlite
11bb0 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
11bc0 6e 31 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 70 49  n1)!=0;.  }.  pI
11bd0 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
11be0 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 32 2d  p2];.  if( pIn2-
11bf0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
11c00 6c 20 29 7b 0a 20 20 20 20 76 32 20 3d 20 32 3b  l ){.    v2 = 2;
11c10 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 32  .  }else{.    v2
11c20 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
11c30 74 56 61 6c 75 65 28 70 49 6e 32 29 21 3d 30 3b  tValue(pIn2)!=0;
11c40 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
11c50 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20 29  opcode==OP_And )
11c60 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
11c70 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
11c80 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b   and_logic[] = {
11c90 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20   0, 0, 0, 0, 1, 
11ca0 32 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20  2, 0, 2, 2 };.  
11cb0 20 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69 63    v1 = and_logic
11cc0 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c  [v1*3+v2];.  }el
11cd0 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63  se{.    static c
11ce0 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
11cf0 61 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20  ar or_logic[] = 
11d00 7b 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31 2c  { 0, 1, 2, 1, 1,
11d10 20 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a 20   1, 2, 1, 2 };. 
11d20 20 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69 63     v1 = or_logic
11d30 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20  [v1*3+v2];.  }. 
11d40 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
11d50 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 76 31  p->p3];.  if( v1
11d60 3d 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65  ==2 ){.    MemSe
11d70 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
11d80 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c  MEM_Null);.  }el
11d90 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  se{.    pOut->u.
11da0 69 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d 53  i = v1;.    MemS
11db0 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
11dc0 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20   MEM_Int);.  }. 
11dd0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
11de0 63 6f 64 65 3a 20 4e 6f 74 20 50 31 20 50 32 20  code: Not P1 P2 
11df0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
11e00 73 3a 20 72 5b 50 32 5d 3d 20 21 72 5b 50 31 5d  s: r[P2]= !r[P1]
11e10 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  .**.** Interpret
11e20 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
11e30 67 69 73 74 65 72 20 50 31 20 61 73 20 61 20 62  gister P1 as a b
11e40 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 53  oolean value.  S
11e50 74 6f 72 65 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c  tore the.** bool
11e60 65 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 69  ean complement i
11e70 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20  n register P2.  
11e80 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  If the value in 
11e90 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 0a  register P1 is .
11ea0 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 20  ** NULL, then a 
11eb0 4e 55 4c 4c 20 69 73 20 73 74 6f 72 65 64 20 69  NULL is stored i
11ec0 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
11ed0 5f 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20  _Not: {         
11ee0 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
11ef0 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f  s TK_NOT, in1, o
11f00 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  ut2 */.  pIn1 = 
11f10 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
11f20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
11f30 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74  Op->p2];.  sqlit
11f40 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
11f50 28 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 28 70  (pOut);.  if( (p
11f60 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
11f70 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Null)==0 ){.   
11f80 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
11f90 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74  EM_Int;.    pOut
11fa0 2d 3e 75 2e 69 20 3d 20 21 73 71 6c 69 74 65 33  ->u.i = !sqlite3
11fb0 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
11fc0 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  1);.  }.  break;
11fd0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42  .}../* Opcode: B
11fe0 69 74 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20  itNot P1 P2 * * 
11ff0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
12000 5b 50 31 5d 3d 20 7e 72 5b 50 31 5d 0a 2a 2a 0a  [P1]= ~r[P1].**.
12010 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
12020 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
12030 73 74 65 72 20 50 31 20 61 73 20 61 6e 20 69 6e  ster P1 as an in
12040 74 65 67 65 72 2e 20 20 53 74 6f 72 65 20 74 68  teger.  Store th
12050 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65  e.** ones-comple
12060 6d 65 6e 74 20 6f 66 20 74 68 65 20 50 31 20 76  ment of the P1 v
12070 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74  alue into regist
12080 65 72 20 50 32 2e 20 20 49 66 20 50 31 20 68 6f  er P2.  If P1 ho
12090 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 68  lds.** a NULL th
120a0 65 6e 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20  en store a NULL 
120b0 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  in P2..*/.case O
120c0 50 5f 42 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20  P_BitNot: {     
120d0 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
120e0 61 73 20 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e  as TK_BITNOT, in
120f0 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e  1, out2 */.  pIn
12100 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
12110 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  1];.  pOut = &aM
12120 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73  em[pOp->p2];.  s
12130 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
12140 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 69 66  Null(pOut);.  if
12150 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
12160 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b   MEM_Null)==0 ){
12170 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
12180 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20   = MEM_Int;.    
12190 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 7e 73 71 6c  pOut->u.i = ~sql
121a0 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
121b0 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72  (pIn1);.  }.  br
121c0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
121d0 65 3a 20 4f 6e 63 65 20 50 31 20 50 32 20 2a 20  e: Once P1 P2 * 
121e0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20  * *.**.** Check 
121f0 74 68 65 20 22 6f 6e 63 65 22 20 66 6c 61 67 20  the "once" flag 
12200 6e 75 6d 62 65 72 20 50 31 2e 20 49 66 20 69 74  number P1. If it
12210 20 69 73 20 73 65 74 2c 20 6a 75 6d 70 20 74 6f   is set, jump to
12220 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e   instruction P2.
12230 20 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20   .** Otherwise, 
12240 73 65 74 20 74 68 65 20 66 6c 61 67 20 61 6e 64  set the flag and
12250 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
12260 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
12270 63 74 69 6f 6e 2e 0a 2a 2a 20 49 6e 20 6f 74 68  ction..** In oth
12280 65 72 20 77 6f 72 64 73 2c 20 74 68 69 73 20 6f  er words, this o
12290 70 63 6f 64 65 20 63 61 75 73 65 73 20 61 6c 6c  pcode causes all
122a0 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 70 63 6f 64   following opcod
122b0 65 73 20 75 70 20 74 68 72 6f 75 67 68 20 50 32  es up through P2
122c0 0a 2a 2a 20 28 62 75 74 20 6e 6f 74 20 69 6e 63  .** (but not inc
122d0 6c 75 64 69 6e 67 20 50 32 29 20 74 6f 20 72 75  luding P2) to ru
122e0 6e 20 6a 75 73 74 20 6f 6e 63 65 20 61 6e 64 20  n just once and 
122f0 74 6f 20 62 65 20 73 6b 69 70 70 65 64 20 6f 6e  to be skipped on
12300 20 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20 74   subsequent.** t
12310 69 6d 65 73 20 74 68 72 6f 75 67 68 20 74 68 65  imes through the
12320 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c   loop..**.** All
12330 20 22 6f 6e 63 65 22 20 66 6c 61 67 73 20 61 72   "once" flags ar
12340 65 20 69 6e 69 74 69 61 6c 6c 79 20 63 6c 65 61  e initially clea
12350 72 65 64 20 77 68 65 6e 65 76 65 72 20 61 20 70  red whenever a p
12360 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
12370 74 0a 2a 2a 20 66 69 72 73 74 20 62 65 67 69 6e  t.** first begin
12380 73 20 74 6f 20 72 75 6e 2e 0a 2a 2f 0a 63 61 73  s to run..*/.cas
12390 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20 20 20  e OP_Once: {    
123a0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
123b0 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
123c0 70 2d 3e 70 31 3c 70 2d 3e 6e 4f 6e 63 65 46 6c  p->p1<p->nOnceFl
123d0 61 67 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  ag );.  VdbeBran
123e0 63 68 54 61 6b 65 6e 28 70 2d 3e 61 4f 6e 63 65  chTaken(p->aOnce
123f0 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30  Flag[pOp->p1]!=0
12400 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61  , 2);.  if( p->a
12410 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31  OnceFlag[pOp->p1
12420 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75  ] ){.    goto ju
12430 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73  mp_to_p2;.  }els
12440 65 7b 0a 20 20 20 20 70 2d 3e 61 4f 6e 63 65 46  e{.    p->aOnceF
12450 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 31  lag[pOp->p1] = 1
12460 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
12470 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20  ../* Opcode: If 
12480 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
12490 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
124a0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
124b0 67 69 73 74 65 72 20 50 31 20 69 73 20 74 72 75  gister P1 is tru
124c0 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a  e.  The value.**
124d0 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74   is considered t
124e0 72 75 65 20 69 66 20 69 74 20 69 73 20 6e 75 6d  rue if it is num
124f0 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72  eric and non-zer
12500 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  o.  If the value
12510 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c  .** in P1 is NUL
12520 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  L then take the 
12530 6a 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79  jump if and only
12540 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65   if P3 is non-ze
12550 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ro..*/./* Opcode
12560 3a 20 49 66 4e 6f 74 20 50 31 20 50 32 20 50 33  : IfNot P1 P2 P3
12570 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
12580 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
12590 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
125a0 31 20 69 73 20 46 61 6c 73 65 2e 20 20 54 68 65  1 is False.  The
125b0 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e   value.** is con
125c0 73 69 64 65 72 65 64 20 66 61 6c 73 65 20 69 66  sidered false if
125d0 20 69 74 20 68 61 73 20 61 20 6e 75 6d 65 72 69   it has a numeri
125e0 63 20 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e  c value of zero.
125f0 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
12600 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20  * in P1 is NULL 
12610 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
12620 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69  mp if and only i
12630 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P3 is non-zero
12640 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a  ..*/.case OP_If:
12650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12660 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
12670 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20  .case OP_IfNot: 
12680 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
12690 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69  jump, in1 */.  i
126a0 6e 74 20 63 3b 0a 20 20 70 49 6e 31 20 3d 20 26  nt c;.  pIn1 = &
126b0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
126c0 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73   if( pIn1->flags
126d0 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
126e0 20 20 20 63 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a     c = pOp->p3;.
126f0 20 20 7d 65 6c 73 65 7b 0a 23 69 66 64 65 66 20    }else{.#ifdef 
12700 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
12710 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 63  TING_POINT.    c
12720 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
12730 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b  tValue(pIn1)!=0;
12740 0a 23 65 6c 73 65 0a 20 20 20 20 63 20 3d 20 73  .#else.    c = s
12750 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
12760 6c 75 65 28 70 49 6e 31 29 21 3d 30 2e 30 3b 0a  lue(pIn1)!=0.0;.
12770 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70  #endif.    if( p
12780 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
12790 66 4e 6f 74 20 29 20 63 20 3d 20 21 63 3b 0a 20  fNot ) c = !c;. 
127a0 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54   }.  VdbeBranchT
127b0 61 6b 65 6e 28 63 21 3d 30 2c 20 32 29 3b 0a 20  aken(c!=0, 2);. 
127c0 20 69 66 28 20 63 20 29 7b 0a 20 20 20 20 67 6f   if( c ){.    go
127d0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
127e0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
127f0 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c 6c  * Opcode: IsNull
12800 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
12810 53 79 6e 6f 70 73 69 73 3a 20 20 69 66 20 72 5b  Synopsis:  if r[
12820 50 31 5d 3d 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50  P1]==NULL goto P
12830 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  2.**.** Jump to 
12840 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20  P2 if the value 
12850 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
12860 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
12870 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20  OP_IsNull: {    
12880 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
12890 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75  as TK_ISNULL, ju
128a0 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
128b0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
128c0 31 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  1];.  VdbeBranch
128d0 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c  Taken( (pIn1->fl
128e0 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21  ags & MEM_Null)!
128f0 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70  =0, 2);.  if( (p
12900 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
12910 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20  _Null)!=0 ){.   
12920 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
12930 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
12940 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
12950 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a  Null P1 P2 * * *
12960 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
12970 20 72 5b 50 31 5d 21 3d 4e 55 4c 4c 20 67 6f 74   r[P1]!=NULL got
12980 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20  o P2.**.** Jump 
12990 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
129a0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
129b0 31 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20  1 is not NULL.  
129c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e  .*/.case OP_NotN
129d0 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ull: {          
129e0 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
129f0 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69  NOTNULL, jump, i
12a00 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
12a10 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
12a20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
12a30 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
12a40 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 2c 20 32   MEM_Null)==0, 2
12a50 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
12a60 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
12a70 29 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f  )==0 ){.    goto
12a80 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
12a90 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
12aa0 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20 50  Opcode: Column P
12ab0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
12ac0 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33   Synopsis:  r[P3
12ad0 5d 3d 50 58 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72  ]=PX.**.** Inter
12ae0 70 72 65 74 20 74 68 65 20 64 61 74 61 20 74 68  pret the data th
12af0 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69  at cursor P1 poi
12b00 6e 74 73 20 74 6f 20 61 73 20 61 20 73 74 72 75  nts to as a stru
12b10 63 74 75 72 65 20 62 75 69 6c 74 20 75 73 69 6e  cture built usin
12b20 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65 63  g.** the MakeRec
12b30 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ord instruction.
12b40 20 20 28 53 65 65 20 74 68 65 20 4d 61 6b 65 52    (See the MakeR
12b50 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f 72  ecord opcode for
12b60 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69   additional.** i
12b70 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
12b80 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74   the format of t
12b90 68 65 20 64 61 74 61 2e 29 20 20 45 78 74 72 61  he data.)  Extra
12ba0 63 74 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c  ct the P2-th col
12bb0 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73  umn.** from this
12bc0 20 72 65 63 6f 72 64 2e 20 20 49 66 20 74 68 65   record.  If the
12bd0 72 65 20 61 72 65 20 6c 65 73 73 20 74 68 61 74  re are less that
12be0 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75   (P2+1) .** valu
12bf0 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  es in the record
12c00 2c 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c  , extract a NULL
12c10 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75  ..**.** The valu
12c20 65 20 65 78 74 72 61 63 74 65 64 20 69 73 20 73  e extracted is s
12c30 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
12c40 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  r P3..**.** If t
12c50 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69  he column contai
12c60 6e 73 20 66 65 77 65 72 20 74 68 61 6e 20 50 32  ns fewer than P2
12c70 20 66 69 65 6c 64 73 2c 20 74 68 65 6e 20 65 78   fields, then ex
12c80 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f  tract a NULL.  O
12c90 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50 34 20  r,.** if the P4 
12ca0 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 34  argument is a P4
12cb0 5f 4d 45 4d 20 75 73 65 20 74 68 65 20 76 61 6c  _MEM use the val
12cc0 75 65 20 6f 66 20 74 68 65 20 50 34 20 61 72 67  ue of the P4 arg
12cd0 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20  ument as.** the 
12ce0 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66  result..**.** If
12cf0 20 74 68 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41   the OPFLAG_CLEA
12d00 52 43 41 43 48 45 20 62 69 74 20 69 73 20 73 65  RCACHE bit is se
12d10 74 20 6f 6e 20 50 35 20 61 6e 64 20 50 31 20 69  t on P5 and P1 i
12d20 73 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  s a pseudo-table
12d30 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e   cursor,.** then
12d40 20 74 68 65 20 63 61 63 68 65 20 6f 66 20 74 68   the cache of th
12d50 65 20 63 75 72 73 6f 72 20 69 73 20 72 65 73 65  e cursor is rese
12d60 74 20 70 72 69 6f 72 20 74 6f 20 65 78 74 72 61  t prior to extra
12d70 63 74 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e  cting the column
12d80 2e 0a 2a 2a 20 54 68 65 20 66 69 72 73 74 20 4f  ..** The first O
12d90 50 5f 43 6f 6c 75 6d 6e 20 61 67 61 69 6e 73 74  P_Column against
12da0 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20   a pseudo-table 
12db0 61 66 74 65 72 20 74 68 65 20 76 61 6c 75 65 20  after the value 
12dc0 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a  of the content.*
12dd0 2a 20 72 65 67 69 73 74 65 72 20 68 61 73 20 63  * register has c
12de0 68 61 6e 67 65 64 20 73 68 6f 75 6c 64 20 68 61  hanged should ha
12df0 76 65 20 74 68 69 73 20 62 69 74 20 73 65 74 2e  ve this bit set.
12e00 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
12e10 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61  FLAG_LENGTHARG a
12e20 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46  nd OPFLAG_TYPEOF
12e30 41 52 47 20 62 69 74 73 20 61 72 65 20 73 65 74  ARG bits are set
12e40 20 6f 6e 20 50 35 20 77 68 65 6e 0a 2a 2a 20 74   on P5 when.** t
12e50 68 65 20 72 65 73 75 6c 74 20 69 73 20 67 75 61  he result is gua
12e60 72 61 6e 74 65 65 64 20 74 6f 20 6f 6e 6c 79 20  ranteed to only 
12e70 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20 61  be used as the a
12e80 72 67 75 6d 65 6e 74 20 6f 66 20 61 20 6c 65 6e  rgument of a len
12e90 67 74 68 28 29 0a 2a 2a 20 6f 72 20 74 79 70 65  gth().** or type
12ea0 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20 72  of() function, r
12eb0 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 54 68  espectively.  Th
12ec0 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20 6c 61 72  e loading of lar
12ed0 67 65 20 62 6c 6f 62 73 20 63 61 6e 20 62 65 0a  ge blobs can be.
12ee0 2a 2a 20 73 6b 69 70 70 65 64 20 66 6f 72 20 6c  ** skipped for l
12ef0 65 6e 67 74 68 28 29 20 61 6e 64 20 61 6c 6c 20  ength() and all 
12f00 63 6f 6e 74 65 6e 74 20 6c 6f 61 64 69 6e 67 20  content loading 
12f10 63 61 6e 20 62 65 20 73 6b 69 70 70 65 64 20 66  can be skipped f
12f20 6f 72 20 74 79 70 65 6f 66 28 29 2e 0a 2a 2f 0a  or typeof()..*/.
12f30 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20  case OP_Column: 
12f40 7b 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20  {.  int p2;     
12f50 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e         /* column
12f60 20 6e 75 6d 62 65 72 20 74 6f 20 72 65 74 72 69   number to retri
12f70 65 76 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  eve */.  VdbeCur
12f80 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54  sor *pC;    /* T
12f90 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 2a  he VDBE cursor *
12fa0 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  /.  BtCursor *pC
12fb0 72 73 72 3b 20 20 20 2f 2a 20 54 68 65 20 42 54  rsr;   /* The BT
12fc0 72 65 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20  ree cursor */.  
12fd0 75 33 32 20 2a 61 4f 66 66 73 65 74 3b 20 20 20  u32 *aOffset;   
12fe0 20 20 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d     /* aOffset[i]
12ff0 20 69 73 20 6f 66 66 73 65 74 20 74 6f 20 73 74   is offset to st
13000 61 72 74 20 6f 66 20 64 61 74 61 20 66 6f 72 20  art of data for 
13010 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  i-th column */. 
13020 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20 20   int len;       
13030 20 20 20 20 2f 2a 20 54 68 65 20 6c 65 6e 67 74      /* The lengt
13040 68 20 6f 66 20 74 68 65 20 73 65 72 69 61 6c 69  h of the seriali
13050 7a 65 64 20 64 61 74 61 20 66 6f 72 20 74 68 65  zed data for the
13060 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74   column */.  int
13070 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
13080 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20  /* Loop counter 
13090 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b  */.  Mem *pDest;
130a0 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65 72 65          /* Where
130b0 20 74 6f 20 77 72 69 74 65 20 74 68 65 20 65 78   to write the ex
130c0 74 72 61 63 74 65 64 20 76 61 6c 75 65 20 2a 2f  tracted value */
130d0 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20  .  Mem sMem;    
130e0 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f        /* For sto
130f0 72 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20  ring the record 
13100 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f  being decoded */
13110 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 44 61  .  const u8 *zDa
13120 74 61 3b 20 20 20 2f 2a 20 50 61 72 74 20 6f 66  ta;   /* Part of
13130 20 74 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e   the record bein
13140 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63  g decoded */.  c
13150 6f 6e 73 74 20 75 38 20 2a 7a 48 64 72 3b 20 20  onst u8 *zHdr;  
13160 20 20 2f 2a 20 4e 65 78 74 20 75 6e 70 61 72 73    /* Next unpars
13170 65 64 20 62 79 74 65 20 6f 66 20 74 68 65 20 68  ed byte of the h
13180 65 61 64 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 74  eader */.  const
13190 20 75 38 20 2a 7a 45 6e 64 48 64 72 3b 20 2f 2a   u8 *zEndHdr; /*
131a0 20 50 6f 69 6e 74 65 72 20 74 6f 20 66 69 72 73   Pointer to firs
131b0 74 20 62 79 74 65 20 61 66 74 65 72 20 74 68 65  t byte after the
131c0 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 75 33 32   header */.  u32
131d0 20 6f 66 66 73 65 74 3b 20 20 20 20 20 20 20 20   offset;        
131e0 2f 2a 20 4f 66 66 73 65 74 20 69 6e 74 6f 20 74  /* Offset into t
131f0 68 65 20 64 61 74 61 20 2a 2f 0a 20 20 75 36 34  he data */.  u64
13200 20 6f 66 66 73 65 74 36 34 3b 20 20 20 20 20 20   offset64;      
13210 2f 2a 20 36 34 2d 62 69 74 20 6f 66 66 73 65 74  /* 64-bit offset
13220 20 2a 2f 0a 20 20 75 33 32 20 61 76 61 69 6c 3b   */.  u32 avail;
13230 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
13240 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 61  er of bytes of a
13250 76 61 69 6c 61 62 6c 65 20 64 61 74 61 20 2a 2f  vailable data */
13260 0a 20 20 75 33 32 20 74 3b 20 20 20 20 20 20 20  .  u32 t;       
13270 20 20 20 20 20 20 2f 2a 20 41 20 74 79 70 65 20        /* A type 
13280 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 72 65  code from the re
13290 63 6f 72 64 20 68 65 61 64 65 72 20 2a 2f 0a 20  cord header */. 
132a0 20 4d 65 6d 20 2a 70 52 65 67 3b 20 20 20 20 20   Mem *pReg;     
132b0 20 20 20 20 2f 2a 20 50 73 65 75 64 6f 54 61 62      /* PseudoTab
132c0 6c 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  le input registe
132d0 72 20 2a 2f 0a 0a 20 20 70 43 20 3d 20 70 2d 3e  r */..  pC = p->
132e0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
132f0 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a    p2 = pOp->p2;.
13300 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63 75 72  .  /* If the cur
13310 73 6f 72 20 63 61 63 68 65 20 69 73 20 73 74 61  sor cache is sta
13320 6c 65 2c 20 62 72 69 6e 67 20 69 74 20 75 70 2d  le, bring it up-
13330 74 6f 2d 64 61 74 65 20 2a 2f 0a 20 20 72 63 20  to-date */.  rc 
13340 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
13350 73 6f 72 4d 6f 76 65 74 6f 28 26 70 43 2c 20 26  sorMoveto(&pC, &
13360 70 32 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  p2);.  if( rc ) 
13370 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
13380 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 61 73 73 65  o_error;..  asse
13390 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
133a0 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
133b0 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
133c0 72 29 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20  r) );.  pDest = 
133d0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
133e0 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
133f0 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a 20 20  ge(p, pDest);.  
13400 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
13410 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
13420 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
13430 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
13440 20 61 73 73 65 72 74 28 20 70 32 3c 70 43 2d 3e   assert( p2<pC->
13450 6e 46 69 65 6c 64 20 29 3b 0a 20 20 61 4f 66 66  nField );.  aOff
13460 73 65 74 20 3d 20 70 43 2d 3e 61 4f 66 66 73 65  set = pC->aOffse
13470 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  t;.  assert( pC-
13480 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59  >eCurType!=CURTY
13490 50 45 5f 56 54 41 42 20 29 3b 0a 20 20 61 73 73  PE_VTAB );.  ass
134a0 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
134b0 65 21 3d 43 55 52 54 59 50 45 5f 50 53 45 55 44  e!=CURTYPE_PSEUD
134c0 4f 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  O || pC->nullRow
134d0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
134e0 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54  ->eCurType!=CURT
134f0 59 50 45 5f 53 4f 52 54 45 52 20 29 3b 0a 20 20  YPE_SORTER );.  
13500 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70  pCrsr = pC->uc.p
13510 43 75 72 73 6f 72 3b 0a 0a 20 20 69 66 28 20 70  Cursor;..  if( p
13520 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 21 3d  C->cacheStatus!=
13530 70 2d 3e 63 61 63 68 65 43 74 72 20 29 7b 20 20  p->cacheCtr ){  
13540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
13550 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d  OPTIMIZATION-IF-
13560 46 41 4c 53 45 2a 2f 0a 20 20 20 20 69 66 28 20  FALSE*/.    if( 
13570 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
13580 20 20 20 20 20 69 66 28 20 70 43 2d 3e 65 43 75       if( pC->eCu
13590 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 50  rType==CURTYPE_P
135a0 53 45 55 44 4f 20 29 7b 0a 20 20 20 20 20 20 20  SEUDO ){.       
135b0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e   assert( pC->uc.
135c0 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3e 30  pseudoTableReg>0
135d0 20 29 3b 0a 20 20 20 20 20 20 20 20 70 52 65 67   );.        pReg
135e0 20 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e 75 63 2e   = &aMem[pC->uc.
135f0 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 5d 3b  pseudoTableReg];
13600 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
13610 20 70 52 65 67 2d 3e 66 6c 61 67 73 20 26 20 4d   pReg->flags & M
13620 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 20  EM_Blob );.     
13630 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
13640 56 61 6c 69 64 28 70 52 65 67 29 20 29 3b 0a 20  Valid(pReg) );. 
13650 20 20 20 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f         pC->paylo
13660 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e 73 7a 52  adSize = pC->szR
13670 6f 77 20 3d 20 61 76 61 69 6c 20 3d 20 70 52 65  ow = avail = pRe
13680 67 2d 3e 6e 3b 0a 20 20 20 20 20 20 20 20 70 43  g->n;.        pC
13690 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29 70 52  ->aRow = (u8*)pR
136a0 65 67 2d 3e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c  eg->z;.      }el
136b0 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  se{.        sqli
136c0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
136d0 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20  l(pDest);.      
136e0 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
136f0 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  _out;.      }.  
13700 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61    }else{.      a
13710 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
13720 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
13730 45 45 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  EE );.      asse
13740 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20  rt( pCrsr );.   
13750 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
13760 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56  e3BtreeCursorIsV
13770 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20  alid(pCrsr) );. 
13780 20 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64       pC->payload
13790 53 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 42 74  Size = sqlite3Bt
137a0 72 65 65 50 61 79 6c 6f 61 64 53 69 7a 65 28 70  reePayloadSize(p
137b0 43 72 73 72 29 3b 0a 20 20 20 20 20 20 70 43 2d  Crsr);.      pC-
137c0 3e 61 52 6f 77 20 3d 20 73 71 6c 69 74 65 33 42  >aRow = sqlite3B
137d0 74 72 65 65 50 61 79 6c 6f 61 64 46 65 74 63 68  treePayloadFetch
137e0 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b  (pCrsr, &avail);
137f0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 61  .      assert( a
13800 76 61 69 6c 3c 3d 36 35 35 33 36 20 29 3b 20 20  vail<=65536 );  
13810 2f 2a 20 4d 61 78 69 6d 75 6d 20 70 61 67 65 20  /* Maximum page 
13820 73 69 7a 65 20 69 73 20 36 34 4b 69 42 20 2a 2f  size is 64KiB */
13830 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 70  .      if( pC->p
13840 61 79 6c 6f 61 64 53 69 7a 65 20 3c 3d 20 28 75  ayloadSize <= (u
13850 33 32 29 61 76 61 69 6c 20 29 7b 0a 20 20 20 20  32)avail ){.    
13860 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20      pC->szRow = 
13870 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 3b  pC->payloadSize;
13880 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
13890 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
138a0 20 3e 20 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d   > (u32)db->aLim
138b0 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
138c0 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20  LENGTH] ){.     
138d0 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
138e0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
138f0 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20        pC->szRow 
13900 3d 20 61 76 61 69 6c 3b 0a 20 20 20 20 20 20 7d  = avail;.      }
13910 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 63  .    }.    pC->c
13920 61 63 68 65 53 74 61 74 75 73 20 3d 20 70 2d 3e  acheStatus = p->
13930 63 61 63 68 65 43 74 72 3b 0a 20 20 20 20 70 43  cacheCtr;.    pC
13940 2d 3e 69 48 64 72 4f 66 66 73 65 74 20 3d 20 67  ->iHdrOffset = g
13950 65 74 56 61 72 69 6e 74 33 32 28 70 43 2d 3e 61  etVarint32(pC->a
13960 52 6f 77 2c 20 6f 66 66 73 65 74 29 3b 0a 20 20  Row, offset);.  
13970 20 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64    pC->nHdrParsed
13980 20 3d 20 30 3b 0a 20 20 20 20 61 4f 66 66 73 65   = 0;.    aOffse
13990 74 5b 30 5d 20 3d 20 6f 66 66 73 65 74 3b 0a 0a  t[0] = offset;..
139a0 0a 20 20 20 20 69 66 28 20 61 76 61 69 6c 3c 6f  .    if( avail<o
139b0 66 66 73 65 74 20 29 7b 20 20 20 20 20 20 2f 2a  ffset ){      /*
139c0 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d  OPTIMIZATION-IF-
139d0 46 41 4c 53 45 2a 2f 0a 20 20 20 20 20 20 2f 2a  FALSE*/.      /*
139e0 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e   pC->aRow does n
139f0 6f 74 20 68 61 76 65 20 74 6f 20 68 6f 6c 64 20  ot have to hold 
13a00 74 68 65 20 65 6e 74 69 72 65 20 72 6f 77 2c 20  the entire row, 
13a10 62 75 74 20 69 74 20 64 6f 65 73 20 61 74 20 6c  but it does at l
13a20 65 61 73 74 0a 20 20 20 20 20 20 2a 2a 20 6e 65  east.      ** ne
13a30 65 64 20 74 6f 20 63 6f 76 65 72 20 74 68 65 20  ed to cover the 
13a40 68 65 61 64 65 72 20 6f 66 20 74 68 65 20 72 65  header of the re
13a50 63 6f 72 64 2e 20 20 49 66 20 70 43 2d 3e 61 52  cord.  If pC->aR
13a60 6f 77 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74  ow does not cont
13a70 61 69 6e 0a 20 20 20 20 20 20 2a 2a 20 74 68 65  ain.      ** the
13a80 20 63 6f 6d 70 6c 65 74 65 20 68 65 61 64 65 72   complete header
13a90 2c 20 74 68 65 6e 20 73 65 74 20 69 74 20 74 6f  , then set it to
13aa0 20 7a 65 72 6f 2c 20 66 6f 72 63 69 6e 67 20 74   zero, forcing t
13ab0 68 65 20 68 65 61 64 65 72 20 74 6f 20 62 65 0a  he header to be.
13ac0 20 20 20 20 20 20 2a 2a 20 64 79 6e 61 6d 69 63        ** dynamic
13ad0 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20  ally allocated. 
13ae0 2a 2f 0a 20 20 20 20 20 20 70 43 2d 3e 61 52 6f  */.      pC->aRo
13af0 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 43 2d  w = 0;.      pC-
13b00 3e 73 7a 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 20  >szRow = 0;..   
13b10 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20     /* Make sure 
13b20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61  a corrupt databa
13b30 73 65 20 68 61 73 20 6e 6f 74 20 67 69 76 65 6e  se has not given
13b40 20 75 73 20 61 6e 20 6f 76 65 72 73 69 7a 65 20   us an oversize 
13b50 68 65 61 64 65 72 2e 0a 20 20 20 20 20 20 2a 2a  header..      **
13b60 20 44 6f 20 74 68 69 73 20 6e 6f 77 20 74 6f 20   Do this now to 
13b70 61 76 6f 69 64 20 61 6e 20 6f 76 65 72 73 69 7a  avoid an oversiz
13b80 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
13b90 69 6f 6e 2e 0a 20 20 20 20 20 20 2a 2a 0a 20 20  ion..      **.  
13ba0 20 20 20 20 2a 2a 20 54 79 70 65 20 65 6e 74 72      ** Type entr
13bb0 69 65 73 20 63 61 6e 20 62 65 20 62 65 74 77 65  ies can be betwe
13bc0 65 6e 20 31 20 61 6e 64 20 35 20 62 79 74 65 73  en 1 and 5 bytes
13bd0 20 65 61 63 68 2e 20 20 42 75 74 20 34 20 61 6e   each.  But 4 an
13be0 64 20 35 20 62 79 74 65 0a 20 20 20 20 20 20 2a  d 5 byte.      *
13bf0 2a 20 74 79 70 65 73 20 75 73 65 20 73 6f 20 6d  * types use so m
13c00 75 63 68 20 64 61 74 61 20 73 70 61 63 65 20 74  uch data space t
13c10 68 61 74 20 74 68 65 72 65 20 63 61 6e 20 6f 6e  hat there can on
13c20 6c 79 20 62 65 20 34 30 39 36 20 61 6e 64 20 33  ly be 4096 and 3
13c30 32 20 6f 66 0a 20 20 20 20 20 20 2a 2a 20 74 68  2 of.      ** th
13c40 65 6d 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  em, respectively
13c50 2e 20 20 53 6f 20 74 68 65 20 6d 61 78 69 6d 75  .  So the maximu
13c60 6d 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20  m header length 
13c70 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 61 0a 20  results from a. 
13c80 20 20 20 20 20 2a 2a 20 33 2d 62 79 74 65 20 74       ** 3-byte t
13c90 79 70 65 20 66 6f 72 20 65 61 63 68 20 6f 66 20  ype for each of 
13ca0 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 33  the maximum of 3
13cb0 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c 75  2768 columns plu
13cc0 73 20 74 68 72 65 65 0a 20 20 20 20 20 20 2a 2a  s three.      **
13cd0 20 65 78 74 72 61 20 62 79 74 65 73 20 66 6f 72   extra bytes for
13ce0 20 74 68 65 20 68 65 61 64 65 72 20 6c 65 6e 67   the header leng
13cf0 74 68 20 69 74 73 65 6c 66 2e 20 20 33 32 37 36  th itself.  3276
13d00 38 2a 33 20 2b 20 33 20 3d 20 39 38 33 30 37 2e  8*3 + 3 = 98307.
13d10 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
13d20 69 66 28 20 6f 66 66 73 65 74 20 3e 20 39 38 33  if( offset > 983
13d30 30 37 20 7c 7c 20 6f 66 66 73 65 74 20 3e 20 70  07 || offset > p
13d40 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 29  C->payloadSize )
13d50 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
13d60 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b  QLITE_CORRUPT_BK
13d70 50 54 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f  PT;.        goto
13d80 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
13d90 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
13da0 20 7d 65 6c 73 65 20 69 66 28 20 6f 66 66 73 65   }else if( offse
13db0 74 3e 30 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a  t>0 ){ /*OPTIMIZ
13dc0 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 2a 2f 0a  ATION-IF-TRUE*/.
13dd0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c        /* The fol
13de0 6c 6f 77 69 6e 67 20 67 6f 74 6f 20 69 73 20 61  lowing goto is a
13df0 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 20  n optimization. 
13e00 20 49 74 20 63 61 6e 20 62 65 20 6f 6d 69 74 74   It can be omitt
13e10 65 64 20 61 6e 64 0a 20 20 20 20 20 20 2a 2a 20  ed and.      ** 
13e20 65 76 65 72 79 74 68 69 6e 67 20 77 69 6c 6c 20  everything will 
13e30 73 74 69 6c 6c 20 77 6f 72 6b 2e 20 20 42 75 74  still work.  But
13e40 20 4f 50 5f 43 6f 6c 75 6d 6e 20 69 73 20 6d 65   OP_Column is me
13e50 61 73 75 72 61 62 6c 79 20 66 61 73 74 65 72 0a  asurably faster.
13e60 20 20 20 20 20 20 2a 2a 20 62 79 20 73 6b 69 70        ** by skip
13e70 70 69 6e 67 20 74 68 65 20 73 75 62 73 65 71 75  ping the subsequ
13e80 65 6e 74 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 2c  ent conditional,
13e90 20 77 68 69 63 68 20 69 73 20 61 6c 77 61 79 73   which is always
13ea0 20 74 72 75 65 2e 0a 20 20 20 20 20 20 2a 2f 0a   true..      */.
13eb0 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43        zData = pC
13ec0 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 20 20 61 73  ->aRow;.      as
13ed0 73 65 72 74 28 20 70 43 2d 3e 6e 48 64 72 50 61  sert( pC->nHdrPa
13ee0 72 73 65 64 3c 3d 70 32 20 29 3b 20 20 20 20 20  rsed<=p2 );     
13ef0 20 20 20 20 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e      /* Condition
13f00 61 6c 20 73 6b 69 70 70 65 64 20 2a 2f 0a 20 20  al skipped */.  
13f10 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
13f20 6d 6e 5f 72 65 61 64 5f 68 65 61 64 65 72 3b 0a  mn_read_header;.
13f30 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20      }.  }..  /* 
13f40 4d 61 6b 65 20 73 75 72 65 20 61 74 20 6c 65 61  Make sure at lea
13f50 73 74 20 74 68 65 20 66 69 72 73 74 20 70 32 2b  st the first p2+
13f60 31 20 65 6e 74 72 69 65 73 20 6f 66 20 74 68 65  1 entries of the
13f70 20 68 65 61 64 65 72 20 68 61 76 65 20 62 65 65   header have bee
13f80 6e 0a 20 20 2a 2a 20 70 61 72 73 65 64 20 61 6e  n.  ** parsed an
13f90 64 20 76 61 6c 69 64 20 69 6e 66 6f 72 6d 61 74  d valid informat
13fa0 69 6f 6e 20 69 73 20 69 6e 20 61 4f 66 66 73 65  ion is in aOffse
13fb0 74 5b 5d 20 61 6e 64 20 70 43 2d 3e 61 54 79 70  t[] and pC->aTyp
13fc0 65 5b 5d 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  e[]..  */.  if( 
13fd0 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d  pC->nHdrParsed<=
13fe0 70 32 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  p2 ){.    /* If 
13ff0 74 68 65 72 65 20 69 73 20 6d 6f 72 65 20 68 65  there is more he
14000 61 64 65 72 20 61 76 61 69 6c 61 62 6c 65 20 66  ader available f
14010 6f 72 20 70 61 72 73 69 6e 67 20 69 6e 20 74 68  or parsing in th
14020 65 20 72 65 63 6f 72 64 2c 20 74 72 79 0a 20 20  e record, try.  
14030 20 20 2a 2a 20 74 6f 20 65 78 74 72 61 63 74 20    ** to extract 
14040 61 64 64 69 74 69 6f 6e 61 6c 20 66 69 65 6c 64  additional field
14050 73 20 75 70 20 74 68 72 6f 75 67 68 20 74 68 65  s up through the
14060 20 70 32 2b 31 2d 74 68 20 66 69 65 6c 64 20 0a   p2+1-th field .
14070 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70      */.    if( p
14080 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 3c 61 4f  C->iHdrOffset<aO
14090 66 66 73 65 74 5b 30 5d 20 29 7b 0a 20 20 20 20  ffset[0] ){.    
140a0 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 7a    /* Make sure z
140b0 44 61 74 61 20 70 6f 69 6e 74 73 20 74 6f 20 65  Data points to e
140c0 6e 6f 75 67 68 20 6f 66 20 74 68 65 20 72 65 63  nough of the rec
140d0 6f 72 64 20 74 6f 20 63 6f 76 65 72 20 74 68 65  ord to cover the
140e0 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20 20 20 20   header. */.    
140f0 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d    if( pC->aRow==
14100 30 20 29 7b 0a 20 20 20 20 20 20 20 20 6d 65 6d  0 ){.        mem
14110 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69  set(&sMem, 0, si
14120 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 20  zeof(sMem));.   
14130 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
14140 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65  3VdbeMemFromBtre
14150 65 28 70 43 72 73 72 2c 20 30 2c 20 61 4f 66 66  e(pCrsr, 0, aOff
14160 73 65 74 5b 30 5d 2c 20 21 70 43 2d 3e 69 73 54  set[0], !pC->isT
14170 61 62 6c 65 2c 20 26 73 4d 65 6d 29 3b 0a 20 20  able, &sMem);.  
14180 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
14190 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
141a0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
141b0 72 3b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61  r;.        zData
141c0 20 3d 20 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a   = (u8*)sMem.z;.
141d0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
141e0 20 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d       zData = pC-
141f0 3e 61 52 6f 77 3b 0a 20 20 20 20 20 20 7d 0a 20  >aRow;.      }. 
14200 20 0a 20 20 20 20 20 20 2f 2a 20 46 69 6c 6c 20   .      /* Fill 
14210 69 6e 20 70 43 2d 3e 61 54 79 70 65 5b 69 5d 20  in pC->aType[i] 
14220 61 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d 20 76  and aOffset[i] v
14230 61 6c 75 65 73 20 74 68 72 6f 75 67 68 20 74 68  alues through th
14240 65 20 70 32 2d 74 68 20 66 69 65 6c 64 2e 20 2a  e p2-th field. *
14250 2f 0a 20 20 20 20 6f 70 5f 63 6f 6c 75 6d 6e 5f  /.    op_column_
14260 72 65 61 64 5f 68 65 61 64 65 72 3a 0a 20 20 20  read_header:.   
14270 20 20 20 69 20 3d 20 70 43 2d 3e 6e 48 64 72 50     i = pC->nHdrP
14280 61 72 73 65 64 3b 0a 20 20 20 20 20 20 6f 66 66  arsed;.      off
14290 73 65 74 36 34 20 3d 20 61 4f 66 66 73 65 74 5b  set64 = aOffset[
142a0 69 5d 3b 0a 20 20 20 20 20 20 7a 48 64 72 20 3d  i];.      zHdr =
142b0 20 7a 44 61 74 61 20 2b 20 70 43 2d 3e 69 48 64   zData + pC->iHd
142c0 72 4f 66 66 73 65 74 3b 0a 20 20 20 20 20 20 7a  rOffset;.      z
142d0 45 6e 64 48 64 72 20 3d 20 7a 44 61 74 61 20 2b  EndHdr = zData +
142e0 20 61 4f 66 66 73 65 74 5b 30 5d 3b 0a 20 20 20   aOffset[0];.   
142f0 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 69     do{.        i
14300 66 28 20 28 74 20 3d 20 7a 48 64 72 5b 30 5d 29  f( (t = zHdr[0])
14310 3c 30 78 38 30 20 29 7b 0a 20 20 20 20 20 20 20  <0x80 ){.       
14320 20 20 20 7a 48 64 72 2b 2b 3b 0a 20 20 20 20 20     zHdr++;.     
14330 20 20 20 20 20 6f 66 66 73 65 74 36 34 20 2b 3d       offset64 +=
14340 20 73 71 6c 69 74 65 33 56 64 62 65 4f 6e 65 42   sqlite3VdbeOneB
14350 79 74 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e  yteSerialTypeLen
14360 28 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  (t);.        }el
14370 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 48  se{.          zH
14380 64 72 20 2b 3d 20 73 71 6c 69 74 65 33 47 65 74  dr += sqlite3Get
14390 56 61 72 69 6e 74 33 32 28 7a 48 64 72 2c 20 26  Varint32(zHdr, &
143a0 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 66  t);.          of
143b0 66 73 65 74 36 34 20 2b 3d 20 73 71 6c 69 74 65  fset64 += sqlite
143c0 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c  3VdbeSerialTypeL
143d0 65 6e 28 74 29 3b 0a 20 20 20 20 20 20 20 20 7d  en(t);.        }
143e0 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 54 79  .        pC->aTy
143f0 70 65 5b 69 2b 2b 5d 20 3d 20 74 3b 0a 20 20 20  pe[i++] = t;.   
14400 20 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20       aOffset[i] 
14410 3d 20 28 75 33 32 29 28 6f 66 66 73 65 74 36 34  = (u32)(offset64
14420 20 26 20 30 78 66 66 66 66 66 66 66 66 29 3b 0a   & 0xffffffff);.
14430 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20 69 3c        }while( i<
14440 3d 70 32 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64  =p2 && zHdr<zEnd
14450 48 64 72 20 29 3b 0a 0a 20 20 20 20 20 20 2f 2a  Hdr );..      /*
14460 20 54 68 65 20 72 65 63 6f 72 64 20 69 73 20 63   The record is c
14470 6f 72 72 75 70 74 20 69 66 20 61 6e 79 20 6f 66  orrupt if any of
14480 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   the following a
14490 72 65 20 74 72 75 65 3a 0a 20 20 20 20 20 20 2a  re true:.      *
144a0 2a 20 28 31 29 20 74 68 65 20 62 79 74 65 73 20  * (1) the bytes 
144b0 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 65 78  of the header ex
144c0 74 65 6e 64 20 70 61 73 74 20 74 68 65 20 64 65  tend past the de
144d0 63 6c 61 72 65 64 20 68 65 61 64 65 72 20 73 69  clared header si
144e0 7a 65 0a 20 20 20 20 20 20 2a 2a 20 28 32 29 20  ze.      ** (2) 
144f0 74 68 65 20 65 6e 74 69 72 65 20 68 65 61 64 65  the entire heade
14500 72 20 77 61 73 20 75 73 65 64 20 62 75 74 20 6e  r was used but n
14510 6f 74 20 61 6c 6c 20 64 61 74 61 20 77 61 73 20  ot all data was 
14520 75 73 65 64 0a 20 20 20 20 20 20 2a 2a 20 28 33  used.      ** (3
14530 29 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  ) the end of the
14540 20 64 61 74 61 20 65 78 74 65 6e 64 73 20 62 65   data extends be
14550 79 6f 6e 64 20 74 68 65 20 65 6e 64 20 6f 66 20  yond the end of 
14560 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20 20  the record..    
14570 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28    */.      if( (
14580 7a 48 64 72 3e 3d 7a 45 6e 64 48 64 72 20 26 26  zHdr>=zEndHdr &&
14590 20 28 7a 48 64 72 3e 7a 45 6e 64 48 64 72 20 7c   (zHdr>zEndHdr |
145a0 7c 20 6f 66 66 73 65 74 36 34 21 3d 70 43 2d 3e  | offset64!=pC->
145b0 70 61 79 6c 6f 61 64 53 69 7a 65 29 29 0a 20 20  payloadSize)).  
145c0 20 20 20 20 20 7c 7c 20 28 6f 66 66 73 65 74 36       || (offset6
145d0 34 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53  4 > pC->payloadS
145e0 69 7a 65 29 0a 20 20 20 20 20 20 29 7b 0a 20 20  ize).      ){.  
145f0 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52        if( pC->aR
14600 6f 77 3d 3d 30 20 29 20 73 71 6c 69 74 65 33 56  ow==0 ) sqlite3V
14610 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73  dbeMemRelease(&s
14620 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 72 63  Mem);.        rc
14630 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50   = SQLITE_CORRUP
14640 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 20 20  T_BKPT;.        
14650 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
14660 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
14670 0a 0a 20 20 20 20 20 20 70 43 2d 3e 6e 48 64 72  ..      pC->nHdr
14680 50 61 72 73 65 64 20 3d 20 69 3b 0a 20 20 20 20  Parsed = i;.    
14690 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74    pC->iHdrOffset
146a0 20 3d 20 28 75 33 32 29 28 7a 48 64 72 20 2d 20   = (u32)(zHdr - 
146b0 7a 44 61 74 61 29 3b 0a 20 20 20 20 20 20 69 66  zData);.      if
146c0 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 20  ( pC->aRow==0 ) 
146d0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
146e0 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20  lease(&sMem);.  
146f0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 74    }else{.      t
14700 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 0a 20 20 20   = 0;.    }..   
14710 20 2f 2a 20 49 66 20 61 66 74 65 72 20 74 72 79   /* If after try
14720 69 6e 67 20 74 6f 20 65 78 74 72 61 63 74 20 6e  ing to extract n
14730 65 77 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20  ew entries from 
14740 74 68 65 20 68 65 61 64 65 72 2c 20 6e 48 64 72  the header, nHdr
14750 50 61 72 73 65 64 20 69 73 0a 20 20 20 20 2a 2a  Parsed is.    **
14760 20 73 74 69 6c 6c 20 6e 6f 74 20 75 70 20 74 6f   still not up to
14770 20 70 32 2c 20 74 68 61 74 20 6d 65 61 6e 73 20   p2, that means 
14780 74 68 61 74 20 74 68 65 20 72 65 63 6f 72 64 20  that the record 
14790 68 61 73 20 66 65 77 65 72 20 74 68 61 6e 20 70  has fewer than p
147a0 32 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 73  2.    ** columns
147b0 2e 20 20 53 6f 20 74 68 65 20 72 65 73 75 6c 74  .  So the result
147c0 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72 20   will be either 
147d0 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  the default valu
147e0 65 20 6f 72 20 61 20 4e 55 4c 4c 2e 0a 20 20 20  e or a NULL..   
147f0 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d 3e   */.    if( pC->
14800 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29  nHdrParsed<=p2 )
14810 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  {.      if( pOp-
14820 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20  >p4type==P4_MEM 
14830 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
14840 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
14850 43 6f 70 79 28 70 44 65 73 74 2c 20 70 4f 70 2d  Copy(pDest, pOp-
14860 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74  >p4.pMem, MEM_St
14870 61 74 69 63 29 3b 0a 20 20 20 20 20 20 7d 65 6c  atic);.      }el
14880 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  se{.        sqli
14890 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
148a0 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20  l(pDest);.      
148b0 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f  }.      goto op_
148c0 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20  column_out;.    
148d0 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 74  }.  }else{.    t
148e0 20 3d 20 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d   = pC->aType[p2]
148f0 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 45 78 74 72  ;.  }..  /* Extr
14900 61 63 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  act the content 
14910 66 6f 72 20 74 68 65 20 70 32 2b 31 2d 74 68 20  for the p2+1-th 
14920 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6e 74 72 6f 6c  column.  Control
14930 20 63 61 6e 20 6f 6e 6c 79 0a 20 20 2a 2a 20 72   can only.  ** r
14940 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74 20  each this point 
14950 69 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20  if aOffset[p2], 
14960 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d 2c 20 61  aOffset[p2+1], a
14970 6e 64 20 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d  nd pC->aType[p2]
14980 20 61 72 65 0a 20 20 2a 2a 20 61 6c 6c 20 76 61   are.  ** all va
14990 6c 69 64 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65  lid..  */.  asse
149a0 72 74 28 20 70 32 3c 70 43 2d 3e 6e 48 64 72 50  rt( p2<pC->nHdrP
149b0 61 72 73 65 64 20 29 3b 0a 20 20 61 73 73 65 72  arsed );.  asser
149c0 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
149d0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71   );.  assert( sq
149e0 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65  lite3VdbeCheckMe
149f0 6d 49 6e 76 61 72 69 61 6e 74 73 28 70 44 65 73  mInvariants(pDes
14a00 74 29 20 29 3b 0a 20 20 69 66 28 20 56 64 62 65  t) );.  if( Vdbe
14a10 4d 65 6d 44 79 6e 61 6d 69 63 28 70 44 65 73 74  MemDynamic(pDest
14a20 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  ) ){.    sqlite3
14a30 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
14a40 44 65 73 74 29 3b 0a 20 20 7d 0a 20 20 61 73 73  Dest);.  }.  ass
14a50 65 72 74 28 20 74 3d 3d 70 43 2d 3e 61 54 79 70  ert( t==pC->aTyp
14a60 65 5b 70 32 5d 20 29 3b 0a 20 20 69 66 28 20 70  e[p2] );.  if( p
14a70 43 2d 3e 73 7a 52 6f 77 3e 3d 61 4f 66 66 73 65  C->szRow>=aOffse
14a80 74 5b 70 32 2b 31 5d 20 29 7b 0a 20 20 20 20 2f  t[p2+1] ){.    /
14a90 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 63 6f  * This is the co
14aa0 6d 6d 6f 6e 20 63 61 73 65 20 77 68 65 72 65 20  mmon case where 
14ab0 74 68 65 20 64 65 73 69 72 65 64 20 63 6f 6e 74  the desired cont
14ac0 65 6e 74 20 66 69 74 73 20 6f 6e 20 74 68 65 20  ent fits on the 
14ad0 6f 72 69 67 69 6e 61 6c 0a 20 20 20 20 2a 2a 20  original.    ** 
14ae0 70 61 67 65 20 2d 20 77 68 65 72 65 20 74 68 65  page - where the
14af0 20 63 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20   content is not 
14b00 6f 6e 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20 70  on an overflow p
14b10 61 67 65 20 2a 2f 0a 20 20 20 20 7a 44 61 74 61  age */.    zData
14b20 20 3d 20 70 43 2d 3e 61 52 6f 77 20 2b 20 61 4f   = pC->aRow + aO
14b30 66 66 73 65 74 5b 70 32 5d 3b 0a 20 20 20 20 69  ffset[p2];.    i
14b40 66 28 20 74 3c 31 32 20 29 7b 0a 20 20 20 20 20  f( t<12 ){.     
14b50 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
14b60 61 6c 47 65 74 28 7a 44 61 74 61 2c 20 74 2c 20  alGet(zData, t, 
14b70 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73  pDest);.    }els
14b80 65 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74  e{.      /* If t
14b90 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20  he column value 
14ba0 69 73 20 61 20 73 74 72 69 6e 67 2c 20 77 65 20  is a string, we 
14bb0 6e 65 65 64 20 61 20 70 65 72 73 69 73 74 65 6e  need a persisten
14bc0 74 20 76 61 6c 75 65 2c 20 6e 6f 74 0a 20 20 20  t value, not.   
14bd0 20 20 20 2a 2a 20 61 20 4d 45 4d 5f 45 70 68 65     ** a MEM_Ephe
14be0 6d 20 76 61 6c 75 65 2e 20 20 54 68 69 73 20 62  m value.  This b
14bf0 72 61 6e 63 68 20 69 73 20 61 20 66 61 73 74 20  ranch is a fast 
14c00 73 68 6f 72 74 2d 63 75 74 20 74 68 61 74 20 69  short-cut that i
14c10 73 20 65 71 75 69 76 61 6c 65 6e 74 0a 20 20 20  s equivalent.   
14c20 20 20 20 2a 2a 20 74 6f 20 63 61 6c 6c 69 6e 67     ** to calling
14c30 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
14c40 61 6c 47 65 74 28 29 20 61 6e 64 20 73 71 6c 69  alGet() and sqli
14c50 74 65 33 56 64 62 65 44 65 65 70 68 65 6d 65 72  te3VdbeDeephemer
14c60 61 6c 69 7a 65 28 29 2e 0a 20 20 20 20 20 20 2a  alize()..      *
14c70 2f 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63  /.      static c
14c80 6f 6e 73 74 20 75 31 36 20 61 46 6c 61 67 5b 5d  onst u16 aFlag[]
14c90 20 3d 20 7b 20 4d 45 4d 5f 42 6c 6f 62 2c 20 4d   = { MEM_Blob, M
14ca0 45 4d 5f 53 74 72 7c 4d 45 4d 5f 54 65 72 6d 20  EM_Str|MEM_Term 
14cb0 7d 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e  };.      pDest->
14cc0 6e 20 3d 20 6c 65 6e 20 3d 20 28 74 2d 31 32 29  n = len = (t-12)
14cd0 2f 32 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d  /2;.      pDest-
14ce0 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b  >enc = encoding;
14cf0 0a 20 20 20 20 20 20 69 66 28 20 70 44 65 73 74  .      if( pDest
14d00 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3c 20 6c 65 6e  ->szMalloc < len
14d10 2b 32 20 29 7b 0a 20 20 20 20 20 20 20 20 70 44  +2 ){.        pD
14d20 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  est->flags = MEM
14d30 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _Null;.        i
14d40 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
14d50 6d 47 72 6f 77 28 70 44 65 73 74 2c 20 6c 65 6e  mGrow(pDest, len
14d60 2b 32 2c 20 30 29 20 29 20 67 6f 74 6f 20 6e 6f  +2, 0) ) goto no
14d70 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65 6c 73  _mem;.      }els
14d80 65 7b 0a 20 20 20 20 20 20 20 20 70 44 65 73 74  e{.        pDest
14d90 2d 3e 7a 20 3d 20 70 44 65 73 74 2d 3e 7a 4d 61  ->z = pDest->zMa
14da0 6c 6c 6f 63 3b 0a 20 20 20 20 20 20 7d 0a 20 20  lloc;.      }.  
14db0 20 20 20 20 6d 65 6d 63 70 79 28 70 44 65 73 74      memcpy(pDest
14dc0 2d 3e 7a 2c 20 7a 44 61 74 61 2c 20 6c 65 6e 29  ->z, zData, len)
14dd0 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 7a  ;.      pDest->z
14de0 5b 6c 65 6e 5d 20 3d 20 30 3b 0a 20 20 20 20 20  [len] = 0;.     
14df0 20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 2b 31 5d   pDest->z[len+1]
14e00 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 44 65 73   = 0;.      pDes
14e10 74 2d 3e 66 6c 61 67 73 20 3d 20 61 46 6c 61 67  t->flags = aFlag
14e20 5b 74 26 31 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d  [t&1];.    }.  }
14e30 65 6c 73 65 7b 0a 20 20 20 20 70 44 65 73 74 2d  else{.    pDest-
14e40 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b  >enc = encoding;
14e50 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 62 72 61  .    /* This bra
14e60 6e 63 68 20 68 61 70 70 65 6e 73 20 6f 6e 6c 79  nch happens only
14e70 20 77 68 65 6e 20 63 6f 6e 74 65 6e 74 20 69 73   when content is
14e80 20 6f 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67   on overflow pag
14e90 65 73 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 28  es */.    if( ((
14ea0 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41  pOp->p5 & (OPFLA
14eb0 47 5f 4c 45 4e 47 54 48 41 52 47 7c 4f 50 46 4c  G_LENGTHARG|OPFL
14ec0 41 47 5f 54 59 50 45 4f 46 41 52 47 29 29 21 3d  AG_TYPEOFARG))!=
14ed0 30 0a 20 20 20 20 20 20 20 20 20 20 26 26 20 28  0.          && (
14ee0 28 74 3e 3d 31 32 20 26 26 20 28 74 26 31 29 3d  (t>=12 && (t&1)=
14ef0 3d 30 29 20 7c 7c 20 28 70 4f 70 2d 3e 70 35 20  =0) || (pOp->p5 
14f00 26 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41  & OPFLAG_TYPEOFA
14f10 52 47 29 21 3d 30 29 29 0a 20 20 20 20 20 7c 7c  RG)!=0)).     ||
14f20 20 28 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56   (len = sqlite3V
14f30 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e  dbeSerialTypeLen
14f40 28 74 29 29 3d 3d 30 0a 20 20 20 20 29 7b 0a 20  (t))==0.    ){. 
14f50 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 6e 74 20       /* Content 
14f60 69 73 20 69 72 72 65 6c 65 76 61 6e 74 20 66 6f  is irrelevant fo
14f70 72 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 31 2e  r.      **    1.
14f80 20 74 68 65 20 74 79 70 65 6f 66 28 29 20 66 75   the typeof() fu
14f90 6e 63 74 69 6f 6e 2c 0a 20 20 20 20 20 20 2a 2a  nction,.      **
14fa0 20 20 20 20 32 2e 20 74 68 65 20 6c 65 6e 67 74      2. the lengt
14fb0 68 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 66  h(X) function if
14fc0 20 58 20 69 73 20 61 20 62 6c 6f 62 2c 20 61 6e   X is a blob, an
14fd0 64 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 33 2e  d.      **    3.
14fe0 20 69 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   if the content 
14ff0 6c 65 6e 67 74 68 20 69 73 20 7a 65 72 6f 2e 0a  length is zero..
15000 20 20 20 20 20 20 2a 2a 20 53 6f 20 77 65 20 6d        ** So we m
15010 69 67 68 74 20 61 73 20 77 65 6c 6c 20 75 73 65  ight as well use
15020 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74 20 72   bogus content r
15030 61 74 68 65 72 20 74 68 61 6e 20 72 65 61 64 69  ather than readi
15040 6e 67 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e 74  ng.      ** cont
15050 65 6e 74 20 66 72 6f 6d 20 64 69 73 6b 2e 20 2a  ent from disk. *
15060 2f 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 75  /.      static u
15070 38 20 61 5a 65 72 6f 5b 38 5d 3b 20 20 2f 2a 20  8 aZero[8];  /* 
15080 54 68 69 73 20 69 73 20 74 68 65 20 62 6f 67 75  This is the bogu
15090 73 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 20  s content */.   
150a0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
150b0 72 69 61 6c 47 65 74 28 61 5a 65 72 6f 2c 20 74  rialGet(aZero, t
150c0 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65  , pDest);.    }e
150d0 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  lse{.      rc = 
150e0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72  sqlite3VdbeMemFr
150f0 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 61  omBtree(pCrsr, a
15100 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c  Offset[p2], len,
15110 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 2c 0a 20   !pC->isTable,. 
15120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15140 20 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20    pDest);.      
15150 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
15160 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
15170 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
15180 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
15190 72 69 61 6c 47 65 74 28 28 63 6f 6e 73 74 20 75  rialGet((const u
151a0 38 2a 29 70 44 65 73 74 2d 3e 7a 2c 20 74 2c 20  8*)pDest->z, t, 
151b0 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 70 44  pDest);.      pD
151c0 65 73 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d  est->flags &= ~M
151d0 45 4d 5f 45 70 68 65 6d 3b 0a 20 20 20 20 7d 0a  EM_Ephem;.    }.
151e0 20 20 7d 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f    }..op_column_o
151f0 75 74 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  ut:.  UPDATE_MAX
15200 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29  _BLOBSIZE(pDest)
15210 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
15220 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73  CE(pOp->p3, pDes
15230 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
15240 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e  /* Opcode: Affin
15250 69 74 79 20 50 31 20 50 32 20 2a 20 50 34 20 2a  ity P1 P2 * P4 *
15260 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 66  .** Synopsis: af
15270 66 69 6e 69 74 79 28 72 5b 50 31 40 50 32 5d 29  finity(r[P1@P2])
15280 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66  .**.** Apply aff
15290 69 6e 69 74 69 65 73 20 74 6f 20 61 20 72 61 6e  inities to a ran
152a0 67 65 20 6f 66 20 50 32 20 72 65 67 69 73 74 65  ge of P2 registe
152b0 72 73 20 73 74 61 72 74 69 6e 67 20 77 69 74 68  rs starting with
152c0 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73   P1..**.** P4 is
152d0 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 69   a string that i
152e0 73 20 50 32 20 63 68 61 72 61 63 74 65 72 73 20  s P2 characters 
152f0 6c 6f 6e 67 2e 20 54 68 65 20 6e 74 68 20 63 68  long. The nth ch
15300 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a  aracter of the.*
15310 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74  * string indicat
15320 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66  es the column af
15330 66 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75  finity that shou
15340 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72 20 74  ld be used for t
15350 68 65 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79  he nth.** memory
15360 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e   cell in the ran
15370 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  ge..*/.case OP_A
15380 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20 63 6f 6e  ffinity: {.  con
15390 73 74 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69  st char *zAffini
153a0 74 79 3b 20 20 20 2f 2a 20 54 68 65 20 61 66 66  ty;   /* The aff
153b0 69 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c  inity to be appl
153c0 69 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 63 41  ied */.  char cA
153d0 66 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ff;             
153e0 20 20 2f 2a 20 41 20 73 69 6e 67 6c 65 20 63 68    /* A single ch
153f0 61 72 61 63 74 65 72 20 6f 66 20 61 66 66 69 6e  aracter of affin
15400 69 74 79 20 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e  ity */..  zAffin
15410 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  ity = pOp->p4.z;
15420 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69  .  assert( zAffi
15430 6e 69 74 79 21 3d 30 20 29 3b 0a 20 20 61 73 73  nity!=0 );.  ass
15440 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79 5b 70  ert( zAffinity[p
15450 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29 3b 0a 20 20  Op->p2]==0 );.  
15460 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
15470 2d 3e 70 31 5d 3b 0a 20 20 77 68 69 6c 65 28 20  ->p1];.  while( 
15480 28 63 41 66 66 20 3d 20 2a 28 7a 41 66 66 69 6e  (cAff = *(zAffin
15490 69 74 79 2b 2b 29 29 21 3d 30 20 29 7b 0a 20 20  ity++))!=0 ){.  
154a0 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 20 3c    assert( pIn1 <
154b0 3d 20 26 70 2d 3e 61 4d 65 6d 5b 28 70 2d 3e 6e  = &p->aMem[(p->n
154c0 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
154d0 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65  or)] );.    asse
154e0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
154f0 49 6e 31 29 20 29 3b 0a 20 20 20 20 61 70 70 6c  In1) );.    appl
15500 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20  yAffinity(pIn1, 
15510 63 41 66 66 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  cAff, encoding);
15520 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d  .    pIn1++;.  }
15530 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
15540 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52 65 63 6f  Opcode: MakeReco
15550 72 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  rd P1 P2 P3 P4 *
15560 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
15570 50 33 5d 3d 6d 6b 72 65 63 28 72 5b 50 31 40 50  P3]=mkrec(r[P1@P
15580 32 5d 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76 65 72  2]).**.** Conver
15590 74 20 50 32 20 72 65 67 69 73 74 65 72 73 20 62  t P2 registers b
155a0 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 31  eginning with P1
155b0 20 69 6e 74 6f 20 74 68 65 20 5b 72 65 63 6f 72   into the [recor
155c0 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20 75 73 65  d format].** use
155d0 20 61 73 20 61 20 64 61 74 61 20 72 65 63 6f 72   as a data recor
155e0 64 20 69 6e 20 61 20 64 61 74 61 62 61 73 65 20  d in a database 
155f0 74 61 62 6c 65 20 6f 72 20 61 73 20 61 20 6b 65  table or as a ke
15600 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64 65 78  y.** in an index
15610 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e  .  The OP_Column
15620 20 6f 70 63 6f 64 65 20 63 61 6e 20 64 65 63 6f   opcode can deco
15630 64 65 20 74 68 65 20 72 65 63 6f 72 64 20 6c 61  de the record la
15640 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61  ter..**.** P4 ma
15650 79 20 62 65 20 61 20 73 74 72 69 6e 67 20 74 68  y be a string th
15660 61 74 20 69 73 20 50 32 20 63 68 61 72 61 63 74  at is P2 charact
15670 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20 6e  ers long.  The n
15680 74 68 20 63 68 61 72 61 63 74 65 72 20 6f 66 20  th character of 
15690 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e  the.** string in
156a0 64 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75  dicates the colu
156b0 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61 74  mn affinity that
156c0 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20   should be used 
156d0 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 66  for the nth.** f
156e0 69 65 6c 64 20 6f 66 20 74 68 65 20 69 6e 64 65  ield of the inde
156f0 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  x key..**.** The
15700 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20 63 68   mapping from ch
15710 61 72 61 63 74 65 72 20 74 6f 20 61 66 66 69 6e  aracter to affin
15720 69 74 79 20 69 73 20 67 69 76 65 6e 20 62 79 20  ity is given by 
15730 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 0a  the SQLITE_AFF_.
15740 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65  ** macros define
15750 64 20 69 6e 20 73 71 6c 69 74 65 49 6e 74 2e 68  d in sqliteInt.h
15760 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73  ..**.** If P4 is
15770 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c 6c 20 69   NULL then all i
15780 6e 64 65 78 20 66 69 65 6c 64 73 20 68 61 76 65  ndex fields have
15790 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 42 4c   the affinity BL
157a0 4f 42 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  OB..*/.case OP_M
157b0 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a 20 20 75  akeRecord: {.  u
157c0 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b 20 20  8 *zNewRecord;  
157d0 20 20 20 20 20 20 2f 2a 20 41 20 62 75 66 66 65        /* A buffe
157e0 72 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 61  r to hold the da
157f0 74 61 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72  ta for the new r
15800 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  ecord */.  Mem *
15810 70 52 65 63 3b 20 20 20 20 20 20 20 20 20 20 20  pRec;           
15820 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 65 63    /* The new rec
15830 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e 44 61  ord */.  u64 nDa
15840 74 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ta;             
15850 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
15860 65 73 20 6f 66 20 64 61 74 61 20 73 70 61 63 65  es of data space
15870 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72 3b 20   */.  int nHdr; 
15880 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15890 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
158a0 6f 66 20 68 65 61 64 65 72 20 73 70 61 63 65 20  of header space 
158b0 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 20  */.  i64 nByte; 
158c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
158d0 61 74 61 20 73 70 61 63 65 20 72 65 71 75 69 72  ata space requir
158e0 65 64 20 66 6f 72 20 74 68 69 73 20 72 65 63 6f  ed for this reco
158f0 72 64 20 2a 2f 0a 20 20 69 36 34 20 6e 5a 65 72  rd */.  i64 nZer
15900 6f 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  o;             /
15910 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f  * Number of zero
15920 20 62 79 74 65 73 20 61 74 20 74 68 65 20 65 6e   bytes at the en
15930 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  d of the record 
15940 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69 6e 74  */.  int nVarint
15950 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
15960 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
15970 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a 20 20  n a varint */.  
15980 75 33 32 20 73 65 72 69 61 6c 5f 74 79 70 65 3b  u32 serial_type;
15990 20 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 66         /* Type f
159a0 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ield */.  Mem *p
159b0 44 61 74 61 30 3b 20 20 20 20 20 20 20 20 20 20  Data0;          
159c0 20 2f 2a 20 46 69 72 73 74 20 66 69 65 6c 64 20   /* First field 
159d0 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64 20 69  to be combined i
159e0 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20 2a  nto the record *
159f0 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74 3b 20  /.  Mem *pLast; 
15a00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61             /* La
15a10 73 74 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20  st field of the 
15a20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
15a30 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20  nField;         
15a40 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
15a50 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65  fields in the re
15a60 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  cord */.  char *
15a70 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20  zAffinity;      
15a80 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79   /* The affinity
15a90 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20   string for the 
15aa0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
15ab0 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20  file_format;    
15ac0 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d 61     /* File forma
15ad0 74 20 74 6f 20 75 73 65 20 66 6f 72 20 65 6e 63  t to use for enc
15ae0 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69  oding */.  int i
15af0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
15b00 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20    /* Space used 
15b10 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20  in zNewRecord[] 
15b20 68 65 61 64 65 72 20 2a 2f 0a 20 20 69 6e 74 20  header */.  int 
15b30 6a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  j;              
15b40 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64     /* Space used
15b50 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d   in zNewRecord[]
15b60 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 75 33   content */.  u3
15b70 32 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20  2 len;          
15b80 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f       /* Length o
15b90 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a 0a 20 20  f a field */..  
15ba0 2f 2a 20 41 73 73 75 6d 69 6e 67 20 74 68 65 20  /* Assuming the 
15bb0 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20  record contains 
15bc0 4e 20 66 69 65 6c 64 73 2c 20 74 68 65 20 72 65  N fields, the re
15bd0 63 6f 72 64 20 66 6f 72 6d 61 74 20 6c 6f 6f 6b  cord format look
15be0 73 0a 20 20 2a 2a 20 6c 69 6b 65 20 74 68 69 73  s.  ** like this
15bf0 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d  :.  **.  ** ----
15c00 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15c10 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15c20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15c30 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15c40 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64 72 2d  ----.  ** | hdr-
15c50 73 69 7a 65 20 7c 20 74 79 70 65 20 30 20 7c 20  size | type 0 | 
15c60 74 79 70 65 20 31 20 7c 20 2e 2e 2e 20 7c 20 74  type 1 | ... | t
15c70 79 70 65 20 4e 2d 31 20 7c 20 64 61 74 61 30 20  ype N-1 | data0 
15c80 7c 20 2e 2e 2e 20 7c 20 64 61 74 61 20 4e 2d 31  | ... | data N-1
15c90 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d   | .  ** -------
15ca0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15cb0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15cc0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15cd0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15ce0 2d 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 61 74 61  -.  **.  ** Data
15cf0 28 30 29 20 69 73 20 74 61 6b 65 6e 20 66 72 6f  (0) is taken fro
15d00 6d 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  m register P1.  
15d10 44 61 74 61 28 31 29 20 63 6f 6d 65 73 20 66 72  Data(1) comes fr
15d20 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2b 31  om register P1+1
15d30 0a 20 20 2a 2a 20 61 6e 64 20 73 6f 20 66 6f 72  .  ** and so for
15d40 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45 61  th..  **.  ** Ea
15d50 63 68 20 74 79 70 65 20 66 69 65 6c 64 20 69 73  ch type field is
15d60 20 61 20 76 61 72 69 6e 74 20 72 65 70 72 65 73   a varint repres
15d70 65 6e 74 69 6e 67 20 74 68 65 20 73 65 72 69 61  enting the seria
15d80 6c 20 74 79 70 65 20 6f 66 20 74 68 65 20 0a 20  l type of the . 
15d90 20 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e   ** correspondin
15da0 67 20 64 61 74 61 20 65 6c 65 6d 65 6e 74 20 28  g data element (
15db0 73 65 65 20 73 71 6c 69 74 65 33 56 64 62 65 53  see sqlite3VdbeS
15dc0 65 72 69 61 6c 54 79 70 65 28 29 29 2e 20 54 68  erialType()). Th
15dd0 65 0a 20 20 2a 2a 20 68 64 72 2d 73 69 7a 65 20  e.  ** hdr-size 
15de0 66 69 65 6c 64 20 69 73 20 61 6c 73 6f 20 61 20  field is also a 
15df0 76 61 72 69 6e 74 20 77 68 69 63 68 20 69 73 20  varint which is 
15e00 74 68 65 20 6f 66 66 73 65 74 20 66 72 6f 6d 20  the offset from 
15e10 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20  the beginning.  
15e20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  ** of the record
15e30 20 74 6f 20 64 61 74 61 30 2e 0a 20 20 2a 2f 0a   to data0..  */.
15e40 20 20 6e 44 61 74 61 20 3d 20 30 3b 20 20 20 20    nData = 0;    
15e50 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
15e60 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20  f bytes of data 
15e70 73 70 61 63 65 20 2a 2f 0a 20 20 6e 48 64 72 20  space */.  nHdr 
15e80 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  = 0;          /*
15e90 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
15ea0 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63 65   of header space
15eb0 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20 30 3b   */.  nZero = 0;
15ec0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
15ed0 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73  er of zero bytes
15ee0 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
15ef0 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 6e  he record */.  n
15f00 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 31 3b  Field = pOp->p1;
15f10 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70  .  zAffinity = p
15f20 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65  Op->p4.z;.  asse
15f30 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 26 26 20  rt( nField>0 && 
15f40 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70  pOp->p2>0 && pOp
15f50 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d 28 70 2d  ->p2+nField<=(p-
15f60 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
15f70 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 70 44 61  rsor)+1 );.  pDa
15f80 74 61 30 20 3d 20 26 61 4d 65 6d 5b 6e 46 69 65  ta0 = &aMem[nFie
15f90 6c 64 5d 3b 0a 20 20 6e 46 69 65 6c 64 20 3d 20  ld];.  nField = 
15fa0 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 4c 61 73 74  pOp->p2;.  pLast
15fb0 20 3d 20 26 70 44 61 74 61 30 5b 6e 46 69 65 6c   = &pData0[nFiel
15fc0 64 2d 31 5d 3b 0a 20 20 66 69 6c 65 5f 66 6f 72  d-1];.  file_for
15fd0 6d 61 74 20 3d 20 70 2d 3e 6d 69 6e 57 72 69 74  mat = p->minWrit
15fe0 65 46 69 6c 65 46 6f 72 6d 61 74 3b 0a 0a 20 20  eFileFormat;..  
15ff0 2f 2a 20 49 64 65 6e 74 69 66 79 20 74 68 65 20  /* Identify the 
16000 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20  output register 
16010 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
16020 2d 3e 70 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20  ->p3<pOp->p1 || 
16030 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31  pOp->p3>=pOp->p1
16040 2b 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 70 4f  +pOp->p2 );.  pO
16050 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
16060 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p3];.  memAboutT
16070 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
16080 3b 0a 0a 20 20 2f 2a 20 41 70 70 6c 79 20 74 68  ;..  /* Apply th
16090 65 20 72 65 71 75 65 73 74 65 64 20 61 66 66 69  e requested affi
160a0 6e 69 74 79 20 74 6f 20 61 6c 6c 20 69 6e 70 75  nity to all inpu
160b0 74 73 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  ts.  */.  assert
160c0 28 20 70 44 61 74 61 30 3c 3d 70 4c 61 73 74 20  ( pData0<=pLast 
160d0 29 3b 0a 20 20 69 66 28 20 7a 41 66 66 69 6e 69  );.  if( zAffini
160e0 74 79 20 29 7b 0a 20 20 20 20 70 52 65 63 20 3d  ty ){.    pRec =
160f0 20 70 44 61 74 61 30 3b 0a 20 20 20 20 64 6f 7b   pData0;.    do{
16100 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66 66 69  .      applyAffi
16110 6e 69 74 79 28 70 52 65 63 2b 2b 2c 20 2a 28 7a  nity(pRec++, *(z
16120 41 66 66 69 6e 69 74 79 2b 2b 29 2c 20 65 6e 63  Affinity++), enc
16130 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20 20 61 73  oding);.      as
16140 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79 5b  sert( zAffinity[
16150 30 5d 3d 3d 30 20 7c 7c 20 70 52 65 63 3c 3d 70  0]==0 || pRec<=p
16160 4c 61 73 74 20 29 3b 0a 20 20 20 20 7d 77 68 69  Last );.    }whi
16170 6c 65 28 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d  le( zAffinity[0]
16180 20 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4c 6f   );.  }..  /* Lo
16190 6f 70 20 74 68 72 6f 75 67 68 20 74 68 65 20 65  op through the e
161a0 6c 65 6d 65 6e 74 73 20 74 68 61 74 20 77 69 6c  lements that wil
161b0 6c 20 6d 61 6b 65 20 75 70 20 74 68 65 20 72 65  l make up the re
161c0 63 6f 72 64 20 74 6f 20 66 69 67 75 72 65 0a 20  cord to figure. 
161d0 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d 75 63 68   ** out how much
161e0 20 73 70 61 63 65 20 69 73 20 72 65 71 75 69 72   space is requir
161f0 65 64 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72  ed for the new r
16200 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20 70 52  ecord..  */.  pR
16210 65 63 20 3d 20 70 4c 61 73 74 3b 0a 20 20 64 6f  ec = pLast;.  do
16220 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  {.    assert( me
16230 6d 49 73 56 61 6c 69 64 28 70 52 65 63 29 20 29  mIsValid(pRec) )
16240 3b 0a 20 20 20 20 70 52 65 63 2d 3e 75 54 65 6d  ;.    pRec->uTem
16250 70 20 3d 20 73 65 72 69 61 6c 5f 74 79 70 65 20  p = serial_type 
16260 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
16270 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69  ialType(pRec, fi
16280 6c 65 5f 66 6f 72 6d 61 74 2c 20 26 6c 65 6e 29  le_format, &len)
16290 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e  ;.    if( pRec->
162a0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f  flags & MEM_Zero
162b0 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e 44   ){.      if( nD
162c0 61 74 61 20 29 7b 0a 20 20 20 20 20 20 20 20 69  ata ){.        i
162d0 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
162e0 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63  mExpandBlob(pRec
162f0 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  ) ) goto no_mem;
16300 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
16310 20 20 20 20 20 20 6e 5a 65 72 6f 20 2b 3d 20 70        nZero += p
16320 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20  Rec->u.nZero;.  
16330 20 20 20 20 20 20 6c 65 6e 20 2d 3d 20 70 52 65        len -= pRe
16340 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20  c->u.nZero;.    
16350 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 6e 44    }.    }.    nD
16360 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20  ata += len;.    
16370 74 65 73 74 63 61 73 65 28 20 73 65 72 69 61 6c  testcase( serial
16380 5f 74 79 70 65 3d 3d 31 32 37 20 29 3b 0a 20 20  _type==127 );.  
16390 20 20 74 65 73 74 63 61 73 65 28 20 73 65 72 69    testcase( seri
163a0 61 6c 5f 74 79 70 65 3d 3d 31 32 38 20 29 3b 0a  al_type==128 );.
163b0 20 20 20 20 6e 48 64 72 20 2b 3d 20 73 65 72 69      nHdr += seri
163c0 61 6c 5f 74 79 70 65 3c 3d 31 32 37 20 3f 20 31  al_type<=127 ? 1
163d0 20 3a 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74   : sqlite3Varint
163e0 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29  Len(serial_type)
163f0 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63 3d 3d  ;.    if( pRec==
16400 70 44 61 74 61 30 20 29 20 62 72 65 61 6b 3b 0a  pData0 ) break;.
16410 20 20 20 20 70 52 65 63 2d 2d 3b 0a 20 20 7d 77      pRec--;.  }w
16420 68 69 6c 65 28 31 29 3b 0a 0a 20 20 2f 2a 20 45  hile(1);..  /* E
16430 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 32  VIDENCE-OF: R-22
16440 35 36 34 2d 31 31 36 34 37 20 54 68 65 20 68 65  564-11647 The he
16450 61 64 65 72 20 62 65 67 69 6e 73 20 77 69 74 68  ader begins with
16460 20 61 20 73 69 6e 67 6c 65 20 76 61 72 69 6e 74   a single varint
16470 0a 20 20 2a 2a 20 77 68 69 63 68 20 64 65 74 65  .  ** which dete
16480 72 6d 69 6e 65 73 20 74 68 65 20 74 6f 74 61 6c  rmines the total
16490 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
164a0 20 69 6e 20 74 68 65 20 68 65 61 64 65 72 2e 20   in the header. 
164b0 54 68 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20  The varint.  ** 
164c0 76 61 6c 75 65 20 69 73 20 74 68 65 20 73 69 7a  value is the siz
164d0 65 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20  e of the header 
164e0 69 6e 20 62 79 74 65 73 20 69 6e 63 6c 75 64 69  in bytes includi
164f0 6e 67 20 74 68 65 20 73 69 7a 65 20 76 61 72 69  ng the size vari
16500 6e 74 0a 20 20 2a 2a 20 69 74 73 65 6c 66 2e 20  nt.  ** itself. 
16510 2a 2f 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e  */.  testcase( n
16520 48 64 72 3d 3d 31 32 36 20 29 3b 0a 20 20 74 65  Hdr==126 );.  te
16530 73 74 63 61 73 65 28 20 6e 48 64 72 3d 3d 31 32  stcase( nHdr==12
16540 37 20 29 3b 0a 20 20 69 66 28 20 6e 48 64 72 3c  7 );.  if( nHdr<
16550 3d 31 32 36 20 29 7b 0a 20 20 20 20 2f 2a 20 54  =126 ){.    /* T
16560 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 2a  he common case *
16570 2f 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 31 3b  /.    nHdr += 1;
16580 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
16590 20 52 61 72 65 20 63 61 73 65 20 6f 66 20 61 20   Rare case of a 
165a0 72 65 61 6c 6c 79 20 6c 61 72 67 65 20 68 65 61  really large hea
165b0 64 65 72 20 2a 2f 0a 20 20 20 20 6e 56 61 72 69  der */.    nVari
165c0 6e 74 20 3d 20 73 71 6c 69 74 65 33 56 61 72 69  nt = sqlite3Vari
165d0 6e 74 4c 65 6e 28 6e 48 64 72 29 3b 0a 20 20 20  ntLen(nHdr);.   
165e0 20 6e 48 64 72 20 2b 3d 20 6e 56 61 72 69 6e 74   nHdr += nVarint
165f0 3b 0a 20 20 20 20 69 66 28 20 6e 56 61 72 69 6e  ;.    if( nVarin
16600 74 3c 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c  t<sqlite3VarintL
16610 65 6e 28 6e 48 64 72 29 20 29 20 6e 48 64 72 2b  en(nHdr) ) nHdr+
16620 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79 74 65 20 3d  +;.  }.  nByte =
16630 20 6e 48 64 72 2b 6e 44 61 74 61 3b 0a 20 20 69   nHdr+nData;.  i
16640 66 28 20 6e 42 79 74 65 2b 6e 5a 65 72 6f 3e 64  f( nByte+nZero>d
16650 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
16660 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
16670 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
16680 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61  ig;.  }..  /* Ma
16690 6b 65 20 73 75 72 65 20 74 68 65 20 6f 75 74 70  ke sure the outp
166a0 75 74 20 72 65 67 69 73 74 65 72 20 68 61 73 20  ut register has 
166b0 61 20 62 75 66 66 65 72 20 6c 61 72 67 65 20 65  a buffer large e
166c0 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72 65 20 0a  nough to store .
166d0 20 20 2a 2a 20 74 68 65 20 6e 65 77 20 72 65 63    ** the new rec
166e0 6f 72 64 2e 20 54 68 65 20 6f 75 74 70 75 74 20  ord. The output 
166f0 72 65 67 69 73 74 65 72 20 28 70 4f 70 2d 3e 70  register (pOp->p
16700 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65  3) is not allowe
16710 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65  d to.  ** be one
16720 20 6f 66 20 74 68 65 20 69 6e 70 75 74 20 72 65   of the input re
16730 67 69 73 74 65 72 73 20 28 62 65 63 61 75 73 65  gisters (because
16740 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   the following c
16750 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69  all to.  ** sqli
16760 74 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41  te3VdbeMemClearA
16770 6e 64 52 65 73 69 7a 65 28 29 20 63 6f 75 6c 64  ndResize() could
16780 20 63 6c 6f 62 62 65 72 20 74 68 65 20 76 61 6c   clobber the val
16790 75 65 20 62 65 66 6f 72 65 20 69 74 20 69 73 20  ue before it is 
167a0 75 73 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 69 66  used)..  */.  if
167b0 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
167c0 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28 70  ClearAndResize(p
167d0 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 29  Out, (int)nByte)
167e0 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f   ){.    goto no_
167f0 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65 77 52  mem;.  }.  zNewR
16800 65 63 6f 72 64 20 3d 20 28 75 38 20 2a 29 70 4f  ecord = (u8 *)pO
16810 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57 72 69  ut->z;..  /* Wri
16820 74 65 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  te the record */
16830 0a 20 20 69 20 3d 20 70 75 74 56 61 72 69 6e 74  .  i = putVarint
16840 33 32 28 7a 4e 65 77 52 65 63 6f 72 64 2c 20 6e  32(zNewRecord, n
16850 48 64 72 29 3b 0a 20 20 6a 20 3d 20 6e 48 64 72  Hdr);.  j = nHdr
16860 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 61 74  ;.  assert( pDat
16870 61 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 70  a0<=pLast );.  p
16880 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20  Rec = pData0;.  
16890 64 6f 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74  do{.    serial_t
168a0 79 70 65 20 3d 20 70 52 65 63 2d 3e 75 54 65 6d  ype = pRec->uTem
168b0 70 3b 0a 20 20 20 20 2f 2a 20 45 56 49 44 45 4e  p;.    /* EVIDEN
168c0 43 45 2d 4f 46 3a 20 52 2d 30 36 35 32 39 2d 34  CE-OF: R-06529-4
168d0 37 33 36 32 20 46 6f 6c 6c 6f 77 69 6e 67 20 74  7362 Following t
168e0 68 65 20 73 69 7a 65 20 76 61 72 69 6e 74 20 61  he size varint a
168f0 72 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a 20  re one or more. 
16900 20 20 20 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c     ** additional
16910 20 76 61 72 69 6e 74 73 2c 20 6f 6e 65 20 70 65   varints, one pe
16920 72 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 20  r column. */.   
16930 20 69 20 2b 3d 20 70 75 74 56 61 72 69 6e 74 33   i += putVarint3
16940 32 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d  2(&zNewRecord[i]
16950 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20  , serial_type); 
16960 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 65             /* se
16970 72 69 61 6c 20 74 79 70 65 20 2a 2f 0a 20 20 20  rial type */.   
16980 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a   /* EVIDENCE-OF:
16990 20 52 2d 36 34 35 33 36 2d 35 31 37 32 38 20 54   R-64536-51728 T
169a0 68 65 20 76 61 6c 75 65 73 20 66 6f 72 20 65 61  he values for ea
169b0 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  ch column in the
169c0 20 72 65 63 6f 72 64 0a 20 20 20 20 2a 2a 20 69   record.    ** i
169d0 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f  mmediately follo
169e0 77 20 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f  w the header. */
169f0 0a 20 20 20 20 6a 20 2b 3d 20 73 71 6c 69 74 65  .    j += sqlite
16a00 33 56 64 62 65 53 65 72 69 61 6c 50 75 74 28 26  3VdbeSerialPut(&
16a10 7a 4e 65 77 52 65 63 6f 72 64 5b 6a 5d 2c 20 70  zNewRecord[j], p
16a20 52 65 63 2c 20 73 65 72 69 61 6c 5f 74 79 70 65  Rec, serial_type
16a30 29 3b 20 2f 2a 20 63 6f 6e 74 65 6e 74 20 2a 2f  ); /* content */
16a40 0a 20 20 7d 77 68 69 6c 65 28 20 28 2b 2b 70 52  .  }while( (++pR
16a50 65 63 29 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20  ec)<=pLast );.  
16a60 61 73 73 65 72 74 28 20 69 3d 3d 6e 48 64 72 20  assert( i==nHdr 
16a70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6a 3d 3d  );.  assert( j==
16a80 6e 42 79 74 65 20 29 3b 0a 0a 20 20 61 73 73 65  nByte );..  asse
16a90 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
16aa0 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
16ab0 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
16ac0 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20  r) );.  pOut->n 
16ad0 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20  = (int)nByte;.  
16ae0 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
16af0 4d 5f 42 6c 6f 62 3b 0a 20 20 69 66 28 20 6e 5a  M_Blob;.  if( nZ
16b00 65 72 6f 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d  ero ){.    pOut-
16b10 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a 65 72 6f  >u.nZero = nZero
16b20 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  ;.    pOut->flag
16b30 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b 0a 20  s |= MEM_Zero;. 
16b40 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d   }.  pOut->enc =
16b50 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f   SQLITE_UTF8;  /
16b60 2a 20 49 6e 20 63 61 73 65 20 74 68 65 20 62 6c  * In case the bl
16b70 6f 62 20 69 73 20 65 76 65 72 20 63 6f 6e 76 65  ob is ever conve
16b80 72 74 65 64 20 74 6f 20 74 65 78 74 20 2a 2f 0a  rted to text */.
16b90 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
16ba0 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b  (pOp->p3, pOut);
16bb0 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
16bc0 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
16bd0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
16be0 6f 64 65 3a 20 43 6f 75 6e 74 20 50 31 20 50 32  ode: Count P1 P2
16bf0 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
16c00 69 73 3a 20 72 5b 50 32 5d 3d 63 6f 75 6e 74 28  is: r[P2]=count(
16c10 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68  ).**.** Store th
16c20 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  e number of entr
16c30 69 65 73 20 28 61 6e 20 69 6e 74 65 67 65 72 20  ies (an integer 
16c40 76 61 6c 75 65 29 20 69 6e 20 74 68 65 20 74 61  value) in the ta
16c50 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 0a 2a 2a  ble or index .**
16c60 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f   opened by curso
16c70 72 20 50 31 20 69 6e 20 72 65 67 69 73 74 65 72  r P1 in register
16c80 20 50 32 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53   P2.*/.#ifndef S
16c90 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45  QLITE_OMIT_BTREE
16ca0 43 4f 55 4e 54 0a 63 61 73 65 20 4f 50 5f 43 6f  COUNT.case OP_Co
16cb0 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  unt: {         /
16cc0 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 36 34 20  * out2 */.  i64 
16cd0 6e 45 6e 74 72 79 3b 0a 20 20 42 74 43 75 72 73  nEntry;.  BtCurs
16ce0 6f 72 20 2a 70 43 72 73 72 3b 0a 0a 20 20 61 73  or *pCrsr;..  as
16cf0 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70  sert( p->apCsr[p
16d00 4f 70 2d 3e 70 31 5d 2d 3e 65 43 75 72 54 79 70  Op->p1]->eCurTyp
16d10 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
16d20 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 2d   );.  pCrsr = p-
16d30 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d  >apCsr[pOp->p1]-
16d40 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61  >uc.pCursor;.  a
16d50 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a  ssert( pCrsr );.
16d60 20 20 6e 45 6e 74 72 79 20 3d 20 30 3b 20 20 2f    nEntry = 0;  /
16d70 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f  * Not needed.  O
16d80 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65  nly used to sile
16d90 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a  nce a warning. *
16da0 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
16db0 42 74 72 65 65 43 6f 75 6e 74 28 70 43 72 73 72  BtreeCount(pCrsr
16dc0 2c 20 26 6e 45 6e 74 72 79 29 3b 0a 20 20 69 66  , &nEntry);.  if
16dd0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
16de0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
16df0 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
16e00 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
16e10 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e  .  pOut->u.i = n
16e20 45 6e 74 72 79 3b 0a 20 20 62 72 65 61 6b 3b 0a  Entry;.  break;.
16e30 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63  }.#endif../* Opc
16e40 6f 64 65 3a 20 53 61 76 65 70 6f 69 6e 74 20 50  ode: Savepoint P
16e50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
16e60 20 4f 70 65 6e 2c 20 72 65 6c 65 61 73 65 20 6f   Open, release o
16e70 72 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 73  r rollback the s
16e80 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 64 20 62  avepoint named b
16e90 79 20 70 61 72 61 6d 65 74 65 72 20 50 34 2c 20  y parameter P4, 
16ea0 64 65 70 65 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20  depending.** on 
16eb0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50 31 2e  the value of P1.
16ec0 20 54 6f 20 6f 70 65 6e 20 61 20 6e 65 77 20 73   To open a new s
16ed0 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 30 2e  avepoint, P1==0.
16ee0 20 54 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d   To release (com
16ef0 6d 69 74 29 20 61 6e 0a 2a 2a 20 65 78 69 73 74  mit) an.** exist
16f00 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 2c 20 50  ing savepoint, P
16f10 31 3d 3d 31 2c 20 6f 72 20 74 6f 20 72 6f 6c 6c  1==1, or to roll
16f20 62 61 63 6b 20 61 6e 20 65 78 69 73 74 69 6e 67  back an existing
16f30 20 73 61 76 65 70 6f 69 6e 74 20 50 31 3d 3d 32   savepoint P1==2
16f40 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 61 76  ..*/.case OP_Sav
16f50 65 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20  epoint: {.  int 
16f60 70 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  p1;             
16f70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
16f80 61 6c 75 65 20 6f 66 20 50 31 20 6f 70 65 72 61  alue of P1 opera
16f90 6e 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e  nd */.  char *zN
16fa0 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
16fb0 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
16fc0 6f 66 20 73 61 76 65 70 6f 69 6e 74 20 2a 2f 0a  of savepoint */.
16fd0 20 20 69 6e 74 20 6e 4e 61 6d 65 3b 0a 20 20 53    int nName;.  S
16fe0 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a  avepoint *pNew;.
16ff0 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61    Savepoint *pSa
17000 76 65 70 6f 69 6e 74 3b 0a 20 20 53 61 76 65 70  vepoint;.  Savep
17010 6f 69 6e 74 20 2a 70 54 6d 70 3b 0a 20 20 69 6e  oint *pTmp;.  in
17020 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20  t iSavepoint;.  
17030 69 6e 74 20 69 69 3b 0a 0a 20 20 70 31 20 3d 20  int ii;..  p1 = 
17040 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 4e 61 6d 65  pOp->p1;.  zName
17050 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a 20   = pOp->p4.z;.. 
17060 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20   /* Assert that 
17070 74 68 65 20 70 31 20 70 61 72 61 6d 65 74 65 72  the p1 parameter
17080 20 69 73 20 76 61 6c 69 64 2e 20 41 6c 73 6f 20   is valid. Also 
17090 74 68 61 74 20 69 66 20 74 68 65 72 65 20 69 73  that if there is
170a0 20 6e 6f 20 6f 70 65 6e 0a 20 20 2a 2a 20 74 72   no open.  ** tr
170b0 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20  ansaction, then 
170c0 74 68 65 72 65 20 63 61 6e 6e 6f 74 20 62 65 20  there cannot be 
170d0 61 6e 79 20 73 61 76 65 70 6f 69 6e 74 73 2e 20  any savepoints. 
170e0 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
170f0 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3d 3d  db->pSavepoint==
17100 30 20 7c 7c 20 64 62 2d 3e 61 75 74 6f 43 6f 6d  0 || db->autoCom
17110 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  mit==0 );.  asse
17120 72 74 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  rt( p1==SAVEPOIN
17130 54 5f 42 45 47 49 4e 7c 7c 70 31 3d 3d 53 41 56  T_BEGIN||p1==SAV
17140 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 7c 7c  EPOINT_RELEASE||
17150 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f  p1==SAVEPOINT_RO
17160 4c 4c 42 41 43 4b 20 29 3b 0a 20 20 61 73 73 65  LLBACK );.  asse
17170 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  rt( db->pSavepoi
17180 6e 74 20 7c 7c 20 64 62 2d 3e 69 73 54 72 61 6e  nt || db->isTran
17190 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
171a0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
171b0 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43   checkSavepointC
171c0 6f 75 6e 74 28 64 62 29 20 29 3b 0a 20 20 61 73  ount(db) );.  as
171d0 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
171e0 65 72 20 29 3b 0a 0a 20 20 69 66 28 20 70 31 3d  er );..  if( p1=
171f0 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e  =SAVEPOINT_BEGIN
17200 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   ){.    if( db->
17210 6e 56 64 62 65 57 72 69 74 65 3e 30 20 29 7b 0a  nVdbeWrite>0 ){.
17220 20 20 20 20 20 20 2f 2a 20 41 20 6e 65 77 20 73        /* A new s
17230 61 76 65 70 6f 69 6e 74 20 63 61 6e 6e 6f 74 20  avepoint cannot 
17240 62 65 20 63 72 65 61 74 65 64 20 69 66 20 74 68  be created if th
17250 65 72 65 20 61 72 65 20 61 63 74 69 76 65 20 77  ere are active w
17260 72 69 74 65 20 0a 20 20 20 20 20 20 2a 2a 20 73  rite .      ** s
17270 74 61 74 65 6d 65 6e 74 73 20 28 69 2e 65 2e 20  tatements (i.e. 
17280 6f 70 65 6e 20 72 65 61 64 2f 77 72 69 74 65 20  open read/write 
17290 69 6e 63 72 65 6d 65 6e 74 61 6c 20 62 6c 6f 62  incremental blob
172a0 20 68 61 6e 64 6c 65 73 29 2e 0a 20 20 20 20 20   handles)..     
172b0 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65   */.      sqlite
172c0 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 63  3VdbeError(p, "c
172d0 61 6e 6e 6f 74 20 6f 70 65 6e 20 73 61 76 65 70  annot open savep
172e0 6f 69 6e 74 20 2d 20 53 51 4c 20 73 74 61 74 65  oint - SQL state
172f0 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73  ments in progres
17300 73 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  s");.      rc = 
17310 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20  SQLITE_BUSY;.   
17320 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4e   }else{.      nN
17330 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 53 74 72  ame = sqlite3Str
17340 6c 65 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a 0a 23  len30(zName);..#
17350 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
17360 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
17370 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 63 61        /* This ca
17380 6c 6c 20 69 73 20 4f 6b 20 65 76 65 6e 20 69 66  ll is Ok even if
17390 20 74 68 69 73 20 73 61 76 65 70 6f 69 6e 74 20   this savepoint 
173a0 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20 74 72  is actually a tr
173b0 61 6e 73 61 63 74 69 6f 6e 0a 20 20 20 20 20 20  ansaction.      
173c0 2a 2a 20 73 61 76 65 70 6f 69 6e 74 20 28 61 6e  ** savepoint (an
173d0 64 20 74 68 65 72 65 66 6f 72 65 20 73 68 6f 75  d therefore shou
173e0 6c 64 20 6e 6f 74 20 70 72 6f 6d 70 74 20 78 53  ld not prompt xS
173f0 61 76 65 70 6f 69 6e 74 28 29 29 20 63 61 6c 6c  avepoint()) call
17400 62 61 63 6b 73 2e 0a 20 20 20 20 20 20 2a 2a 20  backs..      ** 
17410 49 66 20 74 68 69 73 20 69 73 20 61 20 74 72 61  If this is a tra
17420 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
17430 6e 74 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2c  nt being opened,
17440 20 69 74 20 69 73 20 67 75 61 72 61 6e 74 65 65   it is guarantee
17450 64 0a 20 20 20 20 20 20 2a 2a 20 74 68 61 74 20  d.      ** that 
17460 74 68 65 20 64 62 2d 3e 61 56 54 72 61 6e 73 5b  the db->aVTrans[
17470 5d 20 61 72 72 61 79 20 69 73 20 65 6d 70 74 79  ] array is empty
17480 2e 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65  .  */.      asse
17490 72 74 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  rt( db->autoComm
174a0 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 54  it==0 || db->nVT
174b0 72 61 6e 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20  rans==0 );.     
174c0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
174d0 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53  bSavepoint(db, S
174e0 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 0a  AVEPOINT_BEGIN,.
174f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17510 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 64  db->nStatement+d
17520 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 29 3b 0a  b->nSavepoint);.
17530 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
17540 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
17550 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
17560 72 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20  r;.#endif..     
17570 20 2f 2a 20 43 72 65 61 74 65 20 61 20 6e 65 77   /* Create a new
17580 20 73 61 76 65 70 6f 69 6e 74 20 73 74 72 75 63   savepoint struc
17590 74 75 72 65 2e 20 2a 2f 0a 20 20 20 20 20 20 70  ture. */.      p
175a0 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 44 62 4d  New = sqlite3DbM
175b0 61 6c 6c 6f 63 52 61 77 4e 4e 28 64 62 2c 20 73  allocRawNN(db, s
175c0 69 7a 65 6f 66 28 53 61 76 65 70 6f 69 6e 74 29  izeof(Savepoint)
175d0 2b 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 20  +nName+1);.     
175e0 20 69 66 28 20 70 4e 65 77 20 29 7b 0a 20 20 20   if( pNew ){.   
175f0 20 20 20 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65       pNew->zName
17600 20 3d 20 28 63 68 61 72 20 2a 29 26 70 4e 65 77   = (char *)&pNew
17610 5b 31 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d  [1];.        mem
17620 63 70 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c  cpy(pNew->zName,
17630 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29   zName, nName+1)
17640 3b 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f  ;.    .        /
17650 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f  * If there is no
17660 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f   open transactio
17670 6e 2c 20 74 68 65 6e 20 6d 61 72 6b 20 74 68 69  n, then mark thi
17680 73 20 61 73 20 61 20 73 70 65 63 69 61 6c 0a 20  s as a special. 
17690 20 20 20 20 20 20 20 2a 2a 20 22 74 72 61 6e 73         ** "trans
176a0 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74  action savepoint
176b0 22 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  ". */.        if
176c0 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  ( db->autoCommit
176d0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62   ){.          db
176e0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30  ->autoCommit = 0
176f0 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  ;.          db->
17700 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
17710 65 70 6f 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20  epoint = 1;.    
17720 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
17730 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f       db->nSavepo
17740 69 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d  int++;.        }
17750 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e  ..        /* Lin
17760 6b 20 74 68 65 20 6e 65 77 20 73 61 76 65 70 6f  k the new savepo
17770 69 6e 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74  int into the dat
17780 61 62 61 73 65 20 68 61 6e 64 6c 65 27 73 20 6c  abase handle's l
17790 69 73 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  ist. */.        
177a0 70 4e 65 77 2d 3e 70 4e 65 78 74 20 3d 20 64 62  pNew->pNext = db
177b0 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20  ->pSavepoint;.  
177c0 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70        db->pSavep
177d0 6f 69 6e 74 20 3d 20 70 4e 65 77 3b 0a 20 20 20  oint = pNew;.   
177e0 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65       pNew->nDefe
177f0 72 72 65 64 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e  rredCons = db->n
17800 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20  DeferredCons;.  
17810 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66        pNew->nDef
17820 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 64  erredImmCons = d
17830 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
17840 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ons;.      }.   
17850 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
17860 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a  iSavepoint = 0;.
17870 0a 20 20 20 20 2f 2a 20 46 69 6e 64 20 74 68 65  .    /* Find the
17880 20 6e 61 6d 65 64 20 73 61 76 65 70 6f 69 6e 74   named savepoint
17890 2e 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f  . If there is no
178a0 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74 2c   such savepoint,
178b0 20 74 68 65 6e 20 61 6e 0a 20 20 20 20 2a 2a 20   then an.    ** 
178c0 61 6e 20 65 72 72 6f 72 20 69 73 20 72 65 74 75  an error is retu
178d0 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73 65 72  rned to the user
178e0 2e 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28 0a 20  .  */.    for(. 
178f0 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20       pSavepoint 
17900 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  = db->pSavepoint
17910 3b 20 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f  ; .      pSavepo
17920 69 6e 74 20 26 26 20 73 71 6c 69 74 65 33 53 74  int && sqlite3St
17930 72 49 43 6d 70 28 70 53 61 76 65 70 6f 69 6e 74  rICmp(pSavepoint
17940 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 29 3b  ->zName, zName);
17950 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e  .      pSavepoin
17960 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e  t = pSavepoint->
17970 70 4e 65 78 74 0a 20 20 20 20 29 7b 0a 20 20 20  pNext.    ){.   
17980 20 20 20 69 53 61 76 65 70 6f 69 6e 74 2b 2b 3b     iSavepoint++;
17990 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 21  .    }.    if( !
179a0 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20  pSavepoint ){.  
179b0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
179c0 72 72 6f 72 28 70 2c 20 22 6e 6f 20 73 75 63 68  rror(p, "no such
179d0 20 73 61 76 65 70 6f 69 6e 74 3a 20 25 73 22 2c   savepoint: %s",
179e0 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 72   zName);.      r
179f0 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
17a00 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
17a10 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30  db->nVdbeWrite>0
17a20 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e   && p1==SAVEPOIN
17a30 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20  T_RELEASE ){.   
17a40 20 20 20 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20     /* It is not 
17a50 70 6f 73 73 69 62 6c 65 20 74 6f 20 72 65 6c 65  possible to rele
17a60 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 20 73  ase (commit) a s
17a70 61 76 65 70 6f 69 6e 74 20 69 66 20 74 68 65 72  avepoint if ther
17a80 65 20 61 72 65 20 0a 20 20 20 20 20 20 2a 2a 20  e are .      ** 
17a90 61 63 74 69 76 65 20 77 72 69 74 65 20 73 74 61  active write sta
17aa0 74 65 6d 65 6e 74 73 2e 0a 20 20 20 20 20 20 2a  tements..      *
17ab0 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  /.      sqlite3V
17ac0 64 62 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e  dbeError(p, "can
17ad0 6e 6f 74 20 72 65 6c 65 61 73 65 20 73 61 76 65  not release save
17ae0 70 6f 69 6e 74 20 2d 20 22 0a 20 20 20 20 20 20  point - ".      
17af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b00 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65      "SQL stateme
17b10 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22  nts in progress"
17b20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  );.      rc = SQ
17b30 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d  LITE_BUSY;.    }
17b40 65 6c 73 65 7b 0a 0a 20 20 20 20 20 20 2f 2a 20  else{..      /* 
17b50 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65  Determine whethe
17b60 72 20 6f 72 20 6e 6f 74 20 74 68 69 73 20 69 73  r or not this is
17b70 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73   a transaction s
17b80 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 73 6f 2c  avepoint. If so,
17b90 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 74 68  .      ** and th
17ba0 69 73 20 69 73 20 61 20 52 45 4c 45 41 53 45 20  is is a RELEASE 
17bb0 63 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e 20 74 68  command, then th
17bc0 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61  e current transa
17bd0 63 74 69 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20  ction .      ** 
17be0 69 73 20 63 6f 6d 6d 69 74 74 65 64 2e 20 0a 20  is committed. . 
17bf0 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 6e       */.      in
17c00 74 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20  t isTransaction 
17c10 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e  = pSavepoint->pN
17c20 65 78 74 3d 3d 30 20 26 26 20 64 62 2d 3e 69 73  ext==0 && db->is
17c30 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
17c40 6f 69 6e 74 3b 0a 20 20 20 20 20 20 69 66 28 20  oint;.      if( 
17c50 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 26 26  isTransaction &&
17c60 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
17c70 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20  ELEASE ){.      
17c80 20 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69    if( (rc = sqli
17c90 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70  te3VdbeCheckFk(p
17ca0 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b  , 1))!=SQLITE_OK
17cb0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f   ){.          go
17cc0 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
17cd0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
17ce0 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
17cf0 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66   = 1;.        if
17d00 28 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c  ( sqlite3VdbeHal
17d10 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53  t(p)==SQLITE_BUS
17d20 59 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70  Y ){.          p
17d30 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70  ->pc = (int)(pOp
17d40 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20 20 20   - aOp);.       
17d50 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
17d60 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  t = 0;.         
17d70 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
17d80 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
17d90 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
17da0 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d  eturn;.        }
17db0 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54  .        db->isT
17dc0 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
17dd0 69 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  int = 0;.       
17de0 20 72 63 20 3d 20 70 2d 3e 72 63 3b 0a 20 20 20   rc = p->rc;.   
17df0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
17e00 20 20 69 6e 74 20 69 73 53 63 68 65 6d 61 43 68    int isSchemaCh
17e10 61 6e 67 65 3b 0a 20 20 20 20 20 20 20 20 69 53  ange;.        iS
17e20 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e  avepoint = db->n
17e30 53 61 76 65 70 6f 69 6e 74 20 2d 20 69 53 61 76  Savepoint - iSav
17e40 65 70 6f 69 6e 74 20 2d 20 31 3b 0a 20 20 20 20  epoint - 1;.    
17e50 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45      if( p1==SAVE
17e60 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29  POINT_ROLLBACK )
17e70 7b 0a 20 20 20 20 20 20 20 20 20 20 69 73 53 63  {.          isSc
17e80 68 65 6d 61 43 68 61 6e 67 65 20 3d 20 28 64 62  hemaChange = (db
17e90 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
17ea0 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 21  _InternChanges)!
17eb0 3d 30 3b 0a 20 20 20 20 20 20 20 20 20 20 66 6f  =0;.          fo
17ec0 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e  r(ii=0; ii<db->n
17ed0 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20  Db; ii++){.     
17ee0 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
17ef0 74 65 33 42 74 72 65 65 54 72 69 70 41 6c 6c 43  te3BtreeTripAllC
17f00 75 72 73 6f 72 73 28 64 62 2d 3e 61 44 62 5b 69  ursors(db->aDb[i
17f10 69 5d 2e 70 42 74 2c 0a 20 20 20 20 20 20 20 20  i].pBt,.        
17f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
17f40 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c  QLITE_ABORT_ROLL
17f50 42 41 43 4b 2c 0a 20 20 20 20 20 20 20 20 20 20  BACK,.          
17f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f70 20 20 20 20 20 20 20 20 20 20 20 20 20 69 73 53               isS
17f80 63 68 65 6d 61 43 68 61 6e 67 65 3d 3d 30 29 3b  chemaChange==0);
17f90 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28  .            if(
17fa0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
17fb0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
17fc0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
17fd0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65      }.        }e
17fe0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 69  lse{.          i
17ff0 73 53 63 68 65 6d 61 43 68 61 6e 67 65 20 3d 20  sSchemaChange = 
18000 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  0;.        }.   
18010 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69       for(ii=0; i
18020 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29  i<db->nDb; ii++)
18030 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d  {.          rc =
18040 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 61 76   sqlite3BtreeSav
18050 65 70 6f 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69  epoint(db->aDb[i
18060 69 5d 2e 70 42 74 2c 20 70 31 2c 20 69 53 61 76  i].pBt, p1, iSav
18070 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20  epoint);.       
18080 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
18090 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
180a0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
180b0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
180c0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
180d0 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 69   }.        if( i
180e0 73 53 63 68 65 6d 61 43 68 61 6e 67 65 20 29 7b  sSchemaChange ){
180f0 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
18100 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64  e3ExpirePrepared
18110 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a  Statements(db);.
18120 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
18130 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73  3ResetAllSchemas
18140 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29  OfConnection(db)
18150 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  ;.          db->
18160 66 6c 61 67 73 20 3d 20 28 64 62 2d 3e 66 6c 61  flags = (db->fla
18170 67 73 20 7c 20 53 51 4c 49 54 45 5f 49 6e 74 65  gs | SQLITE_Inte
18180 72 6e 43 68 61 6e 67 65 73 29 3b 0a 20 20 20 20  rnChanges);.    
18190 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
181a0 0a 20 20 20 20 20 20 2f 2a 20 52 65 67 61 72 64  .      /* Regard
181b0 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20  less of whether 
181c0 74 68 69 73 20 69 73 20 61 20 52 45 4c 45 41 53  this is a RELEAS
181d0 45 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20 64  E or ROLLBACK, d
181e0 65 73 74 72 6f 79 20 61 6c 6c 20 0a 20 20 20 20  estroy all .    
181f0 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 73 20    ** savepoints 
18200 6e 65 73 74 65 64 20 69 6e 73 69 64 65 20 6f 66  nested inside of
18210 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62   the savepoint b
18220 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e  eing operated on
18230 2e 20 2a 2f 0a 20 20 20 20 20 20 77 68 69 6c 65  . */.      while
18240 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  ( db->pSavepoint
18250 21 3d 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a  !=pSavepoint ){.
18260 20 20 20 20 20 20 20 20 70 54 6d 70 20 3d 20 64          pTmp = d
18270 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20  b->pSavepoint;. 
18280 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65         db->pSave
18290 70 6f 69 6e 74 20 3d 20 70 54 6d 70 2d 3e 70 4e  point = pTmp->pN
182a0 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  ext;.        sql
182b0 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
182c0 54 6d 70 29 3b 0a 20 20 20 20 20 20 20 20 64 62  Tmp);.        db
182d0 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a  ->nSavepoint--;.
182e0 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f        }..      /
182f0 2a 20 49 66 20 69 74 20 69 73 20 61 20 52 45 4c  * If it is a REL
18300 45 41 53 45 2c 20 74 68 65 6e 20 64 65 73 74 72  EASE, then destr
18310 6f 79 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74  oy the savepoint
18320 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20   being operated 
18330 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 74 6f 6f  on .      ** too
18340 2e 20 49 66 20 69 74 20 69 73 20 61 20 52 4f 4c  . If it is a ROL
18350 4c 42 41 43 4b 20 54 4f 2c 20 74 68 65 6e 20 73  LBACK TO, then s
18360 65 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  et the number of
18370 20 64 65 66 65 72 72 65 64 20 0a 20 20 20 20 20   deferred .     
18380 20 2a 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20 76   ** constraint v
18390 69 6f 6c 61 74 69 6f 6e 73 20 70 72 65 73 65 6e  iolations presen
183a0 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  t in the databas
183b0 65 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 73  e to the value s
183c0 74 6f 72 65 64 0a 20 20 20 20 20 20 2a 2a 20 77  tored.      ** w
183d0 68 65 6e 20 74 68 65 20 73 61 76 65 70 6f 69 6e  hen the savepoin
183e0 74 20 77 61 73 20 63 72 65 61 74 65 64 2e 20 20  t was created.  
183f0 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 31 3d  */.      if( p1=
18400 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41  =SAVEPOINT_RELEA
18410 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  SE ){.        as
18420 73 65 72 74 28 20 70 53 61 76 65 70 6f 69 6e 74  sert( pSavepoint
18430 3d 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  ==db->pSavepoint
18440 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e   );.        db->
18450 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61  pSavepoint = pSa
18460 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a  vepoint->pNext;.
18470 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44          sqlite3D
18480 62 46 72 65 65 28 64 62 2c 20 70 53 61 76 65 70  bFree(db, pSavep
18490 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69  oint);.        i
184a0 66 28 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f  f( !isTransactio
184b0 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64  n ){.          d
184c0 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b  b->nSavepoint--;
184d0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
184e0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
184f0 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
18500 73 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e  s = pSavepoint->
18510 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20  nDeferredCons;. 
18520 20 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65         db->nDefe
18530 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 70 53  rredImmCons = pS
18540 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72  avepoint->nDefer
18550 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20  redImmCons;.    
18560 20 20 7d 0a 0a 20 20 20 20 20 20 69 66 28 20 21    }..      if( !
18570 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 7c 7c  isTransaction ||
18580 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
18590 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20 20  OLLBACK ){.     
185a0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
185b0 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c  tabSavepoint(db,
185c0 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29   p1, iSavepoint)
185d0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63  ;.        if( rc
185e0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
185f0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
18600 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20  error;.      }. 
18610 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72     }.  }.  if( r
18620 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
18630 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20  ue_to_error;..  
18640 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
18650 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20  ode: AutoCommit 
18660 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
18670 2a 20 53 65 74 20 74 68 65 20 64 61 74 61 62 61  * Set the databa
18680 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66  se auto-commit f
18690 6c 61 67 20 74 6f 20 50 31 20 28 31 20 6f 72 20  lag to P1 (1 or 
186a0 30 29 2e 20 49 66 20 50 32 20 69 73 20 74 72 75  0). If P2 is tru
186b0 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20  e, roll.** back 
186c0 61 6e 79 20 63 75 72 72 65 6e 74 6c 79 20 61 63  any currently ac
186d0 74 69 76 65 20 62 74 72 65 65 20 74 72 61 6e 73  tive btree trans
186e0 61 63 74 69 6f 6e 73 2e 20 49 66 20 74 68 65 72  actions. If ther
186f0 65 20 61 72 65 20 61 6e 79 20 61 63 74 69 76 65  e are any active
18700 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72 74 20 66  .** VMs (apart f
18710 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20 74  rom this one), t
18720 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66  hen a ROLLBACK f
18730 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20  ails.  A COMMIT 
18740 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72  fails if.** ther
18750 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69  e are active wri
18760 74 69 6e 67 20 56 4d 73 20 6f 72 20 61 63 74 69  ting VMs or acti
18770 76 65 20 56 4d 73 20 74 68 61 74 20 75 73 65 20  ve VMs that use 
18780 73 68 61 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a  shared cache..**
18790 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
187a0 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65 20  tion causes the 
187b0 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63  VM to halt..*/.c
187c0 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69  ase OP_AutoCommi
187d0 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73 69 72  t: {.  int desir
187e0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20  edAutoCommit;.  
187f0 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a 0a  int iRollback;..
18800 20 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d    desiredAutoCom
18810 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  mit = pOp->p1;. 
18820 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f 70   iRollback = pOp
18830 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
18840 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
18850 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65 64 41  t==1 || desiredA
18860 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a  utoCommit==0 );.
18870 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65    assert( desire
18880 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c  dAutoCommit==1 |
18890 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29  | iRollback==0 )
188a0 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  ;.  assert( db->
188b0 6e 56 64 62 65 41 63 74 69 76 65 3e 30 20 29 3b  nVdbeActive>0 );
188c0 20 20 2f 2a 20 41 74 20 6c 65 61 73 74 20 74 68    /* At least th
188d0 69 73 20 6f 6e 65 20 56 4d 20 69 73 20 61 63 74  is one VM is act
188e0 69 76 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ive */.  assert(
188f0 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
18900 0a 0a 20 20 69 66 28 20 64 65 73 69 72 65 64 41  ..  if( desiredA
18910 75 74 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61  utoCommit!=db->a
18920 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20  utoCommit ){.   
18930 20 69 66 28 20 69 52 6f 6c 6c 62 61 63 6b 20 29   if( iRollback )
18940 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
18950 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
18960 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 73 71  t==1 );.      sq
18970 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c  lite3RollbackAll
18980 28 64 62 2c 20 53 51 4c 49 54 45 5f 41 42 4f 52  (db, SQLITE_ABOR
18990 54 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20 20  T_ROLLBACK);.   
189a0 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
189b0 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65  t = 1;.    }else
189c0 20 69 66 28 20 64 65 73 69 72 65 64 41 75 74 6f   if( desiredAuto
189d0 43 6f 6d 6d 69 74 20 26 26 20 64 62 2d 3e 6e 56  Commit && db->nV
189e0 64 62 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20  dbeWrite>0 ){.  
189f0 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69      /* If this i
18a00 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65  nstruction imple
18a10 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54 20 61  ments a COMMIT a
18a20 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65  nd other VMs are
18a30 20 77 72 69 74 69 6e 67 0a 20 20 20 20 20 20 2a   writing.      *
18a40 2a 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f  * return an erro
18a50 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61  r indicating tha
18a60 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20  t the other VMs 
18a70 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69  must complete fi
18a80 72 73 74 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20  rst. .      */. 
18a90 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
18aa0 45 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74  Error(p, "cannot
18ab0 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63 74   commit transact
18ac0 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20 20 20  ion - ".        
18ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ae0 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74    "SQL statement
18af0 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b  s in progress");
18b00 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
18b10 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67  TE_BUSY;.      g
18b20 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
18b30 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73  _error;.    }els
18b40 65 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69  e if( (rc = sqli
18b50 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70  te3VdbeCheckFk(p
18b60 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b  , 1))!=SQLITE_OK
18b70 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76   ){.      goto v
18b80 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
18b90 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d  }else{.      db-
18ba0 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75  >autoCommit = (u
18bb0 38 29 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  8)desiredAutoCom
18bc0 6d 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  mit;.    }.    i
18bd0 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 48 61  f( sqlite3VdbeHa
18be0 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55  lt(p)==SQLITE_BU
18bf0 53 59 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70  SY ){.      p->p
18c00 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  c = (int)(pOp - 
18c10 61 4f 70 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  aOp);.      db->
18c20 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38  autoCommit = (u8
18c30 29 28 31 2d 64 65 73 69 72 65 64 41 75 74 6f 43  )(1-desiredAutoC
18c40 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20 20 70 2d  ommit);.      p-
18c50 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54  >rc = rc = SQLIT
18c60 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f  E_BUSY;.      go
18c70 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
18c80 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74      }.    assert
18c90 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74  ( db->nStatement
18ca0 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  ==0 );.    sqlit
18cb0 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74  e3CloseSavepoint
18cc0 73 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20 70  s(db);.    if( p
18cd0 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ->rc==SQLITE_OK 
18ce0 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
18cf0 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d  LITE_DONE;.    }
18d00 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d  else{.      rc =
18d10 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
18d20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64     }.    goto vd
18d30 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c  be_return;.  }el
18d40 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  se{.    sqlite3V
18d50 64 62 65 45 72 72 6f 72 28 70 2c 0a 20 20 20 20  dbeError(p,.    
18d60 20 20 20 20 28 21 64 65 73 69 72 65 64 41 75 74      (!desiredAut
18d70 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74  oCommit)?"cannot
18d80 20 73 74 61 72 74 20 61 20 74 72 61 6e 73 61 63   start a transac
18d90 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74 72  tion within a tr
18da0 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20  ansaction":(.   
18db0 20 20 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29       (iRollback)
18dc0 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63  ?"cannot rollbac
18dd0 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69  k - no transacti
18de0 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a 20  on is active":. 
18df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e00 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74    "cannot commit
18e10 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f   - no transactio
18e20 6e 20 69 73 20 61 63 74 69 76 65 22 29 29 3b 0a  n is active"));.
18e30 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 72 63           .    rc
18e40 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
18e50 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f  .    goto abort_
18e60 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
18e70 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
18e80 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e 73 61 63   Opcode: Transac
18e90 74 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50 34  tion P1 P2 P3 P4
18ea0 20 50 35 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20   P5.**.** Begin 
18eb0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e  a transaction on
18ec0 20 64 61 74 61 62 61 73 65 20 50 31 20 69 66 20   database P1 if 
18ed0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  a transaction is
18ee0 20 6e 6f 74 20 61 6c 72 65 61 64 79 0a 2a 2a 20   not already.** 
18ef0 61 63 74 69 76 65 2e 0a 2a 2a 20 49 66 20 50 32  active..** If P2
18f00 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
18f10 65 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73  en a write-trans
18f20 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65  action is starte
18f30 64 2c 20 6f 72 20 69 66 20 61 20 0a 2a 2a 20 72  d, or if a .** r
18f40 65 61 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  ead-transaction 
18f50 69 73 20 61 6c 72 65 61 64 79 20 61 63 74 69 76  is already activ
18f60 65 2c 20 69 74 20 69 73 20 75 70 67 72 61 64 65  e, it is upgrade
18f70 64 20 74 6f 20 61 20 77 72 69 74 65 2d 74 72 61  d to a write-tra
18f80 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2a 20 49 66 20  nsaction..** If 
18f90 50 32 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e  P2 is zero, then
18fa0 20 61 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74   a read-transact
18fb0 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e 0a  ion is started..
18fc0 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20  **.** P1 is the 
18fd0 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74  index of the dat
18fe0 61 62 61 73 65 20 66 69 6c 65 20 6f 6e 20 77 68  abase file on wh
18ff0 69 63 68 20 74 68 65 20 74 72 61 6e 73 61 63 74  ich the transact
19000 69 6f 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74 65  ion is.** starte
19010 64 2e 20 20 49 6e 64 65 78 20 30 20 69 73 20 74  d.  Index 0 is t
19020 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
19030 20 66 69 6c 65 20 61 6e 64 20 69 6e 64 65 78 20   file and index 
19040 31 20 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c 65  1 is the.** file
19050 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72   used for tempor
19060 61 72 79 20 74 61 62 6c 65 73 2e 20 20 49 6e 64  ary tables.  Ind
19070 69 63 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f 72  ices of 2 or mor
19080 65 20 61 72 65 20 75 73 65 64 20 66 6f 72 0a 2a  e are used for.*
19090 2a 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  * attached datab
190a0 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61  ases..**.** If a
190b0 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69   write-transacti
190c0 6f 6e 20 69 73 20 73 74 61 72 74 65 64 20 61 6e  on is started an
190d0 64 20 74 68 65 20 56 64 62 65 2e 75 73 65 73 53  d the Vdbe.usesS
190e0 74 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c 61 67 20  tmtJournal flag 
190f0 69 73 0a 2a 2a 20 74 72 75 65 20 28 74 68 69 73  is.** true (this
19100 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 66 20   flag is set if 
19110 74 68 65 20 56 64 62 65 20 6d 61 79 20 6d 6f 64  the Vdbe may mod
19120 69 66 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  ify more than on
19130 65 20 72 6f 77 20 61 6e 64 20 6d 61 79 0a 2a 2a  e row and may.**
19140 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20   throw an ABORT 
19150 65 78 63 65 70 74 69 6f 6e 29 2c 20 61 20 73 74  exception), a st
19160 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
19170 69 6f 6e 20 6d 61 79 20 61 6c 73 6f 20 62 65 20  ion may also be 
19180 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65 20  opened..** More 
19190 73 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 61 20  specifically, a 
191a0 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
191b0 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64 20  ction is opened 
191c0 69 66 66 20 74 68 65 20 64 61 74 61 62 61 73 65  iff the database
191d0 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  .** connection i
191e0 73 20 63 75 72 72 65 6e 74 6c 79 20 6e 6f 74 20  s currently not 
191f0 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f  in autocommit mo
19200 64 65 2c 20 6f 72 20 69 66 20 74 68 65 72 65 20  de, or if there 
19210 61 72 65 20 6f 74 68 65 72 0a 2a 2a 20 61 63 74  are other.** act
19220 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 20  ive statements. 
19230 41 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  A statement tran
19240 73 61 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20 74  saction allows t
19250 68 65 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20  he changes made 
19260 62 79 20 74 68 69 73 0a 2a 2a 20 56 44 42 45 20  by this.** VDBE 
19270 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  to be rolled bac
19280 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72  k after an error
19290 20 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20   without having 
192a0 74 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65  to roll back the
192b0 0a 2a 2a 20 65 6e 74 69 72 65 20 74 72 61 6e 73  .** entire trans
192c0 61 63 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65 72  action. If no er
192d0 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72  ror is encounter
192e0 65 64 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e  ed, the statemen
192f0 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a  t transaction.**
19300 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61   will automatica
19310 6c 6c 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20  lly commit when 
19320 74 68 65 20 56 44 42 45 20 68 61 6c 74 73 2e 0a  the VDBE halts..
19330 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74  **.** If P5!=0 t
19340 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20  hen this opcode 
19350 61 6c 73 6f 20 63 68 65 63 6b 73 20 74 68 65 20  also checks the 
19360 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 61 67  schema cookie ag
19370 61 69 6e 73 74 20 50 33 0a 2a 2a 20 61 6e 64 20  ainst P3.** and 
19380 74 68 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72  the schema gener
19390 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 61 67  ation counter ag
193a0 61 69 6e 73 74 20 50 34 2e 0a 2a 2a 20 54 68 65  ainst P4..** The
193b0 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 20   cookie changes 
193c0 69 74 73 20 76 61 6c 75 65 20 77 68 65 6e 65 76  its value whenev
193d0 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  er the database 
193e0 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2e 0a  schema changes..
193f0 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f  ** This operatio
19400 6e 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74  n is used to det
19410 65 63 74 20 77 68 65 6e 20 74 68 61 74 20 74 68  ect when that th
19420 65 20 63 6f 6f 6b 69 65 20 68 61 73 20 63 68 61  e cookie has cha
19430 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74 68 61 74  nged.** and that
19440 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f   the current pro
19450 63 65 73 73 20 6e 65 65 64 73 20 74 6f 20 72 65  cess needs to re
19460 72 65 61 64 20 74 68 65 20 73 63 68 65 6d 61 2e  read the schema.
19470 20 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 0a    If the schema.
19480 2a 2a 20 63 6f 6f 6b 69 65 20 69 6e 20 50 33 20  ** cookie in P3 
19490 64 69 66 66 65 72 73 20 66 72 6f 6d 20 74 68 65  differs from the
194a0 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 69   schema cookie i
194b0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  n the database h
194c0 65 61 64 65 72 20 6f 72 0a 2a 2a 20 69 66 20 74  eader or.** if t
194d0 68 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72 61  he schema genera
194e0 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 69 6e 20  tion counter in 
194f0 50 34 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20  P4 differs from 
19500 74 68 65 20 63 75 72 72 65 6e 74 0a 2a 2a 20 67  the current.** g
19510 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65  eneration counte
19520 72 2c 20 74 68 65 6e 20 61 6e 20 53 51 4c 49 54  r, then an SQLIT
19530 45 5f 53 43 48 45 4d 41 20 65 72 72 6f 72 20 69  E_SCHEMA error i
19540 73 20 72 61 69 73 65 64 20 61 6e 64 20 65 78 65  s raised and exe
19550 63 75 74 69 6f 6e 0a 2a 2a 20 68 61 6c 74 73 2e  cution.** halts.
19560 20 20 54 68 65 20 73 71 6c 69 74 65 33 5f 73 74    The sqlite3_st
19570 65 70 28 29 20 77 72 61 70 70 65 72 20 66 75 6e  ep() wrapper fun
19580 63 74 69 6f 6e 20 6d 69 67 68 74 20 74 68 65 6e  ction might then
19590 20 72 65 70 72 65 70 61 72 65 20 74 68 65 0a 2a   reprepare the.*
195a0 2a 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20  * statement and 
195b0 72 65 72 75 6e 20 69 74 20 66 72 6f 6d 20 74 68  rerun it from th
195c0 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 2a 2f 0a  e beginning..*/.
195d0 63 61 73 65 20 4f 50 5f 54 72 61 6e 73 61 63 74  case OP_Transact
195e0 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a  ion: {.  Btree *
195f0 70 42 74 3b 0a 20 20 69 6e 74 20 69 4d 65 74 61  pBt;.  int iMeta
19600 3b 0a 20 20 69 6e 74 20 69 47 65 6e 3b 0a 0a 20  ;.  int iGen;.. 
19610 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52   assert( p->bIsR
19620 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73 65 72  eader );.  asser
19630 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
19640 30 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 30 20  0 || pOp->p2==0 
19650 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
19660 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
19670 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
19680 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
19690 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
196a0 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 69   pOp->p1) );.  i
196b0 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 28 64  f( pOp->p2 && (d
196c0 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
196d0 45 5f 51 75 65 72 79 4f 6e 6c 79 29 21 3d 30 20  E_QueryOnly)!=0 
196e0 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
196f0 54 45 5f 52 45 41 44 4f 4e 4c 59 3b 0a 20 20 20  TE_READONLY;.   
19700 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
19710 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20  to_error;.  }.  
19720 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f  pBt = db->aDb[pO
19730 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20 69  p->p1].pBt;..  i
19740 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20 72 63  f( pBt ){.    rc
19750 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42   = sqlite3BtreeB
19760 65 67 69 6e 54 72 61 6e 73 28 70 42 74 2c 20 70  eginTrans(pBt, p
19770 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20 74 65 73  Op->p2);.    tes
19780 74 63 61 73 65 28 20 72 63 3d 3d 53 51 4c 49 54  tcase( rc==SQLIT
19790 45 5f 42 55 53 59 5f 53 4e 41 50 53 48 4f 54 20  E_BUSY_SNAPSHOT 
197a0 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28  );.    testcase(
197b0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc==SQLITE_BUSY
197c0 5f 52 45 43 4f 56 45 52 59 20 29 3b 0a 20 20 20  _RECOVERY );.   
197d0 20 69 66 28 20 28 72 63 26 30 78 66 66 29 3d 3d   if( (rc&0xff)==
197e0 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20  SQLITE_BUSY ){. 
197f0 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e       p->pc = (in
19800 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20  t)(pOp - aOp);. 
19810 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b       p->rc = rc;
19820 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65  .      goto vdbe
19830 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20  _return;.    }. 
19840 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
19850 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f  E_OK ){.      go
19860 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
19870 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20 20  error;.    }..  
19880 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26    if( pOp->p2 &&
19890 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72   p->usesStmtJour
198a0 6e 61 6c 20 0a 20 20 20 20 20 26 26 20 28 64 62  nal .     && (db
198b0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  ->autoCommit==0 
198c0 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64  || db->nVdbeRead
198d0 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20 20 20 20  >1) .    ){.    
198e0 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
198f0 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28  3BtreeIsInTrans(
19900 70 42 74 29 20 29 3b 0a 20 20 20 20 20 20 69 66  pBt) );.      if
19910 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d  ( p->iStatement=
19920 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  =0 ){.        as
19930 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65  sert( db->nState
19940 6d 65 6e 74 3e 3d 30 20 26 26 20 64 62 2d 3e 6e  ment>=0 && db->n
19950 53 61 76 65 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a  Savepoint>=0 );.
19960 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61          db->nSta
19970 74 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20 20 20 20  tement++; .     
19980 20 20 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74     p->iStatement
19990 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e   = db->nSavepoin
199a0 74 20 2b 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65  t + db->nStateme
199b0 6e 74 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  nt;.      }..   
199c0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
199d0 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c  tabSavepoint(db,
199e0 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e   SAVEPOINT_BEGIN
199f0 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 2d  , p->iStatement-
19a00 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  1);.      if( rc
19a10 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
19a20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
19a30 74 65 33 42 74 72 65 65 42 65 67 69 6e 53 74 6d  te3BtreeBeginStm
19a40 74 28 70 42 74 2c 20 70 2d 3e 69 53 74 61 74 65  t(pBt, p->iState
19a50 6d 65 6e 74 29 3b 0a 20 20 20 20 20 20 7d 0a 0a  ment);.      }..
19a60 20 20 20 20 20 20 2f 2a 20 53 74 6f 72 65 20 74        /* Store t
19a70 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65  he current value
19a80 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
19a90 20 68 61 6e 64 6c 65 73 20 64 65 66 65 72 72 65   handles deferre
19aa0 64 20 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20 20  d constraint.   
19ab0 20 20 20 2a 2a 20 63 6f 75 6e 74 65 72 2e 20 49     ** counter. I
19ac0 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  f the statement 
19ad0 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64  transaction need
19ae0 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62  s to be rolled b
19af0 61 63 6b 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68  ack,.      ** th
19b00 65 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20  e value of this 
19b10 63 6f 75 6e 74 65 72 20 6e 65 65 64 73 20 74 6f  counter needs to
19b20 20 62 65 20 72 65 73 74 6f 72 65 64 20 74 6f 6f   be restored too
19b30 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 6e  .  */.      p->n
19b40 53 74 6d 74 44 65 66 43 6f 6e 73 20 3d 20 64 62  StmtDefCons = db
19b50 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  ->nDeferredCons;
19b60 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44  .      p->nStmtD
19b70 65 66 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e  efImmCons = db->
19b80 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
19b90 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20  ;.    }..    /* 
19ba0 47 61 74 68 65 72 20 74 68 65 20 73 63 68 65 6d  Gather the schem
19bb0 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  a version number
19bc0 20 66 6f 72 20 63 68 65 63 6b 69 6e 67 3a 0a 20   for checking:. 
19bd0 20 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41     ** IMPLEMENTA
19be0 54 49 4f 4e 2d 4f 46 3a 20 52 2d 33 32 31 39 35  TION-OF: R-32195
19bf0 2d 31 39 34 36 35 20 54 68 65 20 73 63 68 65 6d  -19465 The schem
19c00 61 20 76 65 72 73 69 6f 6e 20 69 73 20 75 73 65  a version is use
19c10 64 20 62 79 20 53 51 4c 69 74 65 0a 20 20 20 20  d by SQLite.    
19c20 2a 2a 20 65 61 63 68 20 74 69 6d 65 20 61 20 71  ** each time a q
19c30 75 65 72 79 20 69 73 20 65 78 65 63 75 74 65 64  uery is executed
19c40 20 74 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20   to ensure that 
19c50 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 63 61 63  the internal cac
19c60 68 65 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a  he of the.    **
19c70 20 73 63 68 65 6d 61 20 75 73 65 64 20 77 68 65   schema used whe
19c80 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 74 68 65 20  n compiling the 
19c90 53 51 4c 20 71 75 65 72 79 20 6d 61 74 63 68 65  SQL query matche
19ca0 73 20 74 68 65 20 73 63 68 65 6d 61 20 6f 66 20  s the schema of 
19cb0 74 68 65 0a 20 20 20 20 2a 2a 20 64 61 74 61 62  the.    ** datab
19cc0 61 73 65 20 61 67 61 69 6e 73 74 20 77 68 69 63  ase against whic
19cd0 68 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71  h the compiled q
19ce0 75 65 72 79 20 69 73 20 61 63 74 75 61 6c 6c 79  uery is actually
19cf0 20 65 78 65 63 75 74 65 64 2e 0a 20 20 20 20 2a   executed..    *
19d00 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72  /.    sqlite3Btr
19d10 65 65 47 65 74 4d 65 74 61 28 70 42 74 2c 20 42  eeGetMeta(pBt, B
19d20 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53  TREE_SCHEMA_VERS
19d30 49 4f 4e 2c 20 28 75 33 32 20 2a 29 26 69 4d 65  ION, (u32 *)&iMe
19d40 74 61 29 3b 0a 20 20 20 20 69 47 65 6e 20 3d 20  ta);.    iGen = 
19d50 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
19d60 2e 70 53 63 68 65 6d 61 2d 3e 69 47 65 6e 65 72  .pSchema->iGener
19d70 61 74 69 6f 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ation;.  }else{.
19d80 20 20 20 20 69 47 65 6e 20 3d 20 69 4d 65 74 61      iGen = iMeta
19d90 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 61 73 73 65   = 0;.  }.  asse
19da0 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c  rt( pOp->p5==0 |
19db0 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  | pOp->p4type==P
19dc0 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 69 66 28  4_INT32 );.  if(
19dd0 20 70 4f 70 2d 3e 70 35 20 26 26 20 28 69 4d 65   pOp->p5 && (iMe
19de0 74 61 21 3d 70 4f 70 2d 3e 70 33 20 7c 7c 20 69  ta!=pOp->p3 || i
19df0 47 65 6e 21 3d 70 4f 70 2d 3e 70 34 2e 69 29 20  Gen!=pOp->p4.i) 
19e00 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62  ){.    sqlite3Db
19e10 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72  Free(db, p->zErr
19e20 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72  Msg);.    p->zEr
19e30 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 44 62  rMsg = sqlite3Db
19e40 53 74 72 44 75 70 28 64 62 2c 20 22 64 61 74 61  StrDup(db, "data
19e50 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20  base schema has 
19e60 63 68 61 6e 67 65 64 22 29 3b 0a 20 20 20 20 2f  changed");.    /
19e70 2a 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 2d  * If the schema-
19e80 63 6f 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65 20  cookie from the 
19e90 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d 61  database file ma
19ea0 74 63 68 65 73 20 74 68 65 20 63 6f 6f 6b 69 65  tches the cookie
19eb0 20 0a 20 20 20 20 2a 2a 20 73 74 6f 72 65 64 20   .    ** stored 
19ec0 77 69 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d 6f  with the in-memo
19ed0 72 79 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  ry representatio
19ee0 6e 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 2c  n of the schema,
19ef0 20 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 72   do.    ** not r
19f00 65 6c 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61  eload the schema
19f10 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
19f20 73 65 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a  se file..    **.
19f30 20 20 20 20 2a 2a 20 49 66 20 76 69 72 74 75 61      ** If virtua
19f40 6c 2d 74 61 62 6c 65 73 20 61 72 65 20 69 6e 20  l-tables are in 
19f50 75 73 65 2c 20 74 68 69 73 20 69 73 20 6e 6f 74  use, this is not
19f60 20 6a 75 73 74 20 61 6e 20 6f 70 74 69 6d 69 7a   just an optimiz
19f70 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66  ation..    ** Of
19f80 74 65 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73 74  ten, v-tables st
19f90 6f 72 65 20 74 68 65 69 72 20 64 61 74 61 20 69  ore their data i
19fa0 6e 20 6f 74 68 65 72 20 53 51 4c 69 74 65 20 74  n other SQLite t
19fb0 61 62 6c 65 73 2c 20 77 68 69 63 68 0a 20 20 20  ables, which.   
19fc0 20 2a 2a 20 61 72 65 20 71 75 65 72 69 65 64 20   ** are queried 
19fd0 66 72 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65 78  from within xNex
19fe0 74 28 29 20 61 6e 64 20 6f 74 68 65 72 20 76 2d  t() and other v-
19ff0 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 20 75 73  table methods us
1a000 69 6e 67 0a 20 20 20 20 2a 2a 20 70 72 65 70 61  ing.    ** prepa
1a010 72 65 64 20 71 75 65 72 69 65 73 2e 20 49 66 20  red queries. If 
1a020 73 75 63 68 20 61 20 71 75 65 72 79 20 69 73 20  such a query is 
1a030 6f 75 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65 20  out-of-date, we 
1a040 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a 20  do not want to. 
1a050 20 20 20 2a 2a 20 64 69 73 63 61 72 64 20 74 68     ** discard th
1a060 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
1a070 61 2c 20 61 73 20 74 68 65 20 75 73 65 72 20 63  a, as the user c
1a080 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67  ode implementing
1a090 20 74 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74 61   the.    ** v-ta
1a0a0 62 6c 65 20 77 6f 75 6c 64 20 68 61 76 65 20 74  ble would have t
1a0b0 6f 20 62 65 20 72 65 61 64 79 20 66 6f 72 20 74  o be ready for t
1a0c0 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  he sqlite3_vtab 
1a0d0 73 74 72 75 63 74 75 72 65 20 69 74 73 65 6c 66  structure itself
1a0e0 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65 20 69 6e  .    ** to be in
1a0f0 76 61 6c 69 64 61 74 65 64 20 77 68 65 6e 65 76  validated whenev
1a100 65 72 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  er sqlite3_step(
1a110 29 20 69 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d  ) is called from
1a120 20 77 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a 20   within .    ** 
1a130 61 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64  a v-table method
1a140 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
1a150 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
1a160 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d  ].pSchema->schem
1a170 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61 20  a_cookie!=iMeta 
1a180 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
1a190 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 64  ResetOneSchema(d
1a1a0 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20  b, pOp->p1);.   
1a1b0 20 7d 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65   }.    p->expire
1a1c0 64 20 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20  d = 1;.    rc = 
1a1d0 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20  SQLITE_SCHEMA;. 
1a1e0 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f   }.  if( rc ) go
1a1f0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1a200 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a  error;.  break;.
1a210 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  }../* Opcode: Re
1a220 61 64 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50  adCookie P1 P2 P
1a230 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64  3 * *.**.** Read
1a240 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50   cookie number P
1a250 33 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65 20  3 from database 
1a260 50 31 20 61 6e 64 20 77 72 69 74 65 20 69 74 20  P1 and write it 
1a270 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
1a280 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69 73 20 74 68  ..** P3==1 is th
1a290 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  e schema version
1a2a0 2e 20 20 50 33 3d 3d 32 20 69 73 20 74 68 65 20  .  P3==2 is the 
1a2b0 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e  database format.
1a2c0 0a 2a 2a 20 50 33 3d 3d 33 20 69 73 20 74 68 65  .** P3==3 is the
1a2d0 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67   recommended pag
1a2e0 65 72 20 63 61 63 68 65 20 73 69 7a 65 2c 20 61  er cache size, a
1a2f0 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31  nd so forth.  P1
1a300 3d 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61  ==0 is.** the ma
1a310 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
1a320 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68   and P1==1 is th
1a330 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
1a340 75 73 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a  used to store.**
1a350 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1a360 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d  s..**.** There m
1a370 75 73 74 20 62 65 20 61 20 72 65 61 64 2d 6c 6f  ust be a read-lo
1a380 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ck on the databa
1a390 73 65 20 28 65 69 74 68 65 72 20 61 20 74 72 61  se (either a tra
1a3a0 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74  nsaction.** must
1a3b0 20 62 65 20 73 74 61 72 74 65 64 20 6f 72 20 74   be started or t
1a3c0 68 65 72 65 20 6d 75 73 74 20 62 65 20 61 6e 20  here must be an 
1a3d0 6f 70 65 6e 20 63 75 72 73 6f 72 29 20 62 65 66  open cursor) bef
1a3e0 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e 67  ore.** executing
1a3f0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
1a400 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  n..*/.case OP_Re
1a410 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20  adCookie: {     
1a420 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
1a430 32 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61  2 */.  int iMeta
1a440 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69  ;.  int iDb;.  i
1a450 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20 61  nt iCookie;..  a
1a460 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
1a470 64 65 72 20 29 3b 0a 20 20 69 44 62 20 3d 20 70  der );.  iDb = p
1a480 4f 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b 69  Op->p1;.  iCooki
1a490 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61  e = pOp->p3;.  a
1a4a0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53  ssert( pOp->p3<S
1a4b0 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45  QLITE_N_BTREE_ME
1a4c0 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  TA );.  assert( 
1a4d0 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62  iDb>=0 && iDb<db
1a4e0 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
1a4f0 74 28 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  t( db->aDb[iDb].
1a500 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  pBt!=0 );.  asse
1a510 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
1a520 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62  ->btreeMask, iDb
1a530 29 20 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42  ) );..  sqlite3B
1a540 74 72 65 65 47 65 74 4d 65 74 61 28 64 62 2d 3e  treeGetMeta(db->
1a550 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 69 43  aDb[iDb].pBt, iC
1a560 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a 29 26 69  ookie, (u32 *)&i
1a570 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74 20 3d 20  Meta);.  pOut = 
1a580 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
1a590 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e  , pOp);.  pOut->
1a5a0 75 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20 20 62  u.i = iMeta;.  b
1a5b0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1a5c0 64 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20 50 31  de: SetCookie P1
1a5d0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
1a5e0 20 57 72 69 74 65 20 74 68 65 20 69 6e 74 65 67   Write the integ
1a5f0 65 72 20 76 61 6c 75 65 20 50 33 20 69 6e 74 6f  er value P3 into
1a600 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50   cookie number P
1a610 32 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31  2 of database P1
1a620 2e 0a 2a 2a 20 50 32 3d 3d 31 20 69 73 20 74 68  ..** P2==1 is th
1a630 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  e schema version
1a640 2e 20 20 50 32 3d 3d 32 20 69 73 20 74 68 65 20  .  P2==2 is the 
1a650 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e  database format.
1a660 0a 2a 2a 20 50 32 3d 3d 33 20 69 73 20 74 68 65  .** P2==3 is the
1a670 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67   recommended pag
1a680 65 72 20 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a  er cache .** siz
1a690 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e  e, and so forth.
1a6a0 20 20 50 31 3d 3d 30 20 69 73 20 74 68 65 20 6d    P1==0 is the m
1a6b0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
1a6c0 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74  e and P1==1 is t
1a6d0 68 65 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  he .** database 
1a6e0 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f  file used to sto
1a6f0 72 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  re temporary tab
1a700 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61  les..**.** A tra
1a710 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65  nsaction must be
1a720 20 73 74 61 72 74 65 64 20 62 65 66 6f 72 65 20   started before 
1a730 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20 6f  executing this o
1a740 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  pcode..*/.case O
1a750 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 0a 20  P_SetCookie: {. 
1a760 20 44 62 20 2a 70 44 62 3b 0a 20 20 61 73 73 65   Db *pDb;.  asse
1a770 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49  rt( pOp->p2<SQLI
1a780 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20  TE_N_BTREE_META 
1a790 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1a7a0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1a7b0 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
1a7c0 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
1a7d0 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
1a7e0 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61   pOp->p1) );.  a
1a7f0 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
1a800 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d  ly==0 );.  pDb =
1a810 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70   &db->aDb[pOp->p
1a820 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44  1];.  assert( pD
1a830 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61  b->pBt!=0 );.  a
1a840 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63  ssert( sqlite3Sc
1a850 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62  hemaMutexHeld(db
1a860 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b  , pOp->p1, 0) );
1a870 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20 61  .  /* See note a
1a880 62 6f 75 74 20 69 6e 64 65 78 20 73 68 69 66 74  bout index shift
1a890 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43 6f  ing on OP_ReadCo
1a8a0 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73  okie */.  rc = s
1a8b0 71 6c 69 74 65 33 42 74 72 65 65 55 70 64 61 74  qlite3BtreeUpdat
1a8c0 65 4d 65 74 61 28 70 44 62 2d 3e 70 42 74 2c 20  eMeta(pDb->pBt, 
1a8d0 70 4f 70 2d 3e 70 32 2c 20 70 4f 70 2d 3e 70 33  pOp->p2, pOp->p3
1a8e0 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  );.  if( pOp->p2
1a8f0 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56  ==BTREE_SCHEMA_V
1a900 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a  ERSION ){.    /*
1a910 20 57 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61   When the schema
1a920 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c   cookie changes,
1a930 20 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20   record the new 
1a940 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c  cookie internall
1a950 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53  y */.    pDb->pS
1a960 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f  chema->schema_co
1a970 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  okie = pOp->p3;.
1a980 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d      db->flags |=
1a990 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68   SQLITE_InternCh
1a9a0 61 6e 67 65 73 3b 0a 20 20 7d 65 6c 73 65 20 69  anges;.  }else i
1a9b0 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45  f( pOp->p2==BTRE
1a9c0 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 29 7b  E_FILE_FORMAT ){
1a9d0 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72 64 20 63  .    /* Record c
1a9e0 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 66 69  hanges in the fi
1a9f0 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20 20  le format */.   
1aa00 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66   pDb->pSchema->f
1aa10 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 4f 70  ile_format = pOp
1aa20 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 69 66 28 20  ->p3;.  }.  if( 
1aa30 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20  pOp->p1==1 ){.  
1aa40 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20    /* Invalidate 
1aa50 61 6c 6c 20 70 72 65 70 61 72 65 64 20 73 74 61  all prepared sta
1aa60 74 65 6d 65 6e 74 73 20 77 68 65 6e 65 76 65 72  tements whenever
1aa70 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
1aa80 73 65 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d 61  se.    ** schema
1aa90 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20 54 69   is changed.  Ti
1aaa0 63 6b 65 74 20 23 31 36 34 34 20 2a 2f 0a 20 20  cket #1644 */.  
1aab0 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50    sqlite3ExpireP
1aac0 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
1aad0 73 28 64 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78  s(db);.    p->ex
1aae0 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20  pired = 0;.  }. 
1aaf0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
1ab00 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1ab10 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  r;.  break;.}../
1ab20 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65  * Opcode: OpenRe
1ab30 61 64 20 50 31 20 50 32 20 50 33 20 50 34 20 50  ad P1 P2 P3 P4 P
1ab40 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  5.** Synopsis: r
1ab50 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a  oot=P2 iDb=P3.**
1ab60 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2d  .** Open a read-
1ab70 6f 6e 6c 79 20 63 75 72 73 6f 72 20 66 6f 72 20  only cursor for 
1ab80 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
1ab90 6c 65 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61  le whose root pa
1aba0 67 65 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61  ge is.** P2 in a
1abb0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20   database file. 
1abc0 20 54 68 65 20 64 61 74 61 62 61 73 65 20 66 69   The database fi
1abd0 6c 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  le is determined
1abe0 20 62 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d   by P3. .** P3==
1abf0 30 20 6d 65 61 6e 73 20 74 68 65 20 6d 61 69 6e  0 means the main
1ac00 20 64 61 74 61 62 61 73 65 2c 20 50 33 3d 3d 31   database, P3==1
1ac10 20 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61 62   means the datab
1ac20 61 73 65 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a  ase used for .**
1ac30 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1ac40 73 2c 20 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e  s, and P3>1 mean
1ac50 73 20 75 73 65 64 20 74 68 65 20 63 6f 72 72 65  s used the corre
1ac60 73 70 6f 6e 64 69 6e 67 20 61 74 74 61 63 68 65  sponding attache
1ac70 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20  d.** database.  
1ac80 47 69 76 65 20 74 68 65 20 6e 65 77 20 63 75 72  Give the new cur
1ac90 73 6f 72 20 61 6e 20 69 64 65 6e 74 69 66 69 65  sor an identifie
1aca0 72 20 6f 66 20 50 31 2e 20 20 54 68 65 20 50 31  r of P1.  The P1
1acb0 0a 2a 2a 20 76 61 6c 75 65 73 20 6e 65 65 64 20  .** values need 
1acc0 6e 6f 74 20 62 65 20 63 6f 6e 74 69 67 75 6f 75  not be contiguou
1acd0 73 20 62 75 74 20 61 6c 6c 20 50 31 20 76 61 6c  s but all P1 val
1ace0 75 65 73 20 73 68 6f 75 6c 64 20 62 65 20 73 6d  ues should be sm
1acf0 61 6c 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a  all integers..**
1ad00 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20   It is an error 
1ad10 66 6f 72 20 50 31 20 74 6f 20 62 65 20 6e 65 67  for P1 to be neg
1ad20 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ative..**.** If 
1ad30 50 35 21 3d 30 20 74 68 65 6e 20 75 73 65 20 74  P5!=0 then use t
1ad40 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
1ad50 67 69 73 74 65 72 20 50 32 20 61 73 20 74 68 65  gister P2 as the
1ad60 20 72 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74 0a   root page, not.
1ad70 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ** the value of 
1ad80 50 32 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a  P2 itself..**.**
1ad90 20 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20 61   There will be a
1ada0 20 72 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 74 68   read lock on th
1adb0 65 20 64 61 74 61 62 61 73 65 20 77 68 65 6e 65  e database whene
1adc0 76 65 72 20 74 68 65 72 65 20 69 73 20 61 6e 0a  ver there is an.
1add0 2a 2a 20 6f 70 65 6e 20 63 75 72 73 6f 72 2e 20  ** open cursor. 
1ade0 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65   If the database
1adf0 20 77 61 73 20 75 6e 6c 6f 63 6b 65 64 20 70 72   was unlocked pr
1ae00 69 6f 72 20 74 6f 20 74 68 69 73 20 69 6e 73 74  ior to this inst
1ae10 72 75 63 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20  ruction.** then 
1ae20 61 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 20 61  a read lock is a
1ae30 63 71 75 69 72 65 64 20 61 73 20 70 61 72 74 20  cquired as part 
1ae40 6f 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  of this instruct
1ae50 69 6f 6e 2e 20 20 41 20 72 65 61 64 0a 2a 2a 20  ion.  A read.** 
1ae60 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20 6f 74 68 65  lock allows othe
1ae70 72 20 70 72 6f 63 65 73 73 65 73 20 74 6f 20 72  r processes to r
1ae80 65 61 64 20 74 68 65 20 64 61 74 61 62 61 73 65  ead the database
1ae90 20 62 75 74 20 70 72 6f 68 69 62 69 74 73 0a 2a   but prohibits.*
1aea0 2a 20 61 6e 79 20 6f 74 68 65 72 20 70 72 6f 63  * any other proc
1aeb0 65 73 73 20 66 72 6f 6d 20 6d 6f 64 69 66 79 69  ess from modifyi
1aec0 6e 67 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  ng the database.
1aed0 20 20 54 68 65 20 72 65 61 64 20 6c 6f 63 6b 20    The read lock 
1aee0 69 73 0a 2a 2a 20 72 65 6c 65 61 73 65 64 20 77  is.** released w
1aef0 68 65 6e 20 61 6c 6c 20 63 75 72 73 6f 72 73 20  hen all cursors 
1af00 61 72 65 20 63 6c 6f 73 65 64 2e 20 20 49 66 20  are closed.  If 
1af10 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
1af20 20 61 74 74 65 6d 70 74 73 0a 2a 2a 20 74 6f 20   attempts.** to 
1af30 67 65 74 20 61 20 72 65 61 64 20 6c 6f 63 6b 20  get a read lock 
1af40 62 75 74 20 66 61 69 6c 73 2c 20 74 68 65 20 73  but fails, the s
1af50 63 72 69 70 74 20 74 65 72 6d 69 6e 61 74 65 73  cript terminates
1af60 20 77 69 74 68 20 61 6e 0a 2a 2a 20 53 51 4c 49   with an.** SQLI
1af70 54 45 5f 42 55 53 59 20 65 72 72 6f 72 20 63 6f  TE_BUSY error co
1af80 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  de..**.** The P4
1af90 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69   value may be ei
1afa0 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20  ther an integer 
1afb0 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20  (P4_INT32) or a 
1afc0 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20  pointer to.** a 
1afd0 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
1afe0 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20  e (P4_KEYINFO). 
1aff0 49 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74  If it is a point
1b000 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20  er to a KeyInfo 
1b010 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74  .** structure, t
1b020 68 65 6e 20 73 61 69 64 20 73 74 72 75 63 74 75  hen said structu
1b030 72 65 20 64 65 66 69 6e 65 73 20 74 68 65 20 63  re defines the c
1b040 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61  ontent and colla
1b050 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63  ting .** sequenc
1b060 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62  e of the index b
1b070 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68  eing opened. Oth
1b080 65 72 77 69 73 65 2c 20 69 66 20 50 34 20 69 73  erwise, if P4 is
1b090 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20   an integer .** 
1b0a0 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74  value, it is set
1b0b0 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   to the number o
1b0c0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
1b0d0 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65   table..**.** Se
1b0e0 65 20 61 6c 73 6f 3a 20 4f 70 65 6e 57 72 69 74  e also: OpenWrit
1b0f0 65 2c 20 52 65 6f 70 65 6e 49 64 78 0a 2a 2f 0a  e, ReopenIdx.*/.
1b100 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6f 70 65  /* Opcode: Reope
1b110 6e 49 64 78 20 50 31 20 50 32 20 50 33 20 50 34  nIdx P1 P2 P3 P4
1b120 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
1b130 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a   root=P2 iDb=P3.
1b140 2a 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e  **.** The Reopen
1b150 49 64 78 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73  Idx opcode works
1b160 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 52 65   exactly like Re
1b170 61 64 4f 70 65 6e 20 65 78 63 65 70 74 20 74 68  adOpen except th
1b180 61 74 20 69 74 20 66 69 72 73 74 0a 2a 2a 20 63  at it first.** c
1b190 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20  hecks to see if 
1b1a0 74 68 65 20 63 75 72 73 6f 72 20 6f 6e 20 50 31  the cursor on P1
1b1b0 20 69 73 20 61 6c 72 65 61 64 79 20 6f 70 65 6e   is already open
1b1c0 20 77 69 74 68 20 61 20 72 6f 6f 74 20 70 61 67   with a root pag
1b1d0 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 50  e.** number of P
1b1e0 32 20 61 6e 64 20 69 66 20 69 74 20 69 73 20 74  2 and if it is t
1b1f0 68 69 73 20 6f 70 63 6f 64 65 20 62 65 63 6f 6d  his opcode becom
1b200 65 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 49 6e 20  es a no-op.  In 
1b210 6f 74 68 65 72 20 77 6f 72 64 73 2c 0a 2a 2a 20  other words,.** 
1b220 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  if the cursor is
1b230 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 2c 20 64   already open, d
1b240 6f 20 6e 6f 74 20 72 65 6f 70 65 6e 20 69 74 2e  o not reopen it.
1b250 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65  .**.** The Reope
1b260 6e 49 64 78 20 6f 70 63 6f 64 65 20 6d 61 79 20  nIdx opcode may 
1b270 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 77 69 74  only be used wit
1b280 68 20 50 35 3d 3d 30 20 61 6e 64 20 77 69 74 68  h P5==0 and with
1b290 20 50 34 20 62 65 69 6e 67 0a 2a 2a 20 61 20 50   P4 being.** a P
1b2a0 34 5f 4b 45 59 49 4e 46 4f 20 6f 62 6a 65 63 74  4_KEYINFO object
1b2b0 2e 20 20 46 75 72 74 68 65 72 6d 6f 72 65 2c 20  .  Furthermore, 
1b2c0 74 68 65 20 50 33 20 76 61 6c 75 65 20 6d 75 73  the P3 value mus
1b2d0 74 20 62 65 20 74 68 65 20 73 61 6d 65 20 61 73  t be the same as
1b2e0 0a 2a 2a 20 65 76 65 72 79 20 6f 74 68 65 72 20  .** every other 
1b2f0 52 65 6f 70 65 6e 49 64 78 20 6f 72 20 4f 70 65  ReopenIdx or Ope
1b300 6e 52 65 61 64 20 66 6f 72 20 74 68 65 20 73 61  nRead for the sa
1b310 6d 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  me cursor number
1b320 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 74 68 65 20  ..**.** See the 
1b330 4f 70 65 6e 52 65 61 64 20 6f 70 63 6f 64 65 20  OpenRead opcode 
1b340 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f  documentation fo
1b350 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
1b360 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  ormation..*/./* 
1b370 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69 74  Opcode: OpenWrit
1b380 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
1b390 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f  .** Synopsis: ro
1b3a0 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a  ot=P2 iDb=P3.**.
1b3b0 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2f 77  ** Open a read/w
1b3c0 72 69 74 65 20 63 75 72 73 6f 72 20 6e 61 6d 65  rite cursor name
1b3d0 64 20 50 31 20 6f 6e 20 74 68 65 20 74 61 62 6c  d P1 on the tabl
1b3e0 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65  e or index whose
1b3f0 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73   root.** page is
1b400 20 50 32 2e 20 20 4f 72 20 69 66 20 50 35 21 3d   P2.  Or if P5!=
1b410 30 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e  0 use the conten
1b420 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32  t of register P2
1b430 20 74 6f 20 66 69 6e 64 20 74 68 65 0a 2a 2a 20   to find the.** 
1b440 72 6f 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a  root page..**.**
1b450 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61   The P4 value ma
1b460 79 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 69  y be either an i
1b470 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32  nteger (P4_INT32
1b480 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74  ) or a pointer t
1b490 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73  o.** a KeyInfo s
1b4a0 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59  tructure (P4_KEY
1b4b0 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20  INFO). If it is 
1b4c0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b  a pointer to a K
1b4d0 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63  eyInfo .** struc
1b4e0 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20  ture, then said 
1b4f0 73 74 72 75 63 74 75 72 65 20 64 65 66 69 6e 65  structure define
1b500 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e  s the content an
1b510 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20  d collating .** 
1b520 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20  sequence of the 
1b530 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e  index being open
1b540 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  ed. Otherwise, i
1b550 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67  f P4 is an integ
1b560 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74  er .** value, it
1b570 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e   is set to the n
1b580 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
1b590 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 6f   in the table, o
1b5a0 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 61 72 67  r to the.** larg
1b5b0 65 73 74 20 69 6e 64 65 78 20 6f 66 20 61 6e 79  est index of any
1b5c0 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 74   column of the t
1b5d0 61 62 6c 65 20 74 68 61 74 20 69 73 20 61 63 74  able that is act
1b5e0 75 61 6c 6c 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a  ually used..**.*
1b5f0 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
1b600 6f 6e 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  on works just li
1b610 6b 65 20 4f 70 65 6e 52 65 61 64 20 65 78 63 65  ke OpenRead exce
1b620 70 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73  pt that it opens
1b630 20 74 68 65 20 63 75 72 73 6f 72 0a 2a 2a 20 69   the cursor.** i
1b640 6e 20 72 65 61 64 2f 77 72 69 74 65 20 6d 6f 64  n read/write mod
1b650 65 2e 20 20 46 6f 72 20 61 20 67 69 76 65 6e 20  e.  For a given 
1b660 74 61 62 6c 65 2c 20 74 68 65 72 65 20 63 61 6e  table, there can
1b670 20 62 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20   be one or more 
1b680 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72  read-only.** cur
1b690 73 6f 72 73 20 6f 72 20 61 20 73 69 6e 67 6c 65  sors or a single
1b6a0 20 72 65 61 64 2f 77 72 69 74 65 20 63 75 72 73   read/write curs
1b6b0 6f 72 20 62 75 74 20 6e 6f 74 20 62 6f 74 68 2e  or but not both.
1b6c0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20  .**.** See also 
1b6d0 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61 73  OpenRead..*/.cas
1b6e0 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78 3a 20  e OP_ReopenIdx: 
1b6f0 7b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a  {.  int nField;.
1b700 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49    KeyInfo *pKeyI
1b710 6e 66 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20  nfo;.  int p2;. 
1b720 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20   int iDb;.  int 
1b730 77 72 46 6c 61 67 3b 0a 20 20 42 74 72 65 65 20  wrFlag;.  Btree 
1b740 2a 70 58 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  *pX;.  VdbeCurso
1b750 72 20 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a 70  r *pCur;.  Db *p
1b760 44 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Db;..  assert( p
1b770 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70  Op->p5==0 || pOp
1b780 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45  ->p5==OPFLAG_SEE
1b790 4b 45 51 20 29 3b 0a 20 20 61 73 73 65 72 74 28  KEQ );.  assert(
1b7a0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1b7b0 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 70 43  _KEYINFO );.  pC
1b7c0 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ur = p->apCsr[pO
1b7d0 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 43  p->p1];.  if( pC
1b7e0 75 72 20 26 26 20 70 43 75 72 2d 3e 70 67 6e 6f  ur && pCur->pgno
1b7f0 52 6f 6f 74 3d 3d 28 75 33 32 29 70 4f 70 2d 3e  Root==(u32)pOp->
1b800 70 32 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  p2 ){.    assert
1b810 28 20 70 43 75 72 2d 3e 69 44 62 3d 3d 70 4f 70  ( pCur->iDb==pOp
1b820 2d 3e 70 33 20 29 3b 20 20 20 20 20 20 2f 2a 20  ->p3 );      /* 
1b830 47 75 61 72 61 6e 74 65 65 64 20 62 79 20 74 68  Guaranteed by th
1b840 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  e code generator
1b850 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6f 70 65   */.    goto ope
1b860 6e 5f 63 75 72 73 6f 72 5f 73 65 74 5f 68 69 6e  n_cursor_set_hin
1b870 74 73 3b 0a 20 20 7d 0a 20 20 2f 2a 20 49 66 20  ts;.  }.  /* If 
1b880 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 6e 6f  the cursor is no
1b890 74 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e  t currently open
1b8a0 20 6f 72 20 69 73 20 6f 70 65 6e 20 6f 6e 20 61   or is open on a
1b8b0 20 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20   different.  ** 
1b8c0 69 6e 64 65 78 2c 20 74 68 65 6e 20 66 61 6c 6c  index, then fall
1b8d0 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50   through into OP
1b8e0 5f 4f 70 65 6e 52 65 61 64 20 74 6f 20 66 6f 72  _OpenRead to for
1b8f0 63 65 20 61 20 72 65 6f 70 65 6e 20 2a 2f 0a 63  ce a reopen */.c
1b900 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64 3a  ase OP_OpenRead:
1b910 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 57 72 69  .case OP_OpenWri
1b920 74 65 3a 0a 0a 20 20 61 73 73 65 72 74 28 20 70  te:..  assert( p
1b930 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f  Op->opcode==OP_O
1b940 70 65 6e 57 72 69 74 65 20 7c 7c 20 70 4f 70 2d  penWrite || pOp-
1b950 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70  >p5==0 || pOp->p
1b960 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51  5==OPFLAG_SEEKEQ
1b970 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
1b980 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20  >bIsReader );.  
1b990 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
1b9a0 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 52 65 61 64  ode==OP_OpenRead
1b9b0 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
1b9c0 3d 4f 50 5f 52 65 6f 70 65 6e 49 64 78 0a 20 20  =OP_ReopenIdx.  
1b9d0 20 20 20 20 20 20 20 20 7c 7c 20 70 2d 3e 72 65          || p->re
1b9e0 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20  adOnly==0 );..  
1b9f0 69 66 28 20 70 2d 3e 65 78 70 69 72 65 64 20 29  if( p->expired )
1ba00 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
1ba10 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b  E_ABORT_ROLLBACK
1ba20 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  ;.    goto abort
1ba30 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1ba40 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20 30   }..  nField = 0
1ba50 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 30  ;.  pKeyInfo = 0
1ba60 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32  ;.  p2 = pOp->p2
1ba70 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70  ;.  iDb = pOp->p
1ba80 33 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62  3;.  assert( iDb
1ba90 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e  >=0 && iDb<db->n
1baa0 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
1bab0 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
1bac0 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b  reeMask, iDb) );
1bad0 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  .  pDb = &db->aD
1bae0 62 5b 69 44 62 5d 3b 0a 20 20 70 58 20 3d 20 70  b[iDb];.  pX = p
1baf0 44 62 2d 3e 70 42 74 3b 0a 20 20 61 73 73 65 72  Db->pBt;.  asser
1bb00 74 28 20 70 58 21 3d 30 20 29 3b 0a 20 20 69 66  t( pX!=0 );.  if
1bb10 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
1bb20 50 5f 4f 70 65 6e 57 72 69 74 65 20 29 7b 0a 20  P_OpenWrite ){. 
1bb30 20 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41     assert( OPFLA
1bb40 47 5f 46 4f 52 44 45 4c 45 54 45 3d 3d 42 54 52  G_FORDELETE==BTR
1bb50 45 45 5f 46 4f 52 44 45 4c 45 54 45 20 29 3b 0a  EE_FORDELETE );.
1bb60 20 20 20 20 77 72 46 6c 61 67 20 3d 20 42 54 52      wrFlag = BTR
1bb70 45 45 5f 57 52 43 53 52 20 7c 20 28 70 4f 70 2d  EE_WRCSR | (pOp-
1bb80 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 46 4f 52  >p5 & OPFLAG_FOR
1bb90 44 45 4c 45 54 45 29 3b 0a 20 20 20 20 61 73 73  DELETE);.    ass
1bba0 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65  ert( sqlite3Sche
1bbb0 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20  maMutexHeld(db, 
1bbc0 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69  iDb, 0) );.    i
1bbd0 66 28 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d  f( pDb->pSchema-
1bbe0 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20 70  >file_format < p
1bbf0 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
1bc00 72 6d 61 74 20 29 7b 0a 20 20 20 20 20 20 70 2d  rmat ){.      p-
1bc10 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72  >minWriteFileFor
1bc20 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53 63 68 65  mat = pDb->pSche
1bc30 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3b  ma->file_format;
1bc40 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
1bc50 20 20 20 20 77 72 46 6c 61 67 20 3d 20 30 3b 0a      wrFlag = 0;.
1bc60 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70    }.  if( pOp->p
1bc70 35 20 26 20 4f 50 46 4c 41 47 5f 50 32 49 53 52  5 & OPFLAG_P2ISR
1bc80 45 47 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  EG ){.    assert
1bc90 28 20 70 32 3e 30 20 29 3b 0a 20 20 20 20 61 73  ( p2>0 );.    as
1bca0 73 65 72 74 28 20 70 32 3c 3d 28 70 2d 3e 6e 4d  sert( p2<=(p->nM
1bcb0 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
1bcc0 72 29 20 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d  r) );.    pIn2 =
1bcd0 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20   &aMem[p2];.    
1bce0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
1bcf0 69 64 28 70 49 6e 32 29 20 29 3b 0a 20 20 20 20  id(pIn2) );.    
1bd00 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66  assert( (pIn2->f
1bd10 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21  lags & MEM_Int)!
1bd20 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  =0 );.    sqlite
1bd30 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
1bd40 66 79 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 32  fy(pIn2);.    p2
1bd50 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75 2e   = (int)pIn2->u.
1bd60 69 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20 70 32  i;.    /* The p2
1bd70 20 76 61 6c 75 65 20 61 6c 77 61 79 73 20 63 6f   value always co
1bd80 6d 65 73 20 66 72 6f 6d 20 61 20 70 72 69 6f 72  mes from a prior
1bd90 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20   OP_CreateTable 
1bda0 6f 70 63 6f 64 65 20 61 6e 64 0a 20 20 20 20 2a  opcode and.    *
1bdb0 2a 20 74 68 61 74 20 6f 70 63 6f 64 65 20 77 69  * that opcode wi
1bdc0 6c 6c 20 61 6c 77 61 79 73 20 73 65 74 20 74 68  ll always set th
1bdd0 65 20 70 32 20 76 61 6c 75 65 20 74 6f 20 32 20  e p2 value to 2 
1bde0 6f 72 20 6d 6f 72 65 20 6f 72 20 65 6c 73 65 20  or more or else 
1bdf0 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 20 49 66 20  fail..    ** If 
1be00 74 68 65 72 65 20 77 65 72 65 20 61 20 66 61 69  there were a fai
1be10 6c 75 72 65 2c 20 74 68 65 20 70 72 65 70 61 72  lure, the prepar
1be20 65 64 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75  ed statement wou
1be30 6c 64 20 68 61 76 65 20 68 61 6c 74 65 64 0a 20  ld have halted. 
1be40 20 20 20 2a 2a 20 62 65 66 6f 72 65 20 72 65 61     ** before rea
1be50 63 68 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72  ching this instr
1be60 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61  uction. */.    a
1be70 73 73 65 72 74 28 20 70 32 3e 3d 32 20 29 3b 0a  ssert( p2>=2 );.
1be80 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70    }.  if( pOp->p
1be90 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46  4type==P4_KEYINF
1bea0 4f 20 29 7b 0a 20 20 20 20 70 4b 65 79 49 6e 66  O ){.    pKeyInf
1beb0 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79  o = pOp->p4.pKey
1bec0 49 6e 66 6f 3b 0a 20 20 20 20 61 73 73 65 72 74  Info;.    assert
1bed0 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d  ( pKeyInfo->enc=
1bee0 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 20 20  =ENC(db) );.    
1bef0 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f  assert( pKeyInfo
1bf00 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20  ->db==db );.    
1bf10 6e 46 69 65 6c 64 20 3d 20 70 4b 65 79 49 6e 66  nField = pKeyInf
1bf20 6f 2d 3e 6e 46 69 65 6c 64 2b 70 4b 65 79 49 6e  o->nField+pKeyIn
1bf30 66 6f 2d 3e 6e 58 46 69 65 6c 64 3b 0a 20 20 7d  fo->nXField;.  }
1bf40 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 34  else if( pOp->p4
1bf50 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
1bf60 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70  {.    nField = p
1bf70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a 20 20  Op->p4.i;.  }.  
1bf80 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1bf90 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1bfa0 6e 46 69 65 6c 64 3e 3d 30 20 29 3b 0a 20 20 74  nField>=0 );.  t
1bfb0 65 73 74 63 61 73 65 28 20 6e 46 69 65 6c 64 3d  estcase( nField=
1bfc0 3d 30 20 29 3b 20 20 2f 2a 20 54 61 62 6c 65 20  =0 );  /* Table 
1bfd0 77 69 74 68 20 49 4e 54 45 47 45 52 20 50 52 49  with INTEGER PRI
1bfe0 4d 41 52 59 20 4b 45 59 20 61 6e 64 20 6e 6f 74  MARY KEY and not
1bff0 68 69 6e 67 20 65 6c 73 65 20 2a 2f 0a 20 20 70  hing else */.  p
1c000 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  Cur = allocateCu
1c010 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
1c020 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c 20 43 55   nField, iDb, CU
1c030 52 54 59 50 45 5f 42 54 52 45 45 29 3b 0a 20 20  RTYPE_BTREE);.  
1c040 69 66 28 20 70 43 75 72 3d 3d 30 20 29 20 67 6f  if( pCur==0 ) go
1c050 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75  to no_mem;.  pCu
1c060 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  r->nullRow = 1;.
1c070 20 20 70 43 75 72 2d 3e 69 73 4f 72 64 65 72 65    pCur->isOrdere
1c080 64 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e 70  d = 1;.  pCur->p
1c090 67 6e 6f 52 6f 6f 74 20 3d 20 70 32 3b 0a 23 69  gnoRoot = p2;.#i
1c0a0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
1c0b0 47 0a 20 20 70 43 75 72 2d 3e 77 72 46 6c 61 67  G.  pCur->wrFlag
1c0c0 20 3d 20 77 72 46 6c 61 67 3b 0a 23 65 6e 64 69   = wrFlag;.#endi
1c0d0 66 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  f.  rc = sqlite3
1c0e0 42 74 72 65 65 43 75 72 73 6f 72 28 70 58 2c 20  BtreeCursor(pX, 
1c0f0 70 32 2c 20 77 72 46 6c 61 67 2c 20 70 4b 65 79  p2, wrFlag, pKey
1c100 49 6e 66 6f 2c 20 70 43 75 72 2d 3e 75 63 2e 70  Info, pCur->uc.p
1c110 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 75 72 2d  Cursor);.  pCur-
1c120 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79  >pKeyInfo = pKey
1c130 49 6e 66 6f 3b 0a 20 20 2f 2a 20 53 65 74 20 74  Info;.  /* Set t
1c140 68 65 20 56 64 62 65 43 75 72 73 6f 72 2e 69 73  he VdbeCursor.is
1c150 54 61 62 6c 65 20 76 61 72 69 61 62 6c 65 2e 20  Table variable. 
1c160 50 72 65 76 69 6f 75 73 20 76 65 72 73 69 6f 6e  Previous version
1c170 73 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69 74 65  s of.  ** SQLite
1c180 20 75 73 65 64 20 74 6f 20 63 68 65 63 6b 20 69   used to check i
1c190 66 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  f the root-page 
1c1a0 66 6c 61 67 73 20 77 65 72 65 20 73 61 6e 65 20  flags were sane 
1c1b0 61 74 20 74 68 69 73 20 70 6f 69 6e 74 0a 20 20  at this point.  
1c1c0 2a 2a 20 61 6e 64 20 72 65 70 6f 72 74 20 64 61  ** and report da
1c1d0 74 61 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f  tabase corruptio
1c1e0 6e 20 69 66 20 74 68 65 79 20 77 65 72 65 20 6e  n if they were n
1c1f0 6f 74 2c 20 62 75 74 20 74 68 69 73 20 63 68 65  ot, but this che
1c200 63 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69 6e 63  ck has.  ** sinc
1c210 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65  e moved into the
1c220 20 62 74 72 65 65 20 6c 61 79 65 72 2e 20 20 2a   btree layer.  *
1c230 2f 20 20 0a 20 20 70 43 75 72 2d 3e 69 73 54 61  /  .  pCur->isTa
1c240 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70  ble = pOp->p4typ
1c250 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 0a  e!=P4_KEYINFO;..
1c260 6f 70 65 6e 5f 63 75 72 73 6f 72 5f 73 65 74 5f  open_cursor_set_
1c270 68 69 6e 74 73 3a 0a 20 20 61 73 73 65 72 74 28  hints:.  assert(
1c280 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 3d   OPFLAG_BULKCSR=
1c290 3d 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 20  =BTREE_BULKLOAD 
1c2a0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46  );.  assert( OPF
1c2b0 4c 41 47 5f 53 45 45 4b 45 51 3d 3d 42 54 52 45  LAG_SEEKEQ==BTRE
1c2c0 45 5f 53 45 45 4b 5f 45 51 20 29 3b 0a 20 20 74  E_SEEK_EQ );.  t
1c2d0 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35  estcase( pOp->p5
1c2e0 20 26 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53   & OPFLAG_BULKCS
1c2f0 52 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  R );.#ifdef SQLI
1c300 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52  TE_ENABLE_CURSOR
1c310 5f 48 49 4e 54 53 0a 20 20 74 65 73 74 63 61 73  _HINTS.  testcas
1c320 65 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46  e( pOp->p2 & OPF
1c330 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a 23 65  LAG_SEEKEQ );.#e
1c340 6e 64 69 66 0a 20 20 73 71 6c 69 74 65 33 42 74  ndif.  sqlite3Bt
1c350 72 65 65 43 75 72 73 6f 72 48 69 6e 74 46 6c 61  reeCursorHintFla
1c360 67 73 28 70 43 75 72 2d 3e 75 63 2e 70 43 75 72  gs(pCur->uc.pCur
1c370 73 6f 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20  sor,.           
1c380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c390 20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 28      (pOp->p5 & (
1c3a0 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 7c 4f  OPFLAG_BULKCSR|O
1c3b0 50 46 4c 41 47 5f 53 45 45 4b 45 51 29 29 29 3b  PFLAG_SEEKEQ)));
1c3c0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
1c3d0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1c3e0 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ror;.  break;.}.
1c3f0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
1c400 45 70 68 65 6d 65 72 61 6c 20 50 31 20 50 32 20  Ephemeral P1 P2 
1c410 2a 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  * P4 P5.** Synop
1c420 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a  sis: nColumn=P2.
1c430 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77  **.** Open a new
1c440 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20   cursor P1 to a 
1c450 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e  transient table.
1c460 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 69  .** The cursor i
1c470 73 20 61 6c 77 61 79 73 20 6f 70 65 6e 65 64 20  s always opened 
1c480 72 65 61 64 2f 77 72 69 74 65 20 65 76 65 6e 20  read/write even 
1c490 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20  if .** the main 
1c4a0 64 61 74 61 62 61 73 65 20 69 73 20 72 65 61 64  database is read
1c4b0 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 65 70 68 65  -only.  The ephe
1c4c0 6d 65 72 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 69  meral.** table i
1c4d0 73 20 64 65 6c 65 74 65 64 20 61 75 74 6f 6d 61  s deleted automa
1c4e0 74 69 63 61 6c 6c 79 20 77 68 65 6e 20 74 68 65  tically when the
1c4f0 20 63 75 72 73 6f 72 20 69 73 20 63 6c 6f 73 65   cursor is close
1c500 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74  d..**.** P2 is t
1c510 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
1c520 75 6d 6e 73 20 69 6e 20 74 68 65 20 65 70 68 65  umns in the ephe
1c530 6d 65 72 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20  meral table..** 
1c540 54 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74  The cursor point
1c550 73 20 74 6f 20 61 20 42 54 72 65 65 20 74 61 62  s to a BTree tab
1c560 6c 65 20 69 66 20 50 34 3d 3d 30 20 61 6e 64 20  le if P4==0 and 
1c570 74 6f 20 61 20 42 54 72 65 65 20 69 6e 64 65 78  to a BTree index
1c580 0a 2a 2a 20 69 66 20 50 34 20 69 73 20 6e 6f 74  .** if P4 is not
1c590 20 30 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f   0.  If P4 is no
1c5a0 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f 69 6e 74  t NULL, it point
1c5b0 73 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 73  s to a KeyInfo s
1c5c0 74 72 75 63 74 75 72 65 0a 2a 2a 20 74 68 61 74  tructure.** that
1c5d0 20 64 65 66 69 6e 65 73 20 74 68 65 20 66 6f 72   defines the for
1c5e0 6d 61 74 20 6f 66 20 6b 65 79 73 20 69 6e 20 74  mat of keys in t
1c5f0 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20  he index..**.** 
1c600 54 68 65 20 50 35 20 70 61 72 61 6d 65 74 65 72  The P5 parameter
1c610 20 63 61 6e 20 62 65 20 61 20 6d 61 73 6b 20 6f   can be a mask o
1c620 66 20 74 68 65 20 42 54 52 45 45 5f 2a 20 66 6c  f the BTREE_* fl
1c630 61 67 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 69  ags defined.** i
1c640 6e 20 62 74 72 65 65 2e 68 2e 20 20 54 68 65 73  n btree.h.  Thes
1c650 65 20 66 6c 61 67 73 20 63 6f 6e 74 72 6f 6c 20  e flags control 
1c660 61 73 70 65 63 74 73 20 6f 66 20 74 68 65 20 6f  aspects of the o
1c670 70 65 72 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74  peration of.** t
1c680 68 65 20 62 74 72 65 65 2e 20 20 54 68 65 20 42  he btree.  The B
1c690 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41  TREE_OMIT_JOURNA
1c6a0 4c 20 61 6e 64 20 42 54 52 45 45 5f 53 49 4e 47  L and BTREE_SING
1c6b0 4c 45 20 66 6c 61 67 73 20 61 72 65 0a 2a 2a 20  LE flags are.** 
1c6c0 61 64 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61  added automatica
1c6d0 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  lly..*/./* Opcod
1c6e0 65 3a 20 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78  e: OpenAutoindex
1c6f0 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
1c700 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75   Synopsis: nColu
1c710 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73  mn=P2.**.** This
1c720 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 74 68   opcode works th
1c730 65 20 73 61 6d 65 20 61 73 20 4f 50 5f 4f 70 65  e same as OP_Ope
1c740 6e 45 70 68 65 6d 65 72 61 6c 2e 20 20 49 74 20  nEphemeral.  It 
1c750 68 61 73 20 61 0a 2a 2a 20 64 69 66 66 65 72 65  has a.** differe
1c760 6e 74 20 6e 61 6d 65 20 74 6f 20 64 69 73 74 69  nt name to disti
1c770 6e 67 75 69 73 68 20 69 74 73 20 75 73 65 2e 20  nguish its use. 
1c780 20 54 61 62 6c 65 73 20 63 72 65 61 74 65 64 20   Tables created 
1c790 75 73 69 6e 67 0a 2a 2a 20 62 79 20 74 68 69 73  using.** by this
1c7a0 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20   opcode will be 
1c7b0 75 73 65 64 20 66 6f 72 20 61 75 74 6f 6d 61 74  used for automat
1c7c0 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74  ically created t
1c7d0 72 61 6e 73 69 65 6e 74 0a 2a 2a 20 69 6e 64 69  ransient.** indi
1c7e0 63 65 73 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f  ces in joins..*/
1c7f0 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 41 75 74  .case OP_OpenAut
1c800 6f 69 6e 64 65 78 3a 20 0a 63 61 73 65 20 4f 50  oindex: .case OP
1c810 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20  _OpenEphemeral: 
1c820 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
1c830 70 43 78 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a  pCx;.  KeyInfo *
1c840 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20 73 74 61  pKeyInfo;..  sta
1c850 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 76 66  tic const int vf
1c860 73 46 6c 61 67 73 20 3d 20 0a 20 20 20 20 20 20  sFlags = .      
1c870 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44  SQLITE_OPEN_READ
1c880 57 52 49 54 45 20 7c 0a 20 20 20 20 20 20 53 51  WRITE |.      SQ
1c890 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45  LITE_OPEN_CREATE
1c8a0 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f   |.      SQLITE_
1c8b0 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c  OPEN_EXCLUSIVE |
1c8c0 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
1c8d0 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45  EN_DELETEONCLOSE
1c8e0 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f   |.      SQLITE_
1c8f0 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44  OPEN_TRANSIENT_D
1c900 42 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  B;.  assert( pOp
1c910 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73  ->p1>=0 );.  ass
1c920 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20  ert( pOp->p2>=0 
1c930 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63  );.  pCx = alloc
1c940 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
1c950 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d  ->p1, pOp->p2, -
1c960 31 2c 20 43 55 52 54 59 50 45 5f 42 54 52 45 45  1, CURTYPE_BTREE
1c970 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20  );.  if( pCx==0 
1c980 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
1c990 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20   pCx->nullRow = 
1c9a0 31 3b 0a 20 20 70 43 78 2d 3e 69 73 45 70 68 65  1;.  pCx->isEphe
1c9b0 6d 65 72 61 6c 20 3d 20 31 3b 0a 20 20 72 63 20  meral = 1;.  rc 
1c9c0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4f 70  = sqlite3BtreeOp
1c9d0 65 6e 28 64 62 2d 3e 70 56 66 73 2c 20 30 2c 20  en(db->pVfs, 0, 
1c9e0 64 62 2c 20 26 70 43 78 2d 3e 70 42 74 2c 20 0a  db, &pCx->pBt, .
1c9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca00 20 20 20 20 20 20 20 20 42 54 52 45 45 5f 4f 4d          BTREE_OM
1ca10 49 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20 42 54 52  IT_JOURNAL | BTR
1ca20 45 45 5f 53 49 4e 47 4c 45 20 7c 20 70 4f 70 2d  EE_SINGLE | pOp-
1ca30 3e 70 35 2c 20 76 66 73 46 6c 61 67 73 29 3b 0a  >p5, vfsFlags);.
1ca40 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1ca50 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  _OK ){.    rc = 
1ca60 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69  sqlite3BtreeBegi
1ca70 6e 54 72 61 6e 73 28 70 43 78 2d 3e 70 42 74 2c  nTrans(pCx->pBt,
1ca80 20 31 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72   1);.  }.  if( r
1ca90 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
1caa0 20 20 20 20 2f 2a 20 49 66 20 61 20 74 72 61 6e      /* If a tran
1cab0 73 69 65 6e 74 20 69 6e 64 65 78 20 69 73 20 72  sient index is r
1cac0 65 71 75 69 72 65 64 2c 20 63 72 65 61 74 65 20  equired, create 
1cad0 69 74 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20  it by calling.  
1cae0 20 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65    ** sqlite3Btre
1caf0 65 43 72 65 61 74 65 54 61 62 6c 65 28 29 20 77  eCreateTable() w
1cb00 69 74 68 20 74 68 65 20 42 54 52 45 45 5f 42 4c  ith the BTREE_BL
1cb10 4f 42 4b 45 59 20 66 6c 61 67 20 62 65 66 6f 72  OBKEY flag befor
1cb20 65 0a 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67  e.    ** opening
1cb30 20 69 74 2e 20 49 66 20 61 20 74 72 61 6e 73 69   it. If a transi
1cb40 65 6e 74 20 74 61 62 6c 65 20 69 73 20 72 65 71  ent table is req
1cb50 75 69 72 65 64 2c 20 6a 75 73 74 20 75 73 65 20  uired, just use 
1cb60 74 68 65 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d  the.    ** autom
1cb70 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64  atically created
1cb80 20 74 61 62 6c 65 20 77 69 74 68 20 72 6f 6f 74   table with root
1cb90 2d 70 61 67 65 20 31 20 28 61 6e 20 42 4c 4f 42  -page 1 (an BLOB
1cba0 5f 49 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a  _INTKEY table)..
1cbb0 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 28      */.    if( (
1cbc0 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e  pKeyInfo = pOp->
1cbd0 70 34 2e 70 4b 65 79 49 6e 66 6f 29 21 3d 30 20  p4.pKeyInfo)!=0 
1cbe0 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 70 67 6e  ){.      int pgn
1cbf0 6f 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  o;.      assert(
1cc00 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1cc10 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20  _KEYINFO );.    
1cc20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1cc30 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70  reeCreateTable(p
1cc40 43 78 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20  Cx->pBt, &pgno, 
1cc50 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 7c 20  BTREE_BLOBKEY | 
1cc60 70 4f 70 2d 3e 70 35 29 3b 20 0a 20 20 20 20 20  pOp->p5); .     
1cc70 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1cc80 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  OK ){.        as
1cc90 73 65 72 74 28 20 70 67 6e 6f 3d 3d 4d 41 53 54  sert( pgno==MAST
1cca0 45 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20  ER_ROOT+1 );.   
1ccb0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65       assert( pKe
1ccc0 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b  yInfo->db==db );
1ccd0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1cce0 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d   pKeyInfo->enc==
1ccf0 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 20 20 20  ENC(db) );.     
1cd00 20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f     pCx->pKeyInfo
1cd10 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20   = pKeyInfo;.   
1cd20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1cd30 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43 78  3BtreeCursor(pCx
1cd40 2d 3e 70 42 74 2c 20 70 67 6e 6f 2c 20 42 54 52  ->pBt, pgno, BTR
1cd50 45 45 5f 57 52 43 53 52 2c 0a 20 20 20 20 20 20  EE_WRCSR,.      
1cd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd70 20 20 20 20 20 20 20 20 20 20 70 4b 65 79 49 6e            pKeyIn
1cd80 66 6f 2c 20 70 43 78 2d 3e 75 63 2e 70 43 75 72  fo, pCx->uc.pCur
1cd90 73 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  sor);.      }.  
1cda0 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65      pCx->isTable
1cdb0 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b   = 0;.    }else{
1cdc0 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
1cdd0 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70  te3BtreeCursor(p
1cde0 43 78 2d 3e 70 42 74 2c 20 4d 41 53 54 45 52 5f  Cx->pBt, MASTER_
1cdf0 52 4f 4f 54 2c 20 42 54 52 45 45 5f 57 52 43 53  ROOT, BTREE_WRCS
1ce00 52 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  R,.             
1ce10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce20 20 30 2c 20 70 43 78 2d 3e 75 63 2e 70 43 75 72   0, pCx->uc.pCur
1ce30 73 6f 72 29 3b 0a 20 20 20 20 20 20 70 43 78 2d  sor);.      pCx-
1ce40 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20  >isTable = 1;.  
1ce50 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63    }.  }.  if( rc
1ce60 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1ce70 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 43  e_to_error;.  pC
1ce80 78 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 28  x->isOrdered = (
1ce90 70 4f 70 2d 3e 70 35 21 3d 42 54 52 45 45 5f 55  pOp->p5!=BTREE_U
1cea0 4e 4f 52 44 45 52 45 44 29 3b 0a 20 20 62 72 65  NORDERED);.  bre
1ceb0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1cec0 3a 20 53 6f 72 74 65 72 4f 70 65 6e 20 50 31 20  : SorterOpen P1 
1ced0 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  P2 P3 P4 *.**.**
1cee0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72   This opcode wor
1cef0 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e 45  ks like OP_OpenE
1cf00 70 68 65 6d 65 72 61 6c 20 65 78 63 65 70 74 20  phemeral except 
1cf10 74 68 61 74 20 69 74 20 6f 70 65 6e 73 0a 2a 2a  that it opens.**
1cf20 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64   a transient ind
1cf30 65 78 20 74 68 61 74 20 69 73 20 73 70 65 63 69  ex that is speci
1cf40 66 69 63 61 6c 6c 79 20 64 65 73 69 67 6e 65 64  fically designed
1cf50 20 74 6f 20 73 6f 72 74 20 6c 61 72 67 65 0a 2a   to sort large.*
1cf60 2a 20 74 61 62 6c 65 73 20 75 73 69 6e 67 20 61  * tables using a
1cf70 6e 20 65 78 74 65 72 6e 61 6c 20 6d 65 72 67 65  n external merge
1cf80 2d 73 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d 2e  -sort algorithm.
1cf90 0a 2a 2a 0a 2a 2a 20 49 66 20 61 72 67 75 6d 65  .**.** If argume
1cfa0 6e 74 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72  nt P3 is non-zer
1cfb0 6f 2c 20 74 68 65 6e 20 69 74 20 69 6e 64 69 63  o, then it indic
1cfc0 61 74 65 73 20 74 68 61 74 20 74 68 65 20 73 6f  ates that the so
1cfd0 72 74 65 72 20 6d 61 79 0a 2a 2a 20 61 73 73 75  rter may.** assu
1cfe0 6d 65 20 74 68 61 74 20 61 20 73 74 61 62 6c 65  me that a stable
1cff0 20 73 6f 72 74 20 63 6f 6e 73 69 64 65 72 69 6e   sort considerin
1d000 67 20 74 68 65 20 66 69 72 73 74 20 50 33 20 66  g the first P3 f
1d010 69 65 6c 64 73 20 6f 66 20 65 61 63 68 0a 2a 2a  ields of each.**
1d020 20 6b 65 79 20 69 73 20 73 75 66 66 69 63 69 65   key is sufficie
1d030 6e 74 20 74 6f 20 70 72 6f 64 75 63 65 20 74 68  nt to produce th
1d040 65 20 72 65 71 75 69 72 65 64 20 72 65 73 75 6c  e required resul
1d050 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ts..*/.case OP_S
1d060 6f 72 74 65 72 4f 70 65 6e 3a 20 7b 0a 20 20 56  orterOpen: {.  V
1d070 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a  dbeCursor *pCx;.
1d080 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1d090 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  p1>=0 );.  asser
1d0a0 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b  t( pOp->p2>=0 );
1d0b0 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74  .  pCx = allocat
1d0c0 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
1d0d0 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c  p1, pOp->p2, -1,
1d0e0 20 43 55 52 54 59 50 45 5f 53 4f 52 54 45 52 29   CURTYPE_SORTER)
1d0f0 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29  ;.  if( pCx==0 )
1d100 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
1d110 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20  pCx->pKeyInfo = 
1d120 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
1d130 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 78 2d  ;.  assert( pCx-
1d140 3e 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64  >pKeyInfo->db==d
1d150 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  b );.  assert( p
1d160 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e  Cx->pKeyInfo->en
1d170 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20  c==ENC(db) );.  
1d180 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
1d190 53 6f 72 74 65 72 49 6e 69 74 28 64 62 2c 20 70  SorterInit(db, p
1d1a0 4f 70 2d 3e 70 33 2c 20 70 43 78 29 3b 0a 20 20  Op->p3, pCx);.  
1d1b0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
1d1c0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1d1d0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1d1e0 20 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63   Opcode: Sequenc
1d1f0 65 54 65 73 74 20 50 31 20 50 32 20 2a 20 2a 20  eTest P1 P2 * * 
1d200 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
1d210 66 28 20 63 75 72 73 6f 72 5b 50 31 5d 2e 63 74  f( cursor[P1].ct
1d220 72 2b 2b 20 29 20 70 63 20 3d 20 50 32 0a 2a 2a  r++ ) pc = P2.**
1d230 0a 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72 74  .** P1 is a sort
1d240 65 72 20 63 75 72 73 6f 72 2e 20 49 66 20 74 68  er cursor. If th
1d250 65 20 73 65 71 75 65 6e 63 65 20 63 6f 75 6e 74  e sequence count
1d260 65 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  er is currently 
1d270 7a 65 72 6f 2c 20 6a 75 6d 70 0a 2a 2a 20 74 6f  zero, jump.** to
1d280 20 50 32 2e 20 52 65 67 61 72 64 6c 65 73 73 20   P2. Regardless 
1d290 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  of whether or no
1d2a0 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
1d2b0 6b 65 6e 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74  ken, increment t
1d2c0 68 65 0a 2a 2a 20 74 68 65 20 73 65 71 75 65 6e  he.** the sequen
1d2d0 63 65 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73  ce value..*/.cas
1d2e0 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 54 65 73  e OP_SequenceTes
1d2f0 74 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  t: {.  VdbeCurso
1d300 72 20 2a 70 43 3b 0a 20 20 61 73 73 65 72 74 28  r *pC;.  assert(
1d310 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1d320 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1d330 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
1d340 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1d350 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65   assert( isSorte
1d360 72 28 70 43 29 20 29 3b 0a 20 20 69 66 28 20 28  r(pC) );.  if( (
1d370 70 43 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 29 3d  pC->seqCount++)=
1d380 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a  =0 ){.    goto j
1d390 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
1d3a0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1d3b0 63 6f 64 65 3a 20 4f 70 65 6e 50 73 65 75 64 6f  code: OpenPseudo
1d3c0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
1d3d0 20 53 79 6e 6f 70 73 69 73 3a 20 50 33 20 63 6f   Synopsis: P3 co
1d3e0 6c 75 6d 6e 73 20 69 6e 20 72 5b 50 32 5d 0a 2a  lumns in r[P2].*
1d3f0 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20  *.** Open a new 
1d400 63 75 72 73 6f 72 20 74 68 61 74 20 70 6f 69 6e  cursor that poin
1d410 74 73 20 74 6f 20 61 20 66 61 6b 65 20 74 61 62  ts to a fake tab
1d420 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  le that contains
1d430 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77   a single.** row
1d440 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20 63   of data.  The c
1d450 6f 6e 74 65 6e 74 20 6f 66 20 74 68 61 74 20 6f  ontent of that o
1d460 6e 65 20 72 6f 77 20 69 73 20 74 68 65 20 63 6f  ne row is the co
1d470 6e 74 65 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 0a  ntent of memory.
1d480 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e 20  ** register P2. 
1d490 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1d4a0 20 63 75 72 73 6f 72 20 50 31 20 62 65 63 6f 6d   cursor P1 becom
1d4b0 65 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  es an alias for 
1d4c0 74 68 65 20 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f 62  the .** MEM_Blob
1d4d0 20 63 6f 6e 74 65 6e 74 20 63 6f 6e 74 61 69 6e   content contain
1d4e0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
1d4f0 32 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73 65 75 64  2..**.** A pseud
1d500 6f 2d 74 61 62 6c 65 20 63 72 65 61 74 65 64 20  o-table created 
1d510 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69  by this opcode i
1d520 73 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 61  s used to hold a
1d530 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f   single.** row o
1d540 75 74 70 75 74 20 66 72 6f 6d 20 74 68 65 20 73  utput from the s
1d550 6f 72 74 65 72 20 73 6f 20 74 68 61 74 20 74 68  orter so that th
1d560 65 20 72 6f 77 20 63 61 6e 20 62 65 20 64 65 63  e row can be dec
1d570 6f 6d 70 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a 20  omposed into.** 
1d580 69 6e 64 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d  individual colum
1d590 6e 73 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f  ns using the OP_
1d5a0 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 20 20  Column opcode.  
1d5b0 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  The OP_Column op
1d5c0 63 6f 64 65 0a 2a 2a 20 69 73 20 74 68 65 20 6f  code.** is the o
1d5d0 6e 6c 79 20 63 75 72 73 6f 72 20 6f 70 63 6f 64  nly cursor opcod
1d5e0 65 20 74 68 61 74 20 77 6f 72 6b 73 20 77 69 74  e that works wit
1d5f0 68 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  h a pseudo-table
1d600 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 74 68  ..**.** P3 is th
1d610 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  e number of fiel
1d620 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ds in the record
1d630 73 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 73  s that will be s
1d640 74 6f 72 65 64 20 62 79 0a 2a 2a 20 74 68 65 20  tored by.** the 
1d650 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f  pseudo-table..*/
1d660 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 50 73 65  .case OP_OpenPse
1d670 75 64 6f 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  udo: {.  VdbeCur
1d680 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73  sor *pCx;..  ass
1d690 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1d6a0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1d6b0 2d 3e 70 33 3e 3d 30 20 29 3b 0a 20 20 70 43 78  ->p3>=0 );.  pCx
1d6c0 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
1d6d0 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  r(p, pOp->p1, pO
1d6e0 70 2d 3e 70 33 2c 20 2d 31 2c 20 43 55 52 54 59  p->p3, -1, CURTY
1d6f0 50 45 5f 50 53 45 55 44 4f 29 3b 0a 20 20 69 66  PE_PSEUDO);.  if
1d700 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20  ( pCx==0 ) goto 
1d710 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e  no_mem;.  pCx->n
1d720 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43  ullRow = 1;.  pC
1d730 78 2d 3e 75 63 2e 70 73 65 75 64 6f 54 61 62 6c  x->uc.pseudoTabl
1d740 65 52 65 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  eReg = pOp->p2;.
1d750 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d    pCx->isTable =
1d760 20 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   1;.  assert( pO
1d770 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 62 72  p->p5==0 );.  br
1d780 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1d790 65 3a 20 43 6c 6f 73 65 20 50 31 20 2a 20 2a 20  e: Close P1 * * 
1d7a0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20  * *.**.** Close 
1d7b0 61 20 63 75 72 73 6f 72 20 70 72 65 76 69 6f 75  a cursor previou
1d7c0 73 6c 79 20 6f 70 65 6e 65 64 20 61 73 20 50 31  sly opened as P1
1d7d0 2e 20 20 49 66 20 50 31 20 69 73 20 6e 6f 74 0a  .  If P1 is not.
1d7e0 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  ** currently ope
1d7f0 6e 2c 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  n, this instruct
1d800 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a  ion is a no-op..
1d810 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 6f 73 65  */.case OP_Close
1d820 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
1d830 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1d840 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1d850 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 46  ;.  sqlite3VdbeF
1d860 72 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e  reeCursor(p, p->
1d870 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 29 3b  apCsr[pOp->p1]);
1d880 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  .  p->apCsr[pOp-
1d890 3e 70 31 5d 20 3d 20 30 3b 0a 20 20 62 72 65 61  >p1] = 0;.  brea
1d8a0 6b 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c  k;.}..#ifdef SQL
1d8b0 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d  ITE_ENABLE_COLUM
1d8c0 4e 5f 55 53 45 44 5f 4d 41 53 4b 0a 2f 2a 20 4f  N_USED_MASK./* O
1d8d0 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 73 55 73  pcode: ColumnsUs
1d8e0 65 64 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  ed P1 * * P4 *.*
1d8f0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
1d900 20 28 77 68 69 63 68 20 6f 6e 6c 79 20 65 78 69   (which only exi
1d910 73 74 73 20 69 66 20 53 51 4c 69 74 65 20 77 61  sts if SQLite wa
1d920 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 0a  s compiled with.
1d930 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ** SQLITE_ENABLE
1d940 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f 4d 41 53  _COLUMN_USED_MAS
1d950 4b 29 20 69 64 65 6e 74 69 66 69 65 73 20 77 68  K) identifies wh
1d960 69 63 68 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74  ich columns of t
1d970 68 65 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69  he.** table or i
1d980 6e 64 65 78 20 66 6f 72 20 63 75 72 73 6f 72 20  ndex for cursor 
1d990 50 31 20 61 72 65 20 75 73 65 64 2e 20 20 50 34  P1 are used.  P4
1d9a0 20 69 73 20 61 20 36 34 2d 62 69 74 20 69 6e 74   is a 64-bit int
1d9b0 65 67 65 72 0a 2a 2a 20 28 50 34 5f 49 4e 54 36  eger.** (P4_INT6
1d9c0 34 29 20 69 6e 20 77 68 69 63 68 20 74 68 65 20  4) in which the 
1d9d0 66 69 72 73 74 20 36 33 20 62 69 74 73 20 61 72  first 63 bits ar
1d9e0 65 20 6f 6e 65 20 66 6f 72 20 65 61 63 68 20 6f  e one for each o
1d9f0 66 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 36  f the.** first 6
1da00 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65  3 columns of the
1da10 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
1da20 74 68 61 74 20 61 72 65 20 61 63 74 75 61 6c 6c  that are actuall
1da30 79 20 75 73 65 64 0a 2a 2a 20 62 79 20 74 68 65  y used.** by the
1da40 20 63 75 72 73 6f 72 2e 20 20 54 68 65 20 68 69   cursor.  The hi
1da50 67 68 2d 6f 72 64 65 72 20 62 69 74 20 69 73 20  gh-order bit is 
1da60 73 65 74 20 69 66 20 61 6e 79 20 63 6f 6c 75 6d  set if any colum
1da70 6e 20 61 66 74 65 72 0a 2a 2a 20 74 68 65 20 36  n after.** the 6
1da80 34 74 68 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a  4th is used..*/.
1da90 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 73 55  case OP_ColumnsU
1daa0 73 65 64 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  sed: {.  VdbeCur
1dab0 73 6f 72 20 2a 70 43 3b 0a 20 20 70 43 20 3d 20  sor *pC;.  pC = 
1dac0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1dad0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  ];.  assert( pC-
1dae0 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
1daf0 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43  PE_BTREE );.  pC
1db00 2d 3e 6d 61 73 6b 55 73 65 64 20 3d 20 2a 28 75  ->maskUsed = *(u
1db10 36 34 2a 29 70 4f 70 2d 3e 70 34 2e 70 49 36 34  64*)pOp->p4.pI64
1db20 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
1db30 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  dif../* Opcode: 
1db40 53 65 65 6b 47 45 20 50 31 20 50 32 20 50 33 20  SeekGE P1 P2 P3 
1db50 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
1db60 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
1db70 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50  *.** If cursor P
1db80 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53  1 refers to an S
1db90 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65  QL table (B-Tree
1dba0 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67   that uses integ
1dbb0 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73  er keys), .** us
1dbc0 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
1dbd0 65 67 69 73 74 65 72 20 50 33 20 61 73 20 74 68  egister P3 as th
1dbe0 65 20 6b 65 79 2e 20 20 49 66 20 63 75 72 73 6f  e key.  If curso
1dbf0 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
1dc00 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
1dc10 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
1dc20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
1dc30 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
1dc40 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
1dc50 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
1dc60 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
1dc70 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
1dc80 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
1dc90 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  t  it points to 
1dca0 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74  the smallest ent
1dcb0 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67  ry that .** is g
1dcc0 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
1dcd0 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
1dce0 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20  value. If there 
1dcf0 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a  are no records .
1dd00 2a 2a 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  ** greater than 
1dd10 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
1dd20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f  key and P2 is no
1dd30 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  t zero, then jum
1dd40 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49  p to P2..**.** I
1dd50 66 20 74 68 65 20 63 75 72 73 6f 72 20 50 31 20  f the cursor P1 
1dd60 77 61 73 20 6f 70 65 6e 65 64 20 75 73 69 6e 67  was opened using
1dd70 20 74 68 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b   the OPFLAG_SEEK
1dd80 45 51 20 66 6c 61 67 2c 20 74 68 65 6e 20 74 68  EQ flag, then th
1dd90 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 77 69 6c  is.** opcode wil
1dda0 6c 20 61 6c 77 61 79 73 20 6c 61 6e 64 20 6f 6e  l always land on
1ddb0 20 61 20 72 65 63 6f 72 64 20 74 68 61 74 20 65   a record that e
1ddc0 71 75 61 6c 6c 79 20 65 71 75 61 6c 73 20 74 68  qually equals th
1ddd0 65 20 6b 65 79 2c 20 6f 72 0a 2a 2a 20 65 6c 73  e key, or.** els
1dde0 65 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  e jump immediate
1ddf0 6c 79 20 74 6f 20 50 32 2e 20 20 57 68 65 6e 20  ly to P2.  When 
1de00 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 4f 50  the cursor is OP
1de10 46 4c 41 47 5f 53 45 45 4b 45 51 2c 20 74 68 69  FLAG_SEEKEQ, thi
1de20 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 6d 75 73 74  s.** opcode must
1de30 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20   be followed by 
1de40 61 6e 20 49 64 78 4c 45 20 6f 70 63 6f 64 65 20  an IdxLE opcode 
1de50 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 61 72  with the same ar
1de60 67 75 6d 65 6e 74 73 2e 0a 2a 2a 20 54 68 65 20  guments..** The 
1de70 49 64 78 4c 45 20 6f 70 63 6f 64 65 20 77 69 6c  IdxLE opcode wil
1de80 6c 20 62 65 20 73 6b 69 70 70 65 64 20 69 66 20  l be skipped if 
1de90 74 68 69 73 20 6f 70 63 6f 64 65 20 73 75 63 63  this opcode succ
1dea0 65 65 64 73 2c 20 62 75 74 20 74 68 65 0a 2a 2a  eeds, but the.**
1deb0 20 49 64 78 4c 45 20 6f 70 63 6f 64 65 20 77 69   IdxLE opcode wi
1dec0 6c 6c 20 62 65 20 75 73 65 64 20 6f 6e 20 73 75  ll be used on su
1ded0 62 73 65 71 75 65 6e 74 20 6c 6f 6f 70 20 69 74  bsequent loop it
1dee0 65 72 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  erations..**.** 
1def0 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76  This opcode leav
1df00 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  es the cursor co
1df10 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65  nfigured to move
1df20 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65   in forward orde
1df30 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62  r,.** from the b
1df40 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20  eginning toward 
1df50 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68  the end.  In oth
1df60 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75  er words, the cu
1df70 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69  rsor is.** confi
1df80 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78  gured to use Nex
1df90 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a  t, not Prev..**.
1dfa0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1dfb0 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65  nd, NotFound, Se
1dfc0 65 6b 4c 74 2c 20 53 65 65 6b 47 74 2c 20 53 65  ekLt, SeekGt, Se
1dfd0 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekLe.*/./* Opcod
1dfe0 65 3a 20 53 65 65 6b 47 54 20 50 31 20 50 32 20  e: SeekGT P1 P2 
1dff0 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
1e000 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1e010 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  ].**.** If curso
1e020 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
1e030 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
1e040 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
1e050 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
1e060 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
1e070 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
1e080 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f   a key. If curso
1e090 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
1e0a0 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
1e0b0 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
1e0c0 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
1e0d0 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
1e0e0 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
1e0f0 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
1e100 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
1e110 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
1e120 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
1e130 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  t  it points to 
1e140 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74  the smallest ent
1e150 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67  ry that .** is g
1e160 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
1e170 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68  key value. If th
1e180 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
1e190 64 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  ds greater than 
1e1a0 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20  .** the key and 
1e1b0 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
1e1c0 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
1e1d0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
1e1e0 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
1e1f0 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20  rsor configured 
1e200 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61  to move in forwa
1e210 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f  rd order,.** fro
1e220 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  m the beginning 
1e230 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20  toward the end. 
1e240 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1e250 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
1e260 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  * configured to 
1e270 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72  use Next, not Pr
1e280 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ev..**.** See al
1e290 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
1e2a0 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65  und, SeekLt, See
1e2b0 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f  kGe, SeekLe.*/./
1e2c0 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c 54  * Opcode: SeekLT
1e2d0 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 20 0a   P1 P2 P3 P4 * .
1e2e0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
1e2f0 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
1e300 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1e310 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61  ers to an SQL ta
1e320 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74  ble (B-Tree that
1e330 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65   uses integer ke
1e340 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65  ys), .** use the
1e350 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
1e360 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20  er P3 as a key. 
1e370 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1e380 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
1e390 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
1e3a0 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
1e3b0 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
1e3c0 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
1e3d0 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
1e3e0 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
1e3f0 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
1e400 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
1e410 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f  1 so that  it po
1e420 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67  ints to the larg
1e430 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a  est entry that .
1e440 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ** is less than 
1e450 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49  the key value. I
1e460 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72  f there are no r
1e470 65 63 6f 72 64 73 20 6c 65 73 73 20 74 68 61 6e  ecords less than
1e480 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64   .** the key and
1e490 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
1e4a0 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
1e4b0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
1e4c0 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
1e4d0 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64  ursor configured
1e4e0 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65   to move in reve
1e4f0 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72  rse order,.** fr
1e500 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72  om the end towar
1e510 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e  d the beginning.
1e520 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
1e530 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  , the cursor is.
1e540 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  ** configured to
1e550 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e   use Prev, not N
1e560 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ext..**.** See a
1e570 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
1e580 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53 65  ound, SeekGt, Se
1e590 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a  ekGe, SeekLe.*/.
1e5a0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c  /* Opcode: SeekL
1e5b0 45 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  E P1 P2 P3 P4 *.
1e5c0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
1e5d0 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
1e5e0 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1e5f0 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61  ers to an SQL ta
1e600 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74  ble (B-Tree that
1e610 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65   uses integer ke
1e620 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65  ys), .** use the
1e630 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
1e640 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20  er P3 as a key. 
1e650 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1e660 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
1e670 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
1e680 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
1e690 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
1e6a0 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
1e6b0 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
1e6c0 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
1e6d0 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
1e6e0 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
1e6f0 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69  1 so that it poi
1e700 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65  nts to the large
1e710 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
1e720 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f  * is less than o
1e730 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
1e740 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  ey value. If the
1e750 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
1e760 73 20 0a 2a 2a 20 6c 65 73 73 20 74 68 61 6e 20  s .** less than 
1e770 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
1e780 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f  key and P2 is no
1e790 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  t zero, then jum
1e7a0 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  p to P2..**.** T
1e7b0 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
1e7c0 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e  s the cursor con
1e7d0 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20  figured to move 
1e7e0 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72  in reverse order
1e7f0 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e  ,.** from the en
1e800 64 20 74 6f 77 61 72 64 20 74 68 65 20 62 65 67  d toward the beg
1e810 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65  inning.  In othe
1e820 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72  r words, the cur
1e830 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67  sor is.** config
1e840 75 72 65 64 20 74 6f 20 75 73 65 20 50 72 65 76  ured to use Prev
1e850 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a  , not Next..**.*
1e860 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20  * If the cursor 
1e870 50 31 20 77 61 73 20 6f 70 65 6e 65 64 20 75 73  P1 was opened us
1e880 69 6e 67 20 74 68 65 20 4f 50 46 4c 41 47 5f 53  ing the OPFLAG_S
1e890 45 45 4b 45 51 20 66 6c 61 67 2c 20 74 68 65 6e  EEKEQ flag, then
1e8a0 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20   this.** opcode 
1e8b0 77 69 6c 6c 20 61 6c 77 61 79 73 20 6c 61 6e 64  will always land
1e8c0 20 6f 6e 20 61 20 72 65 63 6f 72 64 20 74 68 61   on a record tha
1e8d0 74 20 65 71 75 61 6c 6c 79 20 65 71 75 61 6c 73  t equally equals
1e8e0 20 74 68 65 20 6b 65 79 2c 20 6f 72 0a 2a 2a 20   the key, or.** 
1e8f0 65 6c 73 65 20 6a 75 6d 70 20 69 6d 6d 65 64 69  else jump immedi
1e900 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 57 68  ately to P2.  Wh
1e910 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  en the cursor is
1e920 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 2c 20   OPFLAG_SEEKEQ, 
1e930 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 6d  this.** opcode m
1e940 75 73 74 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20  ust be followed 
1e950 62 79 20 61 6e 20 49 64 78 47 45 20 6f 70 63 6f  by an IdxGE opco
1e960 64 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  de with the same
1e970 20 61 72 67 75 6d 65 6e 74 73 2e 0a 2a 2a 20 54   arguments..** T
1e980 68 65 20 49 64 78 47 45 20 6f 70 63 6f 64 65 20  he IdxGE opcode 
1e990 77 69 6c 6c 20 62 65 20 73 6b 69 70 70 65 64 20  will be skipped 
1e9a0 69 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20 73  if this opcode s
1e9b0 75 63 63 65 65 64 73 2c 20 62 75 74 20 74 68 65  ucceeds, but the
1e9c0 0a 2a 2a 20 49 64 78 47 45 20 6f 70 63 6f 64 65  .** IdxGE opcode
1e9d0 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 6f 6e   will be used on
1e9e0 20 73 75 62 73 65 71 75 65 6e 74 20 6c 6f 6f 70   subsequent loop
1e9f0 20 69 74 65 72 61 74 69 6f 6e 73 2e 0a 2a 2a 0a   iterations..**.
1ea00 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1ea10 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65  nd, NotFound, Se
1ea20 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65  ekGt, SeekGe, Se
1ea30 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ekLt.*/.case OP_
1ea40 53 65 65 6b 4c 54 3a 20 20 20 20 20 20 20 20 20  SeekLT:         
1ea50 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1ea60 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 45 3a 20  case OP_SeekLE: 
1ea70 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
1ea80 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
1ea90 53 65 65 6b 47 45 3a 20 20 20 20 20 20 20 20 20  SeekGE:         
1eaa0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1eab0 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 54 3a 20  case OP_SeekGT: 
1eac0 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c  {       /* jump,
1ead0 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65   in3 */.  int re
1eae0 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  s;           /* 
1eaf0 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73 75 6c  Comparison resul
1eb00 74 20 2a 2f 0a 20 20 69 6e 74 20 6f 63 3b 20 20  t */.  int oc;  
1eb10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 63            /* Opc
1eb20 6f 64 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ode */.  VdbeCur
1eb30 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54  sor *pC;    /* T
1eb40 68 65 20 63 75 72 73 6f 72 20 74 6f 20 73 65 65  he cursor to see
1eb50 6b 20 2a 2f 0a 20 20 55 6e 70 61 63 6b 65 64 52  k */.  UnpackedR
1eb60 65 63 6f 72 64 20 72 3b 20 20 2f 2a 20 54 68 65  ecord r;  /* The
1eb70 20 6b 65 79 20 74 6f 20 73 65 65 6b 20 66 6f 72   key to seek for
1eb80 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64   */.  int nField
1eb90 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
1eba0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 6f 72  er of columns or
1ebb0 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 6b   fields in the k
1ebc0 65 79 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65 79  ey */.  i64 iKey
1ebd0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
1ebe0 65 20 72 6f 77 69 64 20 77 65 20 61 72 65 20 74  e rowid we are t
1ebf0 6f 20 73 65 65 6b 20 74 6f 20 2a 2f 0a 20 20 69  o seek to */.  i
1ec00 6e 74 20 65 71 4f 6e 6c 79 3b 20 20 20 20 20 20  nt eqOnly;      
1ec10 20 20 2f 2a 20 4f 6e 6c 79 20 69 6e 74 65 72 65    /* Only intere
1ec20 73 74 65 64 20 69 6e 20 3d 3d 20 72 65 73 75 6c  sted in == resul
1ec30 74 73 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28  ts */..  assert(
1ec40 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1ec50 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1ec60 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
1ec70 4f 70 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70  Op->p2!=0 );.  p
1ec80 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
1ec90 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
1eca0 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
1ecb0 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
1ecc0 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
1ecd0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f  );.  assert( OP_
1ece0 53 65 65 6b 4c 45 20 3d 3d 20 4f 50 5f 53 65 65  SeekLE == OP_See
1ecf0 6b 4c 54 2b 31 20 29 3b 0a 20 20 61 73 73 65 72  kLT+1 );.  asser
1ed00 74 28 20 4f 50 5f 53 65 65 6b 47 45 20 3d 3d 20  t( OP_SeekGE == 
1ed10 4f 50 5f 53 65 65 6b 4c 54 2b 32 20 29 3b 0a 20  OP_SeekLT+2 );. 
1ed20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
1ed30 47 54 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b  GT == OP_SeekLT+
1ed40 33 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  3 );.  assert( p
1ed50 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a  C->isOrdered );.
1ed60 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63    assert( pC->uc
1ed70 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  .pCursor!=0 );. 
1ed80 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64   oc = pOp->opcod
1ed90 65 3b 0a 20 20 65 71 4f 6e 6c 79 20 3d 20 30 3b  e;.  eqOnly = 0;
1eda0 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
1edb0 20 30 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   0;.#ifdef SQLIT
1edc0 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65  E_DEBUG.  pC->se
1edd0 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f  ekOp = pOp->opco
1ede0 64 65 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66  de;.#endif..  if
1edf0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b  ( pC->isTable ){
1ee00 0a 20 20 20 20 2f 2a 20 54 68 65 20 42 54 52 45  .    /* The BTRE
1ee10 45 5f 53 45 45 4b 5f 45 51 20 66 6c 61 67 20 69  E_SEEK_EQ flag i
1ee20 73 20 6f 6e 6c 79 20 73 65 74 20 6f 6e 20 69 6e  s only set on in
1ee30 64 65 78 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20  dex cursors */. 
1ee40 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
1ee50 65 33 42 74 72 65 65 43 75 72 73 6f 72 48 61 73  e3BtreeCursorHas
1ee60 48 69 6e 74 28 70 43 2d 3e 75 63 2e 70 43 75 72  Hint(pC->uc.pCur
1ee70 73 6f 72 2c 20 42 54 52 45 45 5f 53 45 45 4b 5f  sor, BTREE_SEEK_
1ee80 45 51 29 3d 3d 30 20 29 3b 0a 0a 20 20 20 20 2f  EQ)==0 );..    /
1ee90 2a 20 54 68 65 20 69 6e 70 75 74 20 76 61 6c 75  * The input valu
1eea0 65 20 69 6e 20 50 33 20 6d 69 67 68 74 20 62 65  e in P3 might be
1eeb0 20 6f 66 20 61 6e 79 20 74 79 70 65 3a 20 69 6e   of any type: in
1eec0 74 65 67 65 72 2c 20 72 65 61 6c 2c 20 73 74 72  teger, real, str
1eed0 69 6e 67 2c 0a 20 20 20 20 2a 2a 20 62 6c 6f 62  ing,.    ** blob
1eee0 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20  , or NULL.  But 
1eef0 69 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 61  it needs to be a
1ef00 6e 20 69 6e 74 65 67 65 72 20 62 65 66 6f 72 65  n integer before
1ef10 20 77 65 20 63 61 6e 20 64 6f 0a 20 20 20 20 2a   we can do.    *
1ef20 2a 20 74 68 65 20 73 65 65 6b 2c 20 73 6f 20 63  * the seek, so c
1ef30 6f 6e 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20  onvert it. */.  
1ef40 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
1ef50 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 69 66 28  Op->p3];.    if(
1ef60 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
1ef70 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  (MEM_Int|MEM_Rea
1ef80 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d  l|MEM_Str))==MEM
1ef90 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20 61 70  _Str ){.      ap
1efa0 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
1efb0 74 79 28 70 49 6e 33 2c 20 30 29 3b 0a 20 20 20  ty(pIn3, 0);.   
1efc0 20 7d 0a 20 20 20 20 69 4b 65 79 20 3d 20 73 71   }.    iKey = sq
1efd0 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
1efe0 65 28 70 49 6e 33 29 3b 0a 0a 20 20 20 20 2f 2a  e(pIn3);..    /*
1eff0 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65   If the P3 value
1f000 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 63 6f   could not be co
1f010 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20  nverted into an 
1f020 69 6e 74 65 67 65 72 20 77 69 74 68 6f 75 74 0a  integer without.
1f030 20 20 20 20 2a 2a 20 6c 6f 73 73 20 6f 66 20 69      ** loss of i
1f040 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 6e  nformation, then
1f050 20 73 70 65 63 69 61 6c 20 70 72 6f 63 65 73 73   special process
1f060 69 6e 67 20 69 73 20 72 65 71 75 69 72 65 64 2e  ing is required.
1f070 2e 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 70  .. */.    if( (p
1f080 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
1f090 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  _Int)==0 ){.    
1f0a0 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
1f0b0 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d  gs & MEM_Real)==
1f0c0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  0 ){.        /* 
1f0d0 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20  If the P3 value 
1f0e0 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72  cannot be conver
1f0f0 74 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b 69 6e  ted into any kin
1f100 64 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c 0a 20  d of a number,. 
1f110 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74         ** then t
1f120 68 65 20 73 65 65 6b 20 69 73 20 6e 6f 74 20 70  he seek is not p
1f130 6f 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75 6d 70  ossible, so jump
1f140 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 20 20   to P2 */.      
1f150 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
1f160 6e 28 31 2c 32 29 3b 20 67 6f 74 6f 20 6a 75 6d  n(1,2); goto jum
1f170 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 20  p_to_p2;.       
1f180 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
1f190 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65  .      /* If the
1f1a0 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69   approximation i
1f1b0 4b 65 79 20 69 73 20 6c 61 72 67 65 72 20 74 68  Key is larger th
1f1c0 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72 65  an the actual re
1f1d0 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20 20  al search.      
1f1e0 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69 74  ** term, substit
1f1f0 75 74 65 20 3e 3d 20 66 6f 72 20 3e 20 61 6e 64  ute >= for > and
1f200 20 3c 20 66 6f 72 20 3c 3d 2e 20 65 2e 67 2e 20   < for <=. e.g. 
1f210 69 66 20 74 68 65 20 73 65 61 72 63 68 20 74 65  if the search te
1f220 72 6d 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 34  rm.      ** is 4
1f230 2e 39 20 61 6e 64 20 74 68 65 20 69 6e 74 65 67  .9 and the integ
1f240 65 72 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e  er approximation
1f250 20 35 3a 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20   5:.      **.   
1f260 20 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78 20     **        (x 
1f270 3e 20 20 34 2e 39 29 20 20 20 20 2d 3e 20 20 20  >  4.9)    ->   
1f280 20 20 28 78 20 3e 3d 20 35 29 0a 20 20 20 20 20    (x >= 5).     
1f290 20 2a 2a 20 20 20 20 20 20 20 20 28 78 20 3c 3d   **        (x <=
1f2a0 20 34 2e 39 29 20 20 20 20 2d 3e 20 20 20 20 20   4.9)    ->     
1f2b0 28 78 20 3c 20 20 35 29 0a 20 20 20 20 20 20 2a  (x <  5).      *
1f2c0 2f 0a 20 20 20 20 20 20 69 66 28 20 70 49 6e 33  /.      if( pIn3
1f2d0 2d 3e 75 2e 72 3c 28 64 6f 75 62 6c 65 29 69 4b  ->u.r<(double)iK
1f2e0 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  ey ){.        as
1f2f0 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 45 3d  sert( OP_SeekGE=
1f300 3d 28 4f 50 5f 53 65 65 6b 47 54 2d 31 29 20 29  =(OP_SeekGT-1) )
1f310 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
1f320 28 20 4f 50 5f 53 65 65 6b 4c 54 3d 3d 28 4f 50  ( OP_SeekLT==(OP
1f330 5f 53 65 65 6b 4c 45 2d 31 29 20 29 3b 0a 20 20  _SeekLE-1) );.  
1f340 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 4f        assert( (O
1f350 50 5f 53 65 65 6b 4c 45 20 26 20 30 78 30 30 30  P_SeekLE & 0x000
1f360 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20 26  1)==(OP_SeekGT &
1f370 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20 20   0x0001) );.    
1f380 20 20 20 20 69 66 28 20 28 6f 63 20 26 20 30 78      if( (oc & 0x
1f390 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47  0001)==(OP_SeekG
1f3a0 54 20 26 20 30 78 30 30 30 31 29 20 29 20 6f 63  T & 0x0001) ) oc
1f3b0 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  --;.      }..   
1f3c0 20 20 20 2f 2a 20 49 66 20 74 68 65 20 61 70 70     /* If the app
1f3d0 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79 20  roximation iKey 
1f3e0 69 73 20 73 6d 61 6c 6c 65 72 20 74 68 61 6e 20  is smaller than 
1f3f0 74 68 65 20 61 63 74 75 61 6c 20 72 65 61 6c 20  the actual real 
1f400 73 65 61 72 63 68 0a 20 20 20 20 20 20 2a 2a 20  search.      ** 
1f410 74 65 72 6d 2c 20 73 75 62 73 74 69 74 75 74 65  term, substitute
1f420 20 3c 3d 20 66 6f 72 20 3c 20 61 6e 64 20 3e 20   <= for < and > 
1f430 66 6f 72 20 3e 3d 2e 20 20 2a 2f 0a 20 20 20 20  for >=.  */.    
1f440 20 20 65 6c 73 65 20 69 66 28 20 70 49 6e 33 2d    else if( pIn3-
1f450 3e 75 2e 72 3e 28 64 6f 75 62 6c 65 29 69 4b 65  >u.r>(double)iKe
1f460 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  y ){.        ass
1f470 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 3d 3d  ert( OP_SeekLE==
1f480 28 4f 50 5f 53 65 65 6b 4c 54 2b 31 29 20 29 3b  (OP_SeekLT+1) );
1f490 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1f4a0 20 4f 50 5f 53 65 65 6b 47 54 3d 3d 28 4f 50 5f   OP_SeekGT==(OP_
1f4b0 53 65 65 6b 47 45 2b 31 29 20 29 3b 0a 20 20 20  SeekGE+1) );.   
1f4c0 20 20 20 20 20 61 73 73 65 72 74 28 20 28 4f 50       assert( (OP
1f4d0 5f 53 65 65 6b 4c 54 20 26 20 30 78 30 30 30 31  _SeekLT & 0x0001
1f4e0 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 20 26 20  )==(OP_SeekGE & 
1f4f0 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20 20 20  0x0001) );.     
1f500 20 20 20 69 66 28 20 28 6f 63 20 26 20 30 78 30     if( (oc & 0x0
1f510 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54  001)==(OP_SeekLT
1f520 20 26 20 30 78 30 30 30 31 29 20 29 20 6f 63 2b   & 0x0001) ) oc+
1f530 2b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  +;.      }.    }
1f540 20 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74   .    rc = sqlit
1f550 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
1f560 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75  acked(pC->uc.pCu
1f570 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 69 4b  rsor, 0, (u64)iK
1f580 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20  ey, 0, &res);.  
1f590 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67    pC->movetoTarg
1f5a0 65 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55  et = iKey;  /* U
1f5b0 73 65 64 20 62 79 20 4f 50 5f 44 65 6c 65 74 65  sed by OP_Delete
1f5c0 20 2a 2f 0a 20 20 20 20 69 66 28 20 72 63 21 3d   */.    if( rc!=
1f5d0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1f5e0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
1f5f0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1f600 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  }.  }else{.    /
1f610 2a 20 46 6f 72 20 61 20 63 75 72 73 6f 72 20 77  * For a cursor w
1f620 69 74 68 20 74 68 65 20 42 54 52 45 45 5f 53 45  ith the BTREE_SE
1f630 45 4b 5f 45 51 20 68 69 6e 74 2c 20 6f 6e 6c 79  EK_EQ hint, only
1f640 20 74 68 65 20 4f 50 5f 53 65 65 6b 47 45 20 61   the OP_SeekGE a
1f650 6e 64 0a 20 20 20 20 2a 2a 20 4f 50 5f 53 65 65  nd.    ** OP_See
1f660 6b 4c 45 20 6f 70 63 6f 64 65 73 20 61 72 65 20  kLE opcodes are 
1f670 61 6c 6c 6f 77 65 64 2c 20 61 6e 64 20 74 68 65  allowed, and the
1f680 73 65 20 6d 75 73 74 20 62 65 20 69 6d 6d 65 64  se must be immed
1f690 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 65 64 0a  iately followed.
1f6a0 20 20 20 20 2a 2a 20 62 79 20 61 6e 20 4f 50 5f      ** by an OP_
1f6b0 49 64 78 47 54 20 6f 72 20 4f 50 5f 49 64 78 4c  IdxGT or OP_IdxL
1f6c0 54 20 6f 70 63 6f 64 65 2c 20 72 65 73 70 65 63  T opcode, respec
1f6d0 74 69 76 65 6c 79 2c 20 77 69 74 68 20 74 68 65  tively, with the
1f6e0 20 73 61 6d 65 20 6b 65 79 2e 0a 20 20 20 20 2a   same key..    *
1f6f0 2f 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  /.    if( sqlite
1f700 33 42 74 72 65 65 43 75 72 73 6f 72 48 61 73 48  3BtreeCursorHasH
1f710 69 6e 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  int(pC->uc.pCurs
1f720 6f 72 2c 20 42 54 52 45 45 5f 53 45 45 4b 5f 45  or, BTREE_SEEK_E
1f730 51 29 20 29 7b 0a 20 20 20 20 20 20 65 71 4f 6e  Q) ){.      eqOn
1f740 6c 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 61 73  ly = 1;.      as
1f750 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
1f760 65 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20  e==OP_SeekGE || 
1f770 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
1f780 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20 20 20  SeekLE );.      
1f790 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 6f  assert( pOp[1].o
1f7a0 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20  pcode==OP_IdxLT 
1f7b0 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65  || pOp[1].opcode
1f7c0 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20  ==OP_IdxGT );.  
1f7d0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
1f7e0 31 5d 2e 70 31 3d 3d 70 4f 70 5b 30 5d 2e 70 31  1].p1==pOp[0].p1
1f7f0 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
1f800 28 20 70 4f 70 5b 31 5d 2e 70 32 3d 3d 70 4f 70  ( pOp[1].p2==pOp
1f810 5b 30 5d 2e 70 32 20 29 3b 0a 20 20 20 20 20 20  [0].p2 );.      
1f820 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70  assert( pOp[1].p
1f830 33 3d 3d 70 4f 70 5b 30 5d 2e 70 33 20 29 3b 0a  3==pOp[0].p3 );.
1f840 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
1f850 70 5b 31 5d 2e 70 34 2e 69 3d 3d 70 4f 70 5b 30  p[1].p4.i==pOp[0
1f860 5d 2e 70 34 2e 69 20 29 3b 0a 20 20 20 20 7d 0a  ].p4.i );.    }.
1f870 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f  .    nField = pO
1f880 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 61 73 73  p->p4.i;.    ass
1f890 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
1f8a0 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
1f8b0 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64    assert( nField
1f8c0 3e 30 20 29 3b 0a 20 20 20 20 72 2e 70 4b 65 79  >0 );.    r.pKey
1f8d0 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49  Info = pC->pKeyI
1f8e0 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c  nfo;.    r.nFiel
1f8f0 64 20 3d 20 28 75 31 36 29 6e 46 69 65 6c 64 3b  d = (u16)nField;
1f900 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78  ..    /* The nex
1f910 74 20 6c 69 6e 65 20 6f 66 20 63 6f 64 65 20 63  t line of code c
1f920 6f 6d 70 75 74 65 73 20 61 73 20 66 6f 6c 6c 6f  omputes as follo
1f930 77 73 2c 20 6f 6e 6c 79 20 66 61 73 74 65 72 3a  ws, only faster:
1f940 0a 20 20 20 20 2a 2a 20 20 20 69 66 28 20 6f 63  .    **   if( oc
1f950 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 6f  ==OP_SeekGT || o
1f960 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 7b 0a  c==OP_SeekLE ){.
1f970 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65 66      **     r.def
1f980 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20  ault_rc = -1;.  
1f990 20 20 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a 20 20    **   }else{.  
1f9a0 20 20 2a 2a 20 20 20 20 20 72 2e 64 65 66 61 75    **     r.defau
1f9b0 6c 74 5f 72 63 20 3d 20 2b 31 3b 0a 20 20 20 20  lt_rc = +1;.    
1f9c0 2a 2a 20 20 20 7d 0a 20 20 20 20 2a 2f 0a 20 20  **   }.    */.  
1f9d0 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d    r.default_rc =
1f9e0 20 28 28 31 20 26 20 28 6f 63 20 2d 20 4f 50 5f   ((1 & (oc - OP_
1f9f0 53 65 65 6b 4c 54 29 29 20 3f 20 2d 31 20 3a 20  SeekLT)) ? -1 : 
1fa00 2b 31 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  +1);.    assert(
1fa10 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 54 20 7c   oc!=OP_SeekGT |
1fa20 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d  | r.default_rc==
1fa30 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  -1 );.    assert
1fa40 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 45 20  ( oc!=OP_SeekLE 
1fa50 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d  || r.default_rc=
1fa60 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  =-1 );.    asser
1fa70 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 45  t( oc!=OP_SeekGE
1fa80 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63   || r.default_rc
1fa90 3d 3d 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65  ==+1 );.    asse
1faa0 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c  rt( oc!=OP_SeekL
1fab0 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72  T || r.default_r
1fac0 63 3d 3d 2b 31 20 29 3b 0a 0a 20 20 20 20 72 2e  c==+1 );..    r.
1fad0 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  aMem = &aMem[pOp
1fae0 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51  ->p3];.#ifdef SQ
1faf0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b  LITE_DEBUG.    {
1fb00 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b   int i; for(i=0;
1fb10 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b   i<r.nField; i++
1fb20 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56  ) assert( memIsV
1fb30 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29  alid(&r.aMem[i])
1fb40 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20   ); }.#endif.   
1fb50 20 45 78 70 61 6e 64 42 6c 6f 62 28 72 2e 61 4d   ExpandBlob(r.aM
1fb60 65 6d 29 3b 0a 20 20 20 20 72 2e 65 71 53 65 65  em);.    r.eqSee
1fb70 6e 20 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d 20  n = 0;.    rc = 
1fb80 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
1fb90 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75  toUnpacked(pC->u
1fba0 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 2c 20 30  c.pCursor, &r, 0
1fbb0 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  , 0, &res);.    
1fbc0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1fbd0 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  K ){.      goto 
1fbe0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1fbf0 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  or;.    }.    if
1fc00 28 20 65 71 4f 6e 6c 79 20 26 26 20 72 2e 65 71  ( eqOnly && r.eq
1fc10 53 65 65 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20  Seen==0 ){.     
1fc20 20 61 73 73 65 72 74 28 20 72 65 73 21 3d 30 20   assert( res!=0 
1fc30 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 73 65  );.      goto se
1fc40 65 6b 5f 6e 6f 74 5f 66 6f 75 6e 64 3b 0a 20 20  ek_not_found;.  
1fc50 20 20 7d 0a 20 20 7d 0a 20 20 70 43 2d 3e 64 65    }.  }.  pC->de
1fc60 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
1fc70 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
1fc80 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
1fc90 45 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  E;.#ifdef SQLITE
1fca0 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f  _TEST.  sqlite3_
1fcb0 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a  search_count++;.
1fcc0 23 65 6e 64 69 66 0a 20 20 69 66 28 20 6f 63 3e  #endif.  if( oc>
1fcd0 3d 4f 50 5f 53 65 65 6b 47 45 20 29 7b 20 20 61  =OP_SeekGE ){  a
1fce0 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65  ssert( oc==OP_Se
1fcf0 65 6b 47 45 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53  ekGE || oc==OP_S
1fd00 65 65 6b 47 54 20 29 3b 0a 20 20 20 20 69 66 28  eekGT );.    if(
1fd10 20 72 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d   res<0 || (res==
1fd20 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  0 && oc==OP_Seek
1fd30 47 54 29 20 29 7b 0a 20 20 20 20 20 20 72 65 73  GT) ){.      res
1fd40 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d   = 0;.      rc =
1fd50 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78   sqlite3BtreeNex
1fd60 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  t(pC->uc.pCursor
1fd70 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69  , &res);.      i
1fd80 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1fd90 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1fda0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1fdb0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 65 73  }else{.      res
1fdc0 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 65   = 0;.    }.  }e
1fdd0 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
1fde0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c   oc==OP_SeekLT |
1fdf0 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20  | oc==OP_SeekLE 
1fe00 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 3e 30  );.    if( res>0
1fe10 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f   || (res==0 && o
1fe20 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 29 20 29 7b  c==OP_SeekLT) ){
1fe30 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a  .      res = 0;.
1fe40 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1fe50 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 28  e3BtreePrevious(
1fe60 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
1fe70 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28  &res);.      if(
1fe80 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1fe90 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1fea0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65  to_error;.    }e
1feb0 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 72 65  lse{.      /* re
1fec0 73 20 6d 69 67 68 74 20 62 65 20 6e 65 67 61 74  s might be negat
1fed0 69 76 65 20 62 65 63 61 75 73 65 20 74 68 65 20  ive because the 
1fee0 74 61 62 6c 65 20 69 73 20 65 6d 70 74 79 2e 20  table is empty. 
1fef0 20 43 68 65 63 6b 20 74 6f 0a 20 20 20 20 20 20   Check to.      
1ff00 2a 2a 20 73 65 65 20 69 66 20 74 68 69 73 20 69  ** see if this i
1ff10 73 20 74 68 65 20 63 61 73 65 2e 0a 20 20 20 20  s the case..    
1ff20 20 20 2a 2f 0a 20 20 20 20 20 20 72 65 73 20 3d    */.      res =
1ff30 20 73 71 6c 69 74 65 33 42 74 72 65 65 45 6f 66   sqlite3BtreeEof
1ff40 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  (pC->uc.pCursor)
1ff50 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 73 65 65 6b  ;.    }.  }.seek
1ff60 5f 6e 6f 74 5f 66 6f 75 6e 64 3a 0a 20 20 61 73  _not_found:.  as
1ff70 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
1ff80 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
1ff90 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a  aken(res!=0,2);.
1ffa0 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20    if( res ){.   
1ffb0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
1ffc0 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 65 71  ;.  }else if( eq
1ffd0 4f 6e 6c 79 20 29 7b 0a 20 20 20 20 61 73 73 65  Only ){.    asse
1ffe0 72 74 28 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64  rt( pOp[1].opcod
1fff0 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 7c 7c 20 70  e==OP_IdxLT || p
20000 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  Op[1].opcode==OP
20010 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20 70 4f  _IdxGT );.    pO
20020 70 2b 2b 3b 20 2f 2a 20 53 6b 69 70 20 74 68 65  p++; /* Skip the
20030 20 4f 50 5f 49 64 78 4c 74 20 6f 72 20 4f 50 5f   OP_IdxLt or OP_
20040 49 64 78 47 54 20 74 68 61 74 20 66 6f 6c 6c 6f  IdxGT that follo
20050 77 73 20 2a 2f 0a 20 20 7d 0a 20 20 62 72 65 61  ws */.  }.  brea
20060 6b 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f 70 63 6f  k;.}.  ../* Opco
20070 64 65 3a 20 46 6f 75 6e 64 20 50 31 20 50 32 20  de: Found P1 P2 
20080 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
20090 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
200a0 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30  ].**.** If P4==0
200b0 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
200c0 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63  3 holds a blob c
200d0 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61  onstructed by Ma
200e0 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a  keRecord.  If.**
200f0 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73   P4>0 then regis
20100 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69  ter P3 is the fi
20110 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74  rst of P4 regist
20120 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e  ers that form an
20130 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63   unpacked.** rec
20140 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f  ord..**.** Curso
20150 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e  r P1 is on an in
20160 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74  dex btree.  If t
20170 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69  he record identi
20180 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50  fied by P3 and P
20190 34 0a 2a 2a 20 69 73 20 61 20 70 72 65 66 69 78  4.** is a prefix
201a0 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e   of any entry in
201b0 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20   P1 then a jump 
201c0 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20 61 6e  is made to P2 an
201d0 64 0a 2a 2a 20 50 31 20 69 73 20 6c 65 66 74 20  d.** P1 is left 
201e0 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20  pointing at the 
201f0 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a  matching entry..
20200 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61  **.** This opera
20210 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20  tion leaves the 
20220 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74  cursor in a stat
20230 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 20 62  e where it can b
20240 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e  e.** advanced in
20250 20 74 68 65 20 66 6f 72 77 61 72 64 20 64 69 72   the forward dir
20260 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 4e 65 78  ection.  The Nex
20270 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69  t instruction wi
20280 6c 6c 20 77 6f 72 6b 2c 0a 2a 2a 20 62 75 74 20  ll work,.** but 
20290 6e 6f 74 20 74 68 65 20 50 72 65 76 20 69 6e 73  not the Prev ins
202a0 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
202b0 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75  See also: NotFou
202c0 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20  nd, NoConflict, 
202d0 4e 6f 74 45 78 69 73 74 73 2e 20 53 65 65 6b 47  NotExists. SeekG
202e0 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
202f0 4e 6f 74 46 6f 75 6e 64 20 50 31 20 50 32 20 50  NotFound P1 P2 P
20300 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
20310 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
20320 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20  .**.** If P4==0 
20330 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
20340 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f   holds a blob co
20350 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b  nstructed by Mak
20360 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20  eRecord.  If.** 
20370 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74  P4>0 then regist
20380 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72  er P3 is the fir
20390 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  st of P4 registe
203a0 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20  rs that form an 
203b0 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f  unpacked.** reco
203c0 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f  rd..** .** Curso
203d0 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e  r P1 is on an in
203e0 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74  dex btree.  If t
203f0 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69  he record identi
20400 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50  fied by P3 and P
20410 34 0a 2a 2a 20 69 73 20 6e 6f 74 20 74 68 65 20  4.** is not the 
20420 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e  prefix of any en
20430 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61  try in P1 then a
20440 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f   jump is made to
20450 20 50 32 2e 20 20 49 66 20 50 31 20 0a 2a 2a 20   P2.  If P1 .** 
20460 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20  does contain an 
20470 65 6e 74 72 79 20 77 68 6f 73 65 20 70 72 65 66  entry whose pref
20480 69 78 20 6d 61 74 63 68 65 73 20 74 68 65 20 50  ix matches the P
20490 33 2f 50 34 20 72 65 63 6f 72 64 20 74 68 65 6e  3/P4 record then
204a0 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c   control.** fall
204b0 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  s through to the
204c0 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
204d0 6e 20 61 6e 64 20 50 31 20 69 73 20 6c 65 66 74  n and P1 is left
204e0 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65   pointing at the
204f0 0a 2a 2a 20 6d 61 74 63 68 69 6e 67 20 65 6e 74  .** matching ent
20500 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  ry..**.** This o
20510 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20  peration leaves 
20520 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20  the cursor in a 
20530 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63  state where it c
20540 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61  annot be.** adva
20550 6e 63 65 64 20 69 6e 20 65 69 74 68 65 72 20 64  nced in either d
20560 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74  irection.  In ot
20570 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e  her words, the N
20580 65 78 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20  ext and Prev.** 
20590 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77  opcodes do not w
205a0 6f 72 6b 20 61 66 74 65 72 20 74 68 69 73 20 6f  ork after this o
205b0 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  peration..**.** 
205c0 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
205d0 20 4e 6f 74 45 78 69 73 74 73 2c 20 4e 6f 43 6f   NotExists, NoCo
205e0 6e 66 6c 69 63 74 0a 2a 2f 0a 2f 2a 20 4f 70 63  nflict.*/./* Opc
205f0 6f 64 65 3a 20 4e 6f 43 6f 6e 66 6c 69 63 74 20  ode: NoConflict 
20600 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
20610 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
20620 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
20630 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69   P4==0 then regi
20640 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20  ster P3 holds a 
20650 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64  blob constructed
20660 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20   by MakeRecord. 
20670 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e   If.** P4>0 then
20680 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
20690 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20  the first of P4 
206a0 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66  registers that f
206b0 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a  orm an unpacked.
206c0 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a  ** record..** .*
206d0 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f  * Cursor P1 is o
206e0 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65  n an index btree
206f0 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64  .  If the record
20700 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50   identified by P
20710 33 20 61 6e 64 20 50 34 0a 2a 2a 20 63 6f 6e 74  3 and P4.** cont
20720 61 69 6e 73 20 61 6e 79 20 4e 55 4c 4c 20 76 61  ains any NULL va
20730 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69  lue, jump immedi
20740 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66  ately to P2.  If
20750 20 61 6c 6c 20 74 65 72 6d 73 20 6f 66 20 74 68   all terms of th
20760 65 0a 2a 2a 20 72 65 63 6f 72 64 20 61 72 65 20  e.** record are 
20770 6e 6f 74 2d 4e 55 4c 4c 20 74 68 65 6e 20 61 20  not-NULL then a 
20780 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 74 6f  check is done to
20790 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61 6e   determine if an
207a0 79 20 72 6f 77 20 69 6e 20 74 68 65 0a 2a 2a 20  y row in the.** 
207b0 50 31 20 69 6e 64 65 78 20 62 74 72 65 65 20 68  P1 index btree h
207c0 61 73 20 61 20 6d 61 74 63 68 69 6e 67 20 6b 65  as a matching ke
207d0 79 20 70 72 65 66 69 78 2e 20 20 49 66 20 74 68  y prefix.  If th
207e0 65 72 65 20 61 72 65 20 6e 6f 20 6d 61 74 63 68  ere are no match
207f0 65 73 2c 20 6a 75 6d 70 0a 2a 2a 20 69 6d 6d 65  es, jump.** imme
20800 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20  diately to P2.  
20810 49 66 20 74 68 65 72 65 20 69 73 20 61 20 6d 61  If there is a ma
20820 74 63 68 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  tch, fall throug
20830 68 20 61 6e 64 20 6c 65 61 76 65 20 74 68 65 20  h and leave the 
20840 50 31 0a 2a 2a 20 63 75 72 73 6f 72 20 70 6f 69  P1.** cursor poi
20850 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 6d 61 74  nting to the mat
20860 63 68 69 6e 67 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a  ching row..**.**
20870 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
20880 73 69 6d 69 6c 61 72 20 74 6f 20 4f 50 5f 4e 6f  similar to OP_No
20890 74 46 6f 75 6e 64 20 77 69 74 68 20 74 68 65 20  tFound with the 
208a0 65 78 63 65 70 74 69 6f 6e 73 20 74 68 61 74 20  exceptions that 
208b0 74 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 69 73  the.** branch is
208c0 20 61 6c 77 61 79 73 20 74 61 6b 65 6e 20 69 66   always taken if
208d0 20 61 6e 79 20 70 61 72 74 20 6f 66 20 74 68 65   any part of the
208e0 20 73 65 61 72 63 68 20 6b 65 79 20 69 6e 70 75   search key inpu
208f0 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  t is NULL..**.**
20900 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20   This operation 
20910 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
20920 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65  r in a state whe
20930 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a  re it cannot be.
20940 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20 65  ** advanced in e
20950 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e  ither direction.
20960 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
20970 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50  , the Next and P
20980 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64  rev.** opcodes d
20990 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65 72  o not work after
209a0 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e   this operation.
209b0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
209c0 20 4e 6f 74 46 6f 75 6e 64 2c 20 46 6f 75 6e 64   NotFound, Found
209d0 2c 20 4e 6f 74 45 78 69 73 74 73 0a 2a 2f 0a 63  , NotExists.*/.c
209e0 61 73 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63  ase OP_NoConflic
209f0 74 3a 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20  t:     /* jump, 
20a00 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  in3 */.case OP_N
20a10 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f  otFound:       /
20a20 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
20a30 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20  ase OP_Found: { 
20a40 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
20a50 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c 72  in3 */.  int alr
20a60 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20 69 6e  eadyExists;.  in
20a70 74 20 74 61 6b 65 4a 75 6d 70 3b 0a 20 20 69 6e  t takeJump;.  in
20a80 74 20 69 69 3b 0a 20 20 56 64 62 65 43 75 72 73  t ii;.  VdbeCurs
20a90 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65  or *pC;.  int re
20aa0 73 3b 0a 20 20 63 68 61 72 20 2a 70 46 72 65 65  s;.  char *pFree
20ab0 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
20ac0 72 64 20 2a 70 49 64 78 4b 65 79 3b 0a 20 20 55  rd *pIdxKey;.  U
20ad0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
20ae0 0a 20 20 63 68 61 72 20 61 54 65 6d 70 52 65 63  .  char aTempRec
20af0 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 55  [ROUND8(sizeof(U
20b00 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 29 29 20  npackedRecord)) 
20b10 2b 20 73 69 7a 65 6f 66 28 4d 65 6d 29 2a 34 20  + sizeof(Mem)*4 
20b20 2b 20 37 5d 3b 0a 0a 23 69 66 64 65 66 20 53 51  + 7];..#ifdef SQ
20b30 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 66 28 20  LITE_TEST.  if( 
20b40 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
20b50 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 20 73 71 6c  NoConflict ) sql
20b60 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74  ite3_found_count
20b70 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 61 73  ++;.#endif..  as
20b80 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
20b90 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
20ba0 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
20bb0 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
20bc0 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70  =P4_INT32 );.  p
20bd0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
20be0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
20bf0 20 70 43 21 3d 30 20 29 3b 0a 23 69 66 64 65 66   pC!=0 );.#ifdef
20c00 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
20c10 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70  pC->seekOp = pOp
20c20 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66  ->opcode;.#endif
20c30 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
20c40 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65  pOp->p3];.  asse
20c50 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
20c60 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
20c70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
20c80 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29  >uc.pCursor!=0 )
20c90 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
20ca0 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20  isTable==0 );.  
20cb0 70 46 72 65 65 20 3d 20 30 3b 0a 20 20 69 66 28  pFree = 0;.  if(
20cc0 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a   pOp->p4.i>0 ){.
20cd0 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d      r.pKeyInfo =
20ce0 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20   pC->pKeyInfo;. 
20cf0 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75     r.nField = (u
20d00 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20  16)pOp->p4.i;.  
20d10 20 20 72 2e 61 4d 65 6d 20 3d 20 70 49 6e 33 3b    r.aMem = pIn3;
20d20 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69  .    for(ii=0; i
20d30 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b  i<r.nField; ii++
20d40 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
20d50 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61   memIsValid(&r.a
20d60 4d 65 6d 5b 69 69 5d 29 20 29 3b 0a 20 20 20 20  Mem[ii]) );.    
20d70 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 26 72 2e    ExpandBlob(&r.
20d80 61 4d 65 6d 5b 69 69 5d 29 3b 0a 23 69 66 64 65  aMem[ii]);.#ifde
20d90 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
20da0 20 20 20 20 20 69 66 28 20 69 69 20 29 20 52 45       if( ii ) RE
20db0 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
20dc0 2d 3e 70 33 2b 69 69 2c 20 26 72 2e 61 4d 65 6d  ->p3+ii, &r.aMem
20dd0 5b 69 69 5d 29 3b 0a 23 65 6e 64 69 66 0a 20 20  [ii]);.#endif.  
20de0 20 20 7d 0a 20 20 20 20 70 49 64 78 4b 65 79 20    }.    pIdxKey 
20df0 3d 20 26 72 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  = &r;.  }else{. 
20e00 20 20 20 70 49 64 78 4b 65 79 20 3d 20 73 71 6c     pIdxKey = sql
20e10 69 74 65 33 56 64 62 65 41 6c 6c 6f 63 55 6e 70  ite3VdbeAllocUnp
20e20 61 63 6b 65 64 52 65 63 6f 72 64 28 0a 20 20 20  ackedRecord(.   
20e30 20 20 20 20 20 70 43 2d 3e 70 4b 65 79 49 6e 66       pC->pKeyInf
20e40 6f 2c 20 61 54 65 6d 70 52 65 63 2c 20 73 69 7a  o, aTempRec, siz
20e50 65 6f 66 28 61 54 65 6d 70 52 65 63 29 2c 20 26  eof(aTempRec), &
20e60 70 46 72 65 65 0a 20 20 20 20 29 3b 0a 20 20 20  pFree.    );.   
20e70 20 69 66 28 20 70 49 64 78 4b 65 79 3d 3d 30 20   if( pIdxKey==0 
20e80 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
20e90 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d     assert( pIn3-
20ea0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
20eb0 62 20 29 3b 0a 20 20 20 20 45 78 70 61 6e 64 42  b );.    ExpandB
20ec0 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20 20 73  lob(pIn3);.    s
20ed0 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f 72 64  qlite3VdbeRecord
20ee0 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65 79 49  Unpack(pC->pKeyI
20ef0 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70 49  nfo, pIn3->n, pI
20f00 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b 65 79 29 3b  n3->z, pIdxKey);
20f10 0a 20 20 7d 0a 20 20 70 49 64 78 4b 65 79 2d 3e  .  }.  pIdxKey->
20f20 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a  default_rc = 0;.
20f30 20 20 74 61 6b 65 4a 75 6d 70 20 3d 20 30 3b 0a    takeJump = 0;.
20f40 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
20f50 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74  e==OP_NoConflict
20f60 20 29 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20 74   ){.    /* For t
20f70 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74  he OP_NoConflict
20f80 20 6f 70 63 6f 64 65 2c 20 74 61 6b 65 20 74 68   opcode, take th
20f90 65 20 6a 75 6d 70 20 69 66 20 61 6e 79 20 6f 66  e jump if any of
20fa0 20 74 68 65 0a 20 20 20 20 2a 2a 20 69 6e 70 75   the.    ** inpu
20fb0 74 20 66 69 65 6c 64 73 20 61 72 65 20 4e 55 4c  t fields are NUL
20fc0 4c 2c 20 73 69 6e 63 65 20 61 6e 79 20 6b 65 79  L, since any key
20fd0 20 77 69 74 68 20 61 20 4e 55 4c 4c 20 77 69 6c   with a NULL wil
20fe0 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a 20 63 6f 6e  l not.    ** con
20ff0 66 6c 69 63 74 20 2a 2f 0a 20 20 20 20 66 6f 72  flict */.    for
21000 28 69 69 3d 30 3b 20 69 69 3c 70 49 64 78 4b 65  (ii=0; ii<pIdxKe
21010 79 2d 3e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29  y->nField; ii++)
21020 7b 0a 20 20 20 20 20 20 69 66 28 20 70 49 64 78  {.      if( pIdx
21030 4b 65 79 2d 3e 61 4d 65 6d 5b 69 69 5d 2e 66 6c  Key->aMem[ii].fl
21040 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
21050 7b 0a 20 20 20 20 20 20 20 20 74 61 6b 65 4a 75  {.        takeJu
21060 6d 70 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  mp = 1;.        
21070 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
21080 20 20 20 7d 0a 20 20 7d 0a 20 20 72 63 20 3d 20     }.  }.  rc = 
21090 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
210a0 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75  toUnpacked(pC->u
210b0 63 2e 70 43 75 72 73 6f 72 2c 20 70 49 64 78 4b  c.pCursor, pIdxK
210c0 65 79 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b  ey, 0, 0, &res);
210d0 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  .  sqlite3DbFree
210e0 28 64 62 2c 20 70 46 72 65 65 29 3b 0a 20 20 69  (db, pFree);.  i
210f0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
21100 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f   ){.    goto abo
21110 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
21120 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b 52  .  }.  pC->seekR
21130 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 61  esult = res;.  a
21140 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d 20 28  lreadyExists = (
21150 72 65 73 3d 3d 30 29 3b 0a 20 20 70 43 2d 3e 6e  res==0);.  pC->n
21160 75 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c 72 65 61  ullRow = 1-alrea
21170 64 79 45 78 69 73 74 73 3b 0a 20 20 70 43 2d 3e  dyExists;.  pC->
21180 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
21190 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
211a0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
211b0 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  ALE;.  if( pOp->
211c0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64  opcode==OP_Found
211d0 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e   ){.    VdbeBran
211e0 63 68 54 61 6b 65 6e 28 61 6c 72 65 61 64 79 45  chTaken(alreadyE
211f0 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20  xists!=0,2);.   
21200 20 69 66 28 20 61 6c 72 65 61 64 79 45 78 69 73   if( alreadyExis
21210 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  ts ) goto jump_t
21220 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  o_p2;.  }else{. 
21230 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
21240 65 6e 28 74 61 6b 65 4a 75 6d 70 7c 7c 61 6c 72  en(takeJump||alr
21250 65 61 64 79 45 78 69 73 74 73 3d 3d 30 2c 32 29  eadyExists==0,2)
21260 3b 0a 20 20 20 20 69 66 28 20 74 61 6b 65 4a 75  ;.    if( takeJu
21270 6d 70 20 7c 7c 20 21 61 6c 72 65 61 64 79 45 78  mp || !alreadyEx
21280 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70  ists ) goto jump
21290 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
212a0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
212b0 65 3a 20 53 65 65 6b 52 6f 77 69 64 20 50 31 20  e: SeekRowid P1 
212c0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
212d0 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b  opsis: intkey=r[
212e0 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  P3].**.** P1 is 
212f0 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20 63  the index of a c
21300 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61 6e  ursor open on an
21310 20 53 51 4c 20 74 61 62 6c 65 20 62 74 72 65 65   SQL table btree
21320 20 28 77 69 74 68 20 69 6e 74 65 67 65 72 0a 2a   (with integer.*
21330 2a 20 6b 65 79 73 29 2e 20 20 49 66 20 72 65 67  * keys).  If reg
21340 69 73 74 65 72 20 50 33 20 64 6f 65 73 20 6e 6f  ister P3 does no
21350 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
21360 65 67 65 72 20 6f 72 20 69 66 20 50 31 20 64 6f  eger or if P1 do
21370 65 73 20 6e 6f 74 0a 2a 2a 20 63 6f 6e 74 61 69  es not.** contai
21380 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 20  n a record with 
21390 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 6a 75  rowid P3 then ju
213a0 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
213b0 6f 20 50 32 2e 20 20 0a 2a 2a 20 4f 72 2c 20 69  o P2.  .** Or, i
213c0 66 20 50 32 20 69 73 20 30 2c 20 72 61 69 73 65  f P2 is 0, raise
213d0 20 61 6e 20 53 51 4c 49 54 45 5f 43 4f 52 52 55   an SQLITE_CORRU
213e0 50 54 20 65 72 72 6f 72 2e 20 49 66 20 50 31 20  PT error. If P1 
213f0 64 6f 65 73 20 63 6f 6e 74 61 69 6e 0a 2a 2a 20  does contain.** 
21400 61 20 72 65 63 6f 72 64 20 77 69 74 68 20 72 6f  a record with ro
21410 77 69 64 20 50 33 20 74 68 65 6e 20 0a 2a 2a 20  wid P3 then .** 
21420 6c 65 61 76 65 20 74 68 65 20 63 75 72 73 6f 72  leave the cursor
21430 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 61   pointing at tha
21440 74 20 72 65 63 6f 72 64 20 61 6e 64 20 66 61 6c  t record and fal
21450 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
21460 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63   next.** instruc
21470 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  tion..**.** The 
21480 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70 63  OP_NotExists opc
21490 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65  ode performs the
214a0 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 2c   same operation,
214b0 20 62 75 74 20 77 69 74 68 20 4f 50 5f 4e 6f 74   but with OP_Not
214c0 45 78 69 73 74 73 0a 2a 2a 20 74 68 65 20 50 33  Exists.** the P3
214d0 20 72 65 67 69 73 74 65 72 20 6d 75 73 74 20 62   register must b
214e0 65 20 67 75 61 72 61 6e 74 65 65 64 20 74 6f 20  e guaranteed to 
214f0 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
21500 65 72 20 76 61 6c 75 65 2e 20 20 57 69 74 68 20  er value.  With 
21510 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 2c 20  this.** opcode, 
21520 72 65 67 69 73 74 65 72 20 50 33 20 6d 69 67 68  register P3 migh
21530 74 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e  t not contain an
21540 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20   integer..**.** 
21550 54 68 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20  The OP_NotFound 
21560 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20  opcode performs 
21570 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69  the same operati
21580 6f 6e 20 6f 6e 20 69 6e 64 65 78 20 62 74 72 65  on on index btre
21590 65 73 0a 2a 2a 20 28 77 69 74 68 20 61 72 62 69  es.** (with arbi
215a0 74 72 61 72 79 20 6d 75 6c 74 69 2d 76 61 6c 75  trary multi-valu
215b0 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 54  e keys)..**.** T
215c0 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
215d0 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20  s the cursor in 
215e0 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74  a state where it
215f0 20 63 61 6e 6e 6f 74 20 62 65 20 61 64 76 61 6e   cannot be advan
21600 63 65 64 0a 2a 2a 20 69 6e 20 65 69 74 68 65 72  ced.** in either
21610 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20   direction.  In 
21620 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
21630 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76 20 6f   Next and Prev o
21640 70 63 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a 20 6e  pcodes will.** n
21650 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69 6e  ot work followin
21660 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a  g this opcode..*
21670 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
21680 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
21690 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 53 65 65 6b  NoConflict, Seek
216a0 52 6f 77 69 64 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  Rowid.*/./* Opco
216b0 64 65 3a 20 4e 6f 74 45 78 69 73 74 73 20 50 31  de: NotExists P1
216c0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
216d0 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72  nopsis: intkey=r
216e0 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  [P3].**.** P1 is
216f0 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20   the index of a 
21700 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61  cursor open on a
21710 6e 20 53 51 4c 20 74 61 62 6c 65 20 62 74 72 65  n SQL table btre
21720 65 20 28 77 69 74 68 20 69 6e 74 65 67 65 72 0a  e (with integer.
21730 2a 2a 20 6b 65 79 73 29 2e 20 20 50 33 20 69 73  ** keys).  P3 is
21740 20 61 6e 20 69 6e 74 65 67 65 72 20 72 6f 77 69   an integer rowi
21750 64 2e 20 20 49 66 20 50 31 20 64 6f 65 73 20 6e  d.  If P1 does n
21760 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63  ot contain a rec
21770 6f 72 64 20 77 69 74 68 0a 2a 2a 20 72 6f 77 69  ord with.** rowi
21780 64 20 50 33 20 74 68 65 6e 20 6a 75 6d 70 20 69  d P3 then jump i
21790 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
217a0 2e 20 20 4f 72 2c 20 69 66 20 50 32 20 69 73 20  .  Or, if P2 is 
217b0 30 2c 20 72 61 69 73 65 20 61 6e 0a 2a 2a 20 53  0, raise an.** S
217c0 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 65 72  QLITE_CORRUPT er
217d0 72 6f 72 2e 20 49 66 20 50 31 20 64 6f 65 73 20  ror. If P1 does 
217e0 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64  contain a record
217f0 20 77 69 74 68 20 72 6f 77 69 64 20 50 33 20 74   with rowid P3 t
21800 68 65 6e 20 0a 2a 2a 20 6c 65 61 76 65 20 74 68  hen .** leave th
21810 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e  e cursor pointin
21820 67 20 61 74 20 74 68 61 74 20 72 65 63 6f 72 64  g at that record
21830 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67   and fall throug
21840 68 20 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a 2a  h to the next.**
21850 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
21860 0a 2a 2a 20 54 68 65 20 4f 50 5f 53 65 65 6b 52  .** The OP_SeekR
21870 6f 77 69 64 20 6f 70 63 6f 64 65 20 70 65 72 66  owid opcode perf
21880 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70  orms the same op
21890 65 72 61 74 69 6f 6e 20 62 75 74 20 61 6c 73 6f  eration but also
218a0 20 61 6c 6c 6f 77 73 20 74 68 65 0a 2a 2a 20 50   allows the.** P
218b0 33 20 72 65 67 69 73 74 65 72 20 74 6f 20 63 6f  3 register to co
218c0 6e 74 61 69 6e 20 61 20 6e 6f 6e 2d 69 6e 74 65  ntain a non-inte
218d0 67 65 72 20 76 61 6c 75 65 2c 20 69 6e 20 77 68  ger value, in wh
218e0 69 63 68 20 63 61 73 65 20 74 68 65 20 6a 75 6d  ich case the jum
218f0 70 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 74  p is.** always t
21900 61 6b 65 6e 2e 20 20 54 68 69 73 20 6f 70 63 6f  aken.  This opco
21910 64 65 20 72 65 71 75 69 72 65 73 20 74 68 61 74  de requires that
21920 20 50 33 20 61 6c 77 61 79 73 20 63 6f 6e 74 61   P3 always conta
21930 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  in an integer..*
21940 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 46  *.** The OP_NotF
21950 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70 65 72 66  ound opcode perf
21960 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70  orms the same op
21970 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64 65 78  eration on index
21980 20 62 74 72 65 65 73 0a 2a 2a 20 28 77 69 74 68   btrees.** (with
21990 20 61 72 62 69 74 72 61 72 79 20 6d 75 6c 74 69   arbitrary multi
219a0 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a 2a 2a  -value keys)..**
219b0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
219c0 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
219d0 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65  r in a state whe
219e0 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20  re it cannot be 
219f0 61 64 76 61 6e 63 65 64 0a 2a 2a 20 69 6e 20 65  advanced.** in e
21a00 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e  ither direction.
21a10 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
21a20 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50  , the Next and P
21a30 72 65 76 20 6f 70 63 6f 64 65 73 20 77 69 6c 6c  rev opcodes will
21a40 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 6c  .** not work fol
21a50 6c 6f 77 69 6e 67 20 74 68 69 73 20 6f 70 63 6f  lowing this opco
21a60 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  de..**.** See al
21a70 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
21a80 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c  und, NoConflict,
21a90 20 53 65 65 6b 52 6f 77 69 64 0a 2a 2f 0a 63 61   SeekRowid.*/.ca
21aa0 73 65 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64 3a  se OP_SeekRowid:
21ab0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
21ac0 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62 65  p, in3 */.  Vdbe
21ad0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
21ae0 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
21af0 20 69 6e 74 20 72 65 73 3b 0a 20 20 75 36 34 20   int res;.  u64 
21b00 69 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20 3d 20  iKey;..  pIn3 = 
21b10 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
21b20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
21b30 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
21b40 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66   ){.    applyAff
21b50 69 6e 69 74 79 28 70 49 6e 33 2c 20 53 51 4c 49  inity(pIn3, SQLI
21b60 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20  TE_AFF_NUMERIC, 
21b70 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 69  encoding);.    i
21b80 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  f( (pIn3->flags 
21b90 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 20  & MEM_Int)==0 ) 
21ba0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
21bb0 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  .  }.  /* Fall t
21bc0 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 4e  hrough into OP_N
21bd0 6f 74 45 78 69 73 74 73 20 2a 2f 0a 63 61 73 65  otExists */.case
21be0 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20 20   OP_NotExists:  
21bf0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
21c00 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20 3d   in3 */.  pIn3 =
21c10 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
21c20 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d  .  assert( pIn3-
21c30 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
21c40 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
21c50 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
21c60 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
21c70 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
21c80 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
21c90 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23  sert( pC!=0 );.#
21ca0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
21cb0 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20  UG.  pC->seekOp 
21cc0 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 61 73  = 0;.#endif.  as
21cd0 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
21ce0 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  e );.  assert( p
21cf0 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
21d00 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
21d10 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70  pCrsr = pC->uc.p
21d20 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74  Cursor;.  assert
21d30 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20  ( pCrsr!=0 );.  
21d40 72 65 73 20 3d 20 30 3b 0a 20 20 69 4b 65 79 20  res = 0;.  iKey 
21d50 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 72  = pIn3->u.i;.  r
21d60 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
21d70 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
21d80 43 72 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30  Crsr, 0, iKey, 0
21d90 2c 20 26 72 65 73 29 3b 0a 20 20 61 73 73 65 72  , &res);.  asser
21da0 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
21db0 20 7c 7c 20 72 65 73 3d 3d 30 20 29 3b 0a 20 20   || res==0 );.  
21dc0 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
21dd0 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73 65   = iKey;  /* Use
21de0 64 20 62 79 20 4f 50 5f 44 65 6c 65 74 65 20 2a  d by OP_Delete *
21df0 2f 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  /.  pC->nullRow 
21e00 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 0;.  pC->cache
21e10 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
21e20 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 64 65 66 65  TALE;.  pC->defe
21e30 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
21e40 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
21e50 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 70  n(res!=0,2);.  p
21e60 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  C->seekResult = 
21e70 72 65 73 3b 0a 20 20 69 66 28 20 72 65 73 21 3d  res;.  if( res!=
21e80 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
21e90 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
21ea0 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
21eb0 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63  2==0 ){.      rc
21ec0 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50   = SQLITE_CORRUP
21ed0 54 5f 42 4b 50 54 3b 0a 20 20 20 20 7d 65 6c 73  T_BKPT;.    }els
21ee0 65 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a 75  e{.      goto ju
21ef0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a  mp_to_p2;.    }.
21f00 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67    }.  if( rc ) g
21f10 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
21f20 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
21f30 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
21f40 65 71 75 65 6e 63 65 20 50 31 20 50 32 20 2a 20  equence P1 P2 * 
21f50 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
21f60 20 72 5b 50 32 5d 3d 63 75 72 73 6f 72 5b 50 31   r[P2]=cursor[P1
21f70 5d 2e 63 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20 46 69  ].ctr++.**.** Fi
21f80 6e 64 20 74 68 65 20 6e 65 78 74 20 61 76 61 69  nd the next avai
21f90 6c 61 62 6c 65 20 73 65 71 75 65 6e 63 65 20 6e  lable sequence n
21fa0 75 6d 62 65 72 20 66 6f 72 20 63 75 72 73 6f 72  umber for cursor
21fb0 20 50 31 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68   P1..** Write th
21fc0 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65  e sequence numbe
21fd0 72 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  r into register 
21fe0 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65 71 75 65  P2..** The seque
21ff0 6e 63 65 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68  nce number on th
22000 65 20 63 75 72 73 6f 72 20 69 73 20 69 6e 63 72  e cursor is incr
22010 65 6d 65 6e 74 65 64 20 61 66 74 65 72 20 74 68  emented after th
22020 69 73 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f  is.** instructio
22030 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  n.  .*/.case OP_
22040 53 65 71 75 65 6e 63 65 3a 20 7b 20 20 20 20 20  Sequence: {     
22050 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
22060 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
22070 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
22080 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
22090 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73   assert( p->apCs
220a0 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b  r[pOp->p1]!=0 );
220b0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70  .  assert( p->ap
220c0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 65 43  Csr[pOp->p1]->eC
220d0 75 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f  urType!=CURTYPE_
220e0 56 54 41 42 20 29 3b 0a 20 20 70 4f 75 74 20 3d  VTAB );.  pOut =
220f0 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
22100 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d  p, pOp);.  pOut-
22110 3e 75 2e 69 20 3d 20 70 2d 3e 61 70 43 73 72 5b  >u.i = p->apCsr[
22120 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f 75  pOp->p1]->seqCou
22130 6e 74 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  nt++;.  break;.}
22140 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65  .../* Opcode: Ne
22150 77 52 6f 77 69 64 20 50 31 20 50 32 20 50 33 20  wRowid P1 P2 P3 
22160 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
22170 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a   r[P2]=rowid.**.
22180 2a 2a 20 47 65 74 20 61 20 6e 65 77 20 69 6e 74  ** Get a new int
22190 65 67 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62  eger record numb
221a0 65 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64  er (a.k.a "rowid
221b0 22 29 20 75 73 65 64 20 61 73 20 74 68 65 20 6b  ") used as the k
221c0 65 79 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a  ey to a table..*
221d0 2a 20 54 68 65 20 72 65 63 6f 72 64 20 6e 75 6d  * The record num
221e0 62 65 72 20 69 73 20 6e 6f 74 20 70 72 65 76 69  ber is not previ
221f0 6f 75 73 6c 79 20 75 73 65 64 20 61 73 20 61 20  ously used as a 
22200 6b 65 79 20 69 6e 20 74 68 65 20 64 61 74 61 62  key in the datab
22210 61 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61  ase.** table tha
22220 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e  t cursor P1 poin
22230 74 73 20 74 6f 2e 20 20 54 68 65 20 6e 65 77 20  ts to.  The new 
22240 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73  record number is
22250 20 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74   written.** writ
22260 74 65 6e 20 74 6f 20 72 65 67 69 73 74 65 72 20  ten to register 
22270 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e  P2..**.** If P3>
22280 30 20 74 68 65 6e 20 50 33 20 69 73 20 61 20 72  0 then P3 is a r
22290 65 67 69 73 74 65 72 20 69 6e 20 74 68 65 20 72  egister in the r
222a0 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69  oot frame of thi
222b0 73 20 56 44 42 45 20 74 68 61 74 20 68 6f 6c 64  s VDBE that hold
222c0 73 20 0a 2a 2a 20 74 68 65 20 6c 61 72 67 65 73  s .** the larges
222d0 74 20 70 72 65 76 69 6f 75 73 6c 79 20 67 65 6e  t previously gen
222e0 65 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75  erated record nu
222f0 6d 62 65 72 2e 20 4e 6f 20 6e 65 77 20 72 65 63  mber. No new rec
22300 6f 72 64 20 6e 75 6d 62 65 72 73 20 61 72 65 0a  ord numbers are.
22310 2a 2a 20 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65  ** allowed to be
22320 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20   less than this 
22330 76 61 6c 75 65 2e 20 57 68 65 6e 20 74 68 69 73  value. When this
22340 20 76 61 6c 75 65 20 72 65 61 63 68 65 73 20 69   value reaches i
22350 74 73 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20  ts maximum, .** 
22360 61 6e 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20 65  an SQLITE_FULL e
22370 72 72 6f 72 20 69 73 20 67 65 6e 65 72 61 74 65  rror is generate
22380 64 2e 20 54 68 65 20 50 33 20 72 65 67 69 73 74  d. The P3 regist
22390 65 72 20 69 73 20 75 70 64 61 74 65 64 20 77 69  er is updated wi
223a0 74 68 20 74 68 65 20 27 0a 2a 2a 20 67 65 6e 65  th the '.** gene
223b0 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d  rated record num
223c0 62 65 72 2e 20 54 68 69 73 20 50 33 20 6d 65 63  ber. This P3 mec
223d0 68 61 6e 69 73 6d 20 69 73 20 75 73 65 64 20 74  hanism is used t
223e0 6f 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74  o help implement
223f0 20 74 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43 52   the.** AUTOINCR
22400 45 4d 45 4e 54 20 66 65 61 74 75 72 65 2e 0a 2a  EMENT feature..*
22410 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f 77  /.case OP_NewRow
22420 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  id: {           
22430 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 36 34  /* out2 */.  i64
22440 20 76 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   v;             
22450 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72      /* The new r
22460 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62 65 43 75  owid */.  VdbeCu
22470 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20 20 20  rsor *pC;       
22480 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66 20 74 61   /* Cursor of ta
22490 62 6c 65 20 74 6f 20 67 65 74 20 74 68 65 20 6e  ble to get the n
224a0 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 6e  ew rowid */.  in
224b0 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20 20  t res;          
224c0 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f       /* Result o
224d0 66 20 61 6e 20 73 71 6c 69 74 65 33 42 74 72 65  f an sqlite3Btre
224e0 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 69 6e 74  eLast() */.  int
224f0 20 63 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20   cnt;           
22500 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 74      /* Counter t
22510 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d 62  o limit the numb
22520 65 72 20 6f 66 20 73 65 61 72 63 68 65 73 20 2a  er of searches *
22530 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20  /.  Mem *pMem;  
22540 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
22550 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 6c  gister holding l
22560 61 72 67 65 73 74 20 72 6f 77 69 64 20 66 6f 72  argest rowid for
22570 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a   AUTOINCREMENT *
22580 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70  /.  VdbeFrame *p
22590 46 72 61 6d 65 3b 20 20 20 20 20 2f 2a 20 52 6f  Frame;     /* Ro
225a0 6f 74 20 66 72 61 6d 65 20 6f 66 20 56 44 42 45  ot frame of VDBE
225b0 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a 20 20   */..  v = 0;.  
225c0 72 65 73 20 3d 20 30 3b 0a 20 20 70 4f 75 74 20  res = 0;.  pOut 
225d0 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
225e0 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65  (p, pOp);.  asse
225f0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
22600 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
22610 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
22620 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
22630 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
22640 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
22650 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
22660 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
22670 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
22680 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 7b  Cursor!=0 );.  {
22690 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74  .    /* The next
226a0 20 72 6f 77 69 64 20 6f 72 20 72 65 63 6f 72 64   rowid or record
226b0 20 6e 75 6d 62 65 72 20 28 64 69 66 66 65 72 65   number (differe
226c0 6e 74 20 74 65 72 6d 73 20 66 6f 72 20 74 68 65  nt terms for the
226d0 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74 68 69   same.    ** thi
226e0 6e 67 29 20 69 73 20 6f 62 74 61 69 6e 65 64 20  ng) is obtained 
226f0 69 6e 20 61 20 74 77 6f 2d 73 74 65 70 20 61 6c  in a two-step al
22700 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a  gorithm..    **.
22710 20 20 20 20 2a 2a 20 46 69 72 73 74 20 77 65 20      ** First we 
22720 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20  attempt to find 
22730 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73  the largest exis
22740 74 69 6e 67 20 72 6f 77 69 64 20 61 6e 64 20 61  ting rowid and a
22750 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 74 6f  dd one.    ** to
22760 20 74 68 61 74 2e 20 20 42 75 74 20 69 66 20 74   that.  But if t
22770 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73 74  he largest exist
22780 69 6e 67 20 72 6f 77 69 64 20 69 73 20 61 6c 72  ing rowid is alr
22790 65 61 64 79 20 74 68 65 20 6d 61 78 69 6d 75 6d  eady the maximum
227a0 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74 69 76 65  .    ** positive
227b0 20 69 6e 74 65 67 65 72 2c 20 77 65 20 68 61 76   integer, we hav
227c0 65 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f 75 67  e to fall throug
227d0 68 20 74 6f 20 74 68 65 20 73 65 63 6f 6e 64 0a  h to the second.
227e0 20 20 20 20 2a 2a 20 70 72 6f 62 61 62 69 6c 69      ** probabili
227f0 73 74 69 63 20 61 6c 67 6f 72 69 74 68 6d 0a 20  stic algorithm. 
22800 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65     **.    ** The
22810 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69 74 68   second algorith
22820 6d 20 69 73 20 74 6f 20 73 65 6c 65 63 74 20 61  m is to select a
22830 20 72 6f 77 69 64 20 61 74 20 72 61 6e 64 6f 6d   rowid at random
22840 20 61 6e 64 20 73 65 65 20 69 66 0a 20 20 20 20   and see if.    
22850 2a 2a 20 69 74 20 61 6c 72 65 61 64 79 20 65 78  ** it already ex
22860 69 73 74 73 20 69 6e 20 74 68 65 20 74 61 62 6c  ists in the tabl
22870 65 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e  e.  If it does n
22880 6f 74 20 65 78 69 73 74 2c 20 77 65 20 68 61 76  ot exist, we hav
22890 65 0a 20 20 20 20 2a 2a 20 73 75 63 63 65 65 64  e.    ** succeed
228a0 65 64 2e 20 20 49 66 20 74 68 65 20 72 61 6e 64  ed.  If the rand
228b0 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73 20 65 78  om rowid does ex
228c0 69 73 74 2c 20 77 65 20 73 65 6c 65 63 74 20 61  ist, we select a
228d0 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a 2a 20   new one.    ** 
228e0 61 6e 64 20 74 72 79 20 61 67 61 69 6e 2c 20 75  and try again, u
228f0 70 20 74 6f 20 31 30 30 20 74 69 6d 65 73 2e 0a  p to 100 times..
22900 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72      */.    asser
22910 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
22920 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
22930 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a 23 20 20  _32BIT_ROWID.#  
22940 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49   define MAX_ROWI
22950 44 20 30 78 37 66 66 66 66 66 66 66 0a 23 65 6c  D 0x7fffffff.#el
22960 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63  se.    /* Some c
22970 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69  ompilers complai
22980 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74  n about constant
22990 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 30 78  s of the form 0x
229a0 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66  7fffffffffffffff
229b0 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72 73 20  ..    ** Others 
229c0 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 30  complain about 0
229d0 78 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66  x7ffffffffffffff
229e0 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  ffLL.  The follo
229f0 77 69 6e 67 20 6d 61 63 72 6f 20 73 65 65 6d 73  wing macro seems
22a00 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69  .    ** to provi
22a10 64 65 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20  de the constant 
22a20 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c  while making all
22a30 20 63 6f 6d 70 69 6c 65 72 73 20 68 61 70 70 79   compilers happy
22a40 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64 65 66  ..    */.#   def
22a50 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 20 28  ine MAX_ROWID  (
22a60 69 36 34 29 28 20 28 28 28 75 36 34 29 30 78 37  i64)( (((u64)0x7
22a70 66 66 66 66 66 66 66 29 3c 3c 33 32 29 20 7c 20  fffffff)<<32) | 
22a80 28 75 36 34 29 30 78 66 66 66 66 66 66 66 66 20  (u64)0xffffffff 
22a90 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 69 66  ).#endif..    if
22aa0 28 20 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d  ( !pC->useRandom
22ab0 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 72  Rowid ){.      r
22ac0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
22ad0 4c 61 73 74 28 70 43 2d 3e 75 63 2e 70 43 75 72  Last(pC->uc.pCur
22ae0 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  sor, &res);.    
22af0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
22b00 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67  _OK ){.        g
22b10 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
22b20 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
22b30 20 20 20 20 20 20 69 66 28 20 72 65 73 20 29 7b        if( res ){
22b40 0a 20 20 20 20 20 20 20 20 76 20 3d 20 31 3b 20  .        v = 1; 
22b50 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 36 31 39 31    /* IMP: R-6191
22b60 34 2d 34 38 30 37 34 20 2a 2f 0a 20 20 20 20 20  4-48074 */.     
22b70 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
22b80 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
22b90 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69  treeCursorIsVali
22ba0 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  d(pC->uc.pCursor
22bb0 29 20 29 3b 0a 20 20 20 20 20 20 20 20 76 20 3d  ) );.        v =
22bc0 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74   sqlite3BtreeInt
22bd0 65 67 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70  egerKey(pC->uc.p
22be0 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 20  Cursor);.       
22bf0 20 69 66 28 20 76 3e 3d 4d 41 58 5f 52 4f 57 49   if( v>=MAX_ROWI
22c00 44 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70  D ){.          p
22c10 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
22c20 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d  d = 1;.        }
22c30 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
22c40 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52  v++;   /* IMP: R
22c50 2d 32 39 35 33 38 2d 33 34 39 38 37 20 2a 2f 0a  -29538-34987 */.
22c60 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
22c70 7d 0a 20 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66  }.    }..#ifndef
22c80 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
22c90 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20 20 69  OINCREMENT.    i
22ca0 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  f( pOp->p3 ){.  
22cb0 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68      /* Assert th
22cc0 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64  at P3 is a valid
22cd0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f   memory cell. */
22ce0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
22cf0 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20  Op->p3>0 );.    
22d00 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20    if( p->pFrame 
22d10 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 70  ){.        for(p
22d20 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b  Frame=p->pFrame;
22d30 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74   pFrame->pParent
22d40 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d  ; pFrame=pFrame-
22d50 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 20  >pParent);.     
22d60 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61     /* Assert tha
22d70 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20  t P3 is a valid 
22d80 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a  memory cell. */.
22d90 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
22da0 70 4f 70 2d 3e 70 33 3c 3d 70 46 72 61 6d 65 2d  pOp->p3<=pFrame-
22db0 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20  >nMem );.       
22dc0 20 70 4d 65 6d 20 3d 20 26 70 46 72 61 6d 65 2d   pMem = &pFrame-
22dd0 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  >aMem[pOp->p3];.
22de0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
22df0 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74       /* Assert t
22e00 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69  hat P3 is a vali
22e10 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a  d memory cell. *
22e20 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  /.        assert
22e30 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  ( pOp->p3<=(p->n
22e40 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
22e50 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70  or) );.        p
22e60 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
22e70 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65  >p3];.        me
22e80 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
22e90 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 7d  , pMem);.      }
22ea0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
22eb0 65 6d 49 73 56 61 6c 69 64 28 70 4d 65 6d 29 20  emIsValid(pMem) 
22ec0 29 3b 0a 0a 20 20 20 20 20 20 52 45 47 49 53 54  );..      REGIST
22ed0 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
22ee0 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 73  , pMem);.      s
22ef0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
22f00 65 67 65 72 69 66 79 28 70 4d 65 6d 29 3b 0a 20  egerify(pMem);. 
22f10 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4d       assert( (pM
22f20 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  em->flags & MEM_
22f30 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f 2a 20 6d  Int)!=0 );  /* m
22f40 65 6d 28 50 33 29 20 68 6f 6c 64 73 20 61 6e 20  em(P3) holds an 
22f50 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20 20 20 20  integer */.     
22f60 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d   if( pMem->u.i==
22f70 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20 70 43 2d  MAX_ROWID || pC-
22f80 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
22f90 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
22fa0 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f  SQLITE_FULL;   /
22fb0 2a 20 49 4d 50 3a 20 52 2d 31 32 32 37 35 2d 36  * IMP: R-12275-6
22fc0 31 33 33 38 20 2a 2f 0a 20 20 20 20 20 20 20 20  1338 */.        
22fd0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
22fe0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
22ff0 0a 20 20 20 20 20 20 69 66 28 20 76 3c 70 4d 65  .      if( v<pMe
23000 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20  m->u.i+1 ){.    
23010 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e      v = pMem->u.
23020 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20  i + 1;.      }. 
23030 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d       pMem->u.i =
23040 20 76 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66   v;.    }.#endif
23050 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 75 73 65  .    if( pC->use
23060 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20  RandomRowid ){. 
23070 20 20 20 20 20 2f 2a 20 49 4d 50 4c 45 4d 45 4e       /* IMPLEMEN
23080 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30 37 36  TATION-OF: R-076
23090 37 37 2d 34 31 38 38 31 20 49 66 20 74 68 65 20  77-41881 If the 
230a0 6c 61 72 67 65 73 74 20 52 4f 57 49 44 20 69 73  largest ROWID is
230b0 20 65 71 75 61 6c 20 74 6f 20 74 68 65 0a 20 20   equal to the.  
230c0 20 20 20 20 2a 2a 20 6c 61 72 67 65 73 74 20 70      ** largest p
230d0 6f 73 73 69 62 6c 65 20 69 6e 74 65 67 65 72 20  ossible integer 
230e0 28 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  (922337203685477
230f0 35 38 30 37 29 20 74 68 65 6e 20 74 68 65 20 64  5807) then the d
23100 61 74 61 62 61 73 65 0a 20 20 20 20 20 20 2a 2a  atabase.      **
23110 20 65 6e 67 69 6e 65 20 73 74 61 72 74 73 20 70   engine starts p
23120 69 63 6b 69 6e 67 20 70 6f 73 69 74 69 76 65 20  icking positive 
23130 63 61 6e 64 69 64 61 74 65 20 52 4f 57 49 44 73  candidate ROWIDs
23140 20 61 74 20 72 61 6e 64 6f 6d 20 75 6e 74 69 6c   at random until
23150 0a 20 20 20 20 20 20 2a 2a 20 69 74 20 66 69 6e  .      ** it fin
23160 64 73 20 6f 6e 65 20 74 68 61 74 20 69 73 20 6e  ds one that is n
23170 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73  ot previously us
23180 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  ed. */.      ass
23190 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20  ert( pOp->p3==0 
231a0 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e 6e 6f 74  );  /* We cannot
231b0 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d 20 72 6f   be in random ro
231c0 77 69 64 20 6d 6f 64 65 20 69 66 20 74 68 69 73  wid mode if this
231d0 20 69 73 0a 20 20 20 20 20 20 20 20 20 20 20 20   is.            
231e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
231f0 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e 43 52 45   ** an AUTOINCRE
23200 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a 2f 0a 20  MENT table. */. 
23210 20 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20 20       cnt = 0;.  
23220 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20      do{.        
23230 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d 6e 65  sqlite3_randomne
23240 73 73 28 73 69 7a 65 6f 66 28 76 29 2c 20 26 76  ss(sizeof(v), &v
23250 29 3b 0a 20 20 20 20 20 20 20 20 76 20 26 3d 20  );.        v &= 
23260 28 4d 41 58 5f 52 4f 57 49 44 3e 3e 31 29 3b 20  (MAX_ROWID>>1); 
23270 76 2b 2b 3b 20 20 2f 2a 20 45 6e 73 75 72 65 20  v++;  /* Ensure 
23280 74 68 61 74 20 76 20 69 73 20 67 72 65 61 74 65  that v is greate
23290 72 20 74 68 61 6e 20 7a 65 72 6f 20 2a 2f 0a 20  r than zero */. 
232a0 20 20 20 20 20 7d 77 68 69 6c 65 28 20 20 28 28       }while(  ((
232b0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
232c0 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
232d0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
232e0 30 2c 20 28 75 36 34 29 76 2c 0a 20 20 20 20 20  0, (u64)v,.     
232f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23310 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 26              0, &
23320 72 65 73 29 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b  res))==SQLITE_OK
23330 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26  ).            &&
23340 20 28 72 65 73 3d 3d 30 29 0a 20 20 20 20 20 20   (res==0).      
23350 20 20 20 20 20 20 26 26 20 28 2b 2b 63 6e 74 3c        && (++cnt<
23360 31 30 30 29 29 3b 0a 20 20 20 20 20 20 69 66 28  100));.      if(
23370 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
23380 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
23390 20 20 20 20 20 69 66 28 20 72 65 73 3d 3d 30 20       if( res==0 
233a0 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
233b0 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f  SQLITE_FULL;   /
233c0 2a 20 49 4d 50 3a 20 52 2d 33 38 32 31 39 2d 35  * IMP: R-38219-5
233d0 33 30 30 32 20 2a 2f 0a 20 20 20 20 20 20 20 20  3002 */.        
233e0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
233f0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
23400 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 76  .      assert( v
23410 3e 30 20 29 3b 20 20 2f 2a 20 45 56 3a 20 52 2d  >0 );  /* EV: R-
23420 34 30 38 31 32 2d 30 33 35 37 30 20 2a 2f 0a 20  40812-03570 */. 
23430 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64 65 66     }.    pC->def
23440 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
23450 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
23460 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
23470 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  LE;.  }.  pOut->
23480 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b  u.i = v;.  break
23490 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
234a0 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33 20  Insert P1 P2 P3 
234b0 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
234c0 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 20  s: intkey=r[P3] 
234d0 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  data=r[P2].**.**
234e0 20 57 72 69 74 65 20 61 6e 20 65 6e 74 72 79 20   Write an entry 
234f0 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 6f  into the table o
23500 66 20 63 75 72 73 6f 72 20 50 31 2e 20 20 41 20  f cursor P1.  A 
23510 6e 65 77 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20  new entry is.** 
23520 63 72 65 61 74 65 64 20 69 66 20 69 74 20 64 6f  created if it do
23530 65 73 6e 27 74 20 61 6c 72 65 61 64 79 20 65 78  esn't already ex
23540 69 73 74 20 6f 72 20 74 68 65 20 64 61 74 61 20  ist or the data 
23550 66 6f 72 20 61 6e 20 65 78 69 73 74 69 6e 67 0a  for an existing.
23560 2a 2a 20 65 6e 74 72 79 20 69 73 20 6f 76 65 72  ** entry is over
23570 77 72 69 74 74 65 6e 2e 20 20 54 68 65 20 64 61  written.  The da
23580 74 61 20 69 73 20 74 68 65 20 76 61 6c 75 65 20  ta is the value 
23590 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20  MEM_Blob stored 
235a0 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e  in register.** n
235b0 75 6d 62 65 72 20 50 32 2e 20 54 68 65 20 6b 65  umber P2. The ke
235c0 79 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  y is stored in r
235d0 65 67 69 73 74 65 72 20 50 33 2e 20 54 68 65 20  egister P3. The 
235e0 6b 65 79 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61  key must.** be a
235f0 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20   MEM_Int..**.** 
23600 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  If the OPFLAG_NC
23610 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 35  HANGE flag of P5
23620 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68   is set, then th
23630 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75  e row change cou
23640 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65  nt is.** increme
23650 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20  nted (otherwise 
23660 6e 6f 74 29 2e 20 20 49 66 20 74 68 65 20 4f 50  not).  If the OP
23670 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 66  FLAG_LASTROWID f
23680 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
23690 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64 20  ,.** then rowid 
236a0 69 73 20 73 74 6f 72 65 64 20 66 6f 72 20 73 75  is stored for su
236b0 62 73 65 71 75 65 6e 74 20 72 65 74 75 72 6e 20  bsequent return 
236c0 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  by the.** sqlite
236d0 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  3_last_insert_ro
236e0 77 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 28  wid() function (
236f0 6f 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20  otherwise it is 
23700 75 6e 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a  unmodified)..**.
23710 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
23720 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66  _USESEEKRESULT f
23730 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
23740 20 61 6e 64 20 69 66 20 74 68 65 20 72 65 73 75   and if the resu
23750 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 6c 61 73  lt of.** the las
23760 74 20 73 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e  t seek operation
23770 20 28 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f   (OP_NotExists o
23780 72 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64 29 20  r OP_SeekRowid) 
23790 77 61 73 20 61 20 73 75 63 63 65 73 73 2c 0a 2a  was a success,.*
237a0 2a 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f  * then this.** o
237b0 70 65 72 61 74 69 6f 6e 20 77 69 6c 6c 20 6e 6f  peration will no
237c0 74 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e  t attempt to fin
237d0 64 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74  d the appropriat
237e0 65 20 72 6f 77 20 62 65 66 6f 72 65 20 64 6f 69  e row before doi
237f0 6e 67 0a 2a 2a 20 74 68 65 20 69 6e 73 65 72 74  ng.** the insert
23800 20 62 75 74 20 77 69 6c 6c 20 69 6e 73 74 65 61   but will instea
23810 64 20 6f 76 65 72 77 72 69 74 65 20 74 68 65 20  d overwrite the 
23820 72 6f 77 20 74 68 61 74 20 74 68 65 20 63 75 72  row that the cur
23830 73 6f 72 20 69 73 0a 2a 2a 20 63 75 72 72 65 6e  sor is.** curren
23840 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e  tly pointing to.
23850 20 20 50 72 65 73 75 6d 61 62 6c 79 2c 20 74 68    Presumably, th
23860 65 20 70 72 69 6f 72 20 4f 50 5f 4e 6f 74 45 78  e prior OP_NotEx
23870 69 73 74 73 20 6f 72 0a 2a 2a 20 4f 50 5f 53 65  ists or.** OP_Se
23880 65 6b 52 6f 77 69 64 20 6f 70 63 6f 64 65 0a 2a  ekRowid opcode.*
23890 2a 20 68 61 73 20 61 6c 72 65 61 64 79 20 70 6f  * has already po
238a0 73 69 74 69 6f 6e 65 64 20 74 68 65 20 63 75 72  sitioned the cur
238b0 73 6f 72 20 63 6f 72 72 65 63 74 6c 79 2e 20 20  sor correctly.  
238c0 54 68 69 73 20 69 73 20 61 6e 20 6f 70 74 69 6d  This is an optim
238d0 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 68 61 74 20  ization.** that 
238e0 62 6f 6f 73 74 73 20 70 65 72 66 6f 72 6d 61 6e  boosts performan
238f0 63 65 20 62 79 20 61 76 6f 69 64 69 6e 67 20 72  ce by avoiding r
23900 65 64 75 6e 64 61 6e 74 20 73 65 65 6b 73 2e 0a  edundant seeks..
23910 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
23920 4c 41 47 5f 49 53 55 50 44 41 54 45 20 66 6c 61  LAG_ISUPDATE fla
23930 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74  g is set, then t
23940 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 70 61  his opcode is pa
23950 72 74 20 6f 66 20 61 6e 0a 2a 2a 20 55 50 44 41  rt of an.** UPDA
23960 54 45 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 4f  TE operation.  O
23970 74 68 65 72 77 69 73 65 20 28 69 66 20 74 68 65  therwise (if the
23980 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 29 20   flag is clear) 
23990 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  then this opcode
239a0 0a 2a 2a 20 69 73 20 70 61 72 74 20 6f 66 20 61  .** is part of a
239b0 6e 20 49 4e 53 45 52 54 20 6f 70 65 72 61 74 69  n INSERT operati
239c0 6f 6e 2e 20 20 54 68 65 20 64 69 66 66 65 72 65  on.  The differe
239d0 6e 63 65 20 69 73 20 6f 6e 6c 79 20 69 6d 70 6f  nce is only impo
239e0 72 74 61 6e 74 20 74 6f 0a 2a 2a 20 74 68 65 20  rtant to.** the 
239f0 75 70 64 61 74 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a  update hook..**.
23a00 2a 2a 20 50 61 72 61 6d 65 74 65 72 20 50 34 20  ** Parameter P4 
23a10 6d 61 79 20 70 6f 69 6e 74 20 74 6f 20 61 20 54  may point to a T
23a20 61 62 6c 65 20 73 74 72 75 63 74 75 72 65 2c 20  able structure, 
23a30 6f 72 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20  or may be NULL. 
23a40 49 66 20 69 74 20 69 73 20 0a 2a 2a 20 6e 6f 74  If it is .** not
23a50 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20   NULL, then the 
23a60 75 70 64 61 74 65 2d 68 6f 6f 6b 20 28 73 71 6c  update-hook (sql
23a70 69 74 65 33 2e 78 55 70 64 61 74 65 43 61 6c 6c  ite3.xUpdateCall
23a80 62 61 63 6b 29 20 69 73 20 69 6e 76 6f 6b 65 64  back) is invoked
23a90 20 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   .** following a
23aa0 20 73 75 63 63 65 73 73 66 75 6c 20 69 6e 73 65   successful inse
23ab0 72 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49  rt..**.** (WARNI
23ac0 4e 47 2f 54 4f 44 4f 3a 20 49 66 20 50 31 20 69  NG/TODO: If P1 i
23ad0 73 20 61 20 70 73 65 75 64 6f 2d 63 75 72 73 6f  s a pseudo-curso
23ae0 72 20 61 6e 64 20 50 32 20 69 73 20 64 79 6e 61  r and P2 is dyna
23af0 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63  mically.** alloc
23b00 61 74 65 64 2c 20 74 68 65 6e 20 6f 77 6e 65 72  ated, then owner
23b10 73 68 69 70 20 6f 66 20 50 32 20 69 73 20 74 72  ship of P2 is tr
23b20 61 6e 73 66 65 72 72 65 64 20 74 6f 20 74 68 65  ansferred to the
23b30 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 0a 2a   pseudo-cursor.*
23b40 2a 20 61 6e 64 20 72 65 67 69 73 74 65 72 20 50  * and register P
23b50 32 20 62 65 63 6f 6d 65 73 20 65 70 68 65 6d 65  2 becomes epheme
23b60 72 61 6c 2e 20 20 49 66 20 74 68 65 20 63 75 72  ral.  If the cur
23b70 73 6f 72 20 69 73 20 63 68 61 6e 67 65 64 2c 20  sor is changed, 
23b80 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20  the.** value of 
23b90 72 65 67 69 73 74 65 72 20 50 32 20 77 69 6c 6c  register P2 will
23ba0 20 74 68 65 6e 20 63 68 61 6e 67 65 2e 20 20 4d   then change.  M
23bb0 61 6b 65 20 73 75 72 65 20 74 68 69 73 20 64 6f  ake sure this do
23bc0 65 73 20 6e 6f 74 0a 2a 2a 20 63 61 75 73 65 20  es not.** cause 
23bd0 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a  any problems.).*
23be0 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
23bf0 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73  ction only works
23c00 20 6f 6e 20 74 61 62 6c 65 73 2e 20 20 54 68 65   on tables.  The
23c10 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74   equivalent inst
23c20 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69  ruction.** for i
23c30 6e 64 69 63 65 73 20 69 73 20 4f 50 5f 49 64 78  ndices is OP_Idx
23c40 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70  Insert..*/./* Op
23c50 63 6f 64 65 3a 20 49 6e 73 65 72 74 49 6e 74 20  code: InsertInt 
23c60 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
23c70 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 6e 74  * Synopsis:  int
23c80 6b 65 79 3d 50 33 20 64 61 74 61 3d 72 5b 50 32  key=P3 data=r[P2
23c90 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  ].**.** This wor
23ca0 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20  ks exactly like 
23cb0 4f 50 5f 49 6e 73 65 72 74 20 65 78 63 65 70 74  OP_Insert except
23cc0 20 74 68 61 74 20 74 68 65 20 6b 65 79 20 69 73   that the key is
23cd0 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20   the.** integer 
23ce0 76 61 6c 75 65 20 50 33 2c 20 6e 6f 74 20 74 68  value P3, not th
23cf0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 69  e value of the i
23d00 6e 74 65 67 65 72 20 73 74 6f 72 65 64 20 69 6e  nteger stored in
23d10 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f   register P3..*/
23d20 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 3a  .case OP_Insert:
23d30 20 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74   .case OP_Insert
23d40 49 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 44  Int: {.  Mem *pD
23d50 61 74 61 3b 20 20 20 20 20 20 20 2f 2a 20 4d 45  ata;       /* ME
23d60 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 64  M cell holding d
23d70 61 74 61 20 66 6f 72 20 74 68 65 20 72 65 63 6f  ata for the reco
23d80 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65  rd to be inserte
23d90 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b 65 79  d */.  Mem *pKey
23da0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20  ;        /* MEM 
23db0 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b 65 79  cell holding key
23dc0 20 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64    for the record
23dd0 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
23de0 20 2a 70 43 3b 20 20 20 2f 2a 20 43 75 72 73 6f   *pC;   /* Curso
23df0 72 20 74 6f 20 74 61 62 6c 65 20 69 6e 74 6f 20  r to table into 
23e00 77 68 69 63 68 20 69 6e 73 65 72 74 20 69 73 20  which insert is 
23e10 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74  written */.  int
23e20 20 73 65 65 6b 52 65 73 75 6c 74 3b 20 20 20 2f   seekResult;   /
23e30 2a 20 52 65 73 75 6c 74 20 6f 66 20 70 72 69 6f  * Result of prio
23e40 72 20 73 65 65 6b 20 6f 72 20 30 20 69 66 20 6e  r seek or 0 if n
23e50 6f 20 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20  o USESEEKRESULT 
23e60 66 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  flag */.  const 
23e70 63 68 61 72 20 2a 7a 44 62 3b 20 20 2f 2a 20 64  char *zDb;  /* d
23e80 61 74 61 62 61 73 65 20 6e 61 6d 65 20 2d 20 75  atabase name - u
23e90 73 65 64 20 62 79 20 74 68 65 20 75 70 64 61 74  sed by the updat
23ea0 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 54 61 62 6c  e hook */.  Tabl
23eb0 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a  e *pTab;      /*
23ec0 20 54 61 62 6c 65 20 73 74 72 75 63 74 75 72 65   Table structure
23ed0 20 2d 20 75 73 65 64 20 62 79 20 75 70 64 61 74   - used by updat
23ee0 65 20 61 6e 64 20 70 72 65 2d 75 70 64 61 74 65  e and pre-update
23ef0 20 68 6f 6f 6b 73 20 2a 2f 0a 20 20 69 6e 74 20   hooks */.  int 
23f00 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  op;           /*
23f10 20 4f 70 63 6f 64 65 20 66 6f 72 20 75 70 64 61   Opcode for upda
23f20 74 65 20 68 6f 6f 6b 3a 20 53 51 4c 49 54 45 5f  te hook: SQLITE_
23f30 55 50 44 41 54 45 20 6f 72 20 53 51 4c 49 54 45  UPDATE or SQLITE
23f40 5f 49 4e 53 45 52 54 20 2a 2f 0a 20 20 42 74 72  _INSERT */.  Btr
23f50 65 65 50 61 79 6c 6f 61 64 20 78 3b 20 20 20 2f  eePayload x;   /
23f60 2a 20 50 61 79 6c 6f 61 64 20 74 6f 20 62 65 20  * Payload to be 
23f70 69 6e 73 65 72 74 65 64 20 2a 2f 0a 0a 20 20 6f  inserted */..  o
23f80 70 20 3d 20 30 3b 0a 20 20 70 44 61 74 61 20 3d  p = 0;.  pData =
23f90 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
23fa0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
23fb0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
23fc0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
23fd0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
23fe0 6c 69 64 28 70 44 61 74 61 29 20 29 3b 0a 20 20  lid(pData) );.  
23ff0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
24000 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
24010 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
24020 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
24030 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
24040 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
24050 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20  ->uc.pCursor!=0 
24060 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
24070 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73  >isTable );.  as
24080 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
24090 65 3d 3d 50 34 5f 54 41 42 4c 45 20 7c 7c 20 70  e==P4_TABLE || p
240a0 4f 70 2d 3e 70 34 74 79 70 65 3e 3d 50 34 5f 53  Op->p4type>=P4_S
240b0 54 41 54 49 43 20 29 3b 0a 20 20 52 45 47 49 53  TATIC );.  REGIS
240c0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
240d0 32 2c 20 70 44 61 74 61 29 3b 0a 0a 20 20 69 66  2, pData);..  if
240e0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
240f0 50 5f 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20  P_Insert ){.    
24100 70 4b 65 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pKey = &aMem[pOp
24110 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73 65 72  ->p3];.    asser
24120 74 28 20 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26  t( pKey->flags &
24130 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20   MEM_Int );.    
24140 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
24150 69 64 28 70 4b 65 79 29 20 29 3b 0a 20 20 20 20  id(pKey) );.    
24160 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
24170 4f 70 2d 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 20  Op->p3, pKey);. 
24180 20 20 20 78 2e 6e 4b 65 79 20 3d 20 70 4b 65 79     x.nKey = pKey
24190 2d 3e 75 2e 69 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ->u.i;.  }else{.
241a0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
241b0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65  >opcode==OP_Inse
241c0 72 74 49 6e 74 20 29 3b 0a 20 20 20 20 78 2e 6e  rtInt );.    x.n
241d0 4b 65 79 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  Key = pOp->p3;. 
241e0 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   }..  if( pOp->p
241f0 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20  4type==P4_TABLE 
24200 26 26 20 48 41 53 5f 55 50 44 41 54 45 5f 48 4f  && HAS_UPDATE_HO
24210 4f 4b 28 64 62 29 20 29 7b 0a 20 20 20 20 61 73  OK(db) ){.    as
24220 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
24230 65 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  e );.    assert(
24240 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20   pC->iDb>=0 );. 
24250 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62     zDb = db->aDb
24260 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b  [pC->iDb].zName;
24270 0a 20 20 20 20 70 54 61 62 20 3d 20 70 4f 70 2d  .    pTab = pOp-
24280 3e 70 34 2e 70 54 61 62 3b 0a 20 20 20 20 61 73  >p4.pTab;.    as
24290 73 65 72 74 28 20 48 61 73 52 6f 77 69 64 28 70  sert( HasRowid(p
242a0 54 61 62 29 20 29 3b 0a 20 20 20 20 6f 70 20 3d  Tab) );.    op =
242b0 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46   ((pOp->p5 & OPF
242c0 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20  LAG_ISUPDATE) ? 
242d0 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20  SQLITE_UPDATE : 
242e0 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 29 3b 0a  SQLITE_INSERT);.
242f0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 54 61    }else{.    pTa
24300 62 20 3d 20 30 3b 20 2f 2a 20 4e 6f 74 20 6e 65  b = 0; /* Not ne
24310 65 64 65 64 2e 20 20 53 69 6c 65 6e 63 65 20 61  eded.  Silence a
24320 20 63 6f 6d 69 6c 65 72 20 77 61 72 6e 69 6e 67   comiler warning
24330 2e 20 2a 2f 0a 20 20 20 20 7a 44 62 20 3d 20 30  . */.    zDb = 0
24340 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64  ;  /* Not needed
24350 2e 20 20 53 69 6c 65 6e 63 65 20 61 20 63 6f 6d  .  Silence a com
24360 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a  piler warning. *
24370 2f 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51  /.  }..#ifdef SQ
24380 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
24390 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 2f 2a 20  PDATE_HOOK.  /* 
243a0 49 6e 76 6f 6b 65 20 74 68 65 20 70 72 65 2d 75  Invoke the pre-u
243b0 70 64 61 74 65 20 68 6f 6f 6b 2c 20 69 66 20 61  pdate hook, if a
243c0 6e 79 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e  ny */.  if( db->
243d0 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61  xPreUpdateCallba
243e0 63 6b 20 0a 20 20 20 26 26 20 70 4f 70 2d 3e 70  ck .   && pOp->p
243f0 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 0a  4type==P4_TABLE.
24400 20 20 20 26 26 20 21 28 70 4f 70 2d 3e 70 35 20     && !(pOp->p5 
24410 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  & OPFLAG_ISUPDAT
24420 45 29 0a 20 20 29 7b 0a 20 20 20 20 73 71 6c 69  E).  ){.    sqli
24430 74 65 33 56 64 62 65 50 72 65 55 70 64 61 74 65  te3VdbePreUpdate
24440 48 6f 6f 6b 28 70 2c 20 70 43 2c 20 53 51 4c 49  Hook(p, pC, SQLI
24450 54 45 5f 49 4e 53 45 52 54 2c 20 7a 44 62 2c 20  TE_INSERT, zDb, 
24460 70 54 61 62 2c 20 78 2e 6e 4b 65 79 2c 20 70 4f  pTab, x.nKey, pO
24470 70 2d 3e 70 32 29 3b 0a 20 20 7d 0a 23 65 6e 64  p->p2);.  }.#end
24480 69 66 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  if..  if( pOp->p
24490 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  5 & OPFLAG_NCHAN
244a0 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b  GE ) p->nChange+
244b0 2b 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  +;.  if( pOp->p5
244c0 20 26 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f   & OPFLAG_LASTRO
244d0 57 49 44 20 29 20 64 62 2d 3e 6c 61 73 74 52 6f  WID ) db->lastRo
244e0 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 20  wid = lastRowid 
244f0 3d 20 78 2e 6e 4b 65 79 3b 0a 20 20 69 66 28 20  = x.nKey;.  if( 
24500 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d  pData->flags & M
24510 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 78  EM_Null ){.    x
24520 2e 70 44 61 74 61 20 3d 20 30 3b 0a 20 20 20 20  .pData = 0;.    
24530 78 2e 6e 44 61 74 61 20 3d 20 30 3b 0a 20 20 7d  x.nData = 0;.  }
24540 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
24550 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26  ( pData->flags &
24560 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53   (MEM_Blob|MEM_S
24570 74 72 29 20 29 3b 0a 20 20 20 20 78 2e 70 44 61  tr) );.    x.pDa
24580 74 61 20 3d 20 70 44 61 74 61 2d 3e 7a 3b 0a 20  ta = pData->z;. 
24590 20 20 20 78 2e 6e 44 61 74 61 20 3d 20 70 44 61     x.nData = pDa
245a0 74 61 2d 3e 6e 3b 0a 20 20 7d 0a 20 20 73 65 65  ta->n;.  }.  see
245b0 6b 52 65 73 75 6c 74 20 3d 20 28 28 70 4f 70 2d  kResult = ((pOp-
245c0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45  >p5 & OPFLAG_USE
245d0 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43  SEEKRESULT) ? pC
245e0 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30  ->seekResult : 0
245f0 29 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e  );.  if( pData->
24600 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f  flags & MEM_Zero
24610 20 29 7b 0a 20 20 20 20 78 2e 6e 5a 65 72 6f 20   ){.    x.nZero 
24620 3d 20 70 44 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f  = pData->u.nZero
24630 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 78  ;.  }else{.    x
24640 2e 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a  .nZero = 0;.  }.
24650 20 20 78 2e 70 4b 65 79 20 3d 20 30 3b 0a 20 20    x.pKey = 0;.  
24660 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
24670 65 49 6e 73 65 72 74 28 70 43 2d 3e 75 63 2e 70  eInsert(pC->uc.p
24680 43 75 72 73 6f 72 2c 20 26 78 2c 0a 20 20 20 20  Cursor, &x,.    
24690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
246a0 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26        (pOp->p5 &
246b0 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 29 21   OPFLAG_APPEND)!
246c0 3d 30 2c 20 73 65 65 6b 52 65 73 75 6c 74 0a 20  =0, seekResult. 
246d0 20 29 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72   );.  pC->deferr
246e0 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
246f0 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
24700 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a  = CACHE_STALE;..
24710 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
24720 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72  update-hook if r
24730 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66  equired. */.  if
24740 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
24750 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
24760 20 20 69 66 28 20 64 62 2d 3e 78 55 70 64 61 74    if( db->xUpdat
24770 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 6f 70 20  eCallback && op 
24780 29 7b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61  ){.    db->xUpda
24790 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70  teCallback(db->p
247a0 55 70 64 61 74 65 41 72 67 2c 20 6f 70 2c 20 7a  UpdateArg, op, z
247b0 44 62 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c  Db, pTab->zName,
247c0 20 78 2e 6e 4b 65 79 29 3b 0a 20 20 7d 0a 20 20   x.nKey);.  }.  
247d0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
247e0 6f 64 65 3a 20 44 65 6c 65 74 65 20 50 31 20 50  ode: Delete P1 P
247f0 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
24800 20 44 65 6c 65 74 65 20 74 68 65 20 72 65 63 6f   Delete the reco
24810 72 64 20 61 74 20 77 68 69 63 68 20 74 68 65 20  rd at which the 
24820 50 31 20 63 75 72 73 6f 72 20 69 73 20 63 75 72  P1 cursor is cur
24830 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e  rently pointing.
24840 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
24850 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f  FLAG_SAVEPOSITIO
24860 4e 20 62 69 74 20 6f 66 20 74 68 65 20 50 35 20  N bit of the P5 
24870 70 61 72 61 6d 65 74 65 72 20 69 73 20 73 65 74  parameter is set
24880 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 75  , then.** the cu
24890 72 73 6f 72 20 77 69 6c 6c 20 62 65 20 6c 65 66  rsor will be lef
248a0 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 20 65  t pointing at  e
248b0 69 74 68 65 72 20 74 68 65 20 6e 65 78 74 20 6f  ither the next o
248c0 72 20 74 68 65 20 70 72 65 76 69 6f 75 73 0a 2a  r the previous.*
248d0 2a 20 72 65 63 6f 72 64 20 69 6e 20 74 68 65 20  * record in the 
248e0 74 61 62 6c 65 2e 20 49 66 20 69 74 20 69 73 20  table. If it is 
248f0 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
24900 20 74 68 65 20 6e 65 78 74 20 72 65 63 6f 72 64   the next record
24910 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 6e 65  , then.** the ne
24920 78 74 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74  xt Next instruct
24930 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61 20 6e 6f  ion will be a no
24940 2d 6f 70 2e 20 41 73 20 61 20 72 65 73 75 6c 74  -op. As a result
24950 2c 20 69 6e 20 74 68 69 73 20 63 61 73 65 0a 2a  , in this case.*
24960 2a 20 69 74 20 69 73 20 6f 6b 20 74 6f 20 64 65  * it is ok to de
24970 6c 65 74 65 20 61 20 72 65 63 6f 72 64 20 66 72  lete a record fr
24980 6f 6d 20 77 69 74 68 69 6e 20 61 20 4e 65 78 74  om within a Next
24990 20 6c 6f 6f 70 2e 20 49 66 20 0a 2a 2a 20 4f 50   loop. If .** OP
249a0 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f  FLAG_SAVEPOSITIO
249b0 4e 20 62 69 74 20 6f 66 20 50 35 20 69 73 20 63  N bit of P5 is c
249c0 6c 65 61 72 2c 20 74 68 65 6e 20 74 68 65 20 63  lear, then the c
249d0 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 0a 2a 2a  ursor will be.**
249e0 20 6c 65 66 74 20 69 6e 20 61 6e 20 75 6e 64 65   left in an unde
249f0 66 69 6e 65 64 20 73 74 61 74 65 2e 0a 2a 2a 0a  fined state..**.
24a00 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
24a10 5f 41 55 58 44 45 4c 45 54 45 20 62 69 74 20 69  _AUXDELETE bit i
24a20 73 20 73 65 74 20 6f 6e 20 50 35 2c 20 74 68 61  s set on P5, tha
24a30 74 20 69 6e 64 69 63 61 74 65 73 20 74 68 61 74  t indicates that
24a40 20 74 68 69 73 0a 2a 2a 20 64 65 6c 65 74 65 20   this.** delete 
24a50 6f 6e 65 20 6f 66 20 73 65 76 65 72 61 6c 20 61  one of several a
24a60 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 64  ssociated with d
24a70 65 6c 65 74 69 6e 67 20 61 20 74 61 62 6c 65 20  eleting a table 
24a80 72 6f 77 20 61 6e 64 20 61 6c 6c 20 69 74 73 0a  row and all its.
24a90 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20 69 6e  ** associated in
24aa0 64 65 78 20 65 6e 74 72 69 65 73 2e 20 20 45 78  dex entries.  Ex
24ab0 61 63 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68 6f  actly one of tho
24ac0 73 65 20 64 65 6c 65 74 65 73 20 69 73 20 74 68  se deletes is th
24ad0 65 20 22 70 72 69 6d 61 72 79 22 0a 2a 2a 20 64  e "primary".** d
24ae0 65 6c 65 74 65 2e 20 20 54 68 65 20 6f 74 68 65  elete.  The othe
24af0 72 73 20 61 72 65 20 61 6c 6c 20 6f 6e 20 4f 50  rs are all on OP
24b00 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 20 63  FLAG_FORDELETE c
24b10 75 72 73 6f 72 73 20 6f 72 20 65 6c 73 65 20 61  ursors or else a
24b20 72 65 0a 2a 2a 20 6d 61 72 6b 65 64 20 77 69 74  re.** marked wit
24b30 68 20 74 68 65 20 41 55 58 44 45 4c 45 54 45 20  h the AUXDELETE 
24b40 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  flag..**.** If t
24b50 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47  he OPFLAG_NCHANG
24b60 45 20 66 6c 61 67 20 6f 66 20 50 32 20 28 4e 42  E flag of P2 (NB
24b70 3a 20 50 32 20 6e 6f 74 20 50 35 29 20 69 73 20  : P2 not P5) is 
24b80 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f  set, then the ro
24b90 77 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e  w.** change coun
24ba0 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
24bb0 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29   (otherwise not)
24bc0 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73 74 20  ..**.** P1 must 
24bd0 6e 6f 74 20 62 65 20 70 73 65 75 64 6f 2d 74 61  not be pseudo-ta
24be0 62 6c 65 2e 20 20 49 74 20 68 61 73 20 74 6f 20  ble.  It has to 
24bf0 62 65 20 61 20 72 65 61 6c 20 74 61 62 6c 65 20  be a real table 
24c00 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65  with.** multiple
24c10 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   rows..**.** If 
24c20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74  P4 is not NULL t
24c30 68 65 6e 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  hen it points to
24c40 20 61 20 54 61 62 6c 65 20 73 74 72 75 74 75 72   a Table strutur
24c50 65 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  e. In this case 
24c60 65 69 74 68 65 72 20 0a 2a 2a 20 74 68 65 20 75  either .** the u
24c70 70 64 61 74 65 20 6f 72 20 70 72 65 2d 75 70 64  pdate or pre-upd
24c80 61 74 65 20 68 6f 6f 6b 2c 20 6f 72 20 62 6f 74  ate hook, or bot
24c90 68 2c 20 6d 61 79 20 62 65 20 69 6e 76 6f 6b 65  h, may be invoke
24ca0 64 2e 20 54 68 65 20 50 31 20 63 75 72 73 6f 72  d. The P1 cursor
24cb0 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20 62 65   must.** have be
24cc0 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64 20 75 73  en positioned us
24cd0 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20  ing OP_NotFound 
24ce0 70 72 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69 6e  prior to invokin
24cf0 67 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 6e  g this opcode in
24d00 20 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 2e 20   .** this case. 
24d10 53 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 69 66  Specifically, if
24d20 20 6f 6e 65 20 69 73 20 63 6f 6e 66 69 67 75 72   one is configur
24d30 65 64 2c 20 74 68 65 20 70 72 65 2d 75 70 64 61  ed, the pre-upda
24d40 74 65 20 68 6f 6f 6b 20 69 73 20 0a 2a 2a 20 69  te hook is .** i
24d50 6e 76 6f 6b 65 64 20 69 66 20 50 34 20 69 73 20  nvoked if P4 is 
24d60 6e 6f 74 20 4e 55 4c 4c 2e 20 54 68 65 20 75 70  not NULL. The up
24d70 64 61 74 65 2d 68 6f 6f 6b 20 69 73 20 69 6e 76  date-hook is inv
24d80 6f 6b 65 64 20 69 66 20 6f 6e 65 20 69 73 20 63  oked if one is c
24d90 6f 6e 66 69 67 75 72 65 64 2c 20 0a 2a 2a 20 50  onfigured, .** P
24da0 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 61  4 is not NULL, a
24db0 6e 64 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  nd the OPFLAG_NC
24dc0 48 41 4e 47 45 20 66 6c 61 67 20 69 73 20 73 65  HANGE flag is se
24dd0 74 20 69 6e 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49  t in P2..**.** I
24de0 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53 55  f the OPFLAG_ISU
24df0 50 44 41 54 45 20 66 6c 61 67 20 69 73 20 73 65  PDATE flag is se
24e00 74 20 69 6e 20 50 32 2c 20 74 68 65 6e 20 50 33  t in P2, then P3
24e10 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64   contains the ad
24e20 64 72 65 73 73 0a 2a 2a 20 6f 66 20 74 68 65 20  dress.** of the 
24e30 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74  memory cell that
24e40 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 76 61   contains the va
24e50 6c 75 65 20 74 68 61 74 20 74 68 65 20 72 6f 77  lue that the row
24e60 69 64 20 6f 66 20 74 68 65 20 72 6f 77 20 77 69  id of the row wi
24e70 6c 6c 0a 2a 2a 20 62 65 20 73 65 74 20 74 6f 20  ll.** be set to 
24e80 62 79 20 74 68 65 20 75 70 64 61 74 65 2e 0a 2a  by the update..*
24e90 2f 0a 63 61 73 65 20 4f 50 5f 44 65 6c 65 74 65  /.case OP_Delete
24ea0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
24eb0 20 2a 70 43 3b 0a 20 20 63 6f 6e 73 74 20 63 68   *pC;.  const ch
24ec0 61 72 20 2a 7a 44 62 3b 0a 20 20 54 61 62 6c 65  ar *zDb;.  Table
24ed0 20 2a 70 54 61 62 3b 0a 20 20 69 6e 74 20 6f 70   *pTab;.  int op
24ee0 66 6c 61 67 73 3b 0a 0a 20 20 6f 70 66 6c 61 67  flags;..  opflag
24ef0 73 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  s = pOp->p2;.  a
24f00 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
24f10 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
24f20 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
24f30 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
24f40 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
24f50 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
24f60 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
24f70 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
24f80 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75  .  assert( pC->u
24f90 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  c.pCursor!=0 );.
24fa0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
24fb0 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
24fc0 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
24fd0 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f  E_DEBUG.  if( pO
24fe0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41  p->p4type==P4_TA
24ff0 42 4c 45 20 26 26 20 48 61 73 52 6f 77 69 64 28  BLE && HasRowid(
25000 70 4f 70 2d 3e 70 34 2e 70 54 61 62 29 20 26 26  pOp->p4.pTab) &&
25010 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 7b 0a 20   pOp->p5==0 ){. 
25020 20 20 20 2f 2a 20 49 66 20 70 35 20 69 73 20 7a     /* If p5 is z
25030 65 72 6f 2c 20 74 68 65 20 73 65 65 6b 20 6f 70  ero, the seek op
25040 65 72 61 74 69 6f 6e 20 74 68 61 74 20 70 6f 73  eration that pos
25050 69 74 69 6f 6e 65 64 20 74 68 65 20 63 75 72 73  itioned the curs
25060 6f 72 20 70 72 69 6f 72 20 74 6f 0a 20 20 20 20  or prior to.    
25070 2a 2a 20 4f 50 5f 44 65 6c 65 74 65 20 77 69 6c  ** OP_Delete wil
25080 6c 20 68 61 76 65 20 61 6c 73 6f 20 73 65 74 20  l have also set 
25090 74 68 65 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61  the pC->movetoTa
250a0 72 67 65 74 20 66 69 65 6c 64 20 74 6f 20 74 68  rget field to th
250b0 65 20 72 6f 77 69 64 20 6f 66 0a 20 20 20 20 2a  e rowid of.    *
250c0 2a 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 69  * the row that i
250d0 73 20 62 65 69 6e 67 20 64 65 6c 65 74 65 64 20  s being deleted 
250e0 2a 2f 0a 20 20 20 20 69 36 34 20 69 4b 65 79 20  */.    i64 iKey 
250f0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
25100 74 65 67 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e  tegerKey(pC->uc.
25110 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 61 73  pCursor);.    as
25120 73 65 72 74 28 20 70 43 2d 3e 6d 6f 76 65 74 6f  sert( pC->moveto
25130 54 61 72 67 65 74 3d 3d 69 4b 65 79 20 29 3b 0a  Target==iKey );.
25140 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a    }.#endif..  /*
25150 20 49 66 20 74 68 65 20 75 70 64 61 74 65 2d 68   If the update-h
25160 6f 6f 6b 20 6f 72 20 70 72 65 2d 75 70 64 61 74  ook or pre-updat
25170 65 2d 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69  e-hook will be i
25180 6e 76 6f 6b 65 64 2c 20 73 65 74 20 7a 44 62 20  nvoked, set zDb 
25190 74 6f 0a 20 20 2a 2a 20 74 68 65 20 6e 61 6d 65  to.  ** the name
251a0 20 6f 66 20 74 68 65 20 64 62 20 74 6f 20 70 61   of the db to pa
251b0 73 73 20 61 73 20 74 6f 20 69 74 2e 20 41 6c 73  ss as to it. Als
251c0 6f 20 73 65 74 20 6c 6f 63 61 6c 20 70 54 61 62  o set local pTab
251d0 20 74 6f 20 61 20 63 6f 70 79 0a 20 20 2a 2a 20   to a copy.  ** 
251e0 6f 66 20 70 34 2e 70 54 61 62 2e 20 46 69 6e 61  of p4.pTab. Fina
251f0 6c 6c 79 2c 20 69 66 20 70 35 20 69 73 20 74 72  lly, if p5 is tr
25200 75 65 2c 20 69 6e 64 69 63 61 74 69 6e 67 20 74  ue, indicating t
25210 68 61 74 20 74 68 69 73 20 63 75 72 73 6f 72 20  hat this cursor 
25220 77 61 73 0a 20 20 2a 2a 20 6c 61 73 74 20 6d 6f  was.  ** last mo
25230 76 65 64 20 77 69 74 68 20 4f 50 5f 4e 65 78 74  ved with OP_Next
25240 20 6f 72 20 4f 50 5f 50 72 65 76 2c 20 6e 6f 74   or OP_Prev, not
25250 20 53 65 65 6b 20 6f 72 20 4e 6f 74 46 6f 75 6e   Seek or NotFoun
25260 64 2c 20 73 65 74 20 0a 20 20 2a 2a 20 56 64 62  d, set .  ** Vdb
25270 65 43 75 72 73 6f 72 2e 6d 6f 76 65 74 6f 54 61  eCursor.movetoTa
25280 72 67 65 74 20 74 6f 20 74 68 65 20 63 75 72 72  rget to the curr
25290 65 6e 74 20 72 6f 77 69 64 2e 20 20 2a 2f 0a 20  ent rowid.  */. 
252a0 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
252b0 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26 20 48 41  ==P4_TABLE && HA
252c0 53 5f 55 50 44 41 54 45 5f 48 4f 4f 4b 28 64 62  S_UPDATE_HOOK(db
252d0 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ) ){.    assert(
252e0 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20   pC->iDb>=0 );. 
252f0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
25300 70 34 2e 70 54 61 62 21 3d 30 20 29 3b 0a 20 20  p4.pTab!=0 );.  
25310 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b    zDb = db->aDb[
25320 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a  pC->iDb].zName;.
25330 20 20 20 20 70 54 61 62 20 3d 20 70 4f 70 2d 3e      pTab = pOp->
25340 70 34 2e 70 54 61 62 3b 0a 20 20 20 20 69 66 28  p4.pTab;.    if(
25350 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c   (pOp->p5 & OPFL
25360 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 29  AG_SAVEPOSITION)
25370 21 3d 30 20 26 26 20 70 43 2d 3e 69 73 54 61 62  !=0 && pC->isTab
25380 6c 65 20 29 7b 0a 20 20 20 20 20 20 70 43 2d 3e  le ){.      pC->
25390 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 73  movetoTarget = s
253a0 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67  qlite3BtreeInteg
253b0 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70 43 75  erKey(pC->uc.pCu
253c0 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  rsor);.    }.  }
253d0 65 6c 73 65 7b 0a 20 20 20 20 7a 44 62 20 3d 20  else{.    zDb = 
253e0 30 3b 20 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64  0;   /* Not need
253f0 65 64 2e 20 20 53 69 6c 65 6e 63 65 20 61 20 63  ed.  Silence a c
25400 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e  ompiler warning.
25410 20 2a 2f 0a 20 20 20 20 70 54 61 62 20 3d 20 30   */.    pTab = 0
25420 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64  ;  /* Not needed
25430 2e 20 20 53 69 6c 65 6e 63 65 20 61 20 63 6f 6d  .  Silence a com
25440 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a  piler warning. *
25450 2f 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51  /.  }..#ifdef SQ
25460 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
25470 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 2f 2a 20  PDATE_HOOK.  /* 
25480 49 6e 76 6f 6b 65 20 74 68 65 20 70 72 65 2d 75  Invoke the pre-u
25490 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65  pdate-hook if re
254a0 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28  quired. */.  if(
254b0 20 64 62 2d 3e 78 50 72 65 55 70 64 61 74 65 43   db->xPreUpdateC
254c0 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e  allback && pOp->
254d0 70 34 2e 70 54 61 62 20 26 26 20 48 61 73 52 6f  p4.pTab && HasRo
254e0 77 69 64 28 70 54 61 62 29 20 29 7b 0a 20 20 20  wid(pTab) ){.   
254f0 20 61 73 73 65 72 74 28 20 21 28 6f 70 66 6c 61   assert( !(opfla
25500 67 73 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50  gs & OPFLAG_ISUP
25510 44 41 54 45 29 20 7c 7c 20 28 61 4d 65 6d 5b 70  DATE) || (aMem[p
25520 4f 70 2d 3e 70 33 5d 2e 66 6c 61 67 73 20 26 20  Op->p3].flags & 
25530 4d 45 4d 5f 49 6e 74 29 20 29 3b 0a 20 20 20 20  MEM_Int) );.    
25540 73 71 6c 69 74 65 33 56 64 62 65 50 72 65 55 70  sqlite3VdbePreUp
25550 64 61 74 65 48 6f 6f 6b 28 70 2c 20 70 43 2c 0a  dateHook(p, pC,.
25560 20 20 20 20 20 20 20 20 28 6f 70 66 6c 61 67 73          (opflags
25570 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41   & OPFLAG_ISUPDA
25580 54 45 29 20 3f 20 53 51 4c 49 54 45 5f 55 50 44  TE) ? SQLITE_UPD
25590 41 54 45 20 3a 20 53 51 4c 49 54 45 5f 44 45 4c  ATE : SQLITE_DEL
255a0 45 54 45 2c 20 0a 20 20 20 20 20 20 20 20 7a 44  ETE, .        zD
255b0 62 2c 20 70 54 61 62 2c 20 70 43 2d 3e 6d 6f 76  b, pTab, pC->mov
255c0 65 74 6f 54 61 72 67 65 74 2c 0a 20 20 20 20 20  etoTarget,.     
255d0 20 20 20 70 4f 70 2d 3e 70 33 0a 20 20 20 20 29     pOp->p3.    )
255e0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 6f 70 66 6c  ;.  }.  if( opfl
255f0 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 49 53 4e  ags & OPFLAG_ISN
25600 4f 4f 50 20 29 20 62 72 65 61 6b 3b 0a 23 65 6e  OOP ) break;.#en
25610 64 69 66 0a 20 0a 20 20 2f 2a 20 4f 6e 6c 79 20  dif. .  /* Only 
25620 66 6c 61 67 73 20 74 68 61 74 20 63 61 6e 20 62  flags that can b
25630 65 20 73 65 74 20 61 72 65 20 53 41 56 45 50 4f  e set are SAVEPO
25640 49 53 54 49 4f 4e 20 61 6e 64 20 41 55 58 44 45  ISTION and AUXDE
25650 4c 45 54 45 20 2a 2f 20 0a 20 20 61 73 73 65 72  LETE */ .  asser
25660 74 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 7e 28  t( (pOp->p5 & ~(
25670 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54  OPFLAG_SAVEPOSIT
25680 49 4f 4e 7c 4f 50 46 4c 41 47 5f 41 55 58 44 45  ION|OPFLAG_AUXDE
25690 4c 45 54 45 29 29 3d 3d 30 20 29 3b 0a 20 20 61  LETE))==0 );.  a
256a0 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 53 41  ssert( OPFLAG_SA
256b0 56 45 50 4f 53 49 54 49 4f 4e 3d 3d 42 54 52 45  VEPOSITION==BTRE
256c0 45 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 29  E_SAVEPOSITION )
256d0 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c  ;.  assert( OPFL
256e0 41 47 5f 41 55 58 44 45 4c 45 54 45 3d 3d 42 54  AG_AUXDELETE==BT
256f0 52 45 45 5f 41 55 58 44 45 4c 45 54 45 20 29 3b  REE_AUXDELETE );
25700 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
25710 44 45 42 55 47 0a 20 20 69 66 28 20 70 2d 3e 70  DEBUG.  if( p->p
25720 46 72 61 6d 65 3d 3d 30 20 29 7b 0a 20 20 20 20  Frame==0 ){.    
25730 69 66 28 20 70 43 2d 3e 69 73 45 70 68 65 6d 65  if( pC->isEpheme
25740 72 61 6c 3d 3d 30 0a 20 20 20 20 20 20 20 20 26  ral==0.        &
25750 26 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  & (pOp->p5 & OPF
25760 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 29 3d 3d  LAG_AUXDELETE)==
25770 30 0a 20 20 20 20 20 20 20 20 26 26 20 28 70 43  0.        && (pC
25780 2d 3e 77 72 46 6c 61 67 20 26 20 4f 50 46 4c 41  ->wrFlag & OPFLA
25790 47 5f 46 4f 52 44 45 4c 45 54 45 29 3d 3d 30 0a  G_FORDELETE)==0.
257a0 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 6e        ){.      n
257b0 45 78 74 72 61 44 65 6c 65 74 65 2b 2b 3b 0a 20  ExtraDelete++;. 
257c0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 4f 70     }.    if( pOp
257d0 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f 4e 43  ->p2 & OPFLAG_NC
257e0 48 41 4e 47 45 20 29 7b 0a 20 20 20 20 20 20 6e  HANGE ){.      n
257f0 45 78 74 72 61 44 65 6c 65 74 65 2d 2d 3b 0a 20  ExtraDelete--;. 
25800 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a     }.  }.#endif.
25810 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
25820 74 72 65 65 44 65 6c 65 74 65 28 70 43 2d 3e 75  treeDelete(pC->u
25830 63 2e 70 43 75 72 73 6f 72 2c 20 70 4f 70 2d 3e  c.pCursor, pOp->
25840 70 35 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  p5);.  pC->cache
25850 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
25860 54 41 4c 45 3b 0a 20 20 69 66 28 20 72 63 20 29  TALE;.  if( rc )
25870 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
25880 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 2f 2a 20  to_error;..  /* 
25890 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74  Invoke the updat
258a0 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72  e-hook if requir
258b0 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 6f 70 66  ed. */.  if( opf
258c0 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 4e 43  lags & OPFLAG_NC
258d0 48 41 4e 47 45 20 29 7b 0a 20 20 20 20 70 2d 3e  HANGE ){.    p->
258e0 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 20 20 69  nChange++;.    i
258f0 66 28 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61  f( db->xUpdateCa
25900 6c 6c 62 61 63 6b 20 26 26 20 48 61 73 52 6f 77  llback && HasRow
25910 69 64 28 70 54 61 62 29 20 29 7b 0a 20 20 20 20  id(pTab) ){.    
25920 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c    db->xUpdateCal
25930 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74  lback(db->pUpdat
25940 65 41 72 67 2c 20 53 51 4c 49 54 45 5f 44 45 4c  eArg, SQLITE_DEL
25950 45 54 45 2c 20 7a 44 62 2c 20 70 54 61 62 2d 3e  ETE, zDb, pTab->
25960 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20  zName,.         
25970 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65   pC->movetoTarge
25980 74 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  t);.      assert
25990 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a  ( pC->iDb>=0 );.
259a0 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 62 72 65      }.  }..  bre
259b0 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ak;.}./* Opcode:
259c0 20 52 65 73 65 74 43 6f 75 6e 74 20 2a 20 2a 20   ResetCount * * 
259d0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
259e0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 68 61  value of the cha
259f0 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20 63  nge counter is c
25a00 6f 70 69 65 64 20 74 6f 20 74 68 65 20 64 61 74  opied to the dat
25a10 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20  abase handle.** 
25a20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 28  change counter (
25a30 72 65 74 75 72 6e 65 64 20 62 79 20 73 75 62 73  returned by subs
25a40 65 71 75 65 6e 74 20 63 61 6c 6c 73 20 74 6f 20  equent calls to 
25a50 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28  sqlite3_changes(
25a60 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74 68 65 20  ))..** Then the 
25a70 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20 63 68 61  VMs internal cha
25a80 6e 67 65 20 63 6f 75 6e 74 65 72 20 72 65 73 65  nge counter rese
25a90 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54 68 69 73  ts to 0..** This
25aa0 20 69 73 20 75 73 65 64 20 62 79 20 74 72 69 67   is used by trig
25ab0 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f  ger programs..*/
25ac0 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74 43 6f  .case OP_ResetCo
25ad0 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  unt: {.  sqlite3
25ae0 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 64  VdbeSetChanges(d
25af0 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a  b, p->nChange);.
25b00 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30    p->nChange = 0
25b10 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
25b20 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 43   Opcode: SorterC
25b30 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50 33 20  ompare P1 P2 P3 
25b40 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P4.** Synopsis: 
25b50 20 69 66 20 6b 65 79 28 50 31 29 21 3d 74 72 69   if key(P1)!=tri
25b60 6d 28 72 5b 50 33 5d 2c 50 34 29 20 67 6f 74 6f  m(r[P3],P4) goto
25b70 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20   P2.**.** P1 is 
25b80 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 2e  a sorter cursor.
25b90 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
25ba0 6e 20 63 6f 6d 70 61 72 65 73 20 61 20 70 72 65  n compares a pre
25bb0 66 69 78 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65  fix of the.** re
25bc0 63 6f 72 64 20 62 6c 6f 62 20 69 6e 20 72 65 67  cord blob in reg
25bd0 69 73 74 65 72 20 50 33 20 61 67 61 69 6e 73 74  ister P3 against
25be0 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65   a prefix of the
25bf0 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20   entry that .** 
25c00 74 68 65 20 73 6f 72 74 65 72 20 63 75 72 73 6f  the sorter curso
25c10 72 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  r currently poin
25c20 74 73 20 74 6f 2e 20 20 4f 6e 6c 79 20 74 68 65  ts to.  Only the
25c30 20 66 69 72 73 74 20 50 34 20 66 69 65 6c 64 73   first P4 fields
25c40 0a 2a 2a 20 6f 66 20 72 5b 50 33 5d 20 61 6e 64  .** of r[P3] and
25c50 20 74 68 65 20 73 6f 72 74 65 72 20 72 65 63 6f   the sorter reco
25c60 72 64 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e  rd are compared.
25c70 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  .**.** If either
25c80 20 50 33 20 6f 72 20 74 68 65 20 73 6f 72 74 65   P3 or the sorte
25c90 72 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e 55 4c  r contains a NUL
25ca0 4c 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65 69  L in one of thei
25cb0 72 20 73 69 67 6e 69 66 69 63 61 6e 74 0a 2a 2a  r significant.**
25cc0 20 66 69 65 6c 64 73 20 28 6e 6f 74 20 63 6f 75   fields (not cou
25cd0 6e 74 69 6e 67 20 74 68 65 20 50 34 20 66 69 65  nting the P4 fie
25ce0 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 20 77  lds at the end w
25cf0 68 69 63 68 20 61 72 65 20 69 67 6e 6f 72 65 64  hich are ignored
25d00 29 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f  ) then.** the co
25d10 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 73 73 75  mparison is assu
25d20 6d 65 64 20 74 6f 20 62 65 20 65 71 75 61 6c 2e  med to be equal.
25d30 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68 72 6f  .**.** Fall thro
25d40 75 67 68 20 74 6f 20 6e 65 78 74 20 69 6e 73 74  ugh to next inst
25d50 72 75 63 74 69 6f 6e 20 69 66 20 74 68 65 20 74  ruction if the t
25d60 77 6f 20 72 65 63 6f 72 64 73 20 63 6f 6d 70 61  wo records compa
25d70 72 65 20 65 71 75 61 6c 20 74 6f 0a 2a 2a 20 65  re equal to.** e
25d80 61 63 68 20 6f 74 68 65 72 2e 20 20 4a 75 6d 70  ach other.  Jump
25d90 20 74 6f 20 50 32 20 69 66 20 74 68 65 79 20 61   to P2 if they a
25da0 72 65 20 64 69 66 66 65 72 65 6e 74 2e 0a 2a 2f  re different..*/
25db0 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 43  .case OP_SorterC
25dc0 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 56 64 62 65  ompare: {.  Vdbe
25dd0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e  Cursor *pC;.  in
25de0 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6e 4b 65  t res;.  int nKe
25df0 79 43 6f 6c 3b 0a 0a 20 20 70 43 20 3d 20 70 2d  yCol;..  pC = p-
25e00 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
25e10 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72  .  assert( isSor
25e20 74 65 72 28 70 43 29 20 29 3b 0a 20 20 61 73 73  ter(pC) );.  ass
25e30 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
25e40 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
25e50 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
25e60 2d 3e 70 33 5d 3b 0a 20 20 6e 4b 65 79 43 6f 6c  ->p3];.  nKeyCol
25e70 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20   = pOp->p4.i;.  
25e80 72 65 73 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20  res = 0;.  rc = 
25e90 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
25ea0 72 43 6f 6d 70 61 72 65 28 70 43 2c 20 70 49 6e  rCompare(pC, pIn
25eb0 33 2c 20 6e 4b 65 79 43 6f 6c 2c 20 26 72 65 73  3, nKeyCol, &res
25ec0 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
25ed0 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a  aken(res!=0,2);.
25ee0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
25ef0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
25f00 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 20 29 20  or;.  if( res ) 
25f10 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
25f20 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f 2a  .  break;.};../*
25f30 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 44   Opcode: SorterD
25f40 61 74 61 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ata P1 P2 P3 * *
25f50 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
25f60 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57  P2]=data.**.** W
25f70 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74  rite into regist
25f80 65 72 20 50 32 20 74 68 65 20 63 75 72 72 65 6e  er P2 the curren
25f90 74 20 73 6f 72 74 65 72 20 64 61 74 61 20 66 6f  t sorter data fo
25fa0 72 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 20  r sorter cursor 
25fb0 50 31 2e 0a 2a 2a 20 54 68 65 6e 20 63 6c 65 61  P1..** Then clea
25fc0 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 68 65 61  r the column hea
25fd0 64 65 72 20 63 61 63 68 65 20 6f 6e 20 63 75 72  der cache on cur
25fe0 73 6f 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68  sor P3..**.** Th
25ff0 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f 72  is opcode is nor
26000 6d 61 6c 6c 79 20 75 73 65 20 74 6f 20 6d 6f 76  mally use to mov
26010 65 20 61 20 72 65 63 6f 72 64 20 6f 75 74 20 6f  e a record out o
26020 66 20 74 68 65 20 73 6f 72 74 65 72 20 61 6e 64  f the sorter and
26030 20 69 6e 74 6f 0a 2a 2a 20 61 20 72 65 67 69 73   into.** a regis
26040 74 65 72 20 74 68 61 74 20 69 73 20 74 68 65 20  ter that is the 
26050 73 6f 75 72 63 65 20 66 6f 72 20 61 20 70 73 65  source for a pse
26060 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72  udo-table cursor
26070 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 0a 2a   created using.*
26080 2a 20 4f 70 65 6e 50 73 65 75 64 6f 2e 20 20 54  * OpenPseudo.  T
26090 68 61 74 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  hat pseudo-table
260a0 20 63 75 72 73 6f 72 20 69 73 20 74 68 65 20 6f   cursor is the o
260b0 6e 65 20 74 68 61 74 20 69 73 20 69 64 65 6e 74  ne that is ident
260c0 69 66 69 65 64 20 62 79 0a 2a 2a 20 70 61 72 61  ified by.** para
260d0 6d 65 74 65 72 20 50 33 2e 20 20 43 6c 65 61 72  meter P3.  Clear
260e0 69 6e 67 20 74 68 65 20 50 33 20 63 6f 6c 75 6d  ing the P3 colum
260f0 6e 20 63 61 63 68 65 20 61 73 20 70 61 72 74 20  n cache as part 
26100 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20 73  of this opcode s
26110 61 76 65 73 0a 2a 2a 20 75 73 20 66 72 6f 6d 20  aves.** us from 
26120 68 61 76 69 6e 67 20 74 6f 20 69 73 73 75 65 20  having to issue 
26130 61 20 73 65 70 61 72 61 74 65 20 4e 75 6c 6c 52  a separate NullR
26140 6f 77 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  ow instruction t
26150 6f 20 63 6c 65 61 72 20 74 68 61 74 20 63 61 63  o clear that cac
26160 68 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  he..*/.case OP_S
26170 6f 72 74 65 72 44 61 74 61 3a 20 7b 0a 20 20 56  orterData: {.  V
26180 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a  dbeCursor *pC;..
26190 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
261a0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43 20 3d 20  Op->p2];.  pC = 
261b0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
261c0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  ];.  assert( isS
261d0 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 72  orter(pC) );.  r
261e0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
261f0 6f 72 74 65 72 52 6f 77 6b 65 79 28 70 43 2c 20  orterRowkey(pC, 
26200 70 4f 75 74 29 3b 0a 20 20 61 73 73 65 72 74 28  pOut);.  assert(
26210 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc!=SQLITE_OK |
26220 7c 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26  | (pOut->flags &
26230 20 4d 45 4d 5f 42 6c 6f 62 29 20 29 3b 0a 20 20   MEM_Blob) );.  
26240 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
26250 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
26260 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66  >nCursor );.  if
26270 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
26280 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
26290 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e    p->apCsr[pOp->
262a0 70 33 5d 2d 3e 63 61 63 68 65 53 74 61 74 75 73  p3]->cacheStatus
262b0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
262c0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
262d0 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61 20 50  pcode: RowData P
262e0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
262f0 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61  nopsis: r[P2]=da
26300 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69  ta.**.** Write i
26310 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20  nto register P2 
26320 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77  the complete row
26330 20 64 61 74 61 20 66 6f 72 20 63 75 72 73 6f 72   data for cursor
26340 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73   P1..** There is
26350 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69   no interpretati
26360 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20  on of the data. 
26370 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73 74 20   .** It is just 
26380 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20  copied onto the 
26390 50 32 20 72 65 67 69 73 74 65 72 20 65 78 61 63  P2 register exac
263a0 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73  tly as .** it is
263b0 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61   found in the da
263c0 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a  tabase file..**.
263d0 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63 75 72  ** If the P1 cur
263e0 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e  sor must be poin
263f0 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20  ting to a valid 
26400 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20  row (not a NULL 
26410 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61  row).** of a rea
26420 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70  l table, not a p
26430 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a  seudo-table..*/.
26440 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 4b 65  /* Opcode: RowKe
26450 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  y P1 P2 * * *.**
26460 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
26470 3d 6b 65 79 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  =key.**.** Write
26480 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
26490 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72  2 the complete r
264a0 6f 77 20 6b 65 79 20 66 6f 72 20 63 75 72 73 6f  ow key for curso
264b0 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69  r P1..** There i
264c0 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74  s no interpretat
264d0 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e  ion of the data.
264e0 20 20 0a 2a 2a 20 54 68 65 20 6b 65 79 20 69 73    .** The key is
264f0 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65   copied onto the
26500 20 50 32 20 72 65 67 69 73 74 65 72 20 65 78 61   P2 register exa
26510 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69  ctly as .** it i
26520 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64  s found in the d
26530 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a  atabase file..**
26540 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63 75  .** If the P1 cu
26550 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69  rsor must be poi
26560 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64  nting to a valid
26570 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c   row (not a NULL
26580 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65   row).** of a re
26590 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
265a0 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f  pseudo-table..*/
265b0 0a 63 61 73 65 20 4f 50 5f 52 6f 77 4b 65 79 3a  .case OP_RowKey:
265c0 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44 61 74 61  .case OP_RowData
265d0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
265e0 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
265f0 20 2a 70 43 72 73 72 3b 0a 20 20 75 33 32 20 6e   *pCrsr;.  u32 n
26600 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ;..  pOut = &aMe
26610 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65  m[pOp->p2];.  me
26620 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
26630 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 4e  , pOut);..  /* N
26640 6f 74 65 20 74 68 61 74 20 52 6f 77 4b 65 79 20  ote that RowKey 
26650 61 6e 64 20 52 6f 77 44 61 74 61 20 61 72 65 20  and RowData are 
26660 72 65 61 6c 6c 79 20 65 78 61 63 74 6c 79 20 74  really exactly t
26670 68 65 20 73 61 6d 65 20 69 6e 73 74 72 75 63 74  he same instruct
26680 69 6f 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ion */.  assert(
26690 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
266a0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
266b0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
266c0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
266d0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
266e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
266f0 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
26700 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
26710 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
26720 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )==0 );.  assert
26730 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 7c 7c  ( pC->isTable ||
26740 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
26750 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61 73  _RowData );.  as
26760 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
26770 65 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  e==0 || pOp->opc
26780 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44 61 74 61 20  ode==OP_RowData 
26790 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
267a0 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20  >nullRow==0 );. 
267b0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e   assert( pC->uc.
267c0 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
267d0 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70  pCrsr = pC->uc.p
267e0 43 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a 20 54 68  Cursor;..  /* Th
267f0 65 20 4f 50 5f 52 6f 77 4b 65 79 20 61 6e 64 20  e OP_RowKey and 
26800 4f 50 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f 64  OP_RowData opcod
26810 65 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77  es always follow
26820 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72   OP_NotExists or
26830 0a 20 20 2a 2a 20 4f 50 5f 53 65 65 6b 52 6f 77  .  ** OP_SeekRow
26840 69 64 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64 2f  id or OP_Rewind/
26850 4f 70 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f 20  Op_Next with no 
26860 69 6e 74 65 72 76 65 6e 69 6e 67 20 69 6e 73 74  intervening inst
26870 72 75 63 74 69 6f 6e 73 0a 20 20 2a 2a 20 74 68  ructions.  ** th
26880 61 74 20 6d 69 67 68 74 20 69 6e 76 61 6c 69 64  at might invalid
26890 61 74 65 20 74 68 65 20 63 75 72 73 6f 72 2e 0a  ate the cursor..
268a0 20 20 2a 2a 20 49 66 20 74 68 69 73 20 77 68 65    ** If this whe
268b0 72 65 20 6e 6f 74 20 74 68 65 20 63 61 73 65 2c  re not the case,
268c0 20 6f 6e 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f   on of the follo
268d0 77 69 6e 67 20 61 73 73 65 72 74 28 29 73 0a 20  wing assert()s. 
268e0 20 2a 2a 20 77 6f 75 6c 64 20 66 61 69 6c 2e 20   ** would fail. 
268f0 20 53 68 6f 75 6c 64 20 74 68 69 73 20 65 76 65   Should this eve
26900 72 20 63 68 61 6e 67 65 20 28 62 65 63 61 75 73  r change (becaus
26910 65 20 6f 66 20 63 68 61 6e 67 65 73 20 69 6e 20  e of changes in 
26920 74 68 65 20 63 6f 64 65 0a 20 20 2a 2a 20 67 65  the code.  ** ge
26930 6e 65 72 61 74 6f 72 29 20 74 68 65 6e 20 74 68  nerator) then th
26940 65 20 66 69 78 20 77 6f 75 6c 64 20 62 65 20 74  e fix would be t
26950 6f 20 69 6e 73 65 72 74 20 61 20 63 61 6c 6c 20  o insert a call 
26960 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56  to.  ** sqlite3V
26970 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
26980 29 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  )..  */.  assert
26990 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
269a0 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73  veto==0 );.  ass
269b0 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
269c0 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70  eCursorIsValid(p
269d0 43 72 73 72 29 20 29 3b 0a 23 69 66 20 30 20 20  Crsr) );.#if 0  
269e0 2f 2a 20 4e 6f 74 20 72 65 71 75 69 72 65 64 20  /* Not required 
269f0 64 75 65 20 74 6f 20 74 68 65 20 70 72 65 76 69  due to the previ
26a00 6f 75 73 20 74 6f 20 61 73 73 65 72 74 28 29 20  ous to assert() 
26a10 73 74 61 74 65 6d 65 6e 74 73 20 2a 2f 0a 20 20  statements */.  
26a20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
26a30 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29  CursorMoveto(pC)
26a40 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  ;.  if( rc!=SQLI
26a50 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
26a60 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
26a70 0a 23 65 6e 64 69 66 0a 0a 20 20 6e 20 3d 20 73  .#endif..  n = s
26a80 71 6c 69 74 65 33 42 74 72 65 65 50 61 79 6c 6f  qlite3BtreePaylo
26a90 61 64 53 69 7a 65 28 70 43 72 73 72 29 3b 0a 20  adSize(pCrsr);. 
26aa0 20 69 66 28 20 6e 3e 28 75 33 32 29 64 62 2d 3e   if( n>(u32)db->
26ab0 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
26ac0 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
26ad0 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
26ae0 0a 20 20 7d 0a 20 20 74 65 73 74 63 61 73 65 28  .  }.  testcase(
26af0 20 6e 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 73   n==0 );.  if( s
26b00 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65  qlite3VdbeMemCle
26b10 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4f 75 74  arAndResize(pOut
26b20 2c 20 4d 41 58 28 6e 2c 33 32 29 29 20 29 7b 0a  , MAX(n,32)) ){.
26b30 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
26b40 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  .  }.  pOut->n =
26b50 20 6e 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65   n;.  MemSetType
26b60 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42  Flag(pOut, MEM_B
26b70 6c 6f 62 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e  lob);.  if( pC->
26b80 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20  isTable==0 ){.  
26b90 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
26ba0 72 65 65 4b 65 79 28 70 43 72 73 72 2c 20 30 2c  reeKey(pCrsr, 0,
26bb0 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20   n, pOut->z);.  
26bc0 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20  }else{.    rc = 
26bd0 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61  sqlite3BtreeData
26be0 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f  (pCrsr, 0, n, pO
26bf0 75 74 2d 3e 7a 29 3b 0a 20 20 7d 0a 20 20 69 66  ut->z);.  }.  if
26c00 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
26c10 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
26c20 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51    pOut->enc = SQ
26c30 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49  LITE_UTF8;  /* I
26c40 6e 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20  n case the blob 
26c50 69 73 20 65 76 65 72 20 63 61 73 74 20 74 6f 20  is ever cast to 
26c60 74 65 78 74 20 2a 2f 0a 20 20 55 50 44 41 54 45  text */.  UPDATE
26c70 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
26c80 75 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  ut);.  REGISTER_
26c90 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
26ca0 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
26cb0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
26cc0 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  id P1 P2 * * *.*
26cd0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
26ce0 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 53 74  ]=rowid.**.** St
26cf0 6f 72 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  ore in register 
26d00 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68  P2 an integer wh
26d10 69 63 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f  ich is the key o
26d20 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72  f the table entr
26d30 79 20 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20  y that.** P1 is 
26d40 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20  currently point 
26d50 74 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e  to..**.** P1 can
26d60 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 6f 72   be either an or
26d70 64 69 6e 61 72 79 20 74 61 62 6c 65 20 6f 72 20  dinary table or 
26d80 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  a virtual table.
26d90 20 20 54 68 65 72 65 20 75 73 65 64 20 74 6f 0a    There used to.
26da0 2a 2a 20 62 65 20 61 20 73 65 70 61 72 61 74 65  ** be a separate
26db0 20 4f 50 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64   OP_VRowid opcod
26dc0 65 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 76  e for use with v
26dd0 69 72 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 62  irtual tables, b
26de0 75 74 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f  ut this.** one o
26df0 70 63 6f 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20  pcode now works 
26e00 66 6f 72 20 62 6f 74 68 20 74 61 62 6c 65 20 74  for both table t
26e10 79 70 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ypes..*/.case OP
26e20 5f 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20  _Rowid: {       
26e30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
26e40 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  2 */.  VdbeCurso
26e50 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 76 3b 0a  r *pC;.  i64 v;.
26e60 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
26e70 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73  pVtab;.  const s
26e80 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
26e90 4d 6f 64 75 6c 65 3b 0a 0a 20 20 70 4f 75 74 20  Module;..  pOut 
26ea0 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
26eb0 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65  (p, pOp);.  asse
26ec0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
26ed0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
26ee0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
26ef0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
26f00 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
26f10 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
26f20 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52  C->eCurType!=CUR
26f30 54 59 50 45 5f 50 53 45 55 44 4f 20 7c 7c 20 70  TYPE_PSEUDO || p
26f40 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20  C->nullRow );.  
26f50 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  if( pC->nullRow 
26f60 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  ){.    pOut->fla
26f70 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
26f80 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73     break;.  }els
26f90 65 20 69 66 28 20 70 43 2d 3e 64 65 66 65 72 72  e if( pC->deferr
26fa0 65 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20  edMoveto ){.    
26fb0 76 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61  v = pC->movetoTa
26fc0 72 67 65 74 3b 0a 23 69 66 6e 64 65 66 20 53 51  rget;.#ifndef SQ
26fd0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
26fe0 4c 54 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20 69  LTABLE.  }else i
26ff0 66 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  f( pC->eCurType=
27000 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20 29 7b  =CURTYPE_VTAB ){
27010 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
27020 3e 75 63 2e 70 56 43 75 72 21 3d 30 20 29 3b 0a  >uc.pVCur!=0 );.
27030 20 20 20 20 70 56 74 61 62 20 3d 20 70 43 2d 3e      pVtab = pC->
27040 75 63 2e 70 56 43 75 72 2d 3e 70 56 74 61 62 3b  uc.pVCur->pVtab;
27050 0a 20 20 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70  .    pModule = p
27060 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
27070 20 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75     assert( pModu
27080 6c 65 2d 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20  le->xRowid );.  
27090 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
270a0 78 52 6f 77 69 64 28 70 43 2d 3e 75 63 2e 70 56  xRowid(pC->uc.pV
270b0 43 75 72 2c 20 26 76 29 3b 0a 20 20 20 20 73 71  Cur, &v);.    sq
270c0 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
270d0 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrmsg(p, pVtab);
270e0 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f  .    if( rc ) go
270f0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
27100 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 20 2f 2a  error;.#endif /*
27110 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
27120 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 20 20 7d  TUALTABLE */.  }
27130 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
27140 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
27150 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
27160 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
27170 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29  >uc.pCursor!=0 )
27180 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
27190 65 33 56 64 62 65 43 75 72 73 6f 72 52 65 73 74  e3VdbeCursorRest
271a0 6f 72 65 28 70 43 29 3b 0a 20 20 20 20 69 66 28  ore(pC);.    if(
271b0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
271c0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
271d0 20 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52     if( pC->nullR
271e0 6f 77 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74  ow ){.      pOut
271f0 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  ->flags = MEM_Nu
27200 6c 6c 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  ll;.      break;
27210 0a 20 20 20 20 7d 0a 20 20 20 20 76 20 3d 20 73  .    }.    v = s
27220 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67  qlite3BtreeInteg
27230 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70 43 75  erKey(pC->uc.pCu
27240 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 70 4f 75  rsor);.  }.  pOu
27250 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72  t->u.i = v;.  br
27260 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
27270 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31 20 2a 20  e: NullRow P1 * 
27280 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65  * * *.**.** Move
27290 20 74 68 65 20 63 75 72 73 6f 72 20 50 31 20 74   the cursor P1 t
272a0 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e 20 20 41  o a null row.  A
272b0 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65  ny OP_Column ope
272c0 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68 61 74 20  rations.** that 
272d0 6f 63 63 75 72 20 77 68 69 6c 65 20 74 68 65 20  occur while the 
272e0 63 75 72 73 6f 72 20 69 73 20 6f 6e 20 74 68 65  cursor is on the
272f0 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c 6c 20 61   null row will a
27300 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74 65 20 61  lways.** write a
27310 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
27320 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56  P_NullRow: {.  V
27330 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a  dbeCursor *pC;..
27340 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
27350 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
27360 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
27370 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
27380 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
27390 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d  ( pC!=0 );.  pC-
273a0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
273b0 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
273c0 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
273d0 20 69 66 28 20 70 43 2d 3e 65 43 75 72 54 79 70   if( pC->eCurTyp
273e0 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
273f0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
27400 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d  pC->uc.pCursor!=
27410 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 );.    sqlite3
27420 42 74 72 65 65 43 6c 65 61 72 43 75 72 73 6f 72  BtreeClearCursor
27430 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  (pC->uc.pCursor)
27440 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
27450 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 61 73  ../* Opcode: Las
27460 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
27470 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73  *.** The next us
27480 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f  e of the Rowid o
27490 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 50 72 65 76  r Column or Prev
274a0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72   instruction for
274b0 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66   P1 .** will ref
274c0 65 72 20 74 6f 20 74 68 65 20 6c 61 73 74 20 65  er to the last e
274d0 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61 74 61  ntry in the data
274e0 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e  base table or in
274f0 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74  dex..** If the t
27500 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73  able or index is
27510 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c   empty and P2>0,
27520 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64   then jump immed
27530 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a  iately to P2..**
27540 20 49 66 20 50 32 20 69 73 20 30 20 6f 72 20 69   If P2 is 0 or i
27550 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
27560 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74  ndex is not empt
27570 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a  y, fall through.
27580 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ** to the follow
27590 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ing instruction.
275a0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
275b0 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
275c0 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20  rsor configured 
275d0 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72  to move in rever
275e0 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f  se order,.** fro
275f0 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64  m the end toward
27600 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20   the beginning. 
27610 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
27620 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
27630 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  * configured to 
27640 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65  use Prev, not Ne
27650 78 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c  xt..*/.case OP_L
27660 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ast: {        /*
27670 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
27680 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
27690 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
276a0 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65  int res;..  asse
276b0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
276c0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
276d0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
276e0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
276f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
27700 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
27710 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
27720 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
27730 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70  pCrsr = pC->uc.p
27740 43 75 72 73 6f 72 3b 0a 20 20 72 65 73 20 3d 20  Cursor;.  res = 
27750 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72  0;.  assert( pCr
27760 73 72 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20  sr!=0 );.  rc = 
27770 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74  sqlite3BtreeLast
27780 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20  (pCrsr, &res);. 
27790 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28   pC->nullRow = (
277a0 75 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e 64 65  u8)res;.  pC->de
277b0 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
277c0 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
277d0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
277e0 45 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73  E;.  pC->seekRes
277f0 75 6c 74 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 23  ult = pOp->p3;.#
27800 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
27810 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20  UG.  pC->seekOp 
27820 3d 20 4f 50 5f 4c 61 73 74 3b 0a 23 65 6e 64 69  = OP_Last;.#endi
27830 66 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  f.  if( rc ) got
27840 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
27850 72 72 6f 72 3b 0a 20 20 69 66 28 20 70 4f 70 2d  rror;.  if( pOp-
27860 3e 70 32 3e 30 20 29 7b 0a 20 20 20 20 56 64 62  >p2>0 ){.    Vdb
27870 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
27880 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20  !=0,2);.    if( 
27890 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  res ) goto jump_
278a0 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
278b0 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.}.../* Opcod
278c0 65 3a 20 53 6f 72 74 20 50 31 20 50 32 20 2a 20  e: Sort P1 P2 * 
278d0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  * *.**.** This o
278e0 70 63 6f 64 65 20 64 6f 65 73 20 65 78 61 63 74  pcode does exact
278f0 6c 79 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e  ly the same thin
27900 67 20 61 73 20 4f 50 5f 52 65 77 69 6e 64 20 65  g as OP_Rewind e
27910 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 69 74  xcept that.** it
27920 20 69 6e 63 72 65 6d 65 6e 74 73 20 61 6e 20 75   increments an u
27930 6e 64 6f 63 75 6d 65 6e 74 65 64 20 67 6c 6f 62  ndocumented glob
27940 61 6c 20 76 61 72 69 61 62 6c 65 20 75 73 65 64  al variable used
27950 20 66 6f 72 20 74 65 73 74 69 6e 67 2e 0a 2a 2a   for testing..**
27960 0a 2a 2a 20 53 6f 72 74 69 6e 67 20 69 73 20 61  .** Sorting is a
27970 63 63 6f 6d 70 6c 69 73 68 65 64 20 62 79 20 77  ccomplished by w
27980 72 69 74 69 6e 67 20 72 65 63 6f 72 64 73 20 69  riting records i
27990 6e 74 6f 20 61 20 73 6f 72 74 69 6e 67 20 69 6e  nto a sorting in
279a0 64 65 78 2c 0a 2a 2a 20 74 68 65 6e 20 72 65 77  dex,.** then rew
279b0 69 6e 64 69 6e 67 20 74 68 61 74 20 69 6e 64 65  inding that inde
279c0 78 20 61 6e 64 20 70 6c 61 79 69 6e 67 20 69 74  x and playing it
279d0 20 62 61 63 6b 20 66 72 6f 6d 20 62 65 67 69 6e   back from begin
279e0 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20  ning to.** end. 
279f0 20 57 65 20 75 73 65 20 74 68 65 20 4f 50 5f 53   We use the OP_S
27a00 6f 72 74 20 6f 70 63 6f 64 65 20 69 6e 73 74 65  ort opcode inste
27a10 61 64 20 6f 66 20 4f 50 5f 52 65 77 69 6e 64 20  ad of OP_Rewind 
27a20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a 20 72 65 77  to do the.** rew
27a30 69 6e 64 69 6e 67 20 73 6f 20 74 68 61 74 20 74  inding so that t
27a40 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  he global variab
27a50 6c 65 20 77 69 6c 6c 20 62 65 20 69 6e 63 72 65  le will be incre
27a60 6d 65 6e 74 65 64 20 61 6e 64 0a 2a 2a 20 72 65  mented and.** re
27a70 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20 63  gression tests c
27a80 61 6e 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65  an determine whe
27a90 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
27aa0 6f 70 74 69 6d 69 7a 65 72 20 69 73 0a 2a 2a 20  optimizer is.** 
27ab0 63 6f 72 72 65 63 74 6c 79 20 6f 70 74 69 6d 69  correctly optimi
27ac0 7a 69 6e 67 20 6f 75 74 20 73 6f 72 74 73 2e 0a  zing out sorts..
27ad0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
27ae0 72 53 6f 72 74 3a 20 20 20 20 2f 2a 20 6a 75 6d  rSort:    /* jum
27af0 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  p */.case OP_Sor
27b00 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  t: {        /* j
27b10 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  ump */.#ifdef SQ
27b20 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69  LITE_TEST.  sqli
27b30 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b  te3_sort_count++
27b40 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72  ;.  sqlite3_sear
27b50 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64  ch_count--;.#end
27b60 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72  if.  p->aCounter
27b70 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54  [SQLITE_STMTSTAT
27b80 55 53 5f 53 4f 52 54 5d 2b 2b 3b 0a 20 20 2f 2a  US_SORT]++;.  /*
27b90 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   Fall through in
27ba0 74 6f 20 4f 50 5f 52 65 77 69 6e 64 20 2a 2f 0a  to OP_Rewind */.
27bb0 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 77  }./* Opcode: Rew
27bc0 69 6e 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ind P1 P2 * * *.
27bd0 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75  **.** The next u
27be0 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20  se of the Rowid 
27bf0 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78  or Column or Nex
27c00 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f  t instruction fo
27c10 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65  r P1 .** will re
27c20 66 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74  fer to the first
27c30 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61   entry in the da
27c40 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
27c50 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65  index..** If the
27c60 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
27c70 69 73 20 65 6d 70 74 79 2c 20 6a 75 6d 70 20 69  is empty, jump i
27c80 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
27c90 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c  ..** If the tabl
27ca0 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f  e or index is no
27cb0 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68  t empty, fall th
27cc0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 66 6f 6c  rough to the fol
27cd0 6c 6f 77 69 6e 67 20 0a 2a 2a 20 69 6e 73 74 72  lowing .** instr
27ce0 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  uction..**.** Th
27cf0 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
27d00 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66   the cursor conf
27d10 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69  igured to move i
27d20 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c  n forward order,
27d30 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67  .** from the beg
27d40 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68  inning toward th
27d50 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72  e end.  In other
27d60 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73   words, the curs
27d70 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  or is.** configu
27d80 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c  red to use Next,
27d90 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2f 0a 63 61   not Prev..*/.ca
27da0 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20  se OP_Rewind: { 
27db0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
27dc0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
27dd0 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
27de0 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
27df0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
27e00 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
27e10 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
27e20 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
27e30 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
27e40 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
27e50 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72  assert( isSorter
27e60 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f  (pC)==(pOp->opco
27e70 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 53 6f 72  de==OP_SorterSor
27e80 74 29 20 29 3b 0a 20 20 72 65 73 20 3d 20 31 3b  t) );.  res = 1;
27e90 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
27ea0 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f  EBUG.  pC->seekO
27eb0 70 20 3d 20 4f 50 5f 52 65 77 69 6e 64 3b 0a 23  p = OP_Rewind;.#
27ec0 65 6e 64 69 66 0a 20 20 69 66 28 20 69 73 53 6f  endif.  if( isSo
27ed0 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20  rter(pC) ){.    
27ee0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
27ef0 53 6f 72 74 65 72 52 65 77 69 6e 64 28 70 43 2c  SorterRewind(pC,
27f00 20 26 72 65 73 29 3b 0a 20 20 7d 65 6c 73 65 7b   &res);.  }else{
27f10 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
27f20 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
27f30 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20  PE_BTREE );.    
27f40 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70  pCrsr = pC->uc.p
27f50 43 75 72 73 6f 72 3b 0a 20 20 20 20 61 73 73 65  Cursor;.    asse
27f60 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20  rt( pCrsr );.   
27f70 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
27f80 65 65 46 69 72 73 74 28 70 43 72 73 72 2c 20 26  eeFirst(pCrsr, &
27f90 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 64 65  res);.    pC->de
27fa0 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
27fb0 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  ;.    pC->cacheS
27fc0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
27fd0 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72  ALE;.  }.  if( r
27fe0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
27ff0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70  ue_to_error;.  p
28000 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38  C->nullRow = (u8
28010 29 72 65 73 3b 0a 20 20 61 73 73 65 72 74 28 20  )res;.  assert( 
28020 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70  pOp->p2>0 && pOp
28030 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20  ->p2<p->nOp );. 
28040 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
28050 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66  (res!=0,2);.  if
28060 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d  ( res ) goto jum
28070 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b  p_to_p2;.  break
28080 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
28090 4e 65 78 74 20 50 31 20 50 32 20 50 33 20 50 34  Next P1 P2 P3 P4
280a0 20 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63   P5.**.** Advanc
280b0 65 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  e cursor P1 so t
280c0 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  hat it points to
280d0 20 74 68 65 20 6e 65 78 74 20 6b 65 79 2f 64 61   the next key/da
280e0 74 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a  ta pair in its.*
280f0 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  * table or index
28100 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20  .  If there are 
28110 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61 6c 75  no more key/valu
28120 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c  e pairs then fal
28130 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20  l through.** to 
28140 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e  the following in
28150 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20  struction.  But 
28160 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 61 64  if the cursor ad
28170 76 61 6e 63 65 20 77 61 73 20 73 75 63 63 65 73  vance was succes
28180 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d  sful,.** jump im
28190 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
281a0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4e 65 78 74 20  .**.** The Next 
281b0 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76  opcode is only v
281c0 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61  alid following a
281d0 6e 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45  n SeekGT, SeekGE
281e0 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 52 65 77 69 6e  , or.** OP_Rewin
281f0 64 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74 6f  d opcode used to
28200 20 70 6f 73 69 74 69 6f 6e 20 74 68 65 20 63 75   position the cu
28210 72 73 6f 72 2e 20 20 4e 65 78 74 20 69 73 20 6e  rsor.  Next is n
28220 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f  ot allowed.** to
28230 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 4c 54 2c 20   follow SeekLT, 
28240 53 65 65 6b 4c 45 2c 20 6f 72 20 4f 50 5f 4c 61  SeekLE, or OP_La
28250 73 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31  st..**.** The P1
28260 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
28270 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65  for a real table
28280 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74  , not a pseudo-t
28290 61 62 6c 65 2e 20 20 50 31 20 6d 75 73 74 20 68  able.  P1 must h
282a0 61 76 65 0a 2a 2a 20 62 65 65 6e 20 6f 70 65 6e  ave.** been open
282b0 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73  ed prior to this
282c0 20 6f 70 63 6f 64 65 20 6f 72 20 74 68 65 20 70   opcode or the p
282d0 72 6f 67 72 61 6d 20 77 69 6c 6c 20 73 65 67 66  rogram will segf
282e0 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ault..**.** The 
282f0 50 33 20 76 61 6c 75 65 20 69 73 20 61 20 68 69  P3 value is a hi
28300 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65 65 20  nt to the btree 
28310 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20  implementation. 
28320 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a  If P3==1, that.*
28330 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20 61 6e  * means P1 is an
28340 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64 20 74   SQL index and t
28350 68 61 74 20 74 68 69 73 20 69 6e 73 74 72 75 63  hat this instruc
28360 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65 20  tion could have 
28370 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20  been.** omitted 
28380 69 66 20 74 68 61 74 20 69 6e 64 65 78 20 68 61  if that index ha
28390 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e 20 20  d been unique.  
283a0 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e  P3 is usually 0.
283b0 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79    P3 is.** alway
283c0 73 20 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e  s either 0 or 1.
283d0 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77  .**.** P4 is alw
283e0 61 79 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41  ays of type P4_A
283f0 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63  DVANCE. The func
28400 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69  tion pointer poi
28410 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65  nts to.** sqlite
28420 33 42 74 72 65 65 4e 65 78 74 28 29 2e 0a 2a 2a  3BtreeNext()..**
28430 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73  .** If P5 is pos
28440 69 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75  itive and the ju
28450 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65  mp is taken, the
28460 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a  n event counter.
28470 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69  ** number P5-1 i
28480 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  n the prepared s
28490 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72  tatement is incr
284a0 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53  emented..**.** S
284b0 65 65 20 61 6c 73 6f 3a 20 50 72 65 76 2c 20 4e  ee also: Prev, N
284c0 65 78 74 49 66 4f 70 65 6e 0a 2a 2f 0a 2f 2a 20  extIfOpen.*/./* 
284d0 4f 70 63 6f 64 65 3a 20 4e 65 78 74 49 66 4f 70  Opcode: NextIfOp
284e0 65 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50  en P1 P2 P3 P4 P
284f0 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  5.**.** This opc
28500 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  ode works just l
28510 69 6b 65 20 4e 65 78 74 20 65 78 63 65 70 74 20  ike Next except 
28520 74 68 61 74 20 69 66 20 63 75 72 73 6f 72 20 50  that if cursor P
28530 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70 65 6e  1 is not.** open
28540 20 69 74 20 62 65 68 61 76 65 73 20 61 20 6e 6f   it behaves a no
28550 2d 6f 70 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  -op..*/./* Opcod
28560 65 3a 20 50 72 65 76 20 50 31 20 50 32 20 50 33  e: Prev P1 P2 P3
28570 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 61 63   P4 P5.**.** Bac
28580 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31 20 73  k up cursor P1 s
28590 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73  o that it points
285a0 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73   to the previous
285b0 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20 69   key/data pair i
285c0 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f  n its.** table o
285d0 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65  r index.  If the
285e0 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69 6f 75  re is no previou
285f0 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72  s key/value pair
28600 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  s then fall thro
28610 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f  ugh.** to the fo
28620 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74  llowing instruct
28630 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65  ion.  But if the
28640 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70 20 77   cursor backup w
28650 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a  as successful,.*
28660 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  * jump immediate
28670 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 0a  ly to P2..**.**.
28680 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70 63 6f  ** The Prev opco
28690 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  de is only valid
286a0 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53 65   following an Se
286b0 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f 72  ekLT, SeekLE, or
286c0 0a 2a 2a 20 4f 50 5f 4c 61 73 74 20 6f 70 63 6f  .** OP_Last opco
286d0 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73 69 74  de used to posit
286e0 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 2e 20  ion the cursor. 
286f0 20 50 72 65 76 20 69 73 20 6e 6f 74 20 61 6c 6c   Prev is not all
28700 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f  owed.** to follo
28710 77 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45  w SeekGT, SeekGE
28720 2c 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64 2e 0a  , or OP_Rewind..
28730 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72  **.** The P1 cur
28740 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20  sor must be for 
28750 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
28760 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
28770 2e 20 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 6e  .  If P1 is.** n
28780 6f 74 20 6f 70 65 6e 20 74 68 65 6e 20 74 68 65  ot open then the
28790 20 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64   behavior is und
287a0 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  efined..**.** Th
287b0 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 61 20  e P3 value is a 
287c0 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65  hint to the btre
287d0 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
287e0 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74  . If P3==1, that
287f0 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20  .** means P1 is 
28800 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64  an SQL index and
28810 20 74 68 61 74 20 74 68 69 73 20 69 6e 73 74 72   that this instr
28820 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76  uction could hav
28830 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65  e been.** omitte
28840 64 20 69 66 20 74 68 61 74 20 69 6e 64 65 78 20  d if that index 
28850 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e  had been unique.
28860 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20    P3 is usually 
28870 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77  0.  P3 is.** alw
28880 61 79 73 20 65 69 74 68 65 72 20 30 20 6f 72 20  ays either 0 or 
28890 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  1..**.** P4 is a
288a0 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50 34  lways of type P4
288b0 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75  _ADVANCE. The fu
288c0 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70  nction pointer p
288d0 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69  oints to.** sqli
288e0 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73  te3BtreePrevious
288f0 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  ()..**.** If P5 
28900 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20  is positive and 
28910 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
28920 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f  n, then event co
28930 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20  unter.** number 
28940 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70  P5-1 in the prep
28950 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69  ared statement i
28960 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a  s incremented..*
28970 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65  /./* Opcode: Pre
28980 76 49 66 4f 70 65 6e 20 50 31 20 50 32 20 50 33  vIfOpen P1 P2 P3
28990 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69   P4 P5.**.** Thi
289a0 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a  s opcode works j
289b0 75 73 74 20 6c 69 6b 65 20 50 72 65 76 20 65 78  ust like Prev ex
289c0 63 65 70 74 20 74 68 61 74 20 69 66 20 63 75 72  cept that if cur
289d0 73 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a  sor P1 is not.**
289e0 20 6f 70 65 6e 20 69 74 20 62 65 68 61 76 65 73   open it behaves
289f0 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73   a no-op..*/.cas
28a00 65 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 3a  e OP_SorterNext:
28a10 20 7b 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20   {  /* jump */. 
28a20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
28a30 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 70  .  int res;..  p
28a40 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
28a50 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
28a60 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b   isSorter(pC) );
28a70 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 72 63  .  res = 0;.  rc
28a80 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f   = sqlite3VdbeSo
28a90 72 74 65 72 4e 65 78 74 28 64 62 2c 20 70 43 2c  rterNext(db, pC,
28aa0 20 26 72 65 73 29 3b 0a 20 20 67 6f 74 6f 20 6e   &res);.  goto n
28ab0 65 78 74 5f 74 61 69 6c 3b 0a 63 61 73 65 20 4f  ext_tail;.case O
28ac0 50 5f 50 72 65 76 49 66 4f 70 65 6e 3a 20 20 20  P_PrevIfOpen:   
28ad0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
28ae0 20 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 3a 20   OP_NextIfOpen: 
28af0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
28b00 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  if( p->apCsr[pOp
28b10 2d 3e 70 31 5d 3d 3d 30 20 29 20 62 72 65 61 6b  ->p1]==0 ) break
28b20 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  ;.  /* Fall thro
28b30 75 67 68 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  ugh */.case OP_P
28b40 72 65 76 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  rev:          /*
28b50 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
28b60 5f 4e 65 78 74 3a 20 20 20 20 20 20 20 20 20 20  _Next:          
28b70 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73  /* jump */.  ass
28b80 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
28b90 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
28ba0 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
28bb0 74 28 20 70 4f 70 2d 3e 70 35 3c 41 72 72 61 79  t( pOp->p5<Array
28bc0 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e 74 65 72  Size(p->aCounter
28bd0 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  ) );.  pC = p->a
28be0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
28bf0 20 72 65 73 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a   res = pOp->p3;.
28c00 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
28c10 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
28c20 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
28c30 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
28c40 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
28c50 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
28c60 20 61 73 73 65 72 74 28 20 72 65 73 3d 3d 30 20   assert( res==0 
28c70 7c 7c 20 28 72 65 73 3d 3d 31 20 26 26 20 70 43  || (res==1 && pC
28c80 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 29 20 29 3b  ->isTable==0) );
28c90 0a 20 20 74 65 73 74 63 61 73 65 28 20 72 65 73  .  testcase( res
28ca0 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==1 );.  assert(
28cb0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
28cc0 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 70 34  _Next || pOp->p4
28cd0 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74  .xAdvance==sqlit
28ce0 65 33 42 74 72 65 65 4e 65 78 74 20 29 3b 0a 20  e3BtreeNext );. 
28cf0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
28d00 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c  code!=OP_Prev ||
28d10 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63   pOp->p4.xAdvanc
28d20 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 50  e==sqlite3BtreeP
28d30 72 65 76 69 6f 75 73 20 29 3b 0a 20 20 61 73 73  revious );.  ass
28d40 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
28d50 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 20  !=OP_NextIfOpen 
28d60 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61  || pOp->p4.xAdva
28d70 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  nce==sqlite3Btre
28d80 65 4e 65 78 74 20 29 3b 0a 20 20 61 73 73 65 72  eNext );.  asser
28d90 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
28da0 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 20 7c 7c  OP_PrevIfOpen ||
28db0 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63   pOp->p4.xAdvanc
28dc0 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 50  e==sqlite3BtreeP
28dd0 72 65 76 69 6f 75 73 29 3b 0a 0a 20 20 2f 2a 20  revious);..  /* 
28de0 54 68 65 20 4e 65 78 74 20 6f 70 63 6f 64 65 20  The Next opcode 
28df0 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 61 66 74  is only used aft
28e00 65 72 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47  er SeekGT, SeekG
28e10 45 2c 20 61 6e 64 20 52 65 77 69 6e 64 2e 0a 20  E, and Rewind.. 
28e20 20 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70 63   ** The Prev opc
28e30 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73 65 64  ode is only used
28e40 20 61 66 74 65 72 20 53 65 65 6b 4c 54 2c 20 53   after SeekLT, S
28e50 65 65 6b 4c 45 2c 20 61 6e 64 20 4c 61 73 74 2e  eekLE, and Last.
28e60 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
28e70 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65  p->opcode!=OP_Ne
28e80 78 74 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  xt || pOp->opcod
28e90 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e  e!=OP_NextIfOpen
28ea0 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73  .       || pC->s
28eb0 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 54  eekOp==OP_SeekGT
28ec0 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
28ed0 4f 50 5f 53 65 65 6b 47 45 0a 20 20 20 20 20 20  OP_SeekGE.      
28ee0 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
28ef0 4f 50 5f 52 65 77 69 6e 64 20 7c 7c 20 70 43 2d  OP_Rewind || pC-
28f00 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 46 6f 75 6e  >seekOp==OP_Foun
28f10 64 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  d);.  assert( pO
28f20 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72  p->opcode!=OP_Pr
28f30 65 76 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  ev || pOp->opcod
28f40 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e  e!=OP_PrevIfOpen
28f50 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73  .       || pC->s
28f60 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c 54  eekOp==OP_SeekLT
28f70 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
28f80 4f 50 5f 53 65 65 6b 4c 45 0a 20 20 20 20 20 20  OP_SeekLE.      
28f90 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
28fa0 4f 50 5f 4c 61 73 74 20 29 3b 0a 0a 20 20 72 63  OP_Last );..  rc
28fb0 20 3d 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61   = pOp->p4.xAdva
28fc0 6e 63 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  nce(pC->uc.pCurs
28fd0 6f 72 2c 20 26 72 65 73 29 3b 0a 6e 65 78 74 5f  or, &res);.next_
28fe0 74 61 69 6c 3a 0a 20 20 70 43 2d 3e 63 61 63 68  tail:.  pC->cach
28ff0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
29000 53 54 41 4c 45 3b 0a 20 20 56 64 62 65 42 72 61  STALE;.  VdbeBra
29010 6e 63 68 54 61 6b 65 6e 28 72 65 73 3d 3d 30 2c  nchTaken(res==0,
29020 32 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  2);.  if( rc ) g
29030 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
29040 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65  _error;.  if( re
29050 73 3d 3d 30 20 29 7b 0a 20 20 20 20 70 43 2d 3e  s==0 ){.    pC->
29060 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20  nullRow = 0;.   
29070 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70   p->aCounter[pOp
29080 2d 3e 70 35 5d 2b 2b 3b 0a 23 69 66 64 65 66 20  ->p5]++;.#ifdef 
29090 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20  SQLITE_TEST.    
290a0 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
290b0 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20  ount++;.#endif. 
290c0 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
290d0 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72  p2_and_check_for
290e0 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 65  _interrupt;.  }e
290f0 6c 73 65 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c  lse{.    pC->nul
29100 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 7d 0a 20 20  lRow = 1;.  }.  
29110 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69  goto check_for_i
29120 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20  nterrupt;.}../* 
29130 4f 70 63 6f 64 65 3a 20 49 64 78 49 6e 73 65 72  Opcode: IdxInser
29140 74 20 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a  t P1 P2 P3 * P5.
29150 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
29160 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67  =r[P2].**.** Reg
29170 69 73 74 65 72 20 50 32 20 68 6f 6c 64 73 20 61  ister P2 holds a
29180 6e 20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20  n SQL index key 
29190 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a  made using the.*
291a0 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73  * MakeRecord ins
291b0 74 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73  tructions.  This
291c0 20 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20 74   opcode writes t
291d0 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20  hat key.** into 
291e0 74 68 65 20 69 6e 64 65 78 20 50 31 2e 20 20 44  the index P1.  D
291f0 61 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74 72  ata for the entr
29200 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20  y is nil..**.** 
29210 50 33 20 69 73 20 61 20 66 6c 61 67 20 74 68 61  P3 is a flag tha
29220 74 20 70 72 6f 76 69 64 65 73 20 61 20 68 69 6e  t provides a hin
29230 74 20 74 6f 20 74 68 65 20 62 2d 74 72 65 65 20  t to the b-tree 
29240 6c 61 79 65 72 20 74 68 61 74 20 74 68 69 73 0a  layer that this.
29250 2a 2a 20 69 6e 73 65 72 74 20 69 73 20 6c 69 6b  ** insert is lik
29260 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70  ely to be an app
29270 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  end..**.** If P5
29280 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f   has the OPFLAG_
29290 4e 43 48 41 4e 47 45 20 62 69 74 20 73 65 74 2c  NCHANGE bit set,
292a0 20 74 68 65 6e 20 74 68 65 20 63 68 61 6e 67 65   then the change
292b0 20 63 6f 75 6e 74 65 72 20 69 73 0a 2a 2a 20 69   counter is.** i
292c0 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68  ncremented by th
292d0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  is instruction. 
292e0 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e   If the OPFLAG_N
292f0 43 48 41 4e 47 45 20 62 69 74 20 69 73 20 63 6c  CHANGE bit is cl
29300 65 61 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65  ear,.** then the
29310 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
29320 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2a  is unchanged..**
29330 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68  .** If P5 has th
29340 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b  e OPFLAG_USESEEK
29350 52 45 53 55 4c 54 20 62 69 74 20 73 65 74 2c 20  RESULT bit set, 
29360 74 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20  then the cursor 
29370 6d 75 73 74 20 68 61 76 65 0a 2a 2a 20 6a 75 73  must have.** jus
29380 74 20 64 6f 6e 65 20 61 20 73 65 65 6b 20 74 6f  t done a seek to
29390 20 74 68 65 20 73 70 6f 74 20 77 68 65 72 65 20   the spot where 
293a0 74 68 65 20 6e 65 77 20 65 6e 74 72 79 20 69 73  the new entry is
293b0 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e   to be inserted.
293c0 0a 2a 2a 20 54 68 69 73 20 66 6c 61 67 20 61 76  .** This flag av
293d0 6f 69 64 73 20 64 6f 69 6e 67 20 61 6e 20 65 78  oids doing an ex
293e0 74 72 61 20 73 65 65 6b 2e 0a 2a 2a 0a 2a 2a 20  tra seek..**.** 
293f0 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
29400 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20   only works for 
29410 69 6e 64 69 63 65 73 2e 20 20 54 68 65 20 65 71  indices.  The eq
29420 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63  uivalent instruc
29430 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c  tion.** for tabl
29440 65 73 20 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e  es is OP_Insert.
29450 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74  .*/.case OP_Sort
29460 65 72 49 6e 73 65 72 74 3a 20 20 20 20 20 20 20  erInsert:       
29470 2f 2a 20 69 6e 32 20 2a 2f 0a 63 61 73 65 20 4f  /* in2 */.case O
29480 50 5f 49 64 78 49 6e 73 65 72 74 3a 20 7b 20 20  P_IdxInsert: {  
29490 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a        /* in2 */.
294a0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
294b0 3b 0a 20 20 42 74 72 65 65 50 61 79 6c 6f 61 64  ;.  BtreePayload
294c0 20 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70   x;..  assert( p
294d0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
294e0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
294f0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
29500 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
29510 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
29520 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74    assert( isSort
29530 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70  er(pC)==(pOp->op
29540 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49  code==OP_SorterI
29550 6e 73 65 72 74 29 20 29 3b 0a 20 20 70 49 6e 32  nsert) );.  pIn2
29560 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
29570 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
29580 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  2->flags & MEM_B
29590 6c 6f 62 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  lob );.  if( pOp
295a0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43  ->p5 & OPFLAG_NC
295b0 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e  HANGE ) p->nChan
295c0 67 65 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20  ge++;.  assert( 
295d0 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
295e0 52 54 59 50 45 5f 42 54 52 45 45 20 7c 7c 20 70  RTYPE_BTREE || p
295f0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
29600 6f 72 74 65 72 49 6e 73 65 72 74 20 29 3b 0a 20  orterInsert );. 
29610 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
29620 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 72 63 20  able==0 );.  rc 
29630 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  = ExpandBlob(pIn
29640 32 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  2);.  if( rc ) g
29650 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
29660 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 70 4f  _error;.  if( pO
29670 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f  p->opcode==OP_So
29680 72 74 65 72 49 6e 73 65 72 74 20 29 7b 0a 20 20  rterInsert ){.  
29690 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
296a0 62 65 53 6f 72 74 65 72 57 72 69 74 65 28 70 43  beSorterWrite(pC
296b0 2c 20 70 49 6e 32 29 3b 0a 20 20 7d 65 6c 73 65  , pIn2);.  }else
296c0 7b 0a 20 20 20 20 78 2e 6e 4b 65 79 20 3d 20 70  {.    x.nKey = p
296d0 49 6e 32 2d 3e 6e 3b 0a 20 20 20 20 78 2e 70 4b  In2->n;.    x.pK
296e0 65 79 20 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20  ey = pIn2->z;.  
296f0 20 20 78 2e 6e 44 61 74 61 20 3d 20 30 3b 0a 20    x.nData = 0;. 
29700 20 20 20 78 2e 6e 5a 65 72 6f 20 3d 20 30 3b 0a     x.nZero = 0;.
29710 20 20 20 20 78 2e 70 44 61 74 61 20 3d 20 30 3b      x.pData = 0;
29720 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
29730 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d  3BtreeInsert(pC-
29740 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 78 2c  >uc.pCursor, &x,
29750 20 70 4f 70 2d 3e 70 33 2c 20 0a 20 20 20 20 20   pOp->p3, .     
29760 20 20 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f     ((pOp->p5 & O
29770 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
29780 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52  ULT) ? pC->seekR
29790 65 73 75 6c 74 20 3a 20 30 29 0a 20 20 20 20 20  esult : 0).     
297a0 20 20 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74     );.    assert
297b0 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
297c0 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 70  veto==0 );.    p
297d0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
297e0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
297f0 7d 0a 20 20 69 66 28 20 72 63 29 20 67 6f 74 6f  }.  if( rc) goto
29800 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
29810 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ror;.  break;.}.
29820 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 44  ./* Opcode: IdxD
29830 65 6c 65 74 65 20 50 31 20 50 32 20 50 33 20 2a  elete P1 P2 P3 *
29840 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
29850 6b 65 79 3d 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a  key=r[P2@P3].**.
29860 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** The content o
29870 66 20 50 33 20 72 65 67 69 73 74 65 72 73 20 73  f P3 registers s
29880 74 61 72 74 69 6e 67 20 61 74 20 72 65 67 69 73  tarting at regis
29890 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61  ter P2 form.** a
298a0 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
298b0 20 6b 65 79 2e 20 54 68 69 73 20 6f 70 63 6f 64   key. This opcod
298c0 65 20 72 65 6d 6f 76 65 73 20 74 68 61 74 20 65  e removes that e
298d0 6e 74 72 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a  ntry from the .*
298e0 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65 64 20 62  * index opened b
298f0 79 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a  y cursor P1..*/.
29900 63 61 73 65 20 4f 50 5f 49 64 78 44 65 6c 65 74  case OP_IdxDelet
29910 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  e: {.  VdbeCurso
29920 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
29930 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
29940 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  res;.  UnpackedR
29950 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65  ecord r;..  asse
29960 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b  rt( pOp->p3>0 );
29970 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
29980 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b  p2>0 && pOp->p2+
29990 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
299a0 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
299b0 29 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28  )+1 );.  assert(
299c0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
299d0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
299e0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
299f0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
29a00 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
29a10 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
29a20 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
29a30 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43 72  E_BTREE );.  pCr
29a40 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72  sr = pC->uc.pCur
29a50 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  sor;.  assert( p
29a60 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 61 73 73  Crsr!=0 );.  ass
29a70 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  ert( pOp->p5==0 
29a80 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20  );.  r.pKeyInfo 
29a90 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  = pC->pKeyInfo;.
29aa0 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31    r.nField = (u1
29ab0 36 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 72 2e 64  6)pOp->p3;.  r.d
29ac0 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20  efault_rc = 0;. 
29ad0 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b   r.aMem = &aMem[
29ae0 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 72 63 20 3d  pOp->p2];.  rc =
29af0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
29b00 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73  etoUnpacked(pCrs
29b10 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65  r, &r, 0, 0, &re
29b20 73 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  s);.  if( rc ) g
29b30 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
29b40 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65  _error;.  if( re
29b50 73 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d  s==0 ){.    rc =
29b60 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c   sqlite3BtreeDel
29b70 65 74 65 28 70 43 72 73 72 2c 20 42 54 52 45 45  ete(pCrsr, BTREE
29b80 5f 41 55 58 44 45 4c 45 54 45 29 3b 0a 20 20 20  _AUXDELETE);.   
29b90 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
29ba0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
29bb0 72 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  r;.  }.  assert(
29bc0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
29bd0 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 70 43 2d 3e  eto==0 );.  pC->
29be0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
29bf0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 62 72 65  CHE_STALE;.  bre
29c00 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
29c10 3a 20 53 65 65 6b 20 50 31 20 2a 20 50 33 20 50  : Seek P1 * P3 P
29c20 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
29c30 20 20 4d 6f 76 65 20 50 33 20 74 6f 20 50 31 2e    Move P3 to P1.
29c40 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 50 31 20 69  rowid.**.** P1 i
29c50 73 20 61 6e 20 6f 70 65 6e 20 69 6e 64 65 78 20  s an open index 
29c60 63 75 72 73 6f 72 20 61 6e 64 20 50 33 20 69 73  cursor and P3 is
29c70 20 61 20 63 75 72 73 6f 72 20 6f 6e 20 74 68 65   a cursor on the
29c80 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a 2a   corresponding.*
29c90 2a 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 6f  * table.  This o
29ca0 70 63 6f 64 65 20 64 6f 65 73 20 61 20 64 65 66  pcode does a def
29cb0 65 72 72 65 64 20 73 65 65 6b 20 6f 66 20 74 68  erred seek of th
29cc0 65 20 50 33 20 74 61 62 6c 65 20 63 75 72 73 6f  e P3 table curso
29cd0 72 0a 2a 2a 20 74 6f 20 74 68 65 20 72 6f 77 20  r.** to the row 
29ce0 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  that corresponds
29cf0 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20   to the current 
29d00 72 6f 77 20 6f 66 20 50 31 2e 0a 2a 2a 0a 2a 2a  row of P1..**.**
29d10 20 54 68 69 73 20 69 73 20 61 20 64 65 66 65 72   This is a defer
29d20 72 65 64 20 73 65 65 6b 2e 20 20 4e 6f 74 68 69  red seek.  Nothi
29d30 6e 67 20 61 63 74 75 61 6c 6c 79 20 68 61 70 70  ng actually happ
29d40 65 6e 73 20 75 6e 74 69 6c 0a 2a 2a 20 74 68 65  ens until.** the
29d50 20 63 75 72 73 6f 72 20 69 73 20 75 73 65 64 20   cursor is used 
29d60 74 6f 20 72 65 61 64 20 61 20 72 65 63 6f 72 64  to read a record
29d70 2e 20 20 54 68 61 74 20 77 61 79 2c 20 69 66 20  .  That way, if 
29d80 6e 6f 20 72 65 61 64 73 0a 2a 2a 20 6f 63 63 75  no reads.** occu
29d90 72 2c 20 6e 6f 20 75 6e 6e 65 63 65 73 73 61 72  r, no unnecessar
29da0 79 20 49 2f 4f 20 68 61 70 70 65 6e 73 2e 0a 2a  y I/O happens..*
29db0 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61  *.** P4 may be a
29dc0 6e 20 61 72 72 61 79 20 6f 66 20 69 6e 74 65 67  n array of integ
29dd0 65 72 73 20 28 74 79 70 65 20 50 34 5f 49 4e 54  ers (type P4_INT
29de0 41 52 52 41 59 29 20 63 6f 6e 74 61 69 6e 69 6e  ARRAY) containin
29df0 67 0a 2a 2a 20 6f 6e 65 20 65 6e 74 72 79 20 66  g.** one entry f
29e00 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69  or each column i
29e10 6e 20 74 68 65 20 50 33 20 74 61 62 6c 65 2e 20  n the P3 table. 
29e20 20 49 66 20 61 72 72 61 79 20 65 6e 74 72 79 20   If array entry 
29e30 61 28 69 29 0a 2a 2a 20 69 73 20 6e 6f 6e 2d 7a  a(i).** is non-z
29e40 65 72 6f 2c 20 74 68 65 6e 20 72 65 61 64 69 6e  ero, then readin
29e50 67 20 63 6f 6c 75 6d 6e 20 61 28 69 29 2d 31 20  g column a(i)-1 
29e60 66 72 6f 6d 20 63 75 72 73 6f 72 20 50 33 20 69  from cursor P3 i
29e70 73 20 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74  s .** equivalent
29e80 20 74 6f 20 70 65 72 66 6f 72 6d 69 6e 67 20 74   to performing t
29e90 68 65 20 64 65 66 65 72 72 65 64 20 73 65 65 6b  he deferred seek
29ea0 20 61 6e 64 20 74 68 65 6e 20 72 65 61 64 69 6e   and then readin
29eb0 67 20 63 6f 6c 75 6d 6e 20 69 20 0a 2a 2a 20 66  g column i .** f
29ec0 72 6f 6d 20 50 31 2e 20 20 54 68 69 73 20 69 6e  rom P1.  This in
29ed0 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 73 74 6f  formation is sto
29ee0 72 65 64 20 69 6e 20 50 33 20 61 6e 64 20 75 73  red in P3 and us
29ef0 65 64 20 74 6f 20 72 65 64 69 72 65 63 74 0a 2a  ed to redirect.*
29f00 2a 20 72 65 61 64 73 20 61 67 61 69 6e 73 74 20  * reads against 
29f10 50 33 20 6f 76 65 72 20 74 6f 20 50 31 2c 20 74  P3 over to P1, t
29f20 68 75 73 20 70 6f 73 73 69 62 6c 79 20 61 76 6f  hus possibly avo
29f30 69 64 69 6e 67 20 74 68 65 20 6e 65 65 64 20 74  iding the need t
29f40 6f 0a 2a 2a 20 73 65 65 6b 20 61 6e 64 20 72 65  o.** seek and re
29f50 61 64 20 63 75 72 73 6f 72 20 50 33 2e 0a 2a 2f  ad cursor P3..*/
29f60 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 52  ./* Opcode: IdxR
29f70 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a  owid P1 P2 * * *
29f80 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
29f90 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20  P2]=rowid.**.** 
29fa0 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73  Write into regis
29fb0 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65  ter P2 an intege
29fc0 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6c  r which is the l
29fd0 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65  ast entry in the
29fe0 20 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20 74 68   record at.** th
29ff0 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e 64  e end of the ind
2a000 65 78 20 6b 65 79 20 70 6f 69 6e 74 65 64 20 74  ex key pointed t
2a010 6f 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 20  o by cursor P1. 
2a020 20 54 68 69 73 20 69 6e 74 65 67 65 72 20 73 68   This integer sh
2a030 6f 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65 20 72  ould be.** the r
2a040 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c  owid of the tabl
2a050 65 20 65 6e 74 72 79 20 74 6f 20 77 68 69 63 68  e entry to which
2a060 20 74 68 69 73 20 69 6e 64 65 78 20 65 6e 74 72   this index entr
2a070 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  y points..**.** 
2a080 53 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69 64 2c  See also: Rowid,
2a090 20 4d 61 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a   MakeRecord..*/.
2a0a0 63 61 73 65 20 4f 50 5f 53 65 65 6b 3a 0a 63 61  case OP_Seek:.ca
2a0b0 73 65 20 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20  se OP_IdxRowid: 
2a0c0 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  {              /
2a0d0 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62 65  * out2 */.  Vdbe
2a0e0 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20  Cursor *pC;     
2a0f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
2a100 65 20 50 31 20 69 6e 64 65 78 20 63 75 72 73 6f  e P1 index curso
2a110 72 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  r */.  VdbeCurso
2a120 72 20 2a 70 54 61 62 43 75 72 3b 20 20 20 20 20  r *pTabCur;     
2a130 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 32 20        /* The P2 
2a140 74 61 62 6c 65 20 63 75 72 73 6f 72 20 28 4f 50  table cursor (OP
2a150 5f 53 65 65 6b 20 6f 6e 6c 79 29 20 2a 2f 0a 20  _Seek only) */. 
2a160 20 69 36 34 20 72 6f 77 69 64 3b 20 20 20 20 20   i64 rowid;     
2a170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a180 2f 2a 20 52 6f 77 69 64 20 74 68 61 74 20 50 31  /* Rowid that P1
2a190 20 63 75 72 72 65 6e 74 20 70 6f 69 6e 74 73 20   current points 
2a1a0 74 6f 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28  to */..  assert(
2a1b0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
2a1c0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
2a1d0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
2a1e0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
2a1f0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
2a200 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2a210 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
2a220 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
2a230 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72  ert( pC->uc.pCur
2a240 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  sor!=0 );.  asse
2a250 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
2a260 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2a270 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
2a280 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  to==0 );.  asser
2a290 74 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  t( !pC->nullRow 
2a2a0 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
2a2b0 4f 50 5f 49 64 78 52 6f 77 69 64 20 29 3b 0a 0a  OP_IdxRowid );..
2a2c0 20 20 2f 2a 20 54 68 65 20 49 64 78 52 6f 77 69    /* The IdxRowi
2a2d0 64 20 61 6e 64 20 53 65 65 6b 20 6f 70 63 6f 64  d and Seek opcod
2a2e0 65 73 20 61 72 65 20 63 6f 6d 62 69 6e 65 64 20  es are combined 
2a2f0 62 65 63 61 75 73 65 20 6f 66 20 74 68 65 20 63  because of the c
2a300 6f 6d 6d 6f 6e 61 6c 69 74 79 0a 20 20 2a 2a 20  ommonality.  ** 
2a310 6f 66 20 73 71 6c 69 74 65 33 56 64 62 65 43 75  of sqlite3VdbeCu
2a320 72 73 6f 72 52 65 73 74 6f 72 65 28 29 20 61 6e  rsorRestore() an
2a330 64 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78  d sqlite3VdbeIdx
2a340 52 6f 77 69 64 28 29 2e 20 2a 2f 0a 20 20 72 63  Rowid(). */.  rc
2a350 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
2a360 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43 29 3b  rsorRestore(pC);
2a370 0a 0a 20 20 2f 2a 20 73 71 6c 69 74 65 33 56 62  ..  /* sqlite3Vb
2a380 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 29  eCursorRestore()
2a390 20 63 61 6e 20 6f 6e 6c 79 20 66 61 69 6c 20 69   can only fail i
2a3a0 66 20 74 68 65 20 72 65 63 6f 72 64 20 68 61 73  f the record has
2a3b0 20 62 65 65 6e 20 64 65 6c 65 74 65 64 0a 20 20   been deleted.  
2a3c0 2a 2a 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ** out from unde
2a3d0 72 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 54  r the cursor.  T
2a3e0 68 61 74 20 77 69 6c 6c 20 6e 65 76 65 72 20 68  hat will never h
2a3f0 61 70 70 65 6e 73 20 66 6f 72 20 61 6e 20 49 64  appens for an Id
2a400 78 52 6f 77 69 64 0a 20 20 2a 2a 20 6f 72 20 53  xRowid.  ** or S
2a410 65 65 6b 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20  eek opcode */.  
2a420 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51  if( NEVER(rc!=SQ
2a430 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20  LITE_OK) ) goto 
2a440 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2a450 6f 72 3b 0a 0a 20 20 69 66 28 20 21 70 43 2d 3e  or;..  if( !pC->
2a460 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 72  nullRow ){.    r
2a470 6f 77 69 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f  owid = 0;  /* No
2a480 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20  t needed.  Only 
2a490 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20  used to silence 
2a4a0 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  a warning. */.  
2a4b0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
2a4c0 62 65 49 64 78 52 6f 77 69 64 28 64 62 2c 20 70  beIdxRowid(db, p
2a4d0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26  C->uc.pCursor, &
2a4e0 72 6f 77 69 64 29 3b 0a 20 20 20 20 69 66 28 20  rowid);.    if( 
2a4f0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
2a500 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
2a510 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2a520 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 4f      }.    if( pO
2a530 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65  p->opcode==OP_Se
2a540 65 6b 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  ek ){.      asse
2a550 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 26  rt( pOp->p3>=0 &
2a560 26 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e 6e 43 75  & pOp->p3<p->nCu
2a570 72 73 6f 72 20 29 3b 0a 20 20 20 20 20 20 70 54  rsor );.      pT
2a580 61 62 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72  abCur = p->apCsr
2a590 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20  [pOp->p3];.     
2a5a0 20 61 73 73 65 72 74 28 20 70 54 61 62 43 75 72   assert( pTabCur
2a5b0 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  !=0 );.      ass
2a5c0 65 72 74 28 20 70 54 61 62 43 75 72 2d 3e 65 43  ert( pTabCur->eC
2a5d0 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
2a5e0 42 54 52 45 45 20 29 3b 0a 20 20 20 20 20 20 61  BTREE );.      a
2a5f0 73 73 65 72 74 28 20 70 54 61 62 43 75 72 2d 3e  ssert( pTabCur->
2a600 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  uc.pCursor!=0 );
2a610 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
2a620 54 61 62 43 75 72 2d 3e 69 73 54 61 62 6c 65 20  TabCur->isTable 
2a630 29 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75 72  );.      pTabCur
2a640 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20  ->nullRow = 0;. 
2a650 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e 6d 6f       pTabCur->mo
2a660 76 65 74 6f 54 61 72 67 65 74 20 3d 20 72 6f 77  vetoTarget = row
2a670 69 64 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75  id;.      pTabCu
2a680 72 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  r->deferredMovet
2a690 6f 20 3d 20 31 3b 0a 20 20 20 20 20 20 61 73 73  o = 1;.      ass
2a6a0 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
2a6b0 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 7c 7c  ==P4_INTARRAY ||
2a6c0 20 70 4f 70 2d 3e 70 34 2e 61 69 3d 3d 30 20 29   pOp->p4.ai==0 )
2a6d0 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75 72 2d  ;.      pTabCur-
2a6e0 3e 61 41 6c 74 4d 61 70 20 3d 20 70 4f 70 2d 3e  >aAltMap = pOp->
2a6f0 70 34 2e 61 69 3b 0a 20 20 20 20 20 20 70 54 61  p4.ai;.      pTa
2a700 62 43 75 72 2d 3e 70 41 6c 74 43 75 72 73 6f 72  bCur->pAltCursor
2a710 20 3d 20 70 43 3b 0a 20 20 20 20 7d 65 6c 73 65   = pC;.    }else
2a720 7b 0a 20 20 20 20 20 20 70 4f 75 74 20 3d 20 6f  {.      pOut = o
2a730 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
2a740 20 70 4f 70 29 3b 0a 20 20 20 20 20 20 70 4f 75   pOp);.      pOu
2a750 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69 64 3b 0a  t->u.i = rowid;.
2a760 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67        pOut->flag
2a770 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  s = MEM_Int;.   
2a780 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
2a790 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
2a7a0 6f 64 65 3d 3d 4f 50 5f 49 64 78 52 6f 77 69 64  ode==OP_IdxRowid
2a7b0 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   );.    sqlite3V
2a7c0 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 26 61  dbeMemSetNull(&a
2a7d0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20  Mem[pOp->p2]);. 
2a7e0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
2a7f0 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 45 20  * Opcode: IdxGE 
2a800 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
2a810 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
2a820 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54  r[P3@P4].**.** T
2a830 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76  he P4 register v
2a840 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20  alues beginning 
2a850 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20  with P3 form an 
2a860 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a  unpacked index .
2a870 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74  ** key that omit
2a880 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
2a890 59 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73  Y.  Compare this
2a8a0 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e   key value again
2a8b0 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a  st the index .**
2a8c0 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72   that P1 is curr
2a8d0 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74  ently pointing t
2a8e0 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20  o, ignoring the 
2a8f0 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52  PRIMARY KEY or R
2a900 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20  OWID .** fields 
2a910 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a  at the end..**.*
2a920 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65  * If the P1 inde
2a930 78 20 65 6e 74 72 79 20 69 73 20 67 72 65 61 74  x entry is great
2a940 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
2a950 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75   to the key valu
2a960 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74  e.** then jump t
2a970 6f 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65  o P2.  Otherwise
2a980 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
2a990 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
2a9a0 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ction..*/./* Opc
2a9b0 6f 64 65 3a 20 49 64 78 47 54 20 50 31 20 50 32  ode: IdxGT P1 P2
2a9c0 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
2a9d0 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
2a9e0 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  P4].**.** The P4
2a9f0 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73   register values
2aa00 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
2aa10 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  P3 form an unpac
2aa20 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65  ked index .** ke
2aa30 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65  y that omits the
2aa40 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 43   PRIMARY KEY.  C
2aa50 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
2aa60 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68  value against th
2aa70 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74  e index .** that
2aa80 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
2aa90 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
2aaa0 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41  noring the PRIMA
2aab0 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 20  RY KEY or ROWID 
2aac0 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74 20 74 68  .** fields at th
2aad0 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  e end..**.** If 
2aae0 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74  the P1 index ent
2aaf0 72 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ry is greater th
2ab00 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  an the key value
2ab10 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  .** then jump to
2ab20 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20   P2.  Otherwise 
2ab30 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
2ab40 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
2ab50 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
2ab60 64 65 3a 20 49 64 78 4c 54 20 50 31 20 50 32 20  de: IdxLT P1 P2 
2ab70 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
2ab80 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
2ab90 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  4].**.** The P4 
2aba0 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20  register values 
2abb0 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
2abc0 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  3 form an unpack
2abd0 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79  ed index .** key
2abe0 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20   that omits the 
2abf0 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52  PRIMARY KEY or R
2ac00 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74  OWID.  Compare t
2ac10 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67  his key value ag
2ac20 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64  ainst.** the ind
2ac30 65 78 20 74 68 61 74 20 50 31 20 69 73 20 63 75  ex that P1 is cu
2ac40 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
2ac50 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68   to, ignoring th
2ac60 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72  e PRIMARY KEY or
2ac70 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20 74 68 65  .** ROWID on the
2ac80 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a   P1 index..**.**
2ac90 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
2aca0 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74   entry is less t
2acb0 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
2acc0 65 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  e then jump to P
2acd0 32 2e 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 20  2..** Otherwise 
2ace0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
2acf0 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
2ad00 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
2ad10 64 65 3a 20 49 64 78 4c 45 20 50 31 20 50 32 20  de: IdxLE P1 P2 
2ad20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
2ad30 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
2ad40 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  4].**.** The P4 
2ad50 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20  register values 
2ad60 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
2ad70 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  3 form an unpack
2ad80 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79  ed index .** key
2ad90 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20   that omits the 
2ada0 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52  PRIMARY KEY or R
2adb0 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74  OWID.  Compare t
2adc0 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67  his key value ag
2add0 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64  ainst.** the ind
2ade0 65 78 20 74 68 61 74 20 50 31 20 69 73 20 63 75  ex that P1 is cu
2adf0 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
2ae00 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68   to, ignoring th
2ae10 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72  e PRIMARY KEY or
2ae20 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20 74 68 65  .** ROWID on the
2ae30 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a   P1 index..**.**
2ae40 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
2ae50 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74   entry is less t
2ae60 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
2ae70 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68  the key value th
2ae80 65 6e 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32  en jump.** to P2
2ae90 2e 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c  . Otherwise fall
2aea0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
2aeb0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
2aec0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  ..*/.case OP_Idx
2aed0 4c 45 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  LE:          /* 
2aee0 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
2aef0 49 64 78 47 54 3a 20 20 20 20 20 20 20 20 20 20  IdxGT:          
2af00 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
2af10 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20 20 20 20  OP_IdxLT:       
2af20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
2af30 73 65 20 4f 50 5f 49 64 78 47 45 3a 20 20 7b 20  se OP_IdxGE:  { 
2af40 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
2af50 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
2af60 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  C;.  int res;.  
2af70 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
2af80 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
2af90 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
2afa0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
2afb0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
2afc0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2afd0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
2afe0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72  assert( pC->isOr
2aff0 64 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72  dered );.  asser
2b000 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
2b010 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
2b020 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2b030 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 29 3b 0a  uc.pCursor!=0);.
2b040 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
2b050 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
2b060 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
2b070 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  ->p5==0 || pOp->
2b080 70 35 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72  p5==1 );.  asser
2b090 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
2b0a0 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 72 2e  P4_INT32 );.  r.
2b0b0 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70  pKeyInfo = pC->p
2b0c0 4b 65 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69  KeyInfo;.  r.nFi
2b0d0 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e  eld = (u16)pOp->
2b0e0 70 34 2e 69 3b 0a 20 20 69 66 28 20 70 4f 70 2d  p4.i;.  if( pOp-
2b0f0 3e 6f 70 63 6f 64 65 3c 4f 50 5f 49 64 78 4c 54  >opcode<OP_IdxLT
2b100 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
2b110 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2b120 49 64 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70  IdxLE || pOp->op
2b130 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29  code==OP_IdxGT )
2b140 3b 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f  ;.    r.default_
2b150 72 63 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c 73 65  rc = -1;.  }else
2b160 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
2b170 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
2b180 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  xGE || pOp->opco
2b190 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a  de==OP_IdxLT );.
2b1a0 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63      r.default_rc
2b1b0 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72 2e 61 4d   = 0;.  }.  r.aM
2b1c0 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
2b1d0 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  p3];.#ifdef SQLI
2b1e0 54 45 5f 44 45 42 55 47 0a 20 20 7b 20 69 6e 74  TE_DEBUG.  { int
2b1f0 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72   i; for(i=0; i<r
2b200 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73  .nField; i++) as
2b210 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
2b220 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20  (&r.aMem[i]) ); 
2b230 7d 0a 23 65 6e 64 69 66 0a 20 20 72 65 73 20 3d  }.#endif.  res =
2b240 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64   0;  /* Not need
2b250 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74  ed.  Only used t
2b260 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e  o silence a warn
2b270 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73  ing. */.  rc = s
2b280 71 6c 69 74 65 33 56 64 62 65 49 64 78 4b 65 79  qlite3VdbeIdxKey
2b290 43 6f 6d 70 61 72 65 28 64 62 2c 20 70 43 2c 20  Compare(db, pC, 
2b2a0 26 72 2c 20 26 72 65 73 29 3b 0a 20 20 61 73 73  &r, &res);.  ass
2b2b0 65 72 74 28 20 28 4f 50 5f 49 64 78 4c 45 26 31  ert( (OP_IdxLE&1
2b2c0 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29 20  )==(OP_IdxLT&1) 
2b2d0 26 26 20 28 4f 50 5f 49 64 78 47 45 26 31 29 3d  && (OP_IdxGE&1)=
2b2e0 3d 28 4f 50 5f 49 64 78 47 54 26 31 29 20 29 3b  =(OP_IdxGT&1) );
2b2f0 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 63  .  if( (pOp->opc
2b300 6f 64 65 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c  ode&1)==(OP_IdxL
2b310 54 26 31 29 20 29 7b 0a 20 20 20 20 61 73 73 65  T&1) ){.    asse
2b320 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
2b330 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f 70  =OP_IdxLE || pOp
2b340 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
2b350 4c 54 20 29 3b 0a 20 20 20 20 72 65 73 20 3d 20  LT );.    res = 
2b360 2d 72 65 73 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  -res;.  }else{. 
2b370 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
2b380 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45  opcode==OP_IdxGE
2b390 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
2b3a0 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20  =OP_IdxGT );.   
2b3b0 20 72 65 73 2b 2b 3b 0a 20 20 7d 0a 20 20 56 64   res++;.  }.  Vd
2b3c0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
2b3d0 73 3e 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 63  s>0,2);.  if( rc
2b3e0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2b3f0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66  e_to_error;.  if
2b400 28 20 72 65 73 3e 30 20 29 20 67 6f 74 6f 20 6a  ( res>0 ) goto j
2b410 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65  ump_to_p2;.  bre
2b420 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2b430 3a 20 44 65 73 74 72 6f 79 20 50 31 20 50 32 20  : Destroy P1 P2 
2b440 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c  P3 * *.**.** Del
2b450 65 74 65 20 61 6e 20 65 6e 74 69 72 65 20 64 61  ete an entire da
2b460 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
2b470 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74  index whose root
2b480 20 70 61 67 65 20 69 6e 20 74 68 65 20 64 61 74   page in the dat
2b490 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 20 69 73  abase.** file is
2b4a0 20 67 69 76 65 6e 20 62 79 20 50 31 2e 0a 2a 2a   given by P1..**
2b4b0 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65  .** The table be
2b4c0 69 6e 67 20 64 65 73 74 72 6f 79 65 64 20 69 73  ing destroyed is
2b4d0 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
2b4e0 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 33  abase file if P3
2b4f0 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 33 3d 3d  ==0.  If.** P3==
2b500 31 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  1 then the table
2b510 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20   to be clear is 
2b520 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79  in the auxiliary
2b530 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a   database file.*
2b540 2a 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74  * that is used t
2b550 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63  o store tables c
2b560 72 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41  reate using CREA
2b570 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42  TE TEMPORARY TAB
2b580 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55 54  LE..**.** If AUT
2b590 4f 56 41 43 55 55 4d 20 69 73 20 65 6e 61 62 6c  OVACUUM is enabl
2b5a0 65 64 20 74 68 65 6e 20 69 74 20 69 73 20 70 6f  ed then it is po
2b5b0 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f 74  ssible that anot
2b5c0 68 65 72 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a  her root page.**
2b5d0 20 6d 69 67 68 74 20 62 65 20 6d 6f 76 65 64 20   might be moved 
2b5e0 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c 79 20 64  into the newly d
2b5f0 65 6c 65 74 65 64 20 72 6f 6f 74 20 70 61 67 65  eleted root page
2b600 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
2b610 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61  p all.** root pa
2b620 67 65 73 20 63 6f 6e 74 69 67 75 6f 75 73 20 61  ges contiguous a
2b630 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  t the beginning 
2b640 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  of the database.
2b650 20 20 54 68 65 20 66 6f 72 6d 65 72 0a 2a 2a 20    The former.** 
2b660 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 6f  value of the roo
2b670 74 20 70 61 67 65 20 74 68 61 74 20 6d 6f 76 65  t page that move
2b680 64 20 2d 20 69 74 73 20 76 61 6c 75 65 20 62 65  d - its value be
2b690 66 6f 72 65 20 74 68 65 20 6d 6f 76 65 20 6f 63  fore the move oc
2b6a0 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69 73 20 73  curred -.** is s
2b6b0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
2b6c0 72 20 50 32 2e 20 20 49 66 20 6e 6f 20 70 61 67  r P2.  If no pag
2b6d0 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e 74 20 77  e .** movement w
2b6e0 61 73 20 72 65 71 75 69 72 65 64 20 28 62 65 63  as required (bec
2b6f0 61 75 73 65 20 74 68 65 20 74 61 62 6c 65 20 62  ause the table b
2b700 65 69 6e 67 20 64 72 6f 70 70 65 64 20 77 61 73  eing dropped was
2b710 20 61 6c 72 65 61 64 79 20 0a 2a 2a 20 74 68 65   already .** the
2b720 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74 68 65   last one in the
2b730 20 64 61 74 61 62 61 73 65 29 20 74 68 65 6e 20   database) then 
2b740 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64  a zero is stored
2b750 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
2b760 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55  .** If AUTOVACUU
2b770 4d 20 69 73 20 64 69 73 61 62 6c 65 64 20 74 68  M is disabled th
2b780 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f  en a zero is sto
2b790 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
2b7a0 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  P2..**.** See al
2b7b0 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63 61 73  so: Clear.*/.cas
2b7c0 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a 20 7b 20  e OP_Destroy: { 
2b7d0 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
2b7e0 20 69 6e 74 20 69 4d 6f 76 65 64 3b 0a 20 20 69   int iMoved;.  i
2b7f0 6e 74 20 69 44 62 3b 0a 0a 20 20 61 73 73 65 72  nt iDb;..  asser
2b800 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
2b810 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
2b820 4f 70 2d 3e 70 31 3e 31 20 29 3b 0a 20 20 70 4f  Op->p1>1 );.  pO
2b830 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
2b840 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70  ase(p, pOp);.  p
2b850 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
2b860 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28 20 64 62 2d  _Null;.  if( db-
2b870 3e 6e 56 64 62 65 52 65 61 64 20 3e 20 64 62 2d  >nVdbeRead > db-
2b880 3e 6e 56 44 65 73 74 72 6f 79 2b 31 20 29 7b 0a  >nVDestroy+1 ){.
2b890 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
2b8a0 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d 3e 65  LOCKED;.    p->e
2b8b0 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f 45 5f  rrorAction = OE_
2b8c0 41 62 6f 72 74 3b 0a 20 20 20 20 67 6f 74 6f 20  Abort;.    goto 
2b8d0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2b8e0 6f 72 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  or;.  }else{.   
2b8f0 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a   iDb = pOp->p3;.
2b900 20 20 20 20 61 73 73 65 72 74 28 20 44 62 4d 61      assert( DbMa
2b910 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
2b920 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20 20  ask, iDb) );.   
2b930 20 69 4d 6f 76 65 64 20 3d 20 30 3b 20 20 2f 2a   iMoved = 0;  /*
2b940 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e   Not needed.  On
2b950 6c 79 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20  ly to silence a 
2b960 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20  warning. */.    
2b970 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2b980 65 44 72 6f 70 54 61 62 6c 65 28 64 62 2d 3e 61  eDropTable(db->a
2b990 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 70 4f 70  Db[iDb].pBt, pOp
2b9a0 2d 3e 70 31 2c 20 26 69 4d 6f 76 65 64 29 3b 0a  ->p1, &iMoved);.
2b9b0 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
2b9c0 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70  = MEM_Int;.    p
2b9d0 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f 76 65  Out->u.i = iMove
2b9e0 64 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  d;.    if( rc ) 
2b9f0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2ba00 6f 5f 65 72 72 6f 72 3b 0a 23 69 66 6e 64 65 66  o_error;.#ifndef
2ba10 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
2ba20 4f 56 41 43 55 55 4d 0a 20 20 20 20 69 66 28 20  OVACUUM.    if( 
2ba30 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20 20 20  iMoved!=0 ){.   
2ba40 20 20 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61     sqlite3RootPa
2ba50 67 65 4d 6f 76 65 64 28 64 62 2c 20 69 44 62 2c  geMoved(db, iDb,
2ba60 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31   iMoved, pOp->p1
2ba70 29 3b 0a 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  );.      /* All 
2ba80 4f 50 5f 44 65 73 74 72 6f 79 20 6f 70 65 72 61  OP_Destroy opera
2ba90 74 69 6f 6e 73 20 6f 63 63 75 72 20 6f 6e 20 74  tions occur on t
2baa0 68 65 20 73 61 6d 65 20 62 74 72 65 65 20 2a 2f  he same btree */
2bab0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72  .      assert( r
2bac0 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c  esetSchemaOnFaul
2bad0 74 3d 3d 30 20 7c 7c 20 72 65 73 65 74 53 63 68  t==0 || resetSch
2bae0 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69 44 62 2b  emaOnFault==iDb+
2baf0 31 20 29 3b 0a 20 20 20 20 20 20 72 65 73 65 74  1 );.      reset
2bb00 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20  SchemaOnFault = 
2bb10 69 44 62 2b 31 3b 0a 20 20 20 20 7d 0a 23 65 6e  iDb+1;.    }.#en
2bb20 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  dif.  }.  break;
2bb30 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
2bb40 6c 65 61 72 20 50 31 20 50 32 20 50 33 0a 2a 2a  lear P1 P2 P3.**
2bb50 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63  .** Delete all c
2bb60 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20 64  ontents of the d
2bb70 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72  atabase table or
2bb80 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f   index whose roo
2bb90 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74 68 65  t page.** in the
2bba0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
2bbb0 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e 20 20  s given by P1.  
2bbc0 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65 73 74  But, unlike Dest
2bbd0 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72  roy, do not.** r
2bbe0 65 6d 6f 76 65 20 74 68 65 20 74 61 62 6c 65 20  emove the table 
2bbf0 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d 20 74 68  or index from th
2bc00 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
2bc10 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65  .**.** The table
2bc20 20 62 65 69 6e 67 20 63 6c 65 61 72 20 69 73 20   being clear is 
2bc30 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
2bc40 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 32 3d  base file if P2=
2bc50 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d 3d 31  =0.  If.** P2==1
2bc60 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
2bc70 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20 69  to be clear is i
2bc80 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20  n the auxiliary 
2bc90 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a  database file.**
2bca0 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f   that is used to
2bcb0 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72   store tables cr
2bcc0 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41 54  eate using CREAT
2bcd0 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c  E TEMPORARY TABL
2bce0 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  E..**.** If the 
2bcf0 50 33 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d  P3 value is non-
2bd00 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 74  zero, then the t
2bd10 61 62 6c 65 20 72 65 66 65 72 72 65 64 20 74 6f  able referred to
2bd20 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a 2a 20 69   must be an.** i
2bd30 6e 74 6b 65 79 20 74 61 62 6c 65 20 28 61 6e 20  ntkey table (an 
2bd40 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  SQL table, not a
2bd50 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20 74 68 69  n index). In thi
2bd60 73 20 63 61 73 65 20 74 68 65 20 72 6f 77 20 63  s case the row c
2bd70 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e 74 20  hange .** count 
2bd80 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62  is incremented b
2bd90 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  y the number of 
2bda0 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c  rows in the tabl
2bdb0 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e  e being cleared.
2bdc0 20 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 67 72   .** If P3 is gr
2bdd0 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c  eater than zero,
2bde0 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20   then the value 
2bdf0 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
2be00 65 72 20 50 33 20 69 73 0a 2a 2a 20 61 6c 73 6f  er P3 is.** also
2be10 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20   incremented by 
2be20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
2be30 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ws in the table 
2be40 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 0a 2a  being cleared..*
2be50 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 44  *.** See also: D
2be60 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f  estroy.*/.case O
2be70 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20 69 6e 74  P_Clear: {.  int
2be80 20 6e 43 68 61 6e 67 65 3b 0a 20 0a 20 20 6e 43   nChange;. .  nC
2be90 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61 73 73  hange = 0;.  ass
2bea0 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
2beb0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
2bec0 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
2bed0 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70  treeMask, pOp->p
2bee0 32 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  2) );.  rc = sql
2bef0 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 54 61  ite3BtreeClearTa
2bf00 62 6c 65 28 0a 20 20 20 20 20 20 64 62 2d 3e 61  ble(.      db->a
2bf10 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c  Db[pOp->p2].pBt,
2bf20 20 70 4f 70 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e   pOp->p1, (pOp->
2bf30 70 33 20 3f 20 26 6e 43 68 61 6e 67 65 20 3a 20  p3 ? &nChange : 
2bf40 30 29 0a 20 20 29 3b 0a 20 20 69 66 28 20 70 4f  0).  );.  if( pO
2bf50 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 70 2d 3e  p->p3 ){.    p->
2bf60 6e 43 68 61 6e 67 65 20 2b 3d 20 6e 43 68 61 6e  nChange += nChan
2bf70 67 65 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  ge;.    if( pOp-
2bf80 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20 20 20 61  >p3>0 ){.      a
2bf90 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
2bfa0 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  d(&aMem[pOp->p3]
2bfb0 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62  ) );.      memAb
2bfc0 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26  outToChange(p, &
2bfd0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a  aMem[pOp->p3]);.
2bfe0 20 20 20 20 20 20 61 4d 65 6d 5b 70 4f 70 2d 3e        aMem[pOp->
2bff0 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68 61 6e  p3].u.i += nChan
2c000 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ge;.    }.  }.  
2c010 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
2c020 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2c030 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2c040 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 53 6f   Opcode: ResetSo
2c050 72 74 65 72 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  rter P1 * * * *.
2c060 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c  **.** Delete all
2c070 20 63 6f 6e 74 65 6e 74 73 20 66 72 6f 6d 20 74   contents from t
2c080 68 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62  he ephemeral tab
2c090 6c 65 20 6f 72 20 73 6f 72 74 65 72 0a 2a 2a 20  le or sorter.** 
2c0a0 74 68 61 74 20 69 73 20 6f 70 65 6e 20 6f 6e 20  that is open on 
2c0b0 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 0a 2a 2a  cursor P1..**.**
2c0c0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f 6e 6c   This opcode onl
2c0d0 79 20 77 6f 72 6b 73 20 66 6f 72 20 63 75 72 73  y works for curs
2c0e0 6f 72 73 20 75 73 65 64 20 66 6f 72 20 73 6f 72  ors used for sor
2c0f0 74 69 6e 67 20 61 6e 64 0a 2a 2a 20 6f 70 65 6e  ting and.** open
2c100 65 64 20 77 69 74 68 20 4f 50 5f 4f 70 65 6e 45  ed with OP_OpenE
2c110 70 68 65 6d 65 72 61 6c 20 6f 72 20 4f 50 5f 53  phemeral or OP_S
2c120 6f 72 74 65 72 4f 70 65 6e 2e 0a 2a 2f 0a 63 61  orterOpen..*/.ca
2c130 73 65 20 4f 50 5f 52 65 73 65 74 53 6f 72 74 65  se OP_ResetSorte
2c140 72 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  r: {.  VdbeCurso
2c150 72 20 2a 70 43 3b 0a 20 0a 20 20 61 73 73 65 72  r *pC;. .  asser
2c160 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
2c170 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
2c180 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
2c190 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
2c1a0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
2c1b0 20 29 3b 0a 20 20 69 66 28 20 69 73 53 6f 72 74   );.  if( isSort
2c1c0 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20 73 71  er(pC) ){.    sq
2c1d0 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52  lite3VdbeSorterR
2c1e0 65 73 65 74 28 64 62 2c 20 70 43 2d 3e 75 63 2e  eset(db, pC->uc.
2c1f0 70 53 6f 72 74 65 72 29 3b 0a 20 20 7d 65 6c 73  pSorter);.  }els
2c200 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
2c210 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
2c220 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
2c230 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
2c240 45 70 68 65 6d 65 72 61 6c 20 29 3b 0a 20 20 20  Ephemeral );.   
2c250 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2c260 65 65 43 6c 65 61 72 54 61 62 6c 65 4f 66 43 75  eeClearTableOfCu
2c270 72 73 6f 72 28 70 43 2d 3e 75 63 2e 70 43 75 72  rsor(pC->uc.pCur
2c280 73 6f 72 29 3b 0a 20 20 20 20 69 66 28 20 72 63  sor);.    if( rc
2c290 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2c2a0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
2c2b0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2c2c0 70 63 6f 64 65 3a 20 43 72 65 61 74 65 54 61 62  pcode: CreateTab
2c2d0 6c 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  le P1 P2 * * *.*
2c2e0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
2c2f0 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31 0a 2a 2a  ]=root iDb=P1.**
2c300 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e  .** Allocate a n
2c310 65 77 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20  ew table in the 
2c320 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
2c330 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69  le if P1==0 or i
2c340 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61  n the.** auxilia
2c350 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
2c360 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20   if P1==1 or in 
2c370 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61  an attached data
2c380 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e  base if.** P1>1.
2c390 20 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74    Write the root
2c3a0 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20   page number of 
2c3b0 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e  the new table in
2c3c0 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  to.** register P
2c3d0 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66  2.**.** The diff
2c3e0 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 61  erence between a
2c3f0 20 74 61 62 6c 65 20 61 6e 64 20 61 6e 20 69 6e   table and an in
2c400 64 65 78 20 69 73 20 74 68 69 73 3a 20 20 41 20  dex is this:  A 
2c410 74 61 62 6c 65 20 6d 75 73 74 0a 2a 2a 20 68 61  table must.** ha
2c420 76 65 20 61 20 34 2d 62 79 74 65 20 69 6e 74 65  ve a 4-byte inte
2c430 67 65 72 20 6b 65 79 20 61 6e 64 20 63 61 6e 20  ger key and can 
2c440 68 61 76 65 20 61 72 62 69 74 72 61 72 79 20 64  have arbitrary d
2c450 61 74 61 2e 20 20 41 6e 20 69 6e 64 65 78 0a 2a  ata.  An index.*
2c460 2a 20 68 61 73 20 61 6e 20 61 72 62 69 74 72 61  * has an arbitra
2c470 72 79 20 6b 65 79 20 62 75 74 20 6e 6f 20 64 61  ry key but no da
2c480 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ta..**.** See al
2c490 73 6f 3a 20 43 72 65 61 74 65 49 6e 64 65 78 0a  so: CreateIndex.
2c4a0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72  */./* Opcode: Cr
2c4b0 65 61 74 65 49 6e 64 65 78 20 50 31 20 50 32 20  eateIndex P1 P2 
2c4c0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
2c4d0 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44  s: r[P2]=root iD
2c4e0 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63  b=P1.**.** Alloc
2c4f0 61 74 65 20 61 20 6e 65 77 20 69 6e 64 65 78 20  ate a new index 
2c500 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
2c510 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d  base file if P1=
2c520 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20  =0 or in the.** 
2c530 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
2c540 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31  se file if P1==1
2c550 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68   or in an attach
2c560 65 64 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a  ed database if.*
2c570 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74  * P1>1.  Write t
2c580 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  he root page num
2c590 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74  ber of the new t
2c5a0 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67  able into.** reg
2c5b0 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
2c5c0 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  See documentatio
2c5d0 6e 20 6f 6e 20 4f 50 5f 43 72 65 61 74 65 54 61  n on OP_CreateTa
2c5e0 62 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ble for addition
2c5f0 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
2c600 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74  */.case OP_Creat
2c610 65 49 6e 64 65 78 3a 20 20 20 20 20 20 20 20 20  eIndex:         
2c620 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 63 61     /* out2 */.ca
2c630 73 65 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  se OP_CreateTabl
2c640 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a  e: {          /*
2c650 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 70   out2 */.  int p
2c660 67 6e 6f 3b 0a 20 20 69 6e 74 20 66 6c 61 67 73  gno;.  int flags
2c670 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20  ;.  Db *pDb;..  
2c680 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
2c690 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
2c6a0 20 70 67 6e 6f 20 3d 20 30 3b 0a 20 20 61 73 73   pgno = 0;.  ass
2c6b0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2c6c0 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
2c6d0 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
2c6e0 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
2c6f0 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31  reeMask, pOp->p1
2c700 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
2c710 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
2c720 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  .  pDb = &db->aD
2c730 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  b[pOp->p1];.  as
2c740 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d  sert( pDb->pBt!=
2c750 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  0 );.  if( pOp->
2c760 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 72 65 61 74  opcode==OP_Creat
2c770 65 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a  eTable ){.    /*
2c780 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49   flags = BTREE_I
2c790 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20 20 20 66 6c  NTKEY; */.    fl
2c7a0 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b  ags = BTREE_INTK
2c7b0 45 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  EY;.  }else{.   
2c7c0 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 42   flags = BTREE_B
2c7d0 4c 4f 42 4b 45 59 3b 0a 20 20 7d 0a 20 20 72 63  LOBKEY;.  }.  rc
2c7e0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
2c7f0 72 65 61 74 65 54 61 62 6c 65 28 70 44 62 2d 3e  reateTable(pDb->
2c800 70 42 74 2c 20 26 70 67 6e 6f 2c 20 66 6c 61 67  pBt, &pgno, flag
2c810 73 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  s);.  if( rc ) g
2c820 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2c830 5f 65 72 72 6f 72 3b 0a 20 20 70 4f 75 74 2d 3e  _error;.  pOut->
2c840 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20 20 62 72  u.i = pgno;.  br
2c850 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2c860 65 3a 20 50 61 72 73 65 53 63 68 65 6d 61 20 50  e: ParseSchema P
2c870 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
2c880 20 52 65 61 64 20 61 6e 64 20 70 61 72 73 65 20   Read and parse 
2c890 61 6c 6c 20 65 6e 74 72 69 65 73 20 66 72 6f 6d  all entries from
2c8a0 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 53 54   the SQLITE_MAST
2c8b0 45 52 20 74 61 62 6c 65 20 6f 66 20 64 61 74 61  ER table of data
2c8c0 62 61 73 65 20 50 31 0a 2a 2a 20 74 68 61 74 20  base P1.** that 
2c8d0 6d 61 74 63 68 20 74 68 65 20 57 48 45 52 45 20  match the WHERE 
2c8e0 63 6c 61 75 73 65 20 50 34 2e 20 0a 2a 2a 0a 2a  clause P4. .**.*
2c8f0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e  * This opcode in
2c900 76 6f 6b 65 73 20 74 68 65 20 70 61 72 73 65 72  vokes the parser
2c910 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77   to create a new
2c920 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
2c930 2c 0a 2a 2a 20 74 68 65 6e 20 72 75 6e 73 20 74  ,.** then runs t
2c940 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d  he new virtual m
2c950 61 63 68 69 6e 65 2e 20 20 49 74 20 69 73 20 74  achine.  It is t
2c960 68 75 73 20 61 20 72 65 2d 65 6e 74 72 61 6e 74  hus a re-entrant
2c970 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65   opcode..*/.case
2c980 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61 3a   OP_ParseSchema:
2c990 20 7b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20   {.  int iDb;.  
2c9a0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 61 73  const char *zMas
2c9b0 74 65 72 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71  ter;.  char *zSq
2c9c0 6c 3b 0a 20 20 49 6e 69 74 44 61 74 61 20 69 6e  l;.  InitData in
2c9d0 69 74 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e  itData;..  /* An
2c9e0 79 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  y prepared state
2c9f0 6d 65 6e 74 20 74 68 61 74 20 69 6e 76 6f 6b 65  ment that invoke
2ca00 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69  s this opcode wi
2ca10 6c 6c 20 68 6f 6c 64 20 6d 75 74 65 78 65 73 0a  ll hold mutexes.
2ca20 20 20 2a 2a 20 6f 6e 20 65 76 65 72 79 20 62 74    ** on every bt
2ca30 72 65 65 2e 20 20 54 68 69 73 20 69 73 20 61 20  ree.  This is a 
2ca40 70 72 65 72 65 71 75 69 73 69 74 65 20 66 6f 72  prerequisite for
2ca50 20 69 6e 76 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20   invoking .  ** 
2ca60 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
2ca70 61 63 6b 28 29 2e 0a 20 20 2a 2f 0a 23 69 66 64  ack()..  */.#ifd
2ca80 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
2ca90 20 20 66 6f 72 28 69 44 62 3d 30 3b 20 69 44 62    for(iDb=0; iDb
2caa0 3c 64 62 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b 29  <db->nDb; iDb++)
2cab0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 44  {.    assert( iD
2cac0 62 3d 3d 31 20 7c 7c 20 73 71 6c 69 74 65 33 42  b==1 || sqlite3B
2cad0 74 72 65 65 48 6f 6c 64 73 4d 75 74 65 78 28 64  treeHoldsMutex(d
2cae0 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 29  b->aDb[iDb].pBt)
2caf0 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a   );.  }.#endif..
2cb00 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b    iDb = pOp->p1;
2cb10 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d  .  assert( iDb>=
2cb20 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62  0 && iDb<db->nDb
2cb30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
2cb40 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20  HasProperty(db, 
2cb50 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f  iDb, DB_SchemaLo
2cb60 61 64 65 64 29 20 29 3b 0a 20 20 2f 2a 20 55 73  aded) );.  /* Us
2cb70 65 64 20 74 6f 20 62 65 20 61 20 63 6f 6e 64 69  ed to be a condi
2cb80 74 69 6f 6e 61 6c 20 2a 2f 20 7b 0a 20 20 20 20  tional */ {.    
2cb90 7a 4d 61 73 74 65 72 20 3d 20 53 43 48 45 4d 41  zMaster = SCHEMA
2cba0 5f 54 41 42 4c 45 28 69 44 62 29 3b 0a 20 20 20  _TABLE(iDb);.   
2cbb0 20 69 6e 69 74 44 61 74 61 2e 64 62 20 3d 20 64   initData.db = d
2cbc0 62 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e  b;.    initData.
2cbd0 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  iDb = pOp->p1;. 
2cbe0 20 20 20 69 6e 69 74 44 61 74 61 2e 70 7a 45 72     initData.pzEr
2cbf0 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d  rMsg = &p->zErrM
2cc00 73 67 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73  sg;.    zSql = s
2cc10 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62  qlite3MPrintf(db
2cc20 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43 54  ,.       "SELECT
2cc30 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c   name, rootpage,
2cc40 20 73 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25   sql FROM '%q'.%
2cc50 73 20 57 48 45 52 45 20 25 73 20 4f 52 44 45 52  s WHERE %s ORDER
2cc60 20 42 59 20 72 6f 77 69 64 22 2c 0a 20 20 20 20   BY rowid",.    
2cc70 20 20 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e     db->aDb[iDb].
2cc80 7a 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20  zName, zMaster, 
2cc90 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20  pOp->p4.z);.    
2cca0 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20  if( zSql==0 ){. 
2ccb0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
2ccc0 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 3b 0a 20 20 20  _NOMEM_BKPT;.   
2ccd0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73   }else{.      as
2cce0 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62  sert( db->init.b
2ccf0 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  usy==0 );.      
2cd00 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20  db->init.busy = 
2cd10 31 3b 0a 20 20 20 20 20 20 69 6e 69 74 44 61 74  1;.      initDat
2cd20 61 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  a.rc = SQLITE_OK
2cd30 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
2cd40 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65  !db->mallocFaile
2cd50 64 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  d );.      rc = 
2cd60 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c  sqlite3_exec(db,
2cd70 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33 49 6e   zSql, sqlite3In
2cd80 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69  itCallback, &ini
2cd90 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 20  tData, 0);.     
2cda0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
2cdb0 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69 74 44 61  OK ) rc = initDa
2cdc0 74 61 2e 72 63 3b 0a 20 20 20 20 20 20 73 71 6c  ta.rc;.      sql
2cdd0 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a  ite3DbFree(db, z
2cde0 53 71 6c 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  Sql);.      db->
2cdf0 69 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20  init.busy = 0;. 
2ce00 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72     }.  }.  if( r
2ce10 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  c ){.    sqlite3
2ce20 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f  ResetAllSchemasO
2ce30 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b  fConnection(db);
2ce40 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
2ce50 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20  ITE_NOMEM ){.   
2ce60 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
2ce70 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 61      }.    goto a
2ce80 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2ce90 72 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20  r;.  }.  break; 
2cea0 20 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65   .}..#if !define
2ceb0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e  d(SQLITE_OMIT_AN
2cec0 41 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65  ALYZE)./* Opcode
2ced0 3a 20 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20 50  : LoadAnalysis P
2cee0 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
2cef0 52 65 61 64 20 74 68 65 20 73 71 6c 69 74 65 5f  Read the sqlite_
2cf00 73 74 61 74 31 20 74 61 62 6c 65 20 66 6f 72 20  stat1 table for 
2cf10 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20  database P1 and 
2cf20 6c 6f 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74  load the content
2cf30 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c  .** of that tabl
2cf40 65 20 69 6e 74 6f 20 74 68 65 20 69 6e 74 65 72  e into the inter
2cf50 6e 61 6c 20 69 6e 64 65 78 20 68 61 73 68 20 74  nal index hash t
2cf60 61 62 6c 65 2e 20 20 54 68 69 73 20 77 69 6c 6c  able.  This will
2cf70 20 63 61 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e   cause.** the an
2cf80 61 6c 79 73 69 73 20 74 6f 20 62 65 20 75 73 65  alysis to be use
2cf90 64 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67  d when preparing
2cfa0 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20   all subsequent 
2cfb0 71 75 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65  queries..*/.case
2cfc0 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73   OP_LoadAnalysis
2cfd0 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
2cfe0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
2cff0 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
2d000 20 72 63 20 3d 20 73 71 6c 69 74 65 33 41 6e 61   rc = sqlite3Ana
2d010 6c 79 73 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f  lysisLoad(db, pO
2d020 70 2d 3e 70 31 29 3b 0a 20 20 69 66 28 20 72 63  p->p1);.  if( rc
2d030 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2d040 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
2d050 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69 66 20  eak;  .}.#endif 
2d060 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  /* !defined(SQLI
2d070 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29  TE_OMIT_ANALYZE)
2d080 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
2d090 44 72 6f 70 54 61 62 6c 65 20 50 31 20 2a 20 2a  DropTable P1 * *
2d0a0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f   P4 *.**.** Remo
2d0b0 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ve the internal 
2d0c0 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61  (in-memory) data
2d0d0 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74   structures that
2d0e0 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65   describe.** the
2d0f0 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 50 34 20   table named P4 
2d100 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
2d110 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20   This is called 
2d120 61 66 74 65 72 20 61 20 74 61 62 6c 65 0a 2a 2a  after a table.**
2d130 20 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d   is dropped from
2d140 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65   disk (using the
2d150 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29   Destroy opcode)
2d160 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
2d170 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e  p .** the intern
2d180 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  al representatio
2d190 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65  n of the.** sche
2d1a0 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69  ma consistent wi
2d1b0 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69  th what is on di
2d1c0 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  sk..*/.case OP_D
2d1d0 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20 73 71  ropTable: {.  sq
2d1e0 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
2d1f0 6c 65 74 65 54 61 62 6c 65 28 64 62 2c 20 70 4f  leteTable(db, pO
2d200 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
2d210 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
2d220 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49 6e  * Opcode: DropIn
2d230 64 65 78 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  dex P1 * * P4 *.
2d240 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65  **.** Remove the
2d250 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65   internal (in-me
2d260 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63  mory) data struc
2d270 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72  tures that descr
2d280 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78  ibe.** the index
2d290 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74   named P4 in dat
2d2a0 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20  abase P1.  This 
2d2b0 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20  is called after 
2d2c0 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20 64  an index.** is d
2d2d0 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b  ropped from disk
2d2e0 20 28 75 73 69 6e 67 20 74 68 65 20 44 65 73 74   (using the Dest
2d2f0 72 6f 79 20 6f 70 63 6f 64 65 29 0a 2a 2a 20 69  roy opcode).** i
2d300 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20  n order to keep 
2d310 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70  the internal rep
2d320 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
2d330 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e  he.** schema con
2d340 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61  sistent with wha
2d350 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f  t is on disk..*/
2d360 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 49 6e 64  .case OP_DropInd
2d370 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55  ex: {.  sqlite3U
2d380 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e  nlinkAndDeleteIn
2d390 64 65 78 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  dex(db, pOp->p1,
2d3a0 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62   pOp->p4.z);.  b
2d3b0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2d3c0 64 65 3a 20 44 72 6f 70 54 72 69 67 67 65 72 20  de: DropTrigger 
2d3d0 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
2d3e0 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74  * Remove the int
2d3f0 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79  ernal (in-memory
2d400 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  ) data structure
2d410 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a  s that describe.
2d420 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72 20 6e  ** the trigger n
2d430 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62  amed P4 in datab
2d440 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73  ase P1.  This is
2d450 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20   called after a 
2d460 74 72 69 67 67 65 72 0a 2a 2a 20 69 73 20 64 72  trigger.** is dr
2d470 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20  opped from disk 
2d480 28 75 73 69 6e 67 20 74 68 65 20 44 65 73 74 72  (using the Destr
2d490 6f 79 20 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72  oy opcode) in or
2d4a0 64 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20  der to keep .** 
2d4b0 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70  the internal rep
2d4c0 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
2d4d0 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e  he.** schema con
2d4e0 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61  sistent with wha
2d4f0 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f  t is on disk..*/
2d500 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 72 69  .case OP_DropTri
2d510 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65  gger: {.  sqlite
2d520 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
2d530 54 72 69 67 67 65 72 28 64 62 2c 20 70 4f 70 2d  Trigger(db, pOp-
2d540 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  >p1, pOp->p4.z);
2d550 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69  .  break;.}...#i
2d560 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2d570 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  T_INTEGRITY_CHEC
2d580 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74  K./* Opcode: Int
2d590 65 67 72 69 74 79 43 6b 20 50 31 20 50 32 20 50  egrityCk P1 P2 P
2d5a0 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f  3 P4 P5.**.** Do
2d5b0 20 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66 20   an analysis of 
2d5c0 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f 70  the currently op
2d5d0 65 6e 20 64 61 74 61 62 61 73 65 2e 20 20 53 74  en database.  St
2d5e0 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74  ore in.** regist
2d5f0 65 72 20 50 31 20 74 68 65 20 74 65 78 74 20 6f  er P1 the text o
2d600 66 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  f an error messa
2d610 67 65 20 64 65 73 63 72 69 62 69 6e 67 20 61 6e  ge describing an
2d620 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49  y problems..** I
2d630 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61 72  f no problems ar
2d640 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20 61  e found, store a
2d650 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73 74 65   NULL in registe
2d660 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  r P1..**.** The 
2d670 72 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74  register P3 cont
2d680 61 69 6e 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  ains the maximum
2d690 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77   number of allow
2d6a0 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74  ed errors..** At
2d6b0 20 6d 6f 73 74 20 72 65 67 28 50 33 29 20 65 72   most reg(P3) er
2d6c0 72 6f 72 73 20 77 69 6c 6c 20 62 65 20 72 65 70  rors will be rep
2d6d0 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68  orted..** In oth
2d6e0 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 61 6e  er words, the an
2d6f0 61 6c 79 73 69 73 20 73 74 6f 70 73 20 61 73 20  alysis stops as 
2d700 73 6f 6f 6e 20 61 73 20 72 65 67 28 50 31 29 20  soon as reg(P1) 
2d710 65 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73  errors are .** s
2d720 65 65 6e 2e 20 20 52 65 67 28 50 31 29 20 69 73  een.  Reg(P1) is
2d730 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74 68   updated with th
2d740 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  e number of erro
2d750 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a  rs remaining..**
2d760 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67  .** The root pag
2d770 65 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c  e numbers of all
2d780 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64   tables in the d
2d790 61 74 61 62 61 73 65 20 61 72 65 20 69 6e 74 65  atabase are inte
2d7a0 67 65 72 73 0a 2a 2a 20 73 74 6f 72 65 64 20 69  gers.** stored i
2d7b0 6e 20 50 34 5f 49 4e 54 41 52 52 41 59 20 61 72  n P4_INTARRAY ar
2d7c0 67 75 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66  gument..**.** If
2d7d0 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P5 is not zero,
2d7e0 20 74 68 65 20 63 68 65 63 6b 20 69 73 20 64 6f   the check is do
2d7f0 6e 65 20 6f 6e 20 74 68 65 20 61 75 78 69 6c 69  ne on the auxili
2d800 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  ary database.** 
2d810 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61  file, not the ma
2d820 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
2d830 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
2d840 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20 69  ode is used to i
2d850 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 69 6e 74  mplement the int
2d860 65 67 72 69 74 79 5f 63 68 65 63 6b 20 70 72 61  egrity_check pra
2d870 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  gma..*/.case OP_
2d880 49 6e 74 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20  IntegrityCk: {. 
2d890 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20   int nRoot;     
2d8a0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61   /* Number of ta
2d8b0 62 6c 65 73 20 74 6f 20 63 68 65 63 6b 2e 20 20  bles to check.  
2d8c0 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20  (Number of root 
2d8d0 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74  pages.) */.  int
2d8e0 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20   *aRoot;     /* 
2d8f0 41 72 72 61 79 20 6f 66 20 72 6f 6f 74 70 61 67  Array of rootpag
2d900 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 74 61  e numbers for ta
2d910 62 6c 65 73 20 74 6f 20 62 65 20 63 68 65 63 6b  bles to be check
2d920 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  ed */.  int nErr
2d930 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ;       /* Numbe
2d940 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 70 6f  r of errors repo
2d950 72 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  rted */.  char *
2d960 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78  z;        /* Tex
2d970 74 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20 72  t of the error r
2d980 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a  eport */.  Mem *
2d990 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20 52 65  pnErr;     /* Re
2d9a0 67 69 73 74 65 72 20 6b 65 65 70 69 6e 67 20 74  gister keeping t
2d9b0 72 61 63 6b 20 6f 66 20 65 72 72 6f 72 73 20 72  rack of errors r
2d9c0 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 0a 20 20 61  emaining */..  a
2d9d0 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
2d9e0 64 65 72 20 29 3b 0a 20 20 6e 52 6f 6f 74 20 3d  der );.  nRoot =
2d9f0 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 52 6f 6f   pOp->p2;.  aRoo
2da00 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a  t = pOp->p4.ai;.
2da10 20 20 61 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e    assert( nRoot>
2da20 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 61  0 );.  assert( a
2da30 52 6f 6f 74 5b 6e 52 6f 6f 74 5d 3d 3d 30 20 29  Root[nRoot]==0 )
2da40 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2da50 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
2da60 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
2da70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
2da80 70 6e 45 72 72 20 3d 20 26 61 4d 65 6d 5b 70 4f  pnErr = &aMem[pO
2da90 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74  p->p3];.  assert
2daa0 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20  ( (pnErr->flags 
2dab0 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
2dac0 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72  .  assert( (pnEr
2dad0 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  r->flags & (MEM_
2dae0 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d  Str|MEM_Blob))==
2daf0 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  0 );.  pIn1 = &a
2db00 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2db10 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c  assert( pOp->p5<
2db20 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
2db30 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
2db40 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f  p->btreeMask, pO
2db50 70 2d 3e 70 35 29 20 29 3b 0a 20 20 7a 20 3d 20  p->p5) );.  z = 
2db60 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65  sqlite3BtreeInte
2db70 67 72 69 74 79 43 68 65 63 6b 28 64 62 2d 3e 61  grityCheck(db->a
2db80 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c  Db[pOp->p5].pBt,
2db90 20 61 52 6f 6f 74 2c 20 6e 52 6f 6f 74 2c 0a 20   aRoot, nRoot,. 
2dba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dbc0 28 69 6e 74 29 70 6e 45 72 72 2d 3e 75 2e 69 2c  (int)pnErr->u.i,
2dbd0 20 26 6e 45 72 72 29 3b 0a 20 20 70 6e 45 72 72   &nErr);.  pnErr
2dbe0 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a 20  ->u.i -= nErr;. 
2dbf0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2dc00 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20  etNull(pIn1);.  
2dc10 69 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20  if( nErr==0 ){. 
2dc20 20 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30 20     assert( z==0 
2dc30 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 7a  );.  }else if( z
2dc40 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ==0 ){.    goto 
2dc50 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b  no_mem;.  }else{
2dc60 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
2dc70 4d 65 6d 53 65 74 53 74 72 28 70 49 6e 31 2c 20  MemSetStr(pIn1, 
2dc80 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54  z, -1, SQLITE_UT
2dc90 46 38 2c 20 73 71 6c 69 74 65 33 5f 66 72 65 65  F8, sqlite3_free
2dca0 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45 5f  );.  }.  UPDATE_
2dcb0 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e  MAX_BLOBSIZE(pIn
2dcc0 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1);.  sqlite3Vdb
2dcd0 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
2dce0 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pIn1, encoding);
2dcf0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2dd00 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
2dd10 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  T_INTEGRITY_CHEC
2dd20 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  K */../* Opcode:
2dd30 20 52 6f 77 53 65 74 41 64 64 20 50 31 20 50 32   RowSetAdd P1 P2
2dd40 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
2dd50 69 73 3a 20 20 72 6f 77 73 65 74 28 50 31 29 3d  is:  rowset(P1)=
2dd60 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 49 6e 73 65  r[P2].**.** Inse
2dd70 72 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  rt the integer v
2dd80 61 6c 75 65 20 68 65 6c 64 20 62 79 20 72 65 67  alue held by reg
2dd90 69 73 74 65 72 20 50 32 20 69 6e 74 6f 20 61 20  ister P2 into a 
2dda0 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 0a 2a 2a  boolean index.**
2ddb0 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65   held in registe
2ddc0 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 61  r P1..**.** An a
2ddd0 73 73 65 72 74 69 6f 6e 20 66 61 69 6c 73 20 69  ssertion fails i
2dde0 66 20 50 32 20 69 73 20 6e 6f 74 20 61 6e 20 69  f P2 is not an i
2ddf0 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20  nteger..*/.case 
2de00 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a 20 7b 20  OP_RowSetAdd: { 
2de10 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e        /* in1, in
2de20 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
2de30 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2de40 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
2de50 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
2de60 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20   (pIn2->flags & 
2de70 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20  MEM_Int)!=0 );. 
2de80 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
2de90 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
2dea0 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
2deb0 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65  3VdbeMemSetRowSe
2dec0 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28  t(pIn1);.    if(
2ded0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
2dee0 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
2def0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
2df00 7d 0a 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65  }.  sqlite3RowSe
2df10 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e  tInsert(pIn1->u.
2df20 70 52 6f 77 53 65 74 2c 20 70 49 6e 32 2d 3e 75  pRowSet, pIn2->u
2df30 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .i);.  break;.}.
2df40 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53  ./* Opcode: RowS
2df50 65 74 52 65 61 64 20 50 31 20 50 32 20 50 33 20  etRead P1 P2 P3 
2df60 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2df70 20 20 72 5b 50 33 5d 3d 72 6f 77 73 65 74 28 50    r[P3]=rowset(P
2df80 31 29 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61 63 74  1).**.** Extract
2df90 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61   the smallest va
2dfa0 6c 75 65 20 66 72 6f 6d 20 62 6f 6f 6c 65 61 6e  lue from boolean
2dfb0 20 69 6e 64 65 78 20 50 31 20 61 6e 64 20 70 75   index P1 and pu
2dfc0 74 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74  t that value int
2dfd0 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 33  o.** register P3
2dfe0 2e 20 20 4f 72 2c 20 69 66 20 62 6f 6f 6c 65 61  .  Or, if boolea
2dff0 6e 20 69 6e 64 65 78 20 50 31 20 69 73 20 69 6e  n index P1 is in
2e000 69 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c 20 6c  itially empty, l
2e010 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e 63 68 61  eave P3.** uncha
2e020 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70 20 74 6f  nged and jump to
2e030 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e   instruction P2.
2e040 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53  .*/.case OP_RowS
2e050 65 74 52 65 61 64 3a 20 7b 20 20 20 20 20 20 20  etRead: {       
2e060 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 6f 75  /* jump, in1, ou
2e070 74 33 20 2a 2f 0a 20 20 69 36 34 20 76 61 6c 3b  t3 */.  i64 val;
2e080 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
2e090 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
2e0a0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
2e0b0 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 0a  MEM_RowSet)==0 .
2e0c0 20 20 20 7c 7c 20 73 71 6c 69 74 65 33 52 6f 77     || sqlite3Row
2e0d0 53 65 74 4e 65 78 74 28 70 49 6e 31 2d 3e 75 2e  SetNext(pIn1->u.
2e0e0 70 52 6f 77 53 65 74 2c 20 26 76 61 6c 29 3d 3d  pRowSet, &val)==
2e0f0 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  0.  ){.    /* Th
2e100 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20  e boolean index 
2e110 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20  is empty */.    
2e120 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2e130 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 20  tNull(pIn1);.   
2e140 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
2e150 28 31 2c 32 29 3b 0a 20 20 20 20 67 6f 74 6f 20  (1,2);.    goto 
2e160 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63  jump_to_p2_and_c
2e170 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
2e180 70 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  pt;.  }else{.   
2e190 20 2f 2a 20 41 20 76 61 6c 75 65 20 77 61 73 20   /* A value was 
2e1a0 70 75 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65 20  pulled from the 
2e1b0 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 56 64 62  index */.    Vdb
2e1c0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 32  eBranchTaken(0,2
2e1d0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
2e1e0 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61  beMemSetInt64(&a
2e1f0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61  Mem[pOp->p3], va
2e200 6c 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63  l);.  }.  goto c
2e210 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
2e220 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  pt;.}../* Opcode
2e230 3a 20 52 6f 77 53 65 74 54 65 73 74 20 50 31 20  : RowSetTest P1 
2e240 50 32 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f  P2 P3 P4.** Syno
2e250 70 73 69 73 3a 20 69 66 20 72 5b 50 33 5d 20 69  psis: if r[P3] i
2e260 6e 20 72 6f 77 73 65 74 28 50 31 29 20 67 6f 74  n rowset(P1) got
2e270 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  o P2.**.** Regis
2e280 74 65 72 20 50 33 20 69 73 20 61 73 73 75 6d 65  ter P3 is assume
2e290 64 20 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62  d to hold a 64-b
2e2a0 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  it integer value
2e2b0 2e 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31  . If register P1
2e2c0 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20 52  .** contains a R
2e2d0 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 61 6e 64  owSet object and
2e2e0 20 74 68 61 74 20 52 6f 77 53 65 74 20 6f 62 6a   that RowSet obj
2e2f0 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20  ect contains.** 
2e300 74 68 65 20 76 61 6c 75 65 20 68 65 6c 64 20 69  the value held i
2e310 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65  n P3, jump to re
2e320 67 69 73 74 65 72 20 50 32 2e 20 4f 74 68 65 72  gister P2. Other
2e330 77 69 73 65 2c 20 69 6e 73 65 72 74 20 74 68 65  wise, insert the
2e340 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e 20 50  .** integer in P
2e350 33 20 69 6e 74 6f 20 74 68 65 20 52 6f 77 53 65  3 into the RowSe
2e360 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f  t and continue o
2e370 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74  n to the.** next
2e380 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54   opcode..**.** T
2e390 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74  he RowSet object
2e3a0 20 69 73 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f   is optimized fo
2e3b0 72 20 74 68 65 20 63 61 73 65 20 77 68 65 72 65  r the case where
2e3c0 20 73 75 63 63 65 73 73 69 76 65 20 73 65 74 73   successive sets
2e3d0 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 2c  .** of integers,
2e3e0 20 77 68 65 72 65 20 65 61 63 68 20 73 65 74 20   where each set 
2e3f0 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70 6c  contains no dupl
2e400 69 63 61 74 65 73 2e 20 45 61 63 68 20 73 65 74  icates. Each set
2e410 0a 2a 2a 20 6f 66 20 76 61 6c 75 65 73 20 69 73  .** of values is
2e420 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61   identified by a
2e430 20 75 6e 69 71 75 65 20 50 34 20 76 61 6c 75 65   unique P4 value
2e440 2e 20 54 68 65 20 66 69 72 73 74 20 73 65 74 0a  . The first set.
2e450 2a 2a 20 6d 75 73 74 20 68 61 76 65 20 50 34 3d  ** must have P4=
2e460 3d 30 2c 20 74 68 65 20 66 69 6e 61 6c 20 73 65  =0, the final se
2e470 74 20 50 34 3d 2d 31 2e 20 20 50 34 20 6d 75 73  t P4=-1.  P4 mus
2e480 74 20 62 65 20 65 69 74 68 65 72 20 2d 31 20 6f  t be either -1 o
2e490 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69 76  r.** non-negativ
2e4a0 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67 61  e.  For non-nega
2e4b0 74 69 76 65 20 76 61 6c 75 65 73 20 6f 66 20 50  tive values of P
2e4c0 34 20 6f 6e 6c 79 20 74 68 65 20 6c 6f 77 65 72  4 only the lower
2e4d0 20 34 0a 2a 2a 20 62 69 74 73 20 61 72 65 20 73   4.** bits are s
2e4e0 69 67 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a 2a  ignificant..**.*
2e4f0 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70  * This allows op
2e500 74 69 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29  timizations: (a)
2e510 20 77 68 65 6e 20 50 34 3d 3d 30 20 74 68 65 72   when P4==0 ther
2e520 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20  e is no need to 
2e530 74 65 73 74 0a 2a 2a 20 74 68 65 20 72 6f 77 73  test.** the rows
2e540 65 74 20 6f 62 6a 65 63 74 20 66 6f 72 20 50 33  et object for P3
2e550 2c 20 61 73 20 69 74 20 69 73 20 67 75 61 72 61  , as it is guara
2e560 6e 74 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e  nteed not to con
2e570 74 61 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20  tain it,.** (b) 
2e580 77 68 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72  when P4==-1 ther
2e590 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20  e is no need to 
2e5a0 69 6e 73 65 72 74 20 74 68 65 20 76 61 6c 75 65  insert the value
2e5b0 2c 20 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20  , as it will.** 
2e5c0 6e 65 76 65 72 20 62 65 20 74 65 73 74 65 64 20  never be tested 
2e5d0 66 6f 72 2c 20 61 6e 64 20 28 63 29 20 77 68 65  for, and (c) whe
2e5e0 6e 20 61 20 76 61 6c 75 65 20 74 68 61 74 20 69  n a value that i
2e5f0 73 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20  s part of set X 
2e600 69 73 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20  is.** inserted, 
2e610 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64  there is no need
2e620 20 74 6f 20 73 65 61 72 63 68 20 74 6f 20 73 65   to search to se
2e630 65 20 69 66 20 74 68 65 20 73 61 6d 65 20 76 61  e if the same va
2e640 6c 75 65 20 77 61 73 0a 2a 2a 20 70 72 65 76 69  lue was.** previ
2e650 6f 75 73 6c 79 20 69 6e 73 65 72 74 65 64 20 61  ously inserted a
2e660 73 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20  s part of set X 
2e670 28 6f 6e 6c 79 20 69 66 20 69 74 20 77 61 73 20  (only if it was 
2e680 70 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e  previously.** in
2e690 73 65 72 74 65 64 20 61 73 20 70 61 72 74 20 6f  serted as part o
2e6a0 66 20 73 6f 6d 65 20 6f 74 68 65 72 20 73 65 74  f some other set
2e6b0 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  )..*/.case OP_Ro
2e6c0 77 53 65 74 54 65 73 74 3a 20 7b 20 20 20 20 20  wSetTest: {     
2e6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e6e0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  /* jump, in1, in
2e6f0 33 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b  3 */.  int iSet;
2e700 0a 20 20 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a  .  int exists;..
2e710 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
2e720 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20  Op->p1];.  pIn3 
2e730 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
2e740 3b 0a 20 20 69 53 65 74 20 3d 20 70 4f 70 2d 3e  ;.  iSet = pOp->
2e750 70 34 2e 69 3b 0a 20 20 61 73 73 65 72 74 28 20  p4.i;.  assert( 
2e760 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn3->flags&MEM_
2e770 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20  Int );..  /* If 
2e780 74 68 65 72 65 20 69 73 20 61 6e 79 74 68 69 6e  there is anythin
2e790 67 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20 72  g other than a r
2e7a0 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 69 6e 20  owset object in 
2e7b0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c 0a  memory cell P1,.
2e7c0 20 20 2a 2a 20 64 65 6c 65 74 65 20 69 74 20 6e    ** delete it n
2e7d0 6f 77 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a  ow and initializ
2e7e0 65 20 50 31 20 77 69 74 68 20 61 6e 20 65 6d 70  e P1 with an emp
2e7f0 74 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a 20  ty rowset.  */. 
2e800 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
2e810 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
2e820 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
2e830 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65  3VdbeMemSetRowSe
2e840 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28  t(pIn1);.    if(
2e850 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
2e860 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
2e870 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
2e880 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  }..  assert( pOp
2e890 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
2e8a0 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  32 );.  assert( 
2e8b0 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74  iSet==-1 || iSet
2e8c0 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 53 65  >=0 );.  if( iSe
2e8d0 74 20 29 7b 0a 20 20 20 20 65 78 69 73 74 73 20  t ){.    exists 
2e8e0 3d 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54  = sqlite3RowSetT
2e8f0 65 73 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77  est(pIn1->u.pRow
2e900 53 65 74 2c 20 69 53 65 74 2c 20 70 49 6e 33 2d  Set, iSet, pIn3-
2e910 3e 75 2e 69 29 3b 0a 20 20 20 20 56 64 62 65 42  >u.i);.    VdbeB
2e920 72 61 6e 63 68 54 61 6b 65 6e 28 65 78 69 73 74  ranchTaken(exist
2e930 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28  s!=0,2);.    if(
2e940 20 65 78 69 73 74 73 20 29 20 67 6f 74 6f 20 6a   exists ) goto j
2e950 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
2e960 20 69 66 28 20 69 53 65 74 3e 3d 30 20 29 7b 0a   if( iSet>=0 ){.
2e970 20 20 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65      sqlite3RowSe
2e980 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e  tInsert(pIn1->u.
2e990 70 52 6f 77 53 65 74 2c 20 70 49 6e 33 2d 3e 75  pRowSet, pIn3->u
2e9a0 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  .i);.  }.  break
2e9b0 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51  ;.}...#ifndef SQ
2e9c0 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
2e9d0 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72  R../* Opcode: Pr
2e9e0 6f 67 72 61 6d 20 50 31 20 50 32 20 50 33 20 50  ogram P1 P2 P3 P
2e9f0 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75  4 P5.**.** Execu
2ea00 74 65 20 74 68 65 20 74 72 69 67 67 65 72 20 70  te the trigger p
2ea10 72 6f 67 72 61 6d 20 70 61 73 73 65 64 20 61 73  rogram passed as
2ea20 20 50 34 20 28 74 79 70 65 20 50 34 5f 53 55 42   P4 (type P4_SUB
2ea30 50 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a  PROGRAM). .**.**
2ea40 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P1 contains the
2ea50 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65 20   address of the 
2ea60 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74  memory cell that
2ea70 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 66 69   contains the fi
2ea80 72 73 74 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63  rst memory .** c
2ea90 65 6c 6c 20 69 6e 20 61 6e 20 61 72 72 61 79 20  ell in an array 
2eaa0 6f 66 20 76 61 6c 75 65 73 20 75 73 65 64 20 61  of values used a
2eab0 73 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74  s arguments to t
2eac0 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20  he sub-program. 
2ead0 50 32 20 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20  P2 .** contains 
2eae0 74 68 65 20 61 64 64 72 65 73 73 20 74 6f 20 6a  the address to j
2eaf0 75 6d 70 20 74 6f 20 69 66 20 74 68 65 20 73 75  ump to if the su
2eb00 62 2d 70 72 6f 67 72 61 6d 20 74 68 72 6f 77 73  b-program throws
2eb10 20 61 6e 20 49 47 4e 4f 52 45 20 0a 2a 2a 20 65   an IGNORE .** e
2eb20 78 63 65 70 74 69 6f 6e 20 75 73 69 6e 67 20 74  xception using t
2eb30 68 65 20 52 41 49 53 45 28 29 20 66 75 6e 63 74  he RAISE() funct
2eb40 69 6f 6e 2e 20 52 65 67 69 73 74 65 72 20 50 33  ion. Register P3
2eb50 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64   contains the ad
2eb60 64 72 65 73 73 20 0a 2a 2a 20 6f 66 20 61 20 6d  dress .** of a m
2eb70 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68  emory cell in th
2eb80 69 73 20 28 74 68 65 20 70 61 72 65 6e 74 29 20  is (the parent) 
2eb90 56 4d 20 74 68 61 74 20 69 73 20 75 73 65 64 20  VM that is used 
2eba0 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74 68 65 20  to allocate the 
2ebb0 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72 65 71 75 69  .** memory requi
2ebc0 72 65 64 20 62 79 20 74 68 65 20 73 75 62 2d 76  red by the sub-v
2ebd0 64 62 65 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a  dbe at runtime..
2ebe0 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
2ebf0 69 6e 74 65 72 20 74 6f 20 74 68 65 20 56 4d 20  inter to the VM 
2ec00 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
2ec10 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a  rigger program..
2ec20 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e  **.** If P5 is n
2ec30 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 72 65  on-zero, then re
2ec40 63 75 72 73 69 76 65 20 70 72 6f 67 72 61 6d 20  cursive program 
2ec50 69 6e 76 6f 63 61 74 69 6f 6e 20 69 73 20 65 6e  invocation is en
2ec60 61 62 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  abled..*/.case O
2ec70 50 5f 50 72 6f 67 72 61 6d 3a 20 7b 20 20 20 20  P_Program: {    
2ec80 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
2ec90 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20   int nMem;      
2eca0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
2ecb0 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 72 65 67  er of memory reg
2ecc0 69 73 74 65 72 73 20 66 6f 72 20 73 75 62 2d 70  isters for sub-p
2ecd0 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20  rogram */.  int 
2ece0 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20 20 20  nByte;          
2ecf0 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20      /* Bytes of 
2ed00 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20 72 65  runtime space re
2ed10 71 75 69 72 65 64 20 66 6f 72 20 73 75 62 2d 70  quired for sub-p
2ed20 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20  rogram */.  Mem 
2ed30 2a 70 52 74 3b 20 20 20 20 20 20 20 20 20 20 20  *pRt;           
2ed40 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
2ed50 74 6f 20 61 6c 6c 6f 63 61 74 65 20 72 75 6e 74  to allocate runt
2ed60 69 6d 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 4d  ime space */.  M
2ed70 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20  em *pMem;       
2ed80 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 74         /* Used t
2ed90 6f 20 69 74 65 72 61 74 65 20 74 68 72 6f 75 67  o iterate throug
2eda0 68 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 2a  h memory cells *
2edb0 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e 64 3b 20 20  /.  Mem *pEnd;  
2edc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
2edd0 61 73 74 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  ast memory cell 
2ede0 69 6e 20 6e 65 77 20 61 72 72 61 79 20 2a 2f 0a  in new array */.
2edf0 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
2ee00 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 65 77  ame;      /* New
2ee10 20 76 64 62 65 20 66 72 61 6d 65 20 74 6f 20 65   vdbe frame to e
2ee20 78 65 63 75 74 65 20 69 6e 20 2a 2f 0a 20 20 53  xecute in */.  S
2ee30 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67  ubProgram *pProg
2ee40 72 61 6d 3b 20 20 20 2f 2a 20 53 75 62 2d 70 72  ram;   /* Sub-pr
2ee50 6f 67 72 61 6d 20 74 6f 20 65 78 65 63 75 74 65  ogram to execute
2ee60 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 74 3b 20 20   */.  void *t;  
2ee70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2ee80 20 54 6f 6b 65 6e 20 69 64 65 6e 74 69 66 79 69   Token identifyi
2ee90 6e 67 20 74 72 69 67 67 65 72 20 2a 2f 0a 0a 20  ng trigger */.. 
2eea0 20 70 50 72 6f 67 72 61 6d 20 3d 20 70 4f 70 2d   pProgram = pOp-
2eeb0 3e 70 34 2e 70 50 72 6f 67 72 61 6d 3b 0a 20 20  >p4.pProgram;.  
2eec0 70 52 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  pRt = &aMem[pOp-
2eed0 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p3];.  assert( 
2eee0 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20  pProgram->nOp>0 
2eef0 29 3b 0a 20 20 0a 20 20 2f 2a 20 49 66 20 74 68  );.  .  /* If th
2ef00 65 20 70 35 20 66 6c 61 67 20 69 73 20 63 6c 65  e p5 flag is cle
2ef10 61 72 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69  ar, then recursi
2ef20 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66  ve invocation of
2ef30 20 74 72 69 67 67 65 72 73 20 69 73 20 0a 20 20   triggers is .  
2ef40 2a 2a 20 64 69 73 61 62 6c 65 64 20 66 6f 72 20  ** disabled for 
2ef50 62 61 63 6b 77 61 72 64 73 20 63 6f 6d 70 61 74  backwards compat
2ef60 69 62 69 6c 69 74 79 20 28 70 35 20 69 73 20 73  ibility (p5 is s
2ef70 65 74 20 69 66 20 74 68 69 73 20 73 75 62 2d 70  et if this sub-p
2ef80 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 69 73 20 72  rogram.  ** is r
2ef90 65 61 6c 6c 79 20 61 20 74 72 69 67 67 65 72 2c  eally a trigger,
2efa0 20 6e 6f 74 20 61 20 66 6f 72 65 69 67 6e 20 6b   not a foreign k
2efb0 65 79 20 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74  ey action, and t
2efc0 68 65 20 66 6c 61 67 20 73 65 74 0a 20 20 2a 2a  he flag set.  **
2efd0 20 61 6e 64 20 63 6c 65 61 72 65 64 20 62 79 20   and cleared by 
2efe0 74 68 65 20 22 50 52 41 47 4d 41 20 72 65 63 75  the "PRAGMA recu
2eff0 72 73 69 76 65 5f 74 72 69 67 67 65 72 73 22 20  rsive_triggers" 
2f000 63 6f 6d 6d 61 6e 64 20 69 73 20 63 6c 65 61 72  command is clear
2f010 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 74  )..  ** .  ** It
2f020 20 69 73 20 72 65 63 75 72 73 69 76 65 20 69 6e   is recursive in
2f030 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67  vocation of trig
2f040 67 65 72 73 2c 20 61 74 20 74 68 65 20 53 51 4c  gers, at the SQL
2f050 20 6c 65 76 65 6c 2c 20 74 68 61 74 20 69 73 20   level, that is 
2f060 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 2e 20  .  ** disabled. 
2f070 49 6e 20 73 6f 6d 65 20 63 61 73 65 73 20 61 20  In some cases a 
2f080 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20 6d  single trigger m
2f090 61 79 20 67 65 6e 65 72 61 74 65 20 6d 6f 72 65  ay generate more
2f0a0 20 74 68 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20   than one .  ** 
2f0b0 53 75 62 50 72 6f 67 72 61 6d 20 28 69 66 20 74  SubProgram (if t
2f0c0 68 65 20 74 72 69 67 67 65 72 20 6d 61 79 20 62  he trigger may b
2f0d0 65 20 65 78 65 63 75 74 65 64 20 77 69 74 68 20  e executed with 
2f0e0 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 64 69  more than one di
2f0f0 66 66 65 72 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e  fferent .  ** ON
2f100 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69   CONFLICT algori
2f110 74 68 6d 29 2e 20 53 75 62 50 72 6f 67 72 61 6d  thm). SubProgram
2f120 20 73 74 72 75 63 74 75 72 65 73 20 61 73 73 6f   structures asso
2f130 63 69 61 74 65 64 20 77 69 74 68 20 61 0a 20 20  ciated with a.  
2f140 2a 2a 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65  ** single trigge
2f150 72 20 61 6c 6c 20 68 61 76 65 20 74 68 65 20 73  r all have the s
2f160 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68  ame value for th
2f170 65 20 53 75 62 50 72 6f 67 72 61 6d 2e 74 6f 6b  e SubProgram.tok
2f180 65 6e 20 0a 20 20 2a 2a 20 76 61 72 69 61 62 6c  en .  ** variabl
2f190 65 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70  e.  */.  if( pOp
2f1a0 2d 3e 70 35 20 29 7b 0a 20 20 20 20 74 20 3d 20  ->p5 ){.    t = 
2f1b0 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b  pProgram->token;
2f1c0 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d  .    for(pFrame=
2f1d0 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d  p->pFrame; pFram
2f1e0 65 20 26 26 20 70 46 72 61 6d 65 2d 3e 74 6f 6b  e && pFrame->tok
2f1f0 65 6e 21 3d 74 3b 20 70 46 72 61 6d 65 3d 70 46  en!=t; pFrame=pF
2f200 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a  rame->pParent);.
2f210 20 20 20 20 69 66 28 20 70 46 72 61 6d 65 20 29      if( pFrame )
2f220 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69   break;.  }..  i
2f230 66 28 20 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62  f( p->nFrame>=db
2f240 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
2f250 4c 49 4d 49 54 5f 54 52 49 47 47 45 52 5f 44 45  LIMIT_TRIGGER_DE
2f260 50 54 48 5d 20 29 7b 0a 20 20 20 20 72 63 20 3d  PTH] ){.    rc =
2f270 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
2f280 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
2f290 72 6f 72 28 70 2c 20 22 74 6f 6f 20 6d 61 6e 79  ror(p, "too many
2f2a0 20 6c 65 76 65 6c 73 20 6f 66 20 74 72 69 67 67   levels of trigg
2f2b0 65 72 20 72 65 63 75 72 73 69 6f 6e 22 29 3b 0a  er recursion");.
2f2c0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
2f2d0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
2f2e0 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20  ..  /* Register 
2f2f0 70 52 74 20 69 73 20 75 73 65 64 20 74 6f 20 73  pRt is used to s
2f300 74 6f 72 65 20 74 68 65 20 6d 65 6d 6f 72 79 20  tore the memory 
2f310 72 65 71 75 69 72 65 64 20 74 6f 20 73 61 76 65  required to save
2f320 20 74 68 65 20 73 74 61 74 65 0a 20 20 2a 2a 20   the state.  ** 
2f330 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  of the current p
2f340 72 6f 67 72 61 6d 2c 20 61 6e 64 20 74 68 65 20  rogram, and the 
2f350 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20  memory required 
2f360 61 74 20 72 75 6e 74 69 6d 65 20 74 6f 20 65 78  at runtime to ex
2f370 65 63 75 74 65 0a 20 20 2a 2a 20 74 68 65 20 74  ecute.  ** the t
2f380 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 20  rigger program. 
2f390 49 66 20 74 68 69 73 20 74 72 69 67 67 65 72 20  If this trigger 
2f3a0 68 61 73 20 62 65 65 6e 20 66 69 72 65 64 20 62  has been fired b
2f3b0 65 66 6f 72 65 2c 20 74 68 65 6e 20 70 52 74 20  efore, then pRt 
2f3c0 0a 20 20 2a 2a 20 69 73 20 61 6c 72 65 61 64 79  .  ** is already
2f3d0 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4f 74 68 65   allocated. Othe
2f3e0 72 77 69 73 65 2c 20 69 74 20 6d 75 73 74 20 62  rwise, it must b
2f3f0 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 20  e initialized.  
2f400 2a 2f 0a 20 20 69 66 28 20 28 70 52 74 2d 3e 66  */.  if( (pRt->f
2f410 6c 61 67 73 26 4d 45 4d 5f 46 72 61 6d 65 29 3d  lags&MEM_Frame)=
2f420 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 53 75 62  =0 ){.    /* Sub
2f430 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69 73 20  Program.nMem is 
2f440 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65  set to the numbe
2f450 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  r of memory cell
2f460 73 20 75 73 65 64 20 62 79 20 74 68 65 20 0a 20  s used by the . 
2f470 20 20 20 2a 2a 20 70 72 6f 67 72 61 6d 20 73 74     ** program st
2f480 6f 72 65 64 20 69 6e 20 53 75 62 50 72 6f 67 72  ored in SubProgr
2f490 61 6d 2e 61 4f 70 2e 20 41 73 20 77 65 6c 6c 20  am.aOp. As well 
2f4a0 61 73 20 74 68 65 73 65 2c 20 6f 6e 65 20 6d 65  as these, one me
2f4b0 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 63 65 6c 6c  mory.    ** cell
2f4c0 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72   is required for
2f4d0 20 65 61 63 68 20 63 75 72 73 6f 72 20 75 73 65   each cursor use
2f4e0 64 20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d  d by the program
2f4f0 2e 20 53 65 74 20 6c 6f 63 61 6c 0a 20 20 20 20  . Set local.    
2f500 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 4d 65 6d  ** variable nMem
2f510 20 28 61 6e 64 20 6c 61 74 65 72 2c 20 56 64 62   (and later, Vdb
2f520 65 46 72 61 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d  eFrame.nChildMem
2f530 29 20 74 6f 20 74 68 69 73 20 76 61 6c 75 65 2e  ) to this value.
2f540 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d  .    */.    nMem
2f550 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65   = pProgram->nMe
2f560 6d 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  m + pProgram->nC
2f570 73 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  sr;.    assert( 
2f580 6e 4d 65 6d 3e 30 20 29 3b 0a 20 20 20 20 69 66  nMem>0 );.    if
2f590 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  ( pProgram->nCsr
2f5a0 3d 3d 30 20 29 20 6e 4d 65 6d 2b 2b 3b 0a 20 20  ==0 ) nMem++;.  
2f5b0 20 20 6e 42 79 74 65 20 3d 20 52 4f 55 4e 44 38    nByte = ROUND8
2f5c0 28 73 69 7a 65 6f 66 28 56 64 62 65 46 72 61 6d  (sizeof(VdbeFram
2f5d0 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)).            
2f5e0 20 20 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f    + nMem * sizeo
2f5f0 66 28 4d 65 6d 29 0a 20 20 20 20 20 20 20 20 20  f(Mem).         
2f600 20 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d       + pProgram-
2f610 3e 6e 43 73 72 20 2a 20 73 69 7a 65 6f 66 28 56  >nCsr * sizeof(V
2f620 64 62 65 43 75 72 73 6f 72 20 2a 29 0a 20 20 20  dbeCursor *).   
2f630 20 20 20 20 20 20 20 20 20 20 20 2b 20 70 50 72             + pPr
2f640 6f 67 72 61 6d 2d 3e 6e 4f 6e 63 65 20 2a 20 73  ogram->nOnce * s
2f650 69 7a 65 6f 66 28 75 38 29 3b 0a 20 20 20 20 70  izeof(u8);.    p
2f660 46 72 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 44  Frame = sqlite3D
2f670 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c 20  bMallocZero(db, 
2f680 6e 42 79 74 65 29 3b 0a 20 20 20 20 69 66 28 20  nByte);.    if( 
2f690 21 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20  !pFrame ){.     
2f6a0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
2f6b0 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56    }.    sqlite3V
2f6c0 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 52  dbeMemRelease(pR
2f6d0 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e 66 6c 61  t);.    pRt->fla
2f6e0 67 73 20 3d 20 4d 45 4d 5f 46 72 61 6d 65 3b 0a  gs = MEM_Frame;.
2f6f0 20 20 20 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d      pRt->u.pFram
2f700 65 20 3d 20 70 46 72 61 6d 65 3b 0a 0a 20 20 20  e = pFrame;..   
2f710 20 70 46 72 61 6d 65 2d 3e 76 20 3d 20 70 3b 0a   pFrame->v = p;.
2f720 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69      pFrame->nChi
2f730 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20 20  ldMem = nMem;.  
2f740 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64    pFrame->nChild
2f750 43 73 72 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  Csr = pProgram->
2f760 6e 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65  nCsr;.    pFrame
2f770 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70  ->pc = (int)(pOp
2f780 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 70 46 72   - aOp);.    pFr
2f790 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70 2d 3e 61  ame->aMem = p->a
2f7a0 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Mem;.    pFrame-
2f7b0 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d 65 6d 3b  >nMem = p->nMem;
2f7c0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 70 43  .    pFrame->apC
2f7d0 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 3b 0a 20  sr = p->apCsr;. 
2f7e0 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 75 72 73     pFrame->nCurs
2f7f0 6f 72 20 3d 20 70 2d 3e 6e 43 75 72 73 6f 72 3b  or = p->nCursor;
2f800 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f 70  .    pFrame->aOp
2f810 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 70   = p->aOp;.    p
2f820 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20 70 2d 3e  Frame->nOp = p->
2f830 6e 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  nOp;.    pFrame-
2f840 3e 74 6f 6b 65 6e 20 3d 20 70 50 72 6f 67 72 61  >token = pProgra
2f850 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 70 46  m->token;.    pF
2f860 72 61 6d 65 2d 3e 61 4f 6e 63 65 46 6c 61 67 20  rame->aOnceFlag 
2f870 3d 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 3b 0a  = p->aOnceFlag;.
2f880 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 6e 63      pFrame->nOnc
2f890 65 46 6c 61 67 20 3d 20 70 2d 3e 6e 4f 6e 63 65  eFlag = p->nOnce
2f8a0 46 6c 61 67 3b 0a 23 69 66 64 65 66 20 53 51 4c  Flag;.#ifdef SQL
2f8b0 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f  ITE_ENABLE_STMT_
2f8c0 53 43 41 4e 53 54 41 54 55 53 0a 20 20 20 20 70  SCANSTATUS.    p
2f8d0 46 72 61 6d 65 2d 3e 61 6e 45 78 65 63 20 3d 20  Frame->anExec = 
2f8e0 70 2d 3e 61 6e 45 78 65 63 3b 0a 23 65 6e 64 69  p->anExec;.#endi
2f8f0 66 0a 0a 20 20 20 20 70 45 6e 64 20 3d 20 26 56  f..    pEnd = &V
2f900 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61  dbeFrameMem(pFra
2f910 6d 65 29 5b 70 46 72 61 6d 65 2d 3e 6e 43 68 69  me)[pFrame->nChi
2f920 6c 64 4d 65 6d 5d 3b 0a 20 20 20 20 66 6f 72 28  ldMem];.    for(
2f930 70 4d 65 6d 3d 56 64 62 65 46 72 61 6d 65 4d 65  pMem=VdbeFrameMe
2f940 6d 28 70 46 72 61 6d 65 29 3b 20 70 4d 65 6d 21  m(pFrame); pMem!
2f950 3d 70 45 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a  =pEnd; pMem++){.
2f960 20 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67        pMem->flag
2f970 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65  s = MEM_Undefine
2f980 64 3b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 64  d;.      pMem->d
2f990 62 20 3d 20 64 62 3b 0a 20 20 20 20 7d 0a 20 20  b = db;.    }.  
2f9a0 7d 65 6c 73 65 7b 0a 20 20 20 20 70 46 72 61 6d  }else{.    pFram
2f9b0 65 20 3d 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d  e = pRt->u.pFram
2f9c0 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e;.    assert( p
2f9d0 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 70 50  Program->nMem+pP
2f9e0 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46  rogram->nCsr==pF
2f9f0 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20  rame->nChildMem 
2fa00 0a 20 20 20 20 20 20 20 20 7c 7c 20 28 70 50 72  .        || (pPr
2fa10 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 30 20 26  ogram->nCsr==0 &
2fa20 26 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d  & pProgram->nMem
2fa30 2b 31 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69  +1==pFrame->nChi
2fa40 6c 64 4d 65 6d 29 20 29 3b 0a 20 20 20 20 61 73  ldMem) );.    as
2fa50 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e  sert( pProgram->
2fa60 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43  nCsr==pFrame->nC
2fa70 68 69 6c 64 43 73 72 20 29 3b 0a 20 20 20 20 61  hildCsr );.    a
2fa80 73 73 65 72 74 28 20 28 69 6e 74 29 28 70 4f 70  ssert( (int)(pOp
2fa90 20 2d 20 61 4f 70 29 3d 3d 70 46 72 61 6d 65 2d   - aOp)==pFrame-
2faa0 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d  >pc );.  }..  p-
2fab0 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70 46 72  >nFrame++;.  pFr
2fac0 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20 70  ame->pParent = p
2fad0 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46 72 61  ->pFrame;.  pFra
2fae0 6d 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  me->lastRowid = 
2faf0 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 70 46 72  lastRowid;.  pFr
2fb00 61 6d 65 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70  ame->nChange = p
2fb10 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70 46 72  ->nChange;.  pFr
2fb20 61 6d 65 2d 3e 6e 44 62 43 68 61 6e 67 65 20 3d  ame->nDbChange =
2fb30 20 70 2d 3e 64 62 2d 3e 6e 43 68 61 6e 67 65 3b   p->db->nChange;
2fb40 0a 20 20 61 73 73 65 72 74 28 20 70 46 72 61 6d  .  assert( pFram
2fb50 65 2d 3e 70 41 75 78 44 61 74 61 3d 3d 30 20 29  e->pAuxData==0 )
2fb60 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70 41 75 78  ;.  pFrame->pAux
2fb70 44 61 74 61 20 3d 20 70 2d 3e 70 41 75 78 44 61  Data = p->pAuxDa
2fb80 74 61 3b 0a 20 20 70 2d 3e 70 41 75 78 44 61 74  ta;.  p->pAuxDat
2fb90 61 20 3d 20 30 3b 0a 20 20 70 2d 3e 6e 43 68 61  a = 0;.  p->nCha
2fba0 6e 67 65 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46  nge = 0;.  p->pF
2fbb0 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20  rame = pFrame;. 
2fbc0 20 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20   p->aMem = aMem 
2fbd0 3d 20 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70  = VdbeFrameMem(p
2fbe0 46 72 61 6d 65 29 3b 0a 20 20 70 2d 3e 6e 4d 65  Frame);.  p->nMe
2fbf0 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69  m = pFrame->nChi
2fc00 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72  ldMem;.  p->nCur
2fc10 73 6f 72 20 3d 20 28 75 31 36 29 70 46 72 61 6d  sor = (u16)pFram
2fc20 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a 20 20  e->nChildCsr;.  
2fc30 70 2d 3e 61 70 43 73 72 20 3d 20 28 56 64 62 65  p->apCsr = (Vdbe
2fc40 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b  Cursor **)&aMem[
2fc50 70 2d 3e 6e 4d 65 6d 5d 3b 0a 20 20 70 2d 3e 61  p->nMem];.  p->a
2fc60 4f 70 20 3d 20 61 4f 70 20 3d 20 70 50 72 6f 67  Op = aOp = pProg
2fc70 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e 6e  ram->aOp;.  p->n
2fc80 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  Op = pProgram->n
2fc90 4f 70 3b 0a 20 20 70 2d 3e 61 4f 6e 63 65 46 6c  Op;.  p->aOnceFl
2fca0 61 67 20 3d 20 28 75 38 20 2a 29 26 70 2d 3e 61  ag = (u8 *)&p->a
2fcb0 70 43 73 72 5b 70 2d 3e 6e 43 75 72 73 6f 72 5d  pCsr[p->nCursor]
2fcc0 3b 0a 20 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67  ;.  p->nOnceFlag
2fcd0 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 6e   = pProgram->nOn
2fce0 63 65 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  ce;.#ifdef SQLIT
2fcf0 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43  E_ENABLE_STMT_SC
2fd00 41 4e 53 54 41 54 55 53 0a 20 20 70 2d 3e 61 6e  ANSTATUS.  p->an
2fd10 45 78 65 63 20 3d 20 30 3b 0a 23 65 6e 64 69 66  Exec = 0;.#endif
2fd20 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 2d 31  .  pOp = &aOp[-1
2fd30 5d 3b 0a 20 20 6d 65 6d 73 65 74 28 70 2d 3e 61  ];.  memset(p->a
2fd40 4f 6e 63 65 46 6c 61 67 2c 20 30 2c 20 70 2d 3e  OnceFlag, 0, p->
2fd50 6e 4f 6e 63 65 46 6c 61 67 29 3b 0a 0a 20 20 62  nOnceFlag);..  b
2fd60 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2fd70 64 65 3a 20 50 61 72 61 6d 20 50 31 20 50 32 20  de: Param P1 P2 
2fd80 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73  * * *.**.** This
2fd90 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20   opcode is only 
2fda0 65 76 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20  ever present in 
2fdb0 73 75 62 2d 70 72 6f 67 72 61 6d 73 20 63 61 6c  sub-programs cal
2fdc0 6c 65 64 20 76 69 61 20 74 68 65 20 0a 2a 2a 20  led via the .** 
2fdd0 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72  OP_Program instr
2fde0 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20 61 20 76  uction. Copy a v
2fdf0 61 6c 75 65 20 63 75 72 72 65 6e 74 6c 79 20 73  alue currently s
2fe00 74 6f 72 65 64 20 69 6e 20 61 20 6d 65 6d 6f 72  tored in a memor
2fe10 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20 74 68  y .** cell of th
2fe20 65 20 63 61 6c 6c 69 6e 67 20 28 70 61 72 65 6e  e calling (paren
2fe30 74 29 20 66 72 61 6d 65 20 74 6f 20 63 65 6c 6c  t) frame to cell
2fe40 20 50 32 20 69 6e 20 74 68 65 20 63 75 72 72 65   P2 in the curre
2fe50 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a 20 61 64  nt frames .** ad
2fe60 64 72 65 73 73 20 73 70 61 63 65 2e 20 54 68 69  dress space. Thi
2fe70 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72 69  s is used by tri
2fe80 67 67 65 72 20 70 72 6f 67 72 61 6d 73 20 74 6f  gger programs to
2fe90 20 61 63 63 65 73 73 20 74 68 65 20 6e 65 77 2e   access the new.
2fea0 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a 20  * .** and old.* 
2feb0 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  values..**.** Th
2fec0 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65  e address of the
2fed0 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 70 61 72   cell in the par
2fee0 65 6e 74 20 66 72 61 6d 65 20 69 73 20 64 65 74  ent frame is det
2fef0 65 72 6d 69 6e 65 64 20 62 79 20 61 64 64 69 6e  ermined by addin
2ff00 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f  g.** the value o
2ff10 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e  f the P1 argumen
2ff20 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  t to the value o
2ff30 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e  f the P1 argumen
2ff40 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63 61 6c 6c  t to the.** call
2ff50 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69  ing OP_Program i
2ff60 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
2ff70 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a 20 7b 20  ase OP_Param: { 
2ff80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
2ff90 32 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65  2 */.  VdbeFrame
2ffa0 20 2a 70 46 72 61 6d 65 3b 0a 20 20 4d 65 6d 20   *pFrame;.  Mem 
2ffb0 2a 70 49 6e 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  *pIn;.  pOut = o
2ffc0 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
2ffd0 20 70 4f 70 29 3b 0a 20 20 70 46 72 61 6d 65 20   pOp);.  pFrame 
2ffe0 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70  = p->pFrame;.  p
2fff0 49 6e 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d  In = &pFrame->aM
30000 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20 70 46 72  em[pOp->p1 + pFr
30010 61 6d 65 2d 3e 61 4f 70 5b 70 46 72 61 6d 65 2d  ame->aOp[pFrame-
30020 3e 70 63 5d 2e 70 31 5d 3b 20 20 20 0a 20 20 73  >pc].p1];   .  s
30030 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
30040 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
30050 49 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a  In, MEM_Ephem);.
30060 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e 64    break;.}..#end
30070 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51  if /* #ifndef SQ
30080 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
30090 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  R */..#ifndef SQ
300a0 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
300b0 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f 64 65 3a  N_KEY./* Opcode:
300c0 20 46 6b 43 6f 75 6e 74 65 72 20 50 31 20 50 32   FkCounter P1 P2
300d0 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
300e0 69 73 3a 20 66 6b 63 74 72 5b 50 31 5d 2b 3d 50  is: fkctr[P1]+=P
300f0 32 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65 6e  2.**.** Incremen
30100 74 20 61 20 22 63 6f 6e 73 74 72 61 69 6e 74 20  t a "constraint 
30110 63 6f 75 6e 74 65 72 22 20 62 79 20 50 32 20 28  counter" by P2 (
30120 50 32 20 6d 61 79 20 62 65 20 6e 65 67 61 74 69  P2 may be negati
30130 76 65 20 6f 72 20 70 6f 73 69 74 69 76 65 29 2e  ve or positive).
30140 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e  .** If P1 is non
30150 2d 7a 65 72 6f 2c 20 74 68 65 20 64 61 74 61 62  -zero, the datab
30160 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63  ase constraint c
30170 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d  ounter is increm
30180 65 6e 74 65 64 20 0a 2a 2a 20 28 64 65 66 65 72  ented .** (defer
30190 72 65 64 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  red foreign key 
301a0 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 20 4f 74  constraints). Ot
301b0 68 65 72 77 69 73 65 2c 20 69 66 20 50 31 20 69  herwise, if P1 i
301c0 73 20 7a 65 72 6f 2c 20 74 68 65 20 0a 2a 2a 20  s zero, the .** 
301d0 73 74 61 74 65 6d 65 6e 74 20 63 6f 75 6e 74 65  statement counte
301e0 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  r is incremented
301f0 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65   (immediate fore
30200 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
30210 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  nts)..*/.case OP
30220 5f 46 6b 43 6f 75 6e 74 65 72 3a 20 7b 0a 20 20  _FkCounter: {.  
30230 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26 20  if( db->flags & 
30240 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20  SQLITE_DeferFKs 
30250 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66 65  ){.    db->nDefe
30260 72 72 65 64 49 6d 6d 43 6f 6e 73 20 2b 3d 20 70  rredImmCons += p
30270 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 20  Op->p2;.  }else 
30280 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  if( pOp->p1 ){. 
30290 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64     db->nDeferred
302a0 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b  Cons += pOp->p2;
302b0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d  .  }else{.    p-
302c0 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 20 2b  >nFkConstraint +
302d0 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 0a 20  = pOp->p2;.  }. 
302e0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
302f0 63 6f 64 65 3a 20 46 6b 49 66 5a 65 72 6f 20 50  code: FkIfZero P
30300 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
30310 6e 6f 70 73 69 73 3a 20 69 66 20 66 6b 63 74 72  nopsis: if fkctr
30320 5b 50 31 5d 3d 3d 30 20 67 6f 74 6f 20 50 32 0a  [P1]==0 goto P2.
30330 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
30340 65 20 74 65 73 74 73 20 69 66 20 61 20 66 6f 72  e tests if a for
30350 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
30360 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 63  int-counter is c
30370 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a 2a  urrently zero..*
30380 2a 20 49 66 20 73 6f 2c 20 6a 75 6d 70 20 74 6f  * If so, jump to
30390 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e   instruction P2.
303a0 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c   Otherwise, fall
303b0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
303c0 6e 65 78 74 20 0a 2a 2a 20 69 6e 73 74 72 75 63  next .** instruc
303d0 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  tion..**.** If P
303e0 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  1 is non-zero, t
303f0 68 65 6e 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hen the jump is 
30400 74 61 6b 65 6e 20 69 66 20 74 68 65 20 64 61 74  taken if the dat
30410 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74  abase constraint
30420 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20 69 73 20 7a  -counter.** is z
30430 65 72 6f 20 28 74 68 65 20 6f 6e 65 20 74 68 61  ero (the one tha
30440 74 20 63 6f 75 6e 74 73 20 64 65 66 65 72 72 65  t counts deferre
30450 64 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  d constraint vio
30460 6c 61 74 69 6f 6e 73 29 2e 20 49 66 20 50 31 20  lations). If P1 
30470 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68 65 20  is.** zero, the 
30480 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
30490 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63   the statement c
304a0 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65  onstraint-counte
304b0 72 20 69 73 20 7a 65 72 6f 0a 2a 2a 20 28 69 6d  r is zero.** (im
304c0 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20  mediate foreign 
304d0 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  key constraint v
304e0 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a 63  iolations)..*/.c
304f0 61 73 65 20 4f 50 5f 46 6b 49 66 5a 65 72 6f 3a  ase OP_FkIfZero:
30500 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75   {         /* ju
30510 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d  mp */.  if( pOp-
30520 3e 70 31 20 29 7b 0a 20 20 20 20 56 64 62 65 42  >p1 ){.    VdbeB
30530 72 61 6e 63 68 54 61 6b 65 6e 28 64 62 2d 3e 6e  ranchTaken(db->n
30540 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20  DeferredCons==0 
30550 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  && db->nDeferred
30560 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a  ImmCons==0, 2);.
30570 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 44 65 66      if( db->nDef
30580 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20  erredCons==0 && 
30590 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
305a0 43 6f 6e 73 3d 3d 30 20 29 20 67 6f 74 6f 20 6a  Cons==0 ) goto j
305b0 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c  ump_to_p2;.  }el
305c0 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e  se{.    VdbeBran
305d0 63 68 54 61 6b 65 6e 28 70 2d 3e 6e 46 6b 43 6f  chTaken(p->nFkCo
305e0 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26 26 20 64  nstraint==0 && d
305f0 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
30600 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20  ons==0, 2);.    
30610 69 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72  if( p->nFkConstr
30620 61 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e  aint==0 && db->n
30630 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d  DeferredImmCons=
30640 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  =0 ) goto jump_t
30650 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  o_p2;.  }.  brea
30660 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 23  k;.}.#endif /* #
30670 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
30680 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 2a  IT_FOREIGN_KEY *
30690 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
306a0 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
306b0 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  MENT./* Opcode: 
306c0 4d 65 6d 4d 61 78 20 50 31 20 50 32 20 2a 20 2a  MemMax P1 P2 * *
306d0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
306e0 72 5b 50 31 5d 3d 6d 61 78 28 72 5b 50 31 5d 2c  r[P1]=max(r[P1],
306f0 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 50 31 20  r[P2]).**.** P1 
30700 69 73 20 61 20 72 65 67 69 73 74 65 72 20 69 6e  is a register in
30710 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20   the root frame 
30720 6f 66 20 74 68 69 73 20 56 4d 20 28 74 68 65 20  of this VM (the 
30730 72 6f 6f 74 20 66 72 61 6d 65 20 69 73 0a 2a 2a  root frame is.**
30740 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20   different from 
30750 74 68 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d  the current fram
30760 65 20 69 66 20 74 68 69 73 20 69 6e 73 74 72 75  e if this instru
30770 63 74 69 6f 6e 20 69 73 20 62 65 69 6e 67 20 65  ction is being e
30780 78 65 63 75 74 65 64 0a 2a 2a 20 77 69 74 68 69  xecuted.** withi
30790 6e 20 61 20 73 75 62 2d 70 72 6f 67 72 61 6d 29  n a sub-program)
307a0 2e 20 53 65 74 20 74 68 65 20 76 61 6c 75 65 20  . Set the value 
307b0 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 74  of register P1 t
307c0 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66  o the maximum of
307d0 20 0a 2a 2a 20 69 74 73 20 63 75 72 72 65 6e 74   .** its current
307e0 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20 76   value and the v
307f0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
30800 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
30810 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 72 6f  instruction thro
30820 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74  ws an error if t
30830 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69  he memory cell i
30840 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a  s not initially.
30850 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  ** an integer..*
30860 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d 61 78  /.case OP_MemMax
30870 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e  : {        /* in
30880 32 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65  2 */.  VdbeFrame
30890 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69 66 28 20   *pFrame;.  if( 
308a0 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20  p->pFrame ){.   
308b0 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70   for(pFrame=p->p
308c0 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70  Frame; pFrame->p
308d0 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70  Parent; pFrame=p
308e0 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b  Frame->pParent);
308f0 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 70 46 72  .    pIn1 = &pFr
30900 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70  ame->aMem[pOp->p
30910 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  1];.  }else{.   
30920 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
30930 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20 20 61 73  p->p1];.  }.  as
30940 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
30950 28 70 49 6e 31 29 20 29 3b 0a 20 20 73 71 6c 69  (pIn1) );.  sqli
30960 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
30970 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49  rify(pIn1);.  pI
30980 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
30990 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  p2];.  sqlite3Vd
309a0 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
309b0 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 70 49 6e  pIn2);.  if( pIn
309c0 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69  1->u.i<pIn2->u.i
309d0 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69  ){.    pIn1->u.i
309e0 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20   = pIn2->u.i;.  
309f0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
30a00 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
30a10 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
30a20 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
30a30 49 66 50 6f 73 20 50 31 20 50 32 20 50 33 20 2a  IfPos P1 P2 P3 *
30a40 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
30a50 69 66 20 72 5b 50 31 5d 3e 30 20 74 68 65 6e 20  if r[P1]>0 then 
30a60 72 5b 50 31 5d 2d 3d 50 33 2c 20 67 6f 74 6f 20  r[P1]-=P3, goto 
30a70 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  P2.**.** Registe
30a80 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69  r P1 must contai
30a90 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a  n an integer..**
30aa0 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66   If the value of
30ab0 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
30ac0 31 20 6f 72 20 67 72 65 61 74 65 72 2c 20 73 75  1 or greater, su
30ad0 62 74 72 61 63 74 20 50 33 20 66 72 6f 6d 20 74  btract P3 from t
30ae0 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20 50  he.** value in P
30af0 31 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 50 32  1 and jump to P2
30b00 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 69  ..**.** If the i
30b10 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20  nitial value of 
30b20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 6c  register P1 is l
30b30 65 73 73 20 74 68 61 6e 20 31 2c 20 74 68 65 6e  ess than 1, then
30b40 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73   the.** value is
30b50 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 63   unchanged and c
30b60 6f 6e 74 72 6f 6c 20 70 61 73 73 65 73 20 74 68  ontrol passes th
30b70 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
30b80 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
30b90 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f 73 3a  /.case OP_IfPos:
30ba0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
30bb0 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
30bc0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
30bd0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
30be0 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  1->flags&MEM_Int
30bf0 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68   );.  VdbeBranch
30c00 54 61 6b 65 6e 28 20 70 49 6e 31 2d 3e 75 2e 69  Taken( pIn1->u.i
30c10 3e 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49  >0, 2);.  if( pI
30c20 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20 20 20  n1->u.i>0 ){.   
30c30 20 70 49 6e 31 2d 3e 75 2e 69 20 2d 3d 20 70 4f   pIn1->u.i -= pO
30c40 70 2d 3e 70 33 3b 0a 20 20 20 20 67 6f 74 6f 20  p->p3;.    goto 
30c50 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
30c60 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
30c70 70 63 6f 64 65 3a 20 4f 66 66 73 65 74 4c 69 6d  pcode: OffsetLim
30c80 69 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  it P1 P2 P3 * *.
30c90 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
30ca0 72 5b 50 31 5d 3e 30 20 74 68 65 6e 20 72 5b 50  r[P1]>0 then r[P
30cb0 32 5d 3d 72 5b 50 31 5d 2b 6d 61 78 28 30 2c 72  2]=r[P1]+max(0,r
30cc0 5b 50 33 5d 29 20 65 6c 73 65 20 72 5b 50 32 5d  [P3]) else r[P2]
30cd0 3d 28 2d 31 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73  =(-1).**.** This
30ce0 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73   opcode performs
30cf0 20 61 20 63 6f 6d 6d 6f 6e 6c 79 20 75 73 65 64   a commonly used
30d00 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 61 73 73   computation ass
30d10 6f 63 69 61 74 65 64 20 77 69 74 68 0a 2a 2a 20  ociated with.** 
30d20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53 45 54  LIMIT and OFFSET
30d30 20 70 72 6f 63 65 73 73 2e 20 20 72 5b 50 31 5d   process.  r[P1]
30d40 20 68 6f 6c 64 73 20 74 68 65 20 6c 69 6d 69 74   holds the limit
30d50 20 63 6f 75 6e 74 65 72 2e 20 20 72 5b 50 33 5d   counter.  r[P3]
30d60 0a 2a 2a 20 68 6f 6c 64 73 20 74 68 65 20 6f 66  .** holds the of
30d70 66 73 65 74 20 63 6f 75 6e 74 65 72 2e 20 20 54  fset counter.  T
30d80 68 65 20 6f 70 63 6f 64 65 20 63 6f 6d 70 75 74  he opcode comput
30d90 65 73 20 74 68 65 20 63 6f 6d 62 69 6e 65 64 20  es the combined 
30da0 76 61 6c 75 65 0a 2a 2a 20 6f 66 20 74 68 65 20  value.** of the 
30db0 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53 45 54  LIMIT and OFFSET
30dc0 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61 74   and stores that
30dd0 20 76 61 6c 75 65 20 69 6e 20 72 5b 50 32 5d 2e   value in r[P2].
30de0 20 20 54 68 65 20 72 5b 50 32 5d 0a 2a 2a 20 76    The r[P2].** v
30df0 61 6c 75 65 20 63 6f 6d 70 75 74 65 64 20 69 73  alue computed is
30e00 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65   the total numbe
30e10 72 20 6f 66 20 72 6f 77 73 20 74 68 61 74 20 77  r of rows that w
30e20 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 0a 2a  ill need to be.*
30e30 2a 20 76 69 73 69 74 65 64 20 69 6e 20 6f 72 64  * visited in ord
30e40 65 72 20 74 6f 20 63 6f 6d 70 6c 65 74 65 20 74  er to complete t
30e50 68 65 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20  he query..**.** 
30e60 49 66 20 72 5b 50 33 5d 20 69 73 20 7a 65 72 6f  If r[P3] is zero
30e70 20 6f 72 20 6e 65 67 61 74 69 76 65 2c 20 74 68   or negative, th
30e80 61 74 20 6d 65 61 6e 73 20 74 68 65 72 65 20 69  at means there i
30e90 73 20 6e 6f 20 4f 46 46 53 45 54 0a 2a 2a 20 61  s no OFFSET.** a
30ea0 6e 64 20 72 5b 50 32 5d 20 69 73 20 73 65 74 20  nd r[P2] is set 
30eb0 74 6f 20 62 65 20 74 68 65 20 76 61 6c 75 65 20  to be the value 
30ec0 6f 66 20 74 68 65 20 4c 49 4d 49 54 2c 20 72 5b  of the LIMIT, r[
30ed0 50 31 5d 2e 0a 2a 2a 0a 2a 2a 20 69 66 20 72 5b  P1]..**.** if r[
30ee0 50 31 5d 20 69 73 20 7a 65 72 6f 20 6f 72 20 6e  P1] is zero or n
30ef0 65 67 61 74 69 76 65 2c 20 74 68 61 74 20 6d 65  egative, that me
30f00 61 6e 73 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ans there is no 
30f10 4c 49 4d 49 54 0a 2a 2a 20 61 6e 64 20 72 5b 50  LIMIT.** and r[P
30f20 32 5d 20 69 73 20 73 65 74 20 74 6f 20 2d 31 2e  2] is set to -1.
30f30 20 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 77 69 73   .**.** Otherwis
30f40 65 2c 20 72 5b 50 32 5d 20 69 73 20 73 65 74 20  e, r[P2] is set 
30f50 74 6f 20 74 68 65 20 73 75 6d 20 6f 66 20 72 5b  to the sum of r[
30f60 50 31 5d 20 61 6e 64 20 72 5b 50 33 5d 2e 0a 2a  P1] and r[P3]..*
30f70 2f 0a 63 61 73 65 20 4f 50 5f 4f 66 66 73 65 74  /.case OP_Offset
30f80 4c 69 6d 69 74 3a 20 7b 20 20 20 20 2f 2a 20 69  Limit: {    /* i
30f90 6e 31 2c 20 6f 75 74 32 2c 20 69 6e 33 20 2a 2f  n1, out2, in3 */
30fa0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
30fb0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33  pOp->p1];.  pIn3
30fc0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
30fd0 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  ];.  pOut = out2
30fe0 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
30ff0 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  p);.  assert( pI
31000 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
31010 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Int );.  assert(
31020 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
31030 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 4f 75 74  EM_Int );.  pOut
31040 2d 3e 75 2e 69 20 3d 20 70 49 6e 31 2d 3e 75 2e  ->u.i = pIn1->u.
31050 69 3c 3d 30 20 3f 20 2d 31 20 3a 20 70 49 6e 31  i<=0 ? -1 : pIn1
31060 2d 3e 75 2e 69 2b 28 70 49 6e 33 2d 3e 75 2e 69  ->u.i+(pIn3->u.i
31070 3e 30 3f 70 49 6e 33 2d 3e 75 2e 69 3a 30 29 3b  >0?pIn3->u.i:0);
31080 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
31090 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74 5a 65 72  Opcode: IfNotZer
310a0 6f 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  o P1 P2 P3 * *.*
310b0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
310c0 5b 50 31 5d 21 3d 30 20 74 68 65 6e 20 72 5b 50  [P1]!=0 then r[P
310d0 31 5d 2d 3d 50 33 2c 20 67 6f 74 6f 20 50 32 0a  1]-=P3, goto P2.
310e0 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  **.** Register P
310f0 31 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 61  1 must contain a
31100 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20 74  n integer.  If t
31110 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
31120 67 69 73 74 65 72 20 50 31 20 69 73 0a 2a 2a 20  gister P1 is.** 
31130 69 6e 69 74 69 61 6c 6c 79 20 6e 6f 6e 7a 65 72  initially nonzer
31140 6f 2c 20 74 68 65 6e 20 73 75 62 74 72 61 63 74  o, then subtract
31150 20 50 33 20 66 72 6f 6d 20 74 68 65 20 76 61 6c   P3 from the val
31160 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
31170 31 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f  1 and.** jump to
31180 20 50 32 2e 20 20 49 66 20 72 65 67 69 73 74 65   P2.  If registe
31190 72 20 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c  r P1 is initiall
311a0 79 20 7a 65 72 6f 2c 20 6c 65 61 76 65 20 69 74  y zero, leave it
311b0 20 75 6e 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e   unchanged.** an
311c0 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e 0a  d fall through..
311d0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74  */.case OP_IfNot
311e0 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 2f  Zero: {        /
311f0 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
31200 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
31210 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
31220 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45  ( pIn1->flags&ME
31230 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62 65 42  M_Int );.  VdbeB
31240 72 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d  ranchTaken(pIn1-
31250 3e 75 2e 69 3c 30 2c 20 32 29 3b 0a 20 20 69 66  >u.i<0, 2);.  if
31260 28 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b 0a 20  ( pIn1->u.i ){. 
31270 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2d 3d      pIn1->u.i -=
31280 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 20 67   pOp->p3;.     g
31290 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
312a0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
312b0 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 63 72 4a  /* Opcode: DecrJ
312c0 75 6d 70 5a 65 72 6f 20 50 31 20 50 32 20 2a 20  umpZero P1 P2 * 
312d0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
312e0 20 69 66 20 28 2d 2d 72 5b 50 31 5d 29 3d 3d 30   if (--r[P1])==0
312f0 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52   goto P2.**.** R
31300 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20  egister P1 must 
31310 68 6f 6c 64 20 61 6e 20 69 6e 74 65 67 65 72 2e  hold an integer.
31320 20 20 44 65 63 72 65 6d 65 6e 74 20 74 68 65 20    Decrement the 
31330 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
31340 72 20 50 31 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d  r P1.** then jum
31350 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 6e  p to P2 if the n
31360 65 77 20 76 61 6c 75 65 20 69 73 20 65 78 61 63  ew value is exac
31370 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73  tly zero..*/.cas
31380 65 20 4f 50 5f 44 65 63 72 4a 75 6d 70 5a 65 72  e OP_DecrJumpZer
31390 6f 3a 20 7b 20 20 20 20 20 20 2f 2a 20 6a 75 6d  o: {      /* jum
313a0 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
313b0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
313c0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
313d0 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  1->flags&MEM_Int
313e0 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 2d   );.  pIn1->u.i-
313f0 2d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  -;.  VdbeBranchT
31400 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3d 3d  aken(pIn1->u.i==
31410 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e  0, 2);.  if( pIn
31420 31 2d 3e 75 2e 69 3d 3d 30 20 29 20 67 6f 74 6f  1->u.i==0 ) goto
31430 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62   jump_to_p2;.  b
31440 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63  reak;.}.../* Opc
31450 6f 64 65 3a 20 41 67 67 53 74 65 70 30 20 2a 20  ode: AggStep0 * 
31460 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
31470 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72  ynopsis: accum=r
31480 5b 50 33 5d 20 73 74 65 70 28 72 5b 50 32 40 50  [P3] step(r[P2@P
31490 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74  5]).**.** Execut
314a0 65 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74  e the step funct
314b0 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65  ion for an aggre
314c0 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75  gate.  The.** fu
314d0 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61 72  nction has P5 ar
314e0 67 75 6d 65 6e 74 73 2e 20 20 20 50 34 20 69 73  guments.   P4 is
314f0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
31500 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73 74 72  e FuncDef.** str
31510 75 63 74 75 72 65 20 74 68 61 74 20 73 70 65 63  ucture that spec
31520 69 66 69 65 73 20 74 68 65 20 66 75 6e 63 74 69  ifies the functi
31530 6f 6e 2e 20 20 52 65 67 69 73 74 65 72 20 50 33  on.  Register P3
31540 20 69 73 20 74 68 65 0a 2a 2a 20 61 63 63 75 6d   is the.** accum
31550 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68  ulator..**.** Th
31560 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61  e P5 arguments a
31570 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65  re taken from re
31580 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 69 74  gister P2 and it
31590 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e  s.** successors.
315a0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .*/./* Opcode: A
315b0 67 67 53 74 65 70 20 2a 20 50 32 20 50 33 20 50  ggStep * P2 P3 P
315c0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
315d0 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73 74  : accum=r[P3] st
315e0 65 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a  ep(r[P2@P5]).**.
315f0 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 73  ** Execute the s
31600 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72  tep function for
31610 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20   an aggregate.  
31620 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20  The.** function 
31630 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73  has P5 arguments
31640 2e 20 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .   P4 is a poin
31650 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65  ter to an sqlite
31660 33 5f 63 6f 6e 74 65 78 74 0a 2a 2a 20 6f 62 6a  3_context.** obj
31670 65 63 74 20 74 68 61 74 20 69 73 20 75 73 65 64  ect that is used
31680 20 74 6f 20 72 75 6e 20 74 68 65 20 66 75 6e 63   to run the func
31690 74 69 6f 6e 2e 20 20 52 65 67 69 73 74 65 72 20  tion.  Register 
316a0 50 33 20 69 73 0a 2a 2a 20 61 73 20 74 68 65 20  P3 is.** as the 
316b0 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a  accumulator..**.
316c0 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d 65  ** The P5 argume
316d0 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72  nts are taken fr
316e0 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61  om register P2 a
316f0 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73  nd its.** succes
31700 73 6f 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  sors..**.** This
31710 20 6f 70 63 6f 64 65 20 69 73 20 69 6e 69 74 69   opcode is initi
31720 61 6c 6c 79 20 63 6f 64 65 64 20 61 73 20 4f 50  ally coded as OP
31730 5f 41 67 67 53 74 65 70 30 2e 20 20 4f 6e 20 66  _AggStep0.  On f
31740 69 72 73 74 20 65 76 61 6c 75 61 74 69 6f 6e 2c  irst evaluation,
31750 0a 2a 2a 20 74 68 65 20 46 75 6e 63 44 65 66 20  .** the FuncDef 
31760 73 74 6f 72 65 64 20 69 6e 20 50 34 20 69 73 20  stored in P4 is 
31770 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61  converted into a
31780 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  n sqlite3_contex
31790 74 20 61 6e 64 0a 2a 2a 20 74 68 65 20 6f 70 63  t and.** the opc
317a0 6f 64 65 20 69 73 20 63 68 61 6e 67 65 64 2e 20  ode is changed. 
317b0 20 49 6e 20 74 68 69 73 20 77 61 79 2c 20 74 68   In this way, th
317c0 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  e initialization
317d0 20 6f 66 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74   of the.** sqlit
317e0 65 33 5f 63 6f 6e 74 65 78 74 20 6f 6e 6c 79 20  e3_context only 
317f0 68 61 70 70 65 6e 73 20 6f 6e 63 65 2c 20 69 6e  happens once, in
31800 73 74 65 61 64 20 6f 66 20 6f 6e 20 65 61 63 68  stead of on each
31810 20 63 61 6c 6c 20 74 6f 20 74 68 65 0a 2a 2a 20   call to the.** 
31820 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a  step function..*
31830 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65  /.case OP_AggSte
31840 70 30 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20  p0: {.  int n;. 
31850 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
31860 20 2a 70 43 74 78 3b 0a 0a 20 20 61 73 73 65 72   *pCtx;..  asser
31870 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
31880 50 34 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20 20  P4_FUNCDEF );.  
31890 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61  n = pOp->p5;.  a
318a0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
318b0 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d   && pOp->p3<=(p-
318c0 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
318d0 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72  rsor) );.  asser
318e0 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d  t( n==0 || (pOp-
318f0 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  >p2>0 && pOp->p2
31900 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  +n<=(p->nMem+1 -
31910 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 29 20   p->nCursor)+1) 
31920 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
31930 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20  ->p3<pOp->p2 || 
31940 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32  pOp->p3>=pOp->p2
31950 2b 6e 20 29 3b 0a 20 20 70 43 74 78 20 3d 20 73  +n );.  pCtx = s
31960 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
31970 77 4e 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28 2a  wNN(db, sizeof(*
31980 70 43 74 78 29 20 2b 20 28 6e 2d 31 29 2a 73 69  pCtx) + (n-1)*si
31990 7a 65 6f 66 28 73 71 6c 69 74 65 33 5f 76 61 6c  zeof(sqlite3_val
319a0 75 65 2a 29 29 3b 0a 20 20 69 66 28 20 70 43 74  ue*));.  if( pCt
319b0 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  x==0 ) goto no_m
319c0 65 6d 3b 0a 20 20 70 43 74 78 2d 3e 70 4d 65 6d  em;.  pCtx->pMem
319d0 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e 70 46   = 0;.  pCtx->pF
319e0 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46  unc = pOp->p4.pF
319f0 75 6e 63 3b 0a 20 20 70 43 74 78 2d 3e 69 4f 70  unc;.  pCtx->iOp
31a00 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61   = (int)(pOp - a
31a10 4f 70 29 3b 0a 20 20 70 43 74 78 2d 3e 70 56 64  Op);.  pCtx->pVd
31a20 62 65 20 3d 20 70 3b 0a 20 20 70 43 74 78 2d 3e  be = p;.  pCtx->
31a30 61 72 67 63 20 3d 20 6e 3b 0a 20 20 70 4f 70 2d  argc = n;.  pOp-
31a40 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 46 55 4e  >p4type = P4_FUN
31a50 43 43 54 58 3b 0a 20 20 70 4f 70 2d 3e 70 34 2e  CCTX;.  pOp->p4.
31a60 70 43 74 78 20 3d 20 70 43 74 78 3b 0a 20 20 70  pCtx = pCtx;.  p
31a70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f  Op->opcode = OP_
31a80 41 67 67 53 74 65 70 3b 0a 20 20 2f 2a 20 46 61  AggStep;.  /* Fa
31a90 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20  ll through into 
31aa0 4f 50 5f 41 67 67 53 74 65 70 20 2a 2f 0a 7d 0a  OP_AggStep */.}.
31ab0 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65 70 3a  case OP_AggStep:
31ac0 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 71   {.  int i;.  sq
31ad0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
31ae0 43 74 78 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  Ctx;.  Mem *pMem
31af0 3b 0a 20 20 4d 65 6d 20 74 3b 0a 0a 20 20 61 73  ;.  Mem t;..  as
31b00 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
31b10 65 3d 3d 50 34 5f 46 55 4e 43 43 54 58 20 29 3b  e==P4_FUNCCTX );
31b20 0a 20 20 70 43 74 78 20 3d 20 70 4f 70 2d 3e 70  .  pCtx = pOp->p
31b30 34 2e 70 43 74 78 3b 0a 20 20 70 4d 65 6d 20 3d  4.pCtx;.  pMem =
31b40 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
31b50 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20 66  ..  /* If this f
31b60 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e 73 69 64  unction is insid
31b70 65 20 6f 66 20 61 20 74 72 69 67 67 65 72 2c 20  e of a trigger, 
31b80 74 68 65 20 72 65 67 69 73 74 65 72 20 61 72 72  the register arr
31b90 61 79 20 69 6e 20 61 4d 65 6d 5b 5d 0a 20 20 2a  ay in aMem[].  *
31ba0 2a 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66  * might change f
31bb0 72 6f 6d 20 6f 6e 65 20 65 76 61 6c 75 61 74 69  rom one evaluati
31bc0 6f 6e 20 74 6f 20 74 68 65 20 6e 65 78 74 2e 20  on to the next. 
31bd0 20 54 68 65 20 6e 65 78 74 20 62 6c 6f 63 6b 20   The next block 
31be0 6f 66 20 63 6f 64 65 0a 20 20 2a 2a 20 63 68 65  of code.  ** che
31bf0 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74 68  cks to see if th
31c00 65 20 72 65 67 69 73 74 65 72 20 61 72 72 61 79  e register array
31c10 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20 61 6e   has changed, an
31c20 64 20 69 66 20 73 6f 20 69 74 0a 20 20 2a 2a 20  d if so it.  ** 
31c30 72 65 69 6e 69 74 69 61 6c 69 7a 65 73 20 74 68  reinitializes th
31c40 65 20 72 65 6c 61 76 61 6e 74 20 70 61 72 74 73  e relavant parts
31c50 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f   of the sqlite3_
31c60 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74 20 2a  context object *
31c70 2f 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 70 4d  /.  if( pCtx->pM
31c80 65 6d 20 21 3d 20 70 4d 65 6d 20 29 7b 0a 20 20  em != pMem ){.  
31c90 20 20 70 43 74 78 2d 3e 70 4d 65 6d 20 3d 20 70    pCtx->pMem = p
31ca0 4d 65 6d 3b 0a 20 20 20 20 66 6f 72 28 69 3d 70  Mem;.    for(i=p
31cb0 43 74 78 2d 3e 61 72 67 63 2d 31 3b 20 69 3e 3d  Ctx->argc-1; i>=
31cc0 30 3b 20 69 2d 2d 29 20 70 43 74 78 2d 3e 61 72  0; i--) pCtx->ar
31cd0 67 76 5b 69 5d 20 3d 20 26 61 4d 65 6d 5b 70 4f  gv[i] = &aMem[pO
31ce0 70 2d 3e 70 32 2b 69 5d 3b 0a 20 20 7d 0a 0a 23  p->p2+i];.  }..#
31cf0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
31d00 55 47 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  UG.  for(i=0; i<
31d10 70 43 74 78 2d 3e 61 72 67 63 3b 20 69 2b 2b 29  pCtx->argc; i++)
31d20 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  {.    assert( me
31d30 6d 49 73 56 61 6c 69 64 28 70 43 74 78 2d 3e 61  mIsValid(pCtx->a
31d40 72 67 76 5b 69 5d 29 20 29 3b 0a 20 20 20 20 52  rgv[i]) );.    R
31d50 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
31d60 70 2d 3e 70 32 2b 69 2c 20 70 43 74 78 2d 3e 61  p->p2+i, pCtx->a
31d70 72 67 76 5b 69 5d 29 3b 0a 20 20 7d 0a 23 65 6e  rgv[i]);.  }.#en
31d80 64 69 66 0a 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b  dif..  pMem->n++
31d90 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
31da0 65 6d 49 6e 69 74 28 26 74 2c 20 64 62 2c 20 4d  emInit(&t, db, M
31db0 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 70 43 74 78  EM_Null);.  pCtx
31dc0 2d 3e 70 4f 75 74 20 3d 20 26 74 3b 0a 20 20 70  ->pOut = &t;.  p
31dd0 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78  Ctx->fErrorOrAux
31de0 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e 73 6b   = 0;.  pCtx->sk
31df0 69 70 46 6c 61 67 20 3d 20 30 3b 0a 20 20 28 70  ipFlag = 0;.  (p
31e00 43 74 78 2d 3e 70 46 75 6e 63 2d 3e 78 53 46 75  Ctx->pFunc->xSFu
31e10 6e 63 29 28 70 43 74 78 2c 70 43 74 78 2d 3e 61  nc)(pCtx,pCtx->a
31e20 72 67 63 2c 70 43 74 78 2d 3e 61 72 67 76 29 3b  rgc,pCtx->argv);
31e30 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30 35   /* IMP: R-24505
31e40 2d 32 33 32 33 30 20 2a 2f 0a 20 20 69 66 28 20  -23230 */.  if( 
31e50 70 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75  pCtx->fErrorOrAu
31e60 78 20 29 7b 0a 20 20 20 20 69 66 28 20 70 43 74  x ){.    if( pCt
31e70 78 2d 3e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20  x->isError ){.  
31e80 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
31e90 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71  rror(p, "%s", sq
31ea0 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
31eb0 28 26 74 29 29 3b 0a 20 20 20 20 20 20 72 63 20  (&t));.      rc 
31ec0 3d 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 3b  = pCtx->isError;
31ed0 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
31ee0 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
31ef0 28 26 74 29 3b 0a 20 20 20 20 69 66 28 20 72 63  (&t);.    if( rc
31f00 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
31f10 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 65  e_to_error;.  }e
31f20 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
31f30 20 74 2e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 4e 75   t.flags==MEM_Nu
31f40 6c 6c 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  ll );.  }.  if( 
31f50 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20 29  pCtx->skipFlag )
31f60 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
31f70 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  p[-1].opcode==OP
31f80 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20  _CollSeq );.    
31f90 69 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 31 3b 0a  i = pOp[-1].p1;.
31fa0 20 20 20 20 69 66 28 20 69 20 29 20 73 71 6c 69      if( i ) sqli
31fb0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74  te3VdbeMemSetInt
31fc0 36 34 28 26 61 4d 65 6d 5b 69 5d 2c 20 31 29 3b  64(&aMem[i], 1);
31fd0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
31fe0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 46  ./* Opcode: AggF
31ff0 69 6e 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20  inal P1 P2 * P4 
32000 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61  *.** Synopsis: a
32010 63 63 75 6d 3d 72 5b 50 31 5d 20 4e 3d 50 32 0a  ccum=r[P1] N=P2.
32020 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68  **.** Execute th
32030 65 20 66 69 6e 61 6c 69 7a 65 72 20 66 75 6e 63  e finalizer func
32040 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72  tion for an aggr
32050 65 67 61 74 65 2e 20 20 50 31 20 69 73 0a 2a 2a  egate.  P1 is.**
32060 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61   the memory loca
32070 74 69 6f 6e 20 74 68 61 74 20 69 73 20 74 68 65  tion that is the
32080 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 66 6f 72   accumulator for
32090 20 74 68 65 20 61 67 67 72 65 67 61 74 65 2e 0a   the aggregate..
320a0 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20  **.** P2 is the 
320b0 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
320c0 6e 74 73 20 74 68 61 74 20 74 68 65 20 73 74 65  nts that the ste
320d0 70 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73  p function takes
320e0 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20 61 20   and.** P4 is a 
320f0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46  pointer to the F
32100 75 6e 63 44 65 66 20 66 6f 72 20 74 68 69 73 20  uncDef for this 
32110 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20 50  function.  The P
32120 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 69 73  2.** argument is
32130 20 6e 6f 74 20 75 73 65 64 20 62 79 20 74 68 69   not used by thi
32140 73 20 6f 70 63 6f 64 65 2e 20 20 49 74 20 69 73  s opcode.  It is
32150 20 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f 20 64   only there to d
32160 69 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a 20 66  isambiguate.** f
32170 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 63 61  unctions that ca
32180 6e 20 74 61 6b 65 20 76 61 72 79 69 6e 67 20 6e  n take varying n
32190 75 6d 62 65 72 73 20 6f 66 20 61 72 67 75 6d 65  umbers of argume
321a0 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50 34 20  nts.  The.** P4 
321b0 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e 6c 79  argument is only
321c0 20 6e 65 65 64 65 64 20 66 6f 72 20 74 68 65 20   needed for the 
321d0 64 65 67 65 6e 65 72 61 74 65 20 63 61 73 65 20  degenerate case 
321e0 77 68 65 72 65 0a 2a 2a 20 74 68 65 20 73 74 65  where.** the ste
321f0 70 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 6e  p function was n
32200 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 63 61  ot previously ca
32210 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  lled..*/.case OP
32220 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d  _AggFinal: {.  M
32230 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73 73 65  em *pMem;.  asse
32240 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26  rt( pOp->p1>0 &&
32250 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d   pOp->p1<=(p->nM
32260 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
32270 72 29 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20 26  r) );.  pMem = &
32280 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
32290 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e   assert( (pMem->
322a0 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e 75  flags & ~(MEM_Nu
322b0 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30 20  ll|MEM_Agg))==0 
322c0 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
322d0 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a 65  3VdbeMemFinalize
322e0 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70  (pMem, pOp->p4.p
322f0 46 75 6e 63 29 3b 0a 20 20 69 66 28 20 72 63 20  Func);.  if( rc 
32300 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
32310 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c  beError(p, "%s",
32320 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
32330 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20 20 20  ext(pMem));.    
32340 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
32350 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73  o_error;.  }.  s
32360 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
32370 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d 2c 20 65  Encoding(pMem, e
32380 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44 41  ncoding);.  UPDA
32390 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
323a0 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20 73 71 6c  pMem);.  if( sql
323b0 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
323c0 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20 20 67  g(pMem) ){.    g
323d0 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
323e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
323f0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
32400 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  _WAL./* Opcode: 
32410 43 68 65 63 6b 70 6f 69 6e 74 20 50 31 20 50 32  Checkpoint P1 P2
32420 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68   P3 * *.**.** Ch
32430 65 63 6b 70 6f 69 6e 74 20 64 61 74 61 62 61 73  eckpoint databas
32440 65 20 50 31 2e 20 54 68 69 73 20 69 73 20 61 20  e P1. This is a 
32450 6e 6f 2d 6f 70 20 69 66 20 50 31 20 69 73 20 6e  no-op if P1 is n
32460 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 0a  ot currently in.
32470 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e 20 50 61 72  ** WAL mode. Par
32480 61 6d 65 74 65 72 20 50 32 20 69 73 20 6f 6e 65  ameter P2 is one
32490 20 6f 66 20 53 51 4c 49 54 45 5f 43 48 45 43 4b   of SQLITE_CHECK
324a0 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 2c 20 46  POINT_PASSIVE, F
324b0 55 4c 4c 2c 0a 2a 2a 20 52 45 53 54 41 52 54 2c  ULL,.** RESTART,
324c0 20 6f 72 20 54 52 55 4e 43 41 54 45 2e 20 20 57   or TRUNCATE.  W
324d0 72 69 74 65 20 31 20 6f 72 20 30 20 69 6e 74 6f  rite 1 or 0 into
324e0 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74 68 65 20   mem[P3] if the 
324f0 63 68 65 63 6b 70 6f 69 6e 74 20 72 65 74 75 72  checkpoint retur
32500 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53  ns.** SQLITE_BUS
32510 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73 70 65 63  Y or not, respec
32520 74 69 76 65 6c 79 2e 20 20 57 72 69 74 65 20 74  tively.  Write t
32530 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  he number of pag
32540 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20 57 41 4c  es in the.** WAL
32550 20 61 66 74 65 72 20 74 68 65 20 63 68 65 63 6b   after the check
32560 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b 50  point into mem[P
32570 33 2b 31 5d 20 61 6e 64 20 74 68 65 20 6e 75 6d  3+1] and the num
32580 62 65 72 20 6f 66 20 70 61 67 65 73 0a 2a 2a 20  ber of pages.** 
32590 69 6e 20 74 68 65 20 57 41 4c 20 74 68 61 74 20  in the WAL that 
325a0 68 61 76 65 20 62 65 65 6e 20 63 68 65 63 6b 70  have been checkp
325b0 6f 69 6e 74 65 64 20 61 66 74 65 72 20 74 68 65  ointed after the
325c0 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20 63   checkpoint.** c
325d0 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f 20 6d 65  ompletes into me
325e0 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77 65 76 65  m[P3+2].  Howeve
325f0 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72 2c 20 6d  r on an error, m
32600 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a 20  em[P3+1] and.** 
32610 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65 20 69 6e  mem[P3+2] are in
32620 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 2d 31 2e  itialized to -1.
32630 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68 65 63  .*/.case OP_Chec
32640 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20  kpoint: {.  int 
32650 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
32660 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
32670 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  oop counter */. 
32680 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b 20 20 20   int aRes[3];   
32690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
326a0 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a 20   /* Results */. 
326b0 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20   Mem *pMem;     
326c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
326d0 20 2f 2a 20 57 72 69 74 65 20 72 65 73 75 6c 74   /* Write result
326e0 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61 73 73  s here */..  ass
326f0 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
32700 3d 3d 30 20 29 3b 0a 20 20 61 52 65 73 5b 30 5d  ==0 );.  aRes[0]
32710 20 3d 20 30 3b 0a 20 20 61 52 65 73 5b 31 5d 20   = 0;.  aRes[1] 
32720 3d 20 61 52 65 73 5b 32 5d 20 3d 20 2d 31 3b 0a  = aRes[2] = -1;.
32730 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
32740 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  2==SQLITE_CHECKP
32750 4f 49 4e 54 5f 50 41 53 53 49 56 45 0a 20 20 20  OINT_PASSIVE.   
32760 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d      || pOp->p2==
32770 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
32780 54 5f 46 55 4c 4c 0a 20 20 20 20 20 20 20 7c 7c  T_FULL.       ||
32790 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
327a0 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54  _CHECKPOINT_REST
327b0 41 52 54 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f  ART.       || pO
327c0 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48  p->p2==SQLITE_CH
327d0 45 43 4b 50 4f 49 4e 54 5f 54 52 55 4e 43 41 54  ECKPOINT_TRUNCAT
327e0 45 0a 20 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  E.  );.  rc = sq
327f0 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28  lite3Checkpoint(
32800 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
32810 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31 5d 2c 20  ->p2, &aRes[1], 
32820 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20 69 66 28  &aRes[2]);.  if(
32830 20 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20 72   rc ){.    if( r
32840 63 21 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  c!=SQLITE_BUSY )
32850 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
32860 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 72 63  to_error;.    rc
32870 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
32880 20 20 61 52 65 73 5b 30 5d 20 3d 20 31 3b 0a 20    aRes[0] = 1;. 
32890 20 7d 0a 20 20 66 6f 72 28 69 3d 30 2c 20 70 4d   }.  for(i=0, pM
328a0 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
328b0 70 33 5d 3b 20 69 3c 33 3b 20 69 2b 2b 2c 20 70  p3]; i<3; i++, p
328c0 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69  Mem++){.    sqli
328d0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74  te3VdbeMemSetInt
328e0 36 34 28 70 4d 65 6d 2c 20 28 69 36 34 29 61 52  64(pMem, (i64)aR
328f0 65 73 5b 69 5d 29 3b 0a 20 20 7d 20 20 20 20 0a  es[i]);.  }    .
32900 20 20 62 72 65 61 6b 3b 0a 7d 3b 20 20 0a 23 65    break;.};  .#e
32910 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
32920 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41  LITE_OMIT_PRAGMA
32930 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 6f 75 72  ./* Opcode: Jour
32940 6e 61 6c 4d 6f 64 65 20 50 31 20 50 32 20 50 33  nalMode P1 P2 P3
32950 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67   * *.**.** Chang
32960 65 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f  e the journal mo
32970 64 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 50  de of database P
32980 31 20 74 6f 20 50 33 2e 20 50 33 20 6d 75 73 74  1 to P3. P3 must
32990 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 0a 2a   be one of the.*
329a0 2a 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  * PAGER_JOURNALM
329b0 4f 44 45 5f 58 58 58 20 76 61 6c 75 65 73 2e 20  ODE_XXX values. 
329c0 49 66 20 63 68 61 6e 67 69 6e 67 20 62 65 74 77  If changing betw
329d0 65 65 6e 20 74 68 65 20 76 61 72 69 6f 75 73 20  een the various 
329e0 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6d 6f 64 65  rollback.** mode
329f0 73 20 28 64 65 6c 65 74 65 2c 20 74 72 75 6e 63  s (delete, trunc
32a00 61 74 65 2c 20 70 65 72 73 69 73 74 2c 20 6f 66  ate, persist, of
32a10 66 20 61 6e 64 20 6d 65 6d 6f 72 79 29 2c 20 74  f and memory), t
32a20 68 69 73 20 69 73 20 61 20 73 69 6d 70 6c 65 0a  his is a simple.
32a30 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 4e 6f  ** operation. No
32a40 20 49 4f 20 69 73 20 72 65 71 75 69 72 65 64 2e   IO is required.
32a50 0a 2a 2a 0a 2a 2a 20 49 66 20 63 68 61 6e 67 69  .**.** If changi
32a60 6e 67 20 69 6e 74 6f 20 6f 72 20 6f 75 74 20 6f  ng into or out o
32a70 66 20 57 41 4c 20 6d 6f 64 65 20 74 68 65 20 70  f WAL mode the p
32a80 72 6f 63 65 64 75 72 65 20 69 73 20 6d 6f 72 65  rocedure is more
32a90 20 63 6f 6d 70 6c 69 63 61 74 65 64 2e 0a 2a 2a   complicated..**
32aa0 0a 2a 2a 20 57 72 69 74 65 20 61 20 73 74 72 69  .** Write a stri
32ab0 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ng containing th
32ac0 65 20 66 69 6e 61 6c 20 6a 6f 75 72 6e 61 6c 2d  e final journal-
32ad0 6d 6f 64 65 20 74 6f 20 72 65 67 69 73 74 65 72  mode to register
32ae0 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
32af0 4a 6f 75 72 6e 61 6c 4d 6f 64 65 3a 20 7b 20 20  JournalMode: {  
32b00 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 42    /* out2 */.  B
32b10 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20  tree *pBt;      
32b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
32b30 2a 20 42 74 72 65 65 20 74 6f 20 63 68 61 6e 67  * Btree to chang
32b40 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f  e journal mode o
32b50 66 20 2a 2f 0a 20 20 50 61 67 65 72 20 2a 70 50  f */.  Pager *pP
32b60 61 67 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  ager;           
32b70 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 72 20         /* Pager 
32b80 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
32b90 70 42 74 20 2a 2f 0a 20 20 69 6e 74 20 65 4e 65  pBt */.  int eNe
32ba0 77 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  w;              
32bb0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 77 20           /* New 
32bc0 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a  journal mode */.
32bd0 20 20 69 6e 74 20 65 4f 6c 64 3b 20 20 20 20 20    int eOld;     
32be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32bf0 20 20 2f 2a 20 54 68 65 20 6f 6c 64 20 6a 6f 75    /* The old jou
32c00 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 23 69 66  rnal mode */.#if
32c10 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
32c20 5f 57 41 4c 0a 20 20 63 6f 6e 73 74 20 63 68 61  _WAL.  const cha
32c30 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 20 20 20  r *zFilename;   
32c40 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
32c50 66 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  f database file 
32c60 66 6f 72 20 70 50 61 67 65 72 20 2a 2f 0a 23 65  for pPager */.#e
32c70 6e 64 69 66 0a 0a 20 20 70 4f 75 74 20 3d 20 6f  ndif..  pOut = o
32c80 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
32c90 20 70 4f 70 29 3b 0a 20 20 65 4e 65 77 20 3d 20   pOp);.  eNew = 
32ca0 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72  pOp->p3;.  asser
32cb0 74 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  t( eNew==PAGER_J
32cc0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45 54  OURNALMODE_DELET
32cd0 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  E .       || eNe
32ce0 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
32cf0 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45 20 0a 20  MODE_TRUNCATE . 
32d00 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50        || eNew==P
32d10 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
32d20 5f 50 45 52 53 49 53 54 20 0a 20 20 20 20 20 20  _PERSIST .      
32d30 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
32d40 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 0a  JOURNALMODE_OFF.
32d50 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
32d60 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
32d70 45 5f 4d 45 4d 4f 52 59 0a 20 20 20 20 20 20 20  E_MEMORY.       
32d80 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
32d90 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20  OURNALMODE_WAL. 
32da0 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50        || eNew==P
32db0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
32dc0 5f 51 55 45 52 59 0a 20 20 29 3b 0a 20 20 61 73  _QUERY.  );.  as
32dd0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
32de0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
32df0 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
32e00 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
32e10 29 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e  );..  pBt = db->
32e20 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74  aDb[pOp->p1].pBt
32e30 3b 0a 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c  ;.  pPager = sql
32e40 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70  ite3BtreePager(p
32e50 42 74 29 3b 0a 20 20 65 4f 6c 64 20 3d 20 73 71  Bt);.  eOld = sq
32e60 6c 69 74 65 33 50 61 67 65 72 47 65 74 4a 6f 75  lite3PagerGetJou
32e70 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29  rnalMode(pPager)
32e80 3b 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41  ;.  if( eNew==PA
32e90 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
32ea0 51 55 45 52 59 20 29 20 65 4e 65 77 20 3d 20 65  QUERY ) eNew = e
32eb0 4f 6c 64 3b 0a 20 20 69 66 28 20 21 73 71 6c 69  Old;.  if( !sqli
32ec0 74 65 33 50 61 67 65 72 4f 6b 54 6f 43 68 61 6e  te3PagerOkToChan
32ed0 67 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50  geJournalMode(pP
32ee0 61 67 65 72 29 20 29 20 65 4e 65 77 20 3d 20 65  ager) ) eNew = e
32ef0 4f 6c 64 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  Old;..#ifndef SQ
32f00 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
32f10 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 73 71 6c 69  zFilename = sqli
32f20 74 65 33 50 61 67 65 72 46 69 6c 65 6e 61 6d 65  te3PagerFilename
32f30 28 70 50 61 67 65 72 2c 20 31 29 3b 0a 0a 20 20  (pPager, 1);..  
32f40 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20  /* Do not allow 
32f50 61 20 74 72 61 6e 73 69 74 69 6f 6e 20 74 6f 20  a transition to 
32f60 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c  journal_mode=WAL
32f70 20 66 6f 72 20 61 20 64 61 74 61 62 61 73 65 0a   for a database.
32f80 20 20 2a 2a 20 69 6e 20 74 65 6d 70 6f 72 61 72    ** in temporar
32f90 79 20 73 74 6f 72 61 67 65 20 6f 72 20 69 66 20  y storage or if 
32fa0 74 68 65 20 56 46 53 20 64 6f 65 73 20 6e 6f 74  the VFS does not
32fb0 20 73 75 70 70 6f 72 74 20 73 68 61 72 65 64 20   support shared 
32fc0 6d 65 6d 6f 72 79 20 0a 20 20 2a 2f 0a 20 20 69  memory .  */.  i
32fd0 66 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  f( eNew==PAGER_J
32fe0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20  OURNALMODE_WAL. 
32ff0 20 20 26 26 20 28 73 71 6c 69 74 65 33 53 74 72    && (sqlite3Str
33000 6c 65 6e 33 30 28 7a 46 69 6c 65 6e 61 6d 65 29  len30(zFilename)
33010 3d 3d 30 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ==0           /*
33020 20 54 65 6d 70 20 66 69 6c 65 20 2a 2f 0a 20 20   Temp file */.  
33030 20 20 20 20 20 7c 7c 20 21 73 71 6c 69 74 65 33       || !sqlite3
33040 50 61 67 65 72 57 61 6c 53 75 70 70 6f 72 74 65  PagerWalSupporte
33050 64 28 70 50 61 67 65 72 29 29 20 20 20 2f 2a 20  d(pPager))   /* 
33060 4e 6f 20 73 68 61 72 65 64 2d 6d 65 6d 6f 72 79  No shared-memory
33070 20 73 75 70 70 6f 72 74 20 2a 2f 0a 20 20 29 7b   support */.  ){
33080 0a 20 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64  .    eNew = eOld
33090 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 28 65 4e  ;.  }..  if( (eN
330a0 65 77 21 3d 65 4f 6c 64 29 0a 20 20 20 26 26 20  ew!=eOld).   && 
330b0 28 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55  (eOld==PAGER_JOU
330c0 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20  RNALMODE_WAL || 
330d0 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
330e0 4e 41 4c 4d 4f 44 45 5f 57 41 4c 29 0a 20 20 29  NALMODE_WAL).  )
330f0 7b 0a 20 20 20 20 69 66 28 20 21 64 62 2d 3e 61  {.    if( !db->a
33100 75 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d  utoCommit || db-
33110 3e 6e 56 64 62 65 52 65 61 64 3e 31 20 29 7b 0a  >nVdbeRead>1 ){.
33120 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
33130 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 73  E_ERROR;.      s
33140 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
33150 70 2c 0a 20 20 20 20 20 20 20 20 20 20 22 63 61  p,.          "ca
33160 6e 6e 6f 74 20 63 68 61 6e 67 65 20 25 73 20 77  nnot change %s w
33170 61 6c 20 6d 6f 64 65 20 66 72 6f 6d 20 77 69 74  al mode from wit
33180 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  hin a transactio
33190 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 28 65  n",.          (e
331a0 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
331b0 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 22 69 6e  ALMODE_WAL ? "in
331c0 74 6f 22 20 3a 20 22 6f 75 74 20 6f 66 22 29 0a  to" : "out of").
331d0 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 67        );.      g
331e0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
331f0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73  _error;.    }els
33200 65 7b 0a 20 0a 20 20 20 20 20 20 69 66 28 20 65  e{. .      if( e
33210 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  Old==PAGER_JOURN
33220 41 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a 20 20  ALMODE_WAL ){.  
33230 20 20 20 20 20 20 2f 2a 20 49 66 20 6c 65 61 76        /* If leav
33240 69 6e 67 20 57 41 4c 20 6d 6f 64 65 2c 20 63 6c  ing WAL mode, cl
33250 6f 73 65 20 74 68 65 20 6c 6f 67 20 66 69 6c 65  ose the log file
33260 2e 20 49 66 20 73 75 63 63 65 73 73 66 75 6c 2c  . If successful,
33270 20 74 68 65 20 63 61 6c 6c 0a 20 20 20 20 20 20   the call.      
33280 20 20 2a 2a 20 74 6f 20 50 61 67 65 72 43 6c 6f    ** to PagerClo
33290 73 65 57 61 6c 28 29 20 63 68 65 63 6b 70 6f 69  seWal() checkpoi
332a0 6e 74 73 20 61 6e 64 20 64 65 6c 65 74 65 73 20  nts and deletes 
332b0 74 68 65 20 77 72 69 74 65 2d 61 68 65 61 64 2d  the write-ahead-
332c0 6c 6f 67 20 0a 20 20 20 20 20 20 20 20 2a 2a 20  log .        ** 
332d0 66 69 6c 65 2e 20 41 6e 20 45 58 43 4c 55 53 49  file. An EXCLUSI
332e0 56 45 20 6c 6f 63 6b 20 6d 61 79 20 73 74 69 6c  VE lock may stil
332f0 6c 20 62 65 20 68 65 6c 64 20 6f 6e 20 74 68 65  l be held on the
33300 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 0a   database file .
33310 20 20 20 20 20 20 20 20 2a 2a 20 61 66 74 65 72          ** after
33320 20 61 20 73 75 63 63 65 73 73 66 75 6c 20 72 65   a successful re
33330 74 75 72 6e 2e 20 0a 20 20 20 20 20 20 20 20 2a  turn. .        *
33340 2f 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  /.        rc = s
33350 71 6c 69 74 65 33 50 61 67 65 72 43 6c 6f 73 65  qlite3PagerClose
33360 57 61 6c 28 70 50 61 67 65 72 29 3b 0a 20 20 20  Wal(pPager);.   
33370 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
33380 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
33390 20 20 20 20 73 71 6c 69 74 65 33 50 61 67 65 72      sqlite3Pager
333a0 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  SetJournalMode(p
333b0 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 20 20  Pager, eNew);.  
333c0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65        }.      }e
333d0 6c 73 65 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41  lse if( eOld==PA
333e0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
333f0 4d 45 4d 4f 52 59 20 29 7b 0a 20 20 20 20 20 20  MEMORY ){.      
33400 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 74 72 61 6e    /* Cannot tran
33410 73 69 74 69 6f 6e 20 64 69 72 65 63 74 6c 79 20  sition directly 
33420 66 72 6f 6d 20 4d 45 4d 4f 52 59 20 74 6f 20 57  from MEMORY to W
33430 41 4c 2e 20 20 55 73 65 20 6d 6f 64 65 20 4f 46  AL.  Use mode OF
33440 46 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 73 20  F.        ** as 
33450 61 6e 20 69 6e 74 65 72 6d 65 64 69 61 74 65 20  an intermediate 
33460 2a 2f 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  */.        sqlit
33470 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61  e3PagerSetJourna
33480 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 50 41  lMode(pPager, PA
33490 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
334a0 4f 46 46 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  OFF);.      }.  
334b0 0a 20 20 20 20 20 20 2f 2a 20 4f 70 65 6e 20 61  .      /* Open a
334c0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20   transaction on 
334d0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
334e0 65 2e 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66  e. Regardless of
334f0 20 74 68 65 20 6a 6f 75 72 6e 61 6c 0a 20 20 20   the journal.   
33500 20 20 20 2a 2a 20 6d 6f 64 65 2c 20 74 68 69 73     ** mode, this
33510 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 77   transaction alw
33520 61 79 73 20 75 73 65 73 20 61 20 72 6f 6c 6c 62  ays uses a rollb
33530 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 20 20 20  ack journal..   
33540 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65     */.      asse
33550 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
33560 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29 3d 3d  IsInTrans(pBt)==
33570 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  0 );.      if( r
33580 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
33590 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
335a0 69 74 65 33 42 74 72 65 65 53 65 74 56 65 72 73  ite3BtreeSetVers
335b0 69 6f 6e 28 70 42 74 2c 20 28 65 4e 65 77 3d 3d  ion(pBt, (eNew==
335c0 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
335d0 45 5f 57 41 4c 20 3f 20 32 20 3a 20 31 29 29 3b  E_WAL ? 2 : 1));
335e0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
335f0 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 69 66 6e   }.#endif /* ifn
33600 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
33610 57 41 4c 20 2a 2f 0a 0a 20 20 69 66 28 20 72 63  WAL */..  if( rc
33620 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a   ) eNew = eOld;.
33630 20 20 65 4e 65 77 20 3d 20 73 71 6c 69 74 65 33    eNew = sqlite3
33640 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d  PagerSetJournalM
33650 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77  ode(pPager, eNew
33660 29 3b 0a 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  );..  pOut->flag
33670 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f  s = MEM_Str|MEM_
33680 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b  Static|MEM_Term;
33690 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 28 63 68  .  pOut->z = (ch
336a0 61 72 20 2a 29 73 71 6c 69 74 65 33 4a 6f 75 72  ar *)sqlite3Jour
336b0 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4e 65 77  nalModename(eNew
336c0 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 73  );.  pOut->n = s
336d0 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70  qlite3Strlen30(p
336e0 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70 4f 75 74 2d  Out->z);.  pOut-
336f0 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54  >enc = SQLITE_UT
33700 46 38 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  F8;.  sqlite3Vdb
33710 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
33720 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pOut, encoding);
33730 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
33740 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
33750 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b  ror;.  break;.};
33760 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
33770 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a 2f  E_OMIT_PRAGMA */
33780 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
33790 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55 55  QLITE_OMIT_VACUU
337a0 4d 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  M) && !defined(S
337b0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41 43  QLITE_OMIT_ATTAC
337c0 48 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61  H)./* Opcode: Va
337d0 63 75 75 6d 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a  cuum * * * * *.*
337e0 2a 0a 2a 2a 20 56 61 63 75 75 6d 20 74 68 65 20  *.** Vacuum the 
337f0 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 2e  entire database.
33800 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 69    This opcode wi
33810 6c 6c 20 63 61 75 73 65 20 6f 74 68 65 72 20 76  ll cause other v
33820 69 72 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e  irtual.** machin
33830 65 73 20 74 6f 20 62 65 20 63 72 65 61 74 65 64  es to be created
33840 20 61 6e 64 20 72 75 6e 2e 20 20 49 74 20 6d 61   and run.  It ma
33850 79 20 6e 6f 74 20 62 65 20 63 61 6c 6c 65 64 20  y not be called 
33860 66 72 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a 20 61  from within.** a
33870 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2f   transaction..*/
33880 0a 63 61 73 65 20 4f 50 5f 56 61 63 75 75 6d 3a  .case OP_Vacuum:
33890 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e   {.  assert( p->
338a0 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
338b0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 52 75 6e   rc = sqlite3Run
338c0 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d  Vacuum(&p->zErrM
338d0 73 67 2c 20 64 62 29 3b 0a 20 20 69 66 28 20 72  sg, db);.  if( r
338e0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
338f0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62  ue_to_error;.  b
33900 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
33910 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
33920 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43  ITE_OMIT_AUTOVAC
33930 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  UUM)./* Opcode: 
33940 49 6e 63 72 56 61 63 75 75 6d 20 50 31 20 50 32  IncrVacuum P1 P2
33950 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72   * * *.**.** Per
33960 66 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20 73 74  form a single st
33970 65 70 20 6f 66 20 74 68 65 20 69 6e 63 72 65 6d  ep of the increm
33980 65 6e 74 61 6c 20 76 61 63 75 75 6d 20 70 72 6f  ental vacuum pro
33990 63 65 64 75 72 65 20 6f 6e 0a 2a 2a 20 74 68 65  cedure on.** the
339a0 20 50 31 20 64 61 74 61 62 61 73 65 2e 20 49 66   P1 database. If
339b0 20 74 68 65 20 76 61 63 75 75 6d 20 68 61 73 20   the vacuum has 
339c0 66 69 6e 69 73 68 65 64 2c 20 6a 75 6d 70 20 74  finished, jump t
339d0 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a  o instruction.**
339e0 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20   P2. Otherwise, 
339f0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
33a00 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
33a10 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
33a20 5f 49 6e 63 72 56 61 63 75 75 6d 3a 20 7b 20 20  _IncrVacuum: {  
33a30 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
33a40 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a  .  Btree *pBt;..
33a50 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
33a60 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
33a70 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
33a80 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
33a90 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f  p->btreeMask, pO
33aa0 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65  p->p1) );.  asse
33ab0 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
33ac0 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62  =0 );.  pBt = db
33ad0 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
33ae0 42 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  Bt;.  rc = sqlit
33af0 65 33 42 74 72 65 65 49 6e 63 72 56 61 63 75 75  e3BtreeIncrVacuu
33b00 6d 28 70 42 74 29 3b 0a 20 20 56 64 62 65 42 72  m(pBt);.  VdbeBr
33b10 61 6e 63 68 54 61 6b 65 6e 28 72 63 3d 3d 53 51  anchTaken(rc==SQ
33b20 4c 49 54 45 5f 44 4f 4e 45 2c 32 29 3b 0a 20 20  LITE_DONE,2);.  
33b30 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 69 66  if( rc ){.    if
33b40 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 44 4f 4e  ( rc!=SQLITE_DON
33b50 45 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  E ) goto abort_d
33b60 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
33b70 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
33b80 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  .    goto jump_t
33b90 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  o_p2;.  }.  brea
33ba0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  k;.}.#endif../* 
33bb0 4f 70 63 6f 64 65 3a 20 45 78 70 69 72 65 20 50  Opcode: Expire P
33bc0 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
33bd0 43 61 75 73 65 20 70 72 65 63 6f 6d 70 69 6c 65  Cause precompile
33be0 64 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20  d statements to 
33bf0 65 78 70 69 72 65 2e 20 20 57 68 65 6e 20 61 6e  expire.  When an
33c00 20 65 78 70 69 72 65 64 20 73 74 61 74 65 6d 65   expired stateme
33c10 6e 74 0a 2a 2a 20 69 73 20 65 78 65 63 75 74 65  nt.** is execute
33c20 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f  d using sqlite3_
33c30 73 74 65 70 28 29 20 69 74 20 77 69 6c 6c 20 65  step() it will e
33c40 69 74 68 65 72 20 61 75 74 6f 6d 61 74 69 63 61  ither automatica
33c50 6c 6c 79 0a 2a 2a 20 72 65 70 72 65 70 61 72 65  lly.** reprepare
33c60 20 69 74 73 65 6c 66 20 28 69 66 20 69 74 20 77   itself (if it w
33c70 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 63 72  as originally cr
33c80 65 61 74 65 64 20 75 73 69 6e 67 20 73 71 6c 69  eated using sqli
33c90 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 29  te3_prepare_v2()
33ca0 29 0a 2a 2a 20 6f 72 20 69 74 20 77 69 6c 6c 20  ).** or it will 
33cb0 66 61 69 6c 20 77 69 74 68 20 53 51 4c 49 54 45  fail with SQLITE
33cc0 5f 53 43 48 45 4d 41 2e 0a 2a 2a 20 0a 2a 2a 20  _SCHEMA..** .** 
33cd0 49 66 20 50 31 20 69 73 20 30 2c 20 74 68 65 6e  If P1 is 0, then
33ce0 20 61 6c 6c 20 53 51 4c 20 73 74 61 74 65 6d 65   all SQL stateme
33cf0 6e 74 73 20 62 65 63 6f 6d 65 20 65 78 70 69 72  nts become expir
33d00 65 64 2e 20 49 66 20 50 31 20 69 73 20 6e 6f 6e  ed. If P1 is non
33d10 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20 6f  -zero,.** then o
33d20 6e 6c 79 20 74 68 65 20 63 75 72 72 65 6e 74 6c  nly the currentl
33d30 79 20 65 78 65 63 75 74 69 6e 67 20 73 74 61 74  y executing stat
33d40 65 6d 65 6e 74 20 69 73 20 65 78 70 69 72 65 64  ement is expired
33d50 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 78 70  ..*/.case OP_Exp
33d60 69 72 65 3a 20 7b 0a 20 20 69 66 28 20 21 70 4f  ire: {.  if( !pO
33d70 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c  p->p1 ){.    sql
33d80 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72  ite3ExpirePrepar
33d90 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29  edStatements(db)
33da0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
33db0 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a 20  ->expired = 1;. 
33dc0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23   }.  break;.}..#
33dd0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
33de0 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a  IT_SHARED_CACHE.
33df0 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 61 62 6c 65  /* Opcode: Table
33e00 4c 6f 63 6b 20 50 31 20 50 32 20 50 33 20 50 34  Lock P1 P2 P3 P4
33e10 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
33e20 69 44 62 3d 50 31 20 72 6f 6f 74 3d 50 32 20 77  iDb=P1 root=P2 w
33e30 72 69 74 65 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 62  rite=P3.**.** Ob
33e40 74 61 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20 61  tain a lock on a
33e50 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c   particular tabl
33e60 65 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  e. This instruct
33e70 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65 64  ion is only used
33e80 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68 61   when.** the sha
33e90 72 65 64 2d 63 61 63 68 65 20 66 65 61 74 75 72  red-cache featur
33ea0 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a 2a  e is enabled. .*
33eb0 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69  *.** P1 is the i
33ec0 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61  ndex of the data
33ed0 62 61 73 65 20 69 6e 20 73 71 6c 69 74 65 33 2e  base in sqlite3.
33ee0 61 44 62 5b 5d 20 6f 66 20 74 68 65 20 64 61 74  aDb[] of the dat
33ef0 61 62 61 73 65 0a 2a 2a 20 6f 6e 20 77 68 69 63  abase.** on whic
33f00 68 20 74 68 65 20 6c 6f 63 6b 20 69 73 20 61 63  h the lock is ac
33f10 71 75 69 72 65 64 2e 20 20 41 20 72 65 61 64 6c  quired.  A readl
33f20 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64 20  ock is obtained 
33f30 69 66 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20 61  if P3==0 or.** a
33f40 20 77 72 69 74 65 20 6c 6f 63 6b 20 69 66 20 50   write lock if P
33f50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 63  3==1..**.** P2 c
33f60 6f 6e 74 61 69 6e 73 20 74 68 65 20 72 6f 6f 74  ontains the root
33f70 2d 70 61 67 65 20 6f 66 20 74 68 65 20 74 61 62  -page of the tab
33f80 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a  le to lock..**.*
33f90 2a 20 50 34 20 63 6f 6e 74 61 69 6e 73 20 61 20  * P4 contains a 
33fa0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6e  pointer to the n
33fb0 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
33fc0 20 62 65 69 6e 67 20 6c 6f 63 6b 65 64 2e 20 54   being locked. T
33fd0 68 69 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75  his is only.** u
33fe0 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20  sed to generate 
33ff0 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an error message
34000 20 69 66 20 74 68 65 20 6c 6f 63 6b 20 63 61 6e   if the lock can
34010 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e 65 64 2e  not be obtained.
34020 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 61 62 6c  .*/.case OP_Tabl
34030 65 4c 6f 63 6b 3a 20 7b 0a 20 20 75 38 20 69 73  eLock: {.  u8 is
34040 57 72 69 74 65 4c 6f 63 6b 20 3d 20 28 75 38 29  WriteLock = (u8)
34050 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20 69  pOp->p3;.  if( i
34060 73 57 72 69 74 65 4c 6f 63 6b 20 7c 7c 20 30 3d  sWriteLock || 0=
34070 3d 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49  =(db->flags&SQLI
34080 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74  TE_ReadUncommitt
34090 65 64 29 20 29 7b 0a 20 20 20 20 69 6e 74 20 70  ed) ){.    int p
340a0 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20 20  1 = pOp->p1; .  
340b0 20 20 61 73 73 65 72 74 28 20 70 31 3e 3d 30 20    assert( p1>=0 
340c0 26 26 20 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  && p1<db->nDb );
340d0 0a 20 20 20 20 61 73 73 65 72 74 28 20 44 62 4d  .    assert( DbM
340e0 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
340f0 4d 61 73 6b 2c 20 70 31 29 20 29 3b 0a 20 20 20  Mask, p1) );.   
34100 20 61 73 73 65 72 74 28 20 69 73 57 72 69 74 65   assert( isWrite
34110 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72 69  Lock==0 || isWri
34120 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20 20  teLock==1 );.   
34130 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
34140 65 65 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e  eeLockTable(db->
34150 61 44 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70  aDb[p1].pBt, pOp
34160 2d 3e 70 32 2c 20 69 73 57 72 69 74 65 4c 6f 63  ->p2, isWriteLoc
34170 6b 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29  k);.    if( rc )
34180 7b 0a 20 20 20 20 20 20 69 66 28 20 28 72 63 26  {.      if( (rc&
34190 30 78 46 46 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f  0xFF)==SQLITE_LO
341a0 43 4b 45 44 20 29 7b 0a 20 20 20 20 20 20 20 20  CKED ){.        
341b0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20  const char *z = 
341c0 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 20  pOp->p4.z;.     
341d0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
341e0 72 6f 72 28 70 2c 20 22 64 61 74 61 62 61 73 65  ror(p, "database
341f0 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64   table is locked
34200 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20 20  : %s", z);.     
34210 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62   }.      goto ab
34220 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
34230 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
34240 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
34250 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
34260 52 45 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23 69  RED_CACHE */..#i
34270 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
34280 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
34290 2a 20 4f 70 63 6f 64 65 3a 20 56 42 65 67 69 6e  * Opcode: VBegin
342a0 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a   * * * P4 *.**.*
342b0 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 70 6f  * P4 may be a po
342c0 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69  inter to an sqli
342d0 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
342e0 72 65 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c 20  re. If so, call 
342f0 74 68 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20 6d  the .** xBegin m
34300 65 74 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74  ethod for that t
34310 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f  able..**.** Also
34320 2c 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  , whether or not
34330 20 50 34 20 69 73 20 73 65 74 2c 20 63 68 65 63   P4 is set, chec
34340 6b 20 74 68 61 74 20 74 68 69 73 20 69 73 20 6e  k that this is n
34350 6f 74 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20  ot being called 
34360 66 72 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20 61  from.** within a
34370 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20 76   callback to a v
34380 69 72 74 75 61 6c 20 74 61 62 6c 65 20 78 53 79  irtual table xSy
34390 6e 63 28 29 20 6d 65 74 68 6f 64 2e 20 49 66 20  nc() method. If 
343a0 69 74 20 69 73 2c 20 74 68 65 20 65 72 72 6f 72  it is, the error
343b0 0a 2a 2a 20 63 6f 64 65 20 77 69 6c 6c 20 62 65  .** code will be
343c0 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4c   set to SQLITE_L
343d0 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f  OCKED..*/.case O
343e0 50 5f 56 42 65 67 69 6e 3a 20 7b 0a 20 20 56 54  P_VBegin: {.  VT
343f0 61 62 6c 65 20 2a 70 56 54 61 62 3b 0a 20 20 70  able *pVTab;.  p
34400 56 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  VTab = pOp->p4.p
34410 56 74 61 62 3b 0a 20 20 72 63 20 3d 20 73 71 6c  Vtab;.  rc = sql
34420 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 64 62  ite3VtabBegin(db
34430 2c 20 70 56 54 61 62 29 3b 0a 20 20 69 66 28 20  , pVTab);.  if( 
34440 70 56 54 61 62 20 29 20 73 71 6c 69 74 65 33 56  pVTab ) sqlite3V
34450 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
34460 70 2c 20 70 56 54 61 62 2d 3e 70 56 74 61 62 29  p, pVTab->pVtab)
34470 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
34480 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
34490 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
344a0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
344b0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
344c0 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
344d0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
344e0 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
344f0 64 65 3a 20 56 43 72 65 61 74 65 20 50 31 20 50  de: VCreate P1 P
34500 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 32  2 * * *.**.** P2
34510 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 74   is a register t
34520 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e 61  hat holds the na
34530 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20  me of a virtual 
34540 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73  table in databas
34550 65 20 0a 2a 2a 20 50 31 2e 20 43 61 6c 6c 20 74  e .** P1. Call t
34560 68 65 20 78 43 72 65 61 74 65 20 6d 65 74 68 6f  he xCreate metho
34570 64 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65  d for that table
34580 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 72  ..*/.case OP_VCr
34590 65 61 74 65 3a 20 7b 0a 20 20 4d 65 6d 20 73 4d  eate: {.  Mem sM
345a0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  em;          /* 
345b0 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20  For storing the 
345c0 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63  record being dec
345d0 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  oded */.  const 
345e0 63 68 61 72 20 2a 7a 54 61 62 3b 20 20 2f 2a 20  char *zTab;  /* 
345f0 4e 61 6d 65 20 6f 66 20 74 68 65 20 76 69 72 74  Name of the virt
34600 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 20 20  ual table */..  
34610 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c  memset(&sMem, 0,
34620 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a   sizeof(sMem));.
34630 20 20 73 4d 65 6d 2e 64 62 20 3d 20 64 62 3b 0a    sMem.db = db;.
34640 20 20 2f 2a 20 42 65 63 61 75 73 65 20 50 32 20    /* Because P2 
34650 69 73 20 61 6c 77 61 79 73 20 61 20 73 74 61 74  is always a stat
34660 69 63 20 73 74 72 69 6e 67 2c 20 69 74 20 69 73  ic string, it is
34670 20 69 6d 70 6f 73 73 69 62 6c 65 20 66 6f 72 20   impossible for 
34680 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33  the.  ** sqlite3
34690 56 64 62 65 4d 65 6d 43 6f 70 79 28 29 20 74 6f  VdbeMemCopy() to
346a0 20 66 61 69 6c 20 2a 2f 0a 20 20 61 73 73 65 72   fail */.  asser
346b0 74 28 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  t( (aMem[pOp->p2
346c0 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ].flags & MEM_St
346d0 72 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  r)!=0 );.  asser
346e0 74 28 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  t( (aMem[pOp->p2
346f0 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ].flags & MEM_St
34700 61 74 69 63 29 21 3d 30 20 29 3b 0a 20 20 72 63  atic)!=0 );.  rc
34710 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
34720 6d 43 6f 70 79 28 26 73 4d 65 6d 2c 20 26 61 4d  mCopy(&sMem, &aM
34730 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20  em[pOp->p2]);.  
34740 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
34750 54 45 5f 4f 4b 20 29 3b 0a 20 20 7a 54 61 62 20  TE_OK );.  zTab 
34760 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73  = (const char*)s
34770 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
34780 74 28 26 73 4d 65 6d 29 3b 0a 20 20 61 73 73 65  t(&sMem);.  asse
34790 72 74 28 20 7a 54 61 62 20 7c 7c 20 64 62 2d 3e  rt( zTab || db->
347a0 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a  mallocFailed );.
347b0 20 20 69 66 28 20 7a 54 61 62 20 29 7b 0a 20 20    if( zTab ){.  
347c0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
347d0 61 62 43 61 6c 6c 43 72 65 61 74 65 28 64 62 2c  abCallCreate(db,
347e0 20 70 4f 70 2d 3e 70 31 2c 20 7a 54 61 62 2c 20   pOp->p1, zTab, 
347f0 26 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20  &p->zErrMsg);.  
34800 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  }.  sqlite3VdbeM
34810 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29  emRelease(&sMem)
34820 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
34830 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
34840 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
34850 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
34860 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
34870 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
34880 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
34890 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
348a0 64 65 3a 20 56 44 65 73 74 72 6f 79 20 50 31 20  de: VDestroy P1 
348b0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  * * P4 *.**.** P
348c0 34 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  4 is the name of
348d0 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
348e0 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
348f0 20 20 43 61 6c 6c 20 74 68 65 20 78 44 65 73 74    Call the xDest
34900 72 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66  roy method.** of
34910 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a   that table..*/.
34920 63 61 73 65 20 4f 50 5f 56 44 65 73 74 72 6f 79  case OP_VDestroy
34930 3a 20 7b 0a 20 20 64 62 2d 3e 6e 56 44 65 73 74  : {.  db->nVDest
34940 72 6f 79 2b 2b 3b 0a 20 20 72 63 20 3d 20 73 71  roy++;.  rc = sq
34950 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73  lite3VtabCallDes
34960 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e 70 31  troy(db, pOp->p1
34970 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
34980 64 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2d 2d 3b  db->nVDestroy--;
34990 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
349a0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
349b0 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ror;.  break;.}.
349c0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
349d0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
349e0 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
349f0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
34a00 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
34a10 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a 20 2a 20  e: VOpen P1 * * 
34a20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  P4 *.**.** P4 is
34a30 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
34a40 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62  virtual table ob
34a50 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33  ject, an sqlite3
34a60 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e  _vtab structure.
34a70 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72 73  .** P1 is a curs
34a80 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54 68 69 73  or number.  This
34a90 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73 20 61 20   opcode opens a 
34aa0 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20 76 69  cursor to the vi
34ab0 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 61  rtual.** table a
34ac0 6e 64 20 73 74 6f 72 65 73 20 74 68 61 74 20 63  nd stores that c
34ad0 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a  ursor in P1..*/.
34ae0 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b  case OP_VOpen: {
34af0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
34b00 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  Cur;.  sqlite3_v
34b10 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 43 75  tab_cursor *pVCu
34b20 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  r;.  sqlite3_vta
34b30 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73  b *pVtab;.  cons
34b40 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
34b50 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73   *pModule;..  as
34b60 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
34b70 65 72 20 29 3b 0a 20 20 70 43 75 72 20 3d 20 30  er );.  pCur = 0
34b80 3b 0a 20 20 70 56 43 75 72 20 3d 20 30 3b 0a 20  ;.  pVCur = 0;. 
34b90 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34   pVtab = pOp->p4
34ba0 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20  .pVtab->pVtab;. 
34bb0 20 69 66 28 20 70 56 74 61 62 3d 3d 30 20 7c 7c   if( pVtab==0 ||
34bc0 20 4e 45 56 45 52 28 70 56 74 61 62 2d 3e 70 4d   NEVER(pVtab->pM
34bd0 6f 64 75 6c 65 3d 3d 30 29 20 29 7b 0a 20 20 20  odule==0) ){.   
34be0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43   rc = SQLITE_LOC
34bf0 4b 45 44 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62  KED;.    goto ab
34c00 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
34c10 3b 0a 20 20 7d 0a 20 20 70 4d 6f 64 75 6c 65 20  ;.  }.  pModule 
34c20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
34c30 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65  ;.  rc = pModule
34c40 2d 3e 78 4f 70 65 6e 28 70 56 74 61 62 2c 20 26  ->xOpen(pVtab, &
34c50 70 56 43 75 72 29 3b 0a 20 20 73 71 6c 69 74 65  pVCur);.  sqlite
34c60 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
34c70 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69  g(p, pVtab);.  i
34c80 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
34c90 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
34ca0 0a 0a 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a  ..  /* Initializ
34cb0 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63  e sqlite3_vtab_c
34cc0 75 72 73 6f 72 20 62 61 73 65 20 63 6c 61 73 73  ursor base class
34cd0 20 2a 2f 0a 20 20 70 56 43 75 72 2d 3e 70 56 74   */.  pVCur->pVt
34ce0 61 62 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20 2f  ab = pVtab;..  /
34cf0 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 76 64 62  * Initialize vdb
34d00 65 20 63 75 72 73 6f 72 20 6f 62 6a 65 63 74 20  e cursor object 
34d10 2a 2f 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f  */.  pCur = allo
34d20 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
34d30 70 2d 3e 70 31 2c 20 30 2c 20 2d 31 2c 20 43 55  p->p1, 0, -1, CU
34d40 52 54 59 50 45 5f 56 54 41 42 29 3b 0a 20 20 69  RTYPE_VTAB);.  i
34d50 66 28 20 70 43 75 72 20 29 7b 0a 20 20 20 20 70  f( pCur ){.    p
34d60 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 20 3d 20  Cur->uc.pVCur = 
34d70 70 56 43 75 72 3b 0a 20 20 20 20 70 56 74 61 62  pVCur;.    pVtab
34d80 2d 3e 6e 52 65 66 2b 2b 3b 0a 20 20 7d 65 6c 73  ->nRef++;.  }els
34d90 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64  e{.    assert( d
34da0 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
34db0 29 3b 0a 20 20 20 20 70 4d 6f 64 75 6c 65 2d 3e  );.    pModule->
34dc0 78 43 6c 6f 73 65 28 70 56 43 75 72 29 3b 0a 20  xClose(pVCur);. 
34dd0 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
34de0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
34df0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
34e00 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
34e10 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
34e20 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
34e30 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
34e40 3a 20 56 46 69 6c 74 65 72 20 50 31 20 50 32 20  : VFilter P1 P2 
34e50 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
34e60 73 69 73 3a 20 69 70 6c 61 6e 3d 72 5b 50 33 5d  sis: iplan=r[P3]
34e70 20 7a 70 6c 61 6e 3d 27 50 34 27 0a 2a 2a 0a 2a   zplan='P4'.**.*
34e80 2a 20 50 31 20 69 73 20 61 20 63 75 72 73 6f 72  * P1 is a cursor
34e90 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 56 4f   opened using VO
34ea0 70 65 6e 2e 20 20 50 32 20 69 73 20 61 6e 20 61  pen.  P2 is an a
34eb0 64 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74  ddress to jump t
34ec0 6f 20 69 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74  o if.** the filt
34ed0 65 72 65 64 20 72 65 73 75 6c 74 20 73 65 74 20  ered result set 
34ee0 69 73 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20  is empty..**.** 
34ef0 50 34 20 69 73 20 65 69 74 68 65 72 20 4e 55 4c  P4 is either NUL
34f00 4c 20 6f 72 20 61 20 73 74 72 69 6e 67 20 74 68  L or a string th
34f10 61 74 20 77 61 73 20 67 65 6e 65 72 61 74 65 64  at was generated
34f20 20 62 79 20 74 68 65 20 78 42 65 73 74 49 6e 64   by the xBestInd
34f30 65 78 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20  ex.** method of 
34f40 74 68 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65  the module.  The
34f50 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20   interpretation 
34f60 6f 66 20 74 68 65 20 50 34 20 73 74 72 69 6e 67  of the P4 string
34f70 20 69 73 20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74   is left.** to t
34f80 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d  he module implem
34f90 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  entation..**.** 
34fa0 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f  This opcode invo
34fb0 6b 65 73 20 74 68 65 20 78 46 69 6c 74 65 72 20  kes the xFilter 
34fc0 6d 65 74 68 6f 64 20 6f 6e 20 74 68 65 20 76 69  method on the vi
34fd0 72 74 75 61 6c 20 74 61 62 6c 65 20 73 70 65 63  rtual table spec
34fe0 69 66 69 65 64 0a 2a 2a 20 62 79 20 50 31 2e 20  ified.** by P1. 
34ff0 20 54 68 65 20 69 6e 74 65 67 65 72 20 71 75 65   The integer que
35000 72 79 20 70 6c 61 6e 20 70 61 72 61 6d 65 74 65  ry plan paramete
35010 72 20 74 6f 20 78 46 69 6c 74 65 72 20 69 73 20  r to xFilter is 
35020 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
35030 65 72 0a 2a 2a 20 50 33 2e 20 52 65 67 69 73 74  er.** P3. Regist
35040 65 72 20 50 33 2b 31 20 73 74 6f 72 65 73 20 74  er P3+1 stores t
35050 68 65 20 61 72 67 63 20 70 61 72 61 6d 65 74 65  he argc paramete
35060 72 20 74 6f 20 62 65 20 70 61 73 73 65 64 20 74  r to be passed t
35070 6f 20 74 68 65 0a 2a 2a 20 78 46 69 6c 74 65 72  o the.** xFilter
35080 20 6d 65 74 68 6f 64 2e 20 52 65 67 69 73 74 65   method. Registe
35090 72 73 20 50 33 2b 32 2e 2e 50 33 2b 31 2b 61 72  rs P3+2..P3+1+ar
350a0 67 63 20 61 72 65 20 74 68 65 20 61 72 67 63 0a  gc are the argc.
350b0 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61  ** additional pa
350c0 72 61 6d 65 74 65 72 73 20 77 68 69 63 68 20 61  rameters which a
350d0 72 65 20 70 61 73 73 65 64 20 74 6f 0a 2a 2a 20  re passed to.** 
350e0 78 46 69 6c 74 65 72 20 61 73 20 61 72 67 76 2e  xFilter as argv.
350f0 20 52 65 67 69 73 74 65 72 20 50 33 2b 32 20 62   Register P3+2 b
35100 65 63 6f 6d 65 73 20 61 72 67 76 5b 30 5d 20 77  ecomes argv[0] w
35110 68 65 6e 20 70 61 73 73 65 64 20 74 6f 20 78 46  hen passed to xF
35120 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a  ilter..**.** A j
35130 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50  ump is made to P
35140 32 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  2 if the result 
35150 73 65 74 20 61 66 74 65 72 20 66 69 6c 74 65 72  set after filter
35160 69 6e 67 20 77 6f 75 6c 64 20 62 65 20 65 6d 70  ing would be emp
35170 74 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ty..*/.case OP_V
35180 46 69 6c 74 65 72 3a 20 7b 20 20 20 2f 2a 20 6a  Filter: {   /* j
35190 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72  ump */.  int nAr
351a0 67 3b 0a 20 20 69 6e 74 20 69 51 75 65 72 79 3b  g;.  int iQuery;
351b0 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
351c0 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
351d0 3b 0a 20 20 4d 65 6d 20 2a 70 51 75 65 72 79 3b  ;.  Mem *pQuery;
351e0 0a 20 20 4d 65 6d 20 2a 70 41 72 67 63 3b 0a 20  .  Mem *pArgc;. 
351f0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
35200 72 73 6f 72 20 2a 70 56 43 75 72 3b 0a 20 20 73  rsor *pVCur;.  s
35210 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
35220 61 62 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  ab;.  VdbeCursor
35230 20 2a 70 43 75 72 3b 0a 20 20 69 6e 74 20 72 65   *pCur;.  int re
35240 73 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65  s;.  int i;.  Me
35250 6d 20 2a 2a 61 70 41 72 67 3b 0a 0a 20 20 70 51  m **apArg;..  pQ
35260 75 65 72 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  uery = &aMem[pOp
35270 2d 3e 70 33 5d 3b 0a 20 20 70 41 72 67 63 20 3d  ->p3];.  pArgc =
35280 20 26 70 51 75 65 72 79 5b 31 5d 3b 0a 20 20 70   &pQuery[1];.  p
35290 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
352a0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
352b0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 51  t( memIsValid(pQ
352c0 75 65 72 79 29 20 29 3b 0a 20 20 52 45 47 49 53  uery) );.  REGIS
352d0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
352e0 33 2c 20 70 51 75 65 72 79 29 3b 0a 20 20 61 73  3, pQuery);.  as
352f0 73 65 72 74 28 20 70 43 75 72 2d 3e 65 43 75 72  sert( pCur->eCur
35300 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 56 54  Type==CURTYPE_VT
35310 41 42 20 29 3b 0a 20 20 70 56 43 75 72 20 3d 20  AB );.  pVCur = 
35320 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 3b 0a  pCur->uc.pVCur;.
35330 20 20 70 56 74 61 62 20 3d 20 70 56 43 75 72 2d    pVtab = pVCur-
35340 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c  >pVtab;.  pModul
35350 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
35360 6c 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20 74  le;..  /* Grab t
35370 68 65 20 69 6e 64 65 78 20 6e 75 6d 62 65 72 20  he index number 
35380 61 6e 64 20 61 72 67 63 20 70 61 72 61 6d 65 74  and argc paramet
35390 65 72 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ers */.  assert(
353a0 20 28 70 51 75 65 72 79 2d 3e 66 6c 61 67 73 26   (pQuery->flags&
353b0 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20 70  MEM_Int)!=0 && p
353c0 41 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d  Argc->flags==MEM
353d0 5f 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20 3d  _Int );.  nArg =
353e0 20 28 69 6e 74 29 70 41 72 67 63 2d 3e 75 2e 69   (int)pArgc->u.i
353f0 3b 0a 20 20 69 51 75 65 72 79 20 3d 20 28 69 6e  ;.  iQuery = (in
35400 74 29 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a  t)pQuery->u.i;..
35410 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
35420 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 2a  xFilter method *
35430 2f 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61  /.  res = 0;.  a
35440 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b  pArg = p->apArg;
35450 0a 20 20 66 6f 72 28 69 20 3d 20 30 3b 20 69 3c  .  for(i = 0; i<
35460 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nArg; i++){.    
35470 61 70 41 72 67 5b 69 5d 20 3d 20 26 70 41 72 67  apArg[i] = &pArg
35480 63 5b 69 2b 31 5d 3b 0a 20 20 7d 0a 20 20 72 63  c[i+1];.  }.  rc
35490 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c   = pModule->xFil
354a0 74 65 72 28 70 56 43 75 72 2c 20 69 51 75 65 72  ter(pVCur, iQuer
354b0 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e 41  y, pOp->p4.z, nA
354c0 72 67 2c 20 61 70 41 72 67 29 3b 0a 20 20 73 71  rg, apArg);.  sq
354d0 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
354e0 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrmsg(p, pVtab);
354f0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
35500 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
35510 72 6f 72 3b 0a 20 20 72 65 73 20 3d 20 70 4d 6f  ror;.  res = pMo
35520 64 75 6c 65 2d 3e 78 45 6f 66 28 70 56 43 75 72  dule->xEof(pVCur
35530 29 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52  );.  pCur->nullR
35540 6f 77 20 3d 20 30 3b 0a 20 20 56 64 62 65 42 72  ow = 0;.  VdbeBr
35550 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
35560 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29  ,2);.  if( res )
35570 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
35580 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
35590 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
355a0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
355b0 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
355c0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
355d0 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
355e0 56 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33  VColumn P1 P2 P3
355f0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
35600 3a 20 72 5b 50 33 5d 3d 76 63 6f 6c 75 6d 6e 28  : r[P3]=vcolumn(
35610 50 32 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20  P2).**.** Store 
35620 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
35630 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66   P2-th column of
35640 0a 2a 2a 20 74 68 65 20 72 6f 77 20 6f 66 20 74  .** the row of t
35650 68 65 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65  he virtual-table
35660 20 74 68 61 74 20 74 68 65 20 0a 2a 2a 20 50 31   that the .** P1
35670 20 63 75 72 73 6f 72 20 69 73 20 70 6f 69 6e 74   cursor is point
35680 69 6e 67 20 74 6f 20 69 6e 74 6f 20 72 65 67 69  ing to into regi
35690 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65  ster P3..*/.case
356a0 20 4f 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20   OP_VColumn: {. 
356b0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
356c0 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71  Vtab;.  const sq
356d0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
356e0 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 44  odule;.  Mem *pD
356f0 65 73 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63  est;.  sqlite3_c
35700 6f 6e 74 65 78 74 20 73 43 6f 6e 74 65 78 74 3b  ontext sContext;
35710 0a 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ..  VdbeCursor *
35720 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  pCur = p->apCsr[
35730 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
35740 72 74 28 20 70 43 75 72 2d 3e 65 43 75 72 54 79  rt( pCur->eCurTy
35750 70 65 3d 3d 43 55 52 54 59 50 45 5f 56 54 41 42  pe==CURTYPE_VTAB
35760 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
35770 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
35780 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p3<=(p->nMem+1 -
35790 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
357a0 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b    pDest = &aMem[
357b0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41  pOp->p3];.  memA
357c0 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
357d0 70 44 65 73 74 29 3b 0a 20 20 69 66 28 20 70 43  pDest);.  if( pC
357e0 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  ur->nullRow ){. 
357f0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
35800 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b  mSetNull(pDest);
35810 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
35820 20 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e    pVtab = pCur->
35830 75 63 2e 70 56 43 75 72 2d 3e 70 56 74 61 62 3b  uc.pVCur->pVtab;
35840 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74  .  pModule = pVt
35850 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61  ab->pModule;.  a
35860 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e  ssert( pModule->
35870 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d  xColumn );.  mem
35880 73 65 74 28 26 73 43 6f 6e 74 65 78 74 2c 20 30  set(&sContext, 0
35890 2c 20 73 69 7a 65 6f 66 28 73 43 6f 6e 74 65 78  , sizeof(sContex
358a0 74 29 29 3b 0a 20 20 73 43 6f 6e 74 65 78 74 2e  t));.  sContext.
358b0 70 4f 75 74 20 3d 20 70 44 65 73 74 3b 0a 20 20  pOut = pDest;.  
358c0 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
358d0 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  Dest, MEM_Null);
358e0 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d  .  rc = pModule-
358f0 3e 78 43 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e 75  >xColumn(pCur->u
35900 63 2e 70 56 43 75 72 2c 20 26 73 43 6f 6e 74 65  c.pVCur, &sConte
35910 78 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20  xt, pOp->p2);.  
35920 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
35930 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62  tErrmsg(p, pVtab
35940 29 3b 0a 20 20 69 66 28 20 73 43 6f 6e 74 65 78  );.  if( sContex
35950 74 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20  t.isError ){.   
35960 20 72 63 20 3d 20 73 43 6f 6e 74 65 78 74 2e 69   rc = sContext.i
35970 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71  sError;.  }.  sq
35980 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
35990 6e 63 6f 64 69 6e 67 28 70 44 65 73 74 2c 20 65  ncoding(pDest, e
359a0 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 52 45 47 49  ncoding);.  REGI
359b0 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
359c0 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 55 50  p3, pDest);.  UP
359d0 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
359e0 45 28 70 44 65 73 74 29 3b 0a 0a 20 20 69 66 28  E(pDest);..  if(
359f0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
35a00 6f 6f 42 69 67 28 70 44 65 73 74 29 20 29 7b 0a  ooBig(pDest) ){.
35a10 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
35a20 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29  ;.  }.  if( rc )
35a30 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
35a40 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
35a50 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
35a60 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
35a70 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
35a80 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
35a90 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
35aa0 4f 70 63 6f 64 65 3a 20 56 4e 65 78 74 20 50 31  Opcode: VNext P1
35ab0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
35ac0 41 64 76 61 6e 63 65 20 76 69 72 74 75 61 6c 20  Advance virtual 
35ad0 74 61 62 6c 65 20 50 31 20 74 6f 20 74 68 65 20  table P1 to the 
35ae0 6e 65 78 74 20 72 6f 77 20 69 6e 20 69 74 73 20  next row in its 
35af0 72 65 73 75 6c 74 20 73 65 74 20 61 6e 64 0a 2a  result set and.*
35b00 2a 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75  * jump to instru
35b10 63 74 69 6f 6e 20 50 32 2e 20 20 4f 72 2c 20 69  ction P2.  Or, i
35b20 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  f the virtual ta
35b30 62 6c 65 20 68 61 73 20 72 65 61 63 68 65 64 0a  ble has reached.
35b40 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 69 74  ** the end of it
35b50 73 20 72 65 73 75 6c 74 20 73 65 74 2c 20 74 68  s result set, th
35b60 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  en fall through 
35b70 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
35b80 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
35b90 20 4f 50 5f 56 4e 65 78 74 3a 20 7b 20 20 20 2f   OP_VNext: {   /
35ba0 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 73 71 6c 69  * jump */.  sqli
35bb0 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
35bc0 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
35bd0 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
35be0 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 56  ;.  int res;.  V
35bf0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b  dbeCursor *pCur;
35c00 0a 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 70  ..  res = 0;.  p
35c10 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
35c20 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
35c30 74 28 20 70 43 75 72 2d 3e 65 43 75 72 54 79 70  t( pCur->eCurTyp
35c40 65 3d 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20  e==CURTYPE_VTAB 
35c50 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e  );.  if( pCur->n
35c60 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 62 72  ullRow ){.    br
35c70 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62  eak;.  }.  pVtab
35c80 20 3d 20 70 43 75 72 2d 3e 75 63 2e 70 56 43 75   = pCur->uc.pVCu
35c90 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64  r->pVtab;.  pMod
35ca0 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f  ule = pVtab->pMo
35cb0 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20  dule;.  assert( 
35cc0 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 20 29  pModule->xNext )
35cd0 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  ;..  /* Invoke t
35ce0 68 65 20 78 4e 65 78 74 28 29 20 6d 65 74 68 6f  he xNext() metho
35cf0 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e  d of the module.
35d00 20 54 68 65 72 65 20 69 73 20 6e 6f 20 77 61 79   There is no way
35d10 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 75 6e   for the.  ** un
35d20 64 65 72 6c 79 69 6e 67 20 69 6d 70 6c 65 6d 65  derlying impleme
35d30 6e 74 61 74 69 6f 6e 20 74 6f 20 72 65 74 75 72  ntation to retur
35d40 6e 20 61 6e 20 65 72 72 6f 72 20 69 66 20 6f 6e  n an error if on
35d50 65 20 6f 63 63 75 72 73 20 64 75 72 69 6e 67 0a  e occurs during.
35d60 20 20 2a 2a 20 78 4e 65 78 74 28 29 2e 20 49 6e    ** xNext(). In
35d70 73 74 65 61 64 2c 20 69 66 20 61 6e 20 65 72 72  stead, if an err
35d80 6f 72 20 6f 63 63 75 72 73 2c 20 74 72 75 65 20  or occurs, true 
35d90 69 73 20 72 65 74 75 72 6e 65 64 20 28 69 6e 64  is returned (ind
35da0 69 63 61 74 69 6e 67 20 74 68 61 74 20 0a 20 20  icating that .  
35db0 2a 2a 20 64 61 74 61 20 69 73 20 61 76 61 69 6c  ** data is avail
35dc0 61 62 6c 65 29 20 61 6e 64 20 74 68 65 20 65 72  able) and the er
35dd0 72 6f 72 20 63 6f 64 65 20 72 65 74 75 72 6e 65  ror code returne
35de0 64 20 77 68 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f  d when xColumn o
35df0 72 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f 74 68 65  r.  ** some othe
35e00 72 20 6d 65 74 68 6f 64 20 69 73 20 6e 65 78 74  r method is next
35e10 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 74 68 65 20   invoked on the 
35e20 73 61 76 65 20 76 69 72 74 75 61 6c 20 74 61 62  save virtual tab
35e30 6c 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a  le cursor..  */.
35e40 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
35e50 78 4e 65 78 74 28 70 43 75 72 2d 3e 75 63 2e 70  xNext(pCur->uc.p
35e60 56 43 75 72 29 3b 0a 20 20 73 71 6c 69 74 65 33  VCur);.  sqlite3
35e70 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
35e80 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66  (p, pVtab);.  if
35e90 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
35ea0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
35eb0 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d    res = pModule-
35ec0 3e 78 45 6f 66 28 70 43 75 72 2d 3e 75 63 2e 70  >xEof(pCur->uc.p
35ed0 56 43 75 72 29 3b 0a 20 20 56 64 62 65 42 72 61  VCur);.  VdbeBra
35ee0 6e 63 68 54 61 6b 65 6e 28 21 72 65 73 2c 32 29  nchTaken(!res,2)
35ef0 3b 0a 20 20 69 66 28 20 21 72 65 73 20 29 7b 0a  ;.  if( !res ){.
35f00 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20      /* If there 
35f10 69 73 20 64 61 74 61 2c 20 6a 75 6d 70 20 74 6f  is data, jump to
35f20 20 50 32 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20   P2 */.    goto 
35f30 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63  jump_to_p2_and_c
35f40 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
35f50 70 74 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63  pt;.  }.  goto c
35f60 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
35f70 70 74 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  pt;.}.#endif /* 
35f80 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
35f90 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
35fa0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
35fb0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
35fc0 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61 6d 65   Opcode: VRename
35fd0 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
35fe0 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
35ff0 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  er to a virtual 
36000 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e  table object, an
36010 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
36020 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73  ructure..** This
36030 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
36040 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
36050 67 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64  g xRename method
36060 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  . The value.** i
36070 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
36080 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 7a   passed as the z
36090 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 74 6f  Name argument to
360a0 20 74 68 65 20 78 52 65 6e 61 6d 65 20 6d 65 74   the xRename met
360b0 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  hod..*/.case OP_
360c0 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20 73 71 6c  VRename: {.  sql
360d0 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
360e0 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d 65 3b 0a  ;.  Mem *pName;.
360f0 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e  .  pVtab = pOp->
36100 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b  p4.pVtab->pVtab;
36110 0a 20 20 70 4e 61 6d 65 20 3d 20 26 61 4d 65 6d  .  pName = &aMem
36120 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
36130 65 72 74 28 20 70 56 74 61 62 2d 3e 70 4d 6f 64  ert( pVtab->pMod
36140 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 20 29 3b 0a  ule->xRename );.
36150 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
36160 61 6c 69 64 28 70 4e 61 6d 65 29 20 29 3b 0a 20  alid(pName) );. 
36170 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
36180 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 52 45 47  Only==0 );.  REG
36190 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
361a0 3e 70 31 2c 20 70 4e 61 6d 65 29 3b 0a 20 20 61  >p1, pName);.  a
361b0 73 73 65 72 74 28 20 70 4e 61 6d 65 2d 3e 66 6c  ssert( pName->fl
361c0 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 29 3b  ags & MEM_Str );
361d0 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4e 61  .  testcase( pNa
361e0 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f  me->enc==SQLITE_
361f0 55 54 46 38 20 29 3b 0a 20 20 74 65 73 74 63 61  UTF8 );.  testca
36200 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d  se( pName->enc==
36210 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 29  SQLITE_UTF16BE )
36220 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4e  ;.  testcase( pN
36230 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45  ame->enc==SQLITE
36240 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20 20 72 63  _UTF16LE );.  rc
36250 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68   = sqlite3VdbeCh
36260 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4e 61  angeEncoding(pNa
36270 6d 65 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29  me, SQLITE_UTF8)
36280 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
36290 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
362a0 72 72 6f 72 3b 0a 20 20 72 63 20 3d 20 70 56 74  rror;.  rc = pVt
362b0 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65  ab->pModule->xRe
362c0 6e 61 6d 65 28 70 56 74 61 62 2c 20 70 4e 61 6d  name(pVtab, pNam
362d0 65 2d 3e 7a 29 3b 0a 20 20 73 71 6c 69 74 65 33  e->z);.  sqlite3
362e0 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
362f0 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 70 2d  (p, pVtab);.  p-
36300 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20  >expired = 0;.  
36310 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
36320 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
36330 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
36340 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
36350 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
36360 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
36370 20 56 55 70 64 61 74 65 20 50 31 20 50 32 20 50   VUpdate P1 P2 P
36380 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
36390 73 69 73 3a 20 64 61 74 61 3d 72 5b 50 33 40 50  sis: data=r[P3@P
363a0 32 5d 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  2].**.** P4 is a
363b0 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69   pointer to a vi
363c0 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65  rtual table obje
363d0 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76  ct, an sqlite3_v
363e0 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  tab structure..*
363f0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e  * This opcode in
36400 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73  vokes the corres
36410 70 6f 6e 64 69 6e 67 20 78 55 70 64 61 74 65 20  ponding xUpdate 
36420 6d 65 74 68 6f 64 2e 20 50 32 20 76 61 6c 75 65  method. P2 value
36430 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 69 67 75  s.** are contigu
36440 6f 75 73 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73  ous memory cells
36450 20 73 74 61 72 74 69 6e 67 20 61 74 20 50 33 20   starting at P3 
36460 74 6f 20 70 61 73 73 20 74 6f 20 74 68 65 20 78  to pass to the x
36470 55 70 64 61 74 65 20 0a 2a 2a 20 69 6e 76 6f 63  Update .** invoc
36480 61 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65  ation. The value
36490 20 69 6e 20 72 65 67 69 73 74 65 72 20 28 50 33   in register (P3
364a0 2b 50 32 2d 31 29 20 63 6f 72 72 65 73 70 6f 6e  +P2-1) correspon
364b0 64 73 20 74 6f 20 74 68 65 20 0a 2a 2a 20 70 32  ds to the .** p2
364c0 74 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  th element of th
364d0 65 20 61 72 67 76 20 61 72 72 61 79 20 70 61 73  e argv array pas
364e0 73 65 64 20 74 6f 20 78 55 70 64 61 74 65 2e 0a  sed to xUpdate..
364f0 2a 2a 0a 2a 2a 20 54 68 65 20 78 55 70 64 61 74  **.** The xUpdat
36500 65 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20 64 6f  e method will do
36510 20 61 20 44 45 4c 45 54 45 20 6f 72 20 61 6e 20   a DELETE or an 
36520 49 4e 53 45 52 54 20 6f 72 20 62 6f 74 68 2e 0a  INSERT or both..
36530 2a 2a 20 54 68 65 20 61 72 67 76 5b 30 5d 20 65  ** The argv[0] e
36540 6c 65 6d 65 6e 74 20 28 77 68 69 63 68 20 63 6f  lement (which co
36550 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 6d 65 6d  rresponds to mem
36560 6f 72 79 20 63 65 6c 6c 20 50 33 29 0a 2a 2a 20  ory cell P3).** 
36570 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  is the rowid of 
36580 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e  a row to delete.
36590 20 20 49 66 20 61 72 67 76 5b 30 5d 20 69 73 20    If argv[0] is 
365a0 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a  NULL then no .**
365b0 20 64 65 6c 65 74 69 6f 6e 20 6f 63 63 75 72 73   deletion occurs
365c0 2e 20 20 54 68 65 20 61 72 67 76 5b 31 5d 20 65  .  The argv[1] e
365d0 6c 65 6d 65 6e 74 20 69 73 20 74 68 65 20 72 6f  lement is the ro
365e0 77 69 64 20 6f 66 20 74 68 65 20 6e 65 77 20 0a  wid of the new .
365f0 2a 2a 20 72 6f 77 2e 20 20 54 68 69 73 20 63 61  ** row.  This ca
36600 6e 20 62 65 20 4e 55 4c 4c 20 74 6f 20 68 61 76  n be NULL to hav
36610 65 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  e the virtual ta
36620 62 6c 65 20 73 65 6c 65 63 74 20 74 68 65 20 6e  ble select the n
36630 65 77 20 0a 2a 2a 20 72 6f 77 69 64 20 66 6f 72  ew .** rowid for
36640 20 69 74 73 65 6c 66 2e 20 20 54 68 65 20 73 75   itself.  The su
36650 62 73 65 71 75 65 6e 74 20 65 6c 65 6d 65 6e 74  bsequent element
36660 73 20 69 6e 20 74 68 65 20 61 72 72 61 79 20 61  s in the array a
36670 72 65 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  re .** the value
36680 73 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  s of columns in 
36690 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a  the new row..**.
366a0 2a 2a 20 49 66 20 50 32 3d 3d 31 20 74 68 65 6e  ** If P2==1 then
366b0 20 6e 6f 20 69 6e 73 65 72 74 20 69 73 20 70 65   no insert is pe
366c0 72 66 6f 72 6d 65 64 2e 20 20 61 72 67 76 5b 30  rformed.  argv[0
366d0 5d 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f  ] is the rowid o
366e0 66 0a 2a 2a 20 61 20 72 6f 77 20 74 6f 20 64 65  f.** a row to de
366f0 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69  lete..**.** P1 i
36700 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67  s a boolean flag
36710 2e 20 49 66 20 69 74 20 69 73 20 73 65 74 20 74  . If it is set t
36720 6f 20 74 72 75 65 20 61 6e 64 20 74 68 65 20 78  o true and the x
36730 55 70 64 61 74 65 20 63 61 6c 6c 0a 2a 2a 20 69  Update call.** i
36740 73 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68  s successful, th
36750 65 6e 20 74 68 65 20 76 61 6c 75 65 20 72 65 74  en the value ret
36760 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
36770 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  _last_insert_row
36780 69 64 28 29 20 0a 2a 2a 20 69 73 20 73 65 74 20  id() .** is set 
36790 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  to the value of 
367a0 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20 74 68  the rowid for th
367b0 65 20 72 6f 77 20 6a 75 73 74 20 69 6e 73 65 72  e row just inser
367c0 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73  ted..**.** P5 is
367d0 20 74 68 65 20 65 72 72 6f 72 20 61 63 74 69 6f   the error actio
367e0 6e 73 20 28 4f 45 5f 52 65 70 6c 61 63 65 2c 20  ns (OE_Replace, 
367f0 4f 45 5f 46 61 69 6c 2c 20 4f 45 5f 49 67 6e 6f  OE_Fail, OE_Igno
36800 72 65 2c 20 65 74 63 29 20 74 6f 0a 2a 2a 20 61  re, etc) to.** a
36810 70 70 6c 79 20 69 6e 20 74 68 65 20 63 61 73 65  pply in the case
36820 20 6f 66 20 61 20 63 6f 6e 73 74 72 61 69 6e 74   of a constraint
36830 20 66 61 69 6c 75 72 65 20 6f 6e 20 61 6e 20 69   failure on an i
36840 6e 73 65 72 74 20 6f 72 20 75 70 64 61 74 65 2e  nsert or update.
36850 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 55 70 64  .*/.case OP_VUpd
36860 61 74 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  ate: {.  sqlite3
36870 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
36880 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
36890 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20  dule *pModule;. 
368a0 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74   int nArg;.  int
368b0 20 69 3b 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74   i;.  sqlite_int
368c0 36 34 20 72 6f 77 69 64 3b 0a 20 20 4d 65 6d 20  64 rowid;.  Mem 
368d0 2a 2a 61 70 41 72 67 3b 0a 20 20 4d 65 6d 20 2a  **apArg;.  Mem *
368e0 70 58 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  pX;..  assert( p
368f0 4f 70 2d 3e 70 32 3d 3d 31 20 20 20 20 20 20 20  Op->p2==1       
36900 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f   || pOp->p5==OE_
36910 46 61 69 6c 20 20 20 7c 7c 20 70 4f 70 2d 3e 70  Fail   || pOp->p
36920 35 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 0a  5==OE_Rollback .
36930 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70         || pOp->p
36940 35 3d 3d 4f 45 5f 41 62 6f 72 74 20 7c 7c 20 70  5==OE_Abort || p
36950 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72  Op->p5==OE_Ignor
36960 65 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45  e || pOp->p5==OE
36970 5f 52 65 70 6c 61 63 65 0a 20 20 29 3b 0a 20 20  _Replace.  );.  
36980 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
36990 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 56 74 61  nly==0 );.  pVta
369a0 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61  b = pOp->p4.pVta
369b0 62 2d 3e 70 56 74 61 62 3b 0a 20 20 69 66 28 20  b->pVtab;.  if( 
369c0 70 56 74 61 62 3d 3d 30 20 7c 7c 20 4e 45 56 45  pVtab==0 || NEVE
369d0 52 28 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  R(pVtab->pModule
369e0 3d 3d 30 29 20 29 7b 0a 20 20 20 20 72 63 20 3d  ==0) ){.    rc =
369f0 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a   SQLITE_LOCKED;.
36a00 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
36a10 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
36a20 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74  .  pModule = pVt
36a30 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 6e  ab->pModule;.  n
36a40 41 72 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  Arg = pOp->p2;. 
36a50 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
36a60 74 79 70 65 3d 3d 50 34 5f 56 54 41 42 20 29 3b  type==P4_VTAB );
36a70 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 4d  .  if( ALWAYS(pM
36a80 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 29 20  odule->xUpdate) 
36a90 29 7b 0a 20 20 20 20 75 38 20 76 74 61 62 4f 6e  ){.    u8 vtabOn
36aa0 43 6f 6e 66 6c 69 63 74 20 3d 20 64 62 2d 3e 76  Conflict = db->v
36ab0 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20  tabOnConflict;. 
36ac0 20 20 20 61 70 41 72 67 20 3d 20 70 2d 3e 61 70     apArg = p->ap
36ad0 41 72 67 3b 0a 20 20 20 20 70 58 20 3d 20 26 61  Arg;.    pX = &a
36ae0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
36af0 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72    for(i=0; i<nAr
36b00 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61  g; i++){.      a
36b10 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
36b20 64 28 70 58 29 20 29 3b 0a 20 20 20 20 20 20 6d  d(pX) );.      m
36b30 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
36b40 70 2c 20 70 58 29 3b 0a 20 20 20 20 20 20 61 70  p, pX);.      ap
36b50 41 72 67 5b 69 5d 20 3d 20 70 58 3b 0a 20 20 20  Arg[i] = pX;.   
36b60 20 20 20 70 58 2b 2b 3b 0a 20 20 20 20 7d 0a 20     pX++;.    }. 
36b70 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e     db->vtabOnCon
36b80 66 6c 69 63 74 20 3d 20 70 4f 70 2d 3e 70 35 3b  flict = pOp->p5;
36b90 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  .    rc = pModul
36ba0 65 2d 3e 78 55 70 64 61 74 65 28 70 56 74 61 62  e->xUpdate(pVtab
36bb0 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 2c 20 26  , nArg, apArg, &
36bc0 72 6f 77 69 64 29 3b 0a 20 20 20 20 64 62 2d 3e  rowid);.    db->
36bd0 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d  vtabOnConflict =
36be0 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b   vtabOnConflict;
36bf0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62  .    sqlite3Vtab
36c00 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20  ImportErrmsg(p, 
36c10 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66 28 20  pVtab);.    if( 
36c20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
36c30 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20   pOp->p1 ){.    
36c40 20 20 61 73 73 65 72 74 28 20 6e 41 72 67 3e 31    assert( nArg>1
36c50 20 26 26 20 61 70 41 72 67 5b 30 5d 20 26 26 20   && apArg[0] && 
36c60 28 61 70 41 72 67 5b 30 5d 2d 3e 66 6c 61 67 73  (apArg[0]->flags
36c70 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29 3b 0a 20 20  &MEM_Null) );.  
36c80 20 20 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69      db->lastRowi
36c90 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 20 3d 20  d = lastRowid = 
36ca0 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 20  rowid;.    }.   
36cb0 20 69 66 28 20 28 72 63 26 30 78 66 66 29 3d 3d   if( (rc&0xff)==
36cc0 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
36cd0 54 20 26 26 20 70 4f 70 2d 3e 70 34 2e 70 56 74  T && pOp->p4.pVt
36ce0 61 62 2d 3e 62 43 6f 6e 73 74 72 61 69 6e 74 20  ab->bConstraint 
36cf0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70  ){.      if( pOp
36d00 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20  ->p5==OE_Ignore 
36d10 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
36d20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20  SQLITE_OK;.     
36d30 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
36d40 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d  p->errorAction =
36d50 20 28 28 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52   ((pOp->p5==OE_R
36d60 65 70 6c 61 63 65 29 20 3f 20 4f 45 5f 41 62 6f  eplace) ? OE_Abo
36d70 72 74 20 3a 20 70 4f 70 2d 3e 70 35 29 3b 0a 20  rt : pOp->p5);. 
36d80 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
36d90 7b 0a 20 20 20 20 20 20 70 2d 3e 6e 43 68 61 6e  {.      p->nChan
36da0 67 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ge++;.    }.    
36db0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
36dc0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
36dd0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
36de0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
36df0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
36e00 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
36e10 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47   SQLITE_OMIT_PAG
36e20 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70  ER_PRAGMAS./* Op
36e30 63 6f 64 65 3a 20 50 61 67 65 63 6f 75 6e 74 20  code: Pagecount 
36e40 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
36e50 2a 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72  * Write the curr
36e60 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  ent number of pa
36e70 67 65 73 20 69 6e 20 64 61 74 61 62 61 73 65 20  ges in database 
36e80 50 31 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c  P1 to memory cel
36e90 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  l P2..*/.case OP
36ea0 5f 50 61 67 65 63 6f 75 6e 74 3a 20 7b 20 20 20  _Pagecount: {   
36eb0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
36ec0 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74   */.  pOut = out
36ed0 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
36ee0 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  Op);.  pOut->u.i
36ef0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
36f00 61 73 74 50 61 67 65 28 64 62 2d 3e 61 44 62 5b  astPage(db->aDb[
36f10 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 29 3b 0a 20  pOp->p1].pBt);. 
36f20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
36f30 0a 0a 0a 23 69 66 6e 64 65 66 20 20 53 51 4c 49  ...#ifndef  SQLI
36f40 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
36f50 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a  AGMAS./* Opcode:
36f60 20 4d 61 78 50 67 63 6e 74 20 50 31 20 50 32 20   MaxPgcnt P1 P2 
36f70 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 79  P3 * *.**.** Try
36f80 20 74 6f 20 73 65 74 20 74 68 65 20 6d 61 78 69   to set the maxi
36f90 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 66  mum page count f
36fa0 6f 72 20 64 61 74 61 62 61 73 65 20 50 31 20 74  or database P1 t
36fb0 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 50  o the value in P
36fc0 33 2e 0a 2a 2a 20 44 6f 20 6e 6f 74 20 6c 65 74  3..** Do not let
36fd0 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67   the maximum pag
36fe0 65 20 63 6f 75 6e 74 20 66 61 6c 6c 20 62 65 6c  e count fall bel
36ff0 6f 77 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  ow the current p
37000 61 67 65 20 63 6f 75 6e 74 20 61 6e 64 0a 2a 2a  age count and.**
37010 20 64 6f 20 6e 6f 74 20 63 68 61 6e 67 65 20 74   do not change t
37020 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20  he maximum page 
37030 63 6f 75 6e 74 20 76 61 6c 75 65 20 69 66 20 50  count value if P
37040 33 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 53 74 6f 72  3==0..**.** Stor
37050 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61  e the maximum pa
37060 67 65 20 63 6f 75 6e 74 20 61 66 74 65 72 20 74  ge count after t
37070 68 65 20 63 68 61 6e 67 65 20 69 6e 20 72 65 67  he change in reg
37080 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
37090 65 20 4f 50 5f 4d 61 78 50 67 63 6e 74 3a 20 7b  e OP_MaxPgcnt: {
370a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
370b0 75 74 32 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  ut2 */.  unsigne
370c0 64 20 69 6e 74 20 6e 65 77 4d 61 78 3b 0a 20 20  d int newMax;.  
370d0 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 70  Btree *pBt;..  p
370e0 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
370f0 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
37100 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f  pBt = db->aDb[pO
37110 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 6e 65  p->p1].pBt;.  ne
37120 77 4d 61 78 20 3d 20 30 3b 0a 20 20 69 66 28 20  wMax = 0;.  if( 
37130 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 6e  pOp->p3 ){.    n
37140 65 77 4d 61 78 20 3d 20 73 71 6c 69 74 65 33 42  ewMax = sqlite3B
37150 74 72 65 65 4c 61 73 74 50 61 67 65 28 70 42 74  treeLastPage(pBt
37160 29 3b 0a 20 20 20 20 69 66 28 20 6e 65 77 4d 61  );.    if( newMa
37170 78 20 3c 20 28 75 6e 73 69 67 6e 65 64 29 70 4f  x < (unsigned)pO
37180 70 2d 3e 70 33 20 29 20 6e 65 77 4d 61 78 20 3d  p->p3 ) newMax =
37190 20 28 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d 3e   (unsigned)pOp->
371a0 70 33 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  p3;.  }.  pOut->
371b0 75 2e 69 20 3d 20 73 71 6c 69 74 65 33 42 74 72  u.i = sqlite3Btr
371c0 65 65 4d 61 78 50 61 67 65 43 6f 75 6e 74 28 70  eeMaxPageCount(p
371d0 42 74 2c 20 6e 65 77 4d 61 78 29 3b 0a 20 20 62  Bt, newMax);.  b
371e0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
371f0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 69 74  ./* Opcode: Init
37200 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20   * P2 * P4 *.** 
37210 53 79 6e 6f 70 73 69 73 3a 20 20 53 74 61 72 74  Synopsis:  Start
37220 20 61 74 20 50 32 0a 2a 2a 0a 2a 2a 20 50 72 6f   at P2.**.** Pro
37230 67 72 61 6d 73 20 63 6f 6e 74 61 69 6e 20 61 20  grams contain a 
37240 73 69 6e 67 6c 65 20 69 6e 73 74 61 6e 63 65 20  single instance 
37250 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20 61  of this opcode a
37260 73 20 74 68 65 20 76 65 72 79 20 66 69 72 73 74  s the very first
37270 0a 2a 2a 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  .** opcode..**.*
37280 2a 20 49 66 20 74 72 61 63 69 6e 67 20 69 73 20  * If tracing is 
37290 65 6e 61 62 6c 65 64 20 28 62 79 20 74 68 65 20  enabled (by the 
372a0 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29 29  sqlite3_trace())
372b0 20 69 6e 74 65 72 66 61 63 65 2c 20 74 68 65 6e   interface, then
372c0 0a 2a 2a 20 74 68 65 20 55 54 46 2d 38 20 73 74  .** the UTF-8 st
372d0 72 69 6e 67 20 63 6f 6e 74 61 69 6e 65 64 20 69  ring contained i
372e0 6e 20 50 34 20 69 73 20 65 6d 69 74 74 65 64 20  n P4 is emitted 
372f0 6f 6e 20 74 68 65 20 74 72 61 63 65 20 63 61 6c  on the trace cal
37300 6c 62 61 63 6b 2e 0a 2a 2a 20 4f 72 20 69 66 20  lback..** Or if 
37310 50 34 20 69 73 20 62 6c 61 6e 6b 2c 20 75 73 65  P4 is blank, use
37320 20 74 68 65 20 73 74 72 69 6e 67 20 72 65 74 75   the string retu
37330 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
37340 73 71 6c 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  sql()..**.** If 
37350 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
37360 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
37370 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ion P2..*/.case 
37380 4f 50 5f 49 6e 69 74 3a 20 7b 20 20 20 20 20 20  OP_Init: {      
37390 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
373a0 20 63 68 61 72 20 2a 7a 54 72 61 63 65 3b 0a 20   char *zTrace;. 
373b0 20 63 68 61 72 20 2a 7a 3b 0a 0a 23 69 66 6e 64   char *z;..#ifnd
373c0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
373d0 52 41 43 45 0a 20 20 69 66 28 20 64 62 2d 3e 78  RACE.  if( db->x
373e0 54 72 61 63 65 0a 20 20 20 26 26 20 21 70 2d 3e  Trace.   && !p->
373f0 64 6f 69 6e 67 52 65 72 75 6e 0a 20 20 20 26 26  doingRerun.   &&
37400 20 28 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d   (zTrace = (pOp-
37410 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e  >p4.z ? pOp->p4.
37420 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29 21 3d 30  z : p->zSql))!=0
37430 0a 20 20 29 7b 0a 20 20 20 20 7a 20 3d 20 73 71  .  ){.    z = sq
37440 6c 69 74 65 33 56 64 62 65 45 78 70 61 6e 64 53  lite3VdbeExpandS
37450 71 6c 28 70 2c 20 7a 54 72 61 63 65 29 3b 0a 20  ql(p, zTrace);. 
37460 20 20 20 64 62 2d 3e 78 54 72 61 63 65 28 64 62     db->xTrace(db
37470 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 7a 29 3b  ->pTraceArg, z);
37480 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72  .    sqlite3DbFr
37490 65 65 28 64 62 2c 20 7a 29 3b 0a 20 20 7d 0a 23  ee(db, z);.  }.#
374a0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
374b0 5f 46 43 4e 54 4c 5f 54 52 41 43 45 0a 20 20 7a  _FCNTL_TRACE.  z
374c0 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34  Trace = (pOp->p4
374d0 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a  .z ? pOp->p4.z :
374e0 20 70 2d 3e 7a 53 71 6c 29 3b 0a 20 20 69 66 28   p->zSql);.  if(
374f0 20 7a 54 72 61 63 65 20 29 7b 0a 20 20 20 20 69   zTrace ){.    i
37500 6e 74 20 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d  nt i;.    for(i=
37510 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b  0; i<db->nDb; i+
37520 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 44 62  +){.      if( Db
37530 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
37540 65 4d 61 73 6b 2c 20 69 29 3d 3d 30 20 29 20 63  eMask, i)==0 ) c
37550 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 73  ontinue;.      s
37560 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74  qlite3_file_cont
37570 72 6f 6c 28 64 62 2c 20 64 62 2d 3e 61 44 62 5b  rol(db, db->aDb[
37580 69 5d 2e 7a 4e 61 6d 65 2c 20 53 51 4c 49 54 45  i].zName, SQLITE
37590 5f 46 43 4e 54 4c 5f 54 52 41 43 45 2c 20 7a 54  _FCNTL_TRACE, zT
375a0 72 61 63 65 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  race);.    }.  }
375b0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
375c0 45 5f 55 53 45 5f 46 43 4e 54 4c 5f 54 52 41 43  E_USE_FCNTL_TRAC
375d0 45 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  E */.#ifdef SQLI
375e0 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 28  TE_DEBUG.  if( (
375f0 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
37600 54 45 5f 53 71 6c 54 72 61 63 65 29 21 3d 30 0a  TE_SqlTrace)!=0.
37610 20 20 20 26 26 20 28 7a 54 72 61 63 65 20 3d 20     && (zTrace = 
37620 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70  (pOp->p4.z ? pOp
37630 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c  ->p4.z : p->zSql
37640 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 73  ))!=0.  ){.    s
37650 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74  qlite3DebugPrint
37660 66 28 22 53 51 4c 2d 74 72 61 63 65 3a 20 25 73  f("SQL-trace: %s
37670 5c 6e 22 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20  \n", zTrace);.  
37680 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
37690 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64  TE_DEBUG */.#end
376a0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
376b0 54 5f 54 52 41 43 45 20 2a 2f 0a 20 20 69 66 28  T_TRACE */.  if(
376c0 20 70 4f 70 2d 3e 70 32 20 29 20 67 6f 74 6f 20   pOp->p2 ) goto 
376d0 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72  jump_to_p2;.  br
376e0 65 61 6b 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53  eak;.}..#ifdef S
376f0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52  QLITE_ENABLE_CUR
37700 53 4f 52 5f 48 49 4e 54 53 0a 2f 2a 20 4f 70 63  SOR_HINTS./* Opc
37710 6f 64 65 3a 20 43 75 72 73 6f 72 48 69 6e 74 20  ode: CursorHint 
37720 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
37730 2a 20 50 72 6f 76 69 64 65 20 61 20 68 69 6e 74  * Provide a hint
37740 20 74 6f 20 63 75 72 73 6f 72 20 50 31 20 74 68   to cursor P1 th
37750 61 74 20 69 74 20 6f 6e 6c 79 20 6e 65 65 64 73  at it only needs
37760 20 74 6f 20 72 65 74 75 72 6e 20 72 6f 77 73 20   to return rows 
37770 74 68 61 74 0a 2a 2a 20 73 61 74 69 73 66 79 20  that.** satisfy 
37780 74 68 65 20 45 78 70 72 20 69 6e 20 50 34 2e 20  the Expr in P4. 
37790 20 54 4b 5f 52 45 47 49 53 54 45 52 20 74 65 72   TK_REGISTER ter
377a0 6d 73 20 69 6e 20 74 68 65 20 50 34 20 65 78 70  ms in the P4 exp
377b0 72 65 73 73 69 6f 6e 20 72 65 66 65 72 0a 2a 2a  ression refer.**
377c0 20 74 6f 20 76 61 6c 75 65 73 20 63 75 72 72 65   to values curre
377d0 6e 74 6c 79 20 68 65 6c 64 20 69 6e 20 72 65 67  ntly held in reg
377e0 69 73 74 65 72 73 2e 20 20 54 4b 5f 43 4f 4c 55  isters.  TK_COLU
377f0 4d 4e 20 74 65 72 6d 73 20 69 6e 20 74 68 65 20  MN terms in the 
37800 50 34 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e  P4.** expression
37810 20 72 65 66 65 72 20 74 6f 20 63 6f 6c 75 6d 6e   refer to column
37820 73 20 69 6e 20 74 68 65 20 62 2d 74 72 65 65 20  s in the b-tree 
37830 74 6f 20 77 68 69 63 68 20 63 75 72 73 6f 72 20  to which cursor 
37840 50 31 20 69 73 20 70 6f 69 6e 74 69 6e 67 2e 0a  P1 is pointing..
37850 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 75 72 73 6f  */.case OP_Curso
37860 72 48 69 6e 74 3a 20 7b 0a 20 20 56 64 62 65 43  rHint: {.  VdbeC
37870 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73  ursor *pC;..  as
37880 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
37890 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
378a0 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
378b0 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
378c0 3d 50 34 5f 45 58 50 52 20 29 3b 0a 20 20 70 43  =P4_EXPR );.  pC
378d0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
378e0 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 43 20 29  >p1];.  if( pC )
378f0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
37900 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
37910 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20  YPE_BTREE );.   
37920 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
37930 73 6f 72 48 69 6e 74 28 70 43 2d 3e 75 63 2e 70  sorHint(pC->uc.p
37940 43 75 72 73 6f 72 2c 20 42 54 52 45 45 5f 48 49  Cursor, BTREE_HI
37950 4e 54 5f 52 41 4e 47 45 2c 0a 20 20 20 20 20 20  NT_RANGE,.      
37960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37970 20 20 20 20 20 70 4f 70 2d 3e 70 34 2e 70 45 78       pOp->p4.pEx
37980 70 72 2c 20 61 4d 65 6d 29 3b 0a 20 20 7d 0a 20  pr, aMem);.  }. 
37990 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
379a0 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c   /* SQLITE_ENABL
379b0 45 5f 43 55 52 53 4f 52 5f 48 49 4e 54 53 20 2a  E_CURSOR_HINTS *
379c0 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  /../* Opcode: No
379d0 6f 70 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  op * * * * *.**.
379e0 2a 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 2e 20 20  ** Do nothing.  
379f0 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
37a00 20 69 73 20 6f 66 74 65 6e 20 75 73 65 66 75 6c   is often useful
37a10 20 61 73 20 61 20 6a 75 6d 70 0a 2a 2a 20 64 65   as a jump.** de
37a20 73 74 69 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  stination..*/./*
37a30 0a 2a 2a 20 54 68 65 20 6d 61 67 69 63 20 45 78  .** The magic Ex
37a40 70 6c 61 69 6e 20 6f 70 63 6f 64 65 20 61 72 65  plain opcode are
37a50 20 6f 6e 6c 79 20 69 6e 73 65 72 74 65 64 20 77   only inserted w
37a60 68 65 6e 20 65 78 70 6c 61 69 6e 3d 3d 32 20 28  hen explain==2 (
37a70 77 68 69 63 68 0a 2a 2a 20 69 73 20 74 6f 20 73  which.** is to s
37a80 61 79 20 77 68 65 6e 20 74 68 65 20 45 58 50 4c  ay when the EXPL
37a90 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 73  AIN QUERY PLAN s
37aa0 79 6e 74 61 78 20 69 73 20 75 73 65 64 2e 29 0a  yntax is used.).
37ab0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72  ** This opcode r
37ac0 65 63 6f 72 64 73 20 69 6e 66 6f 72 6d 61 74 69  ecords informati
37ad0 6f 6e 20 66 72 6f 6d 20 74 68 65 20 6f 70 74 69  on from the opti
37ae0 6d 69 7a 65 72 2e 20 20 49 74 20 69 73 20 74 68  mizer.  It is th
37af0 65 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 61 73  e.** the same as
37b00 20 61 20 6e 6f 2d 6f 70 2e 20 20 54 68 69 73 20   a no-op.  This 
37b10 6f 70 63 6f 64 65 73 6e 65 76 65 72 20 61 70 70  opcodesnever app
37b20 65 61 72 73 20 69 6e 20 61 20 72 65 61 6c 20 56  ears in a real V
37b30 4d 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 64 65  M program..*/.de
37b40 66 61 75 6c 74 3a 20 7b 20 20 20 20 20 20 20 20  fault: {        
37b50 20 20 2f 2a 20 54 68 69 73 20 69 73 20 72 65 61    /* This is rea
37b60 6c 6c 79 20 4f 50 5f 4e 6f 6f 70 20 61 6e 64 20  lly OP_Noop and 
37b70 4f 50 5f 45 78 70 6c 61 69 6e 20 2a 2f 0a 20 20  OP_Explain */.  
37b80 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
37b90 6f 64 65 3d 3d 4f 50 5f 4e 6f 6f 70 20 7c 7c 20  ode==OP_Noop || 
37ba0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
37bb0 45 78 70 6c 61 69 6e 20 29 3b 0a 20 20 62 72 65  Explain );.  bre
37bc0 61 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a  ak;.}../********
37bd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
37be0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
37bf0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
37c00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
37c10 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 61 73  *****.** The cas
37c20 65 73 20 6f 66 20 74 68 65 20 73 77 69 74 63 68  es of the switch
37c30 20 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 76 65   statement above
37c40 20 74 68 69 73 20 6c 69 6e 65 20 73 68 6f 75 6c   this line shoul
37c50 64 20 61 6c 6c 20 62 65 20 69 6e 64 65 6e 74 65  d all be indente
37c60 64 0a 2a 2a 20 62 79 20 36 20 73 70 61 63 65 73  d.** by 6 spaces
37c70 2e 20 20 42 75 74 20 74 68 65 20 6c 65 66 74 2d  .  But the left-
37c80 6d 6f 73 74 20 36 20 73 70 61 63 65 73 20 68 61  most 6 spaces ha
37c90 76 65 20 62 65 65 6e 20 72 65 6d 6f 76 65 64 20  ve been removed 
37ca0 74 6f 20 69 6d 70 72 6f 76 65 20 74 68 65 0a 2a  to improve the.*
37cb0 2a 20 72 65 61 64 61 62 69 6c 69 74 79 2e 20 20  * readability.  
37cc0 46 72 6f 6d 20 74 68 69 73 20 70 6f 69 6e 74 20  From this point 
37cd0 6f 6e 20 64 6f 77 6e 2c 20 74 68 65 20 6e 6f 72  on down, the nor
37ce0 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20  mal indentation 
37cf0 72 75 6c 65 73 20 61 72 65 0a 2a 2a 20 72 65 73  rules are.** res
37d00 74 6f 72 65 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a  tored..*********
37d10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
37d20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
37d30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
37d40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
37d50 2a 2a 2a 2a 2f 0a 20 20 20 20 7d 0a 0a 23 69 66  ****/.    }..#if
37d60 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45  def VDBE_PROFILE
37d70 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 75 36 34  .    {.      u64
37d80 20 65 6e 64 54 69 6d 65 20 3d 20 73 71 6c 69 74   endTime = sqlit
37d90 65 33 48 77 74 69 6d 65 28 29 3b 0a 20 20 20 20  e3Hwtime();.    
37da0 20 20 69 66 28 20 65 6e 64 54 69 6d 65 3e 73 74    if( endTime>st
37db0 61 72 74 20 29 20 70 4f 72 69 67 4f 70 2d 3e 63  art ) pOrigOp->c
37dc0 79 63 6c 65 73 20 2b 3d 20 65 6e 64 54 69 6d 65  ycles += endTime
37dd0 20 2d 20 73 74 61 72 74 3b 0a 20 20 20 20 20 20   - start;.      
37de0 70 4f 72 69 67 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a  pOrigOp->cnt++;.
37df0 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20      }.#endif..  
37e00 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69    /* The followi
37e10 6e 67 20 63 6f 64 65 20 61 64 64 73 20 6e 6f 74  ng code adds not
37e20 68 69 6e 67 20 74 6f 20 74 68 65 20 61 63 74 75  hing to the actu
37e30 61 6c 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79  al functionality
37e40 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 70  .    ** of the p
37e50 72 6f 67 72 61 6d 2e 20 20 49 74 20 69 73 20 6f  rogram.  It is o
37e60 6e 6c 79 20 68 65 72 65 20 66 6f 72 20 74 65 73  nly here for tes
37e70 74 69 6e 67 20 61 6e 64 20 64 65 62 75 67 67 69  ting and debuggi
37e80 6e 67 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20 74 68  ng..    ** On th
37e90 65 20 6f 74 68 65 72 20 68 61 6e 64 2c 20 69 74  e other hand, it
37ea0 20 64 6f 65 73 20 62 75 72 6e 20 43 50 55 20 63   does burn CPU c
37eb0 79 63 6c 65 73 20 65 76 65 72 79 20 74 69 6d 65  ycles every time
37ec0 20 74 68 72 6f 75 67 68 0a 20 20 20 20 2a 2a 20   through.    ** 
37ed0 74 68 65 20 65 76 61 6c 75 61 74 6f 72 20 6c 6f  the evaluator lo
37ee0 6f 70 2e 20 20 53 6f 20 77 65 20 63 61 6e 20 6c  op.  So we can l
37ef0 65 61 76 65 20 69 74 20 6f 75 74 20 77 68 65 6e  eave it out when
37f00 20 4e 44 45 42 55 47 20 69 73 20 64 65 66 69 6e   NDEBUG is defin
37f10 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 6e 64  ed..    */.#ifnd
37f20 65 66 20 4e 44 45 42 55 47 0a 20 20 20 20 61 73  ef NDEBUG.    as
37f30 73 65 72 74 28 20 70 4f 70 3e 3d 26 61 4f 70 5b  sert( pOp>=&aOp[
37f40 2d 31 5d 20 26 26 20 70 4f 70 3c 26 61 4f 70 5b  -1] && pOp<&aOp[
37f50 70 2d 3e 6e 4f 70 2d 31 5d 20 29 3b 0a 0a 23 69  p->nOp-1] );..#i
37f60 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
37f70 47 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 66 6c  G.    if( db->fl
37f80 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62  ags & SQLITE_Vdb
37f90 65 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20  eTrace ){.      
37fa0 75 38 20 6f 70 50 72 6f 70 65 72 74 79 20 3d 20  u8 opProperty = 
37fb0 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f  sqlite3OpcodePro
37fc0 70 65 72 74 79 5b 70 4f 72 69 67 4f 70 2d 3e 6f  perty[pOrigOp->o
37fd0 70 63 6f 64 65 5d 3b 0a 20 20 20 20 20 20 69 66  pcode];.      if
37fe0 28 20 72 63 21 3d 30 20 29 20 70 72 69 6e 74 66  ( rc!=0 ) printf
37ff0 28 22 72 63 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a  ("rc=%d\n",rc);.
38000 20 20 20 20 20 20 69 66 28 20 6f 70 50 72 6f 70        if( opProp
38010 65 72 74 79 20 26 20 28 4f 50 46 4c 47 5f 4f 55  erty & (OPFLG_OU
38020 54 32 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72  T2) ){.        r
38030 65 67 69 73 74 65 72 54 72 61 63 65 28 70 4f 72  egisterTrace(pOr
38040 69 67 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b  igOp->p2, &aMem[
38050 70 4f 72 69 67 4f 70 2d 3e 70 32 5d 29 3b 0a 20  pOrigOp->p2]);. 
38060 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
38070 20 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50   opProperty & OP
38080 46 4c 47 5f 4f 55 54 33 20 29 7b 0a 20 20 20 20  FLG_OUT3 ){.    
38090 20 20 20 20 72 65 67 69 73 74 65 72 54 72 61 63      registerTrac
380a0 65 28 70 4f 72 69 67 4f 70 2d 3e 70 33 2c 20 26  e(pOrigOp->p3, &
380b0 61 4d 65 6d 5b 70 4f 72 69 67 4f 70 2d 3e 70 33  aMem[pOrigOp->p3
380c0 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ]);.      }.    
380d0 7d 0a 23 65 6e 64 69 66 20 20 2f 2a 20 53 51 4c  }.#endif  /* SQL
380e0 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23 65 6e  ITE_DEBUG */.#en
380f0 64 69 66 20 20 2f 2a 20 4e 44 45 42 55 47 20 2a  dif  /* NDEBUG *
38100 2f 0a 20 20 7d 20 20 2f 2a 20 54 68 65 20 65 6e  /.  }  /* The en
38110 64 20 6f 66 20 74 68 65 20 66 6f 72 28 3b 3b 29  d of the for(;;)
38120 20 6c 6f 6f 70 20 74 68 65 20 6c 6f 6f 70 73 20   loop the loops 
38130 74 68 72 6f 75 67 68 20 6f 70 63 6f 64 65 73 20  through opcodes 
38140 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20 72  */..  /* If we r
38150 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74 2c  each this point,
38160 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 65   it means that e
38170 78 65 63 75 74 69 6f 6e 20 69 73 20 66 69 6e 69  xecution is fini
38180 73 68 65 64 20 77 69 74 68 0a 20 20 2a 2a 20 61  shed with.  ** a
38190 6e 20 65 72 72 6f 72 20 6f 66 20 73 6f 6d 65 20  n error of some 
381a0 6b 69 6e 64 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74  kind..  */.abort
381b0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20  _due_to_error:. 
381c0 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46   if( db->mallocF
381d0 61 69 6c 65 64 20 29 20 72 63 20 3d 20 53 51 4c  ailed ) rc = SQL
381e0 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 3b 0a  ITE_NOMEM_BKPT;.
381f0 20 20 61 73 73 65 72 74 28 20 72 63 20 29 3b 0a    assert( rc );.
38200 20 20 69 66 28 20 70 2d 3e 7a 45 72 72 4d 73 67    if( p->zErrMsg
38210 3d 3d 30 20 26 26 20 72 63 21 3d 53 51 4c 49 54  ==0 && rc!=SQLIT
38220 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 7b  E_IOERR_NOMEM ){
38230 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
38240 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 73  Error(p, "%s", s
38250 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29  qlite3ErrStr(rc)
38260 29 3b 0a 20