/ Hex Artifact Content
Login

Artifact beed55b540e01e9be3b87b0d3aa491b41d933bd391ca4d8470882f77e1090871:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 20   like that ever 
0520: 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66 64  happens..*/.#ifd
0530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
0540: 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75  # define memAbou
0550: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73  tToChange(P,M) s
0560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
0570: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a  utToChange(P,M).
0580: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d  #else.# define m
0590: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
05a0: 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  P,M).#endif../*.
05b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
05c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
05d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
05e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
05f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0600: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53  ther by the OP_S
0610: 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  eekXX, OP_Next, 
0620: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0630: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0640: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0650: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0660: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0670: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0680: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0690: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
06a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
06b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
06c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
06d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
06e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
06f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0700: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0710: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0720: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0730: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0740: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0750: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0760: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0770: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0780: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0790: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
07a0: 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65    When it reache
07b0: 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69  s zero, the u1.i
07c0: 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20  sInterrupted.** 
07d0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
07e0: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69  ite3 structure i
07f0: 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74  s set in order t
0800: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
0810: 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54  terrupt..**.** T
0820: 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20  his facility is 
0830: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
0840: 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20   purposes only. 
0850: 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e   It does not fun
0860: 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f  ction.** in an o
0870: 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a  rdinary build..*
0880: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0890: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
08a0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
08b0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
08c0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f  .** The next glo
08d0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20  bal variable is 
08e0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68  incremented each
08f0: 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72   type the OP_Sor
0900: 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  t opcode.** is e
0910: 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65  xecuted.  The te
0920: 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73  st procedures us
0930: 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  e this informati
0940: 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  on to make sure 
0950: 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20  that.** sorting 
0960: 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20  is occurring or 
0970: 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74  not occurring at
0980: 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d   appropriate tim
0990: 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  es.   This varia
09a0: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
09b0: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
09c0: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
09f0: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
0a00: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0a10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  int sqlite3_sort
0a20: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0a30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0a40: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0a50: 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73  le records the s
0a60: 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
0a70: 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f  st MEM_Blob.** o
0a80: 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68  r MEM_Str that h
0a90: 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20  as been used by 
0aa0: 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20  a VDBE opcode.  
0ab0: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0ac0: 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20  res.** use this 
0ad0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d  information to m
0ae0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
0af0: 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63  e zero-blob func
0b00: 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20  tionality.** is 
0b10: 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  working correctl
0b20: 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  y.   This variab
0b30: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0b40: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0b50: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0b60: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0b70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0b80: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0b90: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ba0: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0bb0: 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63  size = 0;.static
0bc0: 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42   void updateMaxB
0bd0: 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b  lobsize(Mem *p){
0be0: 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  .  if( (p->flags
0bf0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
0c00: 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e  Blob))!=0 && p->
0c10: 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c  n>sqlite3_max_bl
0c20: 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71  obsize ){.    sq
0c30: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0c40: 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d  ze = p->n;.  }.}
0c50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0c60: 68 69 73 20 6d 61 63 72 6f 20 65 76 61 6c 75 61  his macro evalua
0c70: 74 65 73 20 74 6f 20 74 72 75 65 20 69 66 20 65  tes to true if e
0c80: 69 74 68 65 72 20 74 68 65 20 75 70 64 61 74 65  ither the update
0c90: 20 68 6f 6f 6b 20 6f 72 20 74 68 65 20 70 72 65   hook or the pre
0ca0: 75 70 64 61 74 65 0a 2a 2a 20 68 6f 6f 6b 20 61  update.** hook a
0cb0: 72 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 64  re enabled for d
0cc0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 20  atabase connect 
0cd0: 44 42 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  DB..*/.#ifdef SQ
0ce0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
0cf0: 50 44 41 54 45 5f 48 4f 4f 4b 0a 23 20 64 65 66  PDATE_HOOK.# def
0d00: 69 6e 65 20 48 41 53 5f 55 50 44 41 54 45 5f 48  ine HAS_UPDATE_H
0d10: 4f 4f 4b 28 44 42 29 20 28 28 44 42 29 2d 3e 78  OOK(DB) ((DB)->x
0d20: 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
0d30: 6b 7c 7c 28 44 42 29 2d 3e 78 55 70 64 61 74 65  k||(DB)->xUpdate
0d40: 43 61 6c 6c 62 61 63 6b 29 0a 23 65 6c 73 65 0a  Callback).#else.
0d50: 23 20 64 65 66 69 6e 65 20 48 41 53 5f 55 50 44  # define HAS_UPD
0d60: 41 54 45 5f 48 4f 4f 4b 28 44 42 29 20 28 28 44  ATE_HOOK(DB) ((D
0d70: 42 29 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  B)->xUpdateCallb
0d80: 61 63 6b 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ack).#endif../*.
0d90: 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62  ** The next glob
0da0: 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69  al variable is i
0db0: 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20  ncremented each 
0dc0: 74 69 6d 65 20 74 68 65 20 4f 50 5f 46 6f 75 6e  time the OP_Foun
0dd0: 64 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  d opcode.** is e
0de0: 78 65 63 75 74 65 64 2e 20 54 68 69 73 20 69 73  xecuted. This is
0df0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 77 68   used to test wh
0e00: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
0e10: 20 66 6f 72 65 69 67 6e 20 6b 65 79 0a 2a 2a 20   foreign key.** 
0e20: 6f 70 65 72 61 74 69 6f 6e 20 69 6d 70 6c 65 6d  operation implem
0e30: 65 6e 74 65 64 20 75 73 69 6e 67 20 4f 50 5f 46  ented using OP_F
0e40: 6b 49 73 5a 65 72 6f 20 69 73 20 77 6f 72 6b 69  kIsZero is worki
0e50: 6e 67 2e 20 54 68 69 73 20 76 61 72 69 61 62 6c  ng. This variabl
0e60: 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63  e.** has no func
0e70: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
0e80: 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  to help verify t
0e90: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0ea0: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c  tion of the.** l
0eb0: 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  ibrary..*/.#ifde
0ec0: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e  f SQLITE_TEST.in
0ed0: 74 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f  t sqlite3_found_
0ee0: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0ef0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 61 20  f../*.** Test a 
0f00: 72 65 67 69 73 74 65 72 20 74 6f 20 73 65 65 20  register to see 
0f10: 69 66 20 69 74 20 65 78 63 65 65 64 73 20 74 68  if it exceeds th
0f20: 65 20 63 75 72 72 65 6e 74 20 6d 61 78 69 6d 75  e current maximu
0f30: 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20  m blob size..** 
0f40: 49 66 20 69 74 20 64 6f 65 73 2c 20 72 65 63 6f  If it does, reco
0f50: 72 64 20 74 68 65 20 6e 65 77 20 6d 61 78 69 6d  rd the new maxim
0f60: 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f  um blob size..*/
0f70: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
0f80: 49 54 45 5f 54 45 53 54 29 20 26 26 20 21 64 65  ITE_TEST) && !de
0f90: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 55 4e 54  fined(SQLITE_UNT
0fa0: 45 53 54 41 42 4c 45 29 0a 23 20 64 65 66 69 6e  ESTABLE).# defin
0fb0: 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f  e UPDATE_MAX_BLO
0fc0: 42 53 49 5a 45 28 50 29 20 20 75 70 64 61 74 65  BSIZE(P)  update
0fd0: 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50 29 0a 23  MaxBlobsize(P).#
0fe0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 55 50  else.# define UP
0ff0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
1000: 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E(P).#endif../*.
1010: 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 56 44  ** Invoke the VD
1020: 42 45 20 63 6f 76 65 72 61 67 65 20 63 61 6c 6c  BE coverage call
1030: 62 61 63 6b 2c 20 69 66 20 74 68 61 74 20 63 61  back, if that ca
1040: 6c 6c 62 61 63 6b 20 69 73 20 64 65 66 69 6e 65  llback is define
1050: 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66 65 61 74  d.  This.** feat
1060: 75 72 65 20 69 73 20 75 73 65 64 20 66 6f 72 20  ure is used for 
1070: 74 65 73 74 20 73 75 69 74 65 20 76 61 6c 69 64  test suite valid
1080: 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e 64 20 64  ation only and d
1090: 6f 65 73 20 6e 6f 74 20 61 70 70 65 61 72 20 61  oes not appear a
10a0: 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69 6f 6e 20  n.** production 
10b0: 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 4d 20  builds..**.** M 
10c0: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 32  is an integer, 2
10d0: 20 6f 72 20 33 2c 20 74 68 61 74 20 69 6e 64 69   or 3, that indi
10e0: 63 65 73 20 68 6f 77 20 6d 61 6e 79 20 64 69 66  ces how many dif
10f0: 66 65 72 65 6e 74 20 77 61 79 73 20 74 68 65 0a  ferent ways the.
1100: 2a 2a 20 62 72 61 6e 63 68 20 63 61 6e 20 67 6f  ** branch can go
1110: 2e 20 20 49 74 20 69 73 20 75 73 75 61 6c 6c 79  .  It is usually
1120: 20 32 2e 20 20 22 49 22 20 69 73 20 74 68 65 20   2.  "I" is the 
1130: 64 69 72 65 63 74 69 6f 6e 20 74 68 65 20 62 72  direction the br
1140: 61 6e 63 68 0a 2a 2a 20 67 6f 65 73 2e 20 20 30  anch.** goes.  0
1150: 20 6d 65 61 6e 73 20 66 61 6c 6c 73 20 74 68 72   means falls thr
1160: 6f 75 67 68 2e 20 20 31 20 6d 65 61 6e 73 20 62  ough.  1 means b
1170: 72 61 6e 63 68 20 69 73 20 74 61 6b 65 6e 2e 20  ranch is taken. 
1180: 20 32 20 6d 65 61 6e 73 20 74 68 65 0a 2a 2a 20   2 means the.** 
1190: 73 65 63 6f 6e 64 20 61 6c 74 65 72 6e 61 74 69  second alternati
11a0: 76 65 20 62 72 61 6e 63 68 20 69 73 20 74 61 6b  ve branch is tak
11b0: 65 6e 2e 0a 2a 2a 0a 2a 2a 20 69 53 72 63 4c 69  en..**.** iSrcLi
11c0: 6e 65 20 69 73 20 74 68 65 20 73 6f 75 72 63 65  ne is the source
11d0: 20 63 6f 64 65 20 6c 69 6e 65 20 28 66 72 6f 6d   code line (from
11e0: 20 74 68 65 20 5f 5f 4c 49 4e 45 5f 5f 20 6d 61   the __LINE__ ma
11f0: 63 72 6f 29 20 74 68 61 74 0a 2a 2a 20 67 65 6e  cro) that.** gen
1200: 65 72 61 74 65 64 20 74 68 65 20 56 44 42 45 20  erated the VDBE 
1210: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 54 68  instruction.  Th
1220: 69 73 20 69 6e 73 74 72 75 6d 65 6e 74 61 74 69  is instrumentati
1230: 6f 6e 20 61 73 73 75 6d 65 73 20 74 68 61 74 20  on assumes that 
1240: 61 6c 6c 0a 2a 2a 20 73 6f 75 72 63 65 20 63 6f  all.** source co
1250: 64 65 20 69 73 20 69 6e 20 61 20 73 69 6e 67 6c  de is in a singl
1260: 65 20 66 69 6c 65 20 28 74 68 65 20 61 6d 61 6c  e file (the amal
1270: 67 61 6d 61 74 69 6f 6e 29 2e 20 20 53 70 65 63  gamation).  Spec
1280: 69 61 6c 20 76 61 6c 75 65 73 20 31 0a 2a 2a 20  ial values 1.** 
1290: 61 6e 64 20 32 20 66 6f 72 20 74 68 65 20 69 53  and 2 for the iS
12a0: 72 63 4c 69 6e 65 20 70 61 72 61 6d 65 74 65 72  rcLine parameter
12b0: 20 6d 65 61 6e 20 74 68 61 74 20 74 68 69 73 20   mean that this 
12c0: 70 61 72 74 69 63 75 6c 61 72 20 62 72 61 6e 63  particular branc
12d0: 68 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 74  h is.** always t
12e0: 61 6b 65 6e 20 6f 72 20 6e 65 76 65 72 20 74 61  aken or never ta
12f0: 6b 65 6e 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ken, respectivel
1300: 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  y..*/.#if !defin
1310: 65 64 28 53 51 4c 49 54 45 5f 56 44 42 45 5f 43  ed(SQLITE_VDBE_C
1320: 4f 56 45 52 41 47 45 29 0a 23 20 64 65 66 69 6e  OVERAGE).# defin
1330: 65 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65  e VdbeBranchTake
1340: 6e 28 49 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 64  n(I,M).#else.# d
1350: 65 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68  efine VdbeBranch
1360: 54 61 6b 65 6e 28 49 2c 4d 29 20 76 64 62 65 54  Taken(I,M) vdbeT
1370: 61 6b 65 42 72 61 6e 63 68 28 70 4f 70 2d 3e 69  akeBranch(pOp->i
1380: 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 0a 20 20 73  SrcLine,I,M).  s
1390: 74 61 74 69 63 20 76 6f 69 64 20 76 64 62 65 54  tatic void vdbeT
13a0: 61 6b 65 42 72 61 6e 63 68 28 69 6e 74 20 69 53  akeBranch(int iS
13b0: 72 63 4c 69 6e 65 2c 20 75 38 20 49 2c 20 75 38  rcLine, u8 I, u8
13c0: 20 4d 29 7b 0a 20 20 20 20 69 66 28 20 69 53 72   M){.    if( iSr
13d0: 63 4c 69 6e 65 3c 3d 32 20 26 26 20 41 4c 57 41  cLine<=2 && ALWA
13e0: 59 53 28 69 53 72 63 4c 69 6e 65 3e 30 29 20 29  YS(iSrcLine>0) )
13f0: 7b 0a 20 20 20 20 20 20 4d 20 3d 20 69 53 72 63  {.      M = iSrc
1400: 4c 69 6e 65 3b 0a 20 20 20 20 20 20 2f 2a 20 41  Line;.      /* A
1410: 73 73 65 72 74 20 74 68 65 20 74 72 75 74 68 20  ssert the truth 
1420: 6f 66 20 56 64 62 65 43 6f 76 65 72 61 67 65 41  of VdbeCoverageA
1430: 6c 77 61 79 73 54 61 6b 65 6e 28 29 20 61 6e 64  lwaysTaken() and
1440: 20 0a 20 20 20 20 20 20 2a 2a 20 56 64 62 65 43   .      ** VdbeC
1450: 6f 76 65 72 61 67 65 4e 65 76 65 72 54 61 6b 65  overageNeverTake
1460: 6e 28 29 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  n() */.      ass
1470: 65 72 74 28 20 28 4d 20 26 20 49 29 3d 3d 49 20  ert( (M & I)==I 
1480: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
1490: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47      if( sqlite3G
14a0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 56 64 62  lobalConfig.xVdb
14b0: 65 42 72 61 6e 63 68 3d 3d 30 20 29 20 72 65 74  eBranch==0 ) ret
14c0: 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54 45 53 54 2a  urn;  /*NO_TEST*
14d0: 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 47  /.      sqlite3G
14e0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 56 64 62  lobalConfig.xVdb
14f0: 65 42 72 61 6e 63 68 28 73 71 6c 69 74 65 33 47  eBranch(sqlite3G
1500: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70 56 64 62  lobalConfig.pVdb
1510: 65 42 72 61 6e 63 68 41 72 67 2c 0a 20 20 20 20  eBranchArg,.    
1520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1540: 20 20 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 3b    iSrcLine,I,M);
1550: 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69  .    }.  }.#endi
1560: 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74  f../*.** Convert
1570: 20 74 68 65 20 67 69 76 65 6e 20 72 65 67 69 73   the given regis
1580: 74 65 72 20 69 6e 74 6f 20 61 20 73 74 72 69 6e  ter into a strin
1590: 67 20 69 66 20 69 74 20 69 73 6e 27 74 20 6f 6e  g if it isn't on
15a0: 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e 20 52 65  e.** already. Re
15b0: 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  turn non-zero if
15c0: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c   a malloc() fail
15d0: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 74  s..*/.#define St
15e0: 72 69 6e 67 69 66 79 28 50 2c 20 65 6e 63 29 20  ringify(P, enc) 
15f0: 5c 0a 20 20 20 69 66 28 28 28 50 29 2d 3e 66 6c  \.   if(((P)->fl
1600: 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  ags&(MEM_Str|MEM
1610: 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26 20 73 71  _Blob))==0 && sq
1620: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69  lite3VdbeMemStri
1630: 6e 67 69 66 79 28 50 2c 65 6e 63 2c 30 29 29 20  ngify(P,enc,0)) 
1640: 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f 20 6e 6f  \.     { goto no
1650: 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20 41  _mem; }../*.** A
1660: 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69  n ephemeral stri
1670: 6e 67 20 76 61 6c 75 65 20 28 73 69 67 6e 69 66  ng value (signif
1680: 69 65 64 20 62 79 20 74 68 65 20 4d 45 4d 5f 45  ied by the MEM_E
1690: 70 68 65 6d 20 66 6c 61 67 29 20 63 6f 6e 74 61  phem flag) conta
16a0: 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72  ins.** a pointer
16b0: 20 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c   to a dynamicall
16c0: 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74 72 69  y allocated stri
16d0: 6e 67 20 77 68 65 72 65 20 73 6f 6d 65 20 6f 74  ng where some ot
16e0: 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a 20 69 73  her entity.** is
16f0: 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72   responsible for
1700: 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68   deallocating th
1710: 61 74 20 73 74 72 69 6e 67 2e 20 20 42 65 63 61  at string.  Beca
1720: 75 73 65 20 74 68 65 20 72 65 67 69 73 74 65 72  use the register
1730: 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e  .** does not con
1740: 74 72 6f 6c 20 74 68 65 20 73 74 72 69 6e 67 2c  trol the string,
1750: 20 69 74 20 6d 69 67 68 74 20 62 65 20 64 65 6c   it might be del
1760: 65 74 65 64 20 77 69 74 68 6f 75 74 20 74 68 65  eted without the
1770: 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6b 6e 6f   register.** kno
1780: 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54  wing it..**.** T
1790: 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e 76  his routine conv
17a0: 65 72 74 73 20 61 6e 20 65 70 68 65 6d 65 72 61  erts an ephemera
17b0: 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20  l string into a 
17c0: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
17d0: 63 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67 20  cated.** string 
17e0: 74 68 61 74 20 74 68 65 20 72 65 67 69 73 74 65  that the registe
17f0: 72 20 69 74 73 65 6c 66 20 63 6f 6e 74 72 6f 6c  r itself control
1800: 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  s.  In other wor
1810: 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76 65 72  ds, it.** conver
1820: 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65 6d 20  ts an MEM_Ephem 
1830: 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 73 74  string into a st
1840: 72 69 6e 67 20 77 69 74 68 20 50 2e 7a 3d 3d 50  ring with P.z==P
1850: 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a 23 64 65  .zMalloc..*/.#de
1860: 66 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61 6c  fine Deephemeral
1870: 69 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28 20  ize(P) \.   if( 
1880: 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  ((P)->flags&MEM_
1890: 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20  Ephem)!=0 \.    
18a0: 20 20 20 26 26 20 73 71 6c 69 74 65 33 56 64 62     && sqlite3Vdb
18b0: 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c  eMemMakeWriteabl
18c0: 65 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f  e(P) ){ goto no_
18d0: 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e  mem;}../* Return
18e0: 20 74 72 75 65 20 69 66 20 74 68 65 20 63 75 72   true if the cur
18f0: 73 6f 72 20 77 61 73 20 6f 70 65 6e 65 64 20 75  sor was opened u
1900: 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70 65 6e  sing the OP_Open
1910: 53 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e 20 2a  Sorter opcode. *
1920: 2f 0a 23 64 65 66 69 6e 65 20 69 73 53 6f 72 74  /.#define isSort
1930: 65 72 28 78 29 20 28 28 78 29 2d 3e 65 43 75 72  er(x) ((x)->eCur
1940: 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 53 4f  Type==CURTYPE_SO
1950: 52 54 45 52 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  RTER)../*.** All
1960: 6f 63 61 74 65 20 56 64 62 65 43 75 72 73 6f 72  ocate VdbeCursor
1970: 20 6e 75 6d 62 65 72 20 69 43 75 72 2e 20 20 52   number iCur.  R
1980: 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72 20  eturn a pointer 
1990: 74 6f 20 69 74 2e 20 20 52 65 74 75 72 6e 20 4e  to it.  Return N
19a0: 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20 72 75 6e  ULL.** if we run
19b0: 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a   out of memory..
19c0: 2a 2f 0a 73 74 61 74 69 63 20 56 64 62 65 43 75  */.static VdbeCu
19d0: 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43 75  rsor *allocateCu
19e0: 72 73 6f 72 28 0a 20 20 56 64 62 65 20 2a 70 2c  rsor(.  Vdbe *p,
19f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1a00: 20 54 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   The virtual mac
1a10: 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 69 43  hine */.  int iC
1a20: 75 72 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ur,             
1a30: 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65 20  /* Index of the 
1a40: 6e 65 77 20 56 64 62 65 43 75 72 73 6f 72 20 2a  new VdbeCursor *
1a50: 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 2c 20  /.  int nField, 
1a60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1a70: 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e  ber of fields in
1a80: 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
1a90: 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62  dex */.  int iDb
1aa0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
1ab0: 2a 20 44 61 74 61 62 61 73 65 20 74 68 65 20 63  * Database the c
1ac0: 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73 20 74 6f  ursor belongs to
1ad0: 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20 75 38 20  , or -1 */.  u8 
1ae0: 65 43 75 72 54 79 70 65 20 20 20 20 20 20 20 20  eCurType        
1af0: 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68     /* Type of th
1b00: 65 20 6e 65 77 20 63 75 72 73 6f 72 20 2a 2f 0a  e new cursor */.
1b10: 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65  ){.  /* Find the
1b20: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
1b30: 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74  t will be used t
1b40: 6f 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62  o store the blob
1b50: 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20   of memory.  ** 
1b60: 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69  required for thi
1b70: 73 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72  s VdbeCursor str
1b80: 75 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f  ucture. It is co
1b90: 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20  nvenient to use 
1ba0: 61 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d  a .  ** vdbe mem
1bb0: 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61  ory cell to mana
1bc0: 67 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c  ge the memory al
1bd0: 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65  location require
1be0: 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62  d for a.  ** Vdb
1bf0: 65 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72  eCursor structur
1c00: 65 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77  e for the follow
1c10: 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a  ing reasons:.  *
1c20: 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74  *.  **   * Somet
1c30: 69 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62  imes cursor numb
1c40: 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72  ers are used for
1c50: 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66   a couple of dif
1c60: 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20  ferent.  **     
1c70: 70 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64  purposes in a vd
1c80: 62 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20  be program. The 
1c90: 64 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d  different uses m
1ca0: 69 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a  ight require.  *
1cb0: 2a 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20  *     different 
1cc0: 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e  sized allocation
1cd0: 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  s. Memory cells 
1ce0: 70 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65  provide growable
1cf0: 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61  .  **     alloca
1d00: 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tions..  **.  **
1d10: 20 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20     * When using 
1d20: 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41  ENABLE_MEMORY_MA
1d30: 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79  NAGEMENT, memory
1d40: 20 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61   cell buffers ca
1d50: 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72  n.  **     be fr
1d60: 65 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74  eed lazily via t
1d70: 68 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61  he sqlite3_relea
1d80: 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e  se_memory() API.
1d90: 20 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d   This.  **     m
1da0: 69 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d  inimizes the num
1db0: 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61  ber of malloc ca
1dc0: 6c 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20  lls made by the 
1dd0: 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a  system..  **.  *
1de0: 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  * The memory cel
1df0: 6c 20 66 6f 72 20 63 75 72 73 6f 72 20 30 20 69  l for cursor 0 i
1e00: 73 20 61 4d 65 6d 5b 30 5d 2e 20 54 68 65 20 72  s aMem[0]. The r
1e10: 65 73 74 20 61 72 65 20 61 6c 6c 6f 63 61 74 65  est are allocate
1e20: 64 20 66 72 6f 6d 0a 20 20 2a 2a 20 74 68 65 20  d from.  ** the 
1e30: 74 6f 70 20 6f 66 20 74 68 65 20 72 65 67 69 73  top of the regis
1e40: 74 65 72 20 73 70 61 63 65 2e 20 20 43 75 72 73  ter space.  Curs
1e50: 6f 72 20 31 20 69 73 20 61 74 20 4d 65 6d 5b 70  or 1 is at Mem[p
1e60: 2d 3e 6e 4d 65 6d 2d 31 5d 2e 0a 20 20 2a 2a 20  ->nMem-1]..  ** 
1e70: 43 75 72 73 6f 72 20 32 20 69 73 20 61 74 20 4d  Cursor 2 is at M
1e80: 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 32 5d 2e 20 41  em[p->nMem-2]. A
1e90: 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a  nd so forth..  *
1ea0: 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20  /.  Mem *pMem = 
1eb0: 69 43 75 72 3e 30 20 3f 20 26 70 2d 3e 61 4d 65  iCur>0 ? &p->aMe
1ec0: 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 20  m[p->nMem-iCur] 
1ed0: 3a 20 70 2d 3e 61 4d 65 6d 3b 0a 0a 20 20 69 6e  : p->aMem;..  in
1ee0: 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65 43  t nByte;.  VdbeC
1ef0: 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b 0a  ursor *pCx = 0;.
1f00: 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20 20    nByte = .     
1f10: 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56   ROUND8(sizeof(V
1f20: 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32 2a  dbeCursor)) + 2*
1f30: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
1f40: 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 65 43 75  ld + .      (eCu
1f50: 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
1f60: 54 52 45 45 3f 73 71 6c 69 74 65 33 42 74 72 65  TREE?sqlite3Btre
1f70: 65 43 75 72 73 6f 72 53 69 7a 65 28 29 3a 30 29  eCursorSize():0)
1f80: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43 75  ;..  assert( iCu
1f90: 72 3e 3d 30 20 26 26 20 69 43 75 72 3c 70 2d 3e  r>=0 && iCur<p->
1fa0: 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28  nCursor );.  if(
1fb0: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20   p->apCsr[iCur] 
1fc0: 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f  ){ /*OPTIMIZATIO
1fd0: 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20  N-IF-FALSE*/.   
1fe0: 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65   sqlite3VdbeFree
1ff0: 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43  Cursor(p, p->apC
2000: 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20 70  sr[iCur]);.    p
2010: 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20  ->apCsr[iCur] = 
2020: 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51 4c  0;.  }.  if( SQL
2030: 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33 56  ITE_OK==sqlite3V
2040: 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65  dbeMemClearAndRe
2050: 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79 74 65  size(pMem, nByte
2060: 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70 43 73  ) ){.    p->apCs
2070: 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20 3d 20  r[iCur] = pCx = 
2080: 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70 4d 65  (VdbeCursor*)pMe
2090: 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73 65 74  m->z;.    memset
20a0: 28 70 43 78 2c 20 30 2c 20 6f 66 66 73 65 74 6f  (pCx, 0, offseto
20b0: 66 28 56 64 62 65 43 75 72 73 6f 72 2c 70 41 6c  f(VdbeCursor,pAl
20c0: 74 43 75 72 73 6f 72 29 29 3b 0a 20 20 20 20 70  tCursor));.    p
20d0: 43 78 2d 3e 65 43 75 72 54 79 70 65 20 3d 20 65  Cx->eCurType = e
20e0: 43 75 72 54 79 70 65 3b 0a 20 20 20 20 70 43 78  CurType;.    pCx
20f0: 2d 3e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20  ->iDb = iDb;.   
2100: 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e   pCx->nField = n
2110: 46 69 65 6c 64 3b 0a 20 20 20 20 70 43 78 2d 3e  Field;.    pCx->
2120: 61 4f 66 66 73 65 74 20 3d 20 26 70 43 78 2d 3e  aOffset = &pCx->
2130: 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d 3b 0a 20  aType[nField];. 
2140: 20 20 20 69 66 28 20 65 43 75 72 54 79 70 65 3d     if( eCurType=
2150: 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
2160: 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e 75 63 2e  {.      pCx->uc.
2170: 70 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75 72  pCursor = (BtCur
2180: 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20 20  sor*).          
2190: 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38 28  &pMem->z[ROUND8(
21a0: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
21b0: 72 29 29 2b 32 2a 73 69 7a 65 6f 66 28 75 33 32  r))+2*sizeof(u32
21c0: 29 2a 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20 20  )*nField];.     
21d0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
21e0: 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 75 63 2e  sorZero(pCx->uc.
21f0: 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a  pCursor);.    }.
2200: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 43 78    }.  return pCx
2210: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74  ;.}../*.** Try t
2220: 6f 20 63 6f 6e 76 65 72 74 20 61 20 76 61 6c 75  o convert a valu
2230: 65 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63  e into a numeric
2240: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2250: 69 66 20 77 65 20 63 61 6e 0a 2a 2a 20 64 6f 20  if we can.** do 
2260: 73 6f 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20  so without loss 
2270: 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20  of information. 
2280: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
2290: 20 69 66 20 74 68 65 20 73 74 72 69 6e 67 0a 2a   if the string.*
22a0: 2a 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61 20 6e  * looks like a n
22b0: 75 6d 62 65 72 2c 20 63 6f 6e 76 65 72 74 20 69  umber, convert i
22c0: 74 20 69 6e 74 6f 20 61 20 6e 75 6d 62 65 72 2e  t into a number.
22d0: 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74    If it does not
22e0: 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20  .** look like a 
22f0: 6e 75 6d 62 65 72 2c 20 6c 65 61 76 65 20 69 74  number, leave it
2300: 20 61 6c 6f 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66   alone..**.** If
2310: 20 74 68 65 20 62 54 72 79 46 6f 72 49 6e 74 20   the bTryForInt 
2320: 66 6c 61 67 20 69 73 20 74 72 75 65 2c 20 74 68  flag is true, th
2330: 65 6e 20 65 78 74 72 61 20 65 66 66 6f 72 74 20  en extra effort 
2340: 69 73 20 6d 61 64 65 20 74 6f 20 67 69 76 65 0a  is made to give.
2350: 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  ** an integer re
2360: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20 53  presentation.  S
2370: 74 72 69 6e 67 73 20 74 68 61 74 20 6c 6f 6f 6b  trings that look
2380: 20 6c 69 6b 65 20 66 6c 6f 61 74 69 6e 67 20 70   like floating p
2390: 6f 69 6e 74 0a 2a 2a 20 76 61 6c 75 65 73 20 62  oint.** values b
23a0: 75 74 20 77 68 69 63 68 20 68 61 76 65 20 6e 6f  ut which have no
23b0: 20 66 72 61 63 74 69 6f 6e 61 6c 20 63 6f 6d 70   fractional comp
23c0: 6f 6e 65 6e 74 20 28 65 78 61 6d 70 6c 65 3a 20  onent (example: 
23d0: 27 34 38 2e 30 30 27 29 0a 2a 2a 20 77 69 6c 6c  '48.00').** will
23e0: 20 68 61 76 65 20 61 20 4d 45 4d 5f 49 6e 74 20   have a MEM_Int 
23f0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 77  representation w
2400: 68 65 6e 20 62 54 72 79 46 6f 72 49 6e 74 20 69  hen bTryForInt i
2410: 73 20 74 72 75 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  s true..**.** If
2420: 20 62 54 72 79 46 6f 72 49 6e 74 20 69 73 20 66   bTryForInt is f
2430: 61 6c 73 65 2c 20 74 68 65 6e 20 69 66 20 74 68  alse, then if th
2440: 65 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20 63  e input string c
2450: 6f 6e 74 61 69 6e 73 20 61 20 64 65 63 69 6d 61  ontains a decima
2460: 6c 0a 2a 2a 20 70 6f 69 6e 74 20 6f 72 20 65 78  l.** point or ex
2470: 70 6f 6e 65 6e 74 69 61 6c 20 6e 6f 74 61 74 69  ponential notati
2480: 6f 6e 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  on, the result i
2490: 73 20 6f 6e 6c 79 20 4d 45 4d 5f 52 65 61 6c 2c  s only MEM_Real,
24a0: 20 65 76 65 6e 0a 2a 2a 20 69 66 20 74 68 65 72   even.** if ther
24b0: 65 20 69 73 20 61 6e 20 65 78 61 63 74 20 69 6e  e is an exact in
24c0: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
24d0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 71 75 61 6e  tion of the quan
24e0: 74 69 74 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  tity..*/.static 
24f0: 76 6f 69 64 20 61 70 70 6c 79 4e 75 6d 65 72 69  void applyNumeri
2500: 63 41 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70  cAffinity(Mem *p
2510: 52 65 63 2c 20 69 6e 74 20 62 54 72 79 46 6f 72  Rec, int bTryFor
2520: 49 6e 74 29 7b 0a 20 20 64 6f 75 62 6c 65 20 72  Int){.  double r
2530: 56 61 6c 75 65 3b 0a 20 20 69 36 34 20 69 56 61  Value;.  i64 iVa
2540: 6c 75 65 3b 0a 20 20 75 38 20 65 6e 63 20 3d 20  lue;.  u8 enc = 
2550: 70 52 65 63 2d 3e 65 6e 63 3b 0a 20 20 61 73 73  pRec->enc;.  ass
2560: 65 72 74 28 20 28 70 52 65 63 2d 3e 66 6c 61 67  ert( (pRec->flag
2570: 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
2580: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d  _Int|MEM_Real))=
2590: 3d 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 69 66  =MEM_Str );.  if
25a0: 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 52  ( sqlite3AtoF(pR
25b0: 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c 20  ec->z, &rValue, 
25c0: 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d 30  pRec->n, enc)==0
25d0: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28   ) return;.  if(
25e0: 20 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f 69 36   0==sqlite3Atoi6
25f0: 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69 56 61 6c  4(pRec->z, &iVal
2600: 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63  ue, pRec->n, enc
2610: 29 20 29 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75  ) ){.    pRec->u
2620: 2e 69 20 3d 20 69 56 61 6c 75 65 3b 0a 20 20 20  .i = iValue;.   
2630: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20   pRec->flags |= 
2640: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 65 6c 73 65  MEM_Int;.  }else
2650: 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75 2e 72 20  {.    pRec->u.r 
2660: 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20 20 70 52  = rValue;.    pR
2670: 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ec->flags |= MEM
2680: 5f 52 65 61 6c 3b 0a 20 20 20 20 69 66 28 20 62  _Real;.    if( b
2690: 54 72 79 46 6f 72 49 6e 74 20 29 20 73 71 6c 69  TryForInt ) sqli
26a0: 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66  te3VdbeIntegerAf
26b0: 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20  finity(pRec);.  
26c0: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65  }.}../*.** Proce
26d0: 73 73 69 6e 67 20 69 73 20 64 65 74 65 72 6d 69  ssing is determi
26e0: 6e 65 20 62 79 20 74 68 65 20 61 66 66 69 6e 69  ne by the affini
26f0: 74 79 20 70 61 72 61 6d 65 74 65 72 3a 0a 2a 2a  ty parameter:.**
2700: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  .** SQLITE_AFF_I
2710: 4e 54 45 47 45 52 3a 0a 2a 2a 20 53 51 4c 49 54  NTEGER:.** SQLIT
2720: 45 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a 2a 20 53  E_AFF_REAL:.** S
2730: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
2740: 43 3a 0a 2a 2a 20 20 20 20 54 72 79 20 74 6f 20  C:.**    Try to 
2750: 63 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20  convert pRec to 
2760: 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65  an integer repre
2770: 73 65 6e 74 61 74 69 6f 6e 20 6f 72 20 61 20 0a  sentation or a .
2780: 2a 2a 20 20 20 20 66 6c 6f 61 74 69 6e 67 2d 70  **    floating-p
2790: 6f 69 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74  oint representat
27a0: 69 6f 6e 20 69 66 20 61 6e 20 69 6e 74 65 67 65  ion if an intege
27b0: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
27c0: 0a 2a 2a 20 20 20 20 69 73 20 6e 6f 74 20 70 6f  .**    is not po
27d0: 73 73 69 62 6c 65 2e 20 20 4e 6f 74 65 20 74 68  ssible.  Note th
27e0: 61 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 72  at the integer r
27f0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73  epresentation is
2800: 0a 2a 2a 20 20 20 20 61 6c 77 61 79 73 20 70 72  .**    always pr
2810: 65 66 65 72 72 65 64 2c 20 65 76 65 6e 20 69 66  eferred, even if
2820: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 69 73   the affinity is
2830: 20 52 45 41 4c 2c 20 62 65 63 61 75 73 65 0a 2a   REAL, because.*
2840: 2a 20 20 20 20 61 6e 20 69 6e 74 65 67 65 72 20  *    an integer 
2850: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69  representation i
2860: 73 20 6d 6f 72 65 20 73 70 61 63 65 20 65 66 66  s more space eff
2870: 69 63 69 65 6e 74 20 6f 6e 20 64 69 73 6b 2e 0a  icient on disk..
2880: 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  **.** SQLITE_AFF
2890: 5f 54 45 58 54 3a 0a 2a 2a 20 20 20 20 43 6f 6e  _TEXT:.**    Con
28a0: 76 65 72 74 20 70 52 65 63 20 74 6f 20 61 20 74  vert pRec to a t
28b0: 65 78 74 20 72 65 70 72 65 73 65 6e 74 61 74 69  ext representati
28c0: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45  on..**.** SQLITE
28d0: 5f 41 46 46 5f 42 4c 4f 42 3a 0a 2a 2a 20 20 20  _AFF_BLOB:.**   
28e0: 20 4e 6f 2d 6f 70 2e 20 20 70 52 65 63 20 69 73   No-op.  pRec is
28f0: 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 73   unchanged..*/.s
2900: 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79  tatic void apply
2910: 41 66 66 69 6e 69 74 79 28 0a 20 20 4d 65 6d 20  Affinity(.  Mem 
2920: 2a 70 52 65 63 2c 20 20 20 20 20 20 20 20 20 20  *pRec,          
2930: 2f 2a 20 54 68 65 20 76 61 6c 75 65 20 74 6f 20  /* The value to 
2940: 61 70 70 6c 79 20 61 66 66 69 6e 69 74 79 20 74  apply affinity t
2950: 6f 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  o */.  char affi
2960: 6e 69 74 79 2c 20 20 20 20 20 20 2f 2a 20 54 68  nity,      /* Th
2970: 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65  e affinity to be
2980: 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 75 38   applied */.  u8
2990: 20 65 6e 63 20 20 20 20 20 20 20 20 20 20 20 20   enc            
29a0: 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 74 65    /* Use this te
29b0: 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 29  xt encoding */.)
29c0: 7b 0a 20 20 69 66 28 20 61 66 66 69 6e 69 74 79  {.  if( affinity
29d0: 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  >=SQLITE_AFF_NUM
29e0: 45 52 49 43 20 29 7b 0a 20 20 20 20 61 73 73 65  ERIC ){.    asse
29f0: 72 74 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51  rt( affinity==SQ
2a00: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
2a10: 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51   || affinity==SQ
2a20: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 0a 20 20  LITE_AFF_REAL.  
2a30: 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 61 66             || af
2a40: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2a50: 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20  FF_NUMERIC );.  
2a60: 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61    if( (pRec->fla
2a70: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
2a80: 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49   ){ /*OPTIMIZATI
2a90: 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20  ON-IF-FALSE*/.  
2aa0: 20 20 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66      if( (pRec->f
2ab0: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29  lags & MEM_Real)
2ac0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69  ==0 ){.        i
2ad0: 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  f( pRec->flags &
2ae0: 20 4d 45 4d 5f 53 74 72 20 29 20 61 70 70 6c 79   MEM_Str ) apply
2af0: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
2b00: 70 52 65 63 2c 31 29 3b 0a 20 20 20 20 20 20 7d  pRec,1);.      }
2b10: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
2b20: 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72  lite3VdbeInteger
2b30: 41 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a  Affinity(pRec);.
2b40: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
2b50: 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e 69  }else if( affini
2b60: 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54  ty==SQLITE_AFF_T
2b70: 45 58 54 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e  EXT ){.    /* On
2b80: 6c 79 20 61 74 74 65 6d 70 74 20 74 68 65 20 63  ly attempt the c
2b90: 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20 54 45 58  onversion to TEX
2ba0: 54 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e  T if there is an
2bb0: 20 69 6e 74 65 67 65 72 20 6f 72 20 72 65 61 6c   integer or real
2bc0: 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e  .    ** represen
2bd0: 74 61 74 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64  tation (blob and
2be0: 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74   NULL do not get
2bf0: 20 63 6f 6e 76 65 72 74 65 64 29 20 62 75 74 20   converted) but 
2c00: 6e 6f 20 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a  no string.    **
2c10: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e   representation.
2c20: 20 20 49 74 20 77 6f 75 6c 64 20 62 65 20 68 61    It would be ha
2c30: 72 6d 6c 65 73 73 20 74 6f 20 72 65 70 65 61 74  rmless to repeat
2c40: 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20   the conversion 
2c50: 69 66 20 0a 20 20 20 20 2a 2a 20 74 68 65 72 65  if .    ** there
2c60: 20 69 73 20 61 6c 72 65 61 64 79 20 61 20 73 74   is already a st
2c70: 72 69 6e 67 20 72 65 70 2c 20 62 75 74 20 69 74  ring rep, but it
2c80: 20 69 73 20 70 6f 69 6e 74 6c 65 73 73 20 74 6f   is pointless to
2c90: 20 77 61 73 74 65 20 74 68 6f 73 65 0a 20 20 20   waste those.   
2ca0: 20 2a 2a 20 43 50 55 20 63 79 63 6c 65 73 2e 20   ** CPU cycles. 
2cb0: 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d 28 70  */.    if( 0==(p
2cc0: 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53  Rec->flags&MEM_S
2cd0: 74 72 29 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a  tr) ){ /*OPTIMIZ
2ce0: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f  ATION-IF-FALSE*/
2cf0: 0a 20 20 20 20 20 20 69 66 28 20 28 70 52 65 63  .      if( (pRec
2d00: 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61  ->flags&(MEM_Rea
2d10: 6c 7c 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20  l|MEM_Int)) ){. 
2d20: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
2d30: 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70  beMemStringify(p
2d40: 52 65 63 2c 20 65 6e 63 2c 20 31 29 3b 0a 20 20  Rec, enc, 1);.  
2d50: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
2d60: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pRec->flags &= ~
2d70: 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e  (MEM_Real|MEM_In
2d80: 74 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a  t);.  }.}../*.**
2d90: 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   Try to convert 
2da0: 74 68 65 20 74 79 70 65 20 6f 66 20 61 20 66 75  the type of a fu
2db0: 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20  nction argument 
2dc0: 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75  or a result colu
2dd0: 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e 75 6d  mn.** into a num
2de0: 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74  eric representat
2df0: 69 6f 6e 2e 20 20 55 73 65 20 65 69 74 68 65 72  ion.  Use either
2e00: 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c   INTEGER or REAL
2e10: 20 77 68 69 63 68 65 76 65 72 0a 2a 2a 20 69 73   whichever.** is
2e20: 20 61 70 70 72 6f 70 72 69 61 74 65 2e 20 20 42   appropriate.  B
2e30: 75 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65 20 63  ut only do the c
2e40: 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 69 74 20  onversion if it 
2e50: 69 73 20 70 6f 73 73 69 62 6c 65 20 77 69 74 68  is possible with
2e60: 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20 69  out.** loss of i
2e70: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 72  nformation and r
2e80: 65 74 75 72 6e 20 74 68 65 20 72 65 76 69 73 65  eturn the revise
2e90: 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 61 72  d type of the ar
2ea0: 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73  gument..*/.int s
2eb0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e 75 6d  qlite3_value_num
2ec0: 65 72 69 63 5f 74 79 70 65 28 73 71 6c 69 74 65  eric_type(sqlite
2ed0: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a  3_value *pVal){.
2ee0: 20 20 69 6e 74 20 65 54 79 70 65 20 3d 20 73 71    int eType = sq
2ef0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65  lite3_value_type
2f00: 28 70 56 61 6c 29 3b 0a 20 20 69 66 28 20 65 54  (pVal);.  if( eT
2f10: 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45 58 54  ype==SQLITE_TEXT
2f20: 20 29 7b 0a 20 20 20 20 4d 65 6d 20 2a 70 4d 65   ){.    Mem *pMe
2f30: 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a  m = (Mem*)pVal;.
2f40: 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
2f50: 41 66 66 69 6e 69 74 79 28 70 4d 65 6d 2c 20 30  Affinity(pMem, 0
2f60: 29 3b 0a 20 20 20 20 65 54 79 70 65 20 3d 20 73  );.    eType = s
2f70: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70  qlite3_value_typ
2f80: 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 20 20 72  e(pVal);.  }.  r
2f90: 65 74 75 72 6e 20 65 54 79 70 65 3b 0a 7d 0a 0a  eturn eType;.}..
2fa0: 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20 76  /*.** Exported v
2fb0: 65 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79 41  ersion of applyA
2fc0: 66 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73 20  ffinity(). This 
2fd0: 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71 6c  one works on sql
2fe0: 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a  ite3_value*, .**
2ff0: 20 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e 61   not the interna
3000: 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a  l Mem* type..*/.
3010: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
3020: 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a  eApplyAffinity(.
3030: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
3040: 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66 66  *pVal, .  u8 aff
3050: 69 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e 63  inity, .  u8 enc
3060: 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e  .){.  applyAffin
3070: 69 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c 2c  ity((Mem *)pVal,
3080: 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29 3b   affinity, enc);
3090: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70 4d 65 6d 20 63  .}../*.** pMem c
30a0: 75 72 72 65 6e 74 6c 79 20 6f 6e 6c 79 20 68 6f  urrently only ho
30b0: 6c 64 73 20 61 20 73 74 72 69 6e 67 20 74 79 70  lds a string typ
30c0: 65 20 28 6f 72 20 6d 61 79 62 65 20 61 20 42 4c  e (or maybe a BL
30d0: 4f 42 20 74 68 61 74 20 77 65 20 63 61 6e 0a 2a  OB that we can.*
30e0: 2a 20 69 6e 74 65 72 70 72 65 74 20 61 73 20 61  * interpret as a
30f0: 20 73 74 72 69 6e 67 20 69 66 20 77 65 20 77 61   string if we wa
3100: 6e 74 20 74 6f 29 2e 20 20 43 6f 6d 70 75 74 65  nt to).  Compute
3110: 20 69 74 73 20 63 6f 72 72 65 73 70 6f 6e 64 69   its correspondi
3120: 6e 67 0a 2a 2a 20 6e 75 6d 65 72 69 63 20 74 79  ng.** numeric ty
3130: 70 65 2c 20 69 66 20 68 61 73 20 6f 6e 65 2e 20  pe, if has one. 
3140: 20 53 65 74 20 74 68 65 20 70 4d 65 6d 2d 3e 75   Set the pMem->u
3150: 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69  .r and pMem->u.i
3160: 20 66 69 65 6c 64 73 0a 2a 2a 20 61 63 63 6f 72   fields.** accor
3170: 64 69 6e 67 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69  dingly..*/.stati
3180: 63 20 75 31 36 20 53 51 4c 49 54 45 5f 4e 4f 49  c u16 SQLITE_NOI
3190: 4e 4c 49 4e 45 20 63 6f 6d 70 75 74 65 4e 75 6d  NLINE computeNum
31a0: 65 72 69 63 54 79 70 65 28 4d 65 6d 20 2a 70 4d  ericType(Mem *pM
31b0: 65 6d 29 7b 0a 20 20 61 73 73 65 72 74 28 20 28  em){.  assert( (
31c0: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
31d0: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
31e0: 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )==0 );.  assert
31f0: 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
3200: 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
3210: 6f 62 29 29 21 3d 30 20 29 3b 0a 20 20 69 66 28  ob))!=0 );.  if(
3220: 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 4d 65   sqlite3AtoF(pMe
3230: 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e 72  m->z, &pMem->u.r
3240: 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d  , pMem->n, pMem-
3250: 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a 20 20 20 20  >enc)==0 ){.    
3260: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20  return 0;.  }.  
3270: 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 69 36  if( sqlite3Atoi6
3280: 34 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d  4(pMem->z, &pMem
3290: 2d 3e 75 2e 69 2c 20 70 4d 65 6d 2d 3e 6e 2c 20  ->u.i, pMem->n, 
32a0: 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 30 20 29 7b  pMem->enc)==0 ){
32b0: 0a 20 20 20 20 72 65 74 75 72 6e 20 4d 45 4d 5f  .    return MEM_
32c0: 49 6e 74 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  Int;.  }.  retur
32d0: 6e 20 4d 45 4d 5f 52 65 61 6c 3b 0a 7d 0a 0a 2f  n MEM_Real;.}../
32e0: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
32f0: 6e 75 6d 65 72 69 63 20 74 79 70 65 20 66 6f 72  numeric type for
3300: 20 70 4d 65 6d 2c 20 65 69 74 68 65 72 20 4d 45   pMem, either ME
3310: 4d 5f 49 6e 74 20 6f 72 20 4d 45 4d 5f 52 65 61  M_Int or MEM_Rea
3320: 6c 20 6f 72 20 62 6f 74 68 20 6f 72 0a 2a 2a 20  l or both or.** 
3330: 6e 6f 6e 65 2e 20 20 0a 2a 2a 0a 2a 2a 20 55 6e  none.  .**.** Un
3340: 6c 69 6b 65 20 61 70 70 6c 79 4e 75 6d 65 72 69  like applyNumeri
3350: 63 41 66 66 69 6e 69 74 79 28 29 2c 20 74 68 69  cAffinity(), thi
3360: 73 20 72 6f 75 74 69 6e 65 20 64 6f 65 73 20 6e  s routine does n
3370: 6f 74 20 6d 6f 64 69 66 79 20 70 4d 65 6d 2d 3e  ot modify pMem->
3380: 66 6c 61 67 73 2e 0a 2a 2a 20 42 75 74 20 69 74  flags..** But it
3390: 20 64 6f 65 73 20 73 65 74 20 70 4d 65 6d 2d 3e   does set pMem->
33a0: 75 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e  u.r and pMem->u.
33b0: 69 20 61 70 70 72 6f 70 72 69 61 74 65 6c 79 2e  i appropriately.
33c0: 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31 36 20 6e  .*/.static u16 n
33d0: 75 6d 65 72 69 63 54 79 70 65 28 4d 65 6d 20 2a  umericType(Mem *
33e0: 70 4d 65 6d 29 7b 0a 20 20 69 66 28 20 70 4d 65  pMem){.  if( pMe
33f0: 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  m->flags & (MEM_
3400: 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 20 29 7b  Int|MEM_Real) ){
3410: 0a 20 20 20 20 72 65 74 75 72 6e 20 70 4d 65 6d  .    return pMem
3420: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
3430: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20  nt|MEM_Real);.  
3440: 7d 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c  }.  if( pMem->fl
3450: 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
3460: 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a 20 20 20 20  EM_Blob) ){.    
3470: 72 65 74 75 72 6e 20 63 6f 6d 70 75 74 65 4e 75  return computeNu
3480: 6d 65 72 69 63 54 79 70 65 28 70 4d 65 6d 29 3b  mericType(pMem);
3490: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b  .  }.  return 0;
34a0: 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .}..#ifdef SQLIT
34b0: 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 57 72  E_DEBUG./*.** Wr
34c0: 69 74 65 20 61 20 6e 69 63 65 20 73 74 72 69 6e  ite a nice strin
34d0: 67 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  g representation
34e0: 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 73   of the contents
34f0: 20 6f 66 20 63 65 6c 6c 20 70 4d 65 6d 0a 2a 2a   of cell pMem.**
3500: 20 69 6e 74 6f 20 62 75 66 66 65 72 20 7a 42 75   into buffer zBu
3510: 66 2c 20 6c 65 6e 67 74 68 20 6e 42 75 66 2e 0a  f, length nBuf..
3520: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  */.void sqlite3V
3530: 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e  dbeMemPrettyPrin
3540: 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63 68 61  t(Mem *pMem, cha
3550: 72 20 2a 7a 42 75 66 29 7b 0a 20 20 63 68 61 72  r *zBuf){.  char
3560: 20 2a 7a 43 73 72 20 3d 20 7a 42 75 66 3b 0a 20   *zCsr = zBuf;. 
3570: 20 69 6e 74 20 66 20 3d 20 70 4d 65 6d 2d 3e 66   int f = pMem->f
3580: 6c 61 67 73 3b 0a 0a 20 20 73 74 61 74 69 63 20  lags;..  static 
3590: 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73  const char *cons
35a0: 74 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b  t encnames[] = {
35b0: 22 28 58 29 22 2c 20 22 28 38 29 22 2c 20 22 28  "(X)", "(8)", "(
35c0: 31 36 4c 45 29 22 2c 20 22 28 31 36 42 45 29 22  16LE)", "(16BE)"
35d0: 7d 3b 0a 0a 20 20 69 66 28 20 66 26 4d 45 4d 5f  };..  if( f&MEM_
35e0: 42 6c 6f 62 20 29 7b 0a 20 20 20 20 69 6e 74 20  Blob ){.    int 
35f0: 69 3b 0a 20 20 20 20 63 68 61 72 20 63 3b 0a 20  i;.    char c;. 
3600: 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44     if( f & MEM_D
3610: 79 6e 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  yn ){.      c = 
3620: 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'z';.      asser
3630: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
3640: 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  tic|MEM_Ephem))=
3650: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
3660: 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74  if( f & MEM_Stat
3670: 69 63 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  ic ){.      c = 
3680: 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  't';.      asser
3690: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e  t( (f & (MEM_Dyn
36a0: 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20  |MEM_Ephem))==0 
36b0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
36c0: 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29   f & MEM_Ephem )
36d0: 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 65 27 3b  {.      c = 'e';
36e0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
36f0: 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c  f & (MEM_Static|
3700: 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a  MEM_Dyn))==0 );.
3710: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
3720: 20 63 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a   c = 's';.    }.
3730: 20 20 20 20 2a 28 7a 43 73 72 2b 2b 29 20 3d 20      *(zCsr++) = 
3740: 63 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  c;.    sqlite3_s
3750: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3760: 72 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e  r, "%d[", pMem->
3770: 6e 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20  n);.    zCsr += 
3780: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3790: 7a 43 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69  zCsr);.    for(i
37a0: 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d  =0; i<16 && i<pM
37b0: 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20  em->n; i++){.   
37c0: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
37d0: 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22  ntf(100, zCsr, "
37e0: 25 30 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65  %02X", ((int)pMe
37f0: 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29  m->z[i] & 0xFF))
3800: 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20  ;.      zCsr += 
3810: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3820: 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20  zCsr);.    }.   
3830: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26   for(i=0; i<16 &
3840: 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b  & i<pMem->n; i++
3850: 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20  ){.      char z 
3860: 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20  = pMem->z[i];.  
3870: 20 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20      if( z<32 || 
3880: 7a 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20  z>126 ) *zCsr++ 
3890: 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73  = '.';.      els
38a0: 65 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20  e *zCsr++ = z;. 
38b0: 20 20 20 7d 0a 20 20 20 20 2a 28 7a 43 73 72 2b     }.    *(zCsr+
38c0: 2b 29 20 3d 20 27 5d 27 3b 0a 20 20 20 20 69 66  +) = ']';.    if
38d0: 28 20 66 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29  ( f & MEM_Zero )
38e0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
38f0: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
3900: 73 72 2c 22 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e  sr,"+%dz",pMem->
3910: 75 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20  u.nZero);.      
3920: 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53  zCsr += sqlite3S
3930: 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20  trlen30(zCsr);. 
3940: 20 20 20 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d     }.    *zCsr =
3950: 20 27 5c 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69   '\0';.  }else i
3960: 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 72 20 29  f( f & MEM_Str )
3970: 7b 0a 20 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a  {.    int j, k;.
3980: 20 20 20 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20      zBuf[0] = ' 
3990: 27 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  ';.    if( f & M
39a0: 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20  EM_Dyn ){.      
39b0: 7a 42 75 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20  zBuf[1] = 'z';. 
39c0: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20       assert( (f 
39d0: 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  & (MEM_Static|ME
39e0: 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a  M_Ephem))==0 );.
39f0: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20      }else if( f 
3a00: 26 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a  & MEM_Static ){.
3a10: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
3a20: 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  't';.      asser
3a30: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e  t( (f & (MEM_Dyn
3a40: 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20  |MEM_Ephem))==0 
3a50: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
3a60: 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29   f & MEM_Ephem )
3a70: 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20  {.      zBuf[1] 
3a80: 3d 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73  = 'e';.      ass
3a90: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53  ert( (f & (MEM_S
3aa0: 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d  tatic|MEM_Dyn))=
3ab0: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =0 );.    }else{
3ac0: 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d  .      zBuf[1] =
3ad0: 20 27 73 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20   's';.    }.    
3ae0: 6b 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74  k = 2;.    sqlit
3af0: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
3b00: 20 26 7a 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c   &zBuf[k], "%d",
3b10: 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b   pMem->n);.    k
3b20: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
3b30: 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20  n30(&zBuf[k]);. 
3b40: 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27     zBuf[k++] = '
3b50: 5b 27 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b  [';.    for(j=0;
3b60: 20 6a 3c 31 35 20 26 26 20 6a 3c 70 4d 65 6d 2d   j<15 && j<pMem-
3b70: 3e 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  >n; j++){.      
3b80: 75 38 20 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a  u8 c = pMem->z[j
3b90: 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3e 3d  ];.      if( c>=
3ba0: 30 78 32 30 20 26 26 20 63 3c 30 78 37 66 20 29  0x20 && c<0x7f )
3bb0: 7b 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b  {.        zBuf[k
3bc0: 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d  ++] = c;.      }
3bd0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 42  else{.        zB
3be0: 75 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20  uf[k++] = '.';. 
3bf0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
3c00: 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27   zBuf[k++] = ']'
3c10: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
3c20: 70 72 69 6e 74 66 28 31 30 30 2c 26 7a 42 75 66  printf(100,&zBuf
3c30: 5b 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d  [k], encnames[pM
3c40: 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 6b  em->enc]);.    k
3c50: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
3c60: 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20  n30(&zBuf[k]);. 
3c70: 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30     zBuf[k++] = 0
3c80: 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a  ;.  }.}.#endif..
3c90: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
3ca0: 42 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20  BUG./*.** Print 
3cb0: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20 72  the value of a r
3cc0: 65 67 69 73 74 65 72 20 66 6f 72 20 74 72 61 63  egister for trac
3cd0: 69 6e 67 20 70 75 72 70 6f 73 65 73 3a 0a 2a 2f  ing purposes:.*/
3ce0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6d 65 6d  .static void mem
3cf0: 54 72 61 63 65 50 72 69 6e 74 28 4d 65 6d 20 2a  TracePrint(Mem *
3d00: 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61  p){.  if( p->fla
3d10: 67 73 20 26 20 4d 45 4d 5f 55 6e 64 65 66 69 6e  gs & MEM_Undefin
3d20: 65 64 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66  ed ){.    printf
3d30: 28 22 20 75 6e 64 65 66 69 6e 65 64 22 29 3b 0a  (" undefined");.
3d40: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66    }else if( p->f
3d50: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
3d60: 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20  ){.    printf(" 
3d70: 4e 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c 73 65 20  NULL");.  }else 
3d80: 69 66 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20  if( (p->flags & 
3d90: 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72  (MEM_Int|MEM_Str
3da0: 29 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  ))==(MEM_Int|MEM
3db0: 5f 53 74 72 29 20 29 7b 0a 20 20 20 20 70 72 69  _Str) ){.    pri
3dc0: 6e 74 66 28 22 20 73 69 3a 25 6c 6c 64 22 2c 20  ntf(" si:%lld", 
3dd0: 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c 73 65  p->u.i);.  }else
3de0: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3df0: 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 70  MEM_Int ){.    p
3e00: 72 69 6e 74 66 28 22 20 69 3a 25 6c 6c 64 22 2c  rintf(" i:%lld",
3e10: 20 70 2d 3e 75 2e 69 29 3b 0a 23 69 66 6e 64 65   p->u.i);.#ifnde
3e20: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
3e30: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 7d  OATING_POINT.  }
3e40: 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67  else if( p->flag
3e50: 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a  s & MEM_Real ){.
3e60: 20 20 20 20 70 72 69 6e 74 66 28 22 20 72 3a 25      printf(" r:%
3e70: 67 22 2c 20 70 2d 3e 75 2e 72 29 3b 0a 23 65 6e  g", p->u.r);.#en
3e80: 64 69 66 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  dif.  }else if( 
3e90: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  p->flags & MEM_R
3ea0: 6f 77 53 65 74 20 29 7b 0a 20 20 20 20 70 72 69  owSet ){.    pri
3eb0: 6e 74 66 28 22 20 28 72 6f 77 73 65 74 29 22 29  ntf(" (rowset)")
3ec0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63  ;.  }else{.    c
3ed0: 68 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b 0a 20  har zBuf[200];. 
3ee0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
3ef0: 6d 50 72 65 74 74 79 50 72 69 6e 74 28 70 2c 20  mPrettyPrint(p, 
3f00: 7a 42 75 66 29 3b 0a 20 20 20 20 70 72 69 6e 74  zBuf);.    print
3f10: 66 28 22 20 25 73 22 2c 20 7a 42 75 66 29 3b 0a  f(" %s", zBuf);.
3f20: 20 20 7d 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61    }.  if( p->fla
3f30: 67 73 20 26 20 4d 45 4d 5f 53 75 62 74 79 70 65  gs & MEM_Subtype
3f40: 20 29 20 70 72 69 6e 74 66 28 22 20 73 75 62 74   ) printf(" subt
3f50: 79 70 65 3d 30 78 25 30 32 78 22 2c 20 70 2d 3e  ype=0x%02x", p->
3f60: 65 53 75 62 74 79 70 65 29 3b 0a 7d 0a 73 74 61  eSubtype);.}.sta
3f70: 74 69 63 20 76 6f 69 64 20 72 65 67 69 73 74 65  tic void registe
3f80: 72 54 72 61 63 65 28 69 6e 74 20 69 52 65 67 2c  rTrace(int iReg,
3f90: 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 70 72 69 6e   Mem *p){.  prin
3fa0: 74 66 28 22 52 45 47 5b 25 64 5d 20 3d 20 22 2c  tf("REG[%d] = ",
3fb0: 20 69 52 65 67 29 3b 0a 20 20 6d 65 6d 54 72 61   iReg);.  memTra
3fc0: 63 65 50 72 69 6e 74 28 70 29 3b 0a 20 20 70 72  cePrint(p);.  pr
3fd0: 69 6e 74 66 28 22 5c 6e 22 29 3b 0a 20 20 73 71  intf("\n");.  sq
3fe0: 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65  lite3VdbeCheckMe
3ff0: 6d 49 6e 76 61 72 69 61 6e 74 73 28 70 29 3b 0a  mInvariants(p);.
4000: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  }.#endif..#ifdef
4010: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20   SQLITE_DEBUG.# 
4020: 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52   define REGISTER
4030: 5f 54 52 41 43 45 28 52 2c 4d 29 20 69 66 28 64  _TRACE(R,M) if(d
4040: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
4050: 56 64 62 65 54 72 61 63 65 29 72 65 67 69 73 74  VdbeTrace)regist
4060: 65 72 54 72 61 63 65 28 52 2c 4d 29 0a 23 65 6c  erTrace(R,M).#el
4070: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47  se.#  define REG
4080: 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29  ISTER_TRACE(R,M)
4090: 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65 66  .#endif...#ifdef
40a0: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f   VDBE_PROFILE../
40b0: 2a 20 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20 63  * .** hwtime.h c
40c0: 6f 6e 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20 61  ontains inline a
40d0: 73 73 65 6d 62 6c 65 72 20 63 6f 64 65 20 66 6f  ssembler code fo
40e0: 72 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a  r implementing .
40f0: 2a 2a 20 68 69 67 68 2d 70 65 72 66 6f 72 6d 61  ** high-performa
4100: 6e 63 65 20 74 69 6d 69 6e 67 20 72 6f 75 74 69  nce timing routi
4110: 6e 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65  nes..*/.#include
4120: 20 22 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65 6e   "hwtime.h"..#en
4130: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45  dif..#ifndef NDE
4140: 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66  BUG./*.** This f
4150: 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  unction is only 
4160: 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
4170: 69 6e 20 61 6e 20 61 73 73 65 72 74 28 29 20 65  in an assert() e
4180: 78 70 72 65 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a  xpression. It.**
4190: 20 63 68 65 63 6b 73 20 74 68 61 74 20 74 68 65   checks that the
41a0: 20 73 71 6c 69 74 65 33 2e 6e 54 72 61 6e 73 61   sqlite3.nTransa
41b0: 63 74 69 6f 6e 20 76 61 72 69 61 62 6c 65 20 69  ction variable i
41c0: 73 20 63 6f 72 72 65 63 74 6c 79 20 73 65 74 20  s correctly set 
41d0: 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  to.** the number
41e0: 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74   of non-transact
41f0: 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 63  ion savepoints c
4200: 75 72 72 65 6e 74 6c 79 20 69 6e 20 74 68 65 20  urrently in the 
4210: 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  .** linked list 
4220: 73 74 61 72 74 69 6e 67 20 61 74 20 73 71 6c 69  starting at sqli
4230: 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 0a  te3.pSavepoint..
4240: 2a 2a 20 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a  ** .** Usage:.**
4250: 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20  .**     assert( 
4260: 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f  checkSavepointCo
4270: 75 6e 74 28 64 62 29 20 29 3b 0a 2a 2f 0a 73 74  unt(db) );.*/.st
4280: 61 74 69 63 20 69 6e 74 20 63 68 65 63 6b 53 61  atic int checkSa
4290: 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 73 71 6c  vepointCount(sql
42a0: 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74  ite3 *db){.  int
42b0: 20 6e 20 3d 20 30 3b 0a 20 20 53 61 76 65 70 6f   n = 0;.  Savepo
42c0: 69 6e 74 20 2a 70 3b 0a 20 20 66 6f 72 28 70 3d  int *p;.  for(p=
42d0: 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20  db->pSavepoint; 
42e0: 70 3b 20 70 3d 70 2d 3e 70 4e 65 78 74 29 20 6e  p; p=p->pNext) n
42f0: 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d  ++;.  assert( n=
4300: 3d 28 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  =(db->nSavepoint
4310: 20 2b 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63   + db->isTransac
4320: 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 29 20 29  tionSavepoint) )
4330: 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a  ;.  return 1;.}.
4340: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65  #endif../*.** Re
4350: 74 75 72 6e 20 74 68 65 20 72 65 67 69 73 74 65  turn the registe
4360: 72 20 6f 66 20 70 4f 70 2d 3e 70 32 20 61 66 74  r of pOp->p2 aft
4370: 65 72 20 66 69 72 73 74 20 70 72 65 70 61 72 69  er first prepari
4380: 6e 67 20 69 74 20 74 6f 20 62 65 0a 2a 2a 20 6f  ng it to be.** o
4390: 76 65 72 77 72 69 74 74 65 6e 20 77 69 74 68 20  verwritten with 
43a0: 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
43b0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 53 51 4c 49  ..*/.static SQLI
43c0: 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 4d 65 6d 20  TE_NOINLINE Mem 
43d0: 2a 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 57  *out2PrereleaseW
43e0: 69 74 68 43 6c 65 61 72 28 4d 65 6d 20 2a 70 4f  ithClear(Mem *pO
43f0: 75 74 29 7b 0a 20 20 73 71 6c 69 74 65 33 56 64  ut){.  sqlite3Vd
4400: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
4410: 74 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  t);.  pOut->flag
4420: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 72  s = MEM_Int;.  r
4430: 65 74 75 72 6e 20 70 4f 75 74 3b 0a 7d 0a 73 74  eturn pOut;.}.st
4440: 61 74 69 63 20 4d 65 6d 20 2a 6f 75 74 32 50 72  atic Mem *out2Pr
4450: 65 72 65 6c 65 61 73 65 28 56 64 62 65 20 2a 70  erelease(Vdbe *p
4460: 2c 20 56 64 62 65 4f 70 20 2a 70 4f 70 29 7b 0a  , VdbeOp *pOp){.
4470: 20 20 4d 65 6d 20 2a 70 4f 75 74 3b 0a 20 20 61    Mem *pOut;.  a
4480: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
4490: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
44a0: 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p2<=(p->nMem+
44b0: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
44c0: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e  );.  pOut = &p->
44d0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
44e0: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
44f0: 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 69 66  e(p, pOut);.  if
4500: 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63  ( VdbeMemDynamic
4510: 28 70 4f 75 74 29 20 29 7b 20 2f 2a 4f 50 54 49  (pOut) ){ /*OPTI
4520: 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53  MIZATION-IF-FALS
4530: 45 2a 2f 0a 20 20 20 20 72 65 74 75 72 6e 20 6f  E*/.    return o
4540: 75 74 32 50 72 65 72 65 6c 65 61 73 65 57 69 74  ut2PrereleaseWit
4550: 68 43 6c 65 61 72 28 70 4f 75 74 29 3b 0a 20 20  hClear(pOut);.  
4560: 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d  }else{.    pOut-
4570: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
4580: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 70 4f 75  ;.    return pOu
4590: 74 3b 0a 20 20 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a  t;.  }.}.../*.**
45a0: 20 45 78 65 63 75 74 65 20 61 73 20 6d 75 63 68   Execute as much
45b0: 20 6f 66 20 61 20 56 44 42 45 20 70 72 6f 67 72   of a VDBE progr
45c0: 61 6d 20 61 73 20 77 65 20 63 61 6e 2e 0a 2a 2a  am as we can..**
45d0: 20 54 68 69 73 20 69 73 20 74 68 65 20 63 6f 72   This is the cor
45e0: 65 20 6f 66 20 73 71 6c 69 74 65 33 5f 73 74 65  e of sqlite3_ste
45f0: 70 28 29 2e 20 20 0a 2a 2f 0a 69 6e 74 20 73 71  p().  .*/.int sq
4600: 6c 69 74 65 33 56 64 62 65 45 78 65 63 28 0a 20  lite3VdbeExec(. 
4610: 20 56 64 62 65 20 2a 70 20 20 20 20 20 20 20 20   Vdbe *p        
4620: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
4630: 68 65 20 56 44 42 45 20 2a 2f 0a 29 7b 0a 20 20  he VDBE */.){.  
4640: 4f 70 20 2a 61 4f 70 20 3d 20 70 2d 3e 61 4f 70  Op *aOp = p->aOp
4650: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  ;          /* Co
4660: 70 79 20 6f 66 20 70 2d 3e 61 4f 70 20 2a 2f 0a  py of p->aOp */.
4670: 20 20 4f 70 20 2a 70 4f 70 20 3d 20 61 4f 70 3b    Op *pOp = aOp;
4680: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4690: 43 75 72 72 65 6e 74 20 6f 70 65 72 61 74 69 6f  Current operatio
46a0: 6e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  n */.#if defined
46b0: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c  (SQLITE_DEBUG) |
46c0: 7c 20 64 65 66 69 6e 65 64 28 56 44 42 45 5f 50  | defined(VDBE_P
46d0: 52 4f 46 49 4c 45 29 0a 20 20 4f 70 20 2a 70 4f  ROFILE).  Op *pO
46e0: 72 69 67 4f 70 3b 20 20 20 20 20 20 20 20 20 20  rigOp;          
46f0: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66       /* Value of
4700: 20 70 4f 70 20 61 74 20 74 68 65 20 74 6f 70 20   pOp at the top 
4710: 6f 66 20 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 23  of the loop */.#
4720: 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
4730: 49 54 45 5f 44 45 42 55 47 0a 20 20 69 6e 74 20  ITE_DEBUG.  int 
4740: 6e 45 78 74 72 61 44 65 6c 65 74 65 20 3d 20 30  nExtraDelete = 0
4750: 3b 20 20 20 20 20 20 2f 2a 20 56 65 72 69 66 69  ;      /* Verifi
4760: 65 73 20 46 4f 52 44 45 4c 45 54 45 20 61 6e 64  es FORDELETE and
4770: 20 41 55 58 44 45 4c 45 54 45 20 66 6c 61 67 73   AUXDELETE flags
4780: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
4790: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
47a0: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
47b0: 20 74 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20   to return */.  
47c0: 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 2d  sqlite3 *db = p-
47d0: 3e 64 62 3b 20 20 20 20 20 20 20 2f 2a 20 54 68  >db;       /* Th
47e0: 65 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  e database */.  
47f0: 75 38 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e  u8 resetSchemaOn
4800: 46 61 75 6c 74 20 3d 20 30 3b 20 2f 2a 20 52 65  Fault = 0; /* Re
4810: 73 65 74 20 73 63 68 65 6d 61 20 61 66 74 65 72  set schema after
4820: 20 61 6e 20 65 72 72 6f 72 20 69 66 20 70 6f 73   an error if pos
4830: 69 74 69 76 65 20 2a 2f 0a 20 20 75 38 20 65 6e  itive */.  u8 en
4840: 63 6f 64 69 6e 67 20 3d 20 45 4e 43 28 64 62 29  coding = ENC(db)
4850: 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74  ;     /* The dat
4860: 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a  abase encoding *
4870: 2f 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61 72 65  /.  int iCompare
4880: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f   = 0;          /
4890: 2a 20 52 65 73 75 6c 74 20 6f 66 20 6c 61 73 74  * Result of last
48a0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a 20   comparison */. 
48b0: 20 75 6e 73 69 67 6e 65 64 20 6e 56 6d 53 74 65   unsigned nVmSte
48c0: 70 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e  p = 0;      /* N
48d0: 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c  umber of virtual
48e0: 20 6d 61 63 68 69 6e 65 20 73 74 65 70 73 20 2a   machine steps *
48f0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
4900: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
4910: 41 4c 4c 42 41 43 4b 0a 20 20 75 6e 73 69 67 6e  ALLBACK.  unsign
4920: 65 64 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69  ed nProgressLimi
4930: 74 3b 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 78  t;   /* Invoke x
4940: 50 72 6f 67 72 65 73 73 28 29 20 77 68 65 6e 20  Progress() when 
4950: 6e 56 6d 53 74 65 70 20 72 65 61 63 68 65 73 20  nVmStep reaches 
4960: 74 68 69 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  this */.#endif. 
4970: 20 4d 65 6d 20 2a 61 4d 65 6d 20 3d 20 70 2d 3e   Mem *aMem = p->
4980: 61 4d 65 6d 3b 20 20 20 20 20 20 20 2f 2a 20 43  aMem;       /* C
4990: 6f 70 79 20 6f 66 20 70 2d 3e 61 4d 65 6d 20 2a  opy of p->aMem *
49a0: 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 20 3d 20  /.  Mem *pIn1 = 
49b0: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
49c0: 2a 20 31 73 74 20 69 6e 70 75 74 20 6f 70 65 72  * 1st input oper
49d0: 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49  and */.  Mem *pI
49e0: 6e 32 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  n2 = 0;         
49f0: 20 20 20 20 2f 2a 20 32 6e 64 20 69 6e 70 75 74      /* 2nd input
4a00: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65   operand */.  Me
4a10: 6d 20 2a 70 49 6e 33 20 3d 20 30 3b 20 20 20 20  m *pIn3 = 0;    
4a20: 20 20 20 20 20 20 20 20 20 2f 2a 20 33 72 64 20           /* 3rd 
4a30: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
4a40: 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20 3d 20 30  .  Mem *pOut = 0
4a50: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
4a60: 20 4f 75 74 70 75 74 20 6f 70 65 72 61 6e 64 20   Output operand 
4a70: 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  */.#ifdef VDBE_P
4a80: 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61  ROFILE.  u64 sta
4a90: 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rt;             
4aa0: 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b      /* CPU clock
4ab0: 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20   count at start 
4ac0: 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e  of opcode */.#en
4ad0: 64 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52  dif.  /*** INSER
4ae0: 54 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45  T STACK UNION HE
4af0: 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72  RE ***/..  asser
4b00: 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42  t( p->magic==VDB
4b10: 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20  E_MAGIC_RUN );  
4b20: 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  /* sqlite3_step(
4b30: 29 20 76 65 72 69 66 69 65 73 20 74 68 69 73 20  ) verifies this 
4b40: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
4b50: 45 6e 74 65 72 28 70 29 3b 0a 20 20 69 66 28 20  Enter(p);.  if( 
4b60: 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f  p->rc==SQLITE_NO
4b70: 4d 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  MEM ){.    /* Th
4b80: 69 73 20 68 61 70 70 65 6e 73 20 69 66 20 61 20  is happens if a 
4b90: 6d 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20  malloc() inside 
4ba0: 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65  a call to sqlite
4bb0: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20  3_column_text() 
4bc0: 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  or.    ** sqlite
4bd0: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28  3_column_text16(
4be0: 29 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20  ) failed.  */.  
4bf0: 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
4c00: 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e   }.  assert( p->
4c10: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
4c20: 20 28 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53   (p->rc&0xff)==S
4c30: 51 4c 49 54 45 5f 42 55 53 59 20 29 3b 0a 20 20  QLITE_BUSY );.  
4c40: 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
4c50: 61 64 65 72 20 7c 7c 20 70 2d 3e 72 65 61 64 4f  ader || p->readO
4c60: 6e 6c 79 21 3d 30 20 29 3b 0a 20 20 70 2d 3e 69  nly!=0 );.  p->i
4c70: 43 75 72 72 65 6e 74 54 69 6d 65 20 3d 20 30 3b  CurrentTime = 0;
4c80: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 65 78  .  assert( p->ex
4c90: 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d  plain==0 );.  p-
4ca0: 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 30 3b  >pResultSet = 0;
4cb0: 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c  .  db->busyHandl
4cc0: 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20  er.nBusy = 0;.  
4cd0: 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74  if( db->u1.isInt
4ce0: 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20  errupted ) goto 
4cf0: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74  abort_due_to_int
4d00: 65 72 72 75 70 74 3b 0a 20 20 73 71 6c 69 74 65  errupt;.  sqlite
4d10: 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28  3VdbeIOTraceSql(
4d20: 70 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  p);.#ifndef SQLI
4d30: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
4d40: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 66 28 20  _CALLBACK.  if( 
4d50: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 29 7b  db->xProgress ){
4d60: 0a 20 20 20 20 75 33 32 20 69 50 72 69 6f 72 20  .    u32 iPrior 
4d70: 3d 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51  = p->aCounter[SQ
4d80: 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f  LITE_STMTSTATUS_
4d90: 56 4d 5f 53 54 45 50 5d 3b 0a 20 20 20 20 61 73  VM_STEP];.    as
4da0: 73 65 72 74 28 20 30 20 3c 20 64 62 2d 3e 6e 50  sert( 0 < db->nP
4db0: 72 6f 67 72 65 73 73 4f 70 73 20 29 3b 0a 20 20  rogressOps );.  
4dc0: 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74    nProgressLimit
4dd0: 20 3d 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73   = db->nProgress
4de0: 4f 70 73 20 2d 20 28 69 50 72 69 6f 72 20 25 20  Ops - (iPrior % 
4df0: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
4e00: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
4e10: 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d  nProgressLimit =
4e20: 20 30 78 66 66 66 66 66 66 66 66 3b 0a 20 20 7d   0xffffffff;.  }
4e30: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
4e40: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 73 71  QLITE_DEBUG.  sq
4e50: 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e  lite3BeginBenign
4e60: 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20  Malloc();.  if( 
4e70: 70 2d 3e 70 63 3d 3d 30 0a 20 20 20 26 26 20 28  p->pc==0.   && (
4e80: 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 28  p->db->flags & (
4e90: 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69  SQLITE_VdbeListi
4ea0: 6e 67 7c 53 51 4c 49 54 45 5f 56 64 62 65 45 51  ng|SQLITE_VdbeEQ
4eb0: 50 7c 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  P|SQLITE_VdbeTra
4ec0: 63 65 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20  ce))!=0.  ){.   
4ed0: 20 69 6e 74 20 69 3b 0a 20 20 20 20 69 6e 74 20   int i;.    int 
4ee0: 6f 6e 63 65 20 3d 20 31 3b 0a 20 20 20 20 73 71  once = 1;.    sq
4ef0: 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 53 71  lite3VdbePrintSq
4f00: 6c 28 70 29 3b 0a 20 20 20 20 69 66 28 20 70 2d  l(p);.    if( p-
4f10: 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  >db->flags & SQL
4f20: 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20  ITE_VdbeListing 
4f30: 29 7b 0a 20 20 20 20 20 20 70 72 69 6e 74 66 28  ){.      printf(
4f40: 22 56 44 42 45 20 50 72 6f 67 72 61 6d 20 4c 69  "VDBE Program Li
4f50: 73 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20 20  sting:\n");.    
4f60: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e    for(i=0; i<p->
4f70: 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  nOp; i++){.     
4f80: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72     sqlite3VdbePr
4f90: 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 69 2c  intOp(stdout, i,
4fa0: 20 26 61 4f 70 5b 69 5d 29 3b 0a 20 20 20 20 20   &aOp[i]);.     
4fb0: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28   }.    }.    if(
4fc0: 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20   p->db->flags & 
4fd0: 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20 29  SQLITE_VdbeEQP )
4fe0: 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b  {.      for(i=0;
4ff0: 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b   i<p->nOp; i++){
5000: 0a 20 20 20 20 20 20 20 20 69 66 28 20 61 4f 70  .        if( aOp
5010: 5b 69 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45  [i].opcode==OP_E
5020: 78 70 6c 61 69 6e 20 29 7b 0a 20 20 20 20 20 20  xplain ){.      
5030: 20 20 20 20 69 66 28 20 6f 6e 63 65 20 29 20 70      if( once ) p
5040: 72 69 6e 74 66 28 22 56 44 42 45 20 51 75 65 72  rintf("VDBE Quer
5050: 79 20 50 6c 61 6e 3a 5c 6e 22 29 3b 0a 20 20 20  y Plan:\n");.   
5060: 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 25         printf("%
5070: 73 5c 6e 22 2c 20 61 4f 70 5b 69 5d 2e 70 34 2e  s\n", aOp[i].p4.
5080: 7a 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 6e  z);.          on
5090: 63 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  ce = 0;.        
50a0: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  }.      }.    }.
50b0: 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66      if( p->db->f
50c0: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64  lags & SQLITE_Vd
50d0: 62 65 54 72 61 63 65 20 29 20 20 70 72 69 6e 74  beTrace )  print
50e0: 66 28 22 56 44 42 45 20 54 72 61 63 65 3a 5c 6e  f("VDBE Trace:\n
50f0: 22 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  ");.  }.  sqlite
5100: 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  3EndBenignMalloc
5110: 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 66 6f 72  ();.#endif.  for
5120: 28 70 4f 70 3d 26 61 4f 70 5b 70 2d 3e 70 63 5d  (pOp=&aOp[p->pc]
5130: 3b 20 31 3b 20 70 4f 70 2b 2b 29 7b 0a 20 20 20  ; 1; pOp++){.   
5140: 20 2f 2a 20 45 72 72 6f 72 73 20 61 72 65 20 64   /* Errors are d
5150: 65 74 65 63 74 65 64 20 62 79 20 69 6e 64 69 76  etected by indiv
5160: 69 64 75 61 6c 20 6f 70 63 6f 64 65 73 2c 20 77  idual opcodes, w
5170: 69 74 68 20 61 6e 20 69 6d 6d 65 64 69 61 74 65  ith an immediate
5180: 0a 20 20 20 20 2a 2a 20 6a 75 6d 70 73 20 74 6f  .    ** jumps to
5190: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
51a0: 72 6f 72 2e 20 2a 2f 0a 20 20 20 20 61 73 73 65  ror. */.    asse
51b0: 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
51c0: 4b 20 29 3b 0a 0a 20 20 20 20 61 73 73 65 72 74  K );..    assert
51d0: 28 20 70 4f 70 3e 3d 61 4f 70 20 26 26 20 70 4f  ( pOp>=aOp && pO
51e0: 70 3c 26 61 4f 70 5b 70 2d 3e 6e 4f 70 5d 29 3b  p<&aOp[p->nOp]);
51f0: 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
5200: 46 49 4c 45 0a 20 20 20 20 73 74 61 72 74 20 3d  FILE.    start =
5210: 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29   sqlite3Hwtime()
5220: 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 6e 56 6d  ;.#endif.    nVm
5230: 53 74 65 70 2b 2b 3b 0a 23 69 66 64 65 66 20 53  Step++;.#ifdef S
5240: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d  QLITE_ENABLE_STM
5250: 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20 20  T_SCANSTATUS.   
5260: 20 69 66 28 20 70 2d 3e 61 6e 45 78 65 63 20 29   if( p->anExec )
5270: 20 70 2d 3e 61 6e 45 78 65 63 5b 28 69 6e 74 29   p->anExec[(int)
5280: 28 70 4f 70 2d 61 4f 70 29 5d 2b 2b 3b 0a 23 65  (pOp-aOp)]++;.#e
5290: 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c  ndif..    /* Onl
52a0: 79 20 61 6c 6c 6f 77 20 74 72 61 63 69 6e 67 20  y allow tracing 
52b0: 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  if SQLITE_DEBUG 
52c0: 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20  is defined..    
52d0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
52e0: 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 64  _DEBUG.    if( d
52f0: 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
5300: 45 5f 56 64 62 65 54 72 61 63 65 20 29 7b 0a 20  E_VdbeTrace ){. 
5310: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
5320: 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20  PrintOp(stdout, 
5330: 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
5340: 2c 20 70 4f 70 29 3b 0a 20 20 20 20 7d 0a 23 65  , pOp);.    }.#e
5350: 6e 64 69 66 0a 20 20 20 20 20 20 0a 0a 20 20 20  ndif.      ..   
5360: 20 2f 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65   /* Check to see
5370: 20 69 66 20 77 65 20 6e 65 65 64 20 74 6f 20 73   if we need to s
5380: 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e 74 65 72  imulate an inter
5390: 72 75 70 74 2e 20 20 54 68 69 73 20 6f 6e 6c 79  rupt.  This only
53a0: 20 68 61 70 70 65 6e 73 0a 20 20 20 20 2a 2a 20   happens.    ** 
53b0: 69 66 20 77 65 20 68 61 76 65 20 61 20 73 70 65  if we have a spe
53c0: 63 69 61 6c 20 74 65 73 74 20 62 75 69 6c 64 2e  cial test build.
53d0: 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53  .    */.#ifdef S
53e0: 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 69  QLITE_TEST.    i
53f0: 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  f( sqlite3_inter
5400: 72 75 70 74 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a  rupt_count>0 ){.
5410: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e        sqlite3_in
5420: 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b  terrupt_count--;
5430: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
5440: 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75  e3_interrupt_cou
5450: 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  nt==0 ){.       
5460: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
5470: 70 74 28 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a  pt(db);.      }.
5480: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20      }.#endif..  
5490: 20 20 2f 2a 20 53 61 6e 69 74 79 20 63 68 65 63    /* Sanity chec
54a0: 6b 69 6e 67 20 6f 6e 20 6f 74 68 65 72 20 6f 70  king on other op
54b0: 65 72 61 6e 64 73 20 2a 2f 0a 23 69 66 64 65 66  erands */.#ifdef
54c0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
54d0: 20 20 7b 0a 20 20 20 20 20 20 75 38 20 6f 70 50    {.      u8 opP
54e0: 72 6f 70 65 72 74 79 20 3d 20 73 71 6c 69 74 65  roperty = sqlite
54f0: 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b  3OpcodeProperty[
5500: 70 4f 70 2d 3e 6f 70 63 6f 64 65 5d 3b 0a 20 20  pOp->opcode];.  
5510: 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65      if( (opPrope
5520: 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29  rty & OPFLG_IN1)
5530: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  !=0 ){.        a
5540: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
5550: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
5560: 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d  rt( pOp->p1<=(p-
5570: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
5580: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20  rsor) );.       
5590: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
55a0: 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  lid(&aMem[pOp->p
55b0: 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  1]) );.        a
55c0: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64  ssert( sqlite3Vd
55d0: 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69  beCheckMemInvari
55e0: 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ants(&aMem[pOp->
55f0: 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20  p1]) );.        
5600: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
5610: 4f 70 2d 3e 70 31 2c 20 26 61 4d 65 6d 5b 70 4f  Op->p1, &aMem[pO
5620: 70 2d 3e 70 31 5d 29 3b 0a 20 20 20 20 20 20 7d  p->p1]);.      }
5630: 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70 50 72  .      if( (opPr
5640: 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49  operty & OPFLG_I
5650: 4e 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  N2)!=0 ){.      
5660: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5670: 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61  2>0 );.        a
5680: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d  ssert( pOp->p2<=
5690: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
56a0: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
56b0: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
56c0: 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70  sValid(&aMem[pOp
56d0: 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p2]) );.      
56e0: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
56f0: 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76  3VdbeCheckMemInv
5700: 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f  ariants(&aMem[pO
5710: 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20  p->p2]) );.     
5720: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
5730: 45 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d  E(pOp->p2, &aMem
5740: 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20  [pOp->p2]);.    
5750: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 6f    }.      if( (o
5760: 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c  pProperty & OPFL
5770: 47 5f 49 4e 33 29 21 3d 30 20 29 7b 0a 20 20 20  G_IN3)!=0 ){.   
5780: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5790: 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p3>0 );.      
57a0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
57b0: 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  3<=(p->nMem+1 - 
57c0: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
57d0: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d         assert( m
57e0: 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
57f0: 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20  pOp->p3]) );.   
5800: 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
5810: 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d  ite3VdbeCheckMem
5820: 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d  Invariants(&aMem
5830: 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20  [pOp->p3]) );.  
5840: 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
5850: 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26 61  RACE(pOp->p3, &a
5860: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20  Mem[pOp->p3]);. 
5870: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
5880: 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f   (opProperty & O
5890: 50 46 4c 47 5f 4f 55 54 32 29 21 3d 30 20 29 7b  PFLG_OUT2)!=0 ){
58a0: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
58b0: 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
58c0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
58d0: 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p2<=(p->nMem+
58e0: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
58f0: 29 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41 62  );.        memAb
5900: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26  outToChange(p, &
5910: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a  aMem[pOp->p2]);.
5920: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
5930: 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20  ( (opProperty & 
5940: 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d 30 20 29  OPFLG_OUT3)!=0 )
5950: 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
5960: 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20  ( pOp->p3>0 );. 
5970: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
5980: 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
5990: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
59a0: 20 29 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41   );.        memA
59b0: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
59c0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b  &aMem[pOp->p3]);
59d0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23  .      }.    }.#
59e0: 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
59f0: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
5a00: 7c 7c 20 64 65 66 69 6e 65 64 28 56 44 42 45 5f  || defined(VDBE_
5a10: 50 52 4f 46 49 4c 45 29 0a 20 20 20 20 70 4f 72  PROFILE).    pOr
5a20: 69 67 4f 70 20 3d 20 70 4f 70 3b 0a 23 65 6e 64  igOp = pOp;.#end
5a30: 69 66 0a 20 20 0a 20 20 20 20 73 77 69 74 63 68  if.  .    switch
5a40: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
5a50: 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ../*************
5a60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a70: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a80: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a90: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5aa0: 0a 2a 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77 73  .** What follows
5ab0: 20 69 73 20 61 20 6d 61 73 73 69 76 65 20 73 77   is a massive sw
5ac0: 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77  itch statement w
5ad0: 68 65 72 65 20 65 61 63 68 20 63 61 73 65 20 69  here each case i
5ae0: 6d 70 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20 73  mplements a.** s
5af0: 65 70 61 72 61 74 65 20 69 6e 73 74 72 75 63 74  eparate instruct
5b00: 69 6f 6e 20 69 6e 20 74 68 65 20 76 69 72 74 75  ion in the virtu
5b10: 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 66 20  al machine.  If 
5b20: 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75 73  we follow the us
5b30: 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74 69  ual.** indentati
5b40: 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20  on conventions, 
5b50: 65 61 63 68 20 63 61 73 65 20 73 68 6f 75 6c 64  each case should
5b60: 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62 79 20   be indented by 
5b70: 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 0a 2a  6 spaces.  But.*
5b80: 2a 20 74 68 61 74 20 69 73 20 61 20 6c 6f 74 20  * that is a lot 
5b90: 6f 66 20 77 61 73 74 65 64 20 73 70 61 63 65 20  of wasted space 
5ba0: 6f 6e 20 74 68 65 20 6c 65 66 74 20 6d 61 72 67  on the left marg
5bb0: 69 6e 2e 20 20 53 6f 20 74 68 65 20 63 6f 64 65  in.  So the code
5bc0: 20 77 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20 73   within.** the s
5bd0: 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20  witch statement 
5be0: 77 69 6c 6c 20 62 72 65 61 6b 20 77 69 74 68 20  will break with 
5bf0: 63 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20 62  convention and b
5c00: 65 20 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41 6e  e flush-left. An
5c10: 6f 74 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f 6d  other.** big com
5c20: 6d 65 6e 74 20 28 73 69 6d 69 6c 61 72 20 74 6f  ment (similar to
5c30: 20 74 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c 20   this one) will 
5c40: 6d 61 72 6b 20 74 68 65 20 70 6f 69 6e 74 20 69  mark the point i
5c50: 6e 20 74 68 65 20 63 6f 64 65 20 77 68 65 72 65  n the code where
5c60: 0a 2a 2a 20 77 65 20 74 72 61 6e 73 69 74 69 6f  .** we transitio
5c70: 6e 20 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c  n back to normal
5c80: 20 69 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a   indentation..**
5c90: 0a 2a 2a 20 54 68 65 20 66 6f 72 6d 61 74 74 69  .** The formatti
5ca0: 6e 67 20 6f 66 20 65 61 63 68 20 63 61 73 65 20  ng of each case 
5cb0: 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20 54  is important.  T
5cc0: 68 65 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72 20  he makefile for 
5cd0: 53 51 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72 61  SQLite.** genera
5ce0: 74 65 73 20 74 77 6f 20 43 20 66 69 6c 65 73 20  tes two C files 
5cf0: 22 6f 70 63 6f 64 65 73 2e 68 22 20 61 6e 64 20  "opcodes.h" and 
5d00: 22 6f 70 63 6f 64 65 73 2e 63 22 20 62 79 20 73  "opcodes.c" by s
5d10: 63 61 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a 20  canning this.** 
5d20: 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72  file looking for
5d30: 20 6c 69 6e 65 73 20 74 68 61 74 20 62 65 67 69   lines that begi
5d40: 6e 20 77 69 74 68 20 22 63 61 73 65 20 4f 50 5f  n with "case OP_
5d50: 22 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 73 2e  ".  The opcodes.
5d60: 68 20 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20  h files.** will 
5d70: 62 65 20 66 69 6c 6c 65 64 20 77 69 74 68 20 23  be filled with #
5d80: 64 65 66 69 6e 65 73 20 74 68 61 74 20 67 69 76  defines that giv
5d90: 65 20 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72  e unique integer
5da0: 20 76 61 6c 75 65 73 20 74 6f 20 65 61 63 68 0a   values to each.
5db0: 2a 2a 20 6f 70 63 6f 64 65 20 61 6e 64 20 74 68  ** opcode and th
5dc0: 65 20 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c 65  e opcodes.c file
5dd0: 20 69 73 20 66 69 6c 6c 65 64 20 77 69 74 68 20   is filled with 
5de0: 61 6e 20 61 72 72 61 79 20 6f 66 20 73 74 72 69  an array of stri
5df0: 6e 67 73 20 77 68 65 72 65 0a 2a 2a 20 65 61 63  ngs where.** eac
5e00: 68 20 73 74 72 69 6e 67 20 69 73 20 74 68 65 20  h string is the 
5e10: 73 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66 6f  symbolic name fo
5e20: 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  r the correspond
5e30: 69 6e 67 20 6f 70 63 6f 64 65 2e 20 20 49 66 20  ing opcode.  If 
5e40: 74 68 65 0a 2a 2a 20 63 61 73 65 20 73 74 61 74  the.** case stat
5e50: 65 6d 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77 65  ement is followe
5e60: 64 20 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20 6f  d by a comment o
5e70: 66 20 74 68 65 20 66 6f 72 6d 20 22 2f 23 20 73  f the form "/# s
5e80: 61 6d 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a  ame as ... #/".*
5e90: 2a 20 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20 69  * that comment i
5ea0: 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  s used to determ
5eb0: 69 6e 65 20 74 68 65 20 70 61 72 74 69 63 75 6c  ine the particul
5ec0: 61 72 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ar value of the 
5ed0: 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74  opcode..**.** Ot
5ee0: 68 65 72 20 6b 65 79 77 6f 72 64 73 20 69 6e 20  her keywords in 
5ef0: 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61 74  the comment that
5f00: 20 66 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63 61   follows each ca
5f10: 73 65 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a  se are used to.*
5f20: 2a 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20  * construct the 
5f30: 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45  OPFLG_INITIALIZE
5f40: 52 20 76 61 6c 75 65 20 74 68 61 74 20 69 6e 69  R value that ini
5f50: 74 69 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65 50  tializes opcodeP
5f60: 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65  roperty[]..** Ke
5f70: 79 77 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a 20  ywords include: 
5f80: 69 6e 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20 6f  in1, in2, in3, o
5f90: 75 74 32 2c 20 6f 75 74 33 2e 20 20 53 65 65 0a  ut2, out3.  See.
5fa0: 2a 2a 20 74 68 65 20 6d 6b 6f 70 63 6f 64 65 68  ** the mkopcodeh
5fb0: 2e 61 77 6b 20 73 63 72 69 70 74 20 66 6f 72 20  .awk script for 
5fc0: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
5fd0: 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f  mation..**.** Do
5fe0: 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62 6f 75  cumentation abou
5ff0: 74 20 56 44 42 45 20 6f 70 63 6f 64 65 73 20 69  t VDBE opcodes i
6000: 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 73  s generated by s
6010: 63 61 6e 6e 69 6e 67 20 74 68 69 73 20 66 69 6c  canning this fil
6020: 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65 73 20 6f  e.** for lines o
6030: 66 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 20 22  f that contain "
6040: 4f 70 63 6f 64 65 3a 22 2e 20 20 54 68 61 74 20  Opcode:".  That 
6050: 6c 69 6e 65 20 61 6e 64 20 61 6c 6c 20 73 75 62  line and all sub
6060: 73 65 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65  sequent.** comme
6070: 6e 74 20 6c 69 6e 65 73 20 61 72 65 20 75 73 65  nt lines are use
6080: 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74  d in the generat
6090: 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 63 6f 64  ion of the opcod
60a0: 65 2e 68 74 6d 6c 20 64 6f 63 75 6d 65 6e 74 61  e.html documenta
60b0: 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a  tion.** file..**
60c0: 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a  .** SUMMARY:.**.
60d0: 2a 2a 20 20 20 20 20 46 6f 72 6d 61 74 74 69 6e  **     Formattin
60e0: 67 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74  g is important t
60f0: 6f 20 73 63 72 69 70 74 73 20 74 68 61 74 20 73  o scripts that s
6100: 63 61 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a  can this file..*
6110: 2a 20 20 20 20 20 44 6f 20 6e 6f 74 20 64 65 76  *     Do not dev
6120: 69 61 74 65 20 66 72 6f 6d 20 74 68 65 20 66 6f  iate from the fo
6130: 72 6d 61 74 74 69 6e 67 20 73 74 79 6c 65 20 63  rmatting style c
6140: 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e  urrently in use.
6150: 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .**.************
6160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6170: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6180: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6190: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
61a0: 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  */../* Opcode:  
61b0: 47 6f 74 6f 20 2a 20 50 32 20 2a 20 2a 20 2a 0a  Goto * P2 * * *.
61c0: 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64 69  **.** An uncondi
61d0: 74 69 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f 20 61  tional jump to a
61e0: 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 20 54 68  ddress P2..** Th
61f0: 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
6200: 6f 6e 20 65 78 65 63 75 74 65 64 20 77 69 6c 6c  on executed will
6210: 20 62 65 20 0a 2a 2a 20 74 68 65 20 6f 6e 65 20   be .** the one 
6220: 61 74 20 69 6e 64 65 78 20 50 32 20 66 72 6f 6d  at index P2 from
6230: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
6240: 66 0a 2a 2a 20 74 68 65 20 70 72 6f 67 72 61 6d  f.** the program
6250: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 70  ..**.** The P1 p
6260: 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20  arameter is not 
6270: 61 63 74 75 61 6c 6c 79 20 75 73 65 64 20 62 79  actually used by
6280: 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 48   this opcode.  H
6290: 6f 77 65 76 65 72 2c 20 69 74 0a 2a 2a 20 69 73  owever, it.** is
62a0: 20 73 6f 6d 65 74 69 6d 65 73 20 73 65 74 20 74   sometimes set t
62b0: 6f 20 31 20 69 6e 73 74 65 61 64 20 6f 66 20 30  o 1 instead of 0
62c0: 20 61 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68   as a hint to th
62d0: 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73  e command-line s
62e0: 68 65 6c 6c 0a 2a 2a 20 74 68 61 74 20 74 68 69  hell.** that thi
62f0: 73 20 47 6f 74 6f 20 69 73 20 74 68 65 20 62 6f  s Goto is the bo
6300: 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 61  ttom of a loop a
6310: 6e 64 20 74 68 61 74 20 74 68 65 20 6c 69 6e 65  nd that the line
6320: 73 20 66 72 6f 6d 20 50 32 20 64 6f 77 6e 0a 2a  s from P2 down.*
6330: 2a 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74  * to the current
6340: 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 62 65 20   line should be 
6350: 69 6e 64 65 6e 74 65 64 20 66 6f 72 20 45 58 50  indented for EXP
6360: 4c 41 49 4e 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a  LAIN output..*/.
6370: 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20  case OP_Goto: { 
6380: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
6390: 75 6d 70 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70  ump */.jump_to_p
63a0: 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f  2_and_check_for_
63b0: 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 70 4f 70  interrupt:.  pOp
63c0: 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20   = &aOp[pOp->p2 
63d0: 2d 20 31 5d 3b 0a 0a 20 20 2f 2a 20 4f 70 63 6f  - 1];..  /* Opco
63e0: 64 65 73 20 74 68 61 74 20 61 72 65 20 75 73 65  des that are use
63f0: 64 20 61 73 20 74 68 65 20 62 6f 74 74 6f 6d 20  d as the bottom 
6400: 6f 66 20 61 20 6c 6f 6f 70 20 28 4f 50 5f 4e 65  of a loop (OP_Ne
6410: 78 74 2c 20 4f 50 5f 50 72 65 76 2c 0a 20 20 2a  xt, OP_Prev,.  *
6420: 2a 20 4f 50 5f 56 4e 65 78 74 2c 20 6f 72 20 4f  * OP_VNext, or O
6430: 50 5f 53 6f 72 74 65 72 4e 65 78 74 29 20 61 6c  P_SorterNext) al
6440: 6c 20 6a 75 6d 70 20 68 65 72 65 20 75 70 6f 6e  l jump here upon
6450: 0a 20 20 2a 2a 20 63 6f 6d 70 6c 65 74 69 6f 6e  .  ** completion
6460: 2e 20 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20  .  Check to see 
6470: 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  if sqlite3_inter
6480: 72 75 70 74 28 29 20 68 61 73 20 62 65 65 6e 20  rupt() has been 
6490: 63 61 6c 6c 65 64 0a 20 20 2a 2a 20 6f 72 20 69  called.  ** or i
64a0: 66 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  f the progress c
64b0: 61 6c 6c 62 61 63 6b 20 6e 65 65 64 73 20 74 6f  allback needs to
64c0: 20 62 65 20 69 6e 76 6f 6b 65 64 2e 20 0a 20 20   be invoked. .  
64d0: 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 63 6f 64  **.  ** This cod
64e0: 65 20 75 73 65 73 20 75 6e 73 74 72 75 63 74 75  e uses unstructu
64f0: 72 65 64 20 22 67 6f 74 6f 22 20 73 74 61 74 65  red "goto" state
6500: 6d 65 6e 74 73 20 61 6e 64 20 64 6f 65 73 20 6e  ments and does n
6510: 6f 74 20 6c 6f 6f 6b 20 63 6c 65 61 6e 2e 0a 20  ot look clean.. 
6520: 20 2a 2a 20 42 75 74 20 74 68 61 74 20 69 73 20   ** But that is 
6530: 6e 6f 74 20 64 75 65 20 74 6f 20 73 6c 6f 70 70  not due to slopp
6540: 79 20 63 6f 64 69 6e 67 20 68 61 62 69 74 73 2e  y coding habits.
6550: 20 54 68 65 20 63 6f 64 65 20 69 73 20 77 72 69   The code is wri
6560: 74 74 65 6e 20 74 68 69 73 0a 20 20 2a 2a 20 77  tten this.  ** w
6570: 61 79 20 66 6f 72 20 70 65 72 66 6f 72 6d 61 6e  ay for performan
6580: 63 65 2c 20 74 6f 20 61 76 6f 69 64 20 68 61 76  ce, to avoid hav
6590: 69 6e 67 20 74 6f 20 72 75 6e 20 74 68 65 20 69  ing to run the i
65a0: 6e 74 65 72 72 75 70 74 20 61 6e 64 20 70 72 6f  nterrupt and pro
65b0: 67 72 65 73 73 0a 20 20 2a 2a 20 63 68 65 63 6b  gress.  ** check
65c0: 73 20 6f 6e 20 65 76 65 72 79 20 6f 70 63 6f 64  s on every opcod
65d0: 65 2e 20 20 54 68 69 73 20 68 65 6c 70 73 20 73  e.  This helps s
65e0: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 74 6f  qlite3_step() to
65f0: 20 72 75 6e 20 61 62 6f 75 74 20 31 2e 35 25 0a   run about 1.5%.
6600: 20 20 2a 2a 20 66 61 73 74 65 72 20 61 63 63 6f    ** faster acco
6610: 72 64 69 6e 67 20 74 6f 20 22 76 61 6c 67 72 69  rding to "valgri
6620: 6e 64 20 2d 2d 74 6f 6f 6c 3d 63 61 63 68 65 67  nd --tool=cacheg
6630: 72 69 6e 64 22 20 2a 2f 0a 63 68 65 63 6b 5f 66  rind" */.check_f
6640: 6f 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20  or_interrupt:.  
6650: 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74  if( db->u1.isInt
6660: 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20  errupted ) goto 
6670: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74  abort_due_to_int
6680: 65 72 72 75 70 74 3b 0a 23 69 66 6e 64 65 66 20  errupt;.#ifndef 
6690: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47  SQLITE_OMIT_PROG
66a0: 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20  RESS_CALLBACK.  
66b0: 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70 72 6f 67  /* Call the prog
66c0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 69 66  ress callback if
66d0: 20 69 74 20 69 73 20 63 6f 6e 66 69 67 75 72 65   it is configure
66e0: 64 20 61 6e 64 20 74 68 65 20 72 65 71 75 69 72  d and the requir
66f0: 65 64 20 6e 75 6d 62 65 72 0a 20 20 2a 2a 20 6f  ed number.  ** o
6700: 66 20 56 44 42 45 20 6f 70 73 20 68 61 76 65 20  f VDBE ops have 
6710: 62 65 65 6e 20 65 78 65 63 75 74 65 64 20 28 65  been executed (e
6720: 69 74 68 65 72 20 73 69 6e 63 65 20 74 68 69 73  ither since this
6730: 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a 20   invocation of. 
6740: 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 45   ** sqlite3VdbeE
6750: 78 65 63 28 29 20 6f 72 20 73 69 6e 63 65 20 6c  xec() or since l
6760: 61 73 74 20 74 69 6d 65 20 74 68 65 20 70 72 6f  ast time the pro
6770: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 77  gress callback w
6780: 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20 2a 2a  as called)..  **
6790: 20 49 66 20 74 68 65 20 70 72 6f 67 72 65 73 73   If the progress
67a0: 20 63 61 6c 6c 62 61 63 6b 20 72 65 74 75 72 6e   callback return
67b0: 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69 74  s non-zero, exit
67c0: 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   the virtual mac
67d0: 68 69 6e 65 20 77 69 74 68 0a 20 20 2a 2a 20 61  hine with.  ** a
67e0: 20 72 65 74 75 72 6e 20 63 6f 64 65 20 53 51 4c   return code SQL
67f0: 49 54 45 5f 41 42 4f 52 54 2e 0a 20 20 2a 2f 0a  ITE_ABORT..  */.
6800: 20 20 69 66 28 20 6e 56 6d 53 74 65 70 3e 3d 6e    if( nVmStep>=n
6810: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 26 26  ProgressLimit &&
6820: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d   db->xProgress!=
6830: 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
6840: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
6850: 73 21 3d 30 20 29 3b 0a 20 20 20 20 6e 50 72 6f  s!=0 );.    nPro
6860: 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 6e 56 6d  gressLimit = nVm
6870: 53 74 65 70 20 2b 20 64 62 2d 3e 6e 50 72 6f 67  Step + db->nProg
6880: 72 65 73 73 4f 70 73 20 2d 20 28 6e 56 6d 53 74  ressOps - (nVmSt
6890: 65 70 25 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73  ep%db->nProgress
68a0: 4f 70 73 29 3b 0a 20 20 20 20 69 66 28 20 64 62  Ops);.    if( db
68b0: 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e  ->xProgress(db->
68c0: 70 50 72 6f 67 72 65 73 73 41 72 67 29 20 29 7b  pProgressArg) ){
68d0: 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
68e0: 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  TE_INTERRUPT;.  
68f0: 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
6900: 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
6910: 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20   }.  }.#endif.  
6920: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
6930: 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62 20 50  Opcode:  Gosub P
6940: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
6950: 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65   Write the curre
6960: 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74 6f 20  nt address onto 
6970: 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 61  register P1.** a
6980: 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  nd then jump to 
6990: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a 63  address P2..*/.c
69a0: 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b 20  ase OP_Gosub: { 
69b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
69c0: 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
69d0: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
69e0: 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p1<=(p->nMem+1
69f0: 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
6a00: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
6a10: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
6a20: 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61  ert( VdbeMemDyna
6a30: 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20 29 3b 0a  mic(pIn1)==0 );.
6a40: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
6a50: 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 70  ge(p, pIn1);.  p
6a60: 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  In1->flags = MEM
6a70: 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e  _Int;.  pIn1->u.
6a80: 69 20 3d 20 28 69 6e 74 29 28 70 4f 70 2d 61 4f  i = (int)(pOp-aO
6a90: 70 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  p);.  REGISTER_T
6aa0: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49  RACE(pOp->p1, pI
6ab0: 6e 31 29 3b 0a 0a 20 20 2f 2a 20 4d 6f 73 74 20  n1);..  /* Most 
6ac0: 6a 75 6d 70 20 6f 70 65 72 61 74 69 6f 6e 73 20  jump operations 
6ad0: 64 6f 20 61 20 67 6f 74 6f 20 74 6f 20 74 68 69  do a goto to thi
6ae0: 73 20 73 70 6f 74 20 69 6e 20 6f 72 64 65 72 20  s spot in order 
6af0: 74 6f 20 75 70 64 61 74 65 0a 20 20 2a 2a 20 74  to update.  ** t
6b00: 68 65 20 70 4f 70 20 70 6f 69 6e 74 65 72 2e 20  he pOp pointer. 
6b10: 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32 3a 0a 20  */.jump_to_p2:. 
6b20: 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d   pOp = &aOp[pOp-
6b30: 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 62 72 65 61  >p2 - 1];.  brea
6b40: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
6b50: 20 20 52 65 74 75 72 6e 20 50 31 20 2a 20 2a 20    Return P1 * * 
6b60: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
6b70: 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
6b80: 75 63 74 69 6f 6e 20 61 66 74 65 72 20 74 68 65  uction after the
6b90: 20 61 64 64 72 65 73 73 20 69 6e 20 72 65 67 69   address in regi
6ba0: 73 74 65 72 20 50 31 2e 20 20 41 66 74 65 72 0a  ster P1.  After.
6bb0: 2a 2a 20 74 68 65 20 6a 75 6d 70 2c 20 72 65 67  ** the jump, reg
6bc0: 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65 73  ister P1 becomes
6bd0: 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 63   undefined..*/.c
6be0: 61 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a 20 7b  ase OP_Return: {
6bf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
6c00: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
6c10: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
6c20: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
6c30: 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a  ags==MEM_Int );.
6c40: 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 49 6e    pOp = &aOp[pIn
6c50: 31 2d 3e 75 2e 69 5d 3b 0a 20 20 70 49 6e 31 2d  1->u.i];.  pIn1-
6c60: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64  >flags = MEM_Und
6c70: 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b  efined;.  break;
6c80: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
6c90: 6e 69 74 43 6f 72 6f 75 74 69 6e 65 20 50 31 20  nitCoroutine P1 
6ca0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
6cb0: 53 65 74 20 75 70 20 72 65 67 69 73 74 65 72 20  Set up register 
6cc0: 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 77 69  P1 so that it wi
6cd0: 6c 6c 20 59 69 65 6c 64 20 74 6f 20 74 68 65 20  ll Yield to the 
6ce0: 63 6f 72 6f 75 74 69 6e 65 0a 2a 2a 20 6c 6f 63  coroutine.** loc
6cf0: 61 74 65 64 20 61 74 20 61 64 64 72 65 73 73 20  ated at address 
6d00: 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 21  P3..**.** If P2!
6d10: 3d 30 20 74 68 65 6e 20 74 68 65 20 63 6f 72 6f  =0 then the coro
6d20: 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61  utine implementa
6d30: 74 69 6f 6e 20 69 6d 6d 65 64 69 61 74 65 6c 79  tion immediately
6d40: 20 66 6f 6c 6c 6f 77 73 0a 2a 2a 20 74 68 69 73   follows.** this
6d50: 20 6f 70 63 6f 64 65 2e 20 20 53 6f 20 6a 75 6d   opcode.  So jum
6d60: 70 20 6f 76 65 72 20 74 68 65 20 63 6f 72 6f 75  p over the corou
6d70: 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tine implementat
6d80: 69 6f 6e 20 74 6f 0a 2a 2a 20 61 64 64 72 65 73  ion to.** addres
6d90: 73 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  s P2..**.** See 
6da0: 61 6c 73 6f 3a 20 45 6e 64 43 6f 72 6f 75 74 69  also: EndCorouti
6db0: 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  ne.*/.case OP_In
6dc0: 69 74 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20  itCoroutine: {  
6dd0: 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
6de0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
6df0: 30 20 26 26 20 20 70 4f 70 2d 3e 70 31 3c 3d 28  0 &&  pOp->p1<=(
6e00: 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
6e10: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73  Cursor) );.  ass
6e20: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20  ert( pOp->p2>=0 
6e30: 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f  && pOp->p2<p->nO
6e40: 70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p );.  assert( p
6e50: 4f 70 2d 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70  Op->p3>=0 && pOp
6e60: 2d 3e 70 33 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20  ->p3<p->nOp );. 
6e70: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
6e80: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
6e90: 28 20 21 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69  ( !VdbeMemDynami
6ea0: 63 28 70 4f 75 74 29 20 29 3b 0a 20 20 70 4f 75  c(pOut) );.  pOu
6eb0: 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 33  t->u.i = pOp->p3
6ec0: 20 2d 20 31 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c   - 1;.  pOut->fl
6ed0: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
6ee0: 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 29 20 67   if( pOp->p2 ) g
6ef0: 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
6f00: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
6f10: 70 63 6f 64 65 3a 20 20 45 6e 64 43 6f 72 6f 75  pcode:  EndCorou
6f20: 74 69 6e 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  tine P1 * * * *.
6f30: 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 73 74 72 75  **.** The instru
6f40: 63 74 69 6f 6e 20 61 74 20 74 68 65 20 61 64 64  ction at the add
6f50: 72 65 73 73 20 69 6e 20 72 65 67 69 73 74 65 72  ress in register
6f60: 20 50 31 20 69 73 20 61 20 59 69 65 6c 64 2e 0a   P1 is a Yield..
6f70: 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 50  ** Jump to the P
6f80: 32 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 74  2 parameter of t
6f90: 68 61 74 20 59 69 65 6c 64 2e 0a 2a 2a 20 41 66  hat Yield..** Af
6fa0: 74 65 72 20 74 68 65 20 6a 75 6d 70 2c 20 72 65  ter the jump, re
6fb0: 67 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65  gister P1 become
6fc0: 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a  s undefined..**.
6fd0: 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69  ** See also: Ini
6fe0: 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61  tCoroutine.*/.ca
6ff0: 73 65 20 4f 50 5f 45 6e 64 43 6f 72 6f 75 74 69  se OP_EndCorouti
7000: 6e 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ne: {           
7010: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 56 64 62 65  /* in1 */.  Vdbe
7020: 4f 70 20 2a 70 43 61 6c 6c 65 72 3b 0a 20 20 70  Op *pCaller;.  p
7030: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
7040: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
7050: 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d  pIn1->flags==MEM
7060: 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74  _Int );.  assert
7070: 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 3d 30 20 26  ( pIn1->u.i>=0 &
7080: 26 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 2d 3e 6e  & pIn1->u.i<p->n
7090: 4f 70 20 29 3b 0a 20 20 70 43 61 6c 6c 65 72 20  Op );.  pCaller 
70a0: 3d 20 26 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69  = &aOp[pIn1->u.i
70b0: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 61  ];.  assert( pCa
70c0: 6c 6c 65 72 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50  ller->opcode==OP
70d0: 5f 59 69 65 6c 64 20 29 3b 0a 20 20 61 73 73 65  _Yield );.  asse
70e0: 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e 70 32 3e  rt( pCaller->p2>
70f0: 3d 30 20 26 26 20 70 43 61 6c 6c 65 72 2d 3e 70  =0 && pCaller->p
7100: 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f  2<p->nOp );.  pO
7110: 70 20 3d 20 26 61 4f 70 5b 70 43 61 6c 6c 65 72  p = &aOp[pCaller
7120: 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 70 49 6e  ->p2 - 1];.  pIn
7130: 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55  1->flags = MEM_U
7140: 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61  ndefined;.  brea
7150: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
7160: 20 20 59 69 65 6c 64 20 50 31 20 50 32 20 2a 20    Yield P1 P2 * 
7170: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74  * *.**.** Swap t
7180: 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74  he program count
7190: 65 72 20 77 69 74 68 20 74 68 65 20 76 61 6c 75  er with the valu
71a0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
71b0: 2e 20 20 54 68 69 73 0a 2a 2a 20 68 61 73 20 74  .  This.** has t
71c0: 68 65 20 65 66 66 65 63 74 20 6f 66 20 79 69 65  he effect of yie
71d0: 6c 64 69 6e 67 20 74 6f 20 61 20 63 6f 72 6f 75  lding to a corou
71e0: 74 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  tine..**.** If t
71f0: 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 74 68 61  he coroutine tha
7200: 74 20 69 73 20 6c 61 75 6e 63 68 65 64 20 62 79  t is launched by
7210: 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
7220: 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20 59  n ends with.** Y
7230: 69 65 6c 64 20 6f 72 20 52 65 74 75 72 6e 20 74  ield or Return t
7240: 68 65 6e 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20  hen continue to 
7250: 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
7260: 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 0a 2a 2a  tion.  But if.**
7270: 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 6c   the coroutine l
7280: 61 75 6e 63 68 65 64 20 62 79 20 74 68 69 73 20  aunched by this 
7290: 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e 64 73  instruction ends
72a0: 20 77 69 74 68 0a 2a 2a 20 45 6e 64 43 6f 72 6f   with.** EndCoro
72b0: 75 74 69 6e 65 2c 20 74 68 65 6e 20 6a 75 6d 70  utine, then jump
72c0: 20 74 6f 20 50 32 20 72 61 74 68 65 72 20 74 68   to P2 rather th
72d0: 61 6e 20 63 6f 6e 74 69 6e 75 69 6e 67 20 77 69  an continuing wi
72e0: 74 68 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 69  th the.** next i
72f0: 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
7300: 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74  * See also: Init
7310: 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73  Coroutine.*/.cas
7320: 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20 20  e OP_Yield: {   
7330: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c           /* in1,
7340: 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 70   jump */.  int p
7350: 63 44 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d 20  cDest;.  pIn1 = 
7360: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
7370: 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65    assert( VdbeMe
7380: 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d  mDynamic(pIn1)==
7390: 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  0 );.  pIn1->fla
73a0: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
73b0: 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29 70 49  pcDest = (int)pI
73c0: 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31 2d  n1->u.i;.  pIn1-
73d0: 3e 75 2e 69 20 3d 20 28 69 6e 74 29 28 70 4f 70  >u.i = (int)(pOp
73e0: 20 2d 20 61 4f 70 29 3b 0a 20 20 52 45 47 49 53   - aOp);.  REGIS
73f0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
7400: 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 4f 70 20  1, pIn1);.  pOp 
7410: 3d 20 26 61 4f 70 5b 70 63 44 65 73 74 5d 3b 0a  = &aOp[pcDest];.
7420: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
7430: 70 63 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e 75  pcode:  HaltIfNu
7440: 6c 6c 20 20 50 31 20 50 32 20 50 33 20 50 34 20  ll  P1 P2 P3 P4 
7450: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
7460: 69 66 20 72 5b 50 33 5d 3d 6e 75 6c 6c 20 68 61  if r[P3]=null ha
7470: 6c 74 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74  lt.**.** Check t
7480: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
7490: 73 74 65 72 20 50 33 2e 20 20 49 66 20 69 74 20  ster P3.  If it 
74a0: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61 6c  is NULL then Hal
74b0: 74 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61 6d  t using.** param
74c0: 65 74 65 72 20 50 31 2c 20 50 32 2c 20 61 6e 64  eter P1, P2, and
74d0: 20 50 34 20 61 73 20 69 66 20 74 68 69 73 20 77   P4 as if this w
74e0: 65 72 65 20 61 20 48 61 6c 74 20 69 6e 73 74 72  ere a Halt instr
74f0: 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 0a  uction.  If the.
7500: 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  ** value in regi
7510: 73 74 65 72 20 50 33 20 69 73 20 6e 6f 74 20 4e  ster P3 is not N
7520: 55 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73 20 72  ULL, then this r
7530: 6f 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f  outine is a no-o
7540: 70 2e 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72  p..** The P5 par
7550: 61 6d 65 74 65 72 20 73 68 6f 75 6c 64 20 62 65  ameter should be
7560: 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48   1..*/.case OP_H
7570: 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20 20  altIfNull: {    
7580: 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 70 49    /* in3 */.  pI
7590: 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
75a0: 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 33  p3];.  if( (pIn3
75b0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
75c0: 6c 6c 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a  ll)==0 ) break;.
75d0: 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
75e0: 68 20 69 6e 74 6f 20 4f 50 5f 48 61 6c 74 20 2a  h into OP_Halt *
75f0: 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  /.}../* Opcode: 
7600: 20 48 61 6c 74 20 50 31 20 50 32 20 2a 20 50 34   Halt P1 P2 * P4
7610: 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20 69   P5.**.** Exit i
7620: 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 41 6c 6c  mmediately.  All
7630: 20 6f 70 65 6e 20 63 75 72 73 6f 72 73 2c 20 65   open cursors, e
7640: 74 63 20 61 72 65 20 63 6c 6f 73 65 64 0a 2a 2a  tc are closed.**
7650: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a   automatically..
7660: 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20  **.** P1 is the 
7670: 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65 74 75  result code retu
7680: 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
7690: 65 78 65 63 28 29 2c 20 73 71 6c 69 74 65 33 5f  exec(), sqlite3_
76a0: 72 65 73 65 74 28 29 2c 0a 2a 2a 20 6f 72 20 73  reset(),.** or s
76b0: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
76c0: 29 2e 20 20 46 6f 72 20 61 20 6e 6f 72 6d 61 6c  ).  For a normal
76d0: 20 68 61 6c 74 2c 20 74 68 69 73 20 73 68 6f 75   halt, this shou
76e0: 6c 64 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b 20  ld be SQLITE_OK 
76f0: 28 30 29 2e 0a 2a 2a 20 46 6f 72 20 65 72 72 6f  (0)..** For erro
7700: 72 73 2c 20 69 74 20 63 61 6e 20 62 65 20 73 6f  rs, it can be so
7710: 6d 65 20 6f 74 68 65 72 20 76 61 6c 75 65 2e 20  me other value. 
7720: 20 49 66 20 50 31 21 3d 30 20 74 68 65 6e 20 50   If P1!=0 then P
7730: 32 20 77 69 6c 6c 20 64 65 74 65 72 6d 69 6e 65  2 will determine
7740: 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20 6e  .** whether or n
7750: 6f 74 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 74  ot to rollback t
7760: 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73  he current trans
7770: 61 63 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20  action.  Do not 
7780: 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66 20 50  rollback.** if P
7790: 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f 20 74  2==OE_Fail. Do t
77a0: 68 65 20 72 6f 6c 6c 62 61 63 6b 20 69 66 20 50  he rollback if P
77b0: 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20  2==OE_Rollback. 
77c0: 20 49 66 20 50 32 3d 3d 4f 45 5f 41 62 6f 72 74   If P2==OE_Abort
77d0: 2c 0a 2a 2a 20 74 68 65 6e 20 62 61 63 6b 20 6f  ,.** then back o
77e0: 75 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 20 74  ut all changes t
77f0: 68 61 74 20 68 61 76 65 20 6f 63 63 75 72 72 65  hat have occurre
7800: 64 20 64 75 72 69 6e 67 20 74 68 69 73 20 65 78  d during this ex
7810: 65 63 75 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ecution of the.*
7820: 2a 20 56 44 42 45 2c 20 62 75 74 20 64 6f 20 6e  * VDBE, but do n
7830: 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20  ot rollback the 
7840: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a  transaction. .**
7850: 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74  .** If P4 is not
7860: 20 6e 75 6c 6c 20 74 68 65 6e 20 69 74 20 69 73   null then it is
7870: 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
7880: 65 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20  e string..**.** 
7890: 50 35 20 69 73 20 61 20 76 61 6c 75 65 20 62 65  P5 is a value be
78a0: 74 77 65 65 6e 20 30 20 61 6e 64 20 34 2c 20 69  tween 0 and 4, i
78b0: 6e 63 6c 75 73 69 76 65 2c 20 74 68 61 74 20 6d  nclusive, that m
78c0: 6f 64 69 66 69 65 73 20 74 68 65 20 50 34 20 73  odifies the P4 s
78d0: 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  tring..**.**    
78e0: 30 3a 20 20 28 6e 6f 20 63 68 61 6e 67 65 29 0a  0:  (no change).
78f0: 2a 2a 20 20 20 20 31 3a 20 20 4e 4f 54 20 4e 55  **    1:  NOT NU
7900: 4c 4c 20 63 6f 6e 74 72 61 69 6e 74 20 66 61 69  LL contraint fai
7910: 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 32 3a  led: P4.**    2:
7920: 20 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61    UNIQUE constra
7930: 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a  int failed: P4.*
7940: 2a 20 20 20 20 33 3a 20 20 43 48 45 43 4b 20 63  *    3:  CHECK c
7950: 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64  onstraint failed
7960: 3a 20 50 34 0a 2a 2a 20 20 20 20 34 3a 20 20 46  : P4.**    4:  F
7970: 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74  OREIGN KEY const
7980: 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34  raint failed: P4
7990: 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
79a0: 6e 6f 74 20 7a 65 72 6f 20 61 6e 64 20 50 34 20  not zero and P4 
79b0: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 65 76  is NULL, then ev
79c0: 65 72 79 74 68 69 6e 67 20 61 66 74 65 72 20 74  erything after t
79d0: 68 65 20 22 3a 22 20 69 73 0a 2a 2a 20 6f 6d 69  he ":" is.** omi
79e0: 74 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72  tted..**.** Ther
79f0: 65 20 69 73 20 61 6e 20 69 6d 70 6c 69 65 64 20  e is an implied 
7a00: 22 48 61 6c 74 20 30 20 30 20 30 22 20 69 6e 73  "Halt 0 0 0" ins
7a10: 74 72 75 63 74 69 6f 6e 20 69 6e 73 65 72 74 65  truction inserte
7a20: 64 20 61 74 20 74 68 65 20 76 65 72 79 20 65 6e  d at the very en
7a30: 64 20 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70 72  d of.** every pr
7a40: 6f 67 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75 6d  ogram.  So a jum
7a50: 70 20 70 61 73 74 20 74 68 65 20 6c 61 73 74 20  p past the last 
7a60: 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74  instruction of t
7a70: 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69 73  he program.** is
7a80: 20 74 68 65 20 73 61 6d 65 20 61 73 20 65 78 65   the same as exe
7a90: 63 75 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a  cuting Halt..*/.
7aa0: 63 61 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a  case OP_Halt: {.
7ab0: 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
7ac0: 61 6d 65 3b 0a 20 20 69 6e 74 20 70 63 78 3b 0a  ame;.  int pcx;.
7ad0: 0a 20 20 70 63 78 20 3d 20 28 69 6e 74 29 28 70  .  pcx = (int)(p
7ae0: 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 69 66 28  Op - aOp);.  if(
7af0: 20 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54 45   pOp->p1==SQLITE
7b00: 5f 4f 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d 65  _OK && p->pFrame
7b10: 20 29 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74 20   ){.    /* Halt 
7b20: 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e  the sub-program.
7b30: 20 52 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c 20   Return control 
7b40: 74 6f 20 74 68 65 20 70 61 72 65 6e 74 20 66 72  to the parent fr
7b50: 61 6d 65 2e 20 2a 2f 0a 20 20 20 20 70 46 72 61  ame. */.    pFra
7b60: 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a  me = p->pFrame;.
7b70: 20 20 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20      p->pFrame = 
7b80: 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b  pFrame->pParent;
7b90: 0a 20 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d  .    p->nFrame--
7ba0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
7bb0: 65 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20  eSetChanges(db, 
7bc0: 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 20  p->nChange);.   
7bd0: 20 70 63 78 20 3d 20 73 71 6c 69 74 65 33 56 64   pcx = sqlite3Vd
7be0: 62 65 46 72 61 6d 65 52 65 73 74 6f 72 65 28 70  beFrameRestore(p
7bf0: 46 72 61 6d 65 29 3b 0a 20 20 20 20 69 66 28 20  Frame);.    if( 
7c00: 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f  pOp->p2==OE_Igno
7c10: 72 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  re ){.      /* I
7c20: 6e 73 74 72 75 63 74 69 6f 6e 20 70 63 78 20 69  nstruction pcx i
7c30: 73 20 74 68 65 20 4f 50 5f 50 72 6f 67 72 61 6d  s the OP_Program
7c40: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
7c50: 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 0a 20  e sub-program . 
7c60: 20 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 6c       ** currentl
7c70: 79 20 62 65 69 6e 67 20 68 61 6c 74 65 64 2e 20  y being halted. 
7c80: 49 66 20 74 68 65 20 70 32 20 69 6e 73 74 72 75  If the p2 instru
7c90: 63 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 4f 50  ction of this OP
7ca0: 5f 48 61 6c 74 0a 20 20 20 20 20 20 2a 2a 20 69  _Halt.      ** i
7cb0: 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 73 65  nstruction is se
7cc0: 74 20 74 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c 20  t to OE_Ignore, 
7cd0: 74 68 65 6e 20 74 68 65 20 73 75 62 2d 70 72 6f  then the sub-pro
7ce0: 67 72 61 6d 20 69 73 20 74 68 72 6f 77 69 6e 67  gram is throwing
7cf0: 0a 20 20 20 20 20 20 2a 2a 20 61 6e 20 49 47 4e  .      ** an IGN
7d00: 4f 52 45 20 65 78 63 65 70 74 69 6f 6e 2e 20 49  ORE exception. I
7d10: 6e 20 74 68 69 73 20 63 61 73 65 20 6a 75 6d 70  n this case jump
7d20: 20 74 6f 20 74 68 65 20 61 64 64 72 65 73 73 20   to the address 
7d30: 73 70 65 63 69 66 69 65 64 0a 20 20 20 20 20 20  specified.      
7d40: 2a 2a 20 61 73 20 74 68 65 20 70 32 20 6f 66 20  ** as the p2 of 
7d50: 74 68 65 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50  the calling OP_P
7d60: 72 6f 67 72 61 6d 2e 20 20 2a 2f 0a 20 20 20 20  rogram.  */.    
7d70: 20 20 70 63 78 20 3d 20 70 2d 3e 61 4f 70 5b 70    pcx = p->aOp[p
7d80: 63 78 5d 2e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a  cx].p2-1;.    }.
7d90: 20 20 20 20 61 4f 70 20 3d 20 70 2d 3e 61 4f 70      aOp = p->aOp
7da0: 3b 0a 20 20 20 20 61 4d 65 6d 20 3d 20 70 2d 3e  ;.    aMem = p->
7db0: 61 4d 65 6d 3b 0a 20 20 20 20 70 4f 70 20 3d 20  aMem;.    pOp = 
7dc0: 26 61 4f 70 5b 70 63 78 5d 3b 0a 20 20 20 20 62  &aOp[pcx];.    b
7dd0: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 2d 3e 72  reak;.  }.  p->r
7de0: 63 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  c = pOp->p1;.  p
7df0: 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20  ->errorAction = 
7e00: 28 75 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70  (u8)pOp->p2;.  p
7e10: 2d 3e 70 63 20 3d 20 70 63 78 3b 0a 20 20 61 73  ->pc = pcx;.  as
7e20: 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 3d 34  sert( pOp->p5<=4
7e30: 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 20   );.  if( p->rc 
7e40: 29 7b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  ){.    if( pOp->
7e50: 70 35 20 29 7b 0a 20 20 20 20 20 20 73 74 61 74  p5 ){.      stat
7e60: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20  ic const char * 
7e70: 63 6f 6e 73 74 20 61 7a 54 79 70 65 5b 5d 20 3d  const azType[] =
7e80: 20 7b 20 22 4e 4f 54 20 4e 55 4c 4c 22 2c 20 22   { "NOT NULL", "
7e90: 55 4e 49 51 55 45 22 2c 20 22 43 48 45 43 4b 22  UNIQUE", "CHECK"
7ea0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
7eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
7ed0: 46 4f 52 45 49 47 4e 20 4b 45 59 22 20 7d 3b 0a  FOREIGN KEY" };.
7ee0: 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
7ef0: 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20  pOp->p5==1 );.  
7f00: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f      testcase( pO
7f10: 70 2d 3e 70 35 3d 3d 32 20 29 3b 0a 20 20 20 20  p->p5==2 );.    
7f20: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
7f30: 3e 70 35 3d 3d 33 20 29 3b 0a 20 20 20 20 20 20  >p5==3 );.      
7f40: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
7f50: 35 3d 3d 34 20 29 3b 0a 20 20 20 20 20 20 73 71  5==4 );.      sq
7f60: 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
7f70: 2c 20 22 25 73 20 63 6f 6e 73 74 72 61 69 6e 74  , "%s constraint
7f80: 20 66 61 69 6c 65 64 22 2c 20 61 7a 54 79 70 65   failed", azType
7f90: 5b 70 4f 70 2d 3e 70 35 2d 31 5d 29 3b 0a 20 20  [pOp->p5-1]);.  
7fa0: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e      if( pOp->p4.
7fb0: 7a 20 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e  z ){.        p->
7fc0: 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65  zErrMsg = sqlite
7fd0: 33 4d 50 72 69 6e 74 66 28 64 62 2c 20 22 25 7a  3MPrintf(db, "%z
7fe0: 3a 20 25 73 22 2c 20 70 2d 3e 7a 45 72 72 4d 73  : %s", p->zErrMs
7ff0: 67 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  g, pOp->p4.z);. 
8000: 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
8010: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
8020: 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22  dbeError(p, "%s"
8030: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
8040: 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f    }.    sqlite3_
8050: 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c 20 22 61 62  log(pOp->p1, "ab
8060: 6f 72 74 20 61 74 20 25 64 20 69 6e 20 5b 25 73  ort at %d in [%s
8070: 5d 3a 20 25 73 22 2c 20 70 63 78 2c 20 70 2d 3e  ]: %s", pcx, p->
8080: 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  zSql, p->zErrMsg
8090: 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  );.  }.  rc = sq
80a0: 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29  lite3VdbeHalt(p)
80b0: 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d  ;.  assert( rc==
80c0: 53 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 72  SQLITE_BUSY || r
80d0: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
80e0: 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52  rc==SQLITE_ERROR
80f0: 20 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   );.  if( rc==SQ
8100: 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
8110: 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f   p->rc = SQLITE_
8120: 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  BUSY;.  }else{. 
8130: 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
8140: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e  QLITE_OK || (p->
8150: 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45  rc&0xff)==SQLITE
8160: 5f 43 4f 4e 53 54 52 41 49 4e 54 20 29 3b 0a 20  _CONSTRAINT );. 
8170: 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
8180: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e  QLITE_OK || db->
8190: 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3e 30 20  nDeferredCons>0 
81a0: 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  || db->nDeferred
81b0: 49 6d 6d 43 6f 6e 73 3e 30 20 29 3b 0a 20 20 20  ImmCons>0 );.   
81c0: 20 72 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51   rc = p->rc ? SQ
81d0: 4c 49 54 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c  LITE_ERROR : SQL
81e0: 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20  ITE_DONE;.  }.  
81f0: 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
8200: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
8210: 49 6e 74 65 67 65 72 20 50 31 20 50 32 20 2a 20  Integer P1 P2 * 
8220: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
8230: 20 72 5b 50 32 5d 3d 50 31 0a 2a 2a 0a 2a 2a 20   r[P2]=P1.**.** 
8240: 54 68 65 20 33 32 2d 62 69 74 20 69 6e 74 65 67  The 32-bit integ
8250: 65 72 20 76 61 6c 75 65 20 50 31 20 69 73 20 77  er value P1 is w
8260: 72 69 74 74 65 6e 20 69 6e 74 6f 20 72 65 67 69  ritten into regi
8270: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
8280: 20 4f 50 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20   OP_Integer: {  
8290: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
82a0: 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  /.  pOut = out2P
82b0: 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
82c0: 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
82d0: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61   pOp->p1;.  brea
82e0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
82f0: 20 49 6e 74 36 34 20 2a 20 50 32 20 2a 20 50 34   Int64 * P2 * P4
8300: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
8310: 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50  r[P2]=P4.**.** P
8320: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
8330: 6f 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67  o a 64-bit integ
8340: 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69  er value..** Wri
8350: 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e  te that value in
8360: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
8370: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36 34  */.case OP_Int64
8380: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
8390: 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20   out2 */.  pOut 
83a0: 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
83b0: 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65  (p, pOp);.  asse
83c0: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36 34  rt( pOp->p4.pI64
83d0: 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75  !=0 );.  pOut->u
83e0: 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 49  .i = *pOp->p4.pI
83f0: 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  64;.  break;.}..
8400: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
8410: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
8420: 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  NT./* Opcode: Re
8430: 61 6c 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a  al * P2 * P4 *.*
8440: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
8450: 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  ]=P4.**.** P4 is
8460: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
8470: 36 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20  64-bit floating 
8480: 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20  point value..** 
8490: 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65  Write that value
84a0: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
84b0: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  2..*/.case OP_Re
84c0: 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  al: {           
84d0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 46   /* same as TK_F
84e0: 4c 4f 41 54 2c 20 6f 75 74 32 20 2a 2f 0a 20 20  LOAT, out2 */.  
84f0: 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
8500: 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
8510: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
8520: 45 4d 5f 52 65 61 6c 3b 0a 20 20 61 73 73 65 72  EM_Real;.  asser
8530: 74 28 20 21 73 71 6c 69 74 65 33 49 73 4e 61 4e  t( !sqlite3IsNaN
8540: 28 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 29  (*pOp->p4.pReal)
8550: 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 72 20   );.  pOut->u.r 
8560: 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c  = *pOp->p4.pReal
8570: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
8580: 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  dif../* Opcode: 
8590: 53 74 72 69 6e 67 38 20 2a 20 50 32 20 2a 20 50  String8 * P2 * P
85a0: 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
85b0: 20 72 5b 50 32 5d 3d 27 50 34 27 0a 2a 2a 0a 2a   r[P2]='P4'.**.*
85c0: 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61  * P4 points to a
85d0: 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 65 64 20   nul terminated 
85e0: 55 54 46 2d 38 20 73 74 72 69 6e 67 2e 20 54 68  UTF-8 string. Th
85f0: 69 73 20 6f 70 63 6f 64 65 20 69 73 20 74 72 61  is opcode is tra
8600: 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74  nsformed .** int
8610: 6f 20 61 20 53 74 72 69 6e 67 20 6f 70 63 6f 64  o a String opcod
8620: 65 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 65  e before it is e
8630: 78 65 63 75 74 65 64 20 66 6f 72 20 74 68 65 20  xecuted for the 
8640: 66 69 72 73 74 20 74 69 6d 65 2e 20 20 44 75 72  first time.  Dur
8650: 69 6e 67 0a 2a 2a 20 74 68 69 73 20 74 72 61 6e  ing.** this tran
8660: 73 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20  sformation, the 
8670: 6c 65 6e 67 74 68 20 6f 66 20 73 74 72 69 6e 67  length of string
8680: 20 50 34 20 69 73 20 63 6f 6d 70 75 74 65 64 20   P4 is computed 
8690: 61 6e 64 20 73 74 6f 72 65 64 0a 2a 2a 20 61 73  and stored.** as
86a0: 20 74 68 65 20 50 31 20 70 61 72 61 6d 65 74 65   the P1 paramete
86b0: 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74  r..*/.case OP_St
86c0: 72 69 6e 67 38 3a 20 7b 20 20 20 20 20 20 20 20  ring8: {        
86d0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53   /* same as TK_S
86e0: 54 52 49 4e 47 2c 20 6f 75 74 32 20 2a 2f 0a 20  TRING, out2 */. 
86f0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
8700: 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20  .z!=0 );.  pOut 
8710: 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
8720: 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 70 2d  (p, pOp);.  pOp-
8730: 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72  >opcode = OP_Str
8740: 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d  ing;.  pOp->p1 =
8750: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
8760: 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69  (pOp->p4.z);..#i
8770: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
8780: 54 5f 55 54 46 31 36 0a 20 20 69 66 28 20 65 6e  T_UTF16.  if( en
8790: 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55  coding!=SQLITE_U
87a0: 54 46 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  TF8 ){.    rc = 
87b0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
87c0: 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e  tStr(pOut, pOp->
87d0: 70 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45  p4.z, -1, SQLITE
87e0: 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54  _UTF8, SQLITE_ST
87f0: 41 54 49 43 29 3b 0a 20 20 20 20 61 73 73 65 72  ATIC);.    asser
8800: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
8810: 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 54   || rc==SQLITE_T
8820: 4f 4f 42 49 47 20 29 3b 0a 20 20 20 20 69 66 28  OOBIG );.    if(
8830: 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69   SQLITE_OK!=sqli
8840: 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
8850: 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f  oding(pOut, enco
8860: 64 69 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f  ding) ) goto no_
8870: 6d 65 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  mem;.    assert(
8880: 20 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 3e   pOut->szMalloc>
8890: 30 20 26 26 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c  0 && pOut->zMall
88a0: 6f 63 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a 20  oc==pOut->z );. 
88b0: 20 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d     assert( VdbeM
88c0: 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 3d  emDynamic(pOut)=
88d0: 3d 30 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  =0 );.    pOut->
88e0: 73 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20  szMalloc = 0;.  
88f0: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d    pOut->flags |=
8900: 20 4d 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20   MEM_Static;.   
8910: 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
8920: 3d 3d 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a  ==P4_DYNAMIC ){.
8930: 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
8940: 72 65 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e  ree(db, pOp->p4.
8950: 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f  z);.    }.    pO
8960: 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 44  p->p4type = P4_D
8970: 59 4e 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d  YNAMIC;.    pOp-
8980: 3e 70 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b  >p4.z = pOut->z;
8990: 0a 20 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70  .    pOp->p1 = p
89a0: 4f 75 74 2d 3e 6e 3b 0a 20 20 7d 0a 20 20 74 65  Out->n;.  }.  te
89b0: 73 74 63 61 73 65 28 20 72 63 3d 3d 53 51 4c 49  stcase( rc==SQLI
89c0: 54 45 5f 54 4f 4f 42 49 47 20 29 3b 0a 23 65 6e  TE_TOOBIG );.#en
89d0: 64 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  dif.  if( pOp->p
89e0: 31 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  1>db->aLimit[SQL
89f0: 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
8a00: 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ] ){.    goto to
8a10: 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 61 73 73  o_big;.  }.  ass
8a20: 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
8a30: 4f 4b 20 29 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20  OK );.  /* Fall 
8a40: 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
8a50: 65 78 74 20 63 61 73 65 2c 20 4f 50 5f 53 74 72  ext case, OP_Str
8a60: 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f  ing */.}.  ./* O
8a70: 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 20 50 31  pcode: String P1
8a80: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
8a90: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
8aa0: 27 50 34 27 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a  'P4' (len=P1).**
8ab0: 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20 76  .** The string v
8ac0: 61 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e 67 74  alue P4 of lengt
8ad0: 68 20 50 31 20 28 62 79 74 65 73 29 20 69 73 20  h P1 (bytes) is 
8ae0: 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
8af0: 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P2..**.** If 
8b00: 50 33 20 69 73 20 6e 6f 74 20 7a 65 72 6f 20 61  P3 is not zero a
8b10: 6e 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  nd the content o
8b20: 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  f register P3 is
8b30: 20 65 71 75 61 6c 20 74 6f 20 50 35 2c 20 74 68   equal to P5, th
8b40: 65 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 74 79  en.** the dataty
8b50: 70 65 20 6f 66 20 74 68 65 20 72 65 67 69 73 74  pe of the regist
8b60: 65 72 20 50 32 20 69 73 20 63 6f 6e 76 65 72 74  er P2 is convert
8b70: 65 64 20 74 6f 20 42 4c 4f 42 2e 20 20 54 68 65  ed to BLOB.  The
8b80: 20 63 6f 6e 74 65 6e 74 20 69 73 0a 2a 2a 20 74   content is.** t
8b90: 68 65 20 73 61 6d 65 20 73 65 71 75 65 6e 63 65  he same sequence
8ba0: 20 6f 66 20 62 79 74 65 73 2c 20 69 74 20 69 73   of bytes, it is
8bb0: 20 6d 65 72 65 6c 79 20 69 6e 74 65 72 70 72 65   merely interpre
8bc0: 74 65 64 20 61 73 20 61 20 42 4c 4f 42 20 69 6e  ted as a BLOB in
8bd0: 73 74 65 61 64 0a 2a 2a 20 6f 66 20 61 20 73 74  stead.** of a st
8be0: 72 69 6e 67 2c 20 61 73 20 69 66 20 69 74 20 68  ring, as if it h
8bf0: 61 64 20 62 65 65 6e 20 43 41 53 54 2e 20 20 49  ad been CAST.  I
8c00: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 3a 0a 2a  n other words:.*
8c10: 2a 0a 2a 2a 20 69 66 28 20 50 33 21 3d 30 20 61  *.** if( P3!=0 a
8c20: 6e 64 20 72 65 67 5b 50 33 5d 3d 3d 50 35 20 29  nd reg[P3]==P5 )
8c30: 20 72 65 67 5b 50 32 5d 20 3a 3d 20 43 41 53 54   reg[P2] := CAST
8c40: 28 72 65 67 5b 50 32 5d 20 61 73 20 42 4c 4f 42  (reg[P2] as BLOB
8c50: 29 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72  ).*/.case OP_Str
8c60: 69 6e 67 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ing: {          
8c70: 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73  /* out2 */.  ass
8c80: 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d  ert( pOp->p4.z!=
8c90: 30 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  0 );.  pOut = ou
8ca0: 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
8cb0: 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  pOp);.  pOut->fl
8cc0: 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45  ags = MEM_Str|ME
8cd0: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72  M_Static|MEM_Ter
8ce0: 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70  m;.  pOut->z = p
8cf0: 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74  Op->p4.z;.  pOut
8d00: 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  ->n = pOp->p1;. 
8d10: 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63   pOut->enc = enc
8d20: 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f  oding;.  UPDATE_
8d30: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
8d40: 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
8d50: 54 45 5f 4c 49 4b 45 5f 44 4f 45 53 4e 54 5f 4d  TE_LIKE_DOESNT_M
8d60: 41 54 43 48 5f 42 4c 4f 42 53 0a 20 20 69 66 28  ATCH_BLOBS.  if(
8d70: 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20   pOp->p3>0 ){.  
8d80: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
8d90: 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  3<=(p->nMem+1 - 
8da0: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
8db0: 20 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b     pIn3 = &aMem[
8dc0: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73  pOp->p3];.    as
8dd0: 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67  sert( pIn3->flag
8de0: 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
8df0: 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 69     if( pIn3->u.i
8e00: 3d 3d 70 4f 70 2d 3e 70 35 20 29 20 70 4f 75 74  ==pOp->p5 ) pOut
8e10: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c  ->flags = MEM_Bl
8e20: 6f 62 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  ob|MEM_Static|ME
8e30: 4d 5f 54 65 72 6d 3b 0a 20 20 7d 0a 23 65 6e 64  M_Term;.  }.#end
8e40: 69 66 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  if.  break;.}../
8e50: 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 50  * Opcode: Null P
8e60: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
8e70: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 2e 2e 50  ynopsis: r[P2..P
8e80: 33 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 57 72  3]=NULL.**.** Wr
8e90: 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f 20  ite a NULL into 
8ea0: 72 65 67 69 73 74 65 72 73 20 50 32 2e 20 20 49  registers P2.  I
8eb0: 66 20 50 33 20 67 72 65 61 74 65 72 20 74 68 61  f P3 greater tha
8ec0: 6e 20 50 32 2c 20 74 68 65 6e 20 61 6c 73 6f 20  n P2, then also 
8ed0: 77 72 69 74 65 0a 2a 2a 20 4e 55 4c 4c 20 69 6e  write.** NULL in
8ee0: 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 20 61  to register P3 a
8ef0: 6e 64 20 65 76 65 72 79 20 72 65 67 69 73 74 65  nd every registe
8f00: 72 20 69 6e 20 62 65 74 77 65 65 6e 20 50 32 20  r in between P2 
8f10: 61 6e 64 20 50 33 2e 20 20 49 66 20 50 33 0a 2a  and P3.  If P3.*
8f20: 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 50  * is less than P
8f30: 32 20 28 74 79 70 69 63 61 6c 6c 79 20 50 33 20  2 (typically P3 
8f40: 69 73 20 7a 65 72 6f 29 20 74 68 65 6e 20 6f 6e  is zero) then on
8f50: 6c 79 20 72 65 67 69 73 74 65 72 20 50 32 20 69  ly register P2 i
8f60: 73 0a 2a 2a 20 73 65 74 20 74 6f 20 4e 55 4c 4c  s.** set to NULL
8f70: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
8f80: 31 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a  1 value is non-z
8f90: 65 72 6f 2c 20 74 68 65 6e 20 61 6c 73 6f 20 73  ero, then also s
8fa0: 65 74 20 74 68 65 20 4d 45 4d 5f 43 6c 65 61 72  et the MEM_Clear
8fb0: 65 64 20 66 6c 61 67 20 73 6f 20 74 68 61 74 0a  ed flag so that.
8fc0: 2a 2a 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 77  ** NULL values w
8fd0: 69 6c 6c 20 6e 6f 74 20 63 6f 6d 70 61 72 65 20  ill not compare 
8fe0: 65 71 75 61 6c 20 65 76 65 6e 20 69 66 20 53 51  equal even if SQ
8ff0: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73  LITE_NULLEQ is s
9000: 65 74 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e 65 20 6f  et on.** OP_Ne o
9010: 72 20 4f 50 5f 45 71 2e 0a 2a 2f 0a 63 61 73 65  r OP_Eq..*/.case
9020: 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20 20   OP_Null: {     
9030: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
9040: 0a 20 20 69 6e 74 20 63 6e 74 3b 0a 20 20 75 31  .  int cnt;.  u1
9050: 36 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 70 4f  6 nullFlag;.  pO
9060: 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
9070: 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 63  ase(p, pOp);.  c
9080: 6e 74 20 3d 20 70 4f 70 2d 3e 70 33 2d 70 4f 70  nt = pOp->p3-pOp
9090: 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
90a0: 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
90b0: 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
90c0: 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  ) );.  pOut->fla
90d0: 67 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 20 3d 20  gs = nullFlag = 
90e0: 70 4f 70 2d 3e 70 31 20 3f 20 28 4d 45 4d 5f 4e  pOp->p1 ? (MEM_N
90f0: 75 6c 6c 7c 4d 45 4d 5f 43 6c 65 61 72 65 64 29  ull|MEM_Cleared)
9100: 20 3a 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 70   : MEM_Null;.  p
9110: 4f 75 74 2d 3e 6e 20 3d 20 30 3b 0a 20 20 77 68  Out->n = 0;.  wh
9120: 69 6c 65 28 20 63 6e 74 3e 30 20 29 7b 0a 20 20  ile( cnt>0 ){.  
9130: 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 6d 65    pOut++;.    me
9140: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
9150: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c  , pOut);.    sql
9160: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
9170: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 70 4f  ll(pOut);.    pO
9180: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c  ut->flags = null
9190: 46 6c 61 67 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  Flag;.    pOut->
91a0: 6e 20 3d 20 30 3b 0a 20 20 20 20 63 6e 74 2d 2d  n = 0;.    cnt--
91b0: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
91c0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 66  ../* Opcode: Sof
91d0: 74 4e 75 6c 6c 20 50 31 20 2a 20 2a 20 2a 20 2a  tNull P1 * * * *
91e0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
91f0: 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 53  P1]=NULL.**.** S
9200: 65 74 20 72 65 67 69 73 74 65 72 20 50 31 20 74  et register P1 t
9210: 6f 20 68 61 76 65 20 74 68 65 20 76 61 6c 75 65  o have the value
9220: 20 4e 55 4c 4c 20 61 73 20 73 65 65 6e 20 62 79   NULL as seen by
9230: 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f   the OP_MakeReco
9240: 72 64 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f  rd.** instructio
9250: 6e 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 66 72  n, but do not fr
9260: 65 65 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72  ee any string or
9270: 20 62 6c 6f 62 20 6d 65 6d 6f 72 79 20 61 73 73   blob memory ass
9280: 6f 63 69 61 74 65 64 20 77 69 74 68 0a 2a 2a 20  ociated with.** 
9290: 74 68 65 20 72 65 67 69 73 74 65 72 2c 20 73 6f  the register, so
92a0: 20 74 68 61 74 20 69 66 20 74 68 65 20 76 61 6c   that if the val
92b0: 75 65 20 77 61 73 20 61 20 73 74 72 69 6e 67 20  ue was a string 
92c0: 6f 72 20 62 6c 6f 62 20 74 68 61 74 20 77 61 73  or blob that was
92d0: 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 63  .** previously c
92e0: 6f 70 69 65 64 20 75 73 69 6e 67 20 4f 50 5f 53  opied using OP_S
92f0: 43 6f 70 79 2c 20 74 68 65 20 63 6f 70 69 65 73  Copy, the copies
9300: 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75 65 20 74   will continue t
9310: 6f 20 62 65 20 76 61 6c 69 64 2e 0a 2a 2f 0a 63  o be valid..*/.c
9320: 61 73 65 20 4f 50 5f 53 6f 66 74 4e 75 6c 6c 3a  ase OP_SoftNull:
9330: 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
9340: 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p1>0 && pOp->p
9350: 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  1<=(p->nMem+1 - 
9360: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
9370: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
9380: 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 2d 3e  p->p1];.  pOut->
9390: 66 6c 61 67 73 20 3d 20 28 70 4f 75 74 2d 3e 66  flags = (pOut->f
93a0: 6c 61 67 73 26 7e 28 4d 45 4d 5f 55 6e 64 65 66  lags&~(MEM_Undef
93b0: 69 6e 65 64 7c 4d 45 4d 5f 41 66 66 4d 61 73 6b  ined|MEM_AffMask
93c0: 29 29 7c 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 62  ))|MEM_Null;.  b
93d0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
93e0: 64 65 3a 20 42 6c 6f 62 20 50 31 20 50 32 20 2a  de: Blob P1 P2 *
93f0: 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
9400: 73 3a 20 72 5b 50 32 5d 3d 50 34 20 28 6c 65 6e  s: r[P2]=P4 (len
9410: 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f  =P1).**.** P4 po
9420: 69 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62 20 6f  ints to a blob o
9430: 66 20 64 61 74 61 20 50 31 20 62 79 74 65 73 20  f data P1 bytes 
9440: 6c 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74 68 69  long.  Store thi
9450: 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65 67  s.** blob in reg
9460: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
9470: 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20 20  e OP_Blob: {    
9480: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
9490: 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ut2 */.  assert(
94a0: 20 70 4f 70 2d 3e 70 31 20 3c 3d 20 53 51 4c 49   pOp->p1 <= SQLI
94b0: 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 20 29 3b  TE_MAX_LENGTH );
94c0: 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
94d0: 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
94e0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
94f0: 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70  emSetStr(pOut, p
9500: 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d 3e 70  Op->p4.z, pOp->p
9510: 31 2c 20 30 2c 20 30 29 3b 0a 20 20 70 4f 75 74  1, 0, 0);.  pOut
9520: 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
9530: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
9540: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
9550: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
9560: 63 6f 64 65 3a 20 56 61 72 69 61 62 6c 65 20 50  code: Variable P
9570: 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  1 P2 * P4 *.** S
9580: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 70  ynopsis: r[P2]=p
9590: 61 72 61 6d 65 74 65 72 28 50 31 2c 50 34 29 0a  arameter(P1,P4).
95a0: 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20 74  **.** Transfer t
95b0: 68 65 20 76 61 6c 75 65 73 20 6f 66 20 62 6f 75  he values of bou
95c0: 6e 64 20 70 61 72 61 6d 65 74 65 72 20 50 31 20  nd parameter P1 
95d0: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
95e0: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 70 61  .**.** If the pa
95f0: 72 61 6d 65 74 65 72 20 69 73 20 6e 61 6d 65 64  rameter is named
9600: 2c 20 74 68 65 6e 20 69 74 73 20 6e 61 6d 65 20  , then its name 
9610: 61 70 70 65 61 72 73 20 69 6e 20 50 34 2e 0a 2a  appears in P4..*
9620: 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 69  * The P4 value i
9630: 73 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65  s used by sqlite
9640: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
9650: 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61 73 65  _name()..*/.case
9660: 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a 20 7b 20   OP_Variable: { 
9670: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
9680: 74 32 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 56 61  t2 */.  Mem *pVa
9690: 72 3b 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75  r;       /* Valu
96a0: 65 20 62 65 69 6e 67 20 74 72 61 6e 73 66 65 72  e being transfer
96b0: 72 65 64 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74  red */..  assert
96c0: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70  ( pOp->p1>0 && p
96d0: 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 56 61 72 20  Op->p1<=p->nVar 
96e0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
96f0: 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c 20 70 4f 70  ->p4.z==0 || pOp
9700: 2d 3e 70 34 2e 7a 3d 3d 73 71 6c 69 74 65 33 56  ->p4.z==sqlite3V
9710: 4c 69 73 74 4e 75 6d 54 6f 4e 61 6d 65 28 70 2d  ListNumToName(p-
9720: 3e 70 56 4c 69 73 74 2c 70 4f 70 2d 3e 70 31 29  >pVList,pOp->p1)
9730: 20 29 3b 0a 20 20 70 56 61 72 20 3d 20 26 70 2d   );.  pVar = &p-
9740: 3e 61 56 61 72 5b 70 4f 70 2d 3e 70 31 20 2d 20  >aVar[pOp->p1 - 
9750: 31 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  1];.  if( sqlite
9760: 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70  3VdbeMemTooBig(p
9770: 56 61 72 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  Var) ){.    goto
9780: 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
9790: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
97a0: 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33  ->p2];.  sqlite3
97b0: 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
97c0: 70 79 28 70 4f 75 74 2c 20 70 56 61 72 2c 20 4d  py(pOut, pVar, M
97d0: 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 55 50  EM_Static);.  UP
97e0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
97f0: 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
9800: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
9810: 4d 6f 76 65 20 50 31 20 50 32 20 50 33 20 2a 20  Move P1 P2 P3 * 
9820: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
9830: 5b 50 32 40 50 33 5d 3d 72 5b 50 31 40 50 33 5d  [P2@P3]=r[P1@P3]
9840: 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20  .**.** Move the 
9850: 50 33 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  P3 values in reg
9860: 69 73 74 65 72 20 50 31 2e 2e 50 31 2b 50 33 2d  ister P1..P1+P3-
9870: 31 20 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a 20 72  1 over into.** r
9880: 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b  egisters P2..P2+
9890: 50 33 2d 31 2e 20 20 52 65 67 69 73 74 65 72 73  P3-1.  Registers
98a0: 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61 72 65   P1..P1+P3-1 are
98b0: 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c 64 69 6e 67  .** left holding
98c0: 20 61 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20   a NULL.  It is 
98d0: 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 72 65 67  an error for reg
98e0: 69 73 74 65 72 20 72 61 6e 67 65 73 0a 2a 2a 20  ister ranges.** 
98f0: 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61 6e 64 20  P1..P1+P3-1 and 
9900: 50 32 2e 2e 50 32 2b 50 33 2d 31 20 74 6f 20 6f  P2..P2+P3-1 to o
9910: 76 65 72 6c 61 70 2e 20 20 49 74 20 69 73 20 61  verlap.  It is a
9920: 6e 20 65 72 72 6f 72 0a 2a 2a 20 66 6f 72 20 50  n error.** for P
9930: 33 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61  3 to be less tha
9940: 6e 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  n 1..*/.case OP_
9950: 4d 6f 76 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b  Move: {.  int n;
9960: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
9970: 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72  mber of register
9980: 73 20 6c 65 66 74 20 74 6f 20 63 6f 70 79 20 2a  s left to copy *
9990: 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20  /.  int p1;     
99a0: 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
99b0: 20 74 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a 2f   to copy from */
99c0: 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20  .  int p2;      
99d0: 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
99e0: 74 6f 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20  to copy to */.. 
99f0: 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20   n = pOp->p3;.  
9a00: 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  p1 = pOp->p1;.  
9a10: 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  p2 = pOp->p2;.  
9a20: 61 73 73 65 72 74 28 20 6e 3e 30 20 26 26 20 70  assert( n>0 && p
9a30: 31 3e 30 20 26 26 20 70 32 3e 30 20 29 3b 0a 20  1>0 && p2>0 );. 
9a40: 20 61 73 73 65 72 74 28 20 70 31 2b 6e 3c 3d 70   assert( p1+n<=p
9a50: 32 20 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20 29 3b  2 || p2+n<=p1 );
9a60: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
9a70: 5b 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  [p1];.  pOut = &
9a80: 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 64 6f 7b 0a  aMem[p2];.  do{.
9a90: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 75 74      assert( pOut
9aa0: 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d  <=&aMem[(p->nMem
9ab0: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
9ac0: 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ] );.    assert(
9ad0: 20 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b 28 70 2d   pIn1<=&aMem[(p-
9ae0: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
9af0: 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73  rsor)] );.    as
9b00: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
9b10: 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 6d 65  (pIn1) );.    me
9b20: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
9b30: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c  , pOut);.    sql
9b40: 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28  ite3VdbeMemMove(
9b50: 70 4f 75 74 2c 20 70 49 6e 31 29 3b 0a 23 69 66  pOut, pIn1);.#if
9b60: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
9b70: 0a 20 20 20 20 69 66 28 20 70 4f 75 74 2d 3e 70  .    if( pOut->p
9b80: 53 63 6f 70 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d  ScopyFrom>=&aMem
9b90: 5b 70 31 5d 20 26 26 20 70 4f 75 74 2d 3e 70 53  [p1] && pOut->pS
9ba0: 63 6f 70 79 46 72 6f 6d 3c 70 4f 75 74 20 29 7b  copyFrom<pOut ){
9bb0: 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 70 53 63  .      pOut->pSc
9bc0: 6f 70 79 46 72 6f 6d 20 2b 3d 20 70 4f 70 2d 3e  opyFrom += pOp->
9bd0: 70 32 20 2d 20 70 31 3b 0a 20 20 20 20 7d 0a 23  p2 - p1;.    }.#
9be0: 65 6e 64 69 66 0a 20 20 20 20 44 65 65 70 68 65  endif.    Deephe
9bf0: 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a  meralize(pOut);.
9c00: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
9c10: 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a  CE(p2++, pOut);.
9c20: 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 20 20      pIn1++;.    
9c30: 70 4f 75 74 2b 2b 3b 0a 20 20 7d 77 68 69 6c 65  pOut++;.  }while
9c40: 28 20 2d 2d 6e 20 29 3b 0a 20 20 62 72 65 61 6b  ( --n );.  break
9c50: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
9c60: 43 6f 70 79 20 50 31 20 50 32 20 50 33 20 2a 20  Copy P1 P2 P3 * 
9c70: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
9c80: 5b 50 32 40 50 33 2b 31 5d 3d 72 5b 50 31 40 50  [P2@P3+1]=r[P1@P
9c90: 33 2b 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20  3+1].**.** Make 
9ca0: 61 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74  a copy of regist
9cb0: 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 20 69 6e  ers P1..P1+P3 in
9cc0: 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 32 2e  to registers P2.
9cd0: 2e 50 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68  .P2+P3..**.** Th
9ce0: 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d  is instruction m
9cf0: 61 6b 65 73 20 61 20 64 65 65 70 20 63 6f 70 79  akes a deep copy
9d00: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20   of the value.  
9d10: 41 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 69  A duplicate.** i
9d20: 73 20 6d 61 64 65 20 6f 66 20 61 6e 79 20 73 74  s made of any st
9d30: 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63 6f 6e  ring or blob con
9d40: 73 74 61 6e 74 2e 20 20 53 65 65 20 61 6c 73 6f  stant.  See also
9d50: 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61   OP_SCopy..*/.ca
9d60: 73 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 0a 20 20  se OP_Copy: {.  
9d70: 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f  int n;..  n = pO
9d80: 70 2d 3e 70 33 3b 0a 20 20 70 49 6e 31 20 3d 20  p->p3;.  pIn1 = 
9d90: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
9da0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
9db0: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
9dc0: 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b  t( pOut!=pIn1 );
9dd0: 0a 20 20 77 68 69 6c 65 28 20 31 20 29 7b 0a 20  .  while( 1 ){. 
9de0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
9df0: 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75  mShallowCopy(pOu
9e00: 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68  t, pIn1, MEM_Eph
9e10: 65 6d 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d  em);.    Deephem
9e20: 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 23  eralize(pOut);.#
9e30: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
9e40: 55 47 0a 20 20 20 20 70 4f 75 74 2d 3e 70 53 63  UG.    pOut->pSc
9e50: 6f 70 79 46 72 6f 6d 20 3d 20 30 3b 0a 23 65 6e  opyFrom = 0;.#en
9e60: 64 69 66 0a 20 20 20 20 52 45 47 49 53 54 45 52  dif.    REGISTER
9e70: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 70  _TRACE(pOp->p2+p
9e80: 4f 70 2d 3e 70 33 2d 6e 2c 20 70 4f 75 74 29 3b  Op->p3-n, pOut);
9e90: 0a 20 20 20 20 69 66 28 20 28 6e 2d 2d 29 3d 3d  .    if( (n--)==
9ea0: 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 70  0 ) break;.    p
9eb0: 4f 75 74 2b 2b 3b 0a 20 20 20 20 70 49 6e 31 2b  Out++;.    pIn1+
9ec0: 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  +;.  }.  break;.
9ed0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 43  }../* Opcode: SC
9ee0: 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  opy P1 P2 * * *.
9ef0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
9f00: 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 4d  2]=r[P1].**.** M
9f10: 61 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f  ake a shallow co
9f20: 70 79 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  py of register P
9f30: 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  1 into register 
9f40: 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  P2..**.** This i
9f50: 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73  nstruction makes
9f60: 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20   a shallow copy 
9f70: 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 49  of the value.  I
9f80: 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  f the value.** i
9f90: 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c  s a string or bl
9fa0: 6f 62 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 70  ob, then the cop
9fb0: 79 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f 69 6e  y is only a poin
9fc0: 74 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6f 72  ter to the.** or
9fd0: 69 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e 63 65  iginal and hence
9fe0: 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   if the original
9ff0: 20 63 68 61 6e 67 65 73 20 73 6f 20 77 69 6c 6c   changes so will
a000: 20 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f   the copy..** Wo
a010: 72 73 65 2c 20 69 66 20 74 68 65 20 6f 72 69 67  rse, if the orig
a020: 69 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f 63 61  inal is dealloca
a030: 74 65 64 2c 20 74 68 65 20 63 6f 70 79 20 62 65  ted, the copy be
a040: 63 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e 0a 2a  comes invalid..*
a050: 2a 20 54 68 75 73 20 74 68 65 20 70 72 6f 67 72  * Thus the progr
a060: 61 6d 20 6d 75 73 74 20 67 75 61 72 61 6e 74 65  am must guarante
a070: 65 20 74 68 61 74 20 74 68 65 20 6f 72 69 67 69  e that the origi
a080: 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63 68 61  nal will not cha
a090: 6e 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20 74 68  nge.** during th
a0a0: 65 20 6c 69 66 65 74 69 6d 65 20 6f 66 20 74 68  e lifetime of th
a0b0: 65 20 63 6f 70 79 2e 20 20 55 73 65 20 4f 50 5f  e copy.  Use OP_
a0c0: 43 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61 20 63  Copy to make a c
a0d0: 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70 79 2e  omplete.** copy.
a0e0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43 6f 70  .*/.case OP_SCop
a0f0: 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  y: {            
a100: 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e  /* out2 */.  pIn
a110: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
a120: 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  1];.  pOut = &aM
a130: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
a140: 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e  ssert( pOut!=pIn
a150: 31 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  1 );.  sqlite3Vd
a160: 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79  beMemShallowCopy
a170: 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d  (pOut, pIn1, MEM
a180: 5f 45 70 68 65 6d 29 3b 0a 23 69 66 64 65 66 20  _Ephem);.#ifdef 
a190: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
a1a0: 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46  f( pOut->pScopyF
a1b0: 72 6f 6d 3d 3d 30 20 29 20 70 4f 75 74 2d 3e 70  rom==0 ) pOut->p
a1c0: 53 63 6f 70 79 46 72 6f 6d 20 3d 20 70 49 6e 31  ScopyFrom = pIn1
a1d0: 3b 0a 23 65 6e 64 69 66 0a 20 20 62 72 65 61 6b  ;.#endif.  break
a1e0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
a1f0: 49 6e 74 43 6f 70 79 20 50 31 20 50 32 20 2a 20  IntCopy P1 P2 * 
a200: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
a210: 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a   r[P2]=r[P1].**.
a220: 2a 2a 20 54 72 61 6e 73 66 65 72 20 74 68 65 20  ** Transfer the 
a230: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 68 65  integer value he
a240: 6c 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ld in register P
a250: 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  1 into register 
a260: 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  P2..**.** This i
a270: 73 20 61 6e 20 6f 70 74 69 6d 69 7a 65 64 20 76  s an optimized v
a280: 65 72 73 69 6f 6e 20 6f 66 20 53 43 6f 70 79 20  ersion of SCopy 
a290: 74 68 61 74 20 77 6f 72 6b 73 20 6f 6e 6c 79 20  that works only 
a2a0: 66 6f 72 20 69 6e 74 65 67 65 72 0a 2a 2a 20 76  for integer.** v
a2b0: 61 6c 75 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  alues..*/.case O
a2c0: 50 5f 49 6e 74 43 6f 70 79 3a 20 7b 20 20 20 20  P_IntCopy: {    
a2d0: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
a2e0: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
a2f0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
a300: 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61  sert( (pIn1->fla
a310: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
a320: 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d   );.  pOut = &aM
a330: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73  em[pOp->p2];.  s
a340: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
a350: 49 6e 74 36 34 28 70 4f 75 74 2c 20 70 49 6e 31  Int64(pOut, pIn1
a360: 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b  ->u.i);.  break;
a370: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
a380: 65 73 75 6c 74 52 6f 77 20 50 31 20 50 32 20 2a  esultRow P1 P2 *
a390: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
a3a0: 3a 20 6f 75 74 70 75 74 3d 72 5b 50 31 40 50 32  : output=r[P1@P2
a3b0: 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69  ].**.** The regi
a3c0: 73 74 65 72 73 20 50 31 20 74 68 72 6f 75 67 68  sters P1 through
a3d0: 20 50 31 2b 50 32 2d 31 20 63 6f 6e 74 61 69 6e   P1+P2-1 contain
a3e0: 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66   a single row of
a3f0: 0a 2a 2a 20 72 65 73 75 6c 74 73 2e 20 54 68 69  .** results. Thi
a400: 73 20 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20  s opcode causes 
a410: 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70  the sqlite3_step
a420: 28 29 20 63 61 6c 6c 20 74 6f 20 74 65 72 6d 69  () call to termi
a430: 6e 61 74 65 0a 2a 2a 20 77 69 74 68 20 61 6e 20  nate.** with an 
a440: 53 51 4c 49 54 45 5f 52 4f 57 20 72 65 74 75 72  SQLITE_ROW retur
a450: 6e 20 63 6f 64 65 20 61 6e 64 20 69 74 20 73 65  n code and it se
a460: 74 73 20 75 70 20 74 68 65 20 73 71 6c 69 74 65  ts up the sqlite
a470: 33 5f 73 74 6d 74 0a 2a 2a 20 73 74 72 75 63 74  3_stmt.** struct
a480: 75 72 65 20 74 6f 20 70 72 6f 76 69 64 65 20 61  ure to provide a
a490: 63 63 65 73 73 20 74 6f 20 74 68 65 20 72 28 50  ccess to the r(P
a4a0: 31 29 2e 2e 72 28 50 31 2b 50 32 2d 31 29 20 76  1)..r(P1+P2-1) v
a4b0: 61 6c 75 65 73 20 61 73 0a 2a 2a 20 74 68 65 20  alues as.** the 
a4c0: 72 65 73 75 6c 74 20 72 6f 77 2e 0a 2a 2f 0a 63  result row..*/.c
a4d0: 61 73 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  ase OP_ResultRow
a4e0: 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b  : {.  Mem *pMem;
a4f0: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 61 73 73 65  .  int i;.  asse
a500: 72 74 28 20 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d  rt( p->nResColum
a510: 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20  n==pOp->p2 );.  
a520: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
a530: 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
a540: 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d  Op->p1+pOp->p2<=
a550: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
a560: 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 0a 23  nCursor)+1 );..#
a570: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
a580: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
a590: 42 41 43 4b 0a 20 20 2f 2a 20 52 75 6e 20 74 68  BACK.  /* Run th
a5a0: 65 20 70 72 6f 67 72 65 73 73 20 63 6f 75 6e 74  e progress count
a5b0: 65 72 20 6a 75 73 74 20 62 65 66 6f 72 65 20 72  er just before r
a5c0: 65 74 75 72 6e 69 6e 67 2e 0a 20 20 2a 2f 0a 20  eturning..  */. 
a5d0: 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65   if( db->xProgre
a5e0: 73 73 21 3d 30 0a 20 20 20 26 26 20 6e 56 6d 53  ss!=0.   && nVmS
a5f0: 74 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69  tep>=nProgressLi
a600: 6d 69 74 20 0a 20 20 20 26 26 20 64 62 2d 3e 78  mit .   && db->x
a610: 50 72 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72  Progress(db->pPr
a620: 6f 67 72 65 73 73 41 72 67 29 21 3d 30 0a 20 20  ogressArg)!=0.  
a630: 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
a640: 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  TE_INTERRUPT;.  
a650: 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
a660: 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 23  _to_error;.  }.#
a670: 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 49 66 20 74  endif..  /* If t
a680: 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 68 61  his statement ha
a690: 73 20 76 69 6f 6c 61 74 65 64 20 69 6d 6d 65 64  s violated immed
a6a0: 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  iate foreign key
a6b0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 64 6f   constraints, do
a6c0: 0a 20 20 2a 2a 20 6e 6f 74 20 72 65 74 75 72 6e  .  ** not return
a6d0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
a6e0: 6f 77 73 20 6d 6f 64 69 66 69 65 64 2e 20 41 6e  ows modified. An
a6f0: 64 20 64 6f 20 6e 6f 74 20 52 45 4c 45 41 53 45  d do not RELEASE
a700: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 20   the statement. 
a710: 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e   ** transaction.
a720: 20 49 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20   It needs to be 
a730: 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 2a 2f  rolled back.  */
a740: 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b  .  if( SQLITE_OK
a750: 21 3d 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56  !=(rc = sqlite3V
a760: 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 30 29  dbeCheckFk(p, 0)
a770: 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ) ){.    assert(
a780: 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54   db->flags&SQLIT
a790: 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20  E_CountRows );. 
a7a0: 20 20 20 61 73 73 65 72 74 28 20 70 2d 3e 75 73     assert( p->us
a7b0: 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b  esStmtJournal );
a7c0: 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f  .    goto abort_
a7d0: 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
a7e0: 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 53  }..  /* If the S
a7f0: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
a800: 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 73  flag is set in s
a810: 71 6c 69 74 65 33 2e 66 6c 61 67 73 20 6d 61 73  qlite3.flags mas
a820: 6b 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20 44 4d  k, then .  ** DM
a830: 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 76  L statements inv
a840: 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20  oke this opcode 
a850: 74 6f 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75  to return the nu
a860: 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 0a 20 20  mber of rows .  
a870: 2a 2a 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 74  ** modified to t
a880: 68 65 20 75 73 65 72 2e 20 54 68 69 73 20 69 73  he user. This is
a890: 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20 74 68   the only way th
a8a0: 61 74 20 61 20 56 4d 20 74 68 61 74 0a 20 20 2a  at a VM that.  *
a8b0: 2a 20 6f 70 65 6e 73 20 61 20 73 74 61 74 65 6d  * opens a statem
a8c0: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
a8d0: 6d 61 79 20 69 6e 76 6f 6b 65 20 74 68 69 73 20  may invoke this 
a8e0: 6f 70 63 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a  opcode..  **.  *
a8f0: 2a 20 49 6e 20 63 61 73 65 20 74 68 69 73 20 69  * In case this i
a900: 73 20 73 75 63 68 20 61 20 73 74 61 74 65 6d 65  s such a stateme
a910: 6e 74 2c 20 63 6c 6f 73 65 20 61 6e 79 20 73 74  nt, close any st
a920: 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
a930: 69 6f 6e 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20  ion.  ** opened 
a940: 62 79 20 74 68 69 73 20 56 4d 20 62 65 66 6f 72  by this VM befor
a950: 65 20 72 65 74 75 72 6e 69 6e 67 20 63 6f 6e 74  e returning cont
a960: 72 6f 6c 20 74 6f 20 74 68 65 20 75 73 65 72 2e  rol to the user.
a970: 20 54 68 69 73 20 69 73 20 74 6f 0a 20 20 2a 2a   This is to.  **
a980: 20 65 6e 73 75 72 65 20 74 68 61 74 20 73 74 61   ensure that sta
a990: 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69  tement-transacti
a9a0: 6f 6e 73 20 61 72 65 20 61 6c 77 61 79 73 20 6e  ons are always n
a9b0: 65 73 74 65 64 2c 20 6e 6f 74 20 6f 76 65 72 6c  ested, not overl
a9c0: 61 70 70 69 6e 67 2e 0a 20 20 2a 2a 20 49 66 20  apping..  ** If 
a9d0: 74 68 65 20 6f 70 65 6e 20 73 74 61 74 65 6d 65  the open stateme
a9e0: 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  nt-transaction i
a9f0: 73 20 6e 6f 74 20 63 6c 6f 73 65 64 20 68 65 72  s not closed her
aa00: 65 2c 20 74 68 65 6e 20 74 68 65 20 75 73 65 72  e, then the user
aa10: 0a 20 20 2a 2a 20 6d 61 79 20 73 74 65 70 20 61  .  ** may step a
aa20: 6e 6f 74 68 65 72 20 56 4d 20 74 68 61 74 20 6f  nother VM that o
aa30: 70 65 6e 73 20 69 74 73 20 6f 77 6e 20 73 74 61  pens its own sta
aa40: 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
aa50: 6f 6e 2e 20 54 68 69 73 0a 20 20 2a 2a 20 6d 61  on. This.  ** ma
aa60: 79 20 6c 65 61 64 20 74 6f 20 6f 76 65 72 6c 61  y lead to overla
aa70: 70 70 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  pping statement 
aa80: 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 0a 20 20  transactions..  
aa90: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 74 61 74  **.  ** The stat
aaa0: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
aab0: 6e 20 69 73 20 6e 65 76 65 72 20 61 20 74 6f 70  n is never a top
aac0: 2d 6c 65 76 65 6c 20 74 72 61 6e 73 61 63 74 69  -level transacti
aad0: 6f 6e 2e 20 20 48 65 6e 63 65 0a 20 20 2a 2a 20  on.  Hence.  ** 
aae0: 74 68 65 20 52 45 4c 45 41 53 45 20 63 61 6c 6c  the RELEASE call
aaf0: 20 62 65 6c 6f 77 20 63 61 6e 20 6e 65 76 65 72   below can never
ab00: 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73   fail..  */.  as
ab10: 73 65 72 74 28 20 70 2d 3e 69 53 74 61 74 65 6d  sert( p->iStatem
ab20: 65 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c  ent==0 || db->fl
ab30: 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74  ags&SQLITE_Count
ab40: 52 6f 77 73 20 29 3b 0a 20 20 72 63 20 3d 20 73  Rows );.  rc = s
ab50: 71 6c 69 74 65 33 56 64 62 65 43 6c 6f 73 65 53  qlite3VdbeCloseS
ab60: 74 61 74 65 6d 65 6e 74 28 70 2c 20 53 41 56 45  tatement(p, SAVE
ab70: 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 29 3b 0a  POINT_RELEASE);.
ab80: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
ab90: 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20 2f 2a  LITE_OK );..  /*
aba0: 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20   Invalidate all 
abb0: 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72  ephemeral cursor
abc0: 20 72 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a 20   row caches */. 
abd0: 20 70 2d 3e 63 61 63 68 65 43 74 72 20 3d 20 28   p->cacheCtr = (
abe0: 70 2d 3e 63 61 63 68 65 43 74 72 20 2b 20 32 29  p->cacheCtr + 2)
abf0: 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73  |1;..  /* Make s
ac00: 75 72 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ure the results 
ac10: 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  of the current r
ac20: 6f 77 20 61 72 65 20 5c 30 30 30 20 74 65 72 6d  ow are \000 term
ac30: 69 6e 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20  inated.  ** and 
ac40: 68 61 76 65 20 61 6e 20 61 73 73 69 67 6e 65 64  have an assigned
ac50: 20 74 79 70 65 2e 20 20 54 68 65 20 72 65 73 75   type.  The resu
ac60: 6c 74 73 20 61 72 65 20 64 65 2d 65 70 68 65 6d  lts are de-ephem
ac70: 65 72 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a  eralized as.  **
ac80: 20 61 20 73 69 64 65 20 65 66 66 65 63 74 2e 0a   a side effect..
ac90: 20 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d    */.  pMem = p-
aca0: 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 26 61  >pResultSet = &a
acb0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
acc0: 66 6f 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e  for(i=0; i<pOp->
acd0: 70 32 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73  p2; i++){.    as
ace0: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
acf0: 28 26 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20  (&pMem[i]) );.  
ad00: 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65    Deephemeralize
ad10: 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20  (&pMem[i]);.    
ad20: 61 73 73 65 72 74 28 20 28 70 4d 65 6d 5b 69 5d  assert( (pMem[i]
ad30: 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 45 70 68  .flags & MEM_Eph
ad40: 65 6d 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 20  em)==0.         
ad50: 20 20 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66     || (pMem[i].f
ad60: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c  lags & (MEM_Str|
ad70: 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b  MEM_Blob))==0 );
ad80: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
ad90: 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28  MemNulTerminate(
ada0: 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 52  &pMem[i]);.    R
adb0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
adc0: 70 2d 3e 70 31 2b 69 2c 20 26 70 4d 65 6d 5b 69  p->p1+i, &pMem[i
add0: 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 62  ]);.  }.  if( db
ade0: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
adf0: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20   goto no_mem;.. 
ae00: 20 69 66 28 20 64 62 2d 3e 6d 54 72 61 63 65 20   if( db->mTrace 
ae10: 26 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 52  & SQLITE_TRACE_R
ae20: 4f 57 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78 54  OW ){.    db->xT
ae30: 72 61 63 65 28 53 51 4c 49 54 45 5f 54 52 41 43  race(SQLITE_TRAC
ae40: 45 5f 52 4f 57 2c 20 64 62 2d 3e 70 54 72 61 63  E_ROW, db->pTrac
ae50: 65 41 72 67 2c 20 70 2c 20 30 29 3b 0a 20 20 7d  eArg, p, 0);.  }
ae60: 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20 53 51  ..  /* Return SQ
ae70: 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20  LITE_ROW.  */.  
ae80: 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f  p->pc = (int)(pO
ae90: 70 20 2d 20 61 4f 70 29 20 2b 20 31 3b 0a 20 20  p - aOp) + 1;.  
aea0: 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 4f 57 3b  rc = SQLITE_ROW;
aeb0: 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74  .  goto vdbe_ret
aec0: 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  urn;.}../* Opcod
aed0: 65 3a 20 43 6f 6e 63 61 74 20 50 31 20 50 32 20  e: Concat P1 P2 
aee0: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
aef0: 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2b  is: r[P3]=r[P2]+
af00: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20  r[P1].**.** Add 
af10: 74 68 65 20 74 65 78 74 20 69 6e 20 72 65 67 69  the text in regi
af20: 73 74 65 72 20 50 31 20 6f 6e 74 6f 20 74 68 65  ster P1 onto the
af30: 20 65 6e 64 20 6f 66 20 74 68 65 20 74 65 78 74   end of the text
af40: 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   in.** register 
af50: 50 32 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  P2 and store the
af60: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
af70: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
af80: 74 68 65 72 20 74 68 65 20 50 31 20 6f 72 20 50  ther the P1 or P
af90: 32 20 74 65 78 74 20 61 72 65 20 4e 55 4c 4c 20  2 text are NULL 
afa0: 74 68 65 6e 20 73 74 6f 72 65 20 4e 55 4c 4c 20  then store NULL 
afb0: 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50  in P3..**.**   P
afc0: 33 20 3d 20 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a  3 = P2 || P1.**.
afd0: 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c  ** It is illegal
afe0: 20 66 6f 72 20 50 31 20 61 6e 64 20 50 33 20 74   for P1 and P3 t
aff0: 6f 20 62 65 20 74 68 65 20 73 61 6d 65 20 72 65  o be the same re
b000: 67 69 73 74 65 72 2e 20 53 6f 6d 65 74 69 6d 65  gister. Sometime
b010: 73 2c 0a 2a 2a 20 69 66 20 50 33 20 69 73 20 74  s,.** if P3 is t
b020: 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65 72  he same register
b030: 20 61 73 20 50 32 2c 20 74 68 65 20 69 6d 70 6c   as P2, the impl
b040: 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73 20 61 62  ementation is ab
b050: 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 61  le.** to avoid a
b060: 20 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f 0a 63 61   memcpy()..*/.ca
b070: 73 65 20 4f 50 5f 43 6f 6e 63 61 74 3a 20 7b 20  se OP_Concat: { 
b080: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
b090: 65 20 61 73 20 54 4b 5f 43 4f 4e 43 41 54 2c 20  e as TK_CONCAT, 
b0a0: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
b0b0: 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 0a 0a  /.  i64 nByte;..
b0c0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
b0d0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20  Op->p1];.  pIn2 
b0e0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
b0f0: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
b100: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
b110: 65 72 74 28 20 70 49 6e 31 21 3d 70 4f 75 74 20  ert( pIn1!=pOut 
b120: 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
b130: 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c  flags | pIn2->fl
b140: 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  ags) & MEM_Null 
b150: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
b160: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
b170: 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  t);.    break;. 
b180: 20 7d 0a 20 20 69 66 28 20 45 78 70 61 6e 64 42   }.  if( ExpandB
b190: 6c 6f 62 28 70 49 6e 31 29 20 7c 7c 20 45 78 70  lob(pIn1) || Exp
b1a0: 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 20 29 20  andBlob(pIn2) ) 
b1b0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 53  goto no_mem;.  S
b1c0: 74 72 69 6e 67 69 66 79 28 70 49 6e 31 2c 20 65  tringify(pIn1, e
b1d0: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 53 74 72 69  ncoding);.  Stri
b1e0: 6e 67 69 66 79 28 70 49 6e 32 2c 20 65 6e 63 6f  ngify(pIn2, enco
b1f0: 64 69 6e 67 29 3b 0a 20 20 6e 42 79 74 65 20 3d  ding);.  nByte =
b200: 20 70 49 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32 2d   pIn1->n + pIn2-
b210: 3e 6e 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3e  >n;.  if( nByte>
b220: 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
b230: 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
b240: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
b250: 62 69 67 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73  big;.  }.  if( s
b260: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f  qlite3VdbeMemGro
b270: 77 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79  w(pOut, (int)nBy
b280: 74 65 2b 32 2c 20 70 4f 75 74 3d 3d 70 49 6e 32  te+2, pOut==pIn2
b290: 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  ) ){.    goto no
b2a0: 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53  _mem;.  }.  MemS
b2b0: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
b2c0: 20 4d 45 4d 5f 53 74 72 29 3b 0a 20 20 69 66 28   MEM_Str);.  if(
b2d0: 20 70 4f 75 74 21 3d 70 49 6e 32 20 29 7b 0a 20   pOut!=pIn2 ){. 
b2e0: 20 20 20 6d 65 6d 63 70 79 28 70 4f 75 74 2d 3e     memcpy(pOut->
b2f0: 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70 49 6e 32  z, pIn2->z, pIn2
b300: 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63  ->n);.  }.  memc
b310: 70 79 28 26 70 4f 75 74 2d 3e 7a 5b 70 49 6e 32  py(&pOut->z[pIn2
b320: 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a 2c 20 70  ->n], pIn1->z, p
b330: 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f 75 74 2d  In1->n);.  pOut-
b340: 3e 7a 5b 6e 42 79 74 65 5d 3d 30 3b 0a 20 20 70  >z[nByte]=0;.  p
b350: 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 2b 31 5d 20  Out->z[nByte+1] 
b360: 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  = 0;.  pOut->fla
b370: 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a  gs |= MEM_Term;.
b380: 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74    pOut->n = (int
b390: 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e  )nByte;.  pOut->
b3a0: 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
b3b0: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
b3c0: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
b3d0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
b3e0: 64 65 3a 20 41 64 64 20 50 31 20 50 32 20 50 33  de: Add P1 P2 P3
b3f0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
b400: 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2b 72 5b  : r[P3]=r[P1]+r[
b410: 50 32 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68  P2].**.** Add th
b420: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
b430: 74 65 72 20 50 31 20 74 6f 20 74 68 65 20 76 61  ter P1 to the va
b440: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
b450: 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20  P2.** and store 
b460: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
b470: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
b480: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
b490: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
b4a0: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
b4b0: 20 4f 70 63 6f 64 65 3a 20 4d 75 6c 74 69 70 6c   Opcode: Multipl
b4c0: 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  y P1 P2 P3 * *.*
b4d0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
b4e0: 5d 3d 72 5b 50 31 5d 2a 72 5b 50 32 5d 0a 2a 2a  ]=r[P1]*r[P2].**
b4f0: 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79 20  .**.** Multiply 
b500: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
b510: 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65 20  ister P1 by the 
b520: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
b530: 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72  r P2.** and stor
b540: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
b550: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
b560: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
b570: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
b580: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
b590: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 75 62 74 72  /* Opcode: Subtr
b5a0: 61 63 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  act P1 P2 P3 * *
b5b0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
b5c0: 50 33 5d 3d 72 5b 50 32 5d 2d 72 5b 50 31 5d 0a  P3]=r[P2]-r[P1].
b5d0: 2a 2a 0a 2a 2a 20 53 75 62 74 72 61 63 74 20 74  **.** Subtract t
b5e0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
b5f0: 73 74 65 72 20 50 31 20 66 72 6f 6d 20 74 68 65  ster P1 from the
b600: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
b610: 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f  er P2.** and sto
b620: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
b630: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
b640: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
b650: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
b660: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
b670: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 69 76 69  ./* Opcode: Divi
b680: 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  de P1 P2 P3 * *.
b690: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
b6a0: 33 5d 3d 72 5b 50 32 5d 2f 72 5b 50 31 5d 0a 2a  3]=r[P2]/r[P1].*
b6b0: 2a 0a 2a 2a 20 44 69 76 69 64 65 20 74 68 65 20  *.** Divide the 
b6c0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
b6d0: 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75  r P1 by the valu
b6e0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
b6f0: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
b700: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
b710: 73 74 65 72 20 50 33 20 28 50 33 3d 50 32 2f 50  ster P3 (P3=P2/P
b720: 31 29 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65  1). If the value
b730: 20 69 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65 72   in .** register
b740: 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65   P1 is zero, the
b750: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
b760: 4e 55 4c 4c 2e 20 49 66 20 65 69 74 68 65 72 20  NULL. If either 
b770: 69 6e 70 75 74 20 69 73 20 0a 2a 2a 20 4e 55 4c  input is .** NUL
b780: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
b790: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
b7a0: 6f 64 65 3a 20 52 65 6d 61 69 6e 64 65 72 20 50  ode: Remainder P
b7b0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
b7c0: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72  ynopsis: r[P3]=r
b7d0: 5b 50 32 5d 25 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]%r[P1].**.**
b7e0: 20 43 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d   Compute the rem
b7f0: 61 69 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74  ainder after int
b800: 65 67 65 72 20 72 65 67 69 73 74 65 72 20 50 32  eger register P2
b810: 20 69 73 20 64 69 76 69 64 65 64 20 62 79 20 0a   is divided by .
b820: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 61  ** register P1 a
b830: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
b840: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
b850: 50 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76  P3. .** If the v
b860: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
b870: 20 50 31 20 69 73 20 7a 65 72 6f 20 74 68 65 20   P1 is zero the 
b880: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
b890: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70 65  ** If either ope
b8a0: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68  rand is NULL, th
b8b0: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b8c0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64  ..*/.case OP_Add
b8d0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
b8e0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b8f0: 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32  K_PLUS, in1, in2
b900: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
b910: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 20  P_Subtract:     
b920: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
b930: 20 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e   as TK_MINUS, in
b940: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
b950: 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79  case OP_Multiply
b960: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  :              /
b970: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41  * same as TK_STA
b980: 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  R, in1, in2, out
b990: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76  3 */.case OP_Div
b9a0: 69 64 65 3a 20 20 20 20 20 20 20 20 20 20 20 20  ide:            
b9b0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b9c0: 4b 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e  K_SLASH, in1, in
b9d0: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
b9e0: 4f 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20  OP_Remainder: { 
b9f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
ba00: 65 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31  e as TK_REM, in1
ba10: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
ba20: 20 63 68 61 72 20 62 49 6e 74 69 6e 74 3b 20 20   char bIntint;  
ba30: 20 2f 2a 20 53 74 61 72 74 65 64 20 6f 75 74 20   /* Started out 
ba40: 61 73 20 74 77 6f 20 69 6e 74 65 67 65 72 20 6f  as two integer o
ba50: 70 65 72 61 6e 64 73 20 2a 2f 0a 20 20 75 31 36  perands */.  u16
ba60: 20 66 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a 20   flags;      /* 
ba70: 43 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66  Combined MEM_* f
ba80: 6c 61 67 73 20 66 72 6f 6d 20 62 6f 74 68 20 69  lags from both i
ba90: 6e 70 75 74 73 20 2a 2f 0a 20 20 75 31 36 20 74  nputs */.  u16 t
baa0: 79 70 65 31 3b 20 20 20 20 20 20 2f 2a 20 4e 75  ype1;      /* Nu
bab0: 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20 6c 65  meric type of le
bac0: 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ft operand */.  
bad0: 75 31 36 20 74 79 70 65 32 3b 20 20 20 20 20 20  u16 type2;      
bae0: 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79 70 65 20  /* Numeric type 
baf0: 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64  of right operand
bb00: 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 20 20 20   */.  i64 iA;   
bb10: 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72        /* Integer
bb20: 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f   value of left o
bb30: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20  perand */.  i64 
bb40: 69 42 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49  iB;         /* I
bb50: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20  nteger value of 
bb60: 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f  right operand */
bb70: 0a 20 20 64 6f 75 62 6c 65 20 72 41 3b 20 20 20  .  double rA;   
bb80: 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65     /* Real value
bb90: 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64   of left operand
bba0: 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 42 3b   */.  double rB;
bbb0: 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61        /* Real va
bbc0: 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65  lue of right ope
bbd0: 72 61 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e 31 20  rand */..  pIn1 
bbe0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
bbf0: 3b 0a 20 20 74 79 70 65 31 20 3d 20 6e 75 6d 65  ;.  type1 = nume
bc00: 72 69 63 54 79 70 65 28 70 49 6e 31 29 3b 0a 20  ricType(pIn1);. 
bc10: 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
bc20: 70 2d 3e 70 32 5d 3b 0a 20 20 74 79 70 65 32 20  p->p2];.  type2 
bc30: 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28 70 49  = numericType(pI
bc40: 6e 32 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  n2);.  pOut = &a
bc50: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
bc60: 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c  flags = pIn1->fl
bc70: 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67  ags | pIn2->flag
bc80: 73 3b 0a 20 20 69 66 28 20 28 74 79 70 65 31 20  s;.  if( (type1 
bc90: 26 20 74 79 70 65 32 20 26 20 4d 45 4d 5f 49 6e  & type2 & MEM_In
bca0: 74 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 41 20  t)!=0 ){.    iA 
bcb0: 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20  = pIn1->u.i;.   
bcc0: 20 69 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b   iB = pIn2->u.i;
bcd0: 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 31  .    bIntint = 1
bce0: 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f  ;.    switch( pO
bcf0: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20  p->opcode ){.   
bd00: 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20     case OP_Add: 
bd10: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
bd20: 33 41 64 64 49 6e 74 36 34 28 26 69 42 2c 69 41  3AddInt64(&iB,iA
bd30: 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68  ) ) goto fp_math
bd40: 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20  ;  break;.      
bd50: 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74  case OP_Subtract
bd60: 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 75  :  if( sqlite3Su
bd70: 62 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29  bInt64(&iB,iA) )
bd80: 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20   goto fp_math;  
bd90: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
bda0: 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20  e OP_Multiply:  
bdb0: 69 66 28 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e  if( sqlite3MulIn
bdc0: 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f  t64(&iB,iA) ) go
bdd0: 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65  to fp_math;  bre
bde0: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
bdf0: 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20  P_Divide: {.    
be00: 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20      if( iA==0 ) 
be10: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
be20: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
be30: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
be40: 2d 31 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45  -1 && iB==SMALLE
be50: 53 54 5f 49 4e 54 36 34 20 29 20 67 6f 74 6f 20  ST_INT64 ) goto 
be60: 66 70 5f 6d 61 74 68 3b 0a 20 20 20 20 20 20 20  fp_math;.       
be70: 20 69 42 20 2f 3d 20 69 41 3b 0a 20 20 20 20 20   iB /= iA;.     
be80: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
be90: 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a  }.      default:
bea0: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69   {.        if( i
beb0: 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  A==0 ) goto arit
bec0: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
bed0: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _null;.        i
bee0: 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d  f( iA==-1 ) iA =
bef0: 20 31 3b 0a 20 20 20 20 20 20 20 20 69 42 20 25   1;.        iB %
bf00: 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72  = iA;.        br
bf10: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
bf20: 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69   }.    pOut->u.i
bf30: 20 3d 20 69 42 3b 0a 20 20 20 20 4d 65 6d 53 65   = iB;.    MemSe
bf40: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
bf50: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73  MEM_Int);.  }els
bf60: 65 20 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d  e if( (flags & M
bf70: 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20  EM_Null)!=0 ){. 
bf80: 20 20 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74     goto arithmet
bf90: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
bfa0: 6c 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  l;.  }else{.    
bfb0: 62 49 6e 74 69 6e 74 20 3d 20 30 3b 0a 66 70 5f  bIntint = 0;.fp_
bfc0: 6d 61 74 68 3a 0a 20 20 20 20 72 41 20 3d 20 73  math:.    rA = s
bfd0: 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
bfe0: 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 20 20 72  lue(pIn1);.    r
bff0: 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  B = sqlite3VdbeR
c000: 65 61 6c 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a  ealValue(pIn2);.
c010: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
c020: 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20  >opcode ){.     
c030: 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20   case OP_Add:   
c040: 20 20 20 20 20 20 72 42 20 2b 3d 20 72 41 3b 20        rB += rA; 
c050: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
c060: 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72     case OP_Subtr
c070: 61 63 74 3a 20 20 20 20 72 42 20 2d 3d 20 72 41  act:    rB -= rA
c080: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
c090: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c       case OP_Mul
c0a0: 74 69 70 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20  tiply:    rB *= 
c0b0: 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b  rA;       break;
c0c0: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44  .      case OP_D
c0d0: 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20  ivide: {.       
c0e0: 20 2f 2a 20 28 64 6f 75 62 6c 65 29 30 20 49 6e   /* (double)0 In
c0f0: 20 63 61 73 65 20 6f 66 20 53 51 4c 49 54 45 5f   case of SQLITE_
c100: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
c110: 49 4e 54 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20  INT... */.      
c120: 20 20 69 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c    if( rA==(doubl
c130: 65 29 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  e)0 ) goto arith
c140: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
c150: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 72 42  null;.        rB
c160: 20 2f 3d 20 72 41 3b 0a 20 20 20 20 20 20 20 20   /= rA;.        
c170: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
c180: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a       default: {.
c190: 20 20 20 20 20 20 20 20 69 41 20 3d 20 28 69 36          iA = (i6
c1a0: 34 29 72 41 3b 0a 20 20 20 20 20 20 20 20 69 42  4)rA;.        iB
c1b0: 20 3d 20 28 69 36 34 29 72 42 3b 0a 20 20 20 20   = (i64)rB;.    
c1c0: 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20      if( iA==0 ) 
c1d0: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
c1e0: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
c1f0: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
c200: 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20  -1 ) iA = 1;.   
c210: 20 20 20 20 20 72 42 20 3d 20 28 64 6f 75 62 6c       rB = (doubl
c220: 65 29 28 69 42 20 25 20 69 41 29 3b 0a 20 20 20  e)(iB % iA);.   
c230: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
c240: 20 20 7d 0a 20 20 20 20 7d 0a 23 69 66 64 65 66    }.    }.#ifdef
c250: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
c260: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20  ATING_POINT.    
c270: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a  pOut->u.i = rB;.
c280: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
c290: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
c2a0: 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 69 66 28  );.#else.    if(
c2b0: 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 72 42   sqlite3IsNaN(rB
c2c0: 29 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  ) ){.      goto 
c2d0: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
c2e0: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d  t_is_null;.    }
c2f0: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d  .    pOut->u.r =
c300: 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   rB;.    MemSetT
c310: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
c320: 4d 5f 52 65 61 6c 29 3b 0a 20 20 20 20 69 66 28  M_Real);.    if(
c330: 20 28 28 74 79 70 65 31 7c 74 79 70 65 32 29 26   ((type1|type2)&
c340: 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 26 26 20  MEM_Real)==0 && 
c350: 21 62 49 6e 74 69 6e 74 20 29 7b 0a 20 20 20 20  !bIntint ){.    
c360: 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74    sqlite3VdbeInt
c370: 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 4f 75  egerAffinity(pOu
c380: 74 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  t);.    }.#endif
c390: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61  .  }.  break;..a
c3a0: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
c3b0: 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69  _is_null:.  sqli
c3c0: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
c3d0: 6c 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  l(pOut);.  break
c3e0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
c3f0: 43 6f 6c 6c 53 65 71 20 50 31 20 2a 20 2a 20 50  CollSeq P1 * * P
c400: 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  4.**.** P4 is a 
c410: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 43 6f 6c  pointer to a Col
c420: 6c 53 65 71 20 6f 62 6a 65 63 74 2e 20 49 66 20  lSeq object. If 
c430: 74 68 65 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f  the next call to
c440: 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e   a user function
c450: 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67 61 74 65  .** or aggregate
c460: 20 63 61 6c 6c 73 20 73 71 6c 69 74 65 33 47 65   calls sqlite3Ge
c470: 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 2c 20  tFuncCollSeq(), 
c480: 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  this collation s
c490: 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20  equence will.** 
c4a0: 62 65 20 72 65 74 75 72 6e 65 64 2e 20 54 68 69  be returned. Thi
c4b0: 73 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65  s is used by the
c4c0: 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c   built-in min(),
c4d0: 20 6d 61 78 28 29 20 61 6e 64 20 6e 75 6c 6c 69   max() and nulli
c4e0: 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  f().** functions
c4f0: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73  ..**.** If P1 is
c500: 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
c510: 69 74 20 69 73 20 61 20 72 65 67 69 73 74 65 72  it is a register
c520: 20 74 68 61 74 20 61 20 73 75 62 73 65 71 75 65   that a subseque
c530: 6e 74 20 6d 69 6e 28 29 20 6f 72 0a 2a 2a 20 6d  nt min() or.** m
c540: 61 78 28 29 20 61 67 67 72 65 67 61 74 65 20 77  ax() aggregate w
c550: 69 6c 6c 20 73 65 74 20 74 6f 20 31 20 69 66 20  ill set to 1 if 
c560: 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
c570: 69 73 20 6e 6f 74 20 74 68 65 20 6d 69 6e 69 6d  is not the minim
c580: 75 6d 20 6f 72 0a 2a 2a 20 6d 61 78 69 6d 75 6d  um or.** maximum
c590: 2e 20 20 54 68 65 20 50 31 20 72 65 67 69 73 74  .  The P1 regist
c5a0: 65 72 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65  er is initialize
c5b0: 64 20 74 6f 20 30 20 62 79 20 74 68 69 73 20 69  d to 0 by this i
c5c0: 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
c5d0: 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20  * The interface 
c5e0: 75 73 65 64 20 62 79 20 74 68 65 20 69 6d 70 6c  used by the impl
c5f0: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  ementation of th
c600: 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f 6e 65 64  e aforementioned
c610: 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f   functions.** to
c620: 20 72 65 74 72 69 65 76 65 20 74 68 65 20 63 6f   retrieve the co
c630: 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
c640: 20 73 65 74 20 62 79 20 74 68 69 73 20 6f 70 63   set by this opc
c650: 6f 64 65 20 69 73 20 6e 6f 74 20 61 76 61 69 6c  ode is not avail
c660: 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69 63 6c 79  able.** publicly
c670: 2e 20 20 4f 6e 6c 79 20 62 75 69 6c 74 2d 69 6e  .  Only built-in
c680: 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76 65 20   functions have 
c690: 61 63 63 65 73 73 20 74 6f 20 74 68 69 73 20 66  access to this f
c6a0: 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20  eature..*/.case 
c6b0: 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20  OP_CollSeq: {.  
c6c0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
c6d0: 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20  ype==P4_COLLSEQ 
c6e0: 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  );.  if( pOp->p1
c6f0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
c700: 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26  dbeMemSetInt64(&
c710: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 30  aMem[pOp->p1], 0
c720: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
c730: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  }../* Opcode: Bi
c740: 74 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20  tAnd P1 P2 P3 * 
c750: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
c760: 5b 50 33 5d 3d 72 5b 50 31 5d 26 72 5b 50 32 5d  [P3]=r[P1]&r[P2]
c770: 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
c780: 62 69 74 2d 77 69 73 65 20 41 4e 44 20 6f 66 20  bit-wise AND of 
c790: 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
c7a0: 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32  gister P1 and P2
c7b0: 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68   and.** store th
c7c0: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
c7d0: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
c7e0: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
c7f0: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
c800: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
c810: 70 63 6f 64 65 3a 20 42 69 74 4f 72 20 50 31 20  pcode: BitOr P1 
c820: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
c830: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
c840: 31 5d 7c 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54  1]|r[P2].**.** T
c850: 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65  ake the bit-wise
c860: 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65   OR of the value
c870: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
c880: 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73   and P2 and.** s
c890: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
c8a0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
c8b0: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
c8c0: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
c8d0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
c8e0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68  */./* Opcode: Sh
c8f0: 69 66 74 4c 65 66 74 20 50 31 20 50 32 20 50 33  iftLeft P1 P2 P3
c900: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
c910: 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3c 3c 72  : r[P3]=r[P2]<<r
c920: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74  [P1].**.** Shift
c930: 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
c940: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
c950: 32 20 74 6f 20 74 68 65 20 6c 65 66 74 20 62 79  2 to the left by
c960: 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f   the.** number o
c970: 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65 64  f bits specified
c980: 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72 20   by the integer 
c990: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
c9a0: 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65 73  ** Store the res
c9b0: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
c9c0: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
c9d0: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
c9e0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
c9f0: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
ca00: 3a 20 53 68 69 66 74 52 69 67 68 74 20 50 31 20  : ShiftRight P1 
ca10: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
ca20: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
ca30: 32 5d 3e 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  2]>>r[P1].**.** 
ca40: 53 68 69 66 74 20 74 68 65 20 69 6e 74 65 67 65  Shift the intege
ca50: 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  r value in regis
ca60: 74 65 72 20 50 32 20 74 6f 20 74 68 65 20 72 69  ter P2 to the ri
ca70: 67 68 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75  ght by the.** nu
ca80: 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73 70 65  mber of bits spe
ca90: 63 69 66 69 65 64 20 62 79 20 74 68 65 20 69 6e  cified by the in
caa0: 74 65 67 65 72 20 69 6e 20 72 65 67 69 73 74 65  teger in registe
cab0: 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74  r P1..** Store t
cac0: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
cad0: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
cae0: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
caf0: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
cb00: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73   is NULL..*/.cas
cb10: 65 20 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20 20  e OP_BitAnd:    
cb20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cb30: 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 41 4e  same as TK_BITAN
cb40: 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  D, in1, in2, out
cb50: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74  3 */.case OP_Bit
cb60: 4f 72 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Or:             
cb70: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
cb80: 54 4b 5f 42 49 54 4f 52 2c 20 69 6e 31 2c 20 69  TK_BITOR, in1, i
cb90: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
cba0: 20 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a 20 20   OP_ShiftLeft:  
cbb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
cbc0: 61 6d 65 20 61 73 20 54 4b 5f 4c 53 48 49 46 54  ame as TK_LSHIFT
cbd0: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
cbe0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66   */.case OP_Shif
cbf0: 74 52 69 67 68 74 3a 20 7b 20 20 20 20 20 20 20  tRight: {       
cc00: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
cc10: 4b 5f 52 53 48 49 46 54 2c 20 69 6e 31 2c 20 69  K_RSHIFT, in1, i
cc20: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36  n2, out3 */.  i6
cc30: 34 20 69 41 3b 0a 20 20 75 36 34 20 75 41 3b 0a  4 iA;.  u64 uA;.
cc40: 20 20 69 36 34 20 69 42 3b 0a 20 20 75 38 20 6f    i64 iB;.  u8 o
cc50: 70 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  p;..  pIn1 = &aM
cc60: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
cc70: 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
cc80: 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p2];.  pOut = &
cc90: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
cca0: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
ccb0: 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29  s | pIn2->flags)
ccc0: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
ccd0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
cce0: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
ccf0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
cd00: 20 69 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62   iA = sqlite3Vdb
cd10: 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b  eIntValue(pIn2);
cd20: 0a 20 20 69 42 20 3d 20 73 71 6c 69 74 65 33 56  .  iB = sqlite3V
cd30: 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
cd40: 29 3b 0a 20 20 6f 70 20 3d 20 70 4f 70 2d 3e 6f  );.  op = pOp->o
cd50: 70 63 6f 64 65 3b 0a 20 20 69 66 28 20 6f 70 3d  pcode;.  if( op=
cd60: 3d 4f 50 5f 42 69 74 41 6e 64 20 29 7b 0a 20 20  =OP_BitAnd ){.  
cd70: 20 20 69 41 20 26 3d 20 69 42 3b 0a 20 20 7d 65    iA &= iB;.  }e
cd80: 6c 73 65 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42  lse if( op==OP_B
cd90: 69 74 4f 72 20 29 7b 0a 20 20 20 20 69 41 20 7c  itOr ){.    iA |
cda0: 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66  = iB;.  }else if
cdb0: 28 20 69 42 21 3d 30 20 29 7b 0a 20 20 20 20 61  ( iB!=0 ){.    a
cdc0: 73 73 65 72 74 28 20 6f 70 3d 3d 4f 50 5f 53 68  ssert( op==OP_Sh
cdd0: 69 66 74 52 69 67 68 74 20 7c 7c 20 6f 70 3d 3d  iftRight || op==
cde0: 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 29 3b 0a  OP_ShiftLeft );.
cdf0: 0a 20 20 20 20 2f 2a 20 49 66 20 73 68 69 66 74  .    /* If shift
ce00: 69 6e 67 20 62 79 20 61 20 6e 65 67 61 74 69 76  ing by a negativ
ce10: 65 20 61 6d 6f 75 6e 74 2c 20 73 68 69 66 74 20  e amount, shift 
ce20: 69 6e 20 74 68 65 20 6f 74 68 65 72 20 64 69 72  in the other dir
ce30: 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 66  ection */.    if
ce40: 28 20 69 42 3c 30 20 29 7b 0a 20 20 20 20 20 20  ( iB<0 ){.      
ce50: 61 73 73 65 72 74 28 20 4f 50 5f 53 68 69 66 74  assert( OP_Shift
ce60: 52 69 67 68 74 3d 3d 4f 50 5f 53 68 69 66 74 4c  Right==OP_ShiftL
ce70: 65 66 74 2b 31 20 29 3b 0a 20 20 20 20 20 20 6f  eft+1 );.      o
ce80: 70 20 3d 20 32 2a 4f 50 5f 53 68 69 66 74 4c 65  p = 2*OP_ShiftLe
ce90: 66 74 20 2b 20 31 20 2d 20 6f 70 3b 0a 20 20 20  ft + 1 - op;.   
cea0: 20 20 20 69 42 20 3d 20 69 42 3e 28 2d 36 34 29     iB = iB>(-64)
ceb0: 20 3f 20 2d 69 42 20 3a 20 36 34 3b 0a 20 20 20   ? -iB : 64;.   
cec0: 20 7d 0a 0a 20 20 20 20 69 66 28 20 69 42 3e 3d   }..    if( iB>=
ced0: 36 34 20 29 7b 0a 20 20 20 20 20 20 69 41 20 3d  64 ){.      iA =
cee0: 20 28 69 41 3e 3d 30 20 7c 7c 20 6f 70 3d 3d 4f   (iA>=0 || op==O
cef0: 50 5f 53 68 69 66 74 4c 65 66 74 29 20 3f 20 30  P_ShiftLeft) ? 0
cf00: 20 3a 20 2d 31 3b 0a 20 20 20 20 7d 65 6c 73 65   : -1;.    }else
cf10: 7b 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26  {.      memcpy(&
cf20: 75 41 2c 20 26 69 41 2c 20 73 69 7a 65 6f 66 28  uA, &iA, sizeof(
cf30: 75 41 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20  uA));.      if( 
cf40: 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74  op==OP_ShiftLeft
cf50: 20 29 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3c   ){.        uA <
cf60: 3c 3d 20 69 42 3b 0a 20 20 20 20 20 20 7d 65 6c  <= iB;.      }el
cf70: 73 65 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3e  se{.        uA >
cf80: 3e 3d 20 69 42 3b 0a 20 20 20 20 20 20 20 20 2f  >= iB;.        /
cf90: 2a 20 53 69 67 6e 2d 65 78 74 65 6e 64 20 6f 6e  * Sign-extend on
cfa0: 20 61 20 72 69 67 68 74 20 73 68 69 66 74 20 6f   a right shift o
cfb0: 66 20 61 20 6e 65 67 61 74 69 76 65 20 6e 75 6d  f a negative num
cfc0: 62 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  ber */.        i
cfd0: 66 28 20 69 41 3c 30 20 29 20 75 41 20 7c 3d 20  f( iA<0 ) uA |= 
cfe0: 28 28 28 28 75 36 34 29 30 78 66 66 66 66 66 66  ((((u64)0xffffff
cff0: 66 66 29 3c 3c 33 32 29 7c 30 78 66 66 66 66 66  ff)<<32)|0xfffff
d000: 66 66 66 29 20 3c 3c 20 28 36 34 2d 69 42 29 3b  fff) << (64-iB);
d010: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6d  .      }.      m
d020: 65 6d 63 70 79 28 26 69 41 2c 20 26 75 41 2c 20  emcpy(&iA, &uA, 
d030: 73 69 7a 65 6f 66 28 69 41 29 29 3b 0a 20 20 20  sizeof(iA));.   
d040: 20 7d 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75   }.  }.  pOut->u
d050: 2e 69 20 3d 20 69 41 3b 0a 20 20 4d 65 6d 53 65  .i = iA;.  MemSe
d060: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
d070: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61  MEM_Int);.  brea
d080: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
d090: 20 41 64 64 49 6d 6d 20 20 50 31 20 50 32 20 2a   AddImm  P1 P2 *
d0a0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
d0b0: 3a 20 72 5b 50 31 5d 3d 72 5b 50 31 5d 2b 50 32  : r[P1]=r[P1]+P2
d0c0: 0a 2a 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65 20  .** .** Add the 
d0d0: 63 6f 6e 73 74 61 6e 74 20 50 32 20 74 6f 20 74  constant P2 to t
d0e0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
d0f0: 73 74 65 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20  ster P1..** The 
d100: 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73  result is always
d110: 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a   an integer..**.
d120: 2a 2a 20 54 6f 20 66 6f 72 63 65 20 61 6e 79 20  ** To force any 
d130: 72 65 67 69 73 74 65 72 20 74 6f 20 62 65 20 61  register to be a
d140: 6e 20 69 6e 74 65 67 65 72 2c 20 6a 75 73 74 20  n integer, just 
d150: 61 64 64 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f  add 0..*/.case O
d160: 50 5f 41 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20  P_AddImm: {     
d170: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
d180: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
d190: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41  pOp->p1];.  memA
d1a0: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
d1b0: 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33  pIn1);.  sqlite3
d1c0: 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
d1d0: 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d  y(pIn1);.  pIn1-
d1e0: 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b  >u.i += pOp->p2;
d1f0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
d200: 4f 70 63 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e  Opcode: MustBeIn
d210: 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
d220: 20 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76   .** Force the v
d230: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
d240: 20 50 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74   P1 to be an int
d250: 65 67 65 72 2e 20 20 49 66 20 74 68 65 20 76 61  eger.  If the va
d260: 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20  lue.** in P1 is 
d270: 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61  not an integer a
d280: 6e 64 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e  nd cannot be con
d290: 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69  verted into an i
d2a0: 6e 74 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75  nteger.** withou
d2b0: 74 20 64 61 74 61 20 6c 6f 73 73 2c 20 74 68 65  t data loss, the
d2c0: 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  n jump immediate
d2d0: 6c 79 20 74 6f 20 50 32 2c 20 6f 72 20 69 66 20  ly to P2, or if 
d2e0: 50 32 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61  P2==0.** raise a
d2f0: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43  n SQLITE_MISMATC
d300: 48 20 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a  H exception..*/.
d310: 63 61 73 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e  case OP_MustBeIn
d320: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
d330: 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
d340: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
d350: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28  Op->p1];.  if( (
d360: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
d370: 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20  M_Int)==0 ){.   
d380: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
d390: 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f  In1, SQLITE_AFF_
d3a0: 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e  NUMERIC, encodin
d3b0: 67 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e  g);.    VdbeBran
d3c0: 63 68 54 61 6b 65 6e 28 28 70 49 6e 31 2d 3e 66  chTaken((pIn1->f
d3d0: 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29 3d 3d 30  lags&MEM_Int)==0
d3e0: 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20 28 70  , 2);.    if( (p
d3f0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
d400: 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  _Int)==0 ){.    
d410: 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30    if( pOp->p2==0
d420: 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
d430: 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48   SQLITE_MISMATCH
d440: 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  ;.        goto a
d450: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
d460: 72 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  r;.      }else{.
d470: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d          goto jum
d480: 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 7d  p_to_p2;.      }
d490: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 4d 65 6d  .    }.  }.  Mem
d4a0: 53 65 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31  SetTypeFlag(pIn1
d4b0: 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72  , MEM_Int);.  br
d4c0: 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
d4d0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
d4e0: 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70  TING_POINT./* Op
d4f0: 63 6f 64 65 3a 20 52 65 61 6c 41 66 66 69 6e 69  code: RealAffini
d500: 74 79 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ty P1 * * * *.**
d510: 0a 2a 2a 20 49 66 20 72 65 67 69 73 74 65 72 20  .** If register 
d520: 50 31 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65  P1 holds an inte
d530: 67 65 72 20 63 6f 6e 76 65 72 74 20 69 74 20 74  ger convert it t
d540: 6f 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a  o a real value..
d550: 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
d560: 65 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 65  e is used when e
d570: 78 74 72 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d  xtracting inform
d580: 61 74 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c  ation from a col
d590: 75 6d 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73 20  umn that.** has 
d5a0: 52 45 41 4c 20 61 66 66 69 6e 69 74 79 2e 20 20  REAL affinity.  
d5b0: 53 75 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75  Such column valu
d5c0: 65 73 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20  es may still be 
d5d0: 73 74 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74  stored as.** int
d5e0: 65 67 65 72 73 2c 20 66 6f 72 20 73 70 61 63 65  egers, for space
d5f0: 20 65 66 66 69 63 69 65 6e 63 79 2c 20 62 75 74   efficiency, but
d600: 20 61 66 74 65 72 20 65 78 74 72 61 63 74 69 6f   after extractio
d610: 6e 20 77 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a  n we want them.*
d620: 2a 20 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61  * to have only a
d630: 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a   real value..*/.
d640: 63 61 73 65 20 4f 50 5f 52 65 61 6c 41 66 66 69  case OP_RealAffi
d650: 6e 69 74 79 3a 20 7b 20 20 20 20 20 20 20 20 20  nity: {         
d660: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20           /* in1 
d670: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
d680: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  m[pOp->p1];.  if
d690: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
d6a0: 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73  MEM_Int ){.    s
d6b0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61  qlite3VdbeMemRea
d6c0: 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a  lify(pIn1);.  }.
d6d0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
d6e0: 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
d6f0: 45 5f 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f  E_OMIT_CAST./* O
d700: 70 63 6f 64 65 3a 20 43 61 73 74 20 50 31 20 50  pcode: Cast P1 P
d710: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
d720: 73 69 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b  sis: affinity(r[
d730: 50 31 5d 29 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65  P1]).**.** Force
d740: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
d750: 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20  gister P1 to be 
d760: 74 68 65 20 74 79 70 65 20 64 65 66 69 6e 65 64  the type defined
d770: 20 62 79 20 50 32 2e 0a 2a 2a 20 0a 2a 2a 20 3c   by P2..** .** <
d780: 75 6c 3e 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d  ul>.** <li> P2==
d790: 27 41 27 20 26 72 61 72 72 3b 20 42 4c 4f 42 0a  'A' &rarr; BLOB.
d7a0: 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 42 27 20  ** <li> P2=='B' 
d7b0: 26 72 61 72 72 3b 20 54 45 58 54 0a 2a 2a 20 3c  &rarr; TEXT.** <
d7c0: 6c 69 3e 20 50 32 3d 3d 27 43 27 20 26 72 61 72  li> P2=='C' &rar
d7d0: 72 3b 20 4e 55 4d 45 52 49 43 0a 2a 2a 20 3c 6c  r; NUMERIC.** <l
d7e0: 69 3e 20 50 32 3d 3d 27 44 27 20 26 72 61 72 72  i> P2=='D' &rarr
d7f0: 3b 20 49 4e 54 45 47 45 52 0a 2a 2a 20 3c 6c 69  ; INTEGER.** <li
d800: 3e 20 50 32 3d 3d 27 45 27 20 26 72 61 72 72 3b  > P2=='E' &rarr;
d810: 20 52 45 41 4c 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a   REAL.** </ul>.*
d820: 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75  *.** A NULL valu
d830: 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64  e is not changed
d840: 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65   by this routine
d850: 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55  .  It remains NU
d860: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  LL..*/.case OP_C
d870: 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ast: {          
d880: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
d890: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
d8a0: 3e 70 32 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2>=SQLITE_AFF_
d8b0: 42 4c 4f 42 20 26 26 20 70 4f 70 2d 3e 70 32 3c  BLOB && pOp->p2<
d8c0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c  =SQLITE_AFF_REAL
d8d0: 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
d8e0: 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
d8f0: 41 46 46 5f 54 45 58 54 20 29 3b 0a 20 20 74 65  AFF_TEXT );.  te
d900: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d  stcase( pOp->p2=
d910: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42  =SQLITE_AFF_BLOB
d920: 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
d930: 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
d940: 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20  AFF_NUMERIC );. 
d950: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
d960: 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49  p2==SQLITE_AFF_I
d970: 4e 54 45 47 45 52 20 29 3b 0a 20 20 74 65 73 74  NTEGER );.  test
d980: 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53  case( pOp->p2==S
d990: 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 29  QLITE_AFF_REAL )
d9a0: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
d9b0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d  [pOp->p1];.  mem
d9c0: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
d9d0: 20 70 49 6e 31 29 3b 0a 20 20 72 63 20 3d 20 45   pIn1);.  rc = E
d9e0: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b  xpandBlob(pIn1);
d9f0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
da00: 6d 43 61 73 74 28 70 49 6e 31 2c 20 70 4f 70 2d  mCast(pIn1, pOp-
da10: 3e 70 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  >p2, encoding);.
da20: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
da30: 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 69  BSIZE(pIn1);.  i
da40: 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
da50: 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
da60: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
da70: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
da80: 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70  T_CAST */../* Op
da90: 63 6f 64 65 3a 20 45 71 20 50 31 20 50 32 20 50  code: Eq P1 P2 P
daa0: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
dab0: 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3d 3d 72  sis: IF r[P3]==r
dac0: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61  [P1].**.** Compa
dad0: 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  re the values in
dae0: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
daf0: 20 50 33 2e 20 20 49 66 20 72 65 67 28 50 33 29   P3.  If reg(P3)
db00: 3d 3d 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a  ==reg(P1) then.*
db10: 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  * jump to addres
db20: 73 20 50 32 2e 20 20 4f 72 20 69 66 20 74 68 65  s P2.  Or if the
db30: 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
db40: 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 50  flag is set in P
db50: 35 2c 20 74 68 65 6e 0a 2a 2a 20 73 74 6f 72 65  5, then.** store
db60: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63   the result of c
db70: 6f 6d 70 61 72 69 73 6f 6e 20 69 6e 20 72 65 67  omparison in reg
db80: 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
db90: 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  The SQLITE_AFF_M
dba0: 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50  ASK portion of P
dbb0: 35 20 6d 75 73 74 20 62 65 20 61 6e 20 61 66 66  5 must be an aff
dbc0: 69 6e 69 74 79 20 63 68 61 72 61 63 74 65 72 20  inity character 
dbd0: 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  -.** SQLITE_AFF_
dbe0: 54 45 58 54 2c 20 53 51 4c 49 54 45 5f 41 46 46  TEXT, SQLITE_AFF
dbf0: 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64 20 73 6f  _INTEGER, and so
dc00: 20 66 6f 72 74 68 2e 20 41 6e 20 61 74 74 65 6d   forth. An attem
dc10: 70 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74  pt is made .** t
dc20: 6f 20 63 6f 65 72 63 65 20 62 6f 74 68 20 69 6e  o coerce both in
dc30: 70 75 74 73 20 61 63 63 6f 72 64 69 6e 67 20 74  puts according t
dc40: 6f 20 74 68 69 73 20 61 66 66 69 6e 69 74 79 20  o this affinity 
dc50: 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f  before the.** co
dc60: 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d 61 64 65  mparison is made
dc70: 2e 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  . If the SQLITE_
dc80: 41 46 46 5f 4d 41 53 4b 20 69 73 20 30 78 30 30  AFF_MASK is 0x00
dc90: 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a  , then numeric.*
dca0: 2a 20 61 66 66 69 6e 69 74 79 20 69 73 20 75 73  * affinity is us
dcb0: 65 64 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68  ed. Note that th
dcc0: 65 20 61 66 66 69 6e 69 74 79 20 63 6f 6e 76 65  e affinity conve
dcd0: 72 73 69 6f 6e 73 20 61 72 65 20 73 74 6f 72 65  rsions are store
dce0: 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74  d.** back into t
dcf0: 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  he input registe
dd00: 72 73 20 50 31 20 61 6e 64 20 50 33 2e 20 20 53  rs P1 and P3.  S
dd10: 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63 61  o this opcode ca
dd20: 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65 72 73 69  n cause.** persi
dd30: 73 74 65 6e 74 20 63 68 61 6e 67 65 73 20 74 6f  stent changes to
dd40: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
dd50: 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65  d P3..**.** Once
dd60: 20 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73   any conversions
dd70: 20 68 61 76 65 20 74 61 6b 65 6e 20 70 6c 61 63   have taken plac
dd80: 65 2c 20 61 6e 64 20 6e 65 69 74 68 65 72 20 76  e, and neither v
dd90: 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a  alue is NULL, .*
dda0: 2a 20 74 68 65 20 76 61 6c 75 65 73 20 61 72 65  * the values are
ddb0: 20 63 6f 6d 70 61 72 65 64 2e 20 49 66 20 62 6f   compared. If bo
ddc0: 74 68 20 76 61 6c 75 65 73 20 61 72 65 20 62 6c  th values are bl
ddd0: 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28  obs then memcmp(
dde0: 29 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20  ) is.** used to 
ddf0: 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 72 65  determine the re
de00: 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 6f 6d  sults of the com
de10: 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74  parison.  If bot
de20: 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20  h values.** are 
de30: 74 65 78 74 2c 20 74 68 65 6e 20 74 68 65 20 61  text, then the a
de40: 70 70 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61  ppropriate colla
de50: 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73 70  ting function sp
de60: 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34  ecified in.** P4
de70: 20 69 73 20 75 73 65 64 20 74 6f 20 64 6f 20 74   is used to do t
de80: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  he comparison.  
de90: 49 66 20 50 34 20 69 73 20 6e 6f 74 20 73 70 65  If P4 is not spe
dea0: 63 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d  cified then.** m
deb0: 65 6d 63 6d 70 28 29 20 69 73 20 75 73 65 64 20  emcmp() is used 
dec0: 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20  to compare text 
ded0: 73 74 72 69 6e 67 2e 20 20 49 66 20 62 6f 74 68  string.  If both
dee0: 20 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e   values are.** n
def0: 75 6d 65 72 69 63 2c 20 74 68 65 6e 20 61 20 6e  umeric, then a n
df00: 75 6d 65 72 69 63 20 63 6f 6d 70 61 72 69 73 6f  umeric compariso
df10: 6e 20 69 73 20 75 73 65 64 2e 20 49 66 20 74 68  n is used. If th
df20: 65 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20  e two values.** 
df30: 61 72 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74  are of different
df40: 20 74 79 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d   types, then num
df50: 62 65 72 73 20 61 72 65 20 63 6f 6e 73 69 64 65  bers are conside
df60: 72 65 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a  red less than.**
df70: 20 73 74 72 69 6e 67 73 20 61 6e 64 20 73 74 72   strings and str
df80: 69 6e 67 73 20 61 72 65 20 63 6f 6e 73 69 64 65  ings are conside
df90: 72 65 64 20 6c 65 73 73 20 74 68 61 6e 20 62 6c  red less than bl
dfa0: 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51  obs..**.** If SQ
dfb0: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73  LITE_NULLEQ is s
dfc0: 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68  et in P5 then th
dfd0: 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70  e result of comp
dfe0: 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73  arison is always
dff0: 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20   either.** true 
e000: 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20  or false and is 
e010: 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20  never NULL.  If 
e020: 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72  both operands ar
e030: 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  e NULL then the 
e040: 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d  result.** of com
e050: 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75 65 2e  parison is true.
e060: 20 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72    If either oper
e070: 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  and is NULL then
e080: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 66   the result is f
e090: 61 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74  alse..** If neit
e0a0: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
e0b0: 55 4c 4c 20 74 68 65 20 72 65 73 75 6c 74 20 69  ULL the result i
e0c0: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 69 74  s the same as it
e0d0: 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20   would be if.** 
e0e0: 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  the SQLITE_NULLE
e0f0: 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74  Q flag were omit
e100: 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2a 0a  ted from P5..**.
e110: 2a 2a 20 49 66 20 62 6f 74 68 20 53 51 4c 49 54  ** If both SQLIT
e120: 45 5f 53 54 4f 52 45 50 32 20 61 6e 64 20 53 51  E_STOREP2 and SQ
e130: 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 66 6c  LITE_KEEPNULL fl
e140: 61 67 73 20 61 72 65 20 73 65 74 20 74 68 65 6e  ags are set then
e150: 20 74 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20   the.** content 
e160: 6f 66 20 72 5b 50 32 5d 20 69 73 20 6f 6e 6c 79  of r[P2] is only
e170: 20 63 68 61 6e 67 65 64 20 69 66 20 74 68 65 20   changed if the 
e180: 6e 65 77 20 76 61 6c 75 65 20 69 73 20 4e 55 4c  new value is NUL
e190: 4c 20 6f 72 20 30 20 28 66 61 6c 73 65 29 2e 0a  L or 0 (false)..
e1a0: 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  ** In other word
e1b0: 73 2c 20 61 20 70 72 69 6f 72 20 72 5b 50 32 5d  s, a prior r[P2]
e1c0: 20 76 61 6c 75 65 20 77 69 6c 6c 20 6e 6f 74 20   value will not 
e1d0: 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20 62  be overwritten b
e1e0: 79 20 31 20 28 74 72 75 65 29 2e 0a 2a 2f 0a 2f  y 1 (true)..*/./
e1f0: 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31 20  * Opcode: Ne P1 
e200: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
e210: 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33  ynopsis: IF r[P3
e220: 5d 21 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54  ]!=r[P1].**.** T
e230: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
e240: 69 6b 65 20 74 68 65 20 45 71 20 6f 70 63 6f 64  ike the Eq opcod
e250: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
e260: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
e270: 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e  if.** the operan
e280: 64 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20  ds in registers 
e290: 50 31 20 61 6e 64 20 50 33 20 61 72 65 20 6e 6f  P1 and P3 are no
e2a0: 74 20 65 71 75 61 6c 2e 20 20 53 65 65 20 74 68  t equal.  See th
e2b0: 65 20 45 71 20 6f 70 63 6f 64 65 20 66 6f 72 0a  e Eq opcode for.
e2c0: 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  ** additional in
e2d0: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  formation..**.**
e2e0: 20 49 66 20 62 6f 74 68 20 53 51 4c 49 54 45 5f   If both SQLITE_
e2f0: 53 54 4f 52 45 50 32 20 61 6e 64 20 53 51 4c 49  STOREP2 and SQLI
e300: 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 66 6c 61 67  TE_KEEPNULL flag
e310: 73 20 61 72 65 20 73 65 74 20 74 68 65 6e 20 74  s are set then t
e320: 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20 6f 66  he.** content of
e330: 20 72 5b 50 32 5d 20 69 73 20 6f 6e 6c 79 20 63   r[P2] is only c
e340: 68 61 6e 67 65 64 20 69 66 20 74 68 65 20 6e 65  hanged if the ne
e350: 77 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 20  w value is NULL 
e360: 6f 72 20 31 20 28 74 72 75 65 29 2e 0a 2a 2a 20  or 1 (true)..** 
e370: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
e380: 61 20 70 72 69 6f 72 20 72 5b 50 32 5d 20 76 61  a prior r[P2] va
e390: 6c 75 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20  lue will not be 
e3a0: 6f 76 65 72 77 72 69 74 74 65 6e 20 62 79 20 30  overwritten by 0
e3b0: 20 28 66 61 6c 73 65 29 2e 0a 2a 2f 0a 2f 2a 20   (false)..*/./* 
e3c0: 4f 70 63 6f 64 65 3a 20 4c 74 20 50 31 20 50 32  Opcode: Lt P1 P2
e3d0: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
e3e0: 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3c  opsis: IF r[P3]<
e3f0: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70  r[P1].**.** Comp
e400: 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 69  are the values i
e410: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
e420: 64 20 50 33 2e 20 20 49 66 20 72 65 67 28 50 33  d P3.  If reg(P3
e430: 29 3c 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a  )<reg(P1) then.*
e440: 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  * jump to addres
e450: 73 20 50 32 2e 20 20 4f 72 20 69 66 20 74 68 65  s P2.  Or if the
e460: 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
e470: 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 50  flag is set in P
e480: 35 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 72  5 store.** the r
e490: 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69  esult of compari
e4a0: 73 6f 6e 20 28 30 20 6f 72 20 31 20 6f 72 20 4e  son (0 or 1 or N
e4b0: 55 4c 4c 29 20 69 6e 74 6f 20 72 65 67 69 73 74  ULL) into regist
e4c0: 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P2..**.** If 
e4d0: 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  the SQLITE_JUMPI
e4e0: 46 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50 35 20  FNULL bit of P5 
e4f0: 69 73 20 73 65 74 20 61 6e 64 20 65 69 74 68 65  is set and eithe
e500: 72 20 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a 20  r reg(P1) or.** 
e510: 72 65 67 28 50 33 29 20 69 73 20 4e 55 4c 4c 20  reg(P3) is NULL 
e520: 74 68 65 6e 20 74 68 65 20 74 61 6b 65 20 74 68  then the take th
e530: 65 20 6a 75 6d 70 2e 20 20 49 66 20 74 68 65 20  e jump.  If the 
e540: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
e550: 4c 20 0a 2a 2a 20 62 69 74 20 69 73 20 63 6c 65  L .** bit is cle
e560: 61 72 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  ar then fall thr
e570: 6f 75 67 68 20 69 66 20 65 69 74 68 65 72 20 6f  ough if either o
e580: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a  perand is NULL..
e590: 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  **.** The SQLITE
e5a0: 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f  _AFF_MASK portio
e5b0: 6e 20 6f 66 20 50 35 20 6d 75 73 74 20 62 65 20  n of P5 must be 
e5c0: 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68 61 72  an affinity char
e5d0: 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54  acter -.** SQLIT
e5e0: 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51 4c 49  E_AFF_TEXT, SQLI
e5f0: 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c 20  TE_AFF_INTEGER, 
e600: 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e  and so forth. An
e610: 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65   attempt is made
e620: 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20 62   .** to coerce b
e630: 6f 74 68 20 69 6e 70 75 74 73 20 61 63 63 6f 72  oth inputs accor
e640: 64 69 6e 67 20 74 6f 20 74 68 69 73 20 61 66 66  ding to this aff
e650: 69 6e 69 74 79 20 62 65 66 6f 72 65 20 74 68 65  inity before the
e660: 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69  .** comparison i
e670: 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65 20 53  s made. If the S
e680: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69  QLITE_AFF_MASK i
e690: 73 20 30 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d  s 0x00, then num
e6a0: 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79  eric.** affinity
e6b0: 20 69 73 20 75 73 65 64 2e 20 4e 6f 74 65 20 74   is used. Note t
e6c0: 68 61 74 20 74 68 65 20 61 66 66 69 6e 69 74 79  hat the affinity
e6d0: 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72 65   conversions are
e6e0: 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20   stored.** back 
e6f0: 69 6e 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72  into the input r
e700: 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20  egisters P1 and 
e710: 50 33 2e 20 20 53 6f 20 74 68 69 73 20 6f 70 63  P3.  So this opc
e720: 6f 64 65 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a  ode can cause.**
e730: 20 70 65 72 73 69 73 74 65 6e 74 20 63 68 61 6e   persistent chan
e740: 67 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73  ges to registers
e750: 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a   P1 and P3..**.*
e760: 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65  * Once any conve
e770: 72 73 69 6f 6e 73 20 68 61 76 65 20 74 61 6b 65  rsions have take
e780: 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69  n place, and nei
e790: 74 68 65 72 20 76 61 6c 75 65 20 69 73 20 4e 55  ther value is NU
e7a0: 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75  LL, .** the valu
e7b0: 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e  es are compared.
e7c0: 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20   If both values 
e7d0: 61 72 65 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d  are blobs then m
e7e0: 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73  emcmp() is.** us
e7f0: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ed to determine 
e800: 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
e810: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  he comparison.  
e820: 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a  If both values.*
e830: 2a 20 61 72 65 20 74 65 78 74 2c 20 74 68 65 6e  * are text, then
e840: 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65   the appropriate
e850: 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
e860: 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20 69 6e  ion specified in
e870: 0a 2a 2a 20 50 34 20 69 73 20 20 75 73 65 64 20  .** P4 is  used 
e880: 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70 61 72  to do the compar
e890: 69 73 6f 6e 2e 20 20 49 66 20 50 34 20 69 73 20  ison.  If P4 is 
e8a0: 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20 74 68  not specified th
e8b0: 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69  en.** memcmp() i
e8c0: 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72  s used to compar
e8d0: 65 20 74 65 78 74 20 73 74 72 69 6e 67 2e 20 20  e text string.  
e8e0: 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61  If both values a
e8f0: 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74  re.** numeric, t
e900: 68 65 6e 20 61 20 6e 75 6d 65 72 69 63 20 63 6f  hen a numeric co
e910: 6d 70 61 72 69 73 6f 6e 20 69 73 20 75 73 65 64  mparison is used
e920: 2e 20 49 66 20 74 68 65 20 74 77 6f 20 76 61 6c  . If the two val
e930: 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69  ues.** are of di
e940: 66 66 65 72 65 6e 74 20 74 79 70 65 73 2c 20 74  fferent types, t
e950: 68 65 6e 20 6e 75 6d 62 65 72 73 20 61 72 65 20  hen numbers are 
e960: 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20  considered less 
e970: 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20  than.** strings 
e980: 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65 20  and strings are 
e990: 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20  considered less 
e9a0: 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 2f  than blobs..*/./
e9b0: 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31 20  * Opcode: Le P1 
e9c0: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
e9d0: 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33  ynopsis: IF r[P3
e9e0: 5d 3c 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54  ]<=r[P1].**.** T
e9f0: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
ea00: 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
ea10: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
ea20: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
ea30: 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e  if.** the conten
ea40: 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
ea50: 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72   is less than or
ea60: 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f   equal to the co
ea70: 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69  ntent of.** regi
ea80: 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68  ster P1.  See th
ea90: 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20  e Lt opcode for 
eaa0: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
eab0: 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70  mation..*/./* Op
eac0: 63 6f 64 65 3a 20 47 74 20 50 31 20 50 32 20 50  code: Gt P1 P2 P
ead0: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
eae0: 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3e 72 5b  sis: IF r[P3]>r[
eaf0: 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77  P1].**.** This w
eb00: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
eb10: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
eb20: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
eb30: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
eb40: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
eb50: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67  register P3 is g
eb60: 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
eb70: 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65  content of.** re
eb80: 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20  gister P1.  See 
eb90: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
eba0: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
ebb0: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  ormation..*/./* 
ebc0: 4f 70 63 6f 64 65 3a 20 47 65 20 50 31 20 50 32  Opcode: Ge P1 P2
ebd0: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
ebe0: 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3e  opsis: IF r[P3]>
ebf0: 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69  =r[P1].**.** Thi
ec00: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
ec10: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
ec20: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
ec30: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
ec40: 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  .** the content 
ec50: 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69  of register P3 i
ec60: 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  s greater than o
ec70: 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63  r equal to the c
ec80: 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67  ontent of.** reg
ec90: 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74  ister P1.  See t
eca0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
ecb0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
ecc0: 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  rmation..*/.case
ecd0: 20 4f 50 5f 45 71 3a 20 20 20 20 20 20 20 20 20   OP_Eq:         
ece0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
ecf0: 20 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e   TK_EQ, jump, in
ed00: 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
ed10: 50 5f 4e 65 3a 20 20 20 20 20 20 20 20 20 20 20  P_Ne:           
ed20: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
ed30: 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_NE, jump, in1,
ed40: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
ed50: 4c 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Lt:             
ed60: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
ed70: 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  LT, jump, in1, i
ed80: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65  n3 */.case OP_Le
ed90: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
eda0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45  /* same as TK_LE
edb0: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
edc0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20   */.case OP_Gt: 
edd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ede0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20   same as TK_GT, 
edf0: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
ee00: 2f 0a 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20  /.case OP_Ge: { 
ee10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
ee20: 61 6d 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75  ame as TK_GE, ju
ee30: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
ee40: 20 20 69 6e 74 20 72 65 73 2c 20 72 65 73 32 3b    int res, res2;
ee50: 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
ee60: 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  of the compariso
ee70: 6e 20 6f 66 20 70 49 6e 31 20 61 67 61 69 6e 73  n of pIn1 agains
ee80: 74 20 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72  t pIn3 */.  char
ee90: 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20   affinity;      
eea0: 2f 2a 20 41 66 66 69 6e 69 74 79 20 74 6f 20 75  /* Affinity to u
eeb0: 73 65 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f  se for compariso
eec0: 6e 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73  n */.  u16 flags
eed0: 31 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  1;         /* Co
eee0: 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61  py of initial va
eef0: 6c 75 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61  lue of pIn1->fla
ef00: 67 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67  gs */.  u16 flag
ef10: 73 33 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43  s3;         /* C
ef20: 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76  opy of initial v
ef30: 61 6c 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c  alue of pIn3->fl
ef40: 61 67 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d  ags */..  pIn1 =
ef50: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
ef60: 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
ef70: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67  pOp->p3];.  flag
ef80: 73 31 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73  s1 = pIn1->flags
ef90: 3b 0a 20 20 66 6c 61 67 73 33 20 3d 20 70 49 6e  ;.  flags3 = pIn
efa0: 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20  3->flags;.  if( 
efb0: 28 66 6c 61 67 73 31 20 7c 20 66 6c 61 67 73 33  (flags1 | flags3
efc0: 29 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  )&MEM_Null ){.  
efd0: 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68    /* One or both
efe0: 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55   operands are NU
eff0: 4c 4c 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f  LL */.    if( pO
f000: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e  p->p5 & SQLITE_N
f010: 55 4c 4c 45 51 20 29 7b 0a 20 20 20 20 20 20 2f  ULLEQ ){.      /
f020: 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  * If SQLITE_NULL
f030: 45 51 20 69 73 20 73 65 74 20 28 77 68 69 63 68  EQ is set (which
f040: 20 77 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65   will only happe
f050: 6e 20 69 66 20 74 68 65 20 6f 70 65 72 61 74 6f  n if the operato
f060: 72 20 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50  r is.      ** OP
f070: 5f 45 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68  _Eq or OP_Ne) th
f080: 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  en take the jump
f090: 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e   or not dependin
f0a0: 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 20 20 20  g on whether.   
f0b0: 20 20 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74     ** or not bot
f0c0: 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e  h operands are n
f0d0: 75 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ull..      */.  
f0e0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
f0f0: 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c  >opcode==OP_Eq |
f100: 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
f110: 50 5f 4e 65 20 29 3b 0a 20 20 20 20 20 20 61 73  P_Ne );.      as
f120: 73 65 72 74 28 20 28 66 6c 61 67 73 31 20 26 20  sert( (flags1 & 
f130: 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30 20  MEM_Cleared)==0 
f140: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
f150: 20 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49   (pOp->p5 & SQLI
f160: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 29 3d 3d  TE_JUMPIFNULL)==
f170: 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 28  0 );.      if( (
f180: 66 6c 61 67 73 31 26 66 6c 61 67 73 33 26 4d 45  flags1&flags3&ME
f190: 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20  M_Null)!=0.     
f1a0: 20 20 26 26 20 28 66 6c 61 67 73 33 26 4d 45 4d    && (flags3&MEM
f1b0: 5f 43 6c 65 61 72 65 64 29 3d 3d 30 0a 20 20 20  _Cleared)==0.   
f1c0: 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65     ){.        re
f1d0: 73 20 3d 20 30 3b 20 20 2f 2a 20 4f 70 65 72 61  s = 0;  /* Opera
f1e0: 6e 64 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f  nds are equal */
f1f0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
f200: 20 20 20 20 20 20 72 65 73 20 3d 20 31 3b 20 20        res = 1;  
f210: 2f 2a 20 4f 70 65 72 61 6e 64 73 20 61 72 65 20  /* Operands are 
f220: 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20  not equal */.   
f230: 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
f240: 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f        /* SQLITE_
f250: 4e 55 4c 4c 45 51 20 69 73 20 63 6c 65 61 72 20  NULLEQ is clear 
f260: 61 6e 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 65  and at least one
f270: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
f280: 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20  ,.      ** then 
f290: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c  the result is al
f2a0: 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 20  ways NULL..     
f2b0: 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20 69 73 20   ** The jump is 
f2c0: 74 61 6b 65 6e 20 69 66 20 74 68 65 20 53 51 4c  taken if the SQL
f2d0: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62  ITE_JUMPIFNULL b
f2e0: 69 74 20 69 73 20 73 65 74 2e 0a 20 20 20 20 20  it is set..     
f2f0: 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4f   */.      if( pO
f300: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53  p->p5 & SQLITE_S
f310: 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 20 20  TOREP2 ){.      
f320: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
f330: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20  Op->p2];.       
f340: 20 69 43 6f 6d 70 61 72 65 20 3d 20 31 3b 20 20   iCompare = 1;  
f350: 20 20 2f 2a 20 4f 70 65 72 61 6e 64 73 20 61 72    /* Operands ar
f360: 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a 20  e not equal */. 
f370: 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54         memAboutT
f380: 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
f390: 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d 53 65 74  ;.        MemSet
f3a0: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
f3b0: 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20  EM_Null);.      
f3c0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
f3d0: 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
f3e0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
f3f0: 20 20 20 20 20 20 56 64 62 65 42 72 61 6e 63 68        VdbeBranch
f400: 54 61 6b 65 6e 28 32 2c 33 29 3b 0a 20 20 20 20  Taken(2,3);.    
f410: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20      if( pOp->p5 
f420: 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  & SQLITE_JUMPIFN
f430: 55 4c 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ULL ){.         
f440: 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
f450: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
f460: 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b    }.      break;
f470: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
f480: 20 20 20 20 2f 2a 20 4e 65 69 74 68 65 72 20 6f      /* Neither o
f490: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 20  perand is NULL. 
f4a0: 20 44 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e   Do a comparison
f4b0: 2e 20 2a 2f 0a 20 20 20 20 61 66 66 69 6e 69 74  . */.    affinit
f4c0: 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  y = pOp->p5 & SQ
f4d0: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a 20  LITE_AFF_MASK;. 
f4e0: 20 20 20 69 66 28 20 61 66 66 69 6e 69 74 79 3e     if( affinity>
f4f0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45  =SQLITE_AFF_NUME
f500: 52 49 43 20 29 7b 0a 20 20 20 20 20 20 69 66 28  RIC ){.      if(
f510: 20 28 66 6c 61 67 73 31 20 7c 20 66 6c 61 67 73   (flags1 | flags
f520: 33 29 26 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20  3)&MEM_Str ){.  
f530: 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73        if( (flags
f540: 31 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  1 & (MEM_Int|MEM
f550: 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d  _Real|MEM_Str))=
f560: 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20  =MEM_Str ){.    
f570: 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72        applyNumer
f580: 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c  icAffinity(pIn1,
f590: 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 74 65  0);.          te
f5a0: 73 74 63 61 73 65 28 20 66 6c 61 67 73 33 21 3d  stcase( flags3!=
f5b0: 70 49 6e 33 2d 3e 66 6c 61 67 73 20 29 3b 20 2f  pIn3->flags ); /
f5c0: 2a 20 50 6f 73 73 69 62 6c 65 20 69 66 20 70 49  * Possible if pI
f5d0: 6e 31 3d 3d 70 49 6e 33 20 2a 2f 0a 20 20 20 20  n1==pIn3 */.    
f5e0: 20 20 20 20 20 20 66 6c 61 67 73 33 20 3d 20 70        flags3 = p
f5f0: 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 20 20  In3->flags;.    
f600: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
f610: 28 20 28 66 6c 61 67 73 33 20 26 20 28 4d 45 4d  ( (flags3 & (MEM
f620: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45  _Int|MEM_Real|ME
f630: 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72  M_Str))==MEM_Str
f640: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61 70   ){.          ap
f650: 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
f660: 74 79 28 70 49 6e 33 2c 30 29 3b 0a 20 20 20 20  ty(pIn3,0);.    
f670: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
f680: 20 20 20 20 2f 2a 20 48 61 6e 64 6c 65 20 74 68      /* Handle th
f690: 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 6f 66  e common case of
f6a0: 20 69 6e 74 65 67 65 72 20 63 6f 6d 70 61 72 69   integer compari
f6b0: 73 6f 6e 20 68 65 72 65 2c 20 61 73 20 61 6e 0a  son here, as an.
f6c0: 20 20 20 20 20 20 2a 2a 20 6f 70 74 69 6d 69 7a        ** optimiz
f6d0: 61 74 69 6f 6e 2c 20 74 6f 20 61 76 6f 69 64 20  ation, to avoid 
f6e0: 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65  a call to sqlite
f6f0: 33 4d 65 6d 43 6f 6d 70 61 72 65 28 29 20 2a 2f  3MemCompare() */
f700: 0a 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 31  .      if( (pIn1
f710: 2d 3e 66 6c 61 67 73 20 26 20 70 49 6e 33 2d 3e  ->flags & pIn3->
f720: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
f730: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69  !=0 ){.        i
f740: 66 28 20 70 49 6e 33 2d 3e 75 2e 69 20 3e 20 70  f( pIn3->u.i > p
f750: 49 6e 31 2d 3e 75 2e 69 20 29 7b 20 72 65 73 20  In1->u.i ){ res 
f760: 3d 20 2b 31 3b 20 67 6f 74 6f 20 63 6f 6d 70 61  = +1; goto compa
f770: 72 65 5f 6f 70 3b 20 7d 0a 20 20 20 20 20 20 20  re_op; }.       
f780: 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 69 20 3c   if( pIn3->u.i <
f790: 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b 20 72 65   pIn1->u.i ){ re
f7a0: 73 20 3d 20 2d 31 3b 20 67 6f 74 6f 20 63 6f 6d  s = -1; goto com
f7b0: 70 61 72 65 5f 6f 70 3b 20 7d 0a 20 20 20 20 20  pare_op; }.     
f7c0: 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20     res = 0;.    
f7d0: 20 20 20 20 67 6f 74 6f 20 63 6f 6d 70 61 72 65      goto compare
f7e0: 5f 6f 70 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  _op;.      }.   
f7f0: 20 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e   }else if( affin
f800: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
f810: 54 45 58 54 20 29 7b 0a 20 20 20 20 20 20 69 66  TEXT ){.      if
f820: 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f  ( (flags1 & MEM_
f830: 53 74 72 29 3d 3d 30 20 26 26 20 28 66 6c 61 67  Str)==0 && (flag
f840: 73 31 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  s1 & (MEM_Int|ME
f850: 4d 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a 20  M_Real))!=0 ){. 
f860: 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
f870: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
f880: 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20 20  EM_Int );.      
f890: 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 31    testcase( pIn1
f8a0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
f8b0: 61 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71  al );.        sq
f8c0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69  lite3VdbeMemStri
f8d0: 6e 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f  ngify(pIn1, enco
f8e0: 64 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20 20  ding, 1);.      
f8f0: 20 20 74 65 73 74 63 61 73 65 28 20 28 66 6c 61    testcase( (fla
f900: 67 73 31 26 4d 45 4d 5f 44 79 6e 29 20 21 3d 20  gs1&MEM_Dyn) != 
f910: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pIn1->flags&MEM
f920: 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 20 20 20  _Dyn) );.       
f930: 20 66 6c 61 67 73 31 20 3d 20 28 70 49 6e 31 2d   flags1 = (pIn1-
f940: 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f 54 79  >flags & ~MEM_Ty
f950: 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73  peMask) | (flags
f960: 31 20 26 20 4d 45 4d 5f 54 79 70 65 4d 61 73 6b  1 & MEM_TypeMask
f970: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
f980: 74 28 20 70 49 6e 31 21 3d 70 49 6e 33 20 29 3b  t( pIn1!=pIn3 );
f990: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
f9a0: 66 28 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d  f( (flags3 & MEM
f9b0: 5f 53 74 72 29 3d 3d 30 20 26 26 20 28 66 6c 61  _Str)==0 && (fla
f9c0: 67 73 33 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  gs3 & (MEM_Int|M
f9d0: 45 4d 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a  EM_Real))!=0 ){.
f9e0: 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
f9f0: 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20  ( pIn3->flags & 
fa00: 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20  MEM_Int );.     
fa10: 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e     testcase( pIn
fa20: 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  3->flags & MEM_R
fa30: 65 61 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 73  eal );.        s
fa40: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72  qlite3VdbeMemStr
fa50: 69 6e 67 69 66 79 28 70 49 6e 33 2c 20 65 6e 63  ingify(pIn3, enc
fa60: 6f 64 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20  oding, 1);.     
fa70: 20 20 20 74 65 73 74 63 61 73 65 28 20 28 66 6c     testcase( (fl
fa80: 61 67 73 33 26 4d 45 4d 5f 44 79 6e 29 20 21 3d  ags3&MEM_Dyn) !=
fa90: 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45   (pIn3->flags&ME
faa0: 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 20 20  M_Dyn) );.      
fab0: 20 20 66 6c 61 67 73 33 20 3d 20 28 70 49 6e 33    flags3 = (pIn3
fac0: 2d 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f 54  ->flags & ~MEM_T
fad0: 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67  ypeMask) | (flag
fae0: 73 33 20 26 20 4d 45 4d 5f 54 79 70 65 4d 61 73  s3 & MEM_TypeMas
faf0: 6b 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  k);.      }.    
fb00: 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  }.    assert( pO
fb10: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f  p->p4type==P4_CO
fb20: 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e 70 34  LLSEQ || pOp->p4
fb30: 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20 20  .pColl==0 );.   
fb40: 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 4d 65   res = sqlite3Me
fb50: 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20 70  mCompare(pIn3, p
fb60: 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f  In1, pOp->p4.pCo
fb70: 6c 6c 29 3b 0a 20 20 7d 0a 63 6f 6d 70 61 72 65  ll);.  }.compare
fb80: 5f 6f 70 3a 0a 20 20 2f 2a 20 41 74 20 74 68 69  _op:.  /* At thi
fb90: 73 20 70 6f 69 6e 74 2c 20 72 65 73 20 69 73 20  s point, res is 
fba0: 6e 65 67 61 74 69 76 65 2c 20 7a 65 72 6f 2c 20  negative, zero, 
fbb0: 6f 72 20 70 6f 73 69 74 69 76 65 20 69 66 20 72  or positive if r
fbc0: 65 67 5b 50 31 5d 20 69 73 0a 20 20 2a 2a 20 6c  eg[P1] is.  ** l
fbd0: 65 73 73 20 74 68 61 6e 2c 20 65 71 75 61 6c 20  ess than, equal 
fbe0: 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74  to, or greater t
fbf0: 68 61 6e 20 72 65 67 5b 50 33 5d 2c 20 72 65 73  han reg[P3], res
fc00: 70 65 63 74 69 76 65 6c 79 2e 20 20 43 6f 6d 70  pectively.  Comp
fc10: 75 74 65 0a 20 20 2a 2a 20 74 68 65 20 61 6e 73  ute.  ** the ans
fc20: 77 65 72 20 74 6f 20 74 68 69 73 20 6f 70 65 72  wer to this oper
fc30: 61 74 6f 72 20 69 6e 20 72 65 73 32 2c 20 64 65  ator in res2, de
fc40: 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 61 74 20  pending on what 
fc50: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 20  the comparison. 
fc60: 20 2a 2a 20 6f 70 65 72 61 74 6f 72 20 61 63 74   ** operator act
fc70: 75 61 6c 6c 79 20 69 73 2e 20 20 54 68 65 20 6e  ually is.  The n
fc80: 65 78 74 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64  ext block of cod
fc90: 65 20 64 65 70 65 6e 64 73 20 6f 6e 20 74 68 65  e depends on the
fca0: 20 66 61 63 74 0a 20 20 2a 2a 20 74 68 61 74 20   fact.  ** that 
fcb0: 74 68 65 20 36 20 63 6f 6d 70 61 72 69 73 6f 6e  the 6 comparison
fcc0: 20 6f 70 65 72 61 74 6f 72 73 20 61 72 65 20 63   operators are c
fcd0: 6f 6e 73 65 63 75 74 69 76 65 20 69 6e 74 65 67  onsecutive integ
fce0: 65 72 73 20 69 6e 20 74 68 69 73 0a 20 20 2a 2a  ers in this.  **
fcf0: 20 6f 72 64 65 72 3a 20 20 4e 45 2c 20 45 51 2c   order:  NE, EQ,
fd00: 20 47 54 2c 20 4c 45 2c 20 4c 54 2c 20 47 45 20   GT, LE, LT, GE 
fd10: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f  */.  assert( OP_
fd20: 45 71 3d 3d 4f 50 5f 4e 65 2b 31 20 29 3b 20 61  Eq==OP_Ne+1 ); a
fd30: 73 73 65 72 74 28 20 4f 50 5f 47 74 3d 3d 4f 50  ssert( OP_Gt==OP
fd40: 5f 4e 65 2b 32 20 29 3b 20 61 73 73 65 72 74 28  _Ne+2 ); assert(
fd50: 20 4f 50 5f 4c 65 3d 3d 4f 50 5f 4e 65 2b 33 20   OP_Le==OP_Ne+3 
fd60: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f  );.  assert( OP_
fd70: 4c 74 3d 3d 4f 50 5f 4e 65 2b 34 20 29 3b 20 61  Lt==OP_Ne+4 ); a
fd80: 73 73 65 72 74 28 20 4f 50 5f 47 65 3d 3d 4f 50  ssert( OP_Ge==OP
fd90: 5f 4e 65 2b 35 20 29 3b 0a 20 20 69 66 28 20 72  _Ne+5 );.  if( r
fda0: 65 73 3c 30 20 29 7b 20 20 20 20 20 20 20 20 20  es<0 ){         
fdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
fdc0: 2a 20 6e 65 2c 20 65 71 2c 20 67 74 2c 20 6c 65  * ne, eq, gt, le
fdd0: 2c 20 6c 74 2c 20 67 65 20 2a 2f 0a 20 20 20 20  , lt, ge */.    
fde0: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73  static const uns
fdf0: 69 67 6e 65 64 20 63 68 61 72 20 61 4c 54 62 5b  igned char aLTb[
fe00: 5d 20 3d 20 7b 20 31 2c 20 20 30 2c 20 20 30 2c  ] = { 1,  0,  0,
fe10: 20 20 31 2c 20 20 31 2c 20 20 30 20 7d 3b 0a 20    1,  1,  0 };. 
fe20: 20 20 20 72 65 73 32 20 3d 20 61 4c 54 62 5b 70     res2 = aLTb[p
fe30: 4f 70 2d 3e 6f 70 63 6f 64 65 20 2d 20 4f 50 5f  Op->opcode - OP_
fe40: 4e 65 5d 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  Ne];.  }else if(
fe50: 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 73   res==0 ){.    s
fe60: 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69  tatic const unsi
fe70: 67 6e 65 64 20 63 68 61 72 20 61 45 51 62 5b 5d  gned char aEQb[]
fe80: 20 3d 20 7b 20 30 2c 20 20 31 2c 20 20 30 2c 20   = { 0,  1,  0, 
fe90: 20 31 2c 20 20 30 2c 20 20 31 20 7d 3b 0a 20 20   1,  0,  1 };.  
fea0: 20 20 72 65 73 32 20 3d 20 61 45 51 62 5b 70 4f    res2 = aEQb[pO
feb0: 70 2d 3e 6f 70 63 6f 64 65 20 2d 20 4f 50 5f 4e  p->opcode - OP_N
fec0: 65 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  e];.  }else{.   
fed0: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e   static const un
fee0: 73 69 67 6e 65 64 20 63 68 61 72 20 61 47 54 62  signed char aGTb
fef0: 5b 5d 20 3d 20 7b 20 31 2c 20 20 30 2c 20 20 31  [] = { 1,  0,  1
ff00: 2c 20 20 30 2c 20 20 30 2c 20 20 31 20 7d 3b 0a  ,  0,  0,  1 };.
ff10: 20 20 20 20 72 65 73 32 20 3d 20 61 47 54 62 5b      res2 = aGTb[
ff20: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 2d 20 4f 50  pOp->opcode - OP
ff30: 5f 4e 65 5d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  _Ne];.  }..  /* 
ff40: 55 6e 64 6f 20 61 6e 79 20 63 68 61 6e 67 65 73  Undo any changes
ff50: 20 6d 61 64 65 20 62 79 20 61 70 70 6c 79 41 66   made by applyAf
ff60: 66 69 6e 69 74 79 28 29 20 74 6f 20 74 68 65 20  finity() to the 
ff70: 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 2e  input registers.
ff80: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70   */.  assert( (p
ff90: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
ffa0: 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67 73 31  _Dyn) == (flags1
ffb0: 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20   & MEM_Dyn) );. 
ffc0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 66   pIn1->flags = f
ffd0: 6c 61 67 73 31 3b 0a 20 20 61 73 73 65 72 74 28  lags1;.  assert(
ffe0: 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
fff0: 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61  MEM_Dyn) == (fla
10000 67 73 33 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29  gs3 & MEM_Dyn) )
10010 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  ;.  pIn3->flags 
10020 3d 20 66 6c 61 67 73 33 3b 0a 0a 20 20 69 66 28  = flags3;..  if(
10030 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
10040 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20  E_STOREP2 ){.   
10050 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
10060 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 69 43 6f 6d  p->p2];.    iCom
10070 70 61 72 65 20 3d 20 72 65 73 3b 0a 20 20 20 20  pare = res;.    
10080 69 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 53  if( (pOp->p5 & S
10090 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 29 21  QLITE_KEEPNULL)!
100a0 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54  =0 ){.      /* T
100b0 68 65 20 4b 45 45 50 4e 55 4c 4c 20 66 6c 61 67  he KEEPNULL flag
100c0 20 70 72 65 76 65 6e 74 73 20 4f 50 5f 45 71 20   prevents OP_Eq 
100d0 66 72 6f 6d 20 6f 76 65 72 77 72 69 74 69 6e 67  from overwriting
100e0 20 61 20 4e 55 4c 4c 20 77 69 74 68 20 31 0a 20   a NULL with 1. 
100f0 20 20 20 20 20 2a 2a 20 61 6e 64 20 70 72 65 76       ** and prev
10100 65 6e 74 73 20 4f 50 5f 4e 65 20 66 72 6f 6d 20  ents OP_Ne from 
10110 6f 76 65 72 77 72 69 74 69 6e 67 20 4e 55 4c 4c  overwriting NULL
10120 20 77 69 74 68 20 30 2e 20 20 54 68 69 73 20 66   with 0.  This f
10130 6c 61 67 0a 20 20 20 20 20 20 2a 2a 20 69 73 20  lag.      ** is 
10140 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20 63 6f 6e  only used in con
10150 74 65 78 74 73 20 77 68 65 72 65 20 65 69 74 68  texts where eith
10160 65 72 3a 0a 20 20 20 20 20 20 2a 2a 20 20 20 28  er:.      **   (
10170 31 29 20 6f 70 3d 3d 4f 50 5f 45 71 20 26 26 20  1) op==OP_Eq && 
10180 28 72 5b 50 32 5d 3d 3d 4e 55 4c 4c 20 7c 7c 20  (r[P2]==NULL || 
10190 72 5b 50 32 5d 3d 3d 30 29 0a 20 20 20 20 20 20  r[P2]==0).      
101a0 2a 2a 20 20 20 28 32 29 20 6f 70 3d 3d 4f 50 5f  **   (2) op==OP_
101b0 4e 65 20 26 26 20 28 72 5b 50 32 5d 3d 3d 4e 55  Ne && (r[P2]==NU
101c0 4c 4c 20 7c 7c 20 72 5b 50 32 5d 3d 3d 31 29 0a  LL || r[P2]==1).
101d0 20 20 20 20 20 20 2a 2a 20 54 68 65 72 65 66 6f        ** Therefo
101e0 72 65 20 69 74 20 69 73 20 6e 6f 74 20 6e 65 63  re it is not nec
101f0 65 73 73 61 72 79 20 74 6f 20 63 68 65 63 6b 20  essary to check 
10200 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
10210 5b 50 32 5d 20 66 6f 72 0a 20 20 20 20 20 20 2a  [P2] for.      *
10220 2a 20 4e 55 4c 4c 2e 20 2a 2f 0a 20 20 20 20 20  * NULL. */.     
10230 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
10240 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 7c 7c 20 70  code==OP_Ne || p
10250 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45  Op->opcode==OP_E
10260 71 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  q );.      asser
10270 74 28 20 72 65 73 32 3d 3d 30 20 7c 7c 20 72 65  t( res2==0 || re
10280 73 32 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 74  s2==1 );.      t
10290 65 73 74 63 61 73 65 28 20 72 65 73 32 3d 3d 30  estcase( res2==0
102a0 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   && pOp->opcode=
102b0 3d 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20 20 20  =OP_Eq );.      
102c0 74 65 73 74 63 61 73 65 28 20 72 65 73 32 3d 3d  testcase( res2==
102d0 31 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  1 && pOp->opcode
102e0 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20 20  ==OP_Eq );.     
102f0 20 74 65 73 74 63 61 73 65 28 20 72 65 73 32 3d   testcase( res2=
10300 3d 30 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64  =0 && pOp->opcod
10310 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20  e==OP_Ne );.    
10320 20 20 74 65 73 74 63 61 73 65 28 20 72 65 73 32    testcase( res2
10330 3d 3d 31 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f  ==1 && pOp->opco
10340 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20  de==OP_Ne );.   
10350 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 63     if( (pOp->opc
10360 6f 64 65 3d 3d 4f 50 5f 45 71 29 3d 3d 72 65 73  ode==OP_Eq)==res
10370 32 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d  2 ) break;.    }
10380 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  .    memAboutToC
10390 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
103a0 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
103b0 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
103c0 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  );.    pOut->u.i
103d0 20 3d 20 72 65 73 32 3b 0a 20 20 20 20 52 45 47   = res2;.    REG
103e0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
103f0 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 7d 65  >p2, pOut);.  }e
10400 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61  lse{.    VdbeBra
10410 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c  nchTaken(res!=0,
10420 20 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49   (pOp->p5 & SQLI
10430 54 45 5f 4e 55 4c 4c 45 51 29 3f 32 3a 33 29 3b  TE_NULLEQ)?2:3);
10440 0a 20 20 20 20 69 66 28 20 72 65 73 32 20 29 7b  .    if( res2 ){
10450 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  .      goto jump
10460 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20  _to_p2;.    }.  
10470 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
10480 20 4f 70 63 6f 64 65 3a 20 45 6c 73 65 4e 6f 74   Opcode: ElseNot
10490 45 71 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  Eq * P2 * * *.**
104a0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
104b0 6d 75 73 74 20 69 6d 6d 65 64 69 61 74 65 6c 79  must immediately
104c0 20 66 6f 6c 6c 6f 77 20 61 6e 20 4f 50 5f 4c 74   follow an OP_Lt
104d0 20 6f 72 20 4f 50 5f 47 74 20 63 6f 6d 70 61 72   or OP_Gt compar
104e0 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 0a 2a  ison operator..*
104f0 2a 20 49 66 20 72 65 73 75 6c 74 20 6f 66 20 61  * If result of a
10500 6e 20 4f 50 5f 45 71 20 63 6f 6d 70 61 72 69 73  n OP_Eq comparis
10510 6f 6e 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 74  on on the same t
10520 77 6f 20 6f 70 65 72 61 6e 64 73 0a 2a 2a 20 77  wo operands.** w
10530 6f 75 6c 64 20 68 61 76 65 20 62 65 20 4e 55 4c  ould have be NUL
10540 4c 20 6f 72 20 66 61 6c 73 65 20 28 30 29 2c 20  L or false (0), 
10550 74 68 65 6e 20 74 68 65 6e 20 6a 75 6d 70 20 74  then then jump t
10560 6f 20 50 32 2e 20 0a 2a 2a 20 49 66 20 74 68 65  o P2. .** If the
10570 20 72 65 73 75 6c 74 20 6f 66 20 61 6e 20 4f 50   result of an OP
10580 5f 45 71 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  _Eq comparison o
10590 6e 20 74 68 65 20 74 77 6f 20 70 72 65 76 69 6f  n the two previo
105a0 75 73 20 6f 70 65 72 61 6e 64 73 0a 2a 2a 20 77  us operands.** w
105b0 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20 74  ould have been t
105c0 72 75 65 20 28 31 29 2c 20 74 68 65 6e 20 66 61  rue (1), then fa
105d0 6c 6c 20 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a 63  ll through..*/.c
105e0 61 73 65 20 4f 50 5f 45 6c 73 65 4e 6f 74 45 71  ase OP_ElseNotEq
105f0 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 73 61 6d  : {       /* sam
10600 65 20 61 73 20 54 4b 5f 45 53 43 41 50 45 2c 20  e as TK_ESCAPE, 
10610 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74  jump */.  assert
10620 28 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20 61  ( pOp>aOp );.  a
10630 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f  ssert( pOp[-1].o
10640 70 63 6f 64 65 3d 3d 4f 50 5f 4c 74 20 7c 7c 20  pcode==OP_Lt || 
10650 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d  pOp[-1].opcode==
10660 4f 50 5f 47 74 20 29 3b 0a 20 20 61 73 73 65 72  OP_Gt );.  asser
10670 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 35 20 26 20  t( pOp[-1].p5 & 
10680 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29  SQLITE_STOREP2 )
10690 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
106a0 6b 65 6e 28 69 43 6f 6d 70 61 72 65 21 3d 30 2c  ken(iCompare!=0,
106b0 20 32 29 3b 0a 20 20 69 66 28 20 69 43 6f 6d 70   2);.  if( iComp
106c0 61 72 65 21 3d 30 20 29 20 67 6f 74 6f 20 6a 75  are!=0 ) goto ju
106d0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
106e0 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.}.../* Opcode
106f0 3a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 2a 20  : Permutation * 
10700 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53  * * P4 *.**.** S
10710 65 74 20 74 68 65 20 70 65 72 6d 75 74 61 74 69  et the permutati
10720 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 4f  on used by the O
10730 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74  P_Compare operat
10740 6f 72 20 69 6e 20 74 68 65 20 6e 65 78 74 0a 2a  or in the next.*
10750 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  * instruction.  
10760 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  The permutation 
10770 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  is stored in the
10780 20 50 34 20 6f 70 65 72 61 6e 64 2e 0a 2a 2a 0a   P4 operand..**.
10790 2a 2a 20 54 68 65 20 70 65 72 6d 75 74 61 74 69  ** The permutati
107a0 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  on is only valid
107b0 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 20   until the next 
107c0 4f 50 5f 43 6f 6d 70 61 72 65 20 74 68 61 74 20  OP_Compare that 
107d0 68 61 73 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41  has.** the OPFLA
107e0 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 73 65  G_PERMUTE bit se
107f0 74 20 69 6e 20 50 35 2e 20 54 79 70 69 63 61 6c  t in P5. Typical
10800 6c 79 20 74 68 65 20 4f 50 5f 50 65 72 6d 75 74  ly the OP_Permut
10810 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 0a 2a 2a  ation should .**
10820 20 6f 63 63 75 72 20 69 6d 6d 65 64 69 61 74 65   occur immediate
10830 6c 79 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20  ly prior to the 
10840 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2a 0a 2a  OP_Compare..**.*
10850 2a 20 54 68 65 20 66 69 72 73 74 20 69 6e 74 65  * The first inte
10860 67 65 72 20 69 6e 20 74 68 65 20 50 34 20 69 6e  ger in the P4 in
10870 74 65 67 65 72 20 61 72 72 61 79 20 69 73 20 74  teger array is t
10880 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65  he length of the
10890 20 61 72 72 61 79 0a 2a 2a 20 61 6e 64 20 64 6f   array.** and do
108a0 65 73 20 6e 6f 74 20 62 65 63 6f 6d 65 20 70 61  es not become pa
108b0 72 74 20 6f 66 20 74 68 65 20 70 65 72 6d 75 74  rt of the permut
108c0 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ation..*/.case O
108d0 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20 7b  P_Permutation: {
108e0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
108f0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52  p4type==P4_INTAR
10900 52 41 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28  RAY );.  assert(
10910 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a 20   pOp->p4.ai );. 
10920 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e   assert( pOp[1].
10930 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6d 70 61  opcode==OP_Compa
10940 72 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  re );.  assert( 
10950 70 4f 70 5b 31 5d 2e 70 35 20 26 20 4f 50 46 4c  pOp[1].p5 & OPFL
10960 41 47 5f 50 45 52 4d 55 54 45 20 29 3b 0a 20 20  AG_PERMUTE );.  
10970 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
10980 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20 50 31 20  ode: Compare P1 
10990 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
109a0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 40 50 33  ynopsis: r[P1@P3
109b0 5d 20 3c 2d 3e 20 72 5b 50 32 40 50 33 5d 0a 2a  ] <-> r[P2@P3].*
109c0 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f  *.** Compare two
109d0 20 76 65 63 74 6f 72 73 20 6f 66 20 72 65 67 69   vectors of regi
109e0 73 74 65 72 73 20 69 6e 20 72 65 67 28 50 31 29  sters in reg(P1)
109f0 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31 29 20 28  ..reg(P1+P3-1) (
10a00 63 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 76 65 63  call this.** vec
10a10 74 6f 72 20 22 41 22 29 20 61 6e 64 20 69 6e 20  tor "A") and in 
10a20 72 65 67 28 50 32 29 2e 2e 72 65 67 28 50 32 2b  reg(P2)..reg(P2+
10a30 50 33 2d 31 29 20 28 22 42 22 29 2e 20 20 53 61  P3-1) ("B").  Sa
10a40 76 65 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  ve the result of
10a50 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73  .** the comparis
10a60 6f 6e 20 66 6f 72 20 75 73 65 20 62 79 20 74 68  on for use by th
10a70 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69  e next OP_Jump i
10a80 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 49  nstruct..**.** I
10a90 66 20 50 35 20 68 61 73 20 74 68 65 20 4f 50 46  f P5 has the OPF
10aa0 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20  LAG_PERMUTE bit 
10ab0 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 6f 72  set, then the or
10ac0 64 65 72 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  der of compariso
10ad0 6e 20 69 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e  n is.** determin
10ae0 65 64 20 62 79 20 74 68 65 20 6d 6f 73 74 20 72  ed by the most r
10af0 65 63 65 6e 74 20 4f 50 5f 50 65 72 6d 75 74 61  ecent OP_Permuta
10b00 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 20 20  tion operator.  
10b10 49 66 20 74 68 65 0a 2a 2a 20 4f 50 46 4c 41 47  If the.** OPFLAG
10b20 5f 50 45 52 4d 55 54 45 20 62 69 74 20 69 73 20  _PERMUTE bit is 
10b30 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 67 69  clear, then regi
10b40 73 74 65 72 20 61 72 65 20 63 6f 6d 70 61 72 65  ster are compare
10b50 64 20 69 6e 20 73 65 71 75 65 6e 74 69 61 6c 0a  d in sequential.
10b60 2a 2a 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20  ** order..**.** 
10b70 50 34 20 69 73 20 61 20 4b 65 79 49 6e 66 6f 20  P4 is a KeyInfo 
10b80 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64  structure that d
10b90 65 66 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67  efines collating
10ba0 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64 20 73   sequences and s
10bb0 6f 72 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f  ort.** orders fo
10bc0 72 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  r the comparison
10bd0 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61 74 69  .  The permutati
10be0 6f 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 72 65  on applies to re
10bf0 67 69 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e  gisters.** only.
10c00 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c    The KeyInfo el
10c10 65 6d 65 6e 74 73 20 61 72 65 20 75 73 65 64 20  ements are used 
10c20 73 65 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a  sequentially..**
10c30 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 61 72 69 73  .** The comparis
10c40 6f 6e 20 69 73 20 61 20 73 6f 72 74 20 63 6f 6d  on is a sort com
10c50 70 61 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c  parison, so NULL
10c60 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c  s compare equal,
10c70 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65  .** NULLs are le
10c80 73 73 20 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c  ss than numbers,
10c90 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6c 65 73   numbers are les
10ca0 73 20 74 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a  s than strings,.
10cb0 2a 2a 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61  ** and strings a
10cc0 72 65 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f  re less than blo
10cd0 62 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  bs..*/.case OP_C
10ce0 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20  ompare: {.  int 
10cf0 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e  n;.  int i;.  in
10d00 74 20 70 31 3b 0a 20 20 69 6e 74 20 70 32 3b 0a  t p1;.  int p2;.
10d10 20 20 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20    const KeyInfo 
10d20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74  *pKeyInfo;.  int
10d30 20 69 64 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20   idx;.  CollSeq 
10d40 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f  *pColl;    /* Co
10d50 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
10d60 20 74 6f 20 75 73 65 20 6f 6e 20 74 68 69 73 20   to use on this 
10d70 74 65 72 6d 20 2a 2f 0a 20 20 69 6e 74 20 62 52  term */.  int bR
10d80 65 76 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ev;          /* 
10d90 54 72 75 65 20 66 6f 72 20 44 45 53 43 45 4e 44  True for DESCEND
10da0 49 4e 47 20 73 6f 72 74 20 6f 72 64 65 72 20 2a  ING sort order *
10db0 2f 0a 20 20 69 6e 74 20 2a 61 50 65 72 6d 75 74  /.  int *aPermut
10dc0 65 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 70 65  e;     /* The pe
10dd0 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a 20 20  rmutation */..  
10de0 69 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f  if( (pOp->p5 & O
10df0 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 29 3d 3d  PFLAG_PERMUTE)==
10e00 30 20 29 7b 0a 20 20 20 20 61 50 65 72 6d 75 74  0 ){.    aPermut
10e10 65 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a  e = 0;.  }else{.
10e20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e      assert( pOp>
10e30 61 4f 70 20 29 3b 0a 20 20 20 20 61 73 73 65 72  aOp );.    asser
10e40 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64  t( pOp[-1].opcod
10e50 65 3d 3d 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f  e==OP_Permutatio
10e60 6e 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  n );.    assert(
10e70 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d   pOp[-1].p4type=
10e80 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a  =P4_INTARRAY );.
10e90 20 20 20 20 61 50 65 72 6d 75 74 65 20 3d 20 70      aPermute = p
10ea0 4f 70 5b 2d 31 5d 2e 70 34 2e 61 69 20 2b 20 31  Op[-1].p4.ai + 1
10eb0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 61 50  ;.    assert( aP
10ec0 65 72 6d 75 74 65 21 3d 30 20 29 3b 0a 20 20 7d  ermute!=0 );.  }
10ed0 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  .  n = pOp->p3;.
10ee0 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70    pKeyInfo = pOp
10ef0 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20  ->p4.pKeyInfo;. 
10f00 20 61 73 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a   assert( n>0 );.
10f10 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e    assert( pKeyIn
10f20 66 6f 21 3d 30 20 29 3b 0a 20 20 70 31 20 3d 20  fo!=0 );.  p1 = 
10f30 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20  pOp->p1;.  p2 = 
10f40 70 4f 70 2d 3e 70 32 3b 0a 23 69 66 64 65 66 20  pOp->p2;.#ifdef 
10f50 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
10f60 66 28 20 61 50 65 72 6d 75 74 65 20 29 7b 0a 20  f( aPermute ){. 
10f70 20 20 20 69 6e 74 20 6b 2c 20 6d 78 20 3d 20 30     int k, mx = 0
10f80 3b 0a 20 20 20 20 66 6f 72 28 6b 3d 30 3b 20 6b  ;.    for(k=0; k
10f90 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28 20 61 50 65  <n; k++) if( aPe
10fa0 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78  rmute[k]>mx ) mx
10fb0 20 3d 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a   = aPermute[k];.
10fc0 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30      assert( p1>0
10fd0 20 26 26 20 70 31 2b 6d 78 3c 3d 28 70 2d 3e 6e   && p1+mx<=(p->n
10fe0 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
10ff0 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73 73  or)+1 );.    ass
11000 65 72 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b  ert( p2>0 && p2+
11010 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  mx<=(p->nMem+1 -
11020 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29   p->nCursor)+1 )
11030 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
11040 73 73 65 72 74 28 20 70 31 3e 30 20 26 26 20 70  ssert( p1>0 && p
11050 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  1+n<=(p->nMem+1 
11060 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  - p->nCursor)+1 
11070 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
11080 32 3e 30 20 26 26 20 70 32 2b 6e 3c 3d 28 70 2d  2>0 && p2+n<=(p-
11090 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
110a0 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 0a 23  rsor)+1 );.  }.#
110b0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
110c0 44 45 42 55 47 20 2a 2f 0a 20 20 66 6f 72 28 69  DEBUG */.  for(i
110d0 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20  =0; i<n; i++){. 
110e0 20 20 20 69 64 78 20 3d 20 61 50 65 72 6d 75 74     idx = aPermut
110f0 65 20 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d 20  e ? aPermute[i] 
11100 3a 20 69 3b 0a 20 20 20 20 61 73 73 65 72 74 28  : i;.    assert(
11110 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
11120 6d 5b 70 31 2b 69 64 78 5d 29 20 29 3b 0a 20 20  m[p1+idx]) );.  
11130 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
11140 61 6c 69 64 28 26 61 4d 65 6d 5b 70 32 2b 69 64  alid(&aMem[p2+id
11150 78 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53  x]) );.    REGIS
11160 54 45 52 5f 54 52 41 43 45 28 70 31 2b 69 64 78  TER_TRACE(p1+idx
11170 2c 20 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29  , &aMem[p1+idx])
11180 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
11190 52 41 43 45 28 70 32 2b 69 64 78 2c 20 26 61 4d  RACE(p2+idx, &aM
111a0 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a 20 20 20  em[p2+idx]);.   
111b0 20 61 73 73 65 72 74 28 20 69 3c 70 4b 65 79 49   assert( i<pKeyI
111c0 6e 66 6f 2d 3e 6e 4b 65 79 46 69 65 6c 64 20 29  nfo->nKeyField )
111d0 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b  ;.    pColl = pK
111e0 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d  eyInfo->aColl[i]
111f0 3b 0a 20 20 20 20 62 52 65 76 20 3d 20 70 4b 65  ;.    bRev = pKe
11200 79 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65  yInfo->aSortOrde
11210 72 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61  r[i];.    iCompa
11220 72 65 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43  re = sqlite3MemC
11230 6f 6d 70 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b  ompare(&aMem[p1+
11240 69 64 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69  idx], &aMem[p2+i
11250 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20  dx], pColl);.   
11260 20 69 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b   if( iCompare ){
11270 0a 20 20 20 20 20 20 69 66 28 20 62 52 65 76 20  .      if( bRev 
11280 29 20 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43  ) iCompare = -iC
11290 6f 6d 70 61 72 65 3b 0a 20 20 20 20 20 20 62 72  ompare;.      br
112a0 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  eak;.    }.  }. 
112b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
112c0 63 6f 64 65 3a 20 4a 75 6d 70 20 50 31 20 50 32  code: Jump P1 P2
112d0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75   P3 * *.**.** Ju
112e0 6d 70 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75  mp to the instru
112f0 63 74 69 6f 6e 20 61 74 20 61 64 64 72 65 73 73  ction at address
11300 20 50 31 2c 20 50 32 2c 20 6f 72 20 50 33 20 64   P1, P2, or P3 d
11310 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
11320 68 65 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f  her.** in the mo
11330 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d  st recent OP_Com
11340 70 61 72 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  pare instruction
11350 20 74 68 65 20 50 31 20 76 65 63 74 6f 72 20 77   the P1 vector w
11360 61 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20  as less than.** 
11370 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65  equal to, or gre
11380 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 50 32  ater than the P2
11390 20 76 65 63 74 6f 72 2c 20 72 65 73 70 65 63 74   vector, respect
113a0 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ively..*/.case O
113b0 50 5f 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20 20  P_Jump: {       
113c0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
113d0 0a 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3c  .  if( iCompare<
113e0 30 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61  0 ){.    VdbeBra
113f0 6e 63 68 54 61 6b 65 6e 28 30 2c 33 29 3b 20 70  nchTaken(0,3); p
11400 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70  Op = &aOp[pOp->p
11410 31 20 2d 20 31 5d 3b 0a 20 20 7d 65 6c 73 65 20  1 - 1];.  }else 
11420 69 66 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30 20  if( iCompare==0 
11430 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  ){.    VdbeBranc
11440 68 54 61 6b 65 6e 28 31 2c 33 29 3b 20 70 4f 70  hTaken(1,3); pOp
11450 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20   = &aOp[pOp->p2 
11460 2d 20 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  - 1];.  }else{. 
11470 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
11480 65 6e 28 32 2c 33 29 3b 20 70 4f 70 20 3d 20 26  en(2,3); pOp = &
11490 61 4f 70 5b 70 4f 70 2d 3e 70 33 20 2d 20 31 5d  aOp[pOp->p3 - 1]
114a0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
114b0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64  ../* Opcode: And
114c0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
114d0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
114e0 3d 28 72 5b 50 31 5d 20 26 26 20 72 5b 50 32 5d  =(r[P1] && r[P2]
114f0 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  ).**.** Take the
11500 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66 20   logical AND of 
11510 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
11520 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
11530 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74  2 and.** write t
11540 68 65 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 72  he result into r
11550 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a  egister P3..**.*
11560 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20 6f  * If either P1 o
11570 72 20 50 32 20 69 73 20 30 20 28 66 61 6c 73 65  r P2 is 0 (false
11580 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  ) then the resul
11590 74 20 69 73 20 30 20 65 76 65 6e 20 69 66 0a 2a  t is 0 even if.*
115a0 2a 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75  * the other inpu
115b0 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55  t is NULL.  A NU
115c0 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f 72 20 74  LL and true or t
115d0 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a  wo NULLs give.**
115e0 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a   a NULL output..
115f0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72  */./* Opcode: Or
11600 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
11610 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
11620 3d 28 72 5b 50 31 5d 20 7c 7c 20 72 5b 50 32 5d  =(r[P1] || r[P2]
11630 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  ).**.** Take the
11640 20 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74   logical OR of t
11650 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
11660 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20  ister P1 and P2 
11670 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  and.** store the
11680 20 61 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73   answer in regis
11690 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P3..**.** If
116a0 20 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32   either P1 or P2
116b0 20 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75   is nonzero (tru
116c0 65 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  e) then the resu
116d0 6c 74 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a  lt is 1 (true).*
116e0 2a 20 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74  * even if the ot
116f0 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
11700 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66  L.  A NULL and f
11710 61 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c  alse or two NULL
11720 73 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c  s.** give a NULL
11730 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65   output..*/.case
11740 20 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20   OP_And:        
11750 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
11760 20 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e   TK_AND, in1, in
11770 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
11780 4f 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20  OP_Or: {        
11790 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
117a0 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c  TK_OR, in1, in2,
117b0 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76   out3 */.  int v
117c0 31 3b 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70  1;    /* Left op
117d0 65 72 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45  erand:  0==FALSE
117e0 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e  , 1==TRUE, 2==UN
117f0 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f  KNOWN or NULL */
11800 0a 20 20 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a  .  int v2;    /*
11810 20 52 69 67 68 74 20 6f 70 65 72 61 6e 64 3a 20   Right operand: 
11820 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55  0==FALSE, 1==TRU
11830 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72  E, 2==UNKNOWN or
11840 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 70 49 6e 31   NULL */..  pIn1
11850 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
11860 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
11870 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
11880 29 7b 0a 20 20 20 20 76 31 20 3d 20 32 3b 0a 20  ){.    v1 = 2;. 
11890 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 31 20 3d   }else{.    v1 =
118a0 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
118b0 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 20  alue(pIn1)!=0;. 
118c0 20 7d 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65   }.  pIn2 = &aMe
118d0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66  m[pOp->p2];.  if
118e0 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20  ( pIn2->flags & 
118f0 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
11900 76 32 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b  v2 = 2;.  }else{
11910 0a 20 20 20 20 76 32 20 3d 20 73 71 6c 69 74 65  .    v2 = sqlite
11920 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
11930 6e 32 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66  n2)!=0;.  }.  if
11940 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
11950 50 5f 41 6e 64 20 29 7b 0a 20 20 20 20 73 74 61  P_And ){.    sta
11960 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  tic const unsign
11970 65 64 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69  ed char and_logi
11980 63 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c  c[] = { 0, 0, 0,
11990 20 30 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20   0, 1, 2, 0, 2, 
119a0 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e  2 };.    v1 = an
119b0 64 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d  d_logic[v1*3+v2]
119c0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
119d0 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69  tatic const unsi
119e0 67 6e 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67  gned char or_log
119f0 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32  ic[] = { 0, 1, 2
11a00 2c 20 31 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c  , 1, 1, 1, 2, 1,
11a10 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f   2 };.    v1 = o
11a20 72 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d  r_logic[v1*3+v2]
11a30 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26  ;.  }.  pOut = &
11a40 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
11a50 20 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20   if( v1==2 ){.  
11a60 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
11a70 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  (pOut, MEM_Null)
11a80 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
11a90 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20  Out->u.i = v1;. 
11aa0 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
11ab0 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
11ac0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
11ad0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
11ae0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
11af0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
11b00 20 21 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e   !r[P1].**.** In
11b10 74 65 72 70 72 65 74 20 74 68 65 20 76 61 6c 75  terpret the valu
11b20 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
11b30 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61   as a boolean va
11b40 6c 75 65 2e 20 20 53 74 6f 72 65 20 74 68 65 0a  lue.  Store the.
11b50 2a 2a 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c  ** boolean compl
11b60 65 6d 65 6e 74 20 69 6e 20 72 65 67 69 73 74 65  ement in registe
11b70 72 20 50 32 2e 20 20 49 66 20 74 68 65 20 76 61  r P2.  If the va
11b80 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
11b90 50 31 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20  P1 is .** NULL, 
11ba0 74 68 65 6e 20 61 20 4e 55 4c 4c 20 69 73 20 73  then a NULL is s
11bb0 74 6f 72 65 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a  tored in P2..*/.
11bc0 63 61 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20  case OP_Not: {  
11bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11be0 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c   same as TK_NOT,
11bf0 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20   in1, out2 */.  
11c00 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
11c10 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p1];.  pOut = 
11c20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
11c30 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
11c40 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
11c50 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
11c60 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
11c70 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   ){.    pOut->fl
11c80 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
11c90 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 21     pOut->u.i = !
11ca0 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
11cb0 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20  lue(pIn1);.  }. 
11cc0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
11cd0 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20 50 31 20  code: BitNot P1 
11ce0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
11cf0 70 73 69 73 3a 20 72 5b 50 31 5d 3d 20 7e 72 5b  psis: r[P1]= ~r[
11d00 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70  P1].**.** Interp
11d10 72 65 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ret the content 
11d20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 61  of register P1 a
11d30 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 53  s an integer.  S
11d40 74 6f 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73  tore the.** ones
11d50 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74  -complement of t
11d60 68 65 20 50 31 20 76 61 6c 75 65 20 69 6e 74 6f  he P1 value into
11d70 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49   register P2.  I
11d80 66 20 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20  f P1 holds.** a 
11d90 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20  NULL then store 
11da0 61 20 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f  a NULL in P2..*/
11db0 0a 63 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a  .case OP_BitNot:
11dc0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
11dd0 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54  * same as TK_BIT
11de0 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a  NOT, in1, out2 *
11df0 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
11e00 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
11e10 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
11e20 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  2];.  sqlite3Vdb
11e30 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
11e40 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
11e50 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
11e60 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 4f 75 74  )==0 ){.    pOut
11e70 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
11e80 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  t;.    pOut->u.i
11e90 20 3d 20 7e 73 71 6c 69 74 65 33 56 64 62 65 49   = ~sqlite3VdbeI
11ea0 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20  ntValue(pIn1);. 
11eb0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
11ec0 2a 20 4f 70 63 6f 64 65 3a 20 4f 6e 63 65 20 50  * Opcode: Once P
11ed0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
11ee0 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   Fall through to
11ef0 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
11f00 63 74 69 6f 6e 20 74 68 65 20 66 69 72 73 74 20  ction the first 
11f10 74 69 6d 65 20 74 68 69 73 20 6f 70 63 6f 64 65  time this opcode
11f20 20 69 73 0a 2a 2a 20 65 6e 63 6f 75 6e 74 65 72   is.** encounter
11f30 65 64 20 6f 6e 20 65 61 63 68 20 69 6e 76 6f 63  ed on each invoc
11f40 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 62 79 74  ation of the byt
11f50 65 2d 63 6f 64 65 20 70 72 6f 67 72 61 6d 2e 20  e-code program. 
11f60 20 4a 75 6d 70 20 74 6f 20 50 32 0a 2a 2a 20 6f   Jump to P2.** o
11f70 6e 20 74 68 65 20 73 65 63 6f 6e 64 20 61 6e 64  n the second and
11f80 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20   all subsequent 
11f90 65 6e 63 6f 75 6e 74 65 72 73 20 64 75 72 69 6e  encounters durin
11fa0 67 20 74 68 65 20 73 61 6d 65 20 69 6e 76 6f 63  g the same invoc
11fb0 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 6f 70  ation..**.** Top
11fc0 2d 6c 65 76 65 6c 20 70 72 6f 67 72 61 6d 73 20  -level programs 
11fd0 64 65 74 65 72 6d 69 6e 65 20 66 69 72 73 74 20  determine first 
11fe0 69 6e 76 6f 63 61 74 69 6f 6e 20 62 79 20 63 6f  invocation by co
11ff0 6d 70 61 72 69 6e 67 20 74 68 65 20 50 31 0a 2a  mparing the P1.*
12000 2a 20 6f 70 65 72 61 6e 64 20 61 67 61 69 6e 73  * operand agains
12010 74 20 74 68 65 20 50 31 20 6f 70 65 72 61 6e 64  t the P1 operand
12020 20 6f 6e 20 74 68 65 20 4f 50 5f 49 6e 69 74 20   on the OP_Init 
12030 6f 70 63 6f 64 65 20 61 74 20 74 68 65 20 62 65  opcode at the be
12040 67 69 6e 6e 69 6e 67 0a 2a 2a 20 6f 66 20 74 68  ginning.** of th
12050 65 20 70 72 6f 67 72 61 6d 2e 20 20 49 66 20 74  e program.  If t
12060 68 65 20 50 31 20 76 61 6c 75 65 73 20 64 69 66  he P1 values dif
12070 66 65 72 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74  fer, then fall t
12080 68 72 6f 75 67 68 20 61 6e 64 20 6d 61 6b 65 0a  hrough and make.
12090 2a 2a 20 74 68 65 20 50 31 20 6f 66 20 74 68 69  ** the P1 of thi
120a0 73 20 6f 70 63 6f 64 65 20 65 71 75 61 6c 20 74  s opcode equal t
120b0 6f 20 74 68 65 20 50 31 20 6f 66 20 4f 50 5f 49  o the P1 of OP_I
120c0 6e 69 74 2e 20 20 49 66 20 50 31 20 76 61 6c 75  nit.  If P1 valu
120d0 65 73 20 61 72 65 0a 2a 2a 20 74 68 65 20 73 61  es are.** the sa
120e0 6d 65 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  me then take the
120f0 20 6a 75 6d 70 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72   jump..**.** For
12100 20 73 75 62 70 72 6f 67 72 61 6d 73 2c 20 74 68   subprograms, th
12110 65 72 65 20 69 73 20 61 20 62 69 74 6d 61 73 6b  ere is a bitmask
12120 20 69 6e 20 74 68 65 20 56 64 62 65 46 72 61 6d   in the VdbeFram
12130 65 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e 65  e that determine
12140 73 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20  s.** whether or 
12150 6e 6f 74 20 74 68 65 20 6a 75 6d 70 20 73 68 6f  not the jump sho
12160 75 6c 64 20 62 65 20 74 61 6b 65 6e 2e 20 20 54  uld be taken.  T
12170 68 65 20 62 69 74 6d 61 73 6b 20 69 73 20 6e 65  he bitmask is ne
12180 63 65 73 73 61 72 79 0a 2a 2a 20 62 65 63 61 75  cessary.** becau
12190 73 65 20 74 68 65 20 73 65 6c 66 2d 61 6c 74 65  se the self-alte
121a0 72 69 6e 67 20 63 6f 64 65 20 74 72 69 63 6b 20  ring code trick 
121b0 64 6f 65 73 20 6e 6f 74 20 77 6f 72 6b 20 66 6f  does not work fo
121c0 72 20 72 65 63 75 72 73 69 76 65 0a 2a 2a 20 74  r recursive.** t
121d0 72 69 67 67 65 72 73 2e 0a 2a 2f 0a 63 61 73 65  riggers..*/.case
121e0 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20 20 20 20   OP_Once: {     
121f0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
12200 2a 2f 0a 20 20 75 33 32 20 69 41 64 64 72 3b 20  */.  u32 iAddr; 
12210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12220 2a 20 41 64 64 72 65 73 73 20 6f 66 20 74 68 69  * Address of thi
12230 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f  s instruction */
12240 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 4f  .  assert( p->aO
12250 70 5b 30 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  p[0].opcode==OP_
12260 49 6e 69 74 20 29 3b 0a 20 20 69 66 28 20 70 2d  Init );.  if( p-
12270 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 69  >pFrame ){.    i
12280 41 64 64 72 20 3d 20 28 69 6e 74 29 28 70 4f 70  Addr = (int)(pOp
12290 20 2d 20 70 2d 3e 61 4f 70 29 3b 0a 20 20 20 20   - p->aOp);.    
122a0 69 66 28 20 28 70 2d 3e 70 46 72 61 6d 65 2d 3e  if( (p->pFrame->
122b0 61 4f 6e 63 65 5b 69 41 64 64 72 2f 38 5d 20 26  aOnce[iAddr/8] &
122c0 20 28 31 3c 3c 28 69 41 64 64 72 20 26 20 37 29   (1<<(iAddr & 7)
122d0 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 56  ))!=0 ){.      V
122e0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31  dbeBranchTaken(1
122f0 2c 20 32 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f  , 2);.      goto
12300 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20   jump_to_p2;.   
12310 20 7d 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d 65   }.    p->pFrame
12320 2d 3e 61 4f 6e 63 65 5b 69 41 64 64 72 2f 38 5d  ->aOnce[iAddr/8]
12330 20 7c 3d 20 31 3c 3c 28 69 41 64 64 72 20 26 20   |= 1<<(iAddr & 
12340 37 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  7);.  }else{.   
12350 20 69 66 28 20 70 2d 3e 61 4f 70 5b 30 5d 2e 70   if( p->aOp[0].p
12360 31 3d 3d 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  1==pOp->p1 ){.  
12370 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
12380 6b 65 6e 28 31 2c 20 32 29 3b 0a 20 20 20 20 20  ken(1, 2);.     
12390 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
123a0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 56 64  ;.    }.  }.  Vd
123b0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c  beBranchTaken(0,
123c0 20 32 29 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d   2);.  pOp->p1 =
123d0 20 70 2d 3e 61 4f 70 5b 30 5d 2e 70 31 3b 0a 20   p->aOp[0].p1;. 
123e0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
123f0 63 6f 64 65 3a 20 49 66 20 50 31 20 50 32 20 50  code: If P1 P2 P
12400 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
12410 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61   to P2 if the va
12420 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
12430 50 31 20 69 73 20 74 72 75 65 2e 20 20 54 68 65  P1 is true.  The
12440 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e   value.** is con
12450 73 69 64 65 72 65 64 20 74 72 75 65 20 69 66 20  sidered true if 
12460 69 74 20 69 73 20 6e 75 6d 65 72 69 63 20 61 6e  it is numeric an
12470 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66 20  d non-zero.  If 
12480 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20  the value.** in 
12490 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  P1 is NULL then 
124a0 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66  take the jump if
124b0 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33 20   and only if P3 
124c0 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a  is non-zero..*/.
124d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74  /* Opcode: IfNot
124e0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
124f0 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
12500 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
12510 65 67 69 73 74 65 72 20 50 31 20 69 73 20 46 61  egister P1 is Fa
12520 6c 73 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a  lse.  The value.
12530 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  ** is considered
12540 20 66 61 6c 73 65 20 69 66 20 69 74 20 68 61 73   false if it has
12550 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65   a numeric value
12560 20 6f 66 20 7a 65 72 6f 2e 20 20 49 66 20 74 68   of zero.  If th
12570 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31  e value.** in P1
12580 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61   is NULL then ta
12590 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61  ke the jump if a
125a0 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33 20 69 73  nd only if P3 is
125b0 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 63 61   non-zero..*/.ca
125c0 73 65 20 4f 50 5f 49 66 3a 20 20 20 20 20 20 20  se OP_If:       
125d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
125e0 70 2c 20 69 6e 31 20 2a 2f 0a 63 61 73 65 20 4f  p, in1 */.case O
125f0 50 5f 49 66 4e 6f 74 3a 20 7b 20 20 20 20 20 20  P_IfNot: {      
12600 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
12610 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a 20  n1 */.  int c;. 
12620 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
12630 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49  p->p1];.  if( pI
12640 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
12650 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 63 20 3d 20  Null ){.    c = 
12660 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 65 6c 73 65  pOp->p3;.  }else
12670 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  {.#ifdef SQLITE_
12680 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
12690 49 4e 54 0a 20 20 20 20 63 20 3d 20 73 71 6c 69  INT.    c = sqli
126a0 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
126b0 70 49 6e 31 29 21 3d 30 3b 0a 23 65 6c 73 65 0a  pIn1)!=0;.#else.
126c0 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56      c = sqlite3V
126d0 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e  dbeRealValue(pIn
126e0 31 29 21 3d 30 2e 30 3b 0a 23 65 6e 64 69 66 0a  1)!=0.0;.#endif.
126f0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63      if( pOp->opc
12700 6f 64 65 3d 3d 4f 50 5f 49 66 4e 6f 74 20 29 20  ode==OP_IfNot ) 
12710 63 20 3d 20 21 63 3b 0a 20 20 7d 0a 20 20 56 64  c = !c;.  }.  Vd
12720 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 63 21  beBranchTaken(c!
12730 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 63 20  =0, 2);.  if( c 
12740 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  ){.    goto jump
12750 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
12760 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
12770 65 3a 20 49 73 4e 75 6c 6c 20 50 31 20 50 32 20  e: IsNull P1 P2 
12780 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
12790 73 3a 20 69 66 20 72 5b 50 31 5d 3d 3d 4e 55 4c  s: if r[P1]==NUL
127a0 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  L goto P2.**.** 
127b0 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
127c0 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
127d0 74 65 72 20 50 31 20 69 73 20 4e 55 4c 4c 2e 0a  ter P1 is NULL..
127e0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c  */.case OP_IsNul
127f0 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  l: {            
12800 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 49 53  /* same as TK_IS
12810 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20  NULL, jump, in1 
12820 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
12830 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56 64  m[pOp->p1];.  Vd
12840 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 28  beBranchTaken( (
12850 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
12860 4d 5f 4e 75 6c 6c 29 21 3d 30 2c 20 32 29 3b 0a  M_Null)!=0, 2);.
12870 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
12880 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  gs & MEM_Null)!=
12890 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75  0 ){.    goto ju
128a0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
128b0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
128c0 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50 31 20  ode: NotNull P1 
128d0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
128e0 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d  psis: if r[P1]!=
128f0 4e 55 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  NULL goto P2.**.
12900 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
12910 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
12920 67 69 73 74 65 72 20 50 31 20 69 73 20 6e 6f 74  gister P1 is not
12930 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65   NULL.  .*/.case
12940 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20   OP_NotNull: {  
12950 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
12960 65 20 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c  e as TK_NOTNULL,
12970 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
12980 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
12990 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42 72 61  ->p1];.  VdbeBra
129a0 6e 63 68 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d  nchTaken( (pIn1-
129b0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
129c0 6c 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28  l)==0, 2);.  if(
129d0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
129e0 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a  MEM_Null)==0 ){.
129f0 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
12a00 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _p2;.  }.  break
12a10 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
12a20 49 66 4e 75 6c 6c 52 6f 77 20 50 31 20 50 32 20  IfNullRow P1 P2 
12a30 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
12a40 69 73 3a 20 69 66 20 50 31 2e 6e 75 6c 6c 52 6f  is: if P1.nullRo
12a50 77 20 74 68 65 6e 20 72 5b 50 33 5d 3d 4e 55 4c  w then r[P3]=NUL
12a60 4c 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  L, goto P2.**.**
12a70 20 43 68 65 63 6b 20 74 68 65 20 63 75 72 73 6f   Check the curso
12a80 72 20 50 31 20 74 6f 20 73 65 65 20 69 66 20 69  r P1 to see if i
12a90 74 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  t is currently p
12aa0 6f 69 6e 74 69 6e 67 20 61 74 20 61 20 4e 55 4c  ointing at a NUL
12ab0 4c 20 72 6f 77 2e 0a 2a 2a 20 49 66 20 69 74 20  L row..** If it 
12ac0 69 73 2c 20 74 68 65 6e 20 73 65 74 20 72 65 67  is, then set reg
12ad0 69 73 74 65 72 20 50 33 20 74 6f 20 4e 55 4c 4c  ister P3 to NULL
12ae0 20 61 6e 64 20 6a 75 6d 70 20 69 6d 6d 65 64 69   and jump immedi
12af0 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20  ately to P2..** 
12b00 49 66 20 50 31 20 69 73 20 6e 6f 74 20 6f 6e 20  If P1 is not on 
12b10 61 20 4e 55 4c 4c 20 72 6f 77 2c 20 74 68 65 6e  a NULL row, then
12b20 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 77 69   fall through wi
12b30 74 68 6f 75 74 20 6d 61 6b 69 6e 67 20 61 6e 79  thout making any
12b40 0a 2a 2a 20 63 68 61 6e 67 65 73 2e 0a 2a 2f 0a  .** changes..*/.
12b50 63 61 73 65 20 4f 50 5f 49 66 4e 75 6c 6c 52 6f  case OP_IfNullRo
12b60 77 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20  w: {         /* 
12b70 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74  jump */.  assert
12b80 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
12b90 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
12ba0 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
12bb0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
12bc0 5d 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 2d  ]!=0 );.  if( p-
12bd0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d  >apCsr[pOp->p1]-
12be0 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
12bf0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
12c00 74 4e 75 6c 6c 28 61 4d 65 6d 20 2b 20 70 4f 70  tNull(aMem + pOp
12c10 2d 3e 70 33 29 3b 0a 20 20 20 20 67 6f 74 6f 20  ->p3);.    goto 
12c20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
12c30 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
12c40 70 63 6f 64 65 3a 20 4c 6f 63 61 74 69 6f 6e 20  pcode: Location 
12c50 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
12c60 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 20 3d  ynopsis: r[P2] =
12c70 20 6c 6f 63 61 74 69 6f 6e 28 50 31 29 0a 2a 2a   location(P1).**
12c80 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72 65 67  .** Store in reg
12c90 69 73 74 65 72 20 72 5b 50 32 5d 20 74 68 65 20  ister r[P2] the 
12ca0 6c 6f 63 61 74 69 6f 6e 20 69 6e 20 74 68 65 20  location in the 
12cb0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 68  database file th
12cc0 61 74 20 69 73 20 74 68 65 0a 2a 2a 20 73 74 61  at is the.** sta
12cd0 72 74 20 6f 66 20 74 68 65 20 70 61 79 6c 6f 61  rt of the payloa
12ce0 64 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64  d for the record
12cf0 20 61 74 20 77 68 69 63 68 20 74 68 61 74 20 63   at which that c
12d00 75 72 73 6f 72 20 50 31 20 69 73 20 63 75 72 72  ursor P1 is curr
12d10 65 6e 74 6c 79 0a 2a 2a 20 70 6f 69 6e 74 69 6e  ently.** pointin
12d20 67 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f  g..*/.case OP_Lo
12d30 63 61 74 69 6f 6e 3a 20 7b 20 20 20 20 20 20 20  cation: {       
12d40 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
12d50 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
12d60 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63     /* The VDBE c
12d70 75 72 73 6f 72 20 2a 2f 0a 20 20 61 73 73 65 72  ursor */.  asser
12d80 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
12d90 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
12da0 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
12db0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
12dc0 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
12dd0 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
12de0 3b 0a 20 20 69 66 28 20 70 43 3d 3d 30 20 7c 7c  ;.  if( pC==0 ||
12df0 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43   pC->eCurType!=C
12e00 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 7b 0a  URTYPE_BTREE ){.
12e10 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
12e20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 7d 65  = MEM_Null;.  }e
12e30 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  lse{.    pOut->u
12e40 2e 69 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  .i = sqlite3Btre
12e50 65 4c 6f 63 61 74 69 6f 6e 28 70 43 2d 3e 75 63  eLocation(pC->uc
12e60 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20  .pCursor);.  }. 
12e70 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
12e80 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20 50 31 20  code: Column P1 
12e90 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
12ea0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 50  ynopsis: r[P3]=P
12eb0 58 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65  X.**.** Interpre
12ec0 74 20 74 68 65 20 64 61 74 61 20 74 68 61 74 20  t the data that 
12ed0 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73  cursor P1 points
12ee0 20 74 6f 20 61 73 20 61 20 73 74 72 75 63 74 75   to as a structu
12ef0 72 65 20 62 75 69 6c 74 20 75 73 69 6e 67 0a 2a  re built using.*
12f00 2a 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64  * the MakeRecord
12f10 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 28   instruction.  (
12f20 53 65 65 20 74 68 65 20 4d 61 6b 65 52 65 63 6f  See the MakeReco
12f30 72 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  rd opcode for ad
12f40 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f  ditional.** info
12f50 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
12f60 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20  e format of the 
12f70 64 61 74 61 2e 29 20 20 45 78 74 72 61 63 74 20  data.)  Extract 
12f80 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e  the P2-th column
12f90 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73 20 72 65  .** from this re
12fa0 63 6f 72 64 2e 20 20 49 66 20 74 68 65 72 65 20  cord.  If there 
12fb0 61 72 65 20 6c 65 73 73 20 74 68 61 74 20 28 50  are less that (P
12fc0 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75 65 73 20  2+1) .** values 
12fd0 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20 65  in the record, e
12fe0 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a  xtract a NULL..*
12ff0 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 65  *.** The value e
13000 78 74 72 61 63 74 65 64 20 69 73 20 73 74 6f 72  xtracted is stor
13010 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
13020 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  3..**.** If the 
13030 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20  record contains 
13040 66 65 77 65 72 20 74 68 61 6e 20 50 32 20 66 69  fewer than P2 fi
13050 65 6c 64 73 2c 20 74 68 65 6e 20 65 78 74 72 61  elds, then extra
13060 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a  ct a NULL.  Or,.
13070 2a 2a 20 69 66 20 74 68 65 20 50 34 20 61 72 67  ** if the P4 arg
13080 75 6d 65 6e 74 20 69 73 20 61 20 50 34 5f 4d 45  ument is a P4_ME
13090 4d 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  M use the value 
130a0 6f 66 20 74 68 65 20 50 34 20 61 72 67 75 6d 65  of the P4 argume
130b0 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73  nt as.** the res
130c0 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ult..**.** If th
130d0 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43 41  e OPFLAG_CLEARCA
130e0 43 48 45 20 62 69 74 20 69 73 20 73 65 74 20 6f  CHE bit is set o
130f0 6e 20 50 35 20 61 6e 64 20 50 31 20 69 73 20 61  n P5 and P1 is a
13100 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75   pseudo-table cu
13110 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68  rsor,.** then th
13120 65 20 63 61 63 68 65 20 6f 66 20 74 68 65 20 63  e cache of the c
13130 75 72 73 6f 72 20 69 73 20 72 65 73 65 74 20 70  ursor is reset p
13140 72 69 6f 72 20 74 6f 20 65 78 74 72 61 63 74 69  rior to extracti
13150 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a  ng the column..*
13160 2a 20 54 68 65 20 66 69 72 73 74 20 4f 50 5f 43  * The first OP_C
13170 6f 6c 75 6d 6e 20 61 67 61 69 6e 73 74 20 61 20  olumn against a 
13180 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 61 66 74  pseudo-table aft
13190 65 72 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  er the value of 
131a0 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72  the content.** r
131b0 65 67 69 73 74 65 72 20 68 61 73 20 63 68 61 6e  egister has chan
131c0 67 65 64 20 73 68 6f 75 6c 64 20 68 61 76 65 20  ged should have 
131d0 74 68 69 73 20 62 69 74 20 73 65 74 2e 0a 2a 2a  this bit set..**
131e0 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
131f0 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20  G_LENGTHARG and 
13200 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
13210 20 62 69 74 73 20 61 72 65 20 73 65 74 20 6f 6e   bits are set on
13220 20 50 35 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20   P5 then.** the 
13230 72 65 73 75 6c 74 20 69 73 20 67 75 61 72 61 6e  result is guaran
13240 74 65 65 64 20 74 6f 20 6f 6e 6c 79 20 62 65 20  teed to only be 
13250 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67 75  used as the argu
13260 6d 65 6e 74 20 6f 66 20 61 20 6c 65 6e 67 74 68  ment of a length
13270 28 29 0a 2a 2a 20 6f 72 20 74 79 70 65 6f 66 28  ().** or typeof(
13280 29 20 66 75 6e 63 74 69 6f 6e 2c 20 72 65 73 70  ) function, resp
13290 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65 20 6c  ectively.  The l
132a0 6f 61 64 69 6e 67 20 6f 66 20 6c 61 72 67 65 20  oading of large 
132b0 62 6c 6f 62 73 20 63 61 6e 20 62 65 0a 2a 2a 20  blobs can be.** 
132c0 73 6b 69 70 70 65 64 20 66 6f 72 20 6c 65 6e 67  skipped for leng
132d0 74 68 28 29 20 61 6e 64 20 61 6c 6c 20 63 6f 6e  th() and all con
132e0 74 65 6e 74 20 6c 6f 61 64 69 6e 67 20 63 61 6e  tent loading can
132f0 20 62 65 20 73 6b 69 70 70 65 64 20 66 6f 72 20   be skipped for 
13300 74 79 70 65 6f 66 28 29 2e 0a 2a 2f 0a 63 61 73  typeof()..*/.cas
13310 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20  e OP_Column: {. 
13320 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20   int p2;        
13330 20 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75      /* column nu
13340 6d 62 65 72 20 74 6f 20 72 65 74 72 69 65 76 65  mber to retrieve
13350 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
13360 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68 65 20   *pC;    /* The 
13370 56 44 42 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20  VDBE cursor */. 
13380 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
13390 3b 20 20 20 2f 2a 20 54 68 65 20 42 54 72 65 65  ;   /* The BTree
133a0 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 75 33 32   cursor */.  u32
133b0 20 2a 61 4f 66 66 73 65 74 3b 20 20 20 20 20 20   *aOffset;      
133c0 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20 69 73  /* aOffset[i] is
133d0 20 6f 66 66 73 65 74 20 74 6f 20 73 74 61 72 74   offset to start
133e0 20 6f 66 20 64 61 74 61 20 66 6f 72 20 69 2d 74   of data for i-t
133f0 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e  h column */.  in
13400 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20  t len;          
13410 20 2f 2a 20 54 68 65 20 6c 65 6e 67 74 68 20 6f   /* The length o
13420 66 20 74 68 65 20 73 65 72 69 61 6c 69 7a 65 64  f the serialized
13430 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 63 6f   data for the co
13440 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 3b  lumn */.  int i;
13450 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
13460 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  Loop counter */.
13470 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 20 20 20    Mem *pDest;   
13480 20 20 20 20 20 2f 2a 20 57 68 65 72 65 20 74 6f       /* Where to
13490 20 77 72 69 74 65 20 74 68 65 20 65 78 74 72 61   write the extra
134a0 63 74 65 64 20 76 61 6c 75 65 20 2a 2f 0a 20 20  cted value */.  
134b0 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20 20  Mem sMem;       
134c0 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e     /* For storin
134d0 67 20 74 68 65 20 72 65 63 6f 72 64 20 62 65 69  g the record bei
134e0 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20  ng decoded */.  
134f0 63 6f 6e 73 74 20 75 38 20 2a 7a 44 61 74 61 3b  const u8 *zData;
13500 20 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 74 68     /* Part of th
13510 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64  e record being d
13520 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73  ecoded */.  cons
13530 74 20 75 38 20 2a 7a 48 64 72 3b 20 20 20 20 2f  t u8 *zHdr;    /
13540 2a 20 4e 65 78 74 20 75 6e 70 61 72 73 65 64 20  * Next unparsed 
13550 62 79 74 65 20 6f 66 20 74 68 65 20 68 65 61 64  byte of the head
13560 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38  er */.  const u8
13570 20 2a 7a 45 6e 64 48 64 72 3b 20 2f 2a 20 50 6f   *zEndHdr; /* Po
13580 69 6e 74 65 72 20 74 6f 20 66 69 72 73 74 20 62  inter to first b
13590 79 74 65 20 61 66 74 65 72 20 74 68 65 20 68 65  yte after the he
135a0 61 64 65 72 20 2a 2f 0a 20 20 75 36 34 20 6f 66  ader */.  u64 of
135b0 66 73 65 74 36 34 3b 20 20 20 20 20 20 2f 2a 20  fset64;      /* 
135c0 36 34 2d 62 69 74 20 6f 66 66 73 65 74 20 2a 2f  64-bit offset */
135d0 0a 20 20 75 33 32 20 74 3b 20 20 20 20 20 20 20  .  u32 t;       
135e0 20 20 20 20 20 20 2f 2a 20 41 20 74 79 70 65 20        /* A type 
135f0 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 72 65  code from the re
13600 63 6f 72 64 20 68 65 61 64 65 72 20 2a 2f 0a 20  cord header */. 
13610 20 4d 65 6d 20 2a 70 52 65 67 3b 20 20 20 20 20   Mem *pReg;     
13620 20 20 20 20 2f 2a 20 50 73 65 75 64 6f 54 61 62      /* PseudoTab
13630 6c 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  le input registe
13640 72 20 2a 2f 0a 0a 20 20 70 43 20 3d 20 70 2d 3e  r */..  pC = p->
13650 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
13660 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a    p2 = pOp->p2;.
13670 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63 75 72  .  /* If the cur
13680 73 6f 72 20 63 61 63 68 65 20 69 73 20 73 74 61  sor cache is sta
13690 6c 65 20 28 6d 65 61 6e 69 6e 67 20 69 74 20 69  le (meaning it i
136a0 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20  s not currently 
136b0 70 6f 69 6e 74 20 61 74 0a 20 20 2a 2a 20 74 68  point at.  ** th
136c0 65 20 63 6f 72 72 65 63 74 20 72 6f 77 29 20 74  e correct row) t
136d0 68 65 6e 20 62 72 69 6e 67 20 69 74 20 75 70 2d  hen bring it up-
136e0 74 6f 2d 64 61 74 65 20 62 79 20 64 6f 69 6e 67  to-date by doing
136f0 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 0a   the necessary .
13700 20 20 2a 2a 20 42 2d 54 72 65 65 20 73 65 65 6b    ** B-Tree seek
13710 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69  . */.  rc = sqli
13720 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
13730 65 74 6f 28 26 70 43 2c 20 26 70 32 29 3b 0a 20  eto(&pC, &p2);. 
13740 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
13750 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
13760 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  r;..  assert( pO
13770 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
13780 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p3<=(p->nMem+1 -
13790 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
137a0 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b    pDest = &aMem[
137b0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41  pOp->p3];.  memA
137c0 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
137d0 70 44 65 73 74 29 3b 0a 20 20 61 73 73 65 72 74  pDest);.  assert
137e0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
137f0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
13800 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
13810 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
13820 74 28 20 70 32 3c 70 43 2d 3e 6e 46 69 65 6c 64  t( p2<pC->nField
13830 20 29 3b 0a 20 20 61 4f 66 66 73 65 74 20 3d 20   );.  aOffset = 
13840 70 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 20 20 61  pC->aOffset;.  a
13850 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
13860 79 70 65 21 3d 43 55 52 54 59 50 45 5f 56 54 41  ype!=CURTYPE_VTA
13870 42 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  B );.  assert( p
13880 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52  C->eCurType!=CUR
13890 54 59 50 45 5f 50 53 45 55 44 4f 20 7c 7c 20 70  TYPE_PSEUDO || p
138a0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20  C->nullRow );.  
138b0 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
138c0 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f 53 4f  Type!=CURTYPE_SO
138d0 52 54 45 52 20 29 3b 0a 0a 20 20 69 66 28 20 70  RTER );..  if( p
138e0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 21 3d  C->cacheStatus!=
138f0 70 2d 3e 63 61 63 68 65 43 74 72 20 29 7b 20 20  p->cacheCtr ){  
13900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
13910 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d  OPTIMIZATION-IF-
13920 46 41 4c 53 45 2a 2f 0a 20 20 20 20 69 66 28 20  FALSE*/.    if( 
13930 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
13940 20 20 20 20 20 69 66 28 20 70 43 2d 3e 65 43 75       if( pC->eCu
13950 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 50  rType==CURTYPE_P
13960 53 45 55 44 4f 20 29 7b 0a 20 20 20 20 20 20 20  SEUDO ){.       
13970 20 2f 2a 20 46 6f 72 20 74 68 65 20 73 70 65 63   /* For the spec
13980 69 61 6c 20 63 61 73 65 20 6f 66 20 61 73 20 70  ial case of as p
13990 73 65 75 64 6f 2d 63 75 72 73 6f 72 2c 20 74 68  seudo-cursor, th
139a0 65 20 73 65 65 6b 52 65 73 75 6c 74 20 66 69 65  e seekResult fie
139b0 6c 64 0a 20 20 20 20 20 20 20 20 2a 2a 20 69 64  ld.        ** id
139c0 65 6e 74 69 66 69 65 73 20 74 68 65 20 72 65 67  entifies the reg
139d0 69 73 74 65 72 20 74 68 61 74 20 68 6f 6c 64 73  ister that holds
139e0 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
139f0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
13a00 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 3e 30 20  C->seekResult>0 
13a10 29 3b 0a 20 20 20 20 20 20 20 20 70 52 65 67 20  );.        pReg 
13a20 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e 73 65 65 6b  = &aMem[pC->seek
13a30 52 65 73 75 6c 74 5d 3b 0a 20 20 20 20 20 20 20  Result];.       
13a40 20 61 73 73 65 72 74 28 20 70 52 65 67 2d 3e 66   assert( pReg->f
13a50 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20  lags & MEM_Blob 
13a60 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
13a70 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52  t( memIsValid(pR
13a80 65 67 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70  eg) );.        p
13a90 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d  C->payloadSize =
13aa0 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 70 52 65   pC->szRow = pRe
13ab0 67 2d 3e 6e 3b 0a 20 20 20 20 20 20 20 20 70 43  g->n;.        pC
13ac0 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29 70 52  ->aRow = (u8*)pR
13ad0 65 67 2d 3e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c  eg->z;.      }el
13ae0 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  se{.        sqli
13af0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
13b00 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20  l(pDest);.      
13b10 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
13b20 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  _out;.      }.  
13b30 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70    }else{.      p
13b40 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43  Crsr = pC->uc.pC
13b50 75 72 73 6f 72 3b 0a 20 20 20 20 20 20 61 73 73  ursor;.      ass
13b60 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
13b70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
13b80 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
13b90 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20 20 20  ( pCrsr );.     
13ba0 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
13bb0 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c  BtreeCursorIsVal
13bc0 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20  id(pCrsr) );.   
13bd0 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69     pC->payloadSi
13be0 7a 65 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  ze = sqlite3Btre
13bf0 65 50 61 79 6c 6f 61 64 53 69 7a 65 28 70 43 72  ePayloadSize(pCr
13c00 73 72 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 61  sr);.      pC->a
13c10 52 6f 77 20 3d 20 73 71 6c 69 74 65 33 42 74 72  Row = sqlite3Btr
13c20 65 65 50 61 79 6c 6f 61 64 46 65 74 63 68 28 70  eePayloadFetch(p
13c30 43 72 73 72 2c 20 26 70 43 2d 3e 73 7a 52 6f 77  Crsr, &pC->szRow
13c40 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
13c50 20 70 43 2d 3e 73 7a 52 6f 77 3c 3d 70 43 2d 3e   pC->szRow<=pC->
13c60 70 61 79 6c 6f 61 64 53 69 7a 65 20 29 3b 0a 20  payloadSize );. 
13c70 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d       assert( pC-
13c80 3e 73 7a 52 6f 77 3c 3d 36 35 35 33 36 20 29 3b  >szRow<=65536 );
13c90 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 70 61 67    /* Maximum pag
13ca0 65 20 73 69 7a 65 20 69 73 20 36 34 4b 69 42 20  e size is 64KiB 
13cb0 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d  */.      if( pC-
13cc0 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3e 20 28  >payloadSize > (
13cd0 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  u32)db->aLimit[S
13ce0 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
13cf0 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 67  TH] ){.        g
13d00 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20  oto too_big;.   
13d10 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70     }.    }.    p
13d20 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
13d30 20 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a 20 20   p->cacheCtr;.  
13d40 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74    pC->iHdrOffset
13d50 20 3d 20 67 65 74 56 61 72 69 6e 74 33 32 28 70   = getVarint32(p
13d60 43 2d 3e 61 52 6f 77 2c 20 61 4f 66 66 73 65 74  C->aRow, aOffset
13d70 5b 30 5d 29 3b 0a 20 20 20 20 70 43 2d 3e 6e 48  [0]);.    pC->nH
13d80 64 72 50 61 72 73 65 64 20 3d 20 30 3b 0a 0a 0a  drParsed = 0;...
13d90 20 20 20 20 69 66 28 20 70 43 2d 3e 73 7a 52 6f      if( pC->szRo
13da0 77 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b 20  w<aOffset[0] ){ 
13db0 20 20 20 20 20 2f 2a 4f 50 54 49 4d 49 5a 41 54       /*OPTIMIZAT
13dc0 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20  ION-IF-FALSE*/. 
13dd0 20 20 20 20 20 2f 2a 20 70 43 2d 3e 61 52 6f 77       /* pC->aRow
13de0 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 74   does not have t
13df0 6f 20 68 6f 6c 64 20 74 68 65 20 65 6e 74 69 72  o hold the entir
13e00 65 20 72 6f 77 2c 20 62 75 74 20 69 74 20 64 6f  e row, but it do
13e10 65 73 20 61 74 20 6c 65 61 73 74 0a 20 20 20 20  es at least.    
13e20 20 20 2a 2a 20 6e 65 65 64 20 74 6f 20 63 6f 76    ** need to cov
13e30 65 72 20 74 68 65 20 68 65 61 64 65 72 20 6f 66  er the header of
13e40 20 74 68 65 20 72 65 63 6f 72 64 2e 20 20 49 66   the record.  If
13e50 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e   pC->aRow does n
13e60 6f 74 20 63 6f 6e 74 61 69 6e 0a 20 20 20 20 20  ot contain.     
13e70 20 2a 2a 20 74 68 65 20 63 6f 6d 70 6c 65 74 65   ** the complete
13e80 20 68 65 61 64 65 72 2c 20 74 68 65 6e 20 73 65   header, then se
13e90 74 20 69 74 20 74 6f 20 7a 65 72 6f 2c 20 66 6f  t it to zero, fo
13ea0 72 63 69 6e 67 20 74 68 65 20 68 65 61 64 65 72  rcing the header
13eb0 20 74 6f 20 62 65 0a 20 20 20 20 20 20 2a 2a 20   to be.      ** 
13ec0 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
13ed0 63 61 74 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20  cated. */.      
13ee0 70 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a 20 20  pC->aRow = 0;.  
13ef0 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20      pC->szRow = 
13f00 30 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b  0;..      /* Mak
13f10 65 20 73 75 72 65 20 61 20 63 6f 72 72 75 70 74  e sure a corrupt
13f20 20 64 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f   database has no
13f30 74 20 67 69 76 65 6e 20 75 73 20 61 6e 20 6f 76  t given us an ov
13f40 65 72 73 69 7a 65 20 68 65 61 64 65 72 2e 0a 20  ersize header.. 
13f50 20 20 20 20 20 2a 2a 20 44 6f 20 74 68 69 73 20       ** Do this 
13f60 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20 61 6e 20  now to avoid an 
13f70 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f 72 79 20  oversize memory 
13f80 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20 20 20  allocation..    
13f90 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 54 79    **.      ** Ty
13fa0 70 65 20 65 6e 74 72 69 65 73 20 63 61 6e 20 62  pe entries can b
13fb0 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20  e between 1 and 
13fc0 35 20 62 79 74 65 73 20 65 61 63 68 2e 20 20 42  5 bytes each.  B
13fd0 75 74 20 34 20 61 6e 64 20 35 20 62 79 74 65 0a  ut 4 and 5 byte.
13fe0 20 20 20 20 20 20 2a 2a 20 74 79 70 65 73 20 75        ** types u
13ff0 73 65 20 73 6f 20 6d 75 63 68 20 64 61 74 61 20  se so much data 
14000 73 70 61 63 65 20 74 68 61 74 20 74 68 65 72 65  space that there
14010 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 34 30 39   can only be 409
14020 36 20 61 6e 64 20 33 32 20 6f 66 0a 20 20 20 20  6 and 32 of.    
14030 20 20 2a 2a 20 74 68 65 6d 2c 20 72 65 73 70 65    ** them, respe
14040 63 74 69 76 65 6c 79 2e 20 20 53 6f 20 74 68 65  ctively.  So the
14050 20 6d 61 78 69 6d 75 6d 20 68 65 61 64 65 72 20   maximum header 
14060 6c 65 6e 67 74 68 20 72 65 73 75 6c 74 73 20 66  length results f
14070 72 6f 6d 20 61 0a 20 20 20 20 20 20 2a 2a 20 33  rom a.      ** 3
14080 2d 62 79 74 65 20 74 79 70 65 20 66 6f 72 20 65  -byte type for e
14090 61 63 68 20 6f 66 20 74 68 65 20 6d 61 78 69 6d  ach of the maxim
140a0 75 6d 20 6f 66 20 33 32 37 36 38 20 63 6f 6c 75  um of 32768 colu
140b0 6d 6e 73 20 70 6c 75 73 20 74 68 72 65 65 0a 20  mns plus three. 
140c0 20 20 20 20 20 2a 2a 20 65 78 74 72 61 20 62 79       ** extra by
140d0 74 65 73 20 66 6f 72 20 74 68 65 20 68 65 61 64  tes for the head
140e0 65 72 20 6c 65 6e 67 74 68 20 69 74 73 65 6c 66  er length itself
140f0 2e 20 20 33 32 37 36 38 2a 33 20 2b 20 33 20 3d  .  32768*3 + 3 =
14100 20 39 38 33 30 37 2e 0a 20 20 20 20 20 20 2a 2f   98307..      */
14110 0a 20 20 20 20 20 20 69 66 28 20 61 4f 66 66 73  .      if( aOffs
14120 65 74 5b 30 5d 20 3e 20 39 38 33 30 37 20 7c 7c  et[0] > 98307 ||
14130 20 61 4f 66 66 73 65 74 5b 30 5d 20 3e 20 70 43   aOffset[0] > pC
14140 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 29 7b  ->payloadSize ){
14150 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70  .        goto op
14160 5f 63 6f 6c 75 6d 6e 5f 63 6f 72 72 75 70 74 3b  _column_corrupt;
14170 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
14180 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68 69  se{.      /* Thi
14190 73 20 69 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61  s is an optimiza
141a0 74 69 6f 6e 2e 20 20 42 79 20 73 6b 69 70 70 69  tion.  By skippi
141b0 6e 67 20 6f 76 65 72 20 74 68 65 20 66 69 72 73  ng over the firs
141c0 74 20 66 65 77 20 74 65 73 74 73 0a 20 20 20 20  t few tests.    
141d0 20 20 2a 2a 20 28 65 78 3a 20 70 43 2d 3e 6e 48    ** (ex: pC->nH
141e0 64 72 50 61 72 73 65 64 3c 3d 70 32 29 20 69 6e  drParsed<=p2) in
141f0 20 74 68 65 20 6e 65 78 74 20 73 65 63 74 69 6f   the next sectio
14200 6e 2c 20 77 65 20 61 63 68 69 65 76 65 20 61 0a  n, we achieve a.
14210 20 20 20 20 20 20 2a 2a 20 6d 65 61 73 75 72 61        ** measura
14220 62 6c 65 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  ble performance 
14230 67 61 69 6e 2e 0a 20 20 20 20 20 20 2a 2a 0a 20  gain..      **. 
14240 20 20 20 20 20 2a 2a 20 54 68 69 73 20 62 72 61       ** This bra
14250 6e 63 68 20 69 73 20 74 61 6b 65 6e 20 65 76 65  nch is taken eve
14260 6e 20 69 66 20 61 4f 66 66 73 65 74 5b 30 5d 3d  n if aOffset[0]=
14270 3d 30 2e 20 20 53 75 63 68 20 61 20 72 65 63 6f  =0.  Such a reco
14280 72 64 20 69 73 20 6e 65 76 65 72 0a 20 20 20 20  rd is never.    
14290 20 20 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 62    ** generated b
142a0 79 20 53 51 4c 69 74 65 2c 20 61 6e 64 20 63 6f  y SQLite, and co
142b0 75 6c 64 20 62 65 20 63 6f 6e 73 69 64 65 72 65  uld be considere
142c0 64 20 63 6f 72 72 75 70 74 69 6f 6e 2c 20 62 75  d corruption, bu
142d0 74 20 77 65 0a 20 20 20 20 20 20 2a 2a 20 61 63  t we.      ** ac
142e0 63 65 70 74 20 69 74 20 66 6f 72 20 68 69 73 74  cept it for hist
142f0 6f 72 69 63 61 6c 20 72 65 61 73 6f 6e 73 2e 20  orical reasons. 
14300 20 57 68 65 6e 20 61 4f 66 66 73 65 74 5b 30 5d   When aOffset[0]
14310 3d 3d 30 2c 20 74 68 65 20 63 6f 64 65 20 74 68  ==0, the code th
14320 69 73 0a 20 20 20 20 20 20 2a 2a 20 62 72 61 6e  is.      ** bran
14330 63 68 20 6a 75 6d 70 73 20 74 6f 20 72 65 61 64  ch jumps to read
14340 73 20 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f  s past the end o
14350 66 20 74 68 65 20 72 65 63 6f 72 64 2c 20 62 75  f the record, bu
14360 74 20 6e 65 76 65 72 20 6d 6f 72 65 0a 20 20 20  t never more.   
14370 20 20 20 2a 2a 20 74 68 61 6e 20 61 20 66 65 77     ** than a few
14380 20 62 79 74 65 73 2e 20 20 45 76 65 6e 20 69 66   bytes.  Even if
14390 20 74 68 65 20 72 65 63 6f 72 64 20 6f 63 63 75   the record occu
143a0 72 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  rs at the end of
143b0 20 74 68 65 20 70 61 67 65 0a 20 20 20 20 20 20   the page.      
143c0 2a 2a 20 63 6f 6e 74 65 6e 74 20 61 72 65 61 2c  ** content area,
143d0 20 74 68 65 20 22 70 61 67 65 20 68 65 61 64 65   the "page heade
143e0 72 22 20 63 6f 6d 65 73 20 61 66 74 65 72 20 74  r" comes after t
143f0 68 65 20 70 61 67 65 20 63 6f 6e 74 65 6e 74 20  he page content 
14400 61 6e 64 20 73 6f 0a 20 20 20 20 20 20 2a 2a 20  and so.      ** 
14410 74 68 69 73 20 6f 76 65 72 72 65 61 64 20 69 73  this overread is
14420 20 68 61 72 6d 6c 65 73 73 2e 20 20 53 69 6d 69   harmless.  Simi
14430 6c 61 72 20 6f 76 65 72 72 65 61 64 73 20 63 61  lar overreads ca
14440 6e 20 6f 63 63 75 72 20 66 6f 72 20 61 20 63 6f  n occur for a co
14450 72 72 75 70 74 0a 20 20 20 20 20 20 2a 2a 20 64  rrupt.      ** d
14460 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20  atabase file..  
14470 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 7a 44 61      */.      zDa
14480 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77 3b 0a 20  ta = pC->aRow;. 
14490 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d       assert( pC-
144a0 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20  >nHdrParsed<=p2 
144b0 29 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  );         /* Co
144c0 6e 64 69 74 69 6f 6e 61 6c 20 73 6b 69 70 70 65  nditional skippe
144d0 64 20 2a 2f 0a 20 20 20 20 20 20 74 65 73 74 63  d */.      testc
144e0 61 73 65 28 20 61 4f 66 66 73 65 74 5b 30 5d 3d  ase( aOffset[0]=
144f0 3d 30 20 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f  =0 );.      goto
14500 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f   op_column_read_
14510 68 65 61 64 65 72 3b 0a 20 20 20 20 7d 0a 20 20  header;.    }.  
14520 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  }..  /* Make sur
14530 65 20 61 74 20 6c 65 61 73 74 20 74 68 65 20 66  e at least the f
14540 69 72 73 74 20 70 32 2b 31 20 65 6e 74 72 69 65  irst p2+1 entrie
14550 73 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20  s of the header 
14560 68 61 76 65 20 62 65 65 6e 0a 20 20 2a 2a 20 70  have been.  ** p
14570 61 72 73 65 64 20 61 6e 64 20 76 61 6c 69 64 20  arsed and valid 
14580 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 69  information is i
14590 6e 20 61 4f 66 66 73 65 74 5b 5d 20 61 6e 64 20  n aOffset[] and 
145a0 70 43 2d 3e 61 54 79 70 65 5b 5d 2e 0a 20 20 2a  pC->aType[]..  *
145b0 2f 0a 20 20 69 66 28 20 70 43 2d 3e 6e 48 64 72  /.  if( pC->nHdr
145c0 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20 20  Parsed<=p2 ){.  
145d0 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73    /* If there is
145e0 20 6d 6f 72 65 20 68 65 61 64 65 72 20 61 76 61   more header ava
145f0 69 6c 61 62 6c 65 20 66 6f 72 20 70 61 72 73 69  ilable for parsi
14600 6e 67 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ng in the record
14610 2c 20 74 72 79 0a 20 20 20 20 2a 2a 20 74 6f 20  , try.    ** to 
14620 65 78 74 72 61 63 74 20 61 64 64 69 74 69 6f 6e  extract addition
14630 61 6c 20 66 69 65 6c 64 73 20 75 70 20 74 68 72  al fields up thr
14640 6f 75 67 68 20 74 68 65 20 70 32 2b 31 2d 74 68  ough the p2+1-th
14650 20 66 69 65 6c 64 20 0a 20 20 20 20 2a 2f 0a 20   field .    */. 
14660 20 20 20 69 66 28 20 70 43 2d 3e 69 48 64 72 4f     if( pC->iHdrO
14670 66 66 73 65 74 3c 61 4f 66 66 73 65 74 5b 30 5d  ffset<aOffset[0]
14680 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b   ){.      /* Mak
14690 65 20 73 75 72 65 20 7a 44 61 74 61 20 70 6f 69  e sure zData poi
146a0 6e 74 73 20 74 6f 20 65 6e 6f 75 67 68 20 6f 66  nts to enough of
146b0 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 63   the record to c
146c0 6f 76 65 72 20 74 68 65 20 68 65 61 64 65 72 2e  over the header.
146d0 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 43   */.      if( pC
146e0 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a 20 20 20  ->aRow==0 ){.   
146f0 20 20 20 20 20 6d 65 6d 73 65 74 28 26 73 4d 65       memset(&sMe
14700 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65  m, 0, sizeof(sMe
14710 6d 29 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20  m));.        rc 
14720 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
14730 46 72 6f 6d 42 74 72 65 65 28 70 43 2d 3e 75 63  FromBtree(pC->uc
14740 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20 61 4f 66  .pCursor, 0, aOf
14750 66 73 65 74 5b 30 5d 2c 20 26 73 4d 65 6d 29 3b  fset[0], &sMem);
14760 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21  .        if( rc!
14770 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
14780 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
14790 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7a 44  rror;.        zD
147a0 61 74 61 20 3d 20 28 75 38 2a 29 73 4d 65 6d 2e  ata = (u8*)sMem.
147b0 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  z;.      }else{.
147c0 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20          zData = 
147d0 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 20 20  pC->aRow;.      
147e0 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 46 69  }.  .      /* Fi
147f0 6c 6c 20 69 6e 20 70 43 2d 3e 61 54 79 70 65 5b  ll in pC->aType[
14800 69 5d 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 69  i] and aOffset[i
14810 5d 20 76 61 6c 75 65 73 20 74 68 72 6f 75 67 68  ] values through
14820 20 74 68 65 20 70 32 2d 74 68 20 66 69 65 6c 64   the p2-th field
14830 2e 20 2a 2f 0a 20 20 20 20 6f 70 5f 63 6f 6c 75  . */.    op_colu
14840 6d 6e 5f 72 65 61 64 5f 68 65 61 64 65 72 3a 0a  mn_read_header:.
14850 20 20 20 20 20 20 69 20 3d 20 70 43 2d 3e 6e 48        i = pC->nH
14860 64 72 50 61 72 73 65 64 3b 0a 20 20 20 20 20 20  drParsed;.      
14870 6f 66 66 73 65 74 36 34 20 3d 20 61 4f 66 66 73  offset64 = aOffs
14880 65 74 5b 69 5d 3b 0a 20 20 20 20 20 20 7a 48 64  et[i];.      zHd
14890 72 20 3d 20 7a 44 61 74 61 20 2b 20 70 43 2d 3e  r = zData + pC->
148a0 69 48 64 72 4f 66 66 73 65 74 3b 0a 20 20 20 20  iHdrOffset;.    
148b0 20 20 7a 45 6e 64 48 64 72 20 3d 20 7a 44 61 74    zEndHdr = zDat
148c0 61 20 2b 20 61 4f 66 66 73 65 74 5b 30 5d 3b 0a  a + aOffset[0];.
148d0 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
148e0 7a 48 64 72 3e 3d 7a 45 6e 64 48 64 72 20 29 3b  zHdr>=zEndHdr );
148f0 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20  .      do{.     
14900 20 20 20 69 66 28 20 28 74 20 3d 20 7a 48 64 72     if( (t = zHdr
14910 5b 30 5d 29 3c 30 78 38 30 20 29 7b 0a 20 20 20  [0])<0x80 ){.   
14920 20 20 20 20 20 20 20 7a 48 64 72 2b 2b 3b 0a 20         zHdr++;. 
14930 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 36           offset6
14940 34 20 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65  4 += sqlite3Vdbe
14950 4f 6e 65 42 79 74 65 53 65 72 69 61 6c 54 79 70  OneByteSerialTyp
14960 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20 20 20  eLen(t);.       
14970 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
14980 20 20 7a 48 64 72 20 2b 3d 20 73 71 6c 69 74 65    zHdr += sqlite
14990 33 47 65 74 56 61 72 69 6e 74 33 32 28 7a 48 64  3GetVarint32(zHd
149a0 72 2c 20 26 74 29 3b 0a 20 20 20 20 20 20 20 20  r, &t);.        
149b0 20 20 6f 66 66 73 65 74 36 34 20 2b 3d 20 73 71    offset64 += sq
149c0 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
149d0 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20  ypeLen(t);.     
149e0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70 43 2d     }.        pC-
149f0 3e 61 54 79 70 65 5b 69 2b 2b 5d 20 3d 20 74 3b  >aType[i++] = t;
14a00 0a 20 20 20 20 20 20 20 20 61 4f 66 66 73 65 74  .        aOffset
14a10 5b 69 5d 20 3d 20 28 75 33 32 29 28 6f 66 66 73  [i] = (u32)(offs
14a20 65 74 36 34 20 26 20 30 78 66 66 66 66 66 66 66  et64 & 0xfffffff
14a30 66 29 3b 0a 20 20 20 20 20 20 7d 77 68 69 6c 65  f);.      }while
14a40 28 20 69 3c 3d 70 32 20 26 26 20 7a 48 64 72 3c  ( i<=p2 && zHdr<
14a50 7a 45 6e 64 48 64 72 20 29 3b 0a 0a 20 20 20 20  zEndHdr );..    
14a60 20 20 2f 2a 20 54 68 65 20 72 65 63 6f 72 64 20    /* The record 
14a70 69 73 20 63 6f 72 72 75 70 74 20 69 66 20 61 6e  is corrupt if an
14a80 79 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  y of the followi
14a90 6e 67 20 61 72 65 20 74 72 75 65 3a 0a 20 20 20  ng are true:.   
14aa0 20 20 20 2a 2a 20 28 31 29 20 74 68 65 20 62 79     ** (1) the by
14ab0 74 65 73 20 6f 66 20 74 68 65 20 68 65 61 64 65  tes of the heade
14ac0 72 20 65 78 74 65 6e 64 20 70 61 73 74 20 74 68  r extend past th
14ad0 65 20 64 65 63 6c 61 72 65 64 20 68 65 61 64 65  e declared heade
14ae0 72 20 73 69 7a 65 0a 20 20 20 20 20 20 2a 2a 20  r size.      ** 
14af0 28 32 29 20 74 68 65 20 65 6e 74 69 72 65 20 68  (2) the entire h
14b00 65 61 64 65 72 20 77 61 73 20 75 73 65 64 20 62  eader was used b
14b10 75 74 20 6e 6f 74 20 61 6c 6c 20 64 61 74 61 20  ut not all data 
14b20 77 61 73 20 75 73 65 64 0a 20 20 20 20 20 20 2a  was used.      *
14b30 2a 20 28 33 29 20 74 68 65 20 65 6e 64 20 6f 66  * (3) the end of
14b40 20 74 68 65 20 64 61 74 61 20 65 78 74 65 6e 64   the data extend
14b50 73 20 62 65 79 6f 6e 64 20 74 68 65 20 65 6e 64  s beyond the end
14b60 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2e 0a   of the record..
14b70 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
14b80 66 28 20 28 7a 48 64 72 3e 3d 7a 45 6e 64 48 64  f( (zHdr>=zEndHd
14b90 72 20 26 26 20 28 7a 48 64 72 3e 7a 45 6e 64 48  r && (zHdr>zEndH
14ba0 64 72 20 7c 7c 20 6f 66 66 73 65 74 36 34 21 3d  dr || offset64!=
14bb0 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29  pC->payloadSize)
14bc0 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 6f 66 66  ).       || (off
14bd0 73 65 74 36 34 20 3e 20 70 43 2d 3e 70 61 79 6c  set64 > pC->payl
14be0 6f 61 64 53 69 7a 65 29 0a 20 20 20 20 20 20 29  oadSize).      )
14bf0 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 61 4f  {.        if( aO
14c00 66 66 73 65 74 5b 30 5d 3d 3d 30 20 29 7b 0a 20  ffset[0]==0 ){. 
14c10 20 20 20 20 20 20 20 20 20 69 20 3d 20 30 3b 0a           i = 0;.
14c20 20 20 20 20 20 20 20 20 20 20 7a 48 64 72 20 3d            zHdr =
14c30 20 7a 45 6e 64 48 64 72 3b 0a 20 20 20 20 20 20   zEndHdr;.      
14c40 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
14c50 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d     if( pC->aRow=
14c60 3d 30 20 29 20 73 71 6c 69 74 65 33 56 64 62 65  =0 ) sqlite3Vdbe
14c70 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d  MemRelease(&sMem
14c80 29 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  );.          got
14c90 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 63 6f 72 72  o op_column_corr
14ca0 75 70 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  upt;.        }. 
14cb0 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 70 43       }..      pC
14cc0 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 3d 20 69  ->nHdrParsed = i
14cd0 3b 0a 20 20 20 20 20 20 70 43 2d 3e 69 48 64 72  ;.      pC->iHdr
14ce0 4f 66 66 73 65 74 20 3d 20 28 75 33 32 29 28 7a  Offset = (u32)(z
14cf0 48 64 72 20 2d 20 7a 44 61 74 61 29 3b 0a 20 20  Hdr - zData);.  
14d00 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77      if( pC->aRow
14d10 3d 3d 30 20 29 20 73 71 6c 69 74 65 33 56 64 62  ==0 ) sqlite3Vdb
14d20 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65  eMemRelease(&sMe
14d30 6d 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  m);.    }else{. 
14d40 20 20 20 20 20 74 20 3d 20 30 3b 0a 20 20 20 20       t = 0;.    
14d50 7d 0a 0a 20 20 20 20 2f 2a 20 49 66 20 61 66 74  }..    /* If aft
14d60 65 72 20 74 72 79 69 6e 67 20 74 6f 20 65 78 74  er trying to ext
14d70 72 61 63 74 20 6e 65 77 20 65 6e 74 72 69 65 73  ract new entries
14d80 20 66 72 6f 6d 20 74 68 65 20 68 65 61 64 65 72   from the header
14d90 2c 20 6e 48 64 72 50 61 72 73 65 64 20 69 73 0a  , nHdrParsed is.
14da0 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 6e 6f 74      ** still not
14db0 20 75 70 20 74 6f 20 70 32 2c 20 74 68 61 74 20   up to p2, that 
14dc0 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 72  means that the r
14dd0 65 63 6f 72 64 20 68 61 73 20 66 65 77 65 72 20  ecord has fewer 
14de0 74 68 61 6e 20 70 32 0a 20 20 20 20 2a 2a 20 63  than p2.    ** c
14df0 6f 6c 75 6d 6e 73 2e 20 20 53 6f 20 74 68 65 20  olumns.  So the 
14e00 72 65 73 75 6c 74 20 77 69 6c 6c 20 62 65 20 65  result will be e
14e10 69 74 68 65 72 20 74 68 65 20 64 65 66 61 75 6c  ither the defaul
14e20 74 20 76 61 6c 75 65 20 6f 72 20 61 20 4e 55 4c  t value or a NUL
14e30 4c 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  L..    */.    if
14e40 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64  ( pC->nHdrParsed
14e50 3c 3d 70 32 20 29 7b 0a 20 20 20 20 20 20 69 66  <=p2 ){.      if
14e60 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
14e70 34 5f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 20  4_MEM ){.       
14e80 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
14e90 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73 74  hallowCopy(pDest
14ea0 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20  , pOp->p4.pMem, 
14eb0 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20  MEM_Static);.   
14ec0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
14ed0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
14ee0 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
14ef0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 67 6f        }.      go
14f00 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  to op_column_out
14f10 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
14f20 0a 20 20 20 20 74 20 3d 20 70 43 2d 3e 61 54 79  .    t = pC->aTy
14f30 70 65 5b 70 32 5d 3b 0a 20 20 7d 0a 0a 20 20 2f  pe[p2];.  }..  /
14f40 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 63 6f  * Extract the co
14f50 6e 74 65 6e 74 20 66 6f 72 20 74 68 65 20 70 32  ntent for the p2
14f60 2b 31 2d 74 68 20 63 6f 6c 75 6d 6e 2e 20 20 43  +1-th column.  C
14f70 6f 6e 74 72 6f 6c 20 63 61 6e 20 6f 6e 6c 79 0a  ontrol can only.
14f80 20 20 2a 2a 20 72 65 61 63 68 20 74 68 69 73 20    ** reach this 
14f90 70 6f 69 6e 74 20 69 66 20 61 4f 66 66 73 65 74  point if aOffset
14fa0 5b 70 32 5d 2c 20 61 4f 66 66 73 65 74 5b 70 32  [p2], aOffset[p2
14fb0 2b 31 5d 2c 20 61 6e 64 20 70 43 2d 3e 61 54 79  +1], and pC->aTy
14fc0 70 65 5b 70 32 5d 20 61 72 65 0a 20 20 2a 2a 20  pe[p2] are.  ** 
14fd0 61 6c 6c 20 76 61 6c 69 64 2e 0a 20 20 2a 2f 0a  all valid..  */.
14fe0 20 20 61 73 73 65 72 74 28 20 70 32 3c 70 43 2d    assert( p2<pC-
14ff0 3e 6e 48 64 72 50 61 72 73 65 64 20 29 3b 0a 20  >nHdrParsed );. 
15000 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
15010 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 61 73 73 65  ITE_OK );.  asse
15020 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43  rt( sqlite3VdbeC
15030 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74  heckMemInvariant
15040 73 28 70 44 65 73 74 29 20 29 3b 0a 20 20 69 66  s(pDest) );.  if
15050 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63  ( VdbeMemDynamic
15060 28 70 44 65 73 74 29 20 29 7b 0a 20 20 20 20 73  (pDest) ){.    s
15070 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
15080 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 7d  Null(pDest);.  }
15090 0a 20 20 61 73 73 65 72 74 28 20 74 3d 3d 70 43  .  assert( t==pC
150a0 2d 3e 61 54 79 70 65 5b 70 32 5d 20 29 3b 0a 20  ->aType[p2] );. 
150b0 20 69 66 28 20 70 43 2d 3e 73 7a 52 6f 77 3e 3d   if( pC->szRow>=
150c0 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d 20 29 7b  aOffset[p2+1] ){
150d0 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20  .    /* This is 
150e0 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20  the common case 
150f0 77 68 65 72 65 20 74 68 65 20 64 65 73 69 72 65  where the desire
15100 64 20 63 6f 6e 74 65 6e 74 20 66 69 74 73 20 6f  d content fits o
15110 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 20  n the original. 
15120 20 20 20 2a 2a 20 70 61 67 65 20 2d 20 77 68 65     ** page - whe
15130 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69  re the content i
15140 73 20 6e 6f 74 20 6f 6e 20 61 6e 20 6f 76 65 72  s not on an over
15150 66 6c 6f 77 20 70 61 67 65 20 2a 2f 0a 20 20 20  flow page */.   
15160 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f   zData = pC->aRo
15170 77 20 2b 20 61 4f 66 66 73 65 74 5b 70 32 5d 3b  w + aOffset[p2];
15180 0a 20 20 20 20 69 66 28 20 74 3c 31 32 20 29 7b  .    if( t<12 ){
15190 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
151a0 62 65 53 65 72 69 61 6c 47 65 74 28 7a 44 61 74  beSerialGet(zDat
151b0 61 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20  a, t, pDest);.  
151c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f    }else{.      /
151d0 2a 20 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  * If the column 
151e0 76 61 6c 75 65 20 69 73 20 61 20 73 74 72 69 6e  value is a strin
151f0 67 2c 20 77 65 20 6e 65 65 64 20 61 20 70 65 72  g, we need a per
15200 73 69 73 74 65 6e 74 20 76 61 6c 75 65 2c 20 6e  sistent value, n
15210 6f 74 0a 20 20 20 20 20 20 2a 2a 20 61 20 4d 45  ot.      ** a ME
15220 4d 5f 45 70 68 65 6d 20 76 61 6c 75 65 2e 20 20  M_Ephem value.  
15230 54 68 69 73 20 62 72 61 6e 63 68 20 69 73 20 61  This branch is a
15240 20 66 61 73 74 20 73 68 6f 72 74 2d 63 75 74 20   fast short-cut 
15250 74 68 61 74 20 69 73 20 65 71 75 69 76 61 6c 65  that is equivale
15260 6e 74 0a 20 20 20 20 20 20 2a 2a 20 74 6f 20 63  nt.      ** to c
15270 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33 56 64  alling sqlite3Vd
15280 62 65 53 65 72 69 61 6c 47 65 74 28 29 20 61 6e  beSerialGet() an
15290 64 20 73 71 6c 69 74 65 33 56 64 62 65 44 65 65  d sqlite3VdbeDee
152a0 70 68 65 6d 65 72 61 6c 69 7a 65 28 29 2e 0a 20  phemeralize().. 
152b0 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 74       */.      st
152c0 61 74 69 63 20 63 6f 6e 73 74 20 75 31 36 20 61  atic const u16 a
152d0 46 6c 61 67 5b 5d 20 3d 20 7b 20 4d 45 4d 5f 42  Flag[] = { MEM_B
152e0 6c 6f 62 2c 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d  lob, MEM_Str|MEM
152f0 5f 54 65 72 6d 20 7d 3b 0a 20 20 20 20 20 20 70  _Term };.      p
15300 44 65 73 74 2d 3e 6e 20 3d 20 6c 65 6e 20 3d 20  Dest->n = len = 
15310 28 74 2d 31 32 29 2f 32 3b 0a 20 20 20 20 20 20  (t-12)/2;.      
15320 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63  pDest->enc = enc
15330 6f 64 69 6e 67 3b 0a 20 20 20 20 20 20 69 66 28  oding;.      if(
15340 20 70 44 65 73 74 2d 3e 73 7a 4d 61 6c 6c 6f 63   pDest->szMalloc
15350 20 3c 20 6c 65 6e 2b 32 20 29 7b 0a 20 20 20 20   < len+2 ){.    
15360 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73      pDest->flags
15370 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20   = MEM_Null;.   
15380 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
15390 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 44 65 73  VdbeMemGrow(pDes
153a0 74 2c 20 6c 65 6e 2b 32 2c 20 30 29 20 29 20 67  t, len+2, 0) ) g
153b0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
153c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
153d0 20 70 44 65 73 74 2d 3e 7a 20 3d 20 70 44 65 73   pDest->z = pDes
153e0 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20  t->zMalloc;.    
153f0 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70 79    }.      memcpy
15400 28 70 44 65 73 74 2d 3e 7a 2c 20 7a 44 61 74 61  (pDest->z, zData
15410 2c 20 6c 65 6e 29 3b 0a 20 20 20 20 20 20 70 44  , len);.      pD
15420 65 73 74 2d 3e 7a 5b 6c 65 6e 5d 20 3d 20 30 3b  est->z[len] = 0;
15430 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 7a 5b  .      pDest->z[
15440 6c 65 6e 2b 31 5d 20 3d 20 30 3b 0a 20 20 20 20  len+1] = 0;.    
15450 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d    pDest->flags =
15460 20 61 46 6c 61 67 5b 74 26 31 5d 3b 0a 20 20 20   aFlag[t&1];.   
15470 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
15480 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63  pDest->enc = enc
15490 6f 64 69 6e 67 3b 0a 20 20 20 20 2f 2a 20 54 68  oding;.    /* Th
154a0 69 73 20 62 72 61 6e 63 68 20 68 61 70 70 65 6e  is branch happen
154b0 73 20 6f 6e 6c 79 20 77 68 65 6e 20 63 6f 6e 74  s only when cont
154c0 65 6e 74 20 69 73 20 6f 6e 20 6f 76 65 72 66 6c  ent is on overfl
154d0 6f 77 20 70 61 67 65 73 20 2a 2f 0a 20 20 20 20  ow pages */.    
154e0 69 66 28 20 28 28 70 4f 70 2d 3e 70 35 20 26 20  if( ((pOp->p5 & 
154f0 28 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52  (OPFLAG_LENGTHAR
15500 47 7c 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41  G|OPFLAG_TYPEOFA
15510 52 47 29 29 21 3d 30 0a 20 20 20 20 20 20 20 20  RG))!=0.        
15520 20 20 26 26 20 28 28 74 3e 3d 31 32 20 26 26 20    && ((t>=12 && 
15530 28 74 26 31 29 3d 3d 30 29 20 7c 7c 20 28 70 4f  (t&1)==0) || (pO
15540 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 54  p->p5 & OPFLAG_T
15550 59 50 45 4f 46 41 52 47 29 21 3d 30 29 29 0a 20  YPEOFARG)!=0)). 
15560 20 20 20 20 7c 7c 20 28 6c 65 6e 20 3d 20 73 71      || (len = sq
15570 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
15580 79 70 65 4c 65 6e 28 74 29 29 3d 3d 30 0a 20 20  ypeLen(t))==0.  
15590 20 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 43 6f    ){.      /* Co
155a0 6e 74 65 6e 74 20 69 73 20 69 72 72 65 6c 65 76  ntent is irrelev
155b0 61 6e 74 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a  ant for.      **
155c0 20 20 20 20 31 2e 20 74 68 65 20 74 79 70 65 6f      1. the typeo
155d0 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c 0a 20 20  f() function,.  
155e0 20 20 20 20 2a 2a 20 20 20 20 32 2e 20 74 68 65      **    2. the
155f0 20 6c 65 6e 67 74 68 28 58 29 20 66 75 6e 63 74   length(X) funct
15600 69 6f 6e 20 69 66 20 58 20 69 73 20 61 20 62 6c  ion if X is a bl
15610 6f 62 2c 20 61 6e 64 0a 20 20 20 20 20 20 2a 2a  ob, and.      **
15620 20 20 20 20 33 2e 20 69 66 20 74 68 65 20 63 6f      3. if the co
15630 6e 74 65 6e 74 20 6c 65 6e 67 74 68 20 69 73 20  ntent length is 
15640 7a 65 72 6f 2e 0a 20 20 20 20 20 20 2a 2a 20 53  zero..      ** S
15650 6f 20 77 65 20 6d 69 67 68 74 20 61 73 20 77 65  o we might as we
15660 6c 6c 20 75 73 65 20 62 6f 67 75 73 20 63 6f 6e  ll use bogus con
15670 74 65 6e 74 20 72 61 74 68 65 72 20 74 68 61 6e  tent rather than
15680 20 72 65 61 64 69 6e 67 0a 20 20 20 20 20 20 2a   reading.      *
15690 2a 20 63 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 64  * content from d
156a0 69 73 6b 2e 20 0a 20 20 20 20 20 20 2a 2a 0a 20  isk. .      **. 
156b0 20 20 20 20 20 2a 2a 20 41 6c 74 68 6f 75 67 68       ** Although
156c0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
156d0 61 6c 47 65 74 28 29 20 6d 61 79 20 72 65 61 64  alGet() may read
156e0 20 61 74 20 6d 6f 73 74 20 38 20 62 79 74 65 73   at most 8 bytes
156f0 20 66 72 6f 6d 20 74 68 65 0a 20 20 20 20 20 20   from the.      
15700 2a 2a 20 62 75 66 66 65 72 20 70 61 73 73 65 64  ** buffer passed
15710 20 74 6f 20 69 74 2c 20 64 65 62 75 67 67 69 6e   to it, debuggin
15720 67 20 66 75 6e 63 74 69 6f 6e 20 56 64 62 65 4d  g function VdbeM
15730 65 6d 50 72 65 74 74 79 50 72 69 6e 74 28 29 20  emPrettyPrint() 
15740 6d 61 79 0a 20 20 20 20 20 20 2a 2a 20 72 65 61  may.      ** rea
15750 64 20 75 70 20 74 6f 20 31 36 2e 20 53 6f 20 31  d up to 16. So 1
15760 36 20 62 79 74 65 73 20 6f 66 20 62 6f 67 75 73  6 bytes of bogus
15770 20 63 6f 6e 74 65 6e 74 20 69 73 20 73 75 70 70   content is supp
15780 6c 69 65 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  lied..      */. 
15790 20 20 20 20 20 73 74 61 74 69 63 20 75 38 20 61       static u8 a
157a0 5a 65 72 6f 5b 31 36 5d 3b 20 20 2f 2a 20 54 68  Zero[16];  /* Th
157b0 69 73 20 69 73 20 74 68 65 20 62 6f 67 75 73 20  is is the bogus 
157c0 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 20 20 20  content */.     
157d0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
157e0 61 6c 47 65 74 28 61 5a 65 72 6f 2c 20 74 2c 20  alGet(aZero, t, 
157f0 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73  pDest);.    }els
15800 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  e{.      rc = sq
15810 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d  lite3VdbeMemFrom
15820 42 74 72 65 65 28 70 43 2d 3e 75 63 2e 70 43 75  Btree(pC->uc.pCu
15830 72 73 6f 72 2c 20 61 4f 66 66 73 65 74 5b 70 32  rsor, aOffset[p2
15840 5d 2c 20 6c 65 6e 2c 20 70 44 65 73 74 29 3b 0a  ], len, pDest);.
15850 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
15860 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
15870 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
15880 72 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  r;.      sqlite3
15890 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 28 63  VdbeSerialGet((c
158a0 6f 6e 73 74 20 75 38 2a 29 70 44 65 73 74 2d 3e  onst u8*)pDest->
158b0 7a 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20  z, t, pDest);.  
158c0 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73      pDest->flags
158d0 20 26 3d 20 7e 4d 45 4d 5f 45 70 68 65 6d 3b 0a   &= ~MEM_Ephem;.
158e0 20 20 20 20 7d 0a 20 20 7d 0a 0a 6f 70 5f 63 6f      }.  }..op_co
158f0 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 55 50 44 41  lumn_out:.  UPDA
15900 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
15910 70 44 65 73 74 29 3b 0a 20 20 52 45 47 49 53 54  pDest);.  REGIST
15920 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
15930 2c 20 70 44 65 73 74 29 3b 0a 20 20 62 72 65 61  , pDest);.  brea
15940 6b 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 63 6f  k;..op_column_co
15950 72 72 75 70 74 3a 0a 20 20 69 66 28 20 61 4f 70  rrupt:.  if( aOp
15960 5b 30 5d 2e 70 33 3e 30 20 29 7b 0a 20 20 20 20  [0].p3>0 ){.    
15970 70 4f 70 20 3d 20 26 61 4f 70 5b 61 4f 70 5b 30  pOp = &aOp[aOp[0
15980 5d 2e 70 33 2d 31 5d 3b 0a 20 20 20 20 62 72 65  ].p3-1];.    bre
15990 61 6b 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ak;.  }else{.   
159a0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52   rc = SQLITE_COR
159b0 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 67  RUPT_BKPT;.    g
159c0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
159d0 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 7d 0a 0a 2f  _error;.  }.}../
159e0 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e 69  * Opcode: Affini
159f0 74 79 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  ty P1 P2 * P4 *.
15a00 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 66 66  ** Synopsis: aff
15a10 69 6e 69 74 79 28 72 5b 50 31 40 50 32 5d 29 0a  inity(r[P1@P2]).
15a20 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66 69  **.** Apply affi
15a30 6e 69 74 69 65 73 20 74 6f 20 61 20 72 61 6e 67  nities to a rang
15a40 65 20 6f 66 20 50 32 20 72 65 67 69 73 74 65 72  e of P2 register
15a50 73 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20  s starting with 
15a60 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  P1..**.** P4 is 
15a70 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73  a string that is
15a80 20 50 32 20 63 68 61 72 61 63 74 65 72 73 20 6c   P2 characters l
15a90 6f 6e 67 2e 20 54 68 65 20 4e 2d 74 68 20 63 68  ong. The N-th ch
15aa0 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a  aracter of the.*
15ab0 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74  * string indicat
15ac0 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66  es the column af
15ad0 66 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75  finity that shou
15ae0 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72 20 74  ld be used for t
15af0 68 65 20 4e 2d 74 68 0a 2a 2a 20 6d 65 6d 6f 72  he N-th.** memor
15b00 79 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 72 61  y cell in the ra
15b10 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  nge..*/.case OP_
15b20 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20 63 6f  Affinity: {.  co
15b30 6e 73 74 20 63 68 61 72 20 2a 7a 41 66 66 69 6e  nst char *zAffin
15b40 69 74 79 3b 20 20 20 2f 2a 20 54 68 65 20 61 66  ity;   /* The af
15b50 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70  finity to be app
15b60 6c 69 65 64 20 2a 2f 0a 0a 20 20 7a 41 66 66 69  lied */..  zAffi
15b70 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  nity = pOp->p4.z
15b80 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66  ;.  assert( zAff
15b90 69 6e 69 74 79 21 3d 30 20 29 3b 0a 20 20 61 73  inity!=0 );.  as
15ba0 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
15bb0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66  );.  assert( zAf
15bc0 66 69 6e 69 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d  finity[pOp->p2]=
15bd0 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26  =0 );.  pIn1 = &
15be0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
15bf0 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74 28   do{.    assert(
15c00 20 70 49 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d 65   pIn1 <= &p->aMe
15c10 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  m[(p->nMem+1 - p
15c20 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20  ->nCursor)] );. 
15c30 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
15c40 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20  Valid(pIn1) );. 
15c50 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
15c60 28 70 49 6e 31 2c 20 2a 28 7a 41 66 66 69 6e 69  (pIn1, *(zAffini
15c70 74 79 2b 2b 29 2c 20 65 6e 63 6f 64 69 6e 67 29  ty++), encoding)
15c80 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20  ;.    pIn1++;.  
15c90 7d 77 68 69 6c 65 28 20 7a 41 66 66 69 6e 69 74  }while( zAffinit
15ca0 79 5b 30 5d 20 29 3b 0a 20 20 62 72 65 61 6b 3b  y[0] );.  break;
15cb0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .}../* Opcode: M
15cc0 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50 32 20  akeRecord P1 P2 
15cd0 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
15ce0 73 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b 72 65 63  sis: r[P3]=mkrec
15cf0 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a  (r[P1@P2]).**.**
15d00 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65 67 69   Convert P2 regi
15d10 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20  sters beginning 
15d20 77 69 74 68 20 50 31 20 69 6e 74 6f 20 74 68 65  with P1 into the
15d30 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 5d   [record format]
15d40 0a 2a 2a 20 75 73 65 20 61 73 20 61 20 64 61 74  .** use as a dat
15d50 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20 64 61  a record in a da
15d60 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
15d70 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e 20 61  as a key.** in a
15d80 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20 4f 50  n index.  The OP
15d90 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 63  _Column opcode c
15da0 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20 72 65  an decode the re
15db0 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a  cord later..**.*
15dc0 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 73 74  * P4 may be a st
15dd0 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32 20  ring that is P2 
15de0 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e  characters long.
15df0 20 20 54 68 65 20 4e 2d 74 68 20 63 68 61 72 61    The N-th chara
15e00 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73  cter of the.** s
15e10 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20  tring indicates 
15e20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e  the column affin
15e30 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20  ity that should 
15e40 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20  be used for the 
15e50 4e 2d 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66  N-th.** field of
15e60 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a   the index key..
15e70 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e  **.** The mappin
15e80 67 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65 72  g from character
15e90 20 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73 20   to affinity is 
15ea0 67 69 76 65 6e 20 62 79 20 74 68 65 20 53 51 4c  given by the SQL
15eb0 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72  ITE_AFF_.** macr
15ec0 6f 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73 71  os defined in sq
15ed0 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a  liteInt.h..**.**
15ee0 20 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20 74   If P4 is NULL t
15ef0 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66 69  hen all index fi
15f00 65 6c 64 73 20 68 61 76 65 20 74 68 65 20 61 66  elds have the af
15f10 66 69 6e 69 74 79 20 42 4c 4f 42 2e 0a 2a 2f 0a  finity BLOB..*/.
15f20 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f  case OP_MakeReco
15f30 72 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65 77  rd: {.  u8 *zNew
15f40 52 65 63 6f 72 64 3b 20 20 20 20 20 20 20 20 2f  Record;        /
15f50 2a 20 41 20 62 75 66 66 65 72 20 74 6f 20 68 6f  * A buffer to ho
15f60 6c 64 20 74 68 65 20 64 61 74 61 20 66 6f 72 20  ld the data for 
15f70 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a  the new record *
15f80 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20  /.  Mem *pRec;  
15f90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
15fa0 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a  e new record */.
15fb0 20 20 75 36 34 20 6e 44 61 74 61 3b 20 20 20 20    u64 nData;    
15fc0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
15fd0 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64  er of bytes of d
15fe0 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  ata space */.  i
15ff0 6e 74 20 6e 48 64 72 3b 20 20 20 20 20 20 20 20  nt nHdr;        
16000 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
16010 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64  of bytes of head
16020 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 36  er space */.  i6
16030 34 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20  4 nByte;        
16040 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61       /* Data spa
16050 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ce required for 
16060 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20  this record */. 
16070 20 69 36 34 20 6e 5a 65 72 6f 3b 20 20 20 20 20   i64 nZero;     
16080 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
16090 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20  r of zero bytes 
160a0 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
160b0 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
160c0 74 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20 20  t nVarint;      
160d0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
160e0 66 20 62 79 74 65 73 20 69 6e 20 61 20 76 61 72  f bytes in a var
160f0 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65 72  int */.  u32 ser
16100 69 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20 20  ial_type;       
16110 2f 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a 2f  /* Type field */
16120 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20  .  Mem *pData0; 
16130 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
16140 73 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20 63  st field to be c
16150 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68 65  ombined into the
16160 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d   record */.  Mem
16170 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20   *pLast;        
16180 20 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c      /* Last fiel
16190 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  d of the record 
161a0 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b  */.  int nField;
161b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
161c0 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
161d0 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  in the record */
161e0 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69  .  char *zAffini
161f0 74 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ty;       /* The
16200 20 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e 67   affinity string
16210 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
16220 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f  */.  int file_fo
16230 72 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20 46  rmat;       /* F
16240 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73  ile format to us
16250 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a  e for encoding *
16260 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  /.  int i;      
16270 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70             /* Sp
16280 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77  ace used in zNew
16290 52 65 63 6f 72 64 5b 5d 20 68 65 61 64 65 72 20  Record[] header 
162a0 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20  */.  int j;     
162b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
162c0 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65  pace used in zNe
162d0 77 52 65 63 6f 72 64 5b 5d 20 63 6f 6e 74 65 6e  wRecord[] conten
162e0 74 20 2a 2f 0a 20 20 75 33 32 20 6c 65 6e 3b 20  t */.  u32 len; 
162f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
16300 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69 65   Length of a fie
16310 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75  ld */..  /* Assu
16320 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20  ming the record 
16330 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64  contains N field
16340 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f  s, the record fo
16350 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20  rmat looks.  ** 
16360 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a  like this:.  **.
16370 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    ** -----------
16380 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16390 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
163a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
163b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20  -------------.  
163c0 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20  ** | hdr-size | 
163d0 74 79 70 65 20 30 20 7c 20 74 79 70 65 20 31 20  type 0 | type 1 
163e0 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31  | ... | type N-1
163f0 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c   | data0 | ... |
16400 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a   data N-1 | .  *
16410 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  * --------------
16420 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16430 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16440 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16450 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a  ----------.  **.
16460 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20    ** Data(0) is 
16470 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
16480 74 65 72 20 50 31 2e 20 20 44 61 74 61 28 31 29  ter P1.  Data(1)
16490 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69   comes from regi
164a0 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61  ster P1+1.  ** a
164b0 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a  nd so forth..  *
164c0 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65  *.  ** Each type
164d0 20 66 69 65 6c 64 20 69 73 20 61 20 76 61 72 69   field is a vari
164e0 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  nt representing 
164f0 74 68 65 20 73 65 72 69 61 6c 20 74 79 70 65 20  the serial type 
16500 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72  of the .  ** cor
16510 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20  responding data 
16520 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c  element (see sql
16530 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
16540 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20  pe()). The.  ** 
16550 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69  hdr-size field i
16560 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20  s also a varint 
16570 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66 66  which is the off
16580 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67  set from the beg
16590 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74  inning.  ** of t
165a0 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74  he record to dat
165b0 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61  a0..  */.  nData
165c0 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
165d0 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
165e0 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a   of data space *
165f0 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20 20  /.  nHdr = 0;   
16600 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
16610 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61   of bytes of hea
16620 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e  der space */.  n
16630 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20  Zero = 0;       
16640 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a    /* Number of z
16650 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65  ero bytes at the
16660 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f   end of the reco
16670 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d  rd */.  nField =
16680 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66   pOp->p1;.  zAff
16690 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e  inity = pOp->p4.
166a0 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69  z;.  assert( nFi
166b0 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  eld>0 && pOp->p2
166c0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46  >0 && pOp->p2+nF
166d0 69 65 6c 64 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ield<=(p->nMem+1
166e0 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31   - p->nCursor)+1
166f0 20 29 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26   );.  pData0 = &
16700 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20  aMem[nField];.  
16710 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32  nField = pOp->p2
16720 3b 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61  ;.  pLast = &pDa
16730 74 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20  ta0[nField-1];. 
16740 20 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70   file_format = p
16750 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
16760 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e  rmat;..  /* Iden
16770 74 69 66 79 20 74 68 65 20 6f 75 74 70 75 74 20  tify the output 
16780 72 65 67 69 73 74 65 72 20 2a 2f 0a 20 20 61 73  register */.  as
16790 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f  sert( pOp->p3<pO
167a0 70 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33  p->p1 || pOp->p3
167b0 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70  >=pOp->p1+pOp->p
167c0 32 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  2 );.  pOut = &a
167d0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
167e0 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
167f0 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a  (p, pOut);..  /*
16800 20 41 70 70 6c 79 20 74 68 65 20 72 65 71 75 65   Apply the reque
16810 73 74 65 64 20 61 66 66 69 6e 69 74 79 20 74 6f  sted affinity to
16820 20 61 6c 6c 20 69 6e 70 75 74 73 0a 20 20 2a 2f   all inputs.  */
16830 0a 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61  .  assert( pData
16840 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 69 66  0<=pLast );.  if
16850 28 20 7a 41 66 66 69 6e 69 74 79 20 29 7b 0a 20  ( zAffinity ){. 
16860 20 20 20 70 52 65 63 20 3d 20 70 44 61 74 61 30     pRec = pData0
16870 3b 0a 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20  ;.    do{.      
16880 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 52  applyAffinity(pR
16890 65 63 2b 2b 2c 20 2a 28 7a 41 66 66 69 6e 69 74  ec++, *(zAffinit
168a0 79 2b 2b 29 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  y++), encoding);
168b0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 7a  .      assert( z
168c0 41 66 66 69 6e 69 74 79 5b 30 5d 3d 3d 30 20 7c  Affinity[0]==0 |
168d0 7c 20 70 52 65 63 3c 3d 70 4c 61 73 74 20 29 3b  | pRec<=pLast );
168e0 0a 20 20 20 20 7d 77 68 69 6c 65 28 20 7a 41 66  .    }while( zAf
168f0 66 69 6e 69 74 79 5b 30 5d 20 29 3b 0a 20 20 7d  finity[0] );.  }
16900 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
16910 45 4e 41 42 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d  ENABLE_NULL_TRIM
16920 0a 20 20 2f 2a 20 4e 55 4c 4c 73 20 63 61 6e 20  .  /* NULLs can 
16930 62 65 20 73 61 66 65 6c 79 20 74 72 69 6d 6d 65  be safely trimme
16940 64 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 6f  d from the end o
16950 66 20 74 68 65 20 72 65 63 6f 72 64 2c 20 61 73  f the record, as
16960 20 6c 6f 6e 67 20 61 73 0a 20 20 2a 2a 20 61 73   long as.  ** as
16970 20 74 68 65 20 73 63 68 65 6d 61 20 66 6f 72 6d   the schema form
16980 61 74 20 69 73 20 32 20 6f 72 20 6d 6f 72 65 20  at is 2 or more 
16990 61 6e 64 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20  and none of the 
169a0 6f 6d 69 74 74 65 64 20 63 6f 6c 75 6d 6e 73 0a  omitted columns.
169b0 20 20 2a 2a 20 68 61 76 65 20 61 20 6e 6f 6e 2d    ** have a non-
169c0 4e 55 4c 4c 20 64 65 66 61 75 6c 74 20 76 61 6c  NULL default val
169d0 75 65 2e 20 20 41 6c 73 6f 2c 20 74 68 65 20 72  ue.  Also, the r
169e0 65 63 6f 72 64 20 6d 75 73 74 20 62 65 20 6c 65  ecord must be le
169f0 66 74 20 77 69 74 68 0a 20 20 2a 2a 20 61 74 20  ft with.  ** at 
16a00 6c 65 61 73 74 20 6f 6e 65 20 66 69 65 6c 64 2e  least one field.
16a10 20 20 49 66 20 50 35 3e 30 20 74 68 65 6e 20 69    If P5>0 then i
16a20 74 20 77 69 6c 6c 20 62 65 20 6f 6e 65 20 6d 6f  t will be one mo
16a30 72 65 20 74 68 61 6e 20 74 68 65 0a 20 20 2a 2a  re than the.  **
16a40 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 72 69   index of the ri
16a50 67 68 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20  ght-most column 
16a60 77 69 74 68 20 61 20 6e 6f 6e 2d 4e 55 4c 4c 20  with a non-NULL 
16a70 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 2a 2f  default value */
16a80 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29  .  if( pOp->p5 )
16a90 7b 0a 20 20 20 20 77 68 69 6c 65 28 20 28 70 4c  {.    while( (pL
16aa0 61 73 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ast->flags & MEM
16ab0 5f 4e 75 6c 6c 29 21 3d 30 20 26 26 20 6e 46 69  _Null)!=0 && nFi
16ac0 65 6c 64 3e 70 4f 70 2d 3e 70 35 20 29 7b 0a 20  eld>pOp->p5 ){. 
16ad0 20 20 20 20 20 70 4c 61 73 74 2d 2d 3b 0a 20 20       pLast--;.  
16ae0 20 20 20 20 6e 46 69 65 6c 64 2d 2d 3b 0a 20 20      nField--;.  
16af0 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a    }.  }.#endif..
16b00 20 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f 75 67    /* Loop throug
16b10 68 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 74  h the elements t
16b20 68 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20 75 70  hat will make up
16b30 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 66   the record to f
16b40 69 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74 20 68  igure.  ** out h
16b50 6f 77 20 6d 75 63 68 20 73 70 61 63 65 20 69 73  ow much space is
16b60 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68   required for th
16b70 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 0a 20 20  e new record..  
16b80 2a 2f 0a 20 20 70 52 65 63 20 3d 20 70 4c 61 73  */.  pRec = pLas
16b90 74 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73  t;.  do{.    ass
16ba0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
16bb0 70 52 65 63 29 20 29 3b 0a 20 20 20 20 70 52 65  pRec) );.    pRe
16bc0 63 2d 3e 75 54 65 6d 70 20 3d 20 73 65 72 69 61  c->uTemp = seria
16bd0 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33  l_type = sqlite3
16be0 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 70  VdbeSerialType(p
16bf0 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74  Rec, file_format
16c00 2c 20 26 6c 65 6e 29 3b 0a 20 20 20 20 69 66 28  , &len);.    if(
16c10 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d   pRec->flags & M
16c20 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20  EM_Zero ){.     
16c30 20 69 66 28 20 6e 44 61 74 61 20 29 7b 0a 20 20   if( nData ){.  
16c40 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
16c50 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c  3VdbeMemExpandBl
16c60 6f 62 28 70 52 65 63 29 20 29 20 67 6f 74 6f 20  ob(pRec) ) goto 
16c70 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65  no_mem;.      }e
16c80 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 6e 5a 65  lse{.        nZe
16c90 72 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a  ro += pRec->u.nZ
16ca0 65 72 6f 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e  ero;.        len
16cb0 20 2d 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72   -= pRec->u.nZer
16cc0 6f 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  o;.      }.    }
16cd0 0a 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65  .    nData += le
16ce0 6e 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28  n;.    testcase(
16cf0 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32   serial_type==12
16d00 37 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73  7 );.    testcas
16d10 65 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d  e( serial_type==
16d20 31 32 38 20 29 3b 0a 20 20 20 20 6e 48 64 72 20  128 );.    nHdr 
16d30 2b 3d 20 73 65 72 69 61 6c 5f 74 79 70 65 3c 3d  += serial_type<=
16d40 31 32 37 20 3f 20 31 20 3a 20 73 71 6c 69 74 65  127 ? 1 : sqlite
16d50 33 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61  3VarintLen(seria
16d60 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 69 66 28  l_type);.    if(
16d70 20 70 52 65 63 3d 3d 70 44 61 74 61 30 20 29 20   pRec==pData0 ) 
16d80 62 72 65 61 6b 3b 0a 20 20 20 20 70 52 65 63 2d  break;.    pRec-
16d90 2d 3b 0a 20 20 7d 77 68 69 6c 65 28 31 29 3b 0a  -;.  }while(1);.
16da0 0a 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f  .  /* EVIDENCE-O
16db0 46 3a 20 52 2d 32 32 35 36 34 2d 31 31 36 34 37  F: R-22564-11647
16dc0 20 54 68 65 20 68 65 61 64 65 72 20 62 65 67 69   The header begi
16dd0 6e 73 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65  ns with a single
16de0 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 77 68 69   varint.  ** whi
16df0 63 68 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68  ch determines th
16e00 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
16e10 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 68  f bytes in the h
16e20 65 61 64 65 72 2e 20 54 68 65 20 76 61 72 69 6e  eader. The varin
16e30 74 0a 20 20 2a 2a 20 76 61 6c 75 65 20 69 73 20  t.  ** value is 
16e40 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
16e50 68 65 61 64 65 72 20 69 6e 20 62 79 74 65 73 20  header in bytes 
16e60 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 73 69  including the si
16e70 7a 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 69  ze varint.  ** i
16e80 74 73 65 6c 66 2e 20 2a 2f 0a 20 20 74 65 73 74  tself. */.  test
16e90 63 61 73 65 28 20 6e 48 64 72 3d 3d 31 32 36 20  case( nHdr==126 
16ea0 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e  );.  testcase( n
16eb0 48 64 72 3d 3d 31 32 37 20 29 3b 0a 20 20 69 66  Hdr==127 );.  if
16ec0 28 20 6e 48 64 72 3c 3d 31 32 36 20 29 7b 0a 20  ( nHdr<=126 ){. 
16ed0 20 20 20 2f 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e     /* The common
16ee0 20 63 61 73 65 20 2a 2f 0a 20 20 20 20 6e 48 64   case */.    nHd
16ef0 72 20 2b 3d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b  r += 1;.  }else{
16f00 0a 20 20 20 20 2f 2a 20 52 61 72 65 20 63 61 73  .    /* Rare cas
16f10 65 20 6f 66 20 61 20 72 65 61 6c 6c 79 20 6c 61  e of a really la
16f20 72 67 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20  rge header */.  
16f30 20 20 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c 69    nVarint = sqli
16f40 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64  te3VarintLen(nHd
16f50 72 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20  r);.    nHdr += 
16f60 6e 56 61 72 69 6e 74 3b 0a 20 20 20 20 69 66 28  nVarint;.    if(
16f70 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74 65 33   nVarint<sqlite3
16f80 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20  VarintLen(nHdr) 
16f90 29 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20  ) nHdr++;.  }.  
16fa0 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61  nByte = nHdr+nDa
16fb0 74 61 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 2b  ta;.  if( nByte+
16fc0 6e 5a 65 72 6f 3e 64 62 2d 3e 61 4c 69 6d 69 74  nZero>db->aLimit
16fd0 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
16fe0 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
16ff0 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a  o too_big;.  }..
17000 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74    /* Make sure t
17010 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74  he output regist
17020 65 72 20 68 61 73 20 61 20 62 75 66 66 65 72 20  er has a buffer 
17030 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20  large enough to 
17040 73 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65 20  store .  ** the 
17050 6e 65 77 20 72 65 63 6f 72 64 2e 20 54 68 65 20  new record. The 
17060 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20  output register 
17070 28 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74  (pOp->p3) is not
17080 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a   allowed to.  **
17090 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 69   be one of the i
170a0 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20 28  nput registers (
170b0 62 65 63 61 75 73 65 20 74 68 65 20 66 6f 6c 6c  because the foll
170c0 6f 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20  owing call to.  
170d0 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  ** sqlite3VdbeMe
170e0 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28  mClearAndResize(
170f0 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72 20  ) could clobber 
17100 74 68 65 20 76 61 6c 75 65 20 62 65 66 6f 72 65  the value before
17110 20 69 74 20 69 73 20 75 73 65 64 29 2e 0a 20 20   it is used)..  
17120 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  */.  if( sqlite3
17130 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52  VdbeMemClearAndR
17140 65 73 69 7a 65 28 70 4f 75 74 2c 20 28 69 6e 74  esize(pOut, (int
17150 29 6e 42 79 74 65 29 20 29 7b 0a 20 20 20 20 67  )nByte) ){.    g
17160 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
17170 20 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20 28    zNewRecord = (
17180 75 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20  u8 *)pOut->z;.. 
17190 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20 72 65   /* Write the re
171a0 63 6f 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75  cord */.  i = pu
171b0 74 56 61 72 69 6e 74 33 32 28 7a 4e 65 77 52 65  tVarint32(zNewRe
171c0 63 6f 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20 6a  cord, nHdr);.  j
171d0 20 3d 20 6e 48 64 72 3b 0a 20 20 61 73 73 65 72   = nHdr;.  asser
171e0 74 28 20 70 44 61 74 61 30 3c 3d 70 4c 61 73 74  t( pData0<=pLast
171f0 20 29 3b 0a 20 20 70 52 65 63 20 3d 20 70 44 61   );.  pRec = pDa
17200 74 61 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 73  ta0;.  do{.    s
17210 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 70 52 65  erial_type = pRe
17220 63 2d 3e 75 54 65 6d 70 3b 0a 20 20 20 20 2f 2a  c->uTemp;.    /*
17230 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
17240 30 36 35 32 39 2d 34 37 33 36 32 20 46 6f 6c 6c  06529-47362 Foll
17250 6f 77 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76  owing the size v
17260 61 72 69 6e 74 20 61 72 65 20 6f 6e 65 20 6f 72  arint are one or
17270 20 6d 6f 72 65 0a 20 20 20 20 2a 2a 20 61 64 64   more.    ** add
17280 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73 2c  itional varints,
17290 20 6f 6e 65 20 70 65 72 20 63 6f 6c 75 6d 6e 2e   one per column.
172a0 20 2a 2f 0a 20 20 20 20 69 20 2b 3d 20 70 75 74   */.    i += put
172b0 56 61 72 69 6e 74 33 32 28 26 7a 4e 65 77 52 65  Varint32(&zNewRe
172c0 63 6f 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f  cord[i], serial_
172d0 74 79 70 65 29 3b 20 20 20 20 20 20 20 20 20 20  type);          
172e0 20 20 2f 2a 20 73 65 72 69 61 6c 20 74 79 70 65    /* serial type
172f0 20 2a 2f 0a 20 20 20 20 2f 2a 20 45 56 49 44 45   */.    /* EVIDE
17300 4e 43 45 2d 4f 46 3a 20 52 2d 36 34 35 33 36 2d  NCE-OF: R-64536-
17310 35 31 37 32 38 20 54 68 65 20 76 61 6c 75 65 73  51728 The values
17320 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
17330 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 0a 20   in the record. 
17340 20 20 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c     ** immediatel
17350 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 68 65 61  y follow the hea
17360 64 65 72 2e 20 2a 2f 0a 20 20 20 20 6a 20 2b 3d  der. */.    j +=
17370 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
17380 61 6c 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72  alPut(&zNewRecor
17390 64 5b 6a 5d 2c 20 70 52 65 63 2c 20 73 65 72 69  d[j], pRec, seri
173a0 61 6c 5f 74 79 70 65 29 3b 20 2f 2a 20 63 6f 6e  al_type); /* con
173b0 74 65 6e 74 20 2a 2f 0a 20 20 7d 77 68 69 6c 65  tent */.  }while
173c0 28 20 28 2b 2b 70 52 65 63 29 3c 3d 70 4c 61 73  ( (++pRec)<=pLas
173d0 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  t );.  assert( i
173e0 3d 3d 6e 48 64 72 20 29 3b 0a 20 20 61 73 73 65  ==nHdr );.  asse
173f0 72 74 28 20 6a 3d 3d 6e 42 79 74 65 20 29 3b 0a  rt( j==nByte );.
17400 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
17410 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
17420 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
17430 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
17440 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42  Out->n = (int)nB
17450 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  yte;.  pOut->fla
17460 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 3b 0a 20  gs = MEM_Blob;. 
17470 20 69 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20   if( nZero ){.  
17480 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20    pOut->u.nZero 
17490 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75  = nZero;.    pOu
174a0 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f  t->flags |= MEM_
174b0 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 52 45 47 49  Zero;.  }.  REGI
174c0 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
174d0 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44  p3, pOut);.  UPD
174e0 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
174f0 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
17500 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
17510 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  ount P1 P2 * * *
17520 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
17530 50 32 5d 3d 63 6f 75 6e 74 28 29 0a 2a 2a 0a 2a  P2]=count().**.*
17540 2a 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62  * Store the numb
17550 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61  er of entries (a
17560 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29  n integer value)
17570 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   in the table or
17580 20 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65   index .** opene
17590 64 20 62 79 20 63 75 72 73 6f 72 20 50 31 20 69  d by cursor P1 i
175a0 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f  n register P2.*/
175b0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
175c0 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a  OMIT_BTREECOUNT.
175d0 63 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b  case OP_Count: {
175e0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
175f0 20 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72 79   */.  i64 nEntry
17600 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
17610 72 73 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  rsr;..  assert( 
17620 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
17630 5d 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  ]->eCurType==CUR
17640 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
17650 70 43 72 73 72 20 3d 20 70 2d 3e 61 70 43 73 72  pCrsr = p->apCsr
17660 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 75 63 2e 70 43  [pOp->p1]->uc.pC
17670 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28  ursor;.  assert(
17680 20 70 43 72 73 72 20 29 3b 0a 20 20 6e 45 6e 74   pCrsr );.  nEnt
17690 72 79 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  ry = 0;  /* Not 
176a0 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73  needed.  Only us
176b0 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20  ed to silence a 
176c0 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63  warning. */.  rc
176d0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
176e0 6f 75 6e 74 28 70 43 72 73 72 2c 20 26 6e 45 6e  ount(pCrsr, &nEn
176f0 74 72 79 29 3b 0a 20 20 69 66 28 20 72 63 20 29  try);.  if( rc )
17700 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
17710 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 4f 75 74  to_error;.  pOut
17720 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
17730 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75  e(p, pOp);.  pOu
17740 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b  t->u.i = nEntry;
17750 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
17760 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  if../* Opcode: S
17770 61 76 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20  avepoint P1 * * 
17780 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c  P4 *.**.** Open,
17790 20 72 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c   release or roll
177a0 62 61 63 6b 20 74 68 65 20 73 61 76 65 70 6f 69  back the savepoi
177b0 6e 74 20 6e 61 6d 65 64 20 62 79 20 70 61 72 61  nt named by para
177c0 6d 65 74 65 72 20 50 34 2c 20 64 65 70 65 6e 64  meter P4, depend
177d0 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61  ing.** on the va
177e0 6c 75 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70  lue of P1. To op
177f0 65 6e 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69  en a new savepoi
17800 6e 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65  nt, P1==0. To re
17810 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61  lease (commit) a
17820 6e 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20 73 61  n.** existing sa
17830 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20  vepoint, P1==1, 
17840 6f 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61  or to rollback a
17850 6e 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70  n existing savep
17860 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63  oint P1==2..*/.c
17870 61 73 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74  ase OP_Savepoint
17880 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20 20  : {.  int p1;   
17890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178a0 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f        /* Value o
178b0 66 20 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  f P1 operand */.
178c0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
178d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178e0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76    /* Name of sav
178f0 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20  epoint */.  int 
17900 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69  nName;.  Savepoi
17910 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65  nt *pNew;.  Save
17920 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e  point *pSavepoin
17930 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  t;.  Savepoint *
17940 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61 76  pTmp;.  int iSav
17950 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69  epoint;.  int ii
17960 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70  ;..  p1 = pOp->p
17970 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70  1;.  zName = pOp
17980 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73  ->p4.z;..  /* As
17990 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70 31  sert that the p1
179a0 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 76 61   parameter is va
179b0 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61 74 20 69  lid. Also that i
179c0 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70  f there is no op
179d0 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74  en.  ** transact
179e0 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72 65 20  ion, then there 
179f0 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73 61  cannot be any sa
17a00 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a  vepoints. .  */.
17a10 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53    assert( db->pS
17a20 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64  avepoint==0 || d
17a30 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  b->autoCommit==0
17a40 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31   );.  assert( p1
17a50 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49  ==SAVEPOINT_BEGI
17a60 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  N||p1==SAVEPOINT
17a70 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41  _RELEASE||p1==SA
17a80 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b  VEPOINT_ROLLBACK
17a90 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62   );.  assert( db
17aa0 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20  ->pSavepoint || 
17ab0 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f  db->isTransactio
17ac0 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b  nSavepoint==0 );
17ad0 0a 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b  .  assert( check
17ae0 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64  SavepointCount(d
17af0 62 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  b) );.  assert( 
17b00 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
17b10 0a 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50  .  if( p1==SAVEP
17b20 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20  OINT_BEGIN ){.  
17b30 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57    if( db->nVdbeW
17b40 72 69 74 65 3e 30 20 29 7b 0a 20 20 20 20 20 20  rite>0 ){.      
17b50 2f 2a 20 41 20 6e 65 77 20 73 61 76 65 70 6f 69  /* A new savepoi
17b60 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 72 65  nt cannot be cre
17b70 61 74 65 64 20 69 66 20 74 68 65 72 65 20 61 72  ated if there ar
17b80 65 20 61 63 74 69 76 65 20 77 72 69 74 65 20 0a  e active write .
17b90 20 20 20 20 20 20 2a 2a 20 73 74 61 74 65 6d 65        ** stateme
17ba0 6e 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72  nts (i.e. open r
17bb0 65 61 64 2f 77 72 69 74 65 20 69 6e 63 72 65 6d  ead/write increm
17bc0 65 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c  ental blob handl
17bd0 65 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  es)..      */.  
17be0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
17bf0 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20  rror(p, "cannot 
17c00 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d  open savepoint -
17c10 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
17c20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20  in progress");. 
17c30 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
17c40 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65  _BUSY;.    }else
17c50 7b 0a 20 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20  {.      nName = 
17c60 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
17c70 7a 4e 61 6d 65 29 3b 0a 0a 23 69 66 6e 64 65 66  zName);..#ifndef
17c80 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
17c90 54 55 41 4c 54 41 42 4c 45 0a 20 20 20 20 20 20  TUALTABLE.      
17ca0 2f 2a 20 54 68 69 73 20 63 61 6c 6c 20 69 73 20  /* This call is 
17cb0 4f 6b 20 65 76 65 6e 20 69 66 20 74 68 69 73 20  Ok even if this 
17cc0 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61 63 74  savepoint is act
17cd0 75 61 6c 6c 79 20 61 20 74 72 61 6e 73 61 63 74  ually a transact
17ce0 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 73 61 76  ion.      ** sav
17cf0 65 70 6f 69 6e 74 20 28 61 6e 64 20 74 68 65 72  epoint (and ther
17d00 65 66 6f 72 65 20 73 68 6f 75 6c 64 20 6e 6f 74  efore should not
17d10 20 70 72 6f 6d 70 74 20 78 53 61 76 65 70 6f 69   prompt xSavepoi
17d20 6e 74 28 29 29 20 63 61 6c 6c 62 61 63 6b 73 2e  nt()) callbacks.
17d30 0a 20 20 20 20 20 20 2a 2a 20 49 66 20 74 68 69  .      ** If thi
17d40 73 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69  s is a transacti
17d50 6f 6e 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69  on savepoint bei
17d60 6e 67 20 6f 70 65 6e 65 64 2c 20 69 74 20 69 73  ng opened, it is
17d70 20 67 75 61 72 61 6e 74 65 65 64 0a 20 20 20 20   guaranteed.    
17d80 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20 64 62    ** that the db
17d90 2d 3e 61 56 54 72 61 6e 73 5b 5d 20 61 72 72 61  ->aVTrans[] arra
17da0 79 20 69 73 20 65 6d 70 74 79 2e 20 20 2a 2f 0a  y is empty.  */.
17db0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62        assert( db
17dc0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  ->autoCommit==0 
17dd0 7c 7c 20 64 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d  || db->nVTrans==
17de0 30 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  0 );.      rc = 
17df0 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70  sqlite3VtabSavep
17e00 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49  oint(db, SAVEPOI
17e10 4e 54 5f 42 45 47 49 4e 2c 0a 20 20 20 20 20 20  NT_BEGIN,.      
17e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e30 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53            db->nS
17e40 74 61 74 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61  tatement+db->nSa
17e50 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20  vepoint);.      
17e60 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
17e70 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
17e80 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e  ue_to_error;.#en
17e90 64 69 66 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72  dif..      /* Cr
17ea0 65 61 74 65 20 61 20 6e 65 77 20 73 61 76 65 70  eate a new savep
17eb0 6f 69 6e 74 20 73 74 72 75 63 74 75 72 65 2e 20  oint structure. 
17ec0 2a 2f 0a 20 20 20 20 20 20 70 4e 65 77 20 3d 20  */.      pNew = 
17ed0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
17ee0 61 77 4e 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28  awNN(db, sizeof(
17ef0 53 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65  Savepoint)+nName
17f00 2b 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  +1);.      if( p
17f10 4e 65 77 20 29 7b 0a 20 20 20 20 20 20 20 20 70  New ){.        p
17f20 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68  New->zName = (ch
17f30 61 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20  ar *)&pNew[1];. 
17f40 20 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 4e         memcpy(pN
17f50 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65  ew->zName, zName
17f60 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20  , nName+1);.    
17f70 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74  .        /* If t
17f80 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20  here is no open 
17f90 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65  transaction, the
17fa0 6e 20 6d 61 72 6b 20 74 68 69 73 20 61 73 20 61  n mark this as a
17fb0 20 73 70 65 63 69 61 6c 0a 20 20 20 20 20 20 20   special.       
17fc0 20 2a 2a 20 22 74 72 61 6e 73 61 63 74 69 6f 6e   ** "transaction
17fd0 20 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a   savepoint". */.
17fe0 20 20 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e          if( db->
17ff0 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20  autoCommit ){.  
18000 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f          db->auto
18010 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20  Commit = 0;.    
18020 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e        db->isTran
18030 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
18040 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65   = 1;.        }e
18050 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 64  lse{.          d
18060 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b  b->nSavepoint++;
18070 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  .        }..    
18080 20 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68 65 20      /* Link the 
18090 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 69 6e  new savepoint in
180a0 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
180b0 68 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e 20 2a  handle's list. *
180c0 2f 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e  /.        pNew->
180d0 70 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53 61 76  pNext = db->pSav
180e0 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20  epoint;.        
180f0 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d  db->pSavepoint =
18100 20 70 4e 65 77 3b 0a 20 20 20 20 20 20 20 20 70   pNew;.        p
18110 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f  New->nDeferredCo
18120 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72  ns = db->nDeferr
18130 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20  edCons;.        
18140 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 49  pNew->nDeferredI
18150 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65  mmCons = db->nDe
18160 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20  ferredImmCons;. 
18170 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
18180 65 6c 73 65 7b 0a 20 20 20 20 69 53 61 76 65 70  else{.    iSavep
18190 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f  oint = 0;..    /
181a0 2a 20 46 69 6e 64 20 74 68 65 20 6e 61 6d 65 64  * Find the named
181b0 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 74   savepoint. If t
181c0 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20  here is no such 
181d0 73 61 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20  savepoint, then 
181e0 61 6e 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72 72  an.    ** an err
181f0 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64 20 74  or is returned t
18200 6f 20 74 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a  o the user.  */.
18210 20 20 20 20 66 6f 72 28 0a 20 20 20 20 20 20 70      for(.      p
18220 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e  Savepoint = db->
18230 70 53 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20  pSavepoint; .   
18240 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 26 26     pSavepoint &&
18250 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
18260 70 53 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d  pSavepoint->zNam
18270 65 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20  e, zName);.     
18280 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53   pSavepoint = pS
18290 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a  avepoint->pNext.
182a0 20 20 20 20 29 7b 0a 20 20 20 20 20 20 69 53 61      ){.      iSa
182b0 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d  vepoint++;.    }
182c0 0a 20 20 20 20 69 66 28 20 21 70 53 61 76 65 70  .    if( !pSavep
182d0 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71  oint ){.      sq
182e0 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
182f0 2c 20 22 6e 6f 20 73 75 63 68 20 73 61 76 65 70  , "no such savep
18300 6f 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61 6d 65  oint: %s", zName
18310 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  );.      rc = SQ
18320 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
18330 7d 65 6c 73 65 20 69 66 28 20 64 62 2d 3e 6e 56  }else if( db->nV
18340 64 62 65 57 72 69 74 65 3e 30 20 26 26 20 70 31  dbeWrite>0 && p1
18350 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  ==SAVEPOINT_RELE
18360 41 53 45 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  ASE ){.      /* 
18370 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62  It is not possib
18380 6c 65 20 74 6f 20 72 65 6c 65 61 73 65 20 28 63  le to release (c
18390 6f 6d 6d 69 74 29 20 61 20 73 61 76 65 70 6f 69  ommit) a savepoi
183a0 6e 74 20 69 66 20 74 68 65 72 65 20 61 72 65 20  nt if there are 
183b0 0a 20 20 20 20 20 20 2a 2a 20 61 63 74 69 76 65  .      ** active
183c0 20 77 72 69 74 65 20 73 74 61 74 65 6d 65 6e 74   write statement
183d0 73 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  s..      */.    
183e0 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
183f0 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 72 65  or(p, "cannot re
18400 6c 65 61 73 65 20 73 61 76 65 70 6f 69 6e 74 20  lease savepoint 
18410 2d 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  - ".            
18420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53                "S
18430 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  QL statements in
18440 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20   progress");.   
18450 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42     rc = SQLITE_B
18460 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  USY;.    }else{.
18470 0a 20 20 20 20 20 20 2f 2a 20 44 65 74 65 72 6d  .      /* Determ
18480 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ine whether or n
18490 6f 74 20 74 68 69 73 20 69 73 20 61 20 74 72 61  ot this is a tra
184a0 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
184b0 6e 74 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20 20  nt. If so,.     
184c0 20 2a 2a 20 61 6e 64 20 74 68 69 73 20 69 73 20   ** and this is 
184d0 61 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  a RELEASE comman
184e0 64 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72 72  d, then the curr
184f0 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
18500 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d  .      ** is com
18510 6d 69 74 74 65 64 2e 20 0a 20 20 20 20 20 20 2a  mitted. .      *
18520 2f 0a 20 20 20 20 20 20 69 6e 74 20 69 73 54 72  /.      int isTr
18530 61 6e 73 61 63 74 69 6f 6e 20 3d 20 70 53 61 76  ansaction = pSav
18540 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30  epoint->pNext==0
18550 20 26 26 20 64 62 2d 3e 69 73 54 72 61 6e 73 61   && db->isTransa
18560 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a  ctionSavepoint;.
18570 20 20 20 20 20 20 69 66 28 20 69 73 54 72 61 6e        if( isTran
18580 73 61 63 74 69 6f 6e 20 26 26 20 70 31 3d 3d 53  saction && p1==S
18590 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
185a0 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
185b0 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62  (rc = sqlite3Vdb
185c0 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21  eCheckFk(p, 1))!
185d0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
185e0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62          goto vdb
185f0 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20  e_return;.      
18600 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e    }.        db->
18610 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a  autoCommit = 1;.
18620 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69          if( sqli
18630 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d  te3VdbeHalt(p)==
18640 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20  SQLITE_BUSY ){. 
18650 20 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d           p->pc =
18660 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
18670 29 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  );.          db-
18680 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b  >autoCommit = 0;
18690 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 72 63  .          p->rc
186a0 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42   = rc = SQLITE_B
186b0 55 53 59 3b 0a 20 20 20 20 20 20 20 20 20 20 67  USY;.          g
186c0 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
186d0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
186e0 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63     db->isTransac
186f0 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20  tionSavepoint = 
18700 30 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  0;.        rc = 
18710 70 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c  p->rc;.      }el
18720 73 65 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20  se{.        int 
18730 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 3b 0a  isSchemaChange;.
18740 20 20 20 20 20 20 20 20 69 53 61 76 65 70 6f 69          iSavepoi
18750 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f  nt = db->nSavepo
18760 69 6e 74 20 2d 20 69 53 61 76 65 70 6f 69 6e 74  int - iSavepoint
18770 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66   - 1;.        if
18780 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
18790 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20  ROLLBACK ){.    
187a0 20 20 20 20 20 20 69 73 53 63 68 65 6d 61 43 68        isSchemaCh
187b0 61 6e 67 65 20 3d 20 28 64 62 2d 3e 6d 44 62 46  ange = (db->mDbF
187c0 6c 61 67 73 20 26 20 44 42 46 4c 41 47 5f 53 63  lags & DBFLAG_Sc
187d0 68 65 6d 61 43 68 61 6e 67 65 29 21 3d 30 3b 0a  hemaChange)!=0;.
187e0 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 69 69            for(ii
187f0 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20  =0; ii<db->nDb; 
18800 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20  ii++){.         
18810 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
18820 74 72 65 65 54 72 69 70 41 6c 6c 43 75 72 73 6f  treeTripAllCurso
18830 72 73 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  rs(db->aDb[ii].p
18840 42 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  Bt,.            
18850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18860 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54             SQLIT
18870 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b  E_ABORT_ROLLBACK
18880 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
18890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188a0 20 20 20 20 20 20 20 20 20 69 73 53 63 68 65 6d           isSchem
188b0 61 43 68 61 6e 67 65 3d 3d 30 29 3b 0a 20 20 20  aChange==0);.   
188c0 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21           if( rc!
188d0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
188e0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
188f0 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20  rror;.          
18900 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  }.        }else{
18910 0a 20 20 20 20 20 20 20 20 20 20 69 73 53 63 68  .          isSch
18920 65 6d 61 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20  emaChange = 0;. 
18930 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
18940 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62   for(ii=0; ii<db
18950 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20  ->nDb; ii++){.  
18960 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
18970 69 74 65 33 42 74 72 65 65 53 61 76 65 70 6f 69  ite3BtreeSavepoi
18980 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  nt(db->aDb[ii].p
18990 42 74 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69  Bt, p1, iSavepoi
189a0 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  nt);.          i
189b0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
189c0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
189d0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
189e0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
189f0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
18a00 20 20 20 20 20 20 20 69 66 28 20 69 73 53 63 68         if( isSch
18a10 65 6d 61 43 68 61 6e 67 65 20 29 7b 0a 20 20 20  emaChange ){.   
18a20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78         sqlite3Ex
18a30 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
18a40 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20  ements(db);.    
18a50 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73        sqlite3Res
18a60 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f  etAllSchemasOfCo
18a70 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20  nnection(db);.  
18a80 20 20 20 20 20 20 20 20 64 62 2d 3e 6d 44 62 46          db->mDbF
18a90 6c 61 67 73 20 7c 3d 20 44 42 46 4c 41 47 5f 53  lags |= DBFLAG_S
18aa0 63 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20 20 20  chemaChange;.   
18ab0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
18ac0 20 0a 20 20 20 20 20 20 2f 2a 20 52 65 67 61 72   .      /* Regar
18ad0 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72  dless of whether
18ae0 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45 41   this is a RELEA
18af0 53 45 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20  SE or ROLLBACK, 
18b00 64 65 73 74 72 6f 79 20 61 6c 6c 20 0a 20 20 20  destroy all .   
18b10 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 73     ** savepoints
18b20 20 6e 65 73 74 65 64 20 69 6e 73 69 64 65 20 6f   nested inside o
18b30 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  f the savepoint 
18b40 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f  being operated o
18b50 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 77 68 69 6c  n. */.      whil
18b60 65 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e  e( db->pSavepoin
18b70 74 21 3d 70 53 61 76 65 70 6f 69 6e 74 20 29 7b  t!=pSavepoint ){
18b80 0a 20 20 20 20 20 20 20 20 70 54 6d 70 20 3d 20  .        pTmp = 
18b90 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a  db->pSavepoint;.
18ba0 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76          db->pSav
18bb0 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70 2d 3e 70  epoint = pTmp->p
18bc0 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71  Next;.        sq
18bd0 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
18be0 70 54 6d 70 29 3b 0a 20 20 20 20 20 20 20 20 64  pTmp);.        d
18bf0 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b  b->nSavepoint--;
18c00 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
18c10 2f 2a 20 49 66 20 69 74 20 69 73 20 61 20 52 45  /* If it is a RE
18c20 4c 45 41 53 45 2c 20 74 68 65 6e 20 64 65 73 74  LEASE, then dest
18c30 72 6f 79 20 74 68 65 20 73 61 76 65 70 6f 69 6e  roy the savepoin
18c40 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64  t being operated
18c50 20 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 74 6f   on .      ** to
18c60 6f 2e 20 49 66 20 69 74 20 69 73 20 61 20 52 4f  o. If it is a RO
18c70 4c 4c 42 41 43 4b 20 54 4f 2c 20 74 68 65 6e 20  LLBACK TO, then 
18c80 73 65 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  set the number o
18c90 66 20 64 65 66 65 72 72 65 64 20 0a 20 20 20 20  f deferred .    
18ca0 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20    ** constraint 
18cb0 76 69 6f 6c 61 74 69 6f 6e 73 20 70 72 65 73 65  violations prese
18cc0 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  nt in the databa
18cd0 73 65 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  se to the value 
18ce0 73 74 6f 72 65 64 0a 20 20 20 20 20 20 2a 2a 20  stored.      ** 
18cf0 77 68 65 6e 20 74 68 65 20 73 61 76 65 70 6f 69  when the savepoi
18d00 6e 74 20 77 61 73 20 63 72 65 61 74 65 64 2e 20  nt was created. 
18d10 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 31   */.      if( p1
18d20 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  ==SAVEPOINT_RELE
18d30 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20 61  ASE ){.        a
18d40 73 73 65 72 74 28 20 70 53 61 76 65 70 6f 69 6e  ssert( pSavepoin
18d50 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e  t==db->pSavepoin
18d60 74 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  t );.        db-
18d70 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53  >pSavepoint = pS
18d80 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b  avepoint->pNext;
18d90 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
18da0 44 62 46 72 65 65 28 64 62 2c 20 70 53 61 76 65  DbFree(db, pSave
18db0 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  point);.        
18dc0 69 66 28 20 21 69 73 54 72 61 6e 73 61 63 74 69  if( !isTransacti
18dd0 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  on ){.          
18de0 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d  db->nSavepoint--
18df0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
18e00 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
18e10 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
18e20 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d  ns = pSavepoint-
18e30 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a  >nDeferredCons;.
18e40 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66          db->nDef
18e50 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 70  erredImmCons = p
18e60 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65  Savepoint->nDefe
18e70 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20  rredImmCons;.   
18e80 20 20 20 7d 0a 0a 20 20 20 20 20 20 69 66 28 20     }..      if( 
18e90 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 7c  !isTransaction |
18ea0 7c 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  | p1==SAVEPOINT_
18eb0 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20  ROLLBACK ){.    
18ec0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
18ed0 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62  VtabSavepoint(db
18ee0 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74  , p1, iSavepoint
18ef0 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
18f00 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
18f10 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
18f20 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
18f30 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
18f40 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
18f50 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20  due_to_error;.. 
18f60 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
18f70 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74  code: AutoCommit
18f80 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
18f90 2a 2a 20 53 65 74 20 74 68 65 20 64 61 74 61 62  ** Set the datab
18fa0 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20  ase auto-commit 
18fb0 66 6c 61 67 20 74 6f 20 50 31 20 28 31 20 6f 72  flag to P1 (1 or
18fc0 20 30 29 2e 20 49 66 20 50 32 20 69 73 20 74 72   0). If P2 is tr
18fd0 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b  ue, roll.** back
18fe0 20 61 6e 79 20 63 75 72 72 65 6e 74 6c 79 20 61   any currently a
18ff0 63 74 69 76 65 20 62 74 72 65 65 20 74 72 61 6e  ctive btree tran
19000 73 61 63 74 69 6f 6e 73 2e 20 49 66 20 74 68 65  sactions. If the
19010 72 65 20 61 72 65 20 61 6e 79 20 61 63 74 69 76  re are any activ
19020 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72 74 20  e.** VMs (apart 
19030 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20  from this one), 
19040 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20  then a ROLLBACK 
19050 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54  fails.  A COMMIT
19060 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65   fails if.** the
19070 72 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72  re are active wr
19080 69 74 69 6e 67 20 56 4d 73 20 6f 72 20 61 63 74  iting VMs or act
19090 69 76 65 20 56 4d 73 20 74 68 61 74 20 75 73 65  ive VMs that use
190a0 20 73 68 61 72 65 64 20 63 61 63 68 65 2e 0a 2a   shared cache..*
190b0 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
190c0 63 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65  ction causes the
190d0 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a   VM to halt..*/.
190e0 63 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d  case OP_AutoComm
190f0 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73 69  it: {.  int desi
19100 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20  redAutoCommit;. 
19110 20 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a   int iRollback;.
19120 0a 20 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  .  desiredAutoCo
19130 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  mmit = pOp->p1;.
19140 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f    iRollback = pO
19150 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
19160 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
19170 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65 64  it==1 || desired
19180 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b  AutoCommit==0 );
19190 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72  .  assert( desir
191a0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20  edAutoCommit==1 
191b0 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20  || iRollback==0 
191c0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  );.  assert( db-
191d0 3e 6e 56 64 62 65 41 63 74 69 76 65 3e 30 20 29  >nVdbeActive>0 )
191e0 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73 74 20 74  ;  /* At least t
191f0 68 69 73 20 6f 6e 65 20 56 4d 20 69 73 20 61 63  his one VM is ac
19200 74 69 76 65 20 2a 2f 0a 20 20 61 73 73 65 72 74  tive */.  assert
19210 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
19220 3b 0a 0a 20 20 69 66 28 20 64 65 73 69 72 65 64  ;..  if( desired
19230 41 75 74 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e  AutoCommit!=db->
19240 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20  autoCommit ){.  
19250 20 20 69 66 28 20 69 52 6f 6c 6c 62 61 63 6b 20    if( iRollback 
19260 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
19270 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
19280 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 73  it==1 );.      s
19290 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c  qlite3RollbackAl
192a0 6c 28 64 62 2c 20 53 51 4c 49 54 45 5f 41 42 4f  l(db, SQLITE_ABO
192b0 52 54 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20  RT_ROLLBACK);.  
192c0 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
192d0 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73  it = 1;.    }els
192e0 65 20 69 66 28 20 64 65 73 69 72 65 64 41 75 74  e if( desiredAut
192f0 6f 43 6f 6d 6d 69 74 20 26 26 20 64 62 2d 3e 6e  oCommit && db->n
19300 56 64 62 65 57 72 69 74 65 3e 30 20 29 7b 0a 20  VdbeWrite>0 ){. 
19310 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20       /* If this 
19320 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c  instruction impl
19330 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54 20  ements a COMMIT 
19340 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72  and other VMs ar
19350 65 20 77 72 69 74 69 6e 67 0a 20 20 20 20 20 20  e writing.      
19360 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72  ** return an err
19370 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68  or indicating th
19380 61 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73  at the other VMs
19390 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66   must complete f
193a0 69 72 73 74 2e 20 0a 20 20 20 20 20 20 2a 2f 0a  irst. .      */.
193b0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
193c0 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f  eError(p, "canno
193d0 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63  t commit transac
193e0 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20 20  tion - ".       
193f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19400 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e     "SQL statemen
19410 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29  ts in progress")
19420 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
19430 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20  ITE_BUSY;.      
19440 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
19450 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c  o_error;.    }el
19460 73 65 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c  se if( (rc = sql
19470 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28  ite3VdbeCheckFk(
19480 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f  p, 1))!=SQLITE_O
19490 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  K ){.      goto 
194a0 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
194b0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62   }else{.      db
194c0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28  ->autoCommit = (
194d0 75 38 29 64 65 73 69 72 65 64 41 75 74 6f 43 6f  u8)desiredAutoCo
194e0 6d 6d 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20  mmit;.    }.    
194f0 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 48  if( sqlite3VdbeH
19500 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42  alt(p)==SQLITE_B
19510 55 53 59 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e  USY ){.      p->
19520 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d  pc = (int)(pOp -
19530 20 61 4f 70 29 3b 0a 20 20 20 20 20 20 64 62 2d   aOp);.      db-
19540 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75  >autoCommit = (u
19550 38 29 28 31 2d 64 65 73 69 72 65 64 41 75 74 6f  8)(1-desiredAuto
19560 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20 20 70  Commit);.      p
19570 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49  ->rc = rc = SQLI
19580 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67  TE_BUSY;.      g
19590 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
195a0 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72  .    }.    asser
195b0 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e  t( db->nStatemen
195c0 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69  t==0 );.    sqli
195d0 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e  te3CloseSavepoin
195e0 74 73 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20  ts(db);.    if( 
195f0 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  p->rc==SQLITE_OK
19600 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
19610 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20  QLITE_DONE;.    
19620 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20  }else{.      rc 
19630 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
19640 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76      }.    goto v
19650 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65  dbe_return;.  }e
19660 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
19670 56 64 62 65 45 72 72 6f 72 28 70 2c 0a 20 20 20  VdbeError(p,.   
19680 20 20 20 20 20 28 21 64 65 73 69 72 65 64 41 75       (!desiredAu
19690 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f  toCommit)?"canno
196a0 74 20 73 74 61 72 74 20 61 20 74 72 61 6e 73 61  t start a transa
196b0 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74  ction within a t
196c0 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20  ransaction":(.  
196d0 20 20 20 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b        (iRollback
196e0 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61  )?"cannot rollba
196f0 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74  ck - no transact
19700 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a  ion is active":.
19710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19720 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69     "cannot commi
19730 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69  t - no transacti
19740 6f 6e 20 69 73 20 61 63 74 69 76 65 22 29 29 3b  on is active"));
19750 0a 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 72  .         .    r
19760 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
19770 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  ;.    goto abort
19780 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
19790 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
197a0 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e 73 61  * Opcode: Transa
197b0 63 74 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50  ction P1 P2 P3 P
197c0 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e  4 P5.**.** Begin
197d0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f   a transaction o
197e0 6e 20 64 61 74 61 62 61 73 65 20 50 31 20 69 66  n database P1 if
197f0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69   a transaction i
19800 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 0a 2a 2a  s not already.**
19810 20 61 63 74 69 76 65 2e 0a 2a 2a 20 49 66 20 50   active..** If P
19820 32 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  2 is non-zero, t
19830 68 65 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e  hen a write-tran
19840 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74  saction is start
19850 65 64 2c 20 6f 72 20 69 66 20 61 20 0a 2a 2a 20  ed, or if a .** 
19860 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e  read-transaction
19870 20 69 73 20 61 6c 72 65 61 64 79 20 61 63 74 69   is already acti
19880 76 65 2c 20 69 74 20 69 73 20 75 70 67 72 61 64  ve, it is upgrad
19890 65 64 20 74 6f 20 61 20 77 72 69 74 65 2d 74 72  ed to a write-tr
198a0 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2a 20 49 66  ansaction..** If
198b0 20 50 32 20 69 73 20 7a 65 72 6f 2c 20 74 68 65   P2 is zero, the
198c0 6e 20 61 20 72 65 61 64 2d 74 72 61 6e 73 61 63  n a read-transac
198d0 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e  tion is started.
198e0 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65  .**.** P1 is the
198f0 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61   index of the da
19900 74 61 62 61 73 65 20 66 69 6c 65 20 6f 6e 20 77  tabase file on w
19910 68 69 63 68 20 74 68 65 20 74 72 61 6e 73 61 63  hich the transac
19920 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74  tion is.** start
19930 65 64 2e 20 20 49 6e 64 65 78 20 30 20 69 73 20  ed.  Index 0 is 
19940 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
19950 65 20 66 69 6c 65 20 61 6e 64 20 69 6e 64 65 78  e file and index
19960 20 31 20 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c   1 is the.** fil
19970 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f  e used for tempo
19980 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20 49 6e  rary tables.  In
19990 64 69 63 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f  dices of 2 or mo
199a0 72 65 20 61 72 65 20 75 73 65 64 20 66 6f 72 0a  re are used for.
199b0 2a 2a 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ** attached data
199c0 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  bases..**.** If 
199d0 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74  a write-transact
199e0 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 20 61  ion is started a
199f0 6e 64 20 74 68 65 20 56 64 62 65 2e 75 73 65 73  nd the Vdbe.uses
19a00 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c 61 67  StmtJournal flag
19a10 20 69 73 0a 2a 2a 20 74 72 75 65 20 28 74 68 69   is.** true (thi
19a20 73 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 66  s flag is set if
19a30 20 74 68 65 20 56 64 62 65 20 6d 61 79 20 6d 6f   the Vdbe may mo
19a40 64 69 66 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f  dify more than o
19a50 6e 65 20 72 6f 77 20 61 6e 64 20 6d 61 79 0a 2a  ne row and may.*
19a60 2a 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54  * throw an ABORT
19a70 20 65 78 63 65 70 74 69 6f 6e 29 2c 20 61 20 73   exception), a s
19a80 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
19a90 74 69 6f 6e 20 6d 61 79 20 61 6c 73 6f 20 62 65  tion may also be
19aa0 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65   opened..** More
19ab0 20 73 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 61   specifically, a
19ac0 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
19ad0 61 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64  action is opened
19ae0 20 69 66 66 20 74 68 65 20 64 61 74 61 62 61 73   iff the databas
19af0 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  e.** connection 
19b00 69 73 20 63 75 72 72 65 6e 74 6c 79 20 6e 6f 74  is currently not
19b10 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d   in autocommit m
19b20 6f 64 65 2c 20 6f 72 20 69 66 20 74 68 65 72 65  ode, or if there
19b30 20 61 72 65 20 6f 74 68 65 72 0a 2a 2a 20 61 63   are other.** ac
19b40 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73 2e  tive statements.
19b50 20 41 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   A statement tra
19b60 6e 73 61 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20  nsaction allows 
19b70 74 68 65 20 63 68 61 6e 67 65 73 20 6d 61 64 65  the changes made
19b80 20 62 79 20 74 68 69 73 0a 2a 2a 20 56 44 42 45   by this.** VDBE
19b90 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
19ba0 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f  ck after an erro
19bb0 72 20 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67  r without having
19bc0 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68   to roll back th
19bd0 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74 72 61 6e  e.** entire tran
19be0 73 61 63 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65  saction. If no e
19bf0 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65  rror is encounte
19c00 72 65 64 2c 20 74 68 65 20 73 74 61 74 65 6d 65  red, the stateme
19c10 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a  nt transaction.*
19c20 2a 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63  * will automatic
19c30 61 6c 6c 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e  ally commit when
19c40 20 74 68 65 20 56 44 42 45 20 68 61 6c 74 73 2e   the VDBE halts.
19c50 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20  .**.** If P5!=0 
19c60 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  then this opcode
19c70 20 61 6c 73 6f 20 63 68 65 63 6b 73 20 74 68 65   also checks the
19c80 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 61   schema cookie a
19c90 67 61 69 6e 73 74 20 50 33 0a 2a 2a 20 61 6e 64  gainst P3.** and
19ca0 20 74 68 65 20 73 63 68 65 6d 61 20 67 65 6e 65   the schema gene
19cb0 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 61  ration counter a
19cc0 67 61 69 6e 73 74 20 50 34 2e 0a 2a 2a 20 54 68  gainst P4..** Th
19cd0 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73  e cookie changes
19ce0 20 69 74 73 20 76 61 6c 75 65 20 77 68 65 6e 65   its value whene
19cf0 76 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65  ver the database
19d00 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2e   schema changes.
19d10 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69  .** This operati
19d20 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 64 65  on is used to de
19d30 74 65 63 74 20 77 68 65 6e 20 74 68 61 74 20 74  tect when that t
19d40 68 65 20 63 6f 6f 6b 69 65 20 68 61 73 20 63 68  he cookie has ch
19d50 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74 68 61  anged.** and tha
19d60 74 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  t the current pr
19d70 6f 63 65 73 73 20 6e 65 65 64 73 20 74 6f 20 72  ocess needs to r
19d80 65 72 65 61 64 20 74 68 65 20 73 63 68 65 6d 61  eread the schema
19d90 2e 20 20 49 66 20 74 68 65 20 73 63 68 65 6d 61  .  If the schema
19da0 0a 2a 2a 20 63 6f 6f 6b 69 65 20 69 6e 20 50 33  .** cookie in P3
19db0 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20 74 68   differs from th
19dc0 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  e schema cookie 
19dd0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
19de0 68 65 61 64 65 72 20 6f 72 0a 2a 2a 20 69 66 20  header or.** if 
19df0 74 68 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72  the schema gener
19e00 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 69 6e  ation counter in
19e10 20 50 34 20 64 69 66 66 65 72 73 20 66 72 6f 6d   P4 differs from
19e20 20 74 68 65 20 63 75 72 72 65 6e 74 0a 2a 2a 20   the current.** 
19e30 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74  generation count
19e40 65 72 2c 20 74 68 65 6e 20 61 6e 20 53 51 4c 49  er, then an SQLI
19e50 54 45 5f 53 43 48 45 4d 41 20 65 72 72 6f 72 20  TE_SCHEMA error 
19e60 69 73 20 72 61 69 73 65 64 20 61 6e 64 20 65 78  is raised and ex
19e70 65 63 75 74 69 6f 6e 0a 2a 2a 20 68 61 6c 74 73  ecution.** halts
19e80 2e 20 20 54 68 65 20 73 71 6c 69 74 65 33 5f 73  .  The sqlite3_s
19e90 74 65 70 28 29 20 77 72 61 70 70 65 72 20 66 75  tep() wrapper fu
19ea0 6e 63 74 69 6f 6e 20 6d 69 67 68 74 20 74 68 65  nction might the
19eb0 6e 20 72 65 70 72 65 70 61 72 65 20 74 68 65 0a  n reprepare the.
19ec0 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64  ** statement and
19ed0 20 72 65 72 75 6e 20 69 74 20 66 72 6f 6d 20 74   rerun it from t
19ee0 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 2a 2f  he beginning..*/
19ef0 0a 63 61 73 65 20 4f 50 5f 54 72 61 6e 73 61 63  .case OP_Transac
19f00 74 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20  tion: {.  Btree 
19f10 2a 70 42 74 3b 0a 20 20 69 6e 74 20 69 4d 65 74  *pBt;.  int iMet
19f20 61 3b 0a 20 20 69 6e 74 20 69 47 65 6e 3b 0a 0a  a;.  int iGen;..
19f30 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
19f40 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73 65  Reader );.  asse
19f50 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
19f60 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 30  =0 || pOp->p2==0
19f70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
19f80 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
19f90 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
19fa0 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
19fb0 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
19fc0 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20  , pOp->p1) );.  
19fd0 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 28  if( pOp->p2 && (
19fe0 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
19ff0 54 45 5f 51 75 65 72 79 4f 6e 6c 79 29 21 3d 30  TE_QueryOnly)!=0
1a000 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
1a010 49 54 45 5f 52 45 41 44 4f 4e 4c 59 3b 0a 20 20  ITE_READONLY;.  
1a020 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1a030 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20  _to_error;.  }. 
1a040 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
1a050 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20  Op->p1].pBt;..  
1a060 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20 72  if( pBt ){.    r
1a070 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1a080 42 65 67 69 6e 54 72 61 6e 73 28 70 42 74 2c 20  BeginTrans(pBt, 
1a090 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20 74 65  pOp->p2);.    te
1a0a0 73 74 63 61 73 65 28 20 72 63 3d 3d 53 51 4c 49  stcase( rc==SQLI
1a0b0 54 45 5f 42 55 53 59 5f 53 4e 41 50 53 48 4f 54  TE_BUSY_SNAPSHOT
1a0c0 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65   );.    testcase
1a0d0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
1a0e0 59 5f 52 45 43 4f 56 45 52 59 20 29 3b 0a 20 20  Y_RECOVERY );.  
1a0f0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1a100 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 69 66 28  _OK ){.      if(
1a110 20 28 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49   (rc&0xff)==SQLI
1a120 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20  TE_BUSY ){.     
1a130 20 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29     p->pc = (int)
1a140 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20  (pOp - aOp);.   
1a150 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b       p->rc = rc;
1a160 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64  .        goto vd
1a170 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20  be_return;.     
1a180 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62   }.      goto ab
1a190 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1a1a0 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28  ;.    }..    if(
1a1b0 20 70 4f 70 2d 3e 70 32 20 26 26 20 70 2d 3e 75   pOp->p2 && p->u
1a1c0 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a  sesStmtJournal .
1a1d0 20 20 20 20 20 26 26 20 28 64 62 2d 3e 61 75 74       && (db->aut
1a1e0 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62  oCommit==0 || db
1a1f0 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31 29 20 0a  ->nVdbeRead>1) .
1a200 20 20 20 20 29 7b 0a 20 20 20 20 20 20 61 73 73      ){.      ass
1a210 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
1a220 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29 20  eIsInTrans(pBt) 
1a230 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e  );.      if( p->
1a240 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 7b  iStatement==0 ){
1a250 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1a260 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3e   db->nStatement>
1a270 3d 30 20 26 26 20 64 62 2d 3e 6e 53 61 76 65 70  =0 && db->nSavep
1a280 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20 20 20 20 20  oint>=0 );.     
1a290 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e     db->nStatemen
1a2a0 74 2b 2b 3b 20 0a 20 20 20 20 20 20 20 20 70 2d  t++; .        p-
1a2b0 3e 69 53 74 61 74 65 6d 65 6e 74 20 3d 20 64 62  >iStatement = db
1a2c0 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64  ->nSavepoint + d
1a2d0 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3b 0a 20  b->nStatement;. 
1a2e0 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 72 63       }..      rc
1a2f0 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53 61   = sqlite3VtabSa
1a300 76 65 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45  vepoint(db, SAVE
1a310 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 20 70 2d 3e  POINT_BEGIN, p->
1a320 69 53 74 61 74 65 6d 65 6e 74 2d 31 29 3b 0a 20  iStatement-1);. 
1a330 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
1a340 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
1a350 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1a360 72 65 65 42 65 67 69 6e 53 74 6d 74 28 70 42 74  reeBeginStmt(pBt
1a370 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 29  , p->iStatement)
1a380 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
1a390 20 2f 2a 20 53 74 6f 72 65 20 74 68 65 20 63 75   /* Store the cu
1a3a0 72 72 65 6e 74 20 76 61 6c 75 65 20 6f 66 20 74  rrent value of t
1a3b0 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
1a3c0 6c 65 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e  les deferred con
1a3d0 73 74 72 61 69 6e 74 0a 20 20 20 20 20 20 2a 2a  straint.      **
1a3e0 20 63 6f 75 6e 74 65 72 2e 20 49 66 20 74 68 65   counter. If the
1a3f0 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
1a400 61 63 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20  action needs to 
1a410 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a  be rolled back,.
1a420 20 20 20 20 20 20 2a 2a 20 74 68 65 20 76 61 6c        ** the val
1a430 75 65 20 6f 66 20 74 68 69 73 20 63 6f 75 6e 74  ue of this count
1a440 65 72 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72  er needs to be r
1a450 65 73 74 6f 72 65 64 20 74 6f 6f 2e 20 20 2a 2f  estored too.  */
1a460 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44  .      p->nStmtD
1a470 65 66 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65  efCons = db->nDe
1a480 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20  ferredCons;.    
1a490 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 49 6d 6d    p->nStmtDefImm
1a4a0 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65  Cons = db->nDefe
1a4b0 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20  rredImmCons;.   
1a4c0 20 7d 0a 0a 20 20 20 20 2f 2a 20 47 61 74 68 65   }..    /* Gathe
1a4d0 72 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72  r the schema ver
1a4e0 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20  sion number for 
1a4f0 63 68 65 63 6b 69 6e 67 3a 0a 20 20 20 20 2a 2a  checking:.    **
1a500 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d   IMPLEMENTATION-
1a510 4f 46 3a 20 52 2d 30 33 31 38 39 2d 35 31 31 33  OF: R-03189-5113
1a520 35 20 41 73 20 65 61 63 68 20 53 51 4c 20 73 74  5 As each SQL st
1a530 61 74 65 6d 65 6e 74 20 72 75 6e 73 2c 20 74 68  atement runs, th
1a540 65 20 73 63 68 65 6d 61 0a 20 20 20 20 2a 2a 20  e schema.    ** 
1a550 76 65 72 73 69 6f 6e 20 69 73 20 63 68 65 63 6b  version is check
1a560 65 64 20 74 6f 20 65 6e 73 75 72 65 20 74 68 61  ed to ensure tha
1a570 74 20 74 68 65 20 73 63 68 65 6d 61 20 68 61 73  t the schema has
1a580 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 73 69 6e   not changed sin
1a590 63 65 20 74 68 65 0a 20 20 20 20 2a 2a 20 53 51  ce the.    ** SQ
1a5a0 4c 20 73 74 61 74 65 6d 65 6e 74 20 77 61 73 20  L statement was 
1a5b0 70 72 65 70 61 72 65 64 2e 0a 20 20 20 20 2a 2f  prepared..    */
1a5c0 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
1a5d0 65 47 65 74 4d 65 74 61 28 70 42 74 2c 20 42 54  eGetMeta(pBt, BT
1a5e0 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49  REE_SCHEMA_VERSI
1a5f0 4f 4e 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74  ON, (u32 *)&iMet
1a600 61 29 3b 0a 20 20 20 20 69 47 65 6e 20 3d 20 64  a);.    iGen = d
1a610 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
1a620 70 53 63 68 65 6d 61 2d 3e 69 47 65 6e 65 72 61  pSchema->iGenera
1a630 74 69 6f 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  tion;.  }else{. 
1a640 20 20 20 69 47 65 6e 20 3d 20 69 4d 65 74 61 20     iGen = iMeta 
1a650 3d 20 30 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  = 0;.  }.  asser
1a660 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c  t( pOp->p5==0 ||
1a670 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1a680 5f 49 4e 54 33 32 20 29 3b 0a 20 20 69 66 28 20  _INT32 );.  if( 
1a690 70 4f 70 2d 3e 70 35 20 26 26 20 28 69 4d 65 74  pOp->p5 && (iMet
1a6a0 61 21 3d 70 4f 70 2d 3e 70 33 20 7c 7c 20 69 47  a!=pOp->p3 || iG
1a6b0 65 6e 21 3d 70 4f 70 2d 3e 70 34 2e 69 29 20 29  en!=pOp->p4.i) )
1a6c0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46  {.    sqlite3DbF
1a6d0 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d  ree(db, p->zErrM
1a6e0 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72  sg);.    p->zErr
1a6f0 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 44 62 53  Msg = sqlite3DbS
1a700 74 72 44 75 70 28 64 62 2c 20 22 64 61 74 61 62  trDup(db, "datab
1a710 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 63  ase schema has c
1a720 68 61 6e 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a  hanged");.    /*
1a730 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 2d 63   If the schema-c
1a740 6f 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65 20 64  ookie from the d
1a750 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d 61 74  atabase file mat
1a760 63 68 65 73 20 74 68 65 20 63 6f 6f 6b 69 65 20  ches the cookie 
1a770 0a 20 20 20 20 2a 2a 20 73 74 6f 72 65 64 20 77  .    ** stored w
1a780 69 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72  ith the in-memor
1a790 79 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  y representation
1a7a0 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 2c 20   of the schema, 
1a7b0 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65  do.    ** not re
1a7c0 6c 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61 20  load the schema 
1a7d0 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
1a7e0 65 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20  e file..    **. 
1a7f0 20 20 20 2a 2a 20 49 66 20 76 69 72 74 75 61 6c     ** If virtual
1a800 2d 74 61 62 6c 65 73 20 61 72 65 20 69 6e 20 75  -tables are in u
1a810 73 65 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20  se, this is not 
1a820 6a 75 73 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61  just an optimiza
1a830 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74  tion..    ** Oft
1a840 65 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73 74 6f  en, v-tables sto
1a850 72 65 20 74 68 65 69 72 20 64 61 74 61 20 69 6e  re their data in
1a860 20 6f 74 68 65 72 20 53 51 4c 69 74 65 20 74 61   other SQLite ta
1a870 62 6c 65 73 2c 20 77 68 69 63 68 0a 20 20 20 20  bles, which.    
1a880 2a 2a 20 61 72 65 20 71 75 65 72 69 65 64 20 66  ** are queried f
1a890 72 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65 78 74  rom within xNext
1a8a0 28 29 20 61 6e 64 20 6f 74 68 65 72 20 76 2d 74  () and other v-t
1a8b0 61 62 6c 65 20 6d 65 74 68 6f 64 73 20 75 73 69  able methods usi
1a8c0 6e 67 0a 20 20 20 20 2a 2a 20 70 72 65 70 61 72  ng.    ** prepar
1a8d0 65 64 20 71 75 65 72 69 65 73 2e 20 49 66 20 73  ed queries. If s
1a8e0 75 63 68 20 61 20 71 75 65 72 79 20 69 73 20 6f  uch a query is o
1a8f0 75 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65 20 64  ut-of-date, we d
1a900 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20  o not want to.  
1a910 20 20 2a 2a 20 64 69 73 63 61 72 64 20 74 68 65    ** discard the
1a920 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
1a930 2c 20 61 73 20 74 68 65 20 75 73 65 72 20 63 6f  , as the user co
1a940 64 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20  de implementing 
1a950 74 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62  the.    ** v-tab
1a960 6c 65 20 77 6f 75 6c 64 20 68 61 76 65 20 74 6f  le would have to
1a970 20 62 65 20 72 65 61 64 79 20 66 6f 72 20 74 68   be ready for th
1a980 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  e sqlite3_vtab s
1a990 74 72 75 63 74 75 72 65 20 69 74 73 65 6c 66 0a  tructure itself.
1a9a0 20 20 20 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76      ** to be inv
1a9b0 61 6c 69 64 61 74 65 64 20 77 68 65 6e 65 76 65  alidated wheneve
1a9c0 72 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  r sqlite3_step()
1a9d0 20 69 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20   is called from 
1a9e0 77 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61  within .    ** a
1a9f0 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e   v-table method.
1aa00 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
1aa10 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
1aa20 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
1aa30 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29  _cookie!=iMeta )
1aa40 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52  {.      sqlite3R
1aa50 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 64 62  esetOneSchema(db
1aa60 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20  , pOp->p1);.    
1aa70 7d 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64  }.    p->expired
1aa80 20 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 53   = 1;.    rc = S
1aa90 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20  QLITE_SCHEMA;.  
1aaa0 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  }.  if( rc ) got
1aab0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1aac0 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
1aad0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61  ../* Opcode: Rea
1aae0 64 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33  dCookie P1 P2 P3
1aaf0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20   * *.**.** Read 
1ab00 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 33  cookie number P3
1ab10 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65 20 50   from database P
1ab20 31 20 61 6e 64 20 77 72 69 74 65 20 69 74 20 69  1 and write it i
1ab30 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
1ab40 0a 2a 2a 20 50 33 3d 3d 31 20 69 73 20 74 68 65  .** P3==1 is the
1ab50 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e   schema version.
1ab60 20 20 50 33 3d 3d 32 20 69 73 20 74 68 65 20 64    P3==2 is the d
1ab70 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a  atabase format..
1ab80 2a 2a 20 50 33 3d 3d 33 20 69 73 20 74 68 65 20  ** P3==3 is the 
1ab90 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65  recommended page
1aba0 72 20 63 61 63 68 65 20 73 69 7a 65 2c 20 61 6e  r cache size, an
1abb0 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d  d so forth.  P1=
1abc0 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69  =0 is.** the mai
1abd0 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
1abe0 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65  and P1==1 is the
1abf0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75   database file u
1ac00 73 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20  sed to store.** 
1ac10 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
1ac20 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75  ..**.** There mu
1ac30 73 74 20 62 65 20 61 20 72 65 61 64 2d 6c 6f 63  st be a read-loc
1ac40 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  k on the databas
1ac50 65 20 28 65 69 74 68 65 72 20 61 20 74 72 61 6e  e (either a tran
1ac60 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20  saction.** must 
1ac70 62 65 20 73 74 61 72 74 65 64 20 6f 72 20 74 68  be started or th
1ac80 65 72 65 20 6d 75 73 74 20 62 65 20 61 6e 20 6f  ere must be an o
1ac90 70 65 6e 20 63 75 72 73 6f 72 29 20 62 65 66 6f  pen cursor) befo
1aca0 72 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e 67 20  re.** executing 
1acb0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
1acc0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61  ..*/.case OP_Rea
1acd0 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20  dCookie: {      
1ace0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
1acf0 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b   */.  int iMeta;
1ad00 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e  .  int iDb;.  in
1ad10 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20 61 73  t iCookie;..  as
1ad20 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
1ad30 65 72 20 29 3b 0a 20 20 69 44 62 20 3d 20 70 4f  er );.  iDb = pO
1ad40 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65  p->p1;.  iCookie
1ad50 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73   = pOp->p3;.  as
1ad60 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51  sert( pOp->p3<SQ
1ad70 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54  LITE_N_BTREE_MET
1ad80 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  A );.  assert( i
1ad90 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d  Db>=0 && iDb<db-
1ada0 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
1adb0 28 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  ( db->aDb[iDb].p
1adc0 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  Bt!=0 );.  asser
1add0 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
1ade0 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29  >btreeMask, iDb)
1adf0 20 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42 74   );..  sqlite3Bt
1ae00 72 65 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61  reeGetMeta(db->a
1ae10 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f  Db[iDb].pBt, iCo
1ae20 6f 6b 69 65 2c 20 28 75 33 32 20 2a 29 26 69 4d  okie, (u32 *)&iM
1ae30 65 74 61 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  eta);.  pOut = o
1ae40 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
1ae50 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75   pOp);.  pOut->u
1ae60 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20 20 62 72  .i = iMeta;.  br
1ae70 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1ae80 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20 50 31 20  e: SetCookie P1 
1ae90 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
1aea0 57 72 69 74 65 20 74 68 65 20 69 6e 74 65 67 65  Write the intege
1aeb0 72 20 76 61 6c 75 65 20 50 33 20 69 6e 74 6f 20  r value P3 into 
1aec0 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 32  cookie number P2
1aed0 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 2e   of database P1.
1aee0 0a 2a 2a 20 50 32 3d 3d 31 20 69 73 20 74 68 65  .** P2==1 is the
1aef0 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e   schema version.
1af00 20 20 50 32 3d 3d 32 20 69 73 20 74 68 65 20 64    P2==2 is the d
1af10 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a  atabase format..
1af20 2a 2a 20 50 32 3d 3d 33 20 69 73 20 74 68 65 20  ** P2==3 is the 
1af30 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65  recommended page
1af40 72 20 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65  r cache .** size
1af50 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20  , and so forth. 
1af60 20 50 31 3d 3d 30 20 69 73 20 74 68 65 20 6d 61   P1==0 is the ma
1af70 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
1af80 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68   and P1==1 is th
1af90 65 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66  e .** database f
1afa0 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72  ile used to stor
1afb0 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  e temporary tabl
1afc0 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e  es..**.** A tran
1afd0 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20  saction must be 
1afe0 73 74 61 72 74 65 64 20 62 65 66 6f 72 65 20 65  started before e
1aff0 78 65 63 75 74 69 6e 67 20 74 68 69 73 20 6f 70  xecuting this op
1b000 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  code..*/.case OP
1b010 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 0a 20 20  _SetCookie: {.  
1b020 44 62 20 2a 70 44 62 3b 0a 20 20 61 73 73 65 72  Db *pDb;.  asser
1b030 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54  t( pOp->p2<SQLIT
1b040 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29  E_N_BTREE_META )
1b050 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1b060 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1b070 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
1b080 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
1b090 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
1b0a0 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73  pOp->p1) );.  as
1b0b0 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
1b0c0 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20  y==0 );.  pDb = 
1b0d0 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31  &db->aDb[pOp->p1
1b0e0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 62  ];.  assert( pDb
1b0f0 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73  ->pBt!=0 );.  as
1b100 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
1b110 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
1b120 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a   pOp->p1, 0) );.
1b130 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20 61 62    /* See note ab
1b140 6f 75 74 20 69 6e 64 65 78 20 73 68 69 66 74 69  out index shifti
1b150 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f  ng on OP_ReadCoo
1b160 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  kie */.  rc = sq
1b170 6c 69 74 65 33 42 74 72 65 65 55 70 64 61 74 65  lite3BtreeUpdate
1b180 4d 65 74 61 28 70 44 62 2d 3e 70 42 74 2c 20 70  Meta(pDb->pBt, p
1b190 4f 70 2d 3e 70 32 2c 20 70 4f 70 2d 3e 70 33 29  Op->p2, pOp->p3)
1b1a0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d  ;.  if( pOp->p2=
1b1b0 3d 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45  =BTREE_SCHEMA_VE
1b1c0 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a 20  RSION ){.    /* 
1b1d0 57 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20  When the schema 
1b1e0 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c 20  cookie changes, 
1b1f0 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20 63  record the new c
1b200 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79  ookie internally
1b210 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63   */.    pDb->pSc
1b220 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f  hema->schema_coo
1b230 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  kie = pOp->p3;. 
1b240 20 20 20 64 62 2d 3e 6d 44 62 46 6c 61 67 73 20     db->mDbFlags 
1b250 7c 3d 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61  |= DBFLAG_Schema
1b260 43 68 61 6e 67 65 3b 0a 20 20 7d 65 6c 73 65 20  Change;.  }else 
1b270 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52  if( pOp->p2==BTR
1b280 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 29  EE_FILE_FORMAT )
1b290 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72 64 20  {.    /* Record 
1b2a0 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 66  changes in the f
1b2b0 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20  ile format */.  
1b2c0 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e    pDb->pSchema->
1b2d0 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 4f  file_format = pO
1b2e0 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 69 66 28  p->p3;.  }.  if(
1b2f0 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20   pOp->p1==1 ){. 
1b300 20 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65     /* Invalidate
1b310 20 61 6c 6c 20 70 72 65 70 61 72 65 64 20 73 74   all prepared st
1b320 61 74 65 6d 65 6e 74 73 20 77 68 65 6e 65 76 65  atements wheneve
1b330 72 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62  r the TEMP datab
1b340 61 73 65 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d  ase.    ** schem
1b350 61 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20 54  a is changed.  T
1b360 69 63 6b 65 74 20 23 31 36 34 34 20 2a 2f 0a 20  icket #1644 */. 
1b370 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65     sqlite3Expire
1b380 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
1b390 74 73 28 64 62 29 3b 0a 20 20 20 20 70 2d 3e 65  ts(db);.    p->e
1b3a0 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a  xpired = 0;.  }.
1b3b0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
1b3c0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1b3d0 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  or;.  break;.}..
1b3e0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52  /* Opcode: OpenR
1b3f0 65 61 64 20 50 31 20 50 32 20 50 33 20 50 34 20  ead P1 P2 P3 P4 
1b400 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
1b410 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a  root=P2 iDb=P3.*
1b420 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64  *.** Open a read
1b430 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20 66 6f 72  -only cursor for
1b440 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
1b450 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f 74 20 70  ble whose root p
1b460 61 67 65 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20  age is.** P2 in 
1b470 61 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  a database file.
1b480 20 20 54 68 65 20 64 61 74 61 62 61 73 65 20 66    The database f
1b490 69 6c 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ile is determine
1b4a0 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d  d by P3. .** P3=
1b4b0 3d 30 20 6d 65 61 6e 73 20 74 68 65 20 6d 61 69  =0 means the mai
1b4c0 6e 20 64 61 74 61 62 61 73 65 2c 20 50 33 3d 3d  n database, P3==
1b4d0 31 20 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61  1 means the data
1b4e0 62 61 73 65 20 75 73 65 64 20 66 6f 72 20 0a 2a  base used for .*
1b4f0 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  * temporary tabl
1b500 65 73 2c 20 61 6e 64 20 50 33 3e 31 20 6d 65 61  es, and P3>1 mea
1b510 6e 73 20 75 73 65 64 20 74 68 65 20 63 6f 72 72  ns used the corr
1b520 65 73 70 6f 6e 64 69 6e 67 20 61 74 74 61 63 68  esponding attach
1b530 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20  ed.** database. 
1b540 20 47 69 76 65 20 74 68 65 20 6e 65 77 20 63 75   Give the new cu
1b550 72 73 6f 72 20 61 6e 20 69 64 65 6e 74 69 66 69  rsor an identifi
1b560 65 72 20 6f 66 20 50 31 2e 20 20 54 68 65 20 50  er of P1.  The P
1b570 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e 65 65 64  1.** values need
1b580 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69 67 75 6f   not be contiguo
1b590 75 73 20 62 75 74 20 61 6c 6c 20 50 31 20 76 61  us but all P1 va
1b5a0 6c 75 65 73 20 73 68 6f 75 6c 64 20 62 65 20 73  lues should be s
1b5b0 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a  mall integers..*
1b5c0 2a 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72  * It is an error
1b5d0 20 66 6f 72 20 50 31 20 74 6f 20 62 65 20 6e 65   for P1 to be ne
1b5e0 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  gative..**.** If
1b5f0 20 50 35 21 3d 30 20 74 68 65 6e 20 75 73 65 20   P5!=0 then use 
1b600 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
1b610 65 67 69 73 74 65 72 20 50 32 20 61 73 20 74 68  egister P2 as th
1b620 65 20 72 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74  e root page, not
1b630 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66  .** the value of
1b640 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a   P2 itself..**.*
1b650 2a 20 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20  * There will be 
1b660 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 74  a read lock on t
1b670 68 65 20 64 61 74 61 62 61 73 65 20 77 68 65 6e  he database when
1b680 65 76 65 72 20 74 68 65 72 65 20 69 73 20 61 6e  ever there is an
1b690 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73 6f 72 2e  .** open cursor.
1b6a0 20 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73    If the databas
1b6b0 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65 64 20 70  e was unlocked p
1b6c0 72 69 6f 72 20 74 6f 20 74 68 69 73 20 69 6e 73  rior to this ins
1b6d0 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e  truction.** then
1b6e0 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 20   a read lock is 
1b6f0 61 63 71 75 69 72 65 64 20 61 73 20 70 61 72 74  acquired as part
1b700 20 6f 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   of this instruc
1b710 74 69 6f 6e 2e 20 20 41 20 72 65 61 64 0a 2a 2a  tion.  A read.**
1b720 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20 6f 74 68   lock allows oth
1b730 65 72 20 70 72 6f 63 65 73 73 65 73 20 74 6f 20  er processes to 
1b740 72 65 61 64 20 74 68 65 20 64 61 74 61 62 61 73  read the databas
1b750 65 20 62 75 74 20 70 72 6f 68 69 62 69 74 73 0a  e but prohibits.
1b760 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20 70 72 6f  ** any other pro
1b770 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64 69 66 79  cess from modify
1b780 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73 65  ing the database
1b790 2e 20 20 54 68 65 20 72 65 61 64 20 6c 6f 63 6b  .  The read lock
1b7a0 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73 65 64 20   is.** released 
1b7b0 77 68 65 6e 20 61 6c 6c 20 63 75 72 73 6f 72 73  when all cursors
1b7c0 20 61 72 65 20 63 6c 6f 73 65 64 2e 20 20 49 66   are closed.  If
1b7d0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
1b7e0 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a 20 74 6f  n attempts.** to
1b7f0 20 67 65 74 20 61 20 72 65 61 64 20 6c 6f 63 6b   get a read lock
1b800 20 62 75 74 20 66 61 69 6c 73 2c 20 74 68 65 20   but fails, the 
1b810 73 63 72 69 70 74 20 74 65 72 6d 69 6e 61 74 65  script terminate
1b820 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20 53 51 4c  s with an.** SQL
1b830 49 54 45 5f 42 55 53 59 20 65 72 72 6f 72 20 63  ITE_BUSY error c
1b840 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ode..**.** The P
1b850 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65  4 value may be e
1b860 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72  ither an integer
1b870 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61   (P4_INT32) or a
1b880 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61   pointer to.** a
1b890 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75   KeyInfo structu
1b8a0 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e  re (P4_KEYINFO).
1b8b0 20 49 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e   If it is a poin
1b8c0 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f  ter to a KeyInfo
1b8d0 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20   .** structure, 
1b8e0 74 68 65 6e 20 73 61 69 64 20 73 74 72 75 63 74  then said struct
1b8f0 75 72 65 20 64 65 66 69 6e 65 73 20 74 68 65 20  ure defines the 
1b900 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c  content and coll
1b910 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e  ating .** sequen
1b920 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  ce of the index 
1b930 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74  being opened. Ot
1b940 68 65 72 77 69 73 65 2c 20 69 66 20 50 34 20 69  herwise, if P4 i
1b950 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a  s an integer .**
1b960 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65   value, it is se
1b970 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  t to the number 
1b980 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
1b990 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53  e table..**.** S
1b9a0 65 65 20 61 6c 73 6f 3a 20 4f 70 65 6e 57 72 69  ee also: OpenWri
1b9b0 74 65 2c 20 52 65 6f 70 65 6e 49 64 78 0a 2a 2f  te, ReopenIdx.*/
1b9c0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6f 70  ./* Opcode: Reop
1b9d0 65 6e 49 64 78 20 50 31 20 50 32 20 50 33 20 50  enIdx P1 P2 P3 P
1b9e0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
1b9f0 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33  : root=P2 iDb=P3
1ba00 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65  .**.** The Reope
1ba10 6e 49 64 78 20 6f 70 63 6f 64 65 20 77 6f 72 6b  nIdx opcode work
1ba20 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 52  s exactly like R
1ba30 65 61 64 4f 70 65 6e 20 65 78 63 65 70 74 20 74  eadOpen except t
1ba40 68 61 74 20 69 74 20 66 69 72 73 74 0a 2a 2a 20  hat it first.** 
1ba50 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66  checks to see if
1ba60 20 74 68 65 20 63 75 72 73 6f 72 20 6f 6e 20 50   the cursor on P
1ba70 31 20 69 73 20 61 6c 72 65 61 64 79 20 6f 70 65  1 is already ope
1ba80 6e 20 77 69 74 68 20 61 20 72 6f 6f 74 20 70 61  n with a root pa
1ba90 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  ge.** number of 
1baa0 50 32 20 61 6e 64 20 69 66 20 69 74 20 69 73 20  P2 and if it is 
1bab0 74 68 69 73 20 6f 70 63 6f 64 65 20 62 65 63 6f  this opcode beco
1bac0 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 49 6e  mes a no-op.  In
1bad0 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 0a 2a 2a   other words,.**
1bae0 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 69   if the cursor i
1baf0 73 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 2c 20  s already open, 
1bb00 64 6f 20 6e 6f 74 20 72 65 6f 70 65 6e 20 69 74  do not reopen it
1bb10 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70  ..**.** The Reop
1bb20 65 6e 49 64 78 20 6f 70 63 6f 64 65 20 6d 61 79  enIdx opcode may
1bb30 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 77 69   only be used wi
1bb40 74 68 20 50 35 3d 3d 30 20 61 6e 64 20 77 69 74  th P5==0 and wit
1bb50 68 20 50 34 20 62 65 69 6e 67 0a 2a 2a 20 61 20  h P4 being.** a 
1bb60 50 34 5f 4b 45 59 49 4e 46 4f 20 6f 62 6a 65 63  P4_KEYINFO objec
1bb70 74 2e 20 20 46 75 72 74 68 65 72 6d 6f 72 65 2c  t.  Furthermore,
1bb80 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 6d 75   the P3 value mu
1bb90 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 20 61  st be the same a
1bba0 73 0a 2a 2a 20 65 76 65 72 79 20 6f 74 68 65 72  s.** every other
1bbb0 20 52 65 6f 70 65 6e 49 64 78 20 6f 72 20 4f 70   ReopenIdx or Op
1bbc0 65 6e 52 65 61 64 20 66 6f 72 20 74 68 65 20 73  enRead for the s
1bbd0 61 6d 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  ame cursor numbe
1bbe0 72 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 74 68 65  r..**.** See the
1bbf0 20 4f 70 65 6e 52 65 61 64 20 6f 70 63 6f 64 65   OpenRead opcode
1bc00 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66   documentation f
1bc10 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
1bc20 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  formation..*/./*
1bc30 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69   Opcode: OpenWri
1bc40 74 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  te P1 P2 P3 P4 P
1bc50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  5.** Synopsis: r
1bc60 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a  oot=P2 iDb=P3.**
1bc70 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2f  .** Open a read/
1bc80 77 72 69 74 65 20 63 75 72 73 6f 72 20 6e 61 6d  write cursor nam
1bc90 65 64 20 50 31 20 6f 6e 20 74 68 65 20 74 61 62  ed P1 on the tab
1bca0 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73  le or index whos
1bcb0 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 69  e root.** page i
1bcc0 73 20 50 32 2e 20 20 4f 72 20 69 66 20 50 35 21  s P2.  Or if P5!
1bcd0 3d 30 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65  =0 use the conte
1bce0 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
1bcf0 32 20 74 6f 20 66 69 6e 64 20 74 68 65 0a 2a 2a  2 to find the.**
1bd00 20 72 6f 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a   root page..**.*
1bd10 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d  * The P4 value m
1bd20 61 79 20 62 65 20 65 69 74 68 65 72 20 61 6e 20  ay be either an 
1bd30 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33  integer (P4_INT3
1bd40 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20  2) or a pointer 
1bd50 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20  to.** a KeyInfo 
1bd60 73 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45  structure (P4_KE
1bd70 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73  YINFO). If it is
1bd80 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
1bd90 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75  KeyInfo .** stru
1bda0 63 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64  cture, then said
1bdb0 20 73 74 72 75 63 74 75 72 65 20 64 65 66 69 6e   structure defin
1bdc0 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61  es the content a
1bdd0 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a  nd collating .**
1bde0 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65   sequence of the
1bdf0 20 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65   index being ope
1be00 6e 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ned. Otherwise, 
1be10 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65  if P4 is an inte
1be20 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69  ger .** value, i
1be30 74 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  t is set to the 
1be40 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
1be50 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2c 20  s in the table, 
1be60 6f 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 61 72  or to the.** lar
1be70 67 65 73 74 20 69 6e 64 65 78 20 6f 66 20 61 6e  gest index of an
1be80 79 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  y column of the 
1be90 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 61 63  table that is ac
1bea0 74 75 61 6c 6c 79 20 75 73 65 64 2e 0a 2a 2a 0a  tually used..**.
1beb0 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
1bec0 69 6f 6e 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  ion works just l
1bed0 69 6b 65 20 4f 70 65 6e 52 65 61 64 20 65 78 63  ike OpenRead exc
1bee0 65 70 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e  ept that it open
1bef0 73 20 74 68 65 20 63 75 72 73 6f 72 0a 2a 2a 20  s the cursor.** 
1bf00 69 6e 20 72 65 61 64 2f 77 72 69 74 65 20 6d 6f  in read/write mo
1bf10 64 65 2e 20 20 46 6f 72 20 61 20 67 69 76 65 6e  de.  For a given
1bf20 20 74 61 62 6c 65 2c 20 74 68 65 72 65 20 63 61   table, there ca
1bf30 6e 20 62 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  n be one or more
1bf40 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75   read-only.** cu
1bf50 72 73 6f 72 73 20 6f 72 20 61 20 73 69 6e 67 6c  rsors or a singl
1bf60 65 20 72 65 61 64 2f 77 72 69 74 65 20 63 75 72  e read/write cur
1bf70 73 6f 72 20 62 75 74 20 6e 6f 74 20 62 6f 74 68  sor but not both
1bf80 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1bf90 20 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61   OpenRead..*/.ca
1bfa0 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78 3a  se OP_ReopenIdx:
1bfb0 20 7b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b   {.  int nField;
1bfc0 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  .  KeyInfo *pKey
1bfd0 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a  Info;.  int p2;.
1bfe0 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74    int iDb;.  int
1bff0 20 77 72 46 6c 61 67 3b 0a 20 20 42 74 72 65 65   wrFlag;.  Btree
1c000 20 2a 70 58 3b 0a 20 20 56 64 62 65 43 75 72 73   *pX;.  VdbeCurs
1c010 6f 72 20 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a  or *pCur;.  Db *
1c020 70 44 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pDb;..  assert( 
1c030 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f  pOp->p5==0 || pO
1c040 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45  p->p5==OPFLAG_SE
1c050 45 4b 45 51 20 29 3b 0a 20 20 61 73 73 65 72 74  EKEQ );.  assert
1c060 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
1c070 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 70  4_KEYINFO );.  p
1c080 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
1c090 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70  Op->p1];.  if( p
1c0a0 43 75 72 20 26 26 20 70 43 75 72 2d 3e 70 67 6e  Cur && pCur->pgn
1c0b0 6f 52 6f 6f 74 3d 3d 28 75 33 32 29 70 4f 70 2d  oRoot==(u32)pOp-
1c0c0 3e 70 32 20 29 7b 0a 20 20 20 20 61 73 73 65 72  >p2 ){.    asser
1c0d0 74 28 20 70 43 75 72 2d 3e 69 44 62 3d 3d 70 4f  t( pCur->iDb==pO
1c0e0 70 2d 3e 70 33 20 29 3b 20 20 20 20 20 20 2f 2a  p->p3 );      /*
1c0f0 20 47 75 61 72 61 6e 74 65 65 64 20 62 79 20 74   Guaranteed by t
1c100 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f  he code generato
1c110 72 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6f 70  r */.    goto op
1c120 65 6e 5f 63 75 72 73 6f 72 5f 73 65 74 5f 68 69  en_cursor_set_hi
1c130 6e 74 73 3b 0a 20 20 7d 0a 20 20 2f 2a 20 49 66  nts;.  }.  /* If
1c140 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 6e   the cursor is n
1c150 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  ot currently ope
1c160 6e 20 6f 72 20 69 73 20 6f 70 65 6e 20 6f 6e 20  n or is open on 
1c170 61 20 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a  a different.  **
1c180 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 66 61 6c   index, then fal
1c190 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
1c1a0 50 5f 4f 70 65 6e 52 65 61 64 20 74 6f 20 66 6f  P_OpenRead to fo
1c1b0 72 63 65 20 61 20 72 65 6f 70 65 6e 20 2a 2f 0a  rce a reopen */.
1c1c0 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64  case OP_OpenRead
1c1d0 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 57 72  :.case OP_OpenWr
1c1e0 69 74 65 3a 0a 0a 20 20 61 73 73 65 72 74 28 20  ite:..  assert( 
1c1f0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
1c200 4f 70 65 6e 57 72 69 74 65 20 7c 7c 20 70 4f 70  OpenWrite || pOp
1c210 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  ->p5==0 || pOp->
1c220 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45  p5==OPFLAG_SEEKE
1c230 51 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Q );.  assert( p
1c240 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20  ->bIsReader );. 
1c250 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
1c260 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 52 65 61  code==OP_OpenRea
1c270 64 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  d || pOp->opcode
1c280 3d 3d 4f 50 5f 52 65 6f 70 65 6e 49 64 78 0a 20  ==OP_ReopenIdx. 
1c290 20 20 20 20 20 20 20 20 20 7c 7c 20 70 2d 3e 72           || p->r
1c2a0 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20  eadOnly==0 );.. 
1c2b0 20 69 66 28 20 70 2d 3e 65 78 70 69 72 65 64 20   if( p->expired 
1c2c0 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
1c2d0 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43  TE_ABORT_ROLLBAC
1c2e0 4b 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  K;.    goto abor
1c2f0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1c300 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20    }..  nField = 
1c310 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20  0;.  pKeyInfo = 
1c320 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70  0;.  p2 = pOp->p
1c330 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  2;.  iDb = pOp->
1c340 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44  p3;.  assert( iD
1c350 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e  b>=0 && iDb<db->
1c360 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
1c370 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
1c380 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29  treeMask, iDb) )
1c390 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61  ;.  pDb = &db->a
1c3a0 44 62 5b 69 44 62 5d 3b 0a 20 20 70 58 20 3d 20  Db[iDb];.  pX = 
1c3b0 70 44 62 2d 3e 70 42 74 3b 0a 20 20 61 73 73 65  pDb->pBt;.  asse
1c3c0 72 74 28 20 70 58 21 3d 30 20 29 3b 0a 20 20 69  rt( pX!=0 );.  i
1c3d0 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
1c3e0 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 29 7b 0a  OP_OpenWrite ){.
1c3f0 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c      assert( OPFL
1c400 41 47 5f 46 4f 52 44 45 4c 45 54 45 3d 3d 42 54  AG_FORDELETE==BT
1c410 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 20 29 3b  REE_FORDELETE );
1c420 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 42 54  .    wrFlag = BT
1c430 52 45 45 5f 57 52 43 53 52 20 7c 20 28 70 4f 70  REE_WRCSR | (pOp
1c440 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 46 4f  ->p5 & OPFLAG_FO
1c450 52 44 45 4c 45 54 45 29 3b 0a 20 20 20 20 61 73  RDELETE);.    as
1c460 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
1c470 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
1c480 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20   iDb, 0) );.    
1c490 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65 6d 61  if( pDb->pSchema
1c4a0 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20  ->file_format < 
1c4b0 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46  p->minWriteFileF
1c4c0 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20 20 70  ormat ){.      p
1c4d0 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
1c4e0 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53 63 68  rmat = pDb->pSch
1c4f0 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74  ema->file_format
1c500 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
1c510 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 30 3b  .    wrFlag = 0;
1c520 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
1c530 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 32 49 53  p5 & OPFLAG_P2IS
1c540 52 45 47 20 29 7b 0a 20 20 20 20 61 73 73 65 72  REG ){.    asser
1c550 74 28 20 70 32 3e 30 20 29 3b 0a 20 20 20 20 61  t( p2>0 );.    a
1c560 73 73 65 72 74 28 20 70 32 3c 3d 28 70 2d 3e 6e  ssert( p2<=(p->n
1c570 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
1c580 6f 72 29 20 29 3b 0a 20 20 20 20 70 49 6e 32 20  or) );.    pIn2 
1c590 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20  = &aMem[p2];.   
1c5a0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
1c5b0 6c 69 64 28 70 49 6e 32 29 20 29 3b 0a 20 20 20  lid(pIn2) );.   
1c5c0 20 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e   assert( (pIn2->
1c5d0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
1c5e0 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  !=0 );.    sqlit
1c5f0 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
1c600 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 20 20 70  ify(pIn2);.    p
1c610 32 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75  2 = (int)pIn2->u
1c620 2e 69 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20 70  .i;.    /* The p
1c630 32 20 76 61 6c 75 65 20 61 6c 77 61 79 73 20 63  2 value always c
1c640 6f 6d 65 73 20 66 72 6f 6d 20 61 20 70 72 69 6f  omes from a prio
1c650 72 20 4f 50 5f 43 72 65 61 74 65 42 74 72 65 65  r OP_CreateBtree
1c660 20 6f 70 63 6f 64 65 20 61 6e 64 0a 20 20 20 20   opcode and.    
1c670 2a 2a 20 74 68 61 74 20 6f 70 63 6f 64 65 20 77  ** that opcode w
1c680 69 6c 6c 20 61 6c 77 61 79 73 20 73 65 74 20 74  ill always set t
1c690 68 65 20 70 32 20 76 61 6c 75 65 20 74 6f 20 32  he p2 value to 2
1c6a0 20 6f 72 20 6d 6f 72 65 20 6f 72 20 65 6c 73 65   or more or else
1c6b0 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 20 49 66   fail..    ** If
1c6c0 20 74 68 65 72 65 20 77 65 72 65 20 61 20 66 61   there were a fa
1c6d0 69 6c 75 72 65 2c 20 74 68 65 20 70 72 65 70 61  ilure, the prepa
1c6e0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 77 6f  red statement wo
1c6f0 75 6c 64 20 68 61 76 65 20 68 61 6c 74 65 64 0a  uld have halted.
1c700 20 20 20 20 2a 2a 20 62 65 66 6f 72 65 20 72 65      ** before re
1c710 61 63 68 69 6e 67 20 74 68 69 73 20 69 6e 73 74  aching this inst
1c720 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20  ruction. */.    
1c730 61 73 73 65 72 74 28 20 70 32 3e 3d 32 20 29 3b  assert( p2>=2 );
1c740 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
1c750 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e  p4type==P4_KEYIN
1c760 46 4f 20 29 7b 0a 20 20 20 20 70 4b 65 79 49 6e  FO ){.    pKeyIn
1c770 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65  fo = pOp->p4.pKe
1c780 79 49 6e 66 6f 3b 0a 20 20 20 20 61 73 73 65 72  yInfo;.    asser
1c790 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63  t( pKeyInfo->enc
1c7a0 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 20  ==ENC(db) );.   
1c7b0 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66   assert( pKeyInf
1c7c0 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20  o->db==db );.   
1c7d0 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65 79 49 6e   nField = pKeyIn
1c7e0 66 6f 2d 3e 6e 41 6c 6c 46 69 65 6c 64 3b 0a 20  fo->nAllField;. 
1c7f0 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e   }else if( pOp->
1c800 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
1c810 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d   ){.    nField =
1c820 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a   pOp->p4.i;.  }.
1c830 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1c840 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  1>=0 );.  assert
1c850 28 20 6e 46 69 65 6c 64 3e 3d 30 20 29 3b 0a 20  ( nField>=0 );. 
1c860 20 74 65 73 74 63 61 73 65 28 20 6e 46 69 65 6c   testcase( nFiel
1c870 64 3d 3d 30 20 29 3b 20 20 2f 2a 20 54 61 62 6c  d==0 );  /* Tabl
1c880 65 20 77 69 74 68 20 49 4e 54 45 47 45 52 20 50  e with INTEGER P
1c890 52 49 4d 41 52 59 20 4b 45 59 20 61 6e 64 20 6e  RIMARY KEY and n
1c8a0 6f 74 68 69 6e 67 20 65 6c 73 65 20 2a 2f 0a 20  othing else */. 
1c8b0 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65   pCur = allocate
1c8c0 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
1c8d0 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c 20  1, nField, iDb, 
1c8e0 43 55 52 54 59 50 45 5f 42 54 52 45 45 29 3b 0a  CURTYPE_BTREE);.
1c8f0 20 20 69 66 28 20 70 43 75 72 3d 3d 30 20 29 20    if( pCur==0 ) 
1c900 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
1c910 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31  Cur->nullRow = 1
1c920 3b 0a 20 20 70 43 75 72 2d 3e 69 73 4f 72 64 65  ;.  pCur->isOrde
1c930 72 65 64 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d  red = 1;.  pCur-
1c940 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20 70 32 3b 0a  >pgnoRoot = p2;.
1c950 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
1c960 42 55 47 0a 20 20 70 43 75 72 2d 3e 77 72 46 6c  BUG.  pCur->wrFl
1c970 61 67 20 3d 20 77 72 46 6c 61 67 3b 0a 23 65 6e  ag = wrFlag;.#en
1c980 64 69 66 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  dif.  rc = sqlit
1c990 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 58  e3BtreeCursor(pX
1c9a0 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c 20 70 4b  , p2, wrFlag, pK
1c9b0 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e 75 63  eyInfo, pCur->uc
1c9c0 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 75  .pCursor);.  pCu
1c9d0 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b  r->pKeyInfo = pK
1c9e0 65 79 49 6e 66 6f 3b 0a 20 20 2f 2a 20 53 65 74  eyInfo;.  /* Set
1c9f0 20 74 68 65 20 56 64 62 65 43 75 72 73 6f 72 2e   the VdbeCursor.
1ca00 69 73 54 61 62 6c 65 20 76 61 72 69 61 62 6c 65  isTable variable
1ca10 2e 20 50 72 65 76 69 6f 75 73 20 76 65 72 73 69  . Previous versi
1ca20 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69  ons of.  ** SQLi
1ca30 74 65 20 75 73 65 64 20 74 6f 20 63 68 65 63 6b  te used to check
1ca40 20 69 66 20 74 68 65 20 72 6f 6f 74 2d 70 61 67   if the root-pag
1ca50 65 20 66 6c 61 67 73 20 77 65 72 65 20 73 61 6e  e flags were san
1ca60 65 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74 0a  e at this point.
1ca70 20 20 2a 2a 20 61 6e 64 20 72 65 70 6f 72 74 20    ** and report 
1ca80 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74  database corrupt
1ca90 69 6f 6e 20 69 66 20 74 68 65 79 20 77 65 72 65  ion if they were
1caa0 20 6e 6f 74 2c 20 62 75 74 20 74 68 69 73 20 63   not, but this c
1cab0 68 65 63 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69  heck has.  ** si
1cac0 6e 63 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74  nce moved into t
1cad0 68 65 20 62 74 72 65 65 20 6c 61 79 65 72 2e 20  he btree layer. 
1cae0 20 2a 2f 20 20 0a 20 20 70 43 75 72 2d 3e 69 73   */  .  pCur->is
1caf0 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74  Table = pOp->p4t
1cb00 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b  ype!=P4_KEYINFO;
1cb10 0a 0a 6f 70 65 6e 5f 63 75 72 73 6f 72 5f 73 65  ..open_cursor_se
1cb20 74 5f 68 69 6e 74 73 3a 0a 20 20 61 73 73 65 72  t_hints:.  asser
1cb30 74 28 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53  t( OPFLAG_BULKCS
1cb40 52 3d 3d 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41  R==BTREE_BULKLOA
1cb50 44 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f  D );.  assert( O
1cb60 50 46 4c 41 47 5f 53 45 45 4b 45 51 3d 3d 42 54  PFLAG_SEEKEQ==BT
1cb70 52 45 45 5f 53 45 45 4b 5f 45 51 20 29 3b 0a 20  REE_SEEK_EQ );. 
1cb80 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
1cb90 70 35 20 26 20 4f 50 46 4c 41 47 5f 42 55 4c 4b  p5 & OPFLAG_BULK
1cba0 43 53 52 20 29 3b 0a 23 69 66 64 65 66 20 53 51  CSR );.#ifdef SQ
1cbb0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53  LITE_ENABLE_CURS
1cbc0 4f 52 5f 48 49 4e 54 53 0a 20 20 74 65 73 74 63  OR_HINTS.  testc
1cbd0 61 73 65 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f  ase( pOp->p2 & O
1cbe0 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a  PFLAG_SEEKEQ );.
1cbf0 23 65 6e 64 69 66 0a 20 20 73 71 6c 69 74 65 33  #endif.  sqlite3
1cc00 42 74 72 65 65 43 75 72 73 6f 72 48 69 6e 74 46  BtreeCursorHintF
1cc10 6c 61 67 73 28 70 43 75 72 2d 3e 75 63 2e 70 43  lags(pCur->uc.pC
1cc20 75 72 73 6f 72 2c 0a 20 20 20 20 20 20 20 20 20  ursor,.         
1cc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc40 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26        (pOp->p5 &
1cc50 20 28 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52   (OPFLAG_BULKCSR
1cc60 7c 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 29 29  |OPFLAG_SEEKEQ))
1cc70 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
1cc80 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1cc90 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a  error;.  break;.
1cca0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
1ccb0 65 6e 44 75 70 20 50 31 20 50 32 20 2a 20 2a 20  enDup P1 P2 * * 
1ccc0 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e  *.**.** Open a n
1ccd0 65 77 20 63 75 72 73 6f 72 20 50 31 20 74 68 61  ew cursor P1 tha
1cce0 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
1ccf0 73 61 6d 65 20 65 70 68 65 6d 65 72 61 6c 20 74  same ephemeral t
1cd00 61 62 6c 65 20 61 73 0a 2a 2a 20 63 75 72 73 6f  able as.** curso
1cd10 72 20 50 32 2e 20 20 54 68 65 20 50 32 20 63 75  r P2.  The P2 cu
1cd20 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65 20 62  rsor must have b
1cd30 65 65 6e 20 6f 70 65 6e 65 64 20 62 79 20 61 20  een opened by a 
1cd40 70 72 69 6f 72 20 4f 50 5f 4f 70 65 6e 45 70 68  prior OP_OpenEph
1cd50 65 6d 65 72 61 6c 0a 2a 2a 20 6f 70 63 6f 64 65  emeral.** opcode
1cd60 2e 20 20 4f 6e 6c 79 20 65 70 68 65 6d 65 72 61  .  Only ephemera
1cd70 6c 20 63 75 72 73 6f 72 73 20 6d 61 79 20 62 65  l cursors may be
1cd80 20 64 75 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a   duplicated..**.
1cd90 2a 2a 20 44 75 70 6c 69 63 61 74 65 20 65 70 68  ** Duplicate eph
1cda0 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 73 20 61  emeral cursors a
1cdb0 72 65 20 75 73 65 64 20 66 6f 72 20 73 65 6c 66  re used for self
1cdc0 2d 6a 6f 69 6e 73 20 6f 66 20 6d 61 74 65 72 69  -joins of materi
1cdd0 61 6c 69 7a 65 64 20 76 69 65 77 73 2e 0a 2a 2f  alized views..*/
1cde0 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 44 75 70  .case OP_OpenDup
1cdf0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
1ce00 20 2a 70 4f 72 69 67 3b 20 20 20 20 2f 2a 20 54   *pOrig;    /* T
1ce10 68 65 20 6f 72 69 67 69 6e 61 6c 20 63 75 72 73  he original curs
1ce20 6f 72 20 74 6f 20 62 65 20 64 75 70 6c 69 63 61  or to be duplica
1ce30 74 65 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ted */.  VdbeCur
1ce40 73 6f 72 20 2a 70 43 78 3b 20 20 20 20 20 20 2f  sor *pCx;      /
1ce50 2a 20 54 68 65 20 6e 65 77 20 63 75 72 73 6f 72  * The new cursor
1ce60 20 2a 2f 0a 0a 20 20 70 4f 72 69 67 20 3d 20 70   */..  pOrig = p
1ce70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 32 5d  ->apCsr[pOp->p2]
1ce80 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 72 69  ;.  assert( pOri
1ce90 67 2d 3e 70 42 74 78 21 3d 30 20 29 3b 20 20 2f  g->pBtx!=0 );  /
1cea0 2a 20 4f 6e 6c 79 20 65 70 68 65 6d 65 72 61 6c  * Only ephemeral
1ceb0 20 63 75 72 73 6f 72 73 20 63 61 6e 20 62 65 20   cursors can be 
1cec0 64 75 70 6c 69 63 61 74 65 64 20 2a 2f 0a 0a 20  duplicated */.. 
1ced0 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43   pCx = allocateC
1cee0 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
1cef0 2c 20 70 4f 72 69 67 2d 3e 6e 46 69 65 6c 64 2c  , pOrig->nField,
1cf00 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 42 54 52   -1, CURTYPE_BTR
1cf10 45 45 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d  EE);.  if( pCx==
1cf20 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
1cf30 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20  .  pCx->nullRow 
1cf40 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73 45 70  = 1;.  pCx->isEp
1cf50 68 65 6d 65 72 61 6c 20 3d 20 31 3b 0a 20 20 70  hemeral = 1;.  p
1cf60 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70  Cx->pKeyInfo = p
1cf70 4f 72 69 67 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  Orig->pKeyInfo;.
1cf80 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d    pCx->isTable =
1cf90 20 70 4f 72 69 67 2d 3e 69 73 54 61 62 6c 65 3b   pOrig->isTable;
1cfa0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
1cfb0 74 72 65 65 43 75 72 73 6f 72 28 70 4f 72 69 67  treeCursor(pOrig
1cfc0 2d 3e 70 42 74 78 2c 20 4d 41 53 54 45 52 5f 52  ->pBtx, MASTER_R
1cfd0 4f 4f 54 2c 20 42 54 52 45 45 5f 57 52 43 53 52  OOT, BTREE_WRCSR
1cfe0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1cff0 20 20 20 20 20 20 20 20 20 20 20 20 70 43 78 2d              pCx-
1d000 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 43 78 2d 3e  >pKeyInfo, pCx->
1d010 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 2f  uc.pCursor);.  /
1d020 2a 20 54 68 65 20 73 71 6c 69 74 65 33 42 74 72  * The sqlite3Btr
1d030 65 65 43 75 72 73 6f 72 28 29 20 72 6f 75 74 69  eeCursor() routi
1d040 6e 65 20 63 61 6e 20 6f 6e 6c 79 20 66 61 69 6c  ne can only fail
1d050 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 63   for the first c
1d060 75 72 73 6f 72 0a 20 20 2a 2a 20 6f 70 65 6e 65  ursor.  ** opene
1d070 64 20 66 6f 72 20 61 20 64 61 74 61 62 61 73 65  d for a database
1d080 2e 20 20 53 69 6e 63 65 20 74 68 65 72 65 20 69  .  Since there i
1d090 73 20 61 6c 72 65 61 64 79 20 61 6e 20 6f 70 65  s already an ope
1d0a0 6e 20 63 75 72 73 6f 72 20 77 68 65 6e 20 74 68  n cursor when th
1d0b0 69 73 0a 20 20 2a 2a 20 6f 70 63 6f 64 65 20 69  is.  ** opcode i
1d0c0 73 20 72 75 6e 2c 20 74 68 65 20 73 71 6c 69 74  s run, the sqlit
1d0d0 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 29 20  e3BtreeCursor() 
1d0e0 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20  cannot fail */. 
1d0f0 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
1d100 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 62 72 65 61  ITE_OK );.  brea
1d110 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.}.../* Opcode
1d120 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  : OpenEphemeral 
1d130 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a  P1 P2 * P4 P5.**
1d140 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75   Synopsis: nColu
1d150 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  mn=P2.**.** Open
1d160 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 50 31   a new cursor P1
1d170 20 74 6f 20 61 20 74 72 61 6e 73 69 65 6e 74 20   to a transient 
1d180 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75  table..** The cu
1d190 72 73 6f 72 20 69 73 20 61 6c 77 61 79 73 20 6f  rsor is always o
1d1a0 70 65 6e 65 64 20 72 65 61 64 2f 77 72 69 74 65  pened read/write
1d1b0 20 65 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65   even if .** the
1d1c0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 69   main database i
1d1d0 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68  s read-only.  Th
1d1e0 65 20 65 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 74  e ephemeral.** t
1d1f0 61 62 6c 65 20 69 73 20 64 65 6c 65 74 65 64 20  able is deleted 
1d200 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68  automatically wh
1d210 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  en the cursor is
1d220 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50   closed..**.** P
1d230 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  2 is the number 
1d240 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
1d250 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  e ephemeral tabl
1d260 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72  e..** The cursor
1d270 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 42 54 72   points to a BTr
1d280 65 65 20 74 61 62 6c 65 20 69 66 20 50 34 3d 3d  ee table if P4==
1d290 30 20 61 6e 64 20 74 6f 20 61 20 42 54 72 65 65  0 and to a BTree
1d2a0 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34 20   index.** if P4 
1d2b0 69 73 20 6e 6f 74 20 30 2e 20 20 49 66 20 50 34  is not 0.  If P4
1d2c0 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74   is not NULL, it
1d2d0 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65 79   points to a Key
1d2e0 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 0a 2a  Info structure.*
1d2f0 2a 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74  * that defines t
1d300 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79  he format of key
1d310 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a  s in the index..
1d320 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72  **.** The P5 par
1d330 61 6d 65 74 65 72 20 63 61 6e 20 62 65 20 61 20  ameter can be a 
1d340 6d 61 73 6b 20 6f 66 20 74 68 65 20 42 54 52 45  mask of the BTRE
1d350 45 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65  E_* flags define
1d360 64 0a 2a 2a 20 69 6e 20 62 74 72 65 65 2e 68 2e  d.** in btree.h.
1d370 20 20 54 68 65 73 65 20 66 6c 61 67 73 20 63 6f    These flags co
1d380 6e 74 72 6f 6c 20 61 73 70 65 63 74 73 20 6f 66  ntrol aspects of
1d390 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f   the operation o
1d3a0 66 0a 2a 2a 20 74 68 65 20 62 74 72 65 65 2e 20  f.** the btree. 
1d3b0 20 54 68 65 20 42 54 52 45 45 5f 4f 4d 49 54 5f   The BTREE_OMIT_
1d3c0 4a 4f 55 52 4e 41 4c 20 61 6e 64 20 42 54 52 45  JOURNAL and BTRE
1d3d0 45 5f 53 49 4e 47 4c 45 20 66 6c 61 67 73 20 61  E_SINGLE flags a
1d3e0 72 65 0a 2a 2a 20 61 64 64 65 64 20 61 75 74 6f  re.** added auto
1d3f0 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a  matically..*/./*
1d400 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 41 75 74   Opcode: OpenAut
1d410 6f 69 6e 64 65 78 20 50 31 20 50 32 20 2a 20 50  oindex P1 P2 * P
1d420 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
1d430 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a   nColumn=P2.**.*
1d440 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f  * This opcode wo
1d450 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61 73 20  rks the same as 
1d460 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
1d470 2e 20 20 49 74 20 68 61 73 20 61 0a 2a 2a 20 64  .  It has a.** d
1d480 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 74 6f  ifferent name to
1d490 20 64 69 73 74 69 6e 67 75 69 73 68 20 69 74 73   distinguish its
1d4a0 20 75 73 65 2e 20 20 54 61 62 6c 65 73 20 63 72   use.  Tables cr
1d4b0 65 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20 62  eated using.** b
1d4c0 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69  y this opcode wi
1d4d0 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20 61  ll be used for a
1d4e0 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65  utomatically cre
1d4f0 61 74 65 64 20 74 72 61 6e 73 69 65 6e 74 0a 2a  ated transient.*
1d500 2a 20 69 6e 64 69 63 65 73 20 69 6e 20 6a 6f 69  * indices in joi
1d510 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  ns..*/.case OP_O
1d520 70 65 6e 41 75 74 6f 69 6e 64 65 78 3a 20 0a 63  penAutoindex: .c
1d530 61 73 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d  ase OP_OpenEphem
1d540 65 72 61 6c 3a 20 7b 0a 20 20 56 64 62 65 43 75  eral: {.  VdbeCu
1d550 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 4b 65 79  rsor *pCx;.  Key
1d560 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a  Info *pKeyInfo;.
1d570 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
1d580 69 6e 74 20 76 66 73 46 6c 61 67 73 20 3d 20 0a  int vfsFlags = .
1d590 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
1d5a0 4e 5f 52 45 41 44 57 52 49 54 45 20 7c 0a 20 20  N_READWRITE |.  
1d5b0 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
1d5c0 43 52 45 41 54 45 20 7c 0a 20 20 20 20 20 20 53  CREATE |.      S
1d5d0 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55  QLITE_OPEN_EXCLU
1d5e0 53 49 56 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  SIVE |.      SQL
1d5f0 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f  ITE_OPEN_DELETEO
1d600 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20 53  NCLOSE |.      S
1d610 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53  QLITE_OPEN_TRANS
1d620 49 45 4e 54 5f 44 42 3b 0a 20 20 61 73 73 65 72  IENT_DB;.  asser
1d630 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b  t( pOp->p1>=0 );
1d640 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1d650 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d  p2>=0 );.  pCx =
1d660 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
1d670 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  p, pOp->p1, pOp-
1d680 3e 70 32 2c 20 2d 31 2c 20 43 55 52 54 59 50 45  >p2, -1, CURTYPE
1d690 5f 42 54 52 45 45 29 3b 0a 20 20 69 66 28 20 70  _BTREE);.  if( p
1d6a0 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  Cx==0 ) goto no_
1d6b0 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c  mem;.  pCx->null
1d6c0 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e  Row = 1;.  pCx->
1d6d0 69 73 45 70 68 65 6d 65 72 61 6c 20 3d 20 31 3b  isEphemeral = 1;
1d6e0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
1d6f0 74 72 65 65 4f 70 65 6e 28 64 62 2d 3e 70 56 66  treeOpen(db->pVf
1d700 73 2c 20 30 2c 20 64 62 2c 20 26 70 43 78 2d 3e  s, 0, db, &pCx->
1d710 70 42 74 78 2c 20 0a 20 20 20 20 20 20 20 20 20  pBtx, .         
1d720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42                 B
1d730 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41  TREE_OMIT_JOURNA
1d740 4c 20 7c 20 42 54 52 45 45 5f 53 49 4e 47 4c 45  L | BTREE_SINGLE
1d750 20 7c 20 70 4f 70 2d 3e 70 35 2c 20 76 66 73 46   | pOp->p5, vfsF
1d760 6c 61 67 73 29 3b 0a 20 20 69 66 28 20 72 63 3d  lags);.  if( rc=
1d770 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1d780 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1d790 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 43  reeBeginTrans(pC
1d7a0 78 2d 3e 70 42 74 78 2c 20 31 29 3b 0a 20 20 7d  x->pBtx, 1);.  }
1d7b0 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
1d7c0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49  E_OK ){.    /* I
1d7d0 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e  f a transient in
1d7e0 64 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2c  dex is required,
1d7f0 20 63 72 65 61 74 65 20 69 74 20 62 79 20 63 61   create it by ca
1d800 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c  lling.    ** sql
1d810 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54  ite3BtreeCreateT
1d820 61 62 6c 65 28 29 20 77 69 74 68 20 74 68 65 20  able() with the 
1d830 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 66 6c  BTREE_BLOBKEY fl
1d840 61 67 20 62 65 66 6f 72 65 0a 20 20 20 20 2a 2a  ag before.    **
1d850 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49 66 20   opening it. If 
1d860 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c  a transient tabl
1d870 65 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 6a  e is required, j
1d880 75 73 74 20 75 73 65 20 74 68 65 0a 20 20 20 20  ust use the.    
1d890 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ** automatically
1d8a0 20 63 72 65 61 74 65 64 20 74 61 62 6c 65 20 77   created table w
1d8b0 69 74 68 20 72 6f 6f 74 2d 70 61 67 65 20 31 20  ith root-page 1 
1d8c0 28 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45 59 20  (an BLOB_INTKEY 
1d8d0 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20  table)..    */. 
1d8e0 20 20 20 69 66 28 20 28 70 43 78 2d 3e 70 4b 65     if( (pCx->pKe
1d8f0 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f  yInfo = pKeyInfo
1d900 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
1d910 6e 66 6f 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  nfo)!=0 ){.     
1d920 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 20 20 20   int pgno;.     
1d930 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
1d940 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f  type==P4_KEYINFO
1d950 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   );.      rc = s
1d960 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74  qlite3BtreeCreat
1d970 65 54 61 62 6c 65 28 70 43 78 2d 3e 70 42 74 78  eTable(pCx->pBtx
1d980 2c 20 26 70 67 6e 6f 2c 20 42 54 52 45 45 5f 42  , &pgno, BTREE_B
1d990 4c 4f 42 4b 45 59 20 7c 20 70 4f 70 2d 3e 70 35  LOBKEY | pOp->p5
1d9a0 29 3b 20 0a 20 20 20 20 20 20 69 66 28 20 72 63  ); .      if( rc
1d9b0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
1d9c0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
1d9d0 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f 54  gno==MASTER_ROOT
1d9e0 2b 31 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  +1 );.        as
1d9f0 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e  sert( pKeyInfo->
1da00 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20 20 20  db==db );.      
1da10 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e    assert( pKeyIn
1da20 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29  fo->enc==ENC(db)
1da30 20 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   );.        rc =
1da40 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
1da50 73 6f 72 28 70 43 78 2d 3e 70 42 74 78 2c 20 70  sor(pCx->pBtx, p
1da60 67 6e 6f 2c 20 42 54 52 45 45 5f 57 52 43 53 52  gno, BTREE_WRCSR
1da70 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1da80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da90 20 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 78 2d    pKeyInfo, pCx-
1daa0 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20  >uc.pCursor);.  
1dab0 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43 78 2d      }.      pCx-
1dac0 3e 69 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20 20  >isTable = 0;.  
1dad0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
1dae0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1daf0 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 78  Cursor(pCx->pBtx
1db00 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20 42  , MASTER_ROOT, B
1db10 54 52 45 45 5f 57 52 43 53 52 2c 0a 20 20 20 20  TREE_WRCSR,.    
1db20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db30 20 20 20 20 20 20 20 20 20 20 30 2c 20 70 43 78            0, pCx
1db40 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
1db50 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c       pCx->isTabl
1db60 65 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  e = 1;.    }.  }
1db70 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
1db80 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1db90 72 6f 72 3b 0a 20 20 70 43 78 2d 3e 69 73 4f 72  ror;.  pCx->isOr
1dba0 64 65 72 65 64 20 3d 20 28 70 4f 70 2d 3e 70 35  dered = (pOp->p5
1dbb0 21 3d 42 54 52 45 45 5f 55 4e 4f 52 44 45 52 45  !=BTREE_UNORDERE
1dbc0 44 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  D);.  break;.}..
1dbd0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65  /* Opcode: Sorte
1dbe0 72 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20 50  rOpen P1 P2 P3 P
1dbf0 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  4 *.**.** This o
1dc00 70 63 6f 64 65 20 77 6f 72 6b 73 20 6c 69 6b 65  pcode works like
1dc10 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1dc20 6c 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74  l except that it
1dc30 20 6f 70 65 6e 73 0a 2a 2a 20 61 20 74 72 61 6e   opens.** a tran
1dc40 73 69 65 6e 74 20 69 6e 64 65 78 20 74 68 61 74  sient index that
1dc50 20 69 73 20 73 70 65 63 69 66 69 63 61 6c 6c 79   is specifically
1dc60 20 64 65 73 69 67 6e 65 64 20 74 6f 20 73 6f 72   designed to sor
1dc70 74 20 6c 61 72 67 65 0a 2a 2a 20 74 61 62 6c 65  t large.** table
1dc80 73 20 75 73 69 6e 67 20 61 6e 20 65 78 74 65 72  s using an exter
1dc90 6e 61 6c 20 6d 65 72 67 65 2d 73 6f 72 74 20 61  nal merge-sort a
1dca0 6c 67 6f 72 69 74 68 6d 2e 0a 2a 2a 0a 2a 2a 20  lgorithm..**.** 
1dcb0 49 66 20 61 72 67 75 6d 65 6e 74 20 50 33 20 69  If argument P3 i
1dcc0 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
1dcd0 20 69 74 20 69 6e 64 69 63 61 74 65 73 20 74 68   it indicates th
1dce0 61 74 20 74 68 65 20 73 6f 72 74 65 72 20 6d 61  at the sorter ma
1dcf0 79 0a 2a 2a 20 61 73 73 75 6d 65 20 74 68 61 74  y.** assume that
1dd00 20 61 20 73 74 61 62 6c 65 20 73 6f 72 74 20 63   a stable sort c
1dd10 6f 6e 73 69 64 65 72 69 6e 67 20 74 68 65 20 66  onsidering the f
1dd20 69 72 73 74 20 50 33 20 66 69 65 6c 64 73 20 6f  irst P3 fields o
1dd30 66 20 65 61 63 68 0a 2a 2a 20 6b 65 79 20 69 73  f each.** key is
1dd40 20 73 75 66 66 69 63 69 65 6e 74 20 74 6f 20 70   sufficient to p
1dd50 72 6f 64 75 63 65 20 74 68 65 20 72 65 71 75 69  roduce the requi
1dd60 72 65 64 20 72 65 73 75 6c 74 73 2e 0a 2a 2f 0a  red results..*/.
1dd70 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 4f 70  case OP_SorterOp
1dd80 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  en: {.  VdbeCurs
1dd90 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65  or *pCx;..  asse
1dda0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
1ddb0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1ddc0 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20  >p2>=0 );.  pCx 
1ddd0 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
1dde0 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  (p, pOp->p1, pOp
1ddf0 2d 3e 70 32 2c 20 2d 31 2c 20 43 55 52 54 59 50  ->p2, -1, CURTYP
1de00 45 5f 53 4f 52 54 45 52 29 3b 0a 20 20 69 66 28  E_SORTER);.  if(
1de10 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e   pCx==0 ) goto n
1de20 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 70 4b  o_mem;.  pCx->pK
1de30 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34  eyInfo = pOp->p4
1de40 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73  .pKeyInfo;.  ass
1de50 65 72 74 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e  ert( pCx->pKeyIn
1de60 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20  fo->db==db );.  
1de70 61 73 73 65 72 74 28 20 70 43 78 2d 3e 70 4b 65  assert( pCx->pKe
1de80 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28  yInfo->enc==ENC(
1de90 64 62 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  db) );.  rc = sq
1dea0 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 49  lite3VdbeSorterI
1deb0 6e 69 74 28 64 62 2c 20 70 4f 70 2d 3e 70 33 2c  nit(db, pOp->p3,
1dec0 20 70 43 78 29 3b 0a 20 20 69 66 28 20 72 63 20   pCx);.  if( rc 
1ded0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
1dee0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
1def0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1df00 3a 20 53 65 71 75 65 6e 63 65 54 65 73 74 20 50  : SequenceTest P
1df10 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
1df20 6e 6f 70 73 69 73 3a 20 69 66 28 20 63 75 72 73  nopsis: if( curs
1df30 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b 20 29 20 70  or[P1].ctr++ ) p
1df40 63 20 3d 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20  c = P2.**.** P1 
1df50 69 73 20 61 20 73 6f 72 74 65 72 20 63 75 72 73  is a sorter curs
1df60 6f 72 2e 20 49 66 20 74 68 65 20 73 65 71 75 65  or. If the seque
1df70 6e 63 65 20 63 6f 75 6e 74 65 72 20 69 73 20 63  nce counter is c
1df80 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2c 20 6a  urrently zero, j
1df90 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 52 65  ump.** to P2. Re
1dfa0 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
1dfb0 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6a  her or not the j
1dfc0 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 69 6e  ump is taken, in
1dfd0 63 72 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 74  crement the.** t
1dfe0 68 65 20 73 65 71 75 65 6e 63 65 20 76 61 6c 75  he sequence valu
1dff0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  e..*/.case OP_Se
1e000 71 75 65 6e 63 65 54 65 73 74 3a 20 7b 0a 20 20  quenceTest: {.  
1e010 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1e020 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1e030 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1e040 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1e050 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1e060 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1e070 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
1e080 3b 0a 20 20 69 66 28 20 28 70 43 2d 3e 73 65 71  ;.  if( (pC->seq
1e090 43 6f 75 6e 74 2b 2b 29 3d 3d 30 20 29 7b 0a 20  Count++)==0 ){. 
1e0a0 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
1e0b0 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
1e0c0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
1e0d0 70 65 6e 50 73 65 75 64 6f 20 50 31 20 50 32 20  penPseudo P1 P2 
1e0e0 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
1e0f0 69 73 3a 20 50 33 20 63 6f 6c 75 6d 6e 73 20 69  is: P3 columns i
1e100 6e 20 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70  n r[P2].**.** Op
1e110 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20  en a new cursor 
1e120 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 61  that points to a
1e130 20 66 61 6b 65 20 74 61 62 6c 65 20 74 68 61 74   fake table that
1e140 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67   contains a sing
1e150 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74  le.** row of dat
1e160 61 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20  a.  The content 
1e170 6f 66 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 20  of that one row 
1e180 69 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  is the content o
1e190 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69  f memory.** regi
1e1a0 73 74 65 72 20 50 32 2e 20 20 49 6e 20 6f 74 68  ster P2.  In oth
1e1b0 65 72 20 77 6f 72 64 73 2c 20 63 75 72 73 6f 72  er words, cursor
1e1c0 20 50 31 20 62 65 63 6f 6d 65 73 20 61 6e 20 61   P1 becomes an a
1e1d0 6c 69 61 73 20 66 6f 72 20 74 68 65 20 0a 2a 2a  lias for the .**
1e1e0 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e   MEM_Blob conten
1e1f0 74 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 72  t contained in r
1e200 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
1e210 2a 20 41 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  * A pseudo-table
1e220 20 63 72 65 61 74 65 64 20 62 79 20 74 68 69 73   created by this
1e230 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20   opcode is used 
1e240 74 6f 20 68 6f 6c 64 20 61 20 73 69 6e 67 6c 65  to hold a single
1e250 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74 20 66  .** row output f
1e260 72 6f 6d 20 74 68 65 20 73 6f 72 74 65 72 20 73  rom the sorter s
1e270 6f 20 74 68 61 74 20 74 68 65 20 72 6f 77 20 63  o that the row c
1e280 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73 65 64  an be decomposed
1e290 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64   into.** individ
1e2a0 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e  ual columns usin
1e2b0 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20  g the OP_Column 
1e2c0 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f  opcode.  The OP_
1e2d0 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a  Column opcode.**
1e2e0 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 63 75 72   is the only cur
1e2f0 73 6f 72 20 6f 70 63 6f 64 65 20 74 68 61 74 20  sor opcode that 
1e300 77 6f 72 6b 73 20 77 69 74 68 20 61 20 70 73 65  works with a pse
1e310 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  udo-table..**.**
1e320 20 50 33 20 69 73 20 74 68 65 20 6e 75 6d 62 65   P3 is the numbe
1e330 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74  r of fields in t
1e340 68 65 20 72 65 63 6f 72 64 73 20 74 68 61 74 20  he records that 
1e350 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 62  will be stored b
1e360 79 0a 2a 2a 20 74 68 65 20 70 73 65 75 64 6f 2d  y.** the pseudo-
1e370 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  table..*/.case O
1e380 50 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a  P_OpenPseudo: {.
1e390 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1e3a0 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  x;..  assert( pO
1e3b0 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73  p->p1>=0 );.  as
1e3c0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30  sert( pOp->p3>=0
1e3d0 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f   );.  pCx = allo
1e3e0 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
1e3f0 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20  p->p1, pOp->p3, 
1e400 2d 31 2c 20 43 55 52 54 59 50 45 5f 50 53 45 55  -1, CURTYPE_PSEU
1e410 44 4f 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d  DO);.  if( pCx==
1e420 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
1e430 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20  .  pCx->nullRow 
1e440 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 73 65 65 6b  = 1;.  pCx->seek
1e450 52 65 73 75 6c 74 20 3d 20 70 4f 70 2d 3e 70 32  Result = pOp->p2
1e460 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65  ;.  pCx->isTable
1e470 20 3d 20 31 3b 0a 20 20 2f 2a 20 47 69 76 65 20   = 1;.  /* Give 
1e480 74 68 69 73 20 70 73 65 75 64 6f 2d 63 75 72 73  this pseudo-curs
1e490 6f 72 20 61 20 66 61 6b 65 20 42 74 43 75 72 73  or a fake BtCurs
1e4a0 6f 72 20 70 6f 69 6e 74 65 72 20 73 6f 20 74 68  or pointer so th
1e4b0 61 74 20 70 43 78 0a 20 20 2a 2a 20 63 61 6e 20  at pCx.  ** can 
1e4c0 62 65 20 73 61 66 65 6c 79 20 70 61 73 73 65 64  be safely passed
1e4d0 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65 43   to sqlite3VdbeC
1e4e0 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 2e 20 20  ursorMoveto().  
1e4f0 54 68 69 73 20 61 76 6f 69 64 73 20 61 20 74 65  This avoids a te
1e500 73 74 0a 20 20 2a 2a 20 66 6f 72 20 70 43 78 2d  st.  ** for pCx-
1e510 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
1e520 50 45 5f 42 54 52 45 45 20 69 6e 73 69 64 65 20  PE_BTREE inside 
1e530 6f 66 20 73 71 6c 69 74 65 33 56 64 62 65 43 75  of sqlite3VdbeCu
1e540 72 73 6f 72 4d 6f 76 65 74 6f 28 29 0a 20 20 2a  rsorMoveto().  *
1e550 2a 20 77 68 69 63 68 20 69 73 20 61 20 70 65 72  * which is a per
1e560 66 6f 72 6d 61 6e 63 65 20 6f 70 74 69 6d 69 7a  formance optimiz
1e570 61 74 69 6f 6e 20 2a 2f 0a 20 20 70 43 78 2d 3e  ation */.  pCx->
1e580 75 63 2e 70 43 75 72 73 6f 72 20 3d 20 73 71 6c  uc.pCursor = sql
1e590 69 74 65 33 42 74 72 65 65 46 61 6b 65 56 61 6c  ite3BtreeFakeVal
1e5a0 69 64 43 75 72 73 6f 72 28 29 3b 0a 20 20 61 73  idCursor();.  as
1e5b0 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30  sert( pOp->p5==0
1e5c0 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   );.  break;.}..
1e5d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65  /* Opcode: Close
1e5e0 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
1e5f0 2a 20 43 6c 6f 73 65 20 61 20 63 75 72 73 6f 72  * Close a cursor
1e600 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e   previously open
1e610 65 64 20 61 73 20 50 31 2e 20 20 49 66 20 50 31  ed as P1.  If P1
1e620 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65   is not.** curre
1e630 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73 20  ntly open, this 
1e640 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61  instruction is a
1e650 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20   no-op..*/.case 
1e660 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61 73  OP_Close: {.  as
1e670 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1e680 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1e690 43 75 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69  Cursor );.  sqli
1e6a0 74 65 33 56 64 62 65 46 72 65 65 43 75 72 73 6f  te3VdbeFreeCurso
1e6b0 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70 4f  r(p, p->apCsr[pO
1e6c0 70 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61 70  p->p1]);.  p->ap
1e6d0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 30  Csr[pOp->p1] = 0
1e6e0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  ;.  break;.}..#i
1e6f0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
1e700 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f 4d  LE_COLUMN_USED_M
1e710 41 53 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  ASK./* Opcode: C
1e720 6f 6c 75 6d 6e 73 55 73 65 64 20 50 31 20 2a 20  olumnsUsed P1 * 
1e730 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69  * P4 *.**.** Thi
1e740 73 20 6f 70 63 6f 64 65 20 28 77 68 69 63 68 20  s opcode (which 
1e750 6f 6e 6c 79 20 65 78 69 73 74 73 20 69 66 20 53  only exists if S
1e760 51 4c 69 74 65 20 77 61 73 20 63 6f 6d 70 69 6c  QLite was compil
1e770 65 64 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49 54  ed with.** SQLIT
1e780 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f  E_ENABLE_COLUMN_
1e790 55 53 45 44 5f 4d 41 53 4b 29 20 69 64 65 6e 74  USED_MASK) ident
1e7a0 69 66 69 65 73 20 77 68 69 63 68 20 63 6f 6c 75  ifies which colu
1e7b0 6d 6e 73 20 6f 66 20 74 68 65 0a 2a 2a 20 74 61  mns of the.** ta
1e7c0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 6f 72  ble or index for
1e7d0 20 63 75 72 73 6f 72 20 50 31 20 61 72 65 20 75   cursor P1 are u
1e7e0 73 65 64 2e 20 20 50 34 20 69 73 20 61 20 36 34  sed.  P4 is a 64
1e7f0 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20  -bit integer.** 
1e800 28 50 34 5f 49 4e 54 36 34 29 20 69 6e 20 77 68  (P4_INT64) in wh
1e810 69 63 68 20 74 68 65 20 66 69 72 73 74 20 36 33  ich the first 63
1e820 20 62 69 74 73 20 61 72 65 20 6f 6e 65 20 66 6f   bits are one fo
1e830 72 20 65 61 63 68 20 6f 66 20 74 68 65 0a 2a 2a  r each of the.**
1e840 20 66 69 72 73 74 20 36 33 20 63 6f 6c 75 6d 6e   first 63 column
1e850 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f  s of the table o
1e860 72 20 69 6e 64 65 78 20 74 68 61 74 20 61 72 65  r index that are
1e870 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64 0a 2a   actually used.*
1e880 2a 20 62 79 20 74 68 65 20 63 75 72 73 6f 72 2e  * by the cursor.
1e890 20 20 54 68 65 20 68 69 67 68 2d 6f 72 64 65 72    The high-order
1e8a0 20 62 69 74 20 69 73 20 73 65 74 20 69 66 20 61   bit is set if a
1e8b0 6e 79 20 63 6f 6c 75 6d 6e 20 61 66 74 65 72 0a  ny column after.
1e8c0 2a 2a 20 74 68 65 20 36 34 74 68 20 69 73 20 75  ** the 64th is u
1e8d0 73 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  sed..*/.case OP_
1e8e0 43 6f 6c 75 6d 6e 73 55 73 65 64 3a 20 7b 0a 20  ColumnsUsed: {. 
1e8f0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1e900 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
1e910 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1e920 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
1e930 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
1e940 20 29 3b 0a 20 20 70 43 2d 3e 6d 61 73 6b 55 73   );.  pC->maskUs
1e950 65 64 20 3d 20 2a 28 75 36 34 2a 29 70 4f 70 2d  ed = *(u64*)pOp-
1e960 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61  >p4.pI64;.  brea
1e970 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  k;.}.#endif../* 
1e980 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 45 20 50  Opcode: SeekGE P
1e990 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
1e9a0 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
1e9b0 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20  P3@P4].**.** If 
1e9c0 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
1e9d0 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   to an SQL table
1e9e0 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73   (B-Tree that us
1e9f0 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29  es integer keys)
1ea00 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61  , .** use the va
1ea10 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
1ea20 50 33 20 61 73 20 74 68 65 20 6b 65 79 2e 20 20  P3 as the key.  
1ea30 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1ea40 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
1ea50 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
1ea60 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
1ea70 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
1ea80 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
1ea90 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
1eaa0 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
1eab0 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
1eac0 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
1ead0 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f  1 so that  it po
1eae0 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c  ints to the smal
1eaf0 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  lest entry that 
1eb00 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74  .** is greater t
1eb10 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
1eb20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49  the key value. I
1eb30 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72  f there are no r
1eb40 65 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61 74  ecords .** great
1eb50 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
1eb60 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20   to the key and 
1eb70 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
1eb80 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
1eb90 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 75  .**.** If the cu
1eba0 72 73 6f 72 20 50 31 20 77 61 73 20 6f 70 65 6e  rsor P1 was open
1ebb0 65 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50 46  ed using the OPF
1ebc0 4c 41 47 5f 53 45 45 4b 45 51 20 66 6c 61 67 2c  LAG_SEEKEQ flag,
1ebd0 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70   then this.** op
1ebe0 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73  code will always
1ebf0 20 6c 61 6e 64 20 6f 6e 20 61 20 72 65 63 6f 72   land on a recor
1ec00 64 20 74 68 61 74 20 65 71 75 61 6c 6c 79 20 65  d that equally e
1ec10 71 75 61 6c 73 20 74 68 65 20 6b 65 79 2c 20 6f  quals the key, o
1ec20 72 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d 70 20 69  r.** else jump i
1ec30 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
1ec40 2e 20 20 57 68 65 6e 20 74 68 65 20 63 75 72 73  .  When the curs
1ec50 6f 72 20 69 73 20 4f 50 46 4c 41 47 5f 53 45 45  or is OPFLAG_SEE
1ec60 4b 45 51 2c 20 74 68 69 73 0a 2a 2a 20 6f 70 63  KEQ, this.** opc
1ec70 6f 64 65 20 6d 75 73 74 20 62 65 20 66 6f 6c 6c  ode must be foll
1ec80 6f 77 65 64 20 62 79 20 61 6e 20 49 64 78 4c 45  owed by an IdxLE
1ec90 20 6f 70 63 6f 64 65 20 77 69 74 68 20 74 68 65   opcode with the
1eca0 20 73 61 6d 65 20 61 72 67 75 6d 65 6e 74 73 2e   same arguments.
1ecb0 0a 2a 2a 20 54 68 65 20 49 64 78 4c 45 20 6f 70  .** The IdxLE op
1ecc0 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 6b 69  code will be ski
1ecd0 70 70 65 64 20 69 66 20 74 68 69 73 20 6f 70 63  pped if this opc
1ece0 6f 64 65 20 73 75 63 63 65 65 64 73 2c 20 62 75  ode succeeds, bu
1ecf0 74 20 74 68 65 0a 2a 2a 20 49 64 78 4c 45 20 6f  t the.** IdxLE o
1ed00 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73  pcode will be us
1ed10 65 64 20 6f 6e 20 73 75 62 73 65 71 75 65 6e 74  ed on subsequent
1ed20 20 6c 6f 6f 70 20 69 74 65 72 61 74 69 6f 6e 73   loop iterations
1ed30 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
1ed40 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
1ed50 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64  ursor configured
1ed60 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77   to move in forw
1ed70 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72  ard order,.** fr
1ed80 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
1ed90 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e   toward the end.
1eda0 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
1edb0 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  , the cursor is.
1edc0 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  ** configured to
1edd0 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50   use Next, not P
1ede0 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  rev..**.** See a
1edf0 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
1ee00 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65  ound, SeekLt, Se
1ee10 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a  ekGt, SeekLe.*/.
1ee20 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47  /* Opcode: SeekG
1ee30 54 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  T P1 P2 P3 P4 *.
1ee40 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
1ee50 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
1ee60 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1ee70 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61  ers to an SQL ta
1ee80 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74  ble (B-Tree that
1ee90 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65   uses integer ke
1eea0 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65  ys), .** use the
1eeb0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
1eec0 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20  er P3 as a key. 
1eed0 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1eee0 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
1eef0 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
1ef00 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
1ef10 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
1ef20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
1ef30 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
1ef40 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
1ef50 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
1ef60 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
1ef70 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f  1 so that  it po
1ef80 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c  ints to the smal
1ef90 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  lest entry that 
1efa0 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74  .** is greater t
1efb0 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
1efc0 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
1efd0 6e 6f 20 72 65 63 6f 72 64 73 20 67 72 65 61 74  no records great
1efe0 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20  er than .** the 
1eff0 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f  key and P2 is no
1f000 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  t zero, then jum
1f010 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  p to P2..**.** T
1f020 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
1f030 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e  s the cursor con
1f040 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20  figured to move 
1f050 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72  in forward order
1f060 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65  ,.** from the be
1f070 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74  ginning toward t
1f080 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65  he end.  In othe
1f090 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72  r words, the cur
1f0a0 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67  sor is.** config
1f0b0 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74  ured to use Next
1f0c0 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a  , not Prev..**.*
1f0d0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
1f0e0 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65  d, NotFound, See
1f0f0 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65  kLt, SeekGe, See
1f100 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  kLe.*/./* Opcode
1f110 3a 20 53 65 65 6b 4c 54 20 50 31 20 50 32 20 50  : SeekLT P1 P2 P
1f120 33 20 50 34 20 2a 20 0a 2a 2a 20 53 79 6e 6f 70  3 P4 * .** Synop
1f130 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1f140 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  ].**.** If curso
1f150 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
1f160 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
1f170 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
1f180 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
1f190 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
1f1a0 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
1f1b0 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f   a key. If curso
1f1c0 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
1f1d0 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
1f1e0 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
1f1f0 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
1f200 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
1f210 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
1f220 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
1f230 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
1f240 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
1f250 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
1f260 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  t  it points to 
1f270 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72  the largest entr
1f280 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65  y that .** is le
1f290 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  ss than the key 
1f2a0 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20  value. If there 
1f2b0 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c  are no records l
1f2c0 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65  ess than .** the
1f2d0 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
1f2e0 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
1f2f0 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
1f300 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76  This opcode leav
1f310 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  es the cursor co
1f320 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65  nfigured to move
1f330 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65   in reverse orde
1f340 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65  r,.** from the e
1f350 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20 62 65  nd toward the be
1f360 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68  ginning.  In oth
1f370 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75  er words, the cu
1f380 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69  rsor is.** confi
1f390 67 75 72 65 64 20 74 6f 20 75 73 65 20 50 72 65  gured to use Pre
1f3a0 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a  v, not Next..**.
1f3b0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1f3c0 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65  nd, NotFound, Se
1f3d0 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65  ekGt, SeekGe, Se
1f3e0 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekLe.*/./* Opcod
1f3f0 65 3a 20 53 65 65 6b 4c 45 20 50 31 20 50 32 20  e: SeekLE P1 P2 
1f400 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
1f410 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1f420 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  ].**.** If curso
1f430 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
1f440 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
1f450 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
1f460 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
1f470 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
1f480 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
1f490 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f   a key. If curso
1f4a0 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
1f4b0 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
1f4c0 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
1f4d0 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
1f4e0 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
1f4f0 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
1f500 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
1f510 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
1f520 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
1f530 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
1f540 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74  t it points to t
1f550 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79  he largest entry
1f560 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73   that .** is les
1f570 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
1f580 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
1f590 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  . If there are n
1f5a0 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65  o records .** le
1f5b0 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
1f5c0 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20   to the key and 
1f5d0 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
1f5e0 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
1f5f0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
1f600 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
1f610 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20  rsor configured 
1f620 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72  to move in rever
1f630 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f  se order,.** fro
1f640 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64  m the end toward
1f650 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20   the beginning. 
1f660 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1f670 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
1f680 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  * configured to 
1f690 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65  use Prev, not Ne
1f6a0 78 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  xt..**.** If the
1f6b0 20 63 75 72 73 6f 72 20 50 31 20 77 61 73 20 6f   cursor P1 was o
1f6c0 70 65 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20  pened using the 
1f6d0 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 66 6c  OPFLAG_SEEKEQ fl
1f6e0 61 67 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a  ag, then this.**
1f6f0 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77   opcode will alw
1f700 61 79 73 20 6c 61 6e 64 20 6f 6e 20 61 20 72 65  ays land on a re
1f710 63 6f 72 64 20 74 68 61 74 20 65 71 75 61 6c 6c  cord that equall
1f720 79 20 65 71 75 61 6c 73 20 74 68 65 20 6b 65 79  y equals the key
1f730 2c 20 6f 72 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d  , or.** else jum
1f740 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
1f750 20 50 32 2e 20 20 57 68 65 6e 20 74 68 65 20 63   P2.  When the c
1f760 75 72 73 6f 72 20 69 73 20 4f 50 46 4c 41 47 5f  ursor is OPFLAG_
1f770 53 45 45 4b 45 51 2c 20 74 68 69 73 0a 2a 2a 20  SEEKEQ, this.** 
1f780 6f 70 63 6f 64 65 20 6d 75 73 74 20 62 65 20 66  opcode must be f
1f790 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 49 64  ollowed by an Id
1f7a0 78 47 45 20 6f 70 63 6f 64 65 20 77 69 74 68 20  xGE opcode with 
1f7b0 74 68 65 20 73 61 6d 65 20 61 72 67 75 6d 65 6e  the same argumen
1f7c0 74 73 2e 0a 2a 2a 20 54 68 65 20 49 64 78 47 45  ts..** The IdxGE
1f7d0 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20   opcode will be 
1f7e0 73 6b 69 70 70 65 64 20 69 66 20 74 68 69 73 20  skipped if this 
1f7f0 6f 70 63 6f 64 65 20 73 75 63 63 65 65 64 73 2c  opcode succeeds,
1f800 20 62 75 74 20 74 68 65 0a 2a 2a 20 49 64 78 47   but the.** IdxG
1f810 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65  E opcode will be
1f820 20 75 73 65 64 20 6f 6e 20 73 75 62 73 65 71 75   used on subsequ
1f830 65 6e 74 20 6c 6f 6f 70 20 69 74 65 72 61 74 69  ent loop iterati
1f840 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ons..**.** See a
1f850 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
1f860 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53 65  ound, SeekGt, Se
1f870 65 6b 47 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a  ekGe, SeekLt.*/.
1f880 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 54 3a 20  case OP_SeekLT: 
1f890 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
1f8a0 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
1f8b0 53 65 65 6b 4c 45 3a 20 20 20 20 20 20 20 20 20  SeekLE:         
1f8c0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1f8d0 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 45 3a 20  case OP_SeekGE: 
1f8e0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
1f8f0 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
1f900 53 65 65 6b 47 54 3a 20 7b 20 20 20 20 20 20 20  SeekGT: {       
1f910 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1f920 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20    int res;      
1f930 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73       /* Comparis
1f940 6f 6e 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 69  on result */.  i
1f950 6e 74 20 6f 63 3b 20 20 20 20 20 20 20 20 20 20  nt oc;          
1f960 20 20 2f 2a 20 4f 70 63 6f 64 65 20 2a 2f 0a 20    /* Opcode */. 
1f970 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1f980 20 20 20 20 2f 2a 20 54 68 65 20 63 75 72 73 6f      /* The curso
1f990 72 20 74 6f 20 73 65 65 6b 20 2a 2f 0a 20 20 55  r to seek */.  U
1f9a0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
1f9b0 20 20 2f 2a 20 54 68 65 20 6b 65 79 20 74 6f 20    /* The key to 
1f9c0 73 65 65 6b 20 66 6f 72 20 2a 2f 0a 20 20 69 6e  seek for */.  in
1f9d0 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20  t nField;       
1f9e0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
1f9f0 6c 75 6d 6e 73 20 6f 72 20 66 69 65 6c 64 73 20  lumns or fields 
1fa00 69 6e 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20  in the key */.  
1fa10 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20 20  i64 iKey;       
1fa20 20 20 20 2f 2a 20 54 68 65 20 72 6f 77 69 64 20     /* The rowid 
1fa30 77 65 20 61 72 65 20 74 6f 20 73 65 65 6b 20 74  we are to seek t
1fa40 6f 20 2a 2f 0a 20 20 69 6e 74 20 65 71 4f 6e 6c  o */.  int eqOnl
1fa50 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c  y;        /* Onl
1fa60 79 20 69 6e 74 65 72 65 73 74 65 64 20 69 6e 20  y interested in 
1fa70 3d 3d 20 72 65 73 75 6c 74 73 20 2a 2f 0a 0a 20  == results */.. 
1fa80 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1fa90 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1faa0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
1fab0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 21 3d  ssert( pOp->p2!=
1fac0 30 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  0 );.  pC = p->a
1fad0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1fae0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
1faf0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1fb00 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
1fb10 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
1fb20 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 20 3d  ert( OP_SeekLE =
1fb30 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 31 20 29 3b  = OP_SeekLT+1 );
1fb40 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65  .  assert( OP_Se
1fb50 65 6b 47 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c  ekGE == OP_SeekL
1fb60 54 2b 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28  T+2 );.  assert(
1fb70 20 4f 50 5f 53 65 65 6b 47 54 20 3d 3d 20 4f 50   OP_SeekGT == OP
1fb80 5f 53 65 65 6b 4c 54 2b 33 20 29 3b 0a 20 20 61  _SeekLT+3 );.  a
1fb90 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64  ssert( pC->isOrd
1fba0 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74  ered );.  assert
1fbb0 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  ( pC->uc.pCursor
1fbc0 21 3d 30 20 29 3b 0a 20 20 6f 63 20 3d 20 70 4f  !=0 );.  oc = pO
1fbd0 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 65 71 4f  p->opcode;.  eqO
1fbe0 6e 6c 79 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 6e  nly = 0;.  pC->n
1fbf0 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 23 69 66 64  ullRow = 0;.#ifd
1fc00 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
1fc10 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70    pC->seekOp = p
1fc20 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64  Op->opcode;.#end
1fc30 69 66 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69 73  if..  if( pC->is
1fc40 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20  Table ){.    /* 
1fc50 54 68 65 20 42 54 52 45 45 5f 53 45 45 4b 5f 45  The BTREE_SEEK_E
1fc60 51 20 66 6c 61 67 20 69 73 20 6f 6e 6c 79 20 73  Q flag is only s
1fc70 65 74 20 6f 6e 20 69 6e 64 65 78 20 63 75 72 73  et on index curs
1fc80 6f 72 73 20 2a 2f 0a 20 20 20 20 61 73 73 65 72  ors */.    asser
1fc90 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  t( sqlite3BtreeC
1fca0 75 72 73 6f 72 48 61 73 48 69 6e 74 28 70 43 2d  ursorHasHint(pC-
1fcb0 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 42 54 52  >uc.pCursor, BTR
1fcc0 45 45 5f 53 45 45 4b 5f 45 51 29 3d 3d 30 0a 20  EE_SEEK_EQ)==0. 
1fcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20               || 
1fce0 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 0a 20  CORRUPT_DB );.. 
1fcf0 20 20 20 2f 2a 20 54 68 65 20 69 6e 70 75 74 20     /* The input 
1fd00 76 61 6c 75 65 20 69 6e 20 50 33 20 6d 69 67 68  value in P3 migh
1fd10 74 20 62 65 20 6f 66 20 61 6e 79 20 74 79 70 65  t be of any type
1fd20 3a 20 69 6e 74 65 67 65 72 2c 20 72 65 61 6c 2c  : integer, real,
1fd30 20 73 74 72 69 6e 67 2c 0a 20 20 20 20 2a 2a 20   string,.    ** 
1fd40 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20  blob, or NULL.  
1fd50 42 75 74 20 69 74 20 6e 65 65 64 73 20 74 6f 20  But it needs to 
1fd60 62 65 20 61 6e 20 69 6e 74 65 67 65 72 20 62 65  be an integer be
1fd70 66 6f 72 65 20 77 65 20 63 61 6e 20 64 6f 0a 20  fore we can do. 
1fd80 20 20 20 2a 2a 20 74 68 65 20 73 65 65 6b 2c 20     ** the seek, 
1fd90 73 6f 20 63 6f 6e 76 65 72 74 20 69 74 2e 20 2a  so convert it. *
1fda0 2f 0a 20 20 20 20 70 49 6e 33 20 3d 20 26 61 4d  /.    pIn3 = &aM
1fdb0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
1fdc0 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67   if( (pIn3->flag
1fdd0 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  s & (MEM_Int|MEM
1fde0 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d  _Real|MEM_Str))=
1fdf0 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20  =MEM_Str ){.    
1fe00 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    applyNumericAf
1fe10 66 69 6e 69 74 79 28 70 49 6e 33 2c 20 30 29 3b  finity(pIn3, 0);
1fe20 0a 20 20 20 20 7d 0a 20 20 20 20 69 4b 65 79 20  .    }.    iKey 
1fe30 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
1fe40 56 61 6c 75 65 28 70 49 6e 33 29 3b 0a 0a 20 20  Value(pIn3);..  
1fe50 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76    /* If the P3 v
1fe60 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62  alue could not b
1fe70 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  e converted into
1fe80 20 61 6e 20 69 6e 74 65 67 65 72 20 77 69 74 68   an integer with
1fe90 6f 75 74 0a 20 20 20 20 2a 2a 20 6c 6f 73 73 20  out.    ** loss 
1fea0 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20  of information, 
1feb0 74 68 65 6e 20 73 70 65 63 69 61 6c 20 70 72 6f  then special pro
1fec0 63 65 73 73 69 6e 67 20 69 73 20 72 65 71 75 69  cessing is requi
1fed0 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20 69 66  red... */.    if
1fee0 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
1fef0 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a   MEM_Int)==0 ){.
1ff00 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d        if( (pIn3-
1ff10 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61  >flags & MEM_Rea
1ff20 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  l)==0 ){.       
1ff30 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76 61   /* If the P3 va
1ff40 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f  lue cannot be co
1ff50 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 79  nverted into any
1ff60 20 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65   kind of a numbe
1ff70 72 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68  r,.        ** th
1ff80 65 6e 20 74 68 65 20 73 65 65 6b 20 69 73 20 6e  en the seek is n
1ff90 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20  ot possible, so 
1ffa0 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20  jump to P2 */.  
1ffb0 20 20 20 20 20 20 56 64 62 65 42 72 61 6e 63 68        VdbeBranch
1ffc0 54 61 6b 65 6e 28 31 2c 32 29 3b 20 67 6f 74 6f  Taken(1,2); goto
1ffd0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20   jump_to_p2;.   
1ffe0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1fff0 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66    }..      /* If
20000 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 69   the approximati
20010 6f 6e 20 69 4b 65 79 20 69 73 20 6c 61 72 67 65  on iKey is large
20020 72 20 74 68 61 6e 20 74 68 65 20 61 63 74 75 61  r than the actua
20030 6c 20 72 65 61 6c 20 73 65 61 72 63 68 0a 20 20  l real search.  
20040 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62      ** term, sub
20050 73 74 69 74 75 74 65 20 3e 3d 20 66 6f 72 20 3e  stitute >= for >
20060 20 61 6e 64 20 3c 20 66 6f 72 20 3c 3d 2e 20 65   and < for <=. e
20070 2e 67 2e 20 69 66 20 74 68 65 20 73 65 61 72 63  .g. if the searc
20080 68 20 74 65 72 6d 0a 20 20 20 20 20 20 2a 2a 20  h term.      ** 
20090 69 73 20 34 2e 39 20 61 6e 64 20 74 68 65 20 69  is 4.9 and the i
200a0 6e 74 65 67 65 72 20 61 70 70 72 6f 78 69 6d 61  nteger approxima
200b0 74 69 6f 6e 20 35 3a 0a 20 20 20 20 20 20 2a 2a  tion 5:.      **
200c0 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20  .      **       
200d0 20 28 78 20 3e 20 20 34 2e 39 29 20 20 20 20 2d   (x >  4.9)    -
200e0 3e 20 20 20 20 20 28 78 20 3e 3d 20 35 29 0a 20  >     (x >= 5). 
200f0 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 28       **        (
20100 78 20 3c 3d 20 34 2e 39 29 20 20 20 20 2d 3e 20  x <= 4.9)    -> 
20110 20 20 20 20 28 78 20 3c 20 20 35 29 0a 20 20 20      (x <  5).   
20120 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20     */.      if( 
20130 70 49 6e 33 2d 3e 75 2e 72 3c 28 64 6f 75 62 6c  pIn3->u.r<(doubl
20140 65 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20  e)iKey ){.      
20150 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
20160 6b 47 45 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 2d  kGE==(OP_SeekGT-
20170 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  1) );.        as
20180 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 54 3d  sert( OP_SeekLT=
20190 3d 28 4f 50 5f 53 65 65 6b 4c 45 2d 31 29 20 29  =(OP_SeekLE-1) )
201a0 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
201b0 28 20 28 4f 50 5f 53 65 65 6b 4c 45 20 26 20 30  ( (OP_SeekLE & 0
201c0 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b  x0001)==(OP_Seek
201d0 47 54 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a  GT & 0x0001) );.
201e0 20 20 20 20 20 20 20 20 69 66 28 20 28 6f 63 20          if( (oc 
201f0 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53  & 0x0001)==(OP_S
20200 65 65 6b 47 54 20 26 20 30 78 30 30 30 31 29 20  eekGT & 0x0001) 
20210 29 20 6f 63 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a  ) oc--;.      }.
20220 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65  .      /* If the
20230 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69   approximation i
20240 4b 65 79 20 69 73 20 73 6d 61 6c 6c 65 72 20 74  Key is smaller t
20250 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72  han the actual r
20260 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20  eal search.     
20270 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69   ** term, substi
20280 74 75 74 65 20 3c 3d 20 66 6f 72 20 3c 20 61 6e  tute <= for < an
20290 64 20 3e 20 66 6f 72 20 3e 3d 2e 20 20 2a 2f 0a  d > for >=.  */.
202a0 20 20 20 20 20 20 65 6c 73 65 20 69 66 28 20 70        else if( p
202b0 49 6e 33 2d 3e 75 2e 72 3e 28 64 6f 75 62 6c 65  In3->u.r>(double
202c0 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20  )iKey ){.       
202d0 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
202e0 4c 45 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 2b 31  LE==(OP_SeekLT+1
202f0 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ) );.        ass
20300 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 54 3d 3d  ert( OP_SeekGT==
20310 28 4f 50 5f 53 65 65 6b 47 45 2b 31 29 20 29 3b  (OP_SeekGE+1) );
20320 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
20330 20 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30 78   (OP_SeekLT & 0x
20340 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47  0001)==(OP_SeekG
20350 45 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20  E & 0x0001) );. 
20360 20 20 20 20 20 20 20 69 66 28 20 28 6f 63 20 26         if( (oc &
20370 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65   0x0001)==(OP_Se
20380 65 6b 4c 54 20 26 20 30 78 30 30 30 31 29 20 29  ekLT & 0x0001) )
20390 20 6f 63 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a 20   oc++;.      }. 
203a0 20 20 20 7d 20 0a 20 20 20 20 72 63 20 3d 20 73     } .    rc = s
203b0 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
203c0 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75 63  oUnpacked(pC->uc
203d0 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36  .pCursor, 0, (u6
203e0 34 29 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29  4)iKey, 0, &res)
203f0 3b 0a 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f  ;.    pC->moveto
20400 54 61 72 67 65 74 20 3d 20 69 4b 65 79 3b 20 20  Target = iKey;  
20410 2f 2a 20 55 73 65 64 20 62 79 20 4f 50 5f 44 65  /* Used by OP_De
20420 6c 65 74 65 20 2a 2f 0a 20 20 20 20 69 66 28 20  lete */.    if( 
20430 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
20440 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
20450 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
20460 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
20470 20 20 20 2f 2a 20 46 6f 72 20 61 20 63 75 72 73     /* For a curs
20480 6f 72 20 77 69 74 68 20 74 68 65 20 42 54 52 45  or with the BTRE
20490 45 5f 53 45 45 4b 5f 45 51 20 68 69 6e 74 2c 20  E_SEEK_EQ hint, 
204a0 6f 6e 6c 79 20 74 68 65 20 4f 50 5f 53 65 65 6b  only the OP_Seek
204b0 47 45 20 61 6e 64 0a 20 20 20 20 2a 2a 20 4f 50  GE and.    ** OP
204c0 5f 53 65 65 6b 4c 45 20 6f 70 63 6f 64 65 73 20  _SeekLE opcodes 
204d0 61 72 65 20 61 6c 6c 6f 77 65 64 2c 20 61 6e 64  are allowed, and
204e0 20 74 68 65 73 65 20 6d 75 73 74 20 62 65 20 69   these must be i
204f0 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f  mmediately follo
20500 77 65 64 0a 20 20 20 20 2a 2a 20 62 79 20 61 6e  wed.    ** by an
20510 20 4f 50 5f 49 64 78 47 54 20 6f 72 20 4f 50 5f   OP_IdxGT or OP_
20520 49 64 78 4c 54 20 6f 70 63 6f 64 65 2c 20 72 65  IdxLT opcode, re
20530 73 70 65 63 74 69 76 65 6c 79 2c 20 77 69 74 68  spectively, with
20540 20 74 68 65 20 73 61 6d 65 20 6b 65 79 2e 0a 20   the same key.. 
20550 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 73 71     */.    if( sq
20560 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
20570 48 61 73 48 69 6e 74 28 70 43 2d 3e 75 63 2e 70  HasHint(pC->uc.p
20580 43 75 72 73 6f 72 2c 20 42 54 52 45 45 5f 53 45  Cursor, BTREE_SE
20590 45 4b 5f 45 51 29 20 29 7b 0a 20 20 20 20 20 20  EK_EQ) ){.      
205a0 65 71 4f 6e 6c 79 20 3d 20 31 3b 0a 20 20 20 20  eqOnly = 1;.    
205b0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
205c0 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 47 45  pcode==OP_SeekGE
205d0 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
205e0 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20  =OP_SeekLE );.  
205f0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
20600 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  1].opcode==OP_Id
20610 78 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70  xLT || pOp[1].op
20620 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29  code==OP_IdxGT )
20630 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
20640 70 4f 70 5b 31 5d 2e 70 31 3d 3d 70 4f 70 5b 30  pOp[1].p1==pOp[0
20650 5d 2e 70 31 20 29 3b 0a 20 20 20 20 20 20 61 73  ].p1 );.      as
20660 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 32 3d  sert( pOp[1].p2=
20670 3d 70 4f 70 5b 30 5d 2e 70 32 20 29 3b 0a 20 20  =pOp[0].p2 );.  
20680 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
20690 31 5d 2e 70 33 3d 3d 70 4f 70 5b 30 5d 2e 70 33  1].p3==pOp[0].p3
206a0 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
206b0 28 20 70 4f 70 5b 31 5d 2e 70 34 2e 69 3d 3d 70  ( pOp[1].p4.i==p
206c0 4f 70 5b 30 5d 2e 70 34 2e 69 20 29 3b 0a 20 20  Op[0].p4.i );.  
206d0 20 20 7d 0a 0a 20 20 20 20 6e 46 69 65 6c 64 20    }..    nField 
206e0 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20  = pOp->p4.i;.   
206f0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
20700 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
20710 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6e 46  ;.    assert( nF
20720 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20 72 2e  ield>0 );.    r.
20730 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70  pKeyInfo = pC->p
20740 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e  KeyInfo;.    r.n
20750 46 69 65 6c 64 20 3d 20 28 75 31 36 29 6e 46 69  Field = (u16)nFi
20760 65 6c 64 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65  eld;..    /* The
20770 20 6e 65 78 74 20 6c 69 6e 65 20 6f 66 20 63 6f   next line of co
20780 64 65 20 63 6f 6d 70 75 74 65 73 20 61 73 20 66  de computes as f
20790 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66 61 73  ollows, only fas
207a0 74 65 72 3a 0a 20 20 20 20 2a 2a 20 20 20 69 66  ter:.    **   if
207b0 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20  ( oc==OP_SeekGT 
207c0 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45  || oc==OP_SeekLE
207d0 20 29 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72   ){.    **     r
207e0 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31  .default_rc = -1
207f0 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 65 6c 73 65  ;.    **   }else
20800 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64  {.    **     r.d
20810 65 66 61 75 6c 74 5f 72 63 20 3d 20 2b 31 3b 0a  efault_rc = +1;.
20820 20 20 20 20 2a 2a 20 20 20 7d 0a 20 20 20 20 2a      **   }.    *
20830 2f 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f  /.    r.default_
20840 72 63 20 3d 20 28 28 31 20 26 20 28 6f 63 20 2d  rc = ((1 & (oc -
20850 20 4f 50 5f 53 65 65 6b 4c 54 29 29 20 3f 20 2d   OP_SeekLT)) ? -
20860 31 20 3a 20 2b 31 29 3b 0a 20 20 20 20 61 73 73  1 : +1);.    ass
20870 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b  ert( oc!=OP_Seek
20880 47 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f  GT || r.default_
20890 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73  rc==-1 );.    as
208a0 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65  sert( oc!=OP_See
208b0 6b 4c 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74  kLE || r.default
208c0 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61  _rc==-1 );.    a
208d0 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65  ssert( oc!=OP_Se
208e0 65 6b 47 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c  ekGE || r.defaul
208f0 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 20 20 20 20  t_rc==+1 );.    
20900 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53  assert( oc!=OP_S
20910 65 65 6b 4c 54 20 7c 7c 20 72 2e 64 65 66 61 75  eekLT || r.defau
20920 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 0a 20 20  lt_rc==+1 );..  
20930 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d    r.aMem = &aMem
20940 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65  [pOp->p3];.#ifde
20950 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
20960 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28     { int i; for(
20970 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b  i=0; i<r.nField;
20980 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65   i++) assert( me
20990 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
209a0 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66  [i]) ); }.#endif
209b0 0a 20 20 20 20 72 2e 65 71 53 65 65 6e 20 3d 20  .    r.eqSeen = 
209c0 30 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  0;.    rc = sqli
209d0 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
209e0 70 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43  packed(pC->uc.pC
209f0 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c 20 30 2c  ursor, &r, 0, 0,
20a00 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20   &res);.    if( 
20a10 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
20a20 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
20a30 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
20a40 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 65 71      }.    if( eq
20a50 4f 6e 6c 79 20 26 26 20 72 2e 65 71 53 65 65 6e  Only && r.eqSeen
20a60 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  ==0 ){.      ass
20a70 65 72 74 28 20 72 65 73 21 3d 30 20 29 3b 0a 20  ert( res!=0 );. 
20a80 20 20 20 20 20 67 6f 74 6f 20 73 65 65 6b 5f 6e       goto seek_n
20a90 6f 74 5f 66 6f 75 6e 64 3b 0a 20 20 20 20 7d 0a  ot_found;.    }.
20aa0 20 20 7d 0a 20 20 70 43 2d 3e 64 65 66 65 72 72    }.  pC->deferr
20ab0 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
20ac0 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
20ad0 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 23  = CACHE_STALE;.#
20ae0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
20af0 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72  T.  sqlite3_sear
20b00 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64  ch_count++;.#end
20b10 69 66 0a 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f  if.  if( oc>=OP_
20b20 53 65 65 6b 47 45 20 29 7b 20 20 61 73 73 65 72  SeekGE ){  asser
20b30 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 45  t( oc==OP_SeekGE
20b40 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47   || oc==OP_SeekG
20b50 54 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73  T );.    if( res
20b60 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26  <0 || (res==0 &&
20b70 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 29 20   oc==OP_SeekGT) 
20b80 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30  ){.      res = 0
20b90 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
20ba0 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 70 43  ite3BtreeNext(pC
20bb0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 29  ->uc.pCursor, 0)
20bc0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
20bd0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
20be0 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
20bf0 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20  ITE_DONE ){.    
20c00 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
20c10 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 20 20 20 20  E_OK;.          
20c20 72 65 73 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  res = 1;.       
20c30 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
20c40 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
20c50 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
20c60 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
20c70 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 65   }else{.      re
20c80 73 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d  s = 0;.    }.  }
20c90 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
20ca0 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20  ( oc==OP_SeekLT 
20cb0 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45  || oc==OP_SeekLE
20cc0 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 3e   );.    if( res>
20cd0 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20  0 || (res==0 && 
20ce0 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 29 20 29  oc==OP_SeekLT) )
20cf0 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b  {.      res = 0;
20d00 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
20d10 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73  te3BtreePrevious
20d20 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
20d30 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72   0);.      if( r
20d40 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
20d50 20 20 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d          if( rc==
20d60 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20  SQLITE_DONE ){. 
20d70 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51           rc = SQ
20d80 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 20  LITE_OK;.       
20d90 20 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 20 20     res = 1;.    
20da0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
20db0 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
20dc0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
20dd0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
20de0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
20df0 20 2f 2a 20 72 65 73 20 6d 69 67 68 74 20 62 65   /* res might be
20e00 20 6e 65 67 61 74 69 76 65 20 62 65 63 61 75 73   negative becaus
20e10 65 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 65  e the table is e
20e20 6d 70 74 79 2e 20 20 43 68 65 63 6b 20 74 6f 0a  mpty.  Check to.
20e30 20 20 20 20 20 20 2a 2a 20 73 65 65 20 69 66 20        ** see if 
20e40 74 68 69 73 20 69 73 20 74 68 65 20 63 61 73 65  this is the case
20e50 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
20e60 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 42 74   res = sqlite3Bt
20e70 72 65 65 45 6f 66 28 70 43 2d 3e 75 63 2e 70 43  reeEof(pC->uc.pC
20e80 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20  ursor);.    }.  
20e90 7d 0a 73 65 65 6b 5f 6e 6f 74 5f 66 6f 75 6e 64  }.seek_not_found
20ea0 3a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  :.  assert( pOp-
20eb0 3e 70 32 3e 30 20 29 3b 0a 20 20 56 64 62 65 42  >p2>0 );.  VdbeB
20ec0 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d  ranchTaken(res!=
20ed0 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20  0,2);.  if( res 
20ee0 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  ){.    goto jump
20ef0 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 20  _to_p2;.  }else 
20f00 69 66 28 20 65 71 4f 6e 6c 79 20 29 7b 0a 20 20  if( eqOnly ){.  
20f10 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d    assert( pOp[1]
20f20 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c  .opcode==OP_IdxL
20f30 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f  T || pOp[1].opco
20f40 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a  de==OP_IdxGT );.
20f50 20 20 20 20 70 4f 70 2b 2b 3b 20 2f 2a 20 53 6b      pOp++; /* Sk
20f60 69 70 20 74 68 65 20 4f 50 5f 49 64 78 4c 74 20  ip the OP_IdxLt 
20f70 6f 72 20 4f 50 5f 49 64 78 47 54 20 74 68 61 74  or OP_IdxGT that
20f80 20 66 6f 6c 6c 6f 77 73 20 2a 2f 0a 20 20 7d 0a   follows */.  }.
20f90 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
20fa0 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20 50 31 20  pcode: Found P1 
20fb0 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
20fc0 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
20fd0 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  @P4].**.** If P4
20fe0 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  ==0 then registe
20ff0 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f  r P3 holds a blo
21000 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  b constructed by
21010 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66   MakeRecord.  If
21020 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65  .** P4>0 then re
21030 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65  gister P3 is the
21040 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67   first of P4 reg
21050 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d  isters that form
21060 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20   an unpacked.** 
21070 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75  record..**.** Cu
21080 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e  rsor P1 is on an
21090 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49   index btree.  I
210a0 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65  f the record ide
210b0 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e  ntified by P3 an
210c0 64 20 50 34 0a 2a 2a 20 69 73 20 61 20 70 72 65  d P4.** is a pre
210d0 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79  fix of any entry
210e0 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75   in P1 then a ju
210f0 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32  mp is made to P2
21100 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20 6c 65   and.** P1 is le
21110 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  ft pointing at t
21120 68 65 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72  he matching entr
21130 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  y..**.** This op
21140 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74  eration leaves t
21150 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73  he cursor in a s
21160 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63 61  tate where it ca
21170 6e 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64  n be.** advanced
21180 20 69 6e 20 74 68 65 20 66 6f 72 77 61 72 64 20   in the forward 
21190 64 69 72 65 63 74 69 6f 6e 2e 20 20 54 68 65 20  direction.  The 
211a0 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  Next instruction
211b0 20 77 69 6c 6c 20 77 6f 72 6b 2c 0a 2a 2a 20 62   will work,.** b
211c0 75 74 20 6e 6f 74 20 74 68 65 20 50 72 65 76 20  ut not the Prev 
211d0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
211e0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74  ** See also: Not
211f0 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63  Found, NoConflic
21200 74 2c 20 4e 6f 74 45 78 69 73 74 73 2e 20 53 65  t, NotExists. Se
21210 65 6b 47 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekGe.*/./* Opcod
21220 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20 50  e: NotFound P1 P
21230 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
21240 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
21250 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d  P4].**.** If P4=
21260 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  =0 then register
21270 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62   P3 holds a blob
21280 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20   constructed by 
21290 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a  MakeRecord.  If.
212a0 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67  ** P4>0 then reg
212b0 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20  ister P3 is the 
212c0 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69  first of P4 regi
212d0 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20  sters that form 
212e0 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72  an unpacked.** r
212f0 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75  ecord..** .** Cu
21300 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e  rsor P1 is on an
21310 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49   index btree.  I
21320 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65  f the record ide
21330 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e  ntified by P3 an
21340 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f 74 20 74  d P4.** is not t
21350 68 65 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79  he prefix of any
21360 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65   entry in P1 the
21370 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65  n a jump is made
21380 20 74 6f 20 50 32 2e 20 20 49 66 20 50 31 20 0a   to P2.  If P1 .
21390 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20  ** does contain 
213a0 61 6e 20 65 6e 74 72 79 20 77 68 6f 73 65 20 70  an entry whose p
213b0 72 65 66 69 78 20 6d 61 74 63 68 65 73 20 74 68  refix matches th
213c0 65 20 50 33 2f 50 34 20 72 65 63 6f 72 64 20 74  e P3/P4 record t
213d0 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66  hen control.** f
213e0 61 6c 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20  alls through to 
213f0 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
21400 74 69 6f 6e 20 61 6e 64 20 50 31 20 69 73 20 6c  tion and P1 is l
21410 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  eft pointing at 
21420 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69 6e 67 20  the.** matching 
21430 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  entry..**.** Thi
21440 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76  s operation leav
21450 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e  es the cursor in
21460 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69   a state where i
21470 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61  t cannot be.** a
21480 64 76 61 6e 63 65 64 20 69 6e 20 65 69 74 68 65  dvanced in eithe
21490 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e  r direction.  In
214a0 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
214b0 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76 0a  e Next and Prev.
214c0 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f  ** opcodes do no
214d0 74 20 77 6f 72 6b 20 61 66 74 65 72 20 74 68 69  t work after thi
214e0 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a  s operation..**.
214f0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
21500 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20 4e  nd, NotExists, N
21510 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 2f 2a 20  oConflict.*/./* 
21520 4f 70 63 6f 64 65 3a 20 4e 6f 43 6f 6e 66 6c 69  Opcode: NoConfli
21530 63 74 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  ct P1 P2 P3 P4 *
21540 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
21550 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
21560 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72   If P4==0 then r
21570 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73  egister P3 holds
21580 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63   a blob construc
21590 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72  ted by MakeRecor
215a0 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74  d.  If.** P4>0 t
215b0 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
215c0 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20  is the first of 
215d0 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61  P4 registers tha
215e0 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  t form an unpack
215f0 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a  ed.** record..**
21600 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69   .** Cursor P1 i
21610 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74  s on an index bt
21620 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63  ree.  If the rec
21630 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62  ord identified b
21640 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 63  y P3 and P4.** c
21650 6f 6e 74 61 69 6e 73 20 61 6e 79 20 4e 55 4c 4c  ontains any NULL
21660 20 76 61 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d   value, jump imm
21670 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20  ediately to P2. 
21680 20 49 66 20 61 6c 6c 20 74 65 72 6d 73 20 6f 66   If all terms of
21690 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20 61   the.** record a
216a0 72 65 20 6e 6f 74 2d 4e 55 4c 4c 20 74 68 65 6e  re not-NULL then
216b0 20 61 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65   a check is done
216c0 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66   to determine if
216d0 20 61 6e 79 20 72 6f 77 20 69 6e 20 74 68 65 0a   any row in the.
216e0 2a 2a 20 50 31 20 69 6e 64 65 78 20 62 74 72 65  ** P1 index btre
216f0 65 20 68 61 73 20 61 20 6d 61 74 63 68 69 6e 67  e has a matching
21700 20 6b 65 79 20 70 72 65 66 69 78 2e 20 20 49 66   key prefix.  If
21710 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 61   there are no ma
21720 74 63 68 65 73 2c 20 6a 75 6d 70 0a 2a 2a 20 69  tches, jump.** i
21730 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
21740 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20 61  .  If there is a
21750 20 6d 61 74 63 68 2c 20 66 61 6c 6c 20 74 68 72   match, fall thr
21760 6f 75 67 68 20 61 6e 64 20 6c 65 61 76 65 20 74  ough and leave t
21770 68 65 20 50 31 0a 2a 2a 20 63 75 72 73 6f 72 20  he P1.** cursor 
21780 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20  pointing to the 
21790 6d 61 74 63 68 69 6e 67 20 72 6f 77 2e 0a 2a 2a  matching row..**
217a0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
217b0 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 4f 50  is similar to OP
217c0 5f 4e 6f 74 46 6f 75 6e 64 20 77 69 74 68 20 74  _NotFound with t
217d0 68 65 20 65 78 63 65 70 74 69 6f 6e 73 20 74 68  he exceptions th
217e0 61 74 20 74 68 65 0a 2a 2a 20 62 72 61 6e 63 68  at the.** branch
217f0 20 69 73 20 61 6c 77 61 79 73 20 74 61 6b 65 6e   is always taken
21800 20 69 66 20 61 6e 79 20 70 61 72 74 20 6f 66 20   if any part of 
21810 74 68 65 20 73 65 61 72 63 68 20 6b 65 79 20 69  the search key i
21820 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a  nput is NULL..**
21830 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69  .** This operati
21840 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  on leaves the cu
21850 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20  rsor in a state 
21860 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20  where it cannot 
21870 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69  be.** advanced i
21880 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74 69  n either directi
21890 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  on.  In other wo
218a0 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e  rds, the Next an
218b0 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65  d Prev.** opcode
218c0 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66  s do not work af
218d0 74 65 72 20 74 68 69 73 20 6f 70 65 72 61 74 69  ter this operati
218e0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  on..**.** See al
218f0 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 46 6f  so: NotFound, Fo
21900 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 0a 2a  und, NotExists.*
21910 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 43 6f 6e 66  /.case OP_NoConf
21920 6c 69 63 74 3a 20 20 20 20 20 2f 2a 20 6a 75 6d  lict:     /* jum
21930 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
21940 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20  P_NotFound:     
21950 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
21960 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a  /.case OP_Found:
21970 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
21980 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20  p, in3 */.  int 
21990 61 6c 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20  alreadyExists;. 
219a0 20 69 6e 74 20 74 61 6b 65 4a 75 6d 70 3b 0a 20   int takeJump;. 
219b0 20 69 6e 74 20 69 69 3b 0a 20 20 56 64 62 65 43   int ii;.  VdbeC
219c0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74  ursor *pC;.  int
219d0 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64   res;.  Unpacked
219e0 52 65 63 6f 72 64 20 2a 70 46 72 65 65 3b 0a 20  Record *pFree;. 
219f0 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
21a00 2a 70 49 64 78 4b 65 79 3b 0a 20 20 55 6e 70 61  *pIdxKey;.  Unpa
21a10 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 23  ckedRecord r;..#
21a20 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
21a30 54 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  T.  if( pOp->opc
21a40 6f 64 65 21 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69  ode!=OP_NoConfli
21a50 63 74 20 29 20 73 71 6c 69 74 65 33 5f 66 6f 75  ct ) sqlite3_fou
21a60 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64  nd_count++;.#end
21a70 69 66 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  if..  assert( pO
21a80 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
21a90 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
21aa0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
21ab0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
21ac0 32 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  2 );.  pC = p->a
21ad0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
21ae0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
21af0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
21b00 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b  DEBUG.  pC->seek
21b10 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  Op = pOp->opcode
21b20 3b 0a 23 65 6e 64 69 66 0a 20 20 70 49 6e 33 20  ;.#endif.  pIn3 
21b30 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
21b40 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
21b50 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
21b60 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
21b70 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72  ert( pC->uc.pCur
21b80 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  sor!=0 );.  asse
21b90 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
21ba0 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  =0 );.  if( pOp-
21bb0 3e 70 34 2e 69 3e 30 20 29 7b 0a 20 20 20 20 72  >p4.i>0 ){.    r
21bc0 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e  .pKeyInfo = pC->
21bd0 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e  pKeyInfo;.    r.
21be0 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f  nField = (u16)pO
21bf0 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 72 2e 61  p->p4.i;.    r.a
21c00 4d 65 6d 20 3d 20 70 49 6e 33 3b 0a 23 69 66 64  Mem = pIn3;.#ifd
21c10 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
21c20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69      for(ii=0; ii
21c30 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29  <r.nField; ii++)
21c40 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
21c50 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d  memIsValid(&r.aM
21c60 65 6d 5b 69 69 5d 29 20 29 3b 0a 20 20 20 20 20  em[ii]) );.     
21c70 20 61 73 73 65 72 74 28 20 28 72 2e 61 4d 65 6d   assert( (r.aMem
21c80 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d  [ii].flags & MEM
21c90 5f 5a 65 72 6f 29 3d 3d 30 20 7c 7c 20 72 2e 61  _Zero)==0 || r.a
21ca0 4d 65 6d 5b 69 69 5d 2e 6e 3d 3d 30 20 29 3b 0a  Mem[ii].n==0 );.
21cb0 20 20 20 20 20 20 69 66 28 20 69 69 20 29 20 52        if( ii ) R
21cc0 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
21cd0 70 2d 3e 70 33 2b 69 69 2c 20 26 72 2e 61 4d 65  p->p3+ii, &r.aMe
21ce0 6d 5b 69 69 5d 29 3b 0a 20 20 20 20 7d 0a 23 65  m[ii]);.    }.#e
21cf0 6e 64 69 66 0a 20 20 20 20 70 49 64 78 4b 65 79  ndif.    pIdxKey
21d00 20 3d 20 26 72 3b 0a 20 20 20 20 70 46 72 65 65   = &r;.    pFree
21d10 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 0;.  }else{. 
21d20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d     assert( pIn3-
21d30 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
21d40 62 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 45 78  b );.    rc = Ex
21d50 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a  pandBlob(pIn3);.
21d60 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
21d70 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d  SQLITE_OK || rc=
21d80 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 3b  =SQLITE_NOMEM );
21d90 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f  .    if( rc ) go
21da0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 70  to no_mem;.    p
21db0 46 72 65 65 20 3d 20 70 49 64 78 4b 65 79 20 3d  Free = pIdxKey =
21dc0 20 73 71 6c 69 74 65 33 56 64 62 65 41 6c 6c 6f   sqlite3VdbeAllo
21dd0 63 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 28  cUnpackedRecord(
21de0 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 29 3b 0a 20  pC->pKeyInfo);. 
21df0 20 20 20 69 66 28 20 70 49 64 78 4b 65 79 3d 3d     if( pIdxKey==
21e00 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
21e10 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
21e20 52 65 63 6f 72 64 55 6e 70 61 63 6b 28 70 43 2d  RecordUnpack(pC-
21e30 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 49 6e 33 2d  >pKeyInfo, pIn3-
21e40 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 20 70 49 64  >n, pIn3->z, pId
21e50 78 4b 65 79 29 3b 0a 20 20 7d 0a 20 20 70 49 64  xKey);.  }.  pId
21e60 78 4b 65 79 2d 3e 64 65 66 61 75 6c 74 5f 72 63  xKey->default_rc
21e70 20 3d 20 30 3b 0a 20 20 74 61 6b 65 4a 75 6d 70   = 0;.  takeJump
21e80 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d   = 0;.  if( pOp-
21e90 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 43 6f  >opcode==OP_NoCo
21ea0 6e 66 6c 69 63 74 20 29 7b 0a 20 20 20 20 2f 2a  nflict ){.    /*
21eb0 20 46 6f 72 20 74 68 65 20 4f 50 5f 4e 6f 43 6f   For the OP_NoCo
21ec0 6e 66 6c 69 63 74 20 6f 70 63 6f 64 65 2c 20 74  nflict opcode, t
21ed0 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20  ake the jump if 
21ee0 61 6e 79 20 6f 66 20 74 68 65 0a 20 20 20 20 2a  any of the.    *
21ef0 2a 20 69 6e 70 75 74 20 66 69 65 6c 64 73 20 61  * input fields a
21f00 72 65 20 4e 55 4c 4c 2c 20 73 69 6e 63 65 20 61  re NULL, since a
21f10 6e 79 20 6b 65 79 20 77 69 74 68 20 61 20 4e 55  ny key with a NU
21f20 4c 4c 20 77 69 6c 6c 20 6e 6f 74 0a 20 20 20 20  LL will not.    
21f30 2a 2a 20 63 6f 6e 66 6c 69 63 74 20 2a 2f 0a 20  ** conflict */. 
21f40 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c     for(ii=0; ii<
21f50 70 49 64 78 4b 65 79 2d 3e 6e 46 69 65 6c 64 3b  pIdxKey->nField;
21f60 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66   ii++){.      if
21f70 28 20 70 49 64 78 4b 65 79 2d 3e 61 4d 65 6d 5b  ( pIdxKey->aMem[
21f80 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ii].flags & MEM_
21f90 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20 20 20  Null ){.        
21fa0 74 61 6b 65 4a 75 6d 70 20 3d 20 31 3b 0a 20 20  takeJump = 1;.  
21fb0 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
21fc0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
21fd0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
21fe0 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
21ff0 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
22000 20 70 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20   pIdxKey, 0, 0, 
22010 26 72 65 73 29 3b 0a 20 20 69 66 28 20 70 46 72  &res);.  if( pFr
22020 65 65 20 29 20 73 71 6c 69 74 65 33 44 62 46 72  ee ) sqlite3DbFr
22030 65 65 4e 4e 28 64 62 2c 20 70 46 72 65 65 29 3b  eeNN(db, pFree);
22040 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
22050 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 67 6f 74 6f  E_OK ){.    goto
22060 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
22070 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 73  ror;.  }.  pC->s
22080 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65 73 3b  eekResult = res;
22090 0a 20 20 61 6c 72 65 61 64 79 45 78 69 73 74 73  .  alreadyExists
220a0 20 3d 20 28 72 65 73 3d 3d 30 29 3b 0a 20 20 70   = (res==0);.  p
220b0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 2d 61  C->nullRow = 1-a
220c0 6c 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20  lreadyExists;.  
220d0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
220e0 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  to = 0;.  pC->ca
220f0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
22100 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70  E_STALE;.  if( p
22110 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46  Op->opcode==OP_F
22120 6f 75 6e 64 20 29 7b 0a 20 20 20 20 56 64 62 65  ound ){.    Vdbe
22130 42 72 61 6e 63 68 54 61 6b 65 6e 28 61 6c 72 65  BranchTaken(alre
22140 61 64 79 45 78 69 73 74 73 21 3d 30 2c 32 29 3b  adyExists!=0,2);
22150 0a 20 20 20 20 69 66 28 20 61 6c 72 65 61 64 79  .    if( already
22160 45 78 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75  Exists ) goto ju
22170 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73  mp_to_p2;.  }els
22180 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  e{.    VdbeBranc
22190 68 54 61 6b 65 6e 28 74 61 6b 65 4a 75 6d 70 7c  hTaken(takeJump|
221a0 7c 61 6c 72 65 61 64 79 45 78 69 73 74 73 3d 3d  |alreadyExists==
221b0 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 74 61  0,2);.    if( ta
221c0 6b 65 4a 75 6d 70 20 7c 7c 20 21 61 6c 72 65 61  keJump || !alrea
221d0 64 79 45 78 69 73 74 73 20 29 20 67 6f 74 6f 20  dyExists ) goto 
221e0 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
221f0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
22200 70 63 6f 64 65 3a 20 53 65 65 6b 52 6f 77 69 64  pcode: SeekRowid
22210 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
22220 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65   Synopsis: intke
22230 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31  y=r[P3].**.** P1
22240 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66   is the index of
22250 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f   a cursor open o
22260 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 62  n an SQL table b
22270 74 72 65 65 20 28 77 69 74 68 20 69 6e 74 65 67  tree (with integ
22280 65 72 0a 2a 2a 20 6b 65 79 73 29 2e 20 20 49 66  er.** keys).  If
22290 20 72 65 67 69 73 74 65 72 20 50 33 20 64 6f 65   register P3 doe
222a0 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e  s not contain an
222b0 20 69 6e 74 65 67 65 72 20 6f 72 20 69 66 20 50   integer or if P
222c0 31 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 6f  1 does not.** co
222d0 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77  ntain a record w
222e0 69 74 68 20 72 6f 77 69 64 20 50 33 20 74 68 65  ith rowid P3 the
222f0 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  n jump immediate
22300 6c 79 20 74 6f 20 50 32 2e 20 20 0a 2a 2a 20 4f  ly to P2.  .** O
22310 72 2c 20 69 66 20 50 32 20 69 73 20 30 2c 20 72  r, if P2 is 0, r
22320 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 43  aise an SQLITE_C
22330 4f 52 52 55 50 54 20 65 72 72 6f 72 2e 20 49 66  ORRUPT error. If
22340 20 50 31 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e   P1 does contain
22350 0a 2a 2a 20 61 20 72 65 63 6f 72 64 20 77 69 74  .** a record wit
22360 68 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20  h rowid P3 then 
22370 0a 2a 2a 20 6c 65 61 76 65 20 74 68 65 20 63 75  .** leave the cu
22380 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 61 74  rsor pointing at
22390 20 74 68 61 74 20 72 65 63 6f 72 64 20 61 6e 64   that record and
223a0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
223b0 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73   the next.** ins
223c0 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
223d0 54 68 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73  The OP_NotExists
223e0 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73   opcode performs
223f0 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74   the same operat
22400 69 6f 6e 2c 20 62 75 74 20 77 69 74 68 20 4f 50  ion, but with OP
22410 5f 4e 6f 74 45 78 69 73 74 73 0a 2a 2a 20 74 68  _NotExists.** th
22420 65 20 50 33 20 72 65 67 69 73 74 65 72 20 6d 75  e P3 register mu
22430 73 74 20 62 65 20 67 75 61 72 61 6e 74 65 65 64  st be guaranteed
22440 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69   to contain an i
22450 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 20 57  nteger value.  W
22460 69 74 68 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f  ith this.** opco
22470 64 65 2c 20 72 65 67 69 73 74 65 72 20 50 33 20  de, register P3 
22480 6d 69 67 68 74 20 6e 6f 74 20 63 6f 6e 74 61 69  might not contai
22490 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a  n an integer..**
224a0 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 46 6f  .** The OP_NotFo
224b0 75 6e 64 20 6f 70 63 6f 64 65 20 70 65 72 66 6f  und opcode perfo
224c0 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70 65  rms the same ope
224d0 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64 65 78 20  ration on index 
224e0 62 74 72 65 65 73 0a 2a 2a 20 28 77 69 74 68 20  btrees.** (with 
224f0 61 72 62 69 74 72 61 72 79 20 6d 75 6c 74 69 2d  arbitrary multi-
22500 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a  value keys)..**.
22510 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
22520 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
22530 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72   in a state wher
22540 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 61  e it cannot be a
22550 64 76 61 6e 63 65 64 0a 2a 2a 20 69 6e 20 65 69  dvanced.** in ei
22560 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20  ther direction. 
22570 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
22580 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72   the Next and Pr
22590 65 76 20 6f 70 63 6f 64 65 73 20 77 69 6c 6c 0a  ev opcodes will.
225a0 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c  ** not work foll
225b0 6f 77 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64  owing this opcod
225c0 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  e..**.** See als
225d0 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
225e0 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20  nd, NoConflict, 
225f0 53 65 65 6b 52 6f 77 69 64 0a 2a 2f 0a 2f 2a 20  SeekRowid.*/./* 
22600 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69 73 74  Opcode: NotExist
22610 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  s P1 P2 P3 * *.*
22620 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b  * Synopsis: intk
22630 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50  ey=r[P3].**.** P
22640 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  1 is the index o
22650 66 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 20  f a cursor open 
22660 6f 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  on an SQL table 
22670 62 74 72 65 65 20 28 77 69 74 68 20 69 6e 74 65  btree (with inte
22680 67 65 72 0a 2a 2a 20 6b 65 79 73 29 2e 20 20 50  ger.** keys).  P
22690 33 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  3 is an integer 
226a0 72 6f 77 69 64 2e 20 20 49 66 20 50 31 20 64 6f  rowid.  If P1 do
226b0 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61  es not contain a
226c0 20 72 65 63 6f 72 64 20 77 69 74 68 0a 2a 2a 20   record with.** 
226d0 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 6a 75  rowid P3 then ju
226e0 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
226f0 6f 20 50 32 2e 20 20 4f 72 2c 20 69 66 20 50 32  o P2.  Or, if P2
22700 20 69 73 20 30 2c 20 72 61 69 73 65 20 61 6e 0a   is 0, raise an.
22710 2a 2a 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  ** SQLITE_CORRUP
22720 54 20 65 72 72 6f 72 2e 20 49 66 20 50 31 20 64  T error. If P1 d
22730 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 20 72 65  oes contain a re
22740 63 6f 72 64 20 77 69 74 68 20 72 6f 77 69 64 20  cord with rowid 
22750 50 33 20 74 68 65 6e 20 0a 2a 2a 20 6c 65 61 76  P3 then .** leav
22760 65 20 74 68 65 20 63 75 72 73 6f 72 20 70 6f 69  e the cursor poi
22770 6e 74 69 6e 67 20 61 74 20 74 68 61 74 20 72 65  nting at that re
22780 63 6f 72 64 20 61 6e 64 20 66 61 6c 6c 20 74 68  cord and fall th
22790 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
227a0 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e  t.** instruction
227b0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 53  ..**.** The OP_S
227c0 65 65 6b 52 6f 77 69 64 20 6f 70 63 6f 64 65 20  eekRowid opcode 
227d0 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d  performs the sam
227e0 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20  e operation but 
227f0 61 6c 73 6f 20 61 6c 6c 6f 77 73 20 74 68 65 0a  also allows the.
22800 2a 2a 20 50 33 20 72 65 67 69 73 74 65 72 20 74  ** P3 register t
22810 6f 20 63 6f 6e 74 61 69 6e 20 61 20 6e 6f 6e 2d  o contain a non-
22820 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2c 20 69  integer value, i
22830 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
22840 20 6a 75 6d 70 20 69 73 0a 2a 2a 20 61 6c 77 61   jump is.** alwa
22850 79 73 20 74 61 6b 65 6e 2e 20 20 54 68 69 73 20  ys taken.  This 
22860 6f 70 63 6f 64 65 20 72 65 71 75 69 72 65 73 20  opcode requires 
22870 74 68 61 74 20 50 33 20 61 6c 77 61 79 73 20 63  that P3 always c
22880 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65  ontain an intege
22890 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f  r..**.** The OP_
228a0 4e 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20  NotFound opcode 
228b0 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d  performs the sam
228c0 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69  e operation on i
228d0 6e 64 65 78 20 62 74 72 65 65 73 0a 2a 2a 20 28  ndex btrees.** (
228e0 77 69 74 68 20 61 72 62 69 74 72 61 72 79 20 6d  with arbitrary m
228f0 75 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79 73 29  ulti-value keys)
22900 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
22910 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
22920 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65  ursor in a state
22930 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74   where it cannot
22940 20 62 65 20 61 64 76 61 6e 63 65 64 0a 2a 2a 20   be advanced.** 
22950 69 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74  in either direct
22960 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ion.  In other w
22970 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61  ords, the Next a
22980 6e 64 20 50 72 65 76 20 6f 70 63 6f 64 65 73 20  nd Prev opcodes 
22990 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b  will.** not work
229a0 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 69 73 20   following this 
229b0 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65  opcode..**.** Se
229c0 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
229d0 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c  otFound, NoConfl
229e0 69 63 74 2c 20 53 65 65 6b 52 6f 77 69 64 0a 2a  ict, SeekRowid.*
229f0 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 52 6f  /.case OP_SeekRo
22a00 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  wid: {        /*
22a10 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
22a20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
22a30 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
22a40 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  r;.  int res;.  
22a50 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20 70 49 6e  u64 iKey;..  pIn
22a60 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
22a70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 33 2d  3];.  if( (pIn3-
22a80 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
22a90 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70 70 6c  )==0 ){.    appl
22aa0 79 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 20  yAffinity(pIn3, 
22ab0 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
22ac0 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  IC, encoding);. 
22ad0 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c     if( (pIn3->fl
22ae0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d  ags & MEM_Int)==
22af0 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  0 ) goto jump_to
22b00 5f 70 32 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61  _p2;.  }.  /* Fa
22b10 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20  ll through into 
22b20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 2a 2f 0a  OP_NotExists */.
22b30 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74  case OP_NotExist
22b40 73 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  s:          /* j
22b50 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 70 49  ump, in3 */.  pI
22b60 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
22b70 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p3];.  assert( p
22b80 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
22b90 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74  _Int );.  assert
22ba0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
22bb0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
22bc0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
22bd0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
22be0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
22bf0 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
22c00 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65  _DEBUG.  pC->see
22c10 6b 4f 70 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a  kOp = 0;.#endif.
22c20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
22c30 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72  Table );.  asser
22c40 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
22c50 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
22c60 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
22c70 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73  uc.pCursor;.  as
22c80 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29  sert( pCrsr!=0 )
22c90 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 69  ;.  res = 0;.  i
22ca0 4b 65 79 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b  Key = pIn3->u.i;
22cb0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
22cc0 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
22cd0 65 64 28 70 43 72 73 72 2c 20 30 2c 20 69 4b 65  ed(pCrsr, 0, iKe
22ce0 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 61  y, 0, &res);.  a
22cf0 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
22d00 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29  E_OK || res==0 )
22d10 3b 0a 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61  ;.  pC->movetoTa
22d20 72 67 65 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a  rget = iKey;  /*
22d30 20 55 73 65 64 20 62 79 20 4f 50 5f 44 65 6c 65   Used by OP_Dele
22d40 74 65 20 2a 2f 0a 20 20 70 43 2d 3e 6e 75 6c 6c  te */.  pC->null
22d50 52 6f 77 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  Row = 0;.  pC->c
22d60 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
22d70 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e  HE_STALE;.  pC->
22d80 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
22d90 20 30 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68   0;.  VdbeBranch
22da0 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b  Taken(res!=0,2);
22db0 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c  .  pC->seekResul
22dc0 74 20 3d 20 72 65 73 3b 0a 20 20 69 66 28 20 72  t = res;.  if( r
22dd0 65 73 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73  es!=0 ){.    ass
22de0 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
22df0 4f 4b 20 29 3b 0a 20 20 20 20 69 66 28 20 70 4f  OK );.    if( pO
22e00 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20  p->p2==0 ){.    
22e10 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f    rc = SQLITE_CO
22e20 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20  RRUPT_BKPT;.    
22e30 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 67 6f 74  }else{.      got
22e40 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
22e50 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63    }.  }.  if( rc
22e60 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
22e70 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
22e80 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
22e90 65 3a 20 53 65 71 75 65 6e 63 65 20 50 31 20 50  e: Sequence P1 P
22ea0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
22eb0 73 69 73 3a 20 72 5b 50 32 5d 3d 63 75 72 73 6f  sis: r[P2]=curso
22ec0 72 5b 50 31 5d 2e 63 74 72 2b 2b 0a 2a 2a 0a 2a  r[P1].ctr++.**.*
22ed0 2a 20 46 69 6e 64 20 74 68 65 20 6e 65 78 74 20  * Find the next 
22ee0 61 76 61 69 6c 61 62 6c 65 20 73 65 71 75 65 6e  available sequen
22ef0 63 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 75  ce number for cu
22f00 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74  rsor P1..** Writ
22f10 65 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6e  e the sequence n
22f20 75 6d 62 65 72 20 69 6e 74 6f 20 72 65 67 69 73  umber into regis
22f30 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73  ter P2..** The s
22f40 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f  equence number o
22f50 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  n the cursor is 
22f60 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 66 74 65  incremented afte
22f70 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75  r this.** instru
22f80 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65  ction.  .*/.case
22f90 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20   OP_Sequence: { 
22fa0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
22fb0 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  2 */.  assert( p
22fc0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
22fd0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
22fe0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
22ff0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d  apCsr[pOp->p1]!=
23000 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
23010 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
23020 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54  ->eCurType!=CURT
23030 59 50 45 5f 56 54 41 42 20 29 3b 0a 20 20 70 4f  YPE_VTAB );.  pO
23040 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
23050 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70  ase(p, pOp);.  p
23060 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61 70  Out->u.i = p->ap
23070 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65  Csr[pOp->p1]->se
23080 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72 65 61  qCount++;.  brea
23090 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.}.../* Opcode
230a0 3a 20 4e 65 77 52 6f 77 69 64 20 50 31 20 50 32  : NewRowid P1 P2
230b0 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
230c0 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64  sis: r[P2]=rowid
230d0 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61 20 6e 65 77  .**.** Get a new
230e0 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20   integer record 
230f0 6e 75 6d 62 65 72 20 28 61 2e 6b 2e 61 20 22 72  number (a.k.a "r
23100 6f 77 69 64 22 29 20 75 73 65 64 20 61 73 20 74  owid") used as t
23110 68 65 20 6b 65 79 20 74 6f 20 61 20 74 61 62 6c  he key to a tabl
23120 65 2e 0a 2a 2a 20 54 68 65 20 72 65 63 6f 72 64  e..** The record
23130 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f 74 20 70   number is not p
23140 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64 20 61  reviously used a
23150 73 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20 64  s a key in the d
23160 61 74 61 62 61 73 65 0a 2a 2a 20 74 61 62 6c 65  atabase.** table
23170 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20   that cursor P1 
23180 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68 65 20  points to.  The 
23190 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  new record numbe
231a0 72 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20  r is written.** 
231b0 77 72 69 74 74 65 6e 20 74 6f 20 72 65 67 69 73  written to regis
231c0 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P2..**.** If
231d0 20 50 33 3e 30 20 74 68 65 6e 20 50 33 20 69 73   P3>0 then P3 is
231e0 20 61 20 72 65 67 69 73 74 65 72 20 69 6e 20 74   a register in t
231f0 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66  he root frame of
23200 20 74 68 69 73 20 56 44 42 45 20 74 68 61 74 20   this VDBE that 
23210 68 6f 6c 64 73 20 0a 2a 2a 20 74 68 65 20 6c 61  holds .** the la
23220 72 67 65 73 74 20 70 72 65 76 69 6f 75 73 6c 79  rgest previously
23230 20 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72   generated recor
23240 64 20 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e 65 77  d number. No new
23250 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 73 20   record numbers 
23260 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20 74  are.** allowed t
23270 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20 74  o be less than t
23280 68 69 73 20 76 61 6c 75 65 2e 20 57 68 65 6e 20  his value. When 
23290 74 68 69 73 20 76 61 6c 75 65 20 72 65 61 63 68  this value reach
232a0 65 73 20 69 74 73 20 6d 61 78 69 6d 75 6d 2c 20  es its maximum, 
232b0 0a 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f 46 55  .** an SQLITE_FU
232c0 4c 4c 20 65 72 72 6f 72 20 69 73 20 67 65 6e 65  LL error is gene
232d0 72 61 74 65 64 2e 20 54 68 65 20 50 33 20 72 65  rated. The P3 re
232e0 67 69 73 74 65 72 20 69 73 20 75 70 64 61 74 65  gister is update
232f0 64 20 77 69 74 68 20 74 68 65 20 27 0a 2a 2a 20  d with the '.** 
23300 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64  generated record
23310 20 6e 75 6d 62 65 72 2e 20 54 68 69 73 20 50 33   number. This P3
23320 20 6d 65 63 68 61 6e 69 73 6d 20 69 73 20 75 73   mechanism is us
23330 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65  ed to help imple
23340 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41 55 54 4f  ment the.** AUTO
23350 49 4e 43 52 45 4d 45 4e 54 20 66 65 61 74 75 72  INCREMENT featur
23360 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65  e..*/.case OP_Ne
23370 77 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20  wRowid: {       
23380 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
23390 20 69 36 34 20 76 3b 20 20 20 20 20 20 20 20 20   i64 v;         
233a0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e          /* The n
233b0 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 56 64  ew rowid */.  Vd
233c0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
233d0 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6f       /* Cursor o
233e0 66 20 74 61 62 6c 65 20 74 6f 20 67 65 74 20 74  f table to get t
233f0 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a  he new rowid */.
23400 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20    int res;      
23410 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
23420 6c 74 20 6f 66 20 61 6e 20 73 71 6c 69 74 65 33  lt of an sqlite3
23430 42 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20  BtreeLast() */. 
23440 20 69 6e 74 20 63 6e 74 3b 20 20 20 20 20 20 20   int cnt;       
23450 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74          /* Count
23460 65 72 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20  er to limit the 
23470 6e 75 6d 62 65 72 20 6f 66 20 73 65 61 72 63 68  number of search
23480 65 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  es */.  Mem *pMe
23490 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  m;             /
234a0 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
234b0 6e 67 20 6c 61 72 67 65 73 74 20 72 6f 77 69 64  ng largest rowid
234c0 20 66 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d 45   for AUTOINCREME
234d0 4e 54 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d  NT */.  VdbeFram
234e0 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 2f  e *pFrame;     /
234f0 2a 20 52 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20  * Root frame of 
23500 56 44 42 45 20 2a 2f 0a 0a 20 20 76 20 3d 20 30  VDBE */..  v = 0
23510 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 70  ;.  res = 0;.  p
23520 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
23530 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
23540 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
23550 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
23560 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
23570 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
23580 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
23590 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
235a0 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
235b0 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
235c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
235d0 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  uc.pCursor!=0 );
235e0 0a 20 20 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20  .  {.    /* The 
235f0 6e 65 78 74 20 72 6f 77 69 64 20 6f 72 20 72 65  next rowid or re
23600 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 64 69 66  cord number (dif
23610 66 65 72 65 6e 74 20 74 65 72 6d 73 20 66 6f 72  ferent terms for
23620 20 74 68 65 20 73 61 6d 65 0a 20 20 20 20 2a 2a   the same.    **
23630 20 74 68 69 6e 67 29 20 69 73 20 6f 62 74 61 69   thing) is obtai
23640 6e 65 64 20 69 6e 20 61 20 74 77 6f 2d 73 74 65  ned in a two-ste
23650 70 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20 20  p algorithm..   
23660 20 2a 2a 0a 20 20 20 20 2a 2a 20 46 69 72 73 74   **.    ** First
23670 20 77 65 20 61 74 74 65 6d 70 74 20 74 6f 20 66   we attempt to f
23680 69 6e 64 20 74 68 65 20 6c 61 72 67 65 73 74 20  ind the largest 
23690 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20 61  existing rowid a
236a0 6e 64 20 61 64 64 20 6f 6e 65 0a 20 20 20 20 2a  nd add one.    *
236b0 2a 20 74 6f 20 74 68 61 74 2e 20 20 42 75 74 20  * to that.  But 
236c0 69 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 65  if the largest e
236d0 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20 69 73  xisting rowid is
236e0 20 61 6c 72 65 61 64 79 20 74 68 65 20 6d 61 78   already the max
236f0 69 6d 75 6d 0a 20 20 20 20 2a 2a 20 70 6f 73 69  imum.    ** posi
23700 74 69 76 65 20 69 6e 74 65 67 65 72 2c 20 77 65  tive integer, we
23710 20 68 61 76 65 20 74 6f 20 66 61 6c 6c 20 74 68   have to fall th
23720 72 6f 75 67 68 20 74 6f 20 74 68 65 20 73 65 63  rough to the sec
23730 6f 6e 64 0a 20 20 20 20 2a 2a 20 70 72 6f 62 61  ond.    ** proba
23740 62 69 6c 69 73 74 69 63 20 61 6c 67 6f 72 69 74  bilistic algorit
23750 68 6d 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  hm.    **.    **
23760 20 54 68 65 20 73 65 63 6f 6e 64 20 61 6c 67 6f   The second algo
23770 72 69 74 68 6d 20 69 73 20 74 6f 20 73 65 6c 65  rithm is to sele
23780 63 74 20 61 20 72 6f 77 69 64 20 61 74 20 72 61  ct a rowid at ra
23790 6e 64 6f 6d 20 61 6e 64 20 73 65 65 20 69 66 0a  ndom and see if.
237a0 20 20 20 20 2a 2a 20 69 74 20 61 6c 72 65 61 64      ** it alread
237b0 79 20 65 78 69 73 74 73 20 69 6e 20 74 68 65 20  y exists in the 
237c0 74 61 62 6c 65 2e 20 20 49 66 20 69 74 20 64 6f  table.  If it do
237d0 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 77 65  es not exist, we
237e0 20 68 61 76 65 0a 20 20 20 20 2a 2a 20 73 75 63   have.    ** suc
237f0 63 65 65 64 65 64 2e 20 20 49 66 20 74 68 65 20  ceeded.  If the 
23800 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 64 6f 65  random rowid doe
23810 73 20 65 78 69 73 74 2c 20 77 65 20 73 65 6c 65  s exist, we sele
23820 63 74 20 61 20 6e 65 77 20 6f 6e 65 0a 20 20 20  ct a new one.   
23830 20 2a 2a 20 61 6e 64 20 74 72 79 20 61 67 61 69   ** and try agai
23840 6e 2c 20 75 70 20 74 6f 20 31 30 30 20 74 69 6d  n, up to 100 tim
23850 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61  es..    */.    a
23860 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
23870 6c 65 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  le );..#ifdef SQ
23880 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f 57 49 44  LITE_32BIT_ROWID
23890 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f  .#   define MAX_
238a0 52 4f 57 49 44 20 30 78 37 66 66 66 66 66 66 66  ROWID 0x7fffffff
238b0 0a 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53 6f  .#else.    /* So
238c0 6d 65 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f 6d  me compilers com
238d0 70 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e 73  plain about cons
238e0 74 61 6e 74 73 20 6f 66 20 74 68 65 20 66 6f 72  tants of the for
238f0 6d 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66  m 0x7fffffffffff
23900 66 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74 68  ffff..    ** Oth
23910 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f  ers complain abo
23920 75 74 20 30 78 37 66 66 66 66 66 66 66 66 66 66  ut 0x7ffffffffff
23930 66 66 66 66 66 66 4c 4c 2e 20 20 54 68 65 20 66  ffffffLL.  The f
23940 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 73  ollowing macro s
23950 65 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20 70  eems.    ** to p
23960 72 6f 76 69 64 65 20 74 68 65 20 63 6f 6e 73 74  rovide the const
23970 61 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e 67  ant while making
23980 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20 68   all compilers h
23990 61 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20 20  appy..    */.#  
239a0 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49   define MAX_ROWI
239b0 44 20 20 28 69 36 34 29 28 20 28 28 28 75 36 34  D  (i64)( (((u64
239c0 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32  )0x7fffffff)<<32
239d0 29 20 7c 20 28 75 36 34 29 30 78 66 66 66 66 66  ) | (u64)0xfffff
239e0 66 66 66 20 29 0a 23 65 6e 64 69 66 0a 0a 20 20  fff ).#endif..  
239f0 20 20 69 66 28 20 21 70 43 2d 3e 75 73 65 52 61    if( !pC->useRa
23a00 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20  ndomRowid ){.   
23a10 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
23a20 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 75 63 2e  treeLast(pC->uc.
23a30 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
23a40 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
23a50 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
23a60 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
23a70 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
23a80 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72 65    }.      if( re
23a90 73 20 29 7b 0a 20 20 20 20 20 20 20 20 76 20 3d  s ){.        v =
23aa0 20 31 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d   1;   /* IMP: R-
23ab0 36 31 39 31 34 2d 34 38 30 37 34 20 2a 2f 0a 20  61914-48074 */. 
23ac0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
23ad0 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
23ae0 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73  te3BtreeCursorIs
23af0 56 61 6c 69 64 28 70 43 2d 3e 75 63 2e 70 43 75  Valid(pC->uc.pCu
23b00 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20  rsor) );.       
23b10 20 76 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65   v = sqlite3Btre
23b20 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43 2d 3e  eIntegerKey(pC->
23b30 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  uc.pCursor);.   
23b40 20 20 20 20 20 69 66 28 20 76 3e 3d 4d 41 58 5f       if( v>=MAX_
23b50 52 4f 57 49 44 20 29 7b 0a 20 20 20 20 20 20 20  ROWID ){.       
23b60 20 20 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d     pC->useRandom
23b70 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20 20 20  Rowid = 1;.     
23b80 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
23b90 20 20 20 20 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d      v++;   /* IM
23ba0 50 3a 20 52 2d 32 39 35 33 38 2d 33 34 39 38 37  P: R-29538-34987
23bb0 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   */.        }.  
23bc0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 23 69 66      }.    }..#if
23bd0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
23be0 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20  _AUTOINCREMENT. 
23bf0 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29     if( pOp->p3 )
23c00 7b 0a 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72  {.      /* Asser
23c10 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20 76  t that P3 is a v
23c20 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  alid memory cell
23c30 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72  . */.      asser
23c40 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
23c50 20 20 20 20 20 20 69 66 28 20 70 2d 3e 70 46 72        if( p->pFr
23c60 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20 20 66  ame ){.        f
23c70 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72  or(pFrame=p->pFr
23c80 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61  ame; pFrame->pPa
23c90 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72  rent; pFrame=pFr
23ca0 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20  ame->pParent);. 
23cb0 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74         /* Assert
23cc0 20 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61   that P3 is a va
23cd0 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e  lid memory cell.
23ce0 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65   */.        asse
23cf0 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 46 72  rt( pOp->p3<=pFr
23d00 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20  ame->nMem );.   
23d10 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 70 46 72       pMem = &pFr
23d20 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70  ame->aMem[pOp->p
23d30 33 5d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  3];.      }else{
23d40 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65  .        /* Asse
23d50 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20  rt that P3 is a 
23d60 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c  valid memory cel
23d70 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73  l. */.        as
23d80 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28  sert( pOp->p3<=(
23d90 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
23da0 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
23db0 20 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b     pMem = &aMem[
23dc0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20  pOp->p3];.      
23dd0 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
23de0 67 65 28 70 2c 20 70 4d 65 6d 29 3b 0a 20 20 20  ge(p, pMem);.   
23df0 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72     }.      asser
23e00 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4d  t( memIsValid(pM
23e10 65 6d 29 20 29 3b 0a 0a 20 20 20 20 20 20 52 45  em) );..      RE
23e20 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
23e30 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20  ->p3, pMem);.   
23e40 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
23e50 6d 49 6e 74 65 67 65 72 69 66 79 28 70 4d 65 6d  mIntegerify(pMem
23e60 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
23e70 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20   (pMem->flags & 
23e80 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20  MEM_Int)!=0 );  
23e90 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73  /* mem(P3) holds
23ea0 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20   an integer */. 
23eb0 20 20 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e 75       if( pMem->u
23ec0 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 7c 7c  .i==MAX_ROWID ||
23ed0 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f   pC->useRandomRo
23ee0 77 69 64 20 29 7b 0a 20 20 20 20 20 20 20 20 72  wid ){.        r
23ef0 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b  c = SQLITE_FULL;
23f00 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 31 37 38     /* IMP: R-178
23f10 31 37 2d 30 30 36 33 30 20 2a 2f 0a 20 20 20 20  17-00630 */.    
23f20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
23f30 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
23f40 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 76     }.      if( v
23f50 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a  <pMem->u.i+1 ){.
23f60 20 20 20 20 20 20 20 20 76 20 3d 20 70 4d 65 6d          v = pMem
23f70 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20  ->u.i + 1;.     
23f80 20 7d 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75   }.      pMem->u
23f90 2e 69 20 3d 20 76 3b 0a 20 20 20 20 7d 0a 23 65  .i = v;.    }.#e
23fa0 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70 43 2d  ndif.    if( pC-
23fb0 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
23fc0 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50 4c  ){.      /* IMPL
23fd0 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52  EMENTATION-OF: R
23fe0 2d 30 37 36 37 37 2d 34 31 38 38 31 20 49 66 20  -07677-41881 If 
23ff0 74 68 65 20 6c 61 72 67 65 73 74 20 52 4f 57 49  the largest ROWI
24000 44 20 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68  D is equal to th
24010 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65  e.      ** large
24020 73 74 20 70 6f 73 73 69 62 6c 65 20 69 6e 74 65  st possible inte
24030 67 65 72 20 28 39 32 32 33 33 37 32 30 33 36 38  ger (92233720368
24040 35 34 37 37 35 38 30 37 29 20 74 68 65 6e 20 74  54775807) then t
24050 68 65 20 64 61 74 61 62 61 73 65 0a 20 20 20 20  he database.    
24060 20 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61 72    ** engine star
24070 74 73 20 70 69 63 6b 69 6e 67 20 70 6f 73 69 74  ts picking posit
24080 69 76 65 20 63 61 6e 64 69 64 61 74 65 20 52 4f  ive candidate RO
24090 57 49 44 73 20 61 74 20 72 61 6e 64 6f 6d 20 75  WIDs at random u
240a0 6e 74 69 6c 0a 20 20 20 20 20 20 2a 2a 20 69 74  ntil.      ** it
240b0 20 66 69 6e 64 73 20 6f 6e 65 20 74 68 61 74 20   finds one that 
240c0 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c  is not previousl
240d0 79 20 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20 20  y used. */.     
240e0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
240f0 3d 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20 63 61  ==0 );  /* We ca
24100 6e 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e 64 6f  nnot be in rando
24110 6d 20 72 6f 77 69 64 20 6d 6f 64 65 20 69 66 20  m rowid mode if 
24120 74 68 69 73 20 69 73 0a 20 20 20 20 20 20 20 20  this is.        
24130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24140 20 20 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f 49       ** an AUTOI
24150 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e 20  NCREMENT table. 
24160 2a 2f 0a 20 20 20 20 20 20 63 6e 74 20 3d 20 30  */.      cnt = 0
24170 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20  ;.      do{.    
24180 20 20 20 20 73 71 6c 69 74 65 33 5f 72 61 6e 64      sqlite3_rand
24190 6f 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28 76 29  omness(sizeof(v)
241a0 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20 76  , &v);.        v
241b0 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49 44 3e 3e   &= (MAX_ROWID>>
241c0 31 29 3b 20 76 2b 2b 3b 20 20 2f 2a 20 45 6e 73  1); v++;  /* Ens
241d0 75 72 65 20 74 68 61 74 20 76 20 69 73 20 67 72  ure that v is gr
241e0 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 20  eater than zero 
241f0 2a 2f 0a 20 20 20 20 20 20 7d 77 68 69 6c 65 28  */.      }while(
24200 20 20 28 28 72 63 20 3d 20 73 71 6c 69 74 65 33    ((rc = sqlite3
24210 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
24220 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  ked(pC->uc.pCurs
24230 6f 72 2c 20 30 2c 20 28 75 36 34 29 76 2c 0a 20  or, 0, (u64)v,. 
24240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24270 30 2c 20 26 72 65 73 29 29 3d 3d 53 51 4c 49 54  0, &res))==SQLIT
24280 45 5f 4f 4b 29 0a 20 20 20 20 20 20 20 20 20 20  E_OK).          
24290 20 20 26 26 20 28 72 65 73 3d 3d 30 29 0a 20 20    && (res==0).  
242a0 20 20 20 20 20 20 20 20 20 20 26 26 20 28 2b 2b            && (++
242b0 63 6e 74 3c 31 30 30 29 29 3b 0a 20 20 20 20 20  cnt<100));.     
242c0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
242d0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
242e0 72 3b 0a 20 20 20 20 20 20 69 66 28 20 72 65 73  r;.      if( res
242f0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ==0 ){.        r
24300 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b  c = SQLITE_FULL;
24310 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 38 32     /* IMP: R-382
24320 31 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20 20 20  19-53002 */.    
24330 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
24340 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
24350 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72     }.      asser
24360 74 28 20 76 3e 30 20 29 3b 20 20 2f 2a 20 45 56  t( v>0 );  /* EV
24370 3a 20 52 2d 34 30 38 31 32 2d 30 33 35 37 30 20  : R-40812-03570 
24380 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d  */.    }.    pC-
24390 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
243a0 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  = 0;.    pC->cac
243b0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
243c0 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f  _STALE;.  }.  pO
243d0 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62  ut->u.i = v;.  b
243e0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
243f0 64 65 3a 20 49 6e 73 65 72 74 20 50 31 20 50 32  de: Insert P1 P2
24400 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
24410 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b  opsis: intkey=r[
24420 50 33 5d 20 64 61 74 61 3d 72 5b 50 32 5d 0a 2a  P3] data=r[P2].*
24430 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e 20 65 6e  *.** Write an en
24440 74 72 79 20 69 6e 74 6f 20 74 68 65 20 74 61 62  try into the tab
24450 6c 65 20 6f 66 20 63 75 72 73 6f 72 20 50 31 2e  le of cursor P1.
24460 20 20 41 20 6e 65 77 20 65 6e 74 72 79 20 69 73    A new entry is
24470 0a 2a 2a 20 63 72 65 61 74 65 64 20 69 66 20 69  .** created if i
24480 74 20 64 6f 65 73 6e 27 74 20 61 6c 72 65 61 64  t doesn't alread
24490 79 20 65 78 69 73 74 20 6f 72 20 74 68 65 20 64  y exist or the d
244a0 61 74 61 20 66 6f 72 20 61 6e 20 65 78 69 73 74  ata for an exist
244b0 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20  ing.** entry is 
244c0 6f 76 65 72 77 72 69 74 74 65 6e 2e 20 20 54 68  overwritten.  Th
244d0 65 20 64 61 74 61 20 69 73 20 74 68 65 20 76 61  e data is the va
244e0 6c 75 65 20 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f  lue MEM_Blob sto
244f0 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a  red in register.
24500 2a 2a 20 6e 75 6d 62 65 72 20 50 32 2e 20 54 68  ** number P2. Th
24510 65 20 6b 65 79 20 69 73 20 73 74 6f 72 65 64 20  e key is stored 
24520 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20  in register P3. 
24530 54 68 65 20 6b 65 79 20 6d 75 73 74 0a 2a 2a 20  The key must.** 
24540 62 65 20 61 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a  be a MEM_Int..**
24550 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
24560 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f  G_NCHANGE flag o
24570 66 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65  f P5 is set, the
24580 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65  n the row change
24590 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63   count is.** inc
245a0 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77  remented (otherw
245b0 69 73 65 20 6e 6f 74 29 2e 20 20 49 66 20 74 68  ise not).  If th
245c0 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57  e OPFLAG_LASTROW
245d0 49 44 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73  ID flag of P5 is
245e0 20 73 65 74 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f   set,.** then ro
245f0 77 69 64 20 69 73 20 73 74 6f 72 65 64 20 66 6f  wid is stored fo
24600 72 20 73 75 62 73 65 71 75 65 6e 74 20 72 65 74  r subsequent ret
24610 75 72 6e 20 62 79 20 74 68 65 0a 2a 2a 20 73 71  urn by the.** sq
24620 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72  lite3_last_inser
24630 74 5f 72 6f 77 69 64 28 29 20 66 75 6e 63 74 69  t_rowid() functi
24640 6f 6e 20 28 6f 74 68 65 72 77 69 73 65 20 69 74  on (otherwise it
24650 20 69 73 20 75 6e 6d 6f 64 69 66 69 65 64 29 2e   is unmodified).
24660 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
24670 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
24680 4c 54 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73  LT flag of P5 is
24690 20 73 65 74 2c 20 74 68 65 20 69 6d 70 6c 65 6d   set, the implem
246a0 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68 74 0a 2a  entation might.*
246b0 2a 20 72 75 6e 20 66 61 73 74 65 72 20 62 79 20  * run faster by 
246c0 61 76 6f 69 64 69 6e 67 20 61 6e 20 75 6e 6e 65  avoiding an unne
246d0 63 65 73 73 61 72 79 20 73 65 65 6b 20 6f 6e 20  cessary seek on 
246e0 63 75 72 73 6f 72 20 50 31 2e 20 20 48 6f 77 65  cursor P1.  Howe
246f0 76 65 72 2c 0a 2a 2a 20 74 68 65 20 4f 50 46 4c  ver,.** the OPFL
24700 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
24710 20 66 6c 61 67 20 6d 75 73 74 20 6f 6e 6c 79 20   flag must only 
24720 62 65 20 73 65 74 20 69 66 20 74 68 65 72 65 20  be set if there 
24730 68 61 76 65 20 62 65 65 6e 20 6e 6f 20 70 72 69  have been no pri
24740 6f 72 0a 2a 2a 20 73 65 65 6b 73 20 6f 6e 20 74  or.** seeks on t
24750 68 65 20 63 75 72 73 6f 72 20 6f 72 20 69 66 20  he cursor or if 
24760 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  the most recent 
24770 73 65 65 6b 20 75 73 65 64 20 61 20 6b 65 79 20  seek used a key 
24780 65 71 75 61 6c 20 74 6f 20 50 33 2e 0a 2a 2a 0a  equal to P3..**.
24790 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
247a0 5f 49 53 55 50 44 41 54 45 20 66 6c 61 67 20 69  _ISUPDATE flag i
247b0 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 69 73  s set, then this
247c0 20 6f 70 63 6f 64 65 20 69 73 20 70 61 72 74 20   opcode is part 
247d0 6f 66 20 61 6e 0a 2a 2a 20 55 50 44 41 54 45 20  of an.** UPDATE 
247e0 6f 70 65 72 61 74 69 6f 6e 2e 20 20 4f 74 68 65  operation.  Othe
247f0 72 77 69 73 65 20 28 69 66 20 74 68 65 20 66 6c  rwise (if the fl
24800 61 67 20 69 73 20 63 6c 65 61 72 29 20 74 68 65  ag is clear) the
24810 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 0a 2a 2a  n this opcode.**
24820 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e 20 49   is part of an I
24830 4e 53 45 52 54 20 6f 70 65 72 61 74 69 6f 6e 2e  NSERT operation.
24840 20 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65    The difference
24850 20 69 73 20 6f 6e 6c 79 20 69 6d 70 6f 72 74 61   is only importa
24860 6e 74 20 74 6f 0a 2a 2a 20 74 68 65 20 75 70 64  nt to.** the upd
24870 61 74 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20  ate hook..**.** 
24880 50 61 72 61 6d 65 74 65 72 20 50 34 20 6d 61 79  Parameter P4 may
24890 20 70 6f 69 6e 74 20 74 6f 20 61 20 54 61 62 6c   point to a Tabl
248a0 65 20 73 74 72 75 63 74 75 72 65 2c 20 6f 72 20  e structure, or 
248b0 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20  may be NULL. If 
248c0 69 74 20 69 73 20 0a 2a 2a 20 6e 6f 74 20 4e 55  it is .** not NU
248d0 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 75 70 64  LL, then the upd
248e0 61 74 65 2d 68 6f 6f 6b 20 28 73 71 6c 69 74 65  ate-hook (sqlite
248f0 33 2e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  3.xUpdateCallbac
24900 6b 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 0a 2a  k) is invoked .*
24910 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75  * following a su
24920 63 63 65 73 73 66 75 6c 20 69 6e 73 65 72 74 2e  ccessful insert.
24930 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e 47 2f  .**.** (WARNING/
24940 54 4f 44 4f 3a 20 49 66 20 50 31 20 69 73 20 61  TODO: If P1 is a
24950 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 20 61   pseudo-cursor a
24960 6e 64 20 50 32 20 69 73 20 64 79 6e 61 6d 69 63  nd P2 is dynamic
24970 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65  ally.** allocate
24980 64 2c 20 74 68 65 6e 20 6f 77 6e 65 72 73 68 69  d, then ownershi
24990 70 20 6f 66 20 50 32 20 69 73 20 74 72 61 6e 73  p of P2 is trans
249a0 66 65 72 72 65 64 20 74 6f 20 74 68 65 20 70 73  ferred to the ps
249b0 65 75 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20 61  eudo-cursor.** a
249c0 6e 64 20 72 65 67 69 73 74 65 72 20 50 32 20 62  nd register P2 b
249d0 65 63 6f 6d 65 73 20 65 70 68 65 6d 65 72 61 6c  ecomes ephemeral
249e0 2e 20 20 49 66 20 74 68 65 20 63 75 72 73 6f 72  .  If the cursor
249f0 20 69 73 20 63 68 61 6e 67 65 64 2c 20 74 68 65   is changed, the
24a00 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 72 65 67  .** value of reg
24a10 69 73 74 65 72 20 50 32 20 77 69 6c 6c 20 74 68  ister P2 will th
24a20 65 6e 20 63 68 61 6e 67 65 2e 20 20 4d 61 6b 65  en change.  Make
24a30 20 73 75 72 65 20 74 68 69 73 20 64 6f 65 73 20   sure this does 
24a40 6e 6f 74 0a 2a 2a 20 63 61 75 73 65 20 61 6e 79  not.** cause any
24a50 20 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a   problems.).**.*
24a60 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
24a70 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e  on only works on
24a80 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 65 71   tables.  The eq
24a90 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63  uivalent instruc
24aa0 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64 69  tion.** for indi
24ab0 63 65 73 20 69 73 20 4f 50 5f 49 64 78 49 6e 73  ces is OP_IdxIns
24ac0 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ert..*/./* Opcod
24ad0 65 3a 20 49 6e 73 65 72 74 49 6e 74 20 50 31 20  e: InsertInt P1 
24ae0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
24af0 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d  ynopsis: intkey=
24b00 50 33 20 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a  P3 data=r[P2].**
24b10 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 65  .** This works e
24b20 78 61 63 74 6c 79 20 6c 69 6b 65 20 4f 50 5f 49  xactly like OP_I
24b30 6e 73 65 72 74 20 65 78 63 65 70 74 20 74 68 61  nsert except tha
24b40 74 20 74 68 65 20 6b 65 79 20 69 73 20 74 68 65  t the key is the
24b50 0a 2a 2a 20 69 6e 74 65 67 65 72 20 76 61 6c 75  .** integer valu
24b60 65 20 50 33 2c 20 6e 6f 74 20 74 68 65 20 76 61  e P3, not the va
24b70 6c 75 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67  lue of the integ
24b80 65 72 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  er stored in reg
24b90 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73  ister P3..*/.cas
24ba0 65 20 4f 50 5f 49 6e 73 65 72 74 3a 20 0a 63 61  e OP_Insert: .ca
24bb0 73 65 20 4f 50 5f 49 6e 73 65 72 74 49 6e 74 3a  se OP_InsertInt:
24bc0 20 7b 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 3b   {.  Mem *pData;
24bd0 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65         /* MEM ce
24be0 6c 6c 20 68 6f 6c 64 69 6e 67 20 64 61 74 61 20  ll holding data 
24bf0 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 74  for the record t
24c00 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f  o be inserted */
24c10 0a 20 20 4d 65 6d 20 2a 70 4b 65 79 3b 20 20 20  .  Mem *pKey;   
24c20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c       /* MEM cell
24c30 20 68 6f 6c 64 69 6e 67 20 6b 65 79 20 20 66 6f   holding key  fo
24c40 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  r the record */.
24c50 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
24c60 3b 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 74 6f  ;   /* Cursor to
24c70 20 74 61 62 6c 65 20 69 6e 74 6f 20 77 68 69 63   table into whic
24c80 68 20 69 6e 73 65 72 74 20 69 73 20 77 72 69 74  h insert is writ
24c90 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 73 65 65  ten */.  int see
24ca0 6b 52 65 73 75 6c 74 3b 20 20 20 2f 2a 20 52 65  kResult;   /* Re
24cb0 73 75 6c 74 20 6f 66 20 70 72 69 6f 72 20 73 65  sult of prior se
24cc0 65 6b 20 6f 72 20 30 20 69 66 20 6e 6f 20 55 53  ek or 0 if no US
24cd0 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67  ESEEKRESULT flag
24ce0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
24cf0 20 2a 7a 44 62 3b 20 20 2f 2a 20 64 61 74 61 62   *zDb;  /* datab
24d00 61 73 65 20 6e 61 6d 65 20 2d 20 75 73 65 64 20  ase name - used 
24d10 62 79 20 74 68 65 20 75 70 64 61 74 65 20 68 6f  by the update ho
24d20 6f 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  ok */.  Table *p
24d30 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 61 62  Tab;      /* Tab
24d40 6c 65 20 73 74 72 75 63 74 75 72 65 20 2d 20 75  le structure - u
24d50 73 65 64 20 62 79 20 75 70 64 61 74 65 20 61 6e  sed by update an
24d60 64 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f  d pre-update hoo
24d70 6b 73 20 2a 2f 0a 20 20 69 6e 74 20 6f 70 3b 20  ks */.  int op; 
24d80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 63            /* Opc
24d90 6f 64 65 20 66 6f 72 20 75 70 64 61 74 65 20 68  ode for update h
24da0 6f 6f 6b 3a 20 53 51 4c 49 54 45 5f 55 50 44 41  ook: SQLITE_UPDA
24db0 54 45 20 6f 72 20 53 51 4c 49 54 45 5f 49 4e 53  TE or SQLITE_INS
24dc0 45 52 54 20 2a 2f 0a 20 20 42 74 72 65 65 50 61  ERT */.  BtreePa
24dd0 79 6c 6f 61 64 20 78 3b 20 20 20 2f 2a 20 50 61  yload x;   /* Pa
24de0 79 6c 6f 61 64 20 74 6f 20 62 65 20 69 6e 73 65  yload to be inse
24df0 72 74 65 64 20 2a 2f 0a 0a 20 20 6f 70 20 3d 20  rted */..  op = 
24e00 30 3b 0a 20 20 70 44 61 74 61 20 3d 20 26 61 4d  0;.  pData = &aM
24e10 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
24e20 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
24e30 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
24e40 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
24e50 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
24e60 70 44 61 74 61 29 20 29 3b 0a 20 20 70 43 20 3d  pData) );.  pC =
24e70 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
24e80 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
24e90 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
24ea0 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
24eb0 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
24ec0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63    assert( pC->uc
24ed0 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  .pCursor!=0 );. 
24ee0 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70   assert( (pOp->p
24ef0 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f  5 & OPFLAG_ISNOO
24f00 50 29 20 7c 7c 20 70 43 2d 3e 69 73 54 61 62 6c  P) || pC->isTabl
24f10 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  e );.  assert( p
24f20 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54  Op->p4type==P4_T
24f30 41 42 4c 45 20 7c 7c 20 70 4f 70 2d 3e 70 34 74  ABLE || pOp->p4t
24f40 79 70 65 3e 3d 50 34 5f 53 54 41 54 49 43 20 29  ype>=P4_STATIC )
24f50 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
24f60 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74  CE(pOp->p2, pDat
24f70 61 29 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e  a);..  if( pOp->
24f80 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72  opcode==OP_Inser
24f90 74 20 29 7b 0a 20 20 20 20 70 4b 65 79 20 3d 20  t ){.    pKey = 
24fa0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
24fb0 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79      assert( pKey
24fc0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
24fd0 74 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  t );.    assert(
24fe0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4b 65 79   memIsValid(pKey
24ff0 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  ) );.    REGISTE
25000 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
25010 20 70 4b 65 79 29 3b 0a 20 20 20 20 78 2e 6e 4b   pKey);.    x.nK
25020 65 79 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a  ey = pKey->u.i;.
25030 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
25040 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
25050 3d 3d 4f 50 5f 49 6e 73 65 72 74 49 6e 74 20 29  ==OP_InsertInt )
25060 3b 0a 20 20 20 20 78 2e 6e 4b 65 79 20 3d 20 70  ;.    x.nKey = p
25070 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69  Op->p3;.  }..  i
25080 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
25090 50 34 5f 54 41 42 4c 45 20 26 26 20 48 41 53 5f  P4_TABLE && HAS_
250a0 55 50 44 41 54 45 5f 48 4f 4f 4b 28 64 62 29 20  UPDATE_HOOK(db) 
250b0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
250c0 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20  C->iDb>=0 );.   
250d0 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70   zDb = db->aDb[p
250e0 43 2d 3e 69 44 62 5d 2e 7a 44 62 53 4e 61 6d 65  C->iDb].zDbSName
250f0 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 70 4f 70  ;.    pTab = pOp
25100 2d 3e 70 34 2e 70 54 61 62 3b 0a 20 20 20 20 61  ->p4.pTab;.    a
25110 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20  ssert( (pOp->p5 
25120 26 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 29  & OPFLAG_ISNOOP)
25130 20 7c 7c 20 48 61 73 52 6f 77 69 64 28 70 54 61   || HasRowid(pTa
25140 62 29 20 29 3b 0a 20 20 20 20 6f 70 20 3d 20 28  b) );.    op = (
25150 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
25160 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53 51  G_ISUPDATE) ? SQ
25170 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53 51  LITE_UPDATE : SQ
25180 4c 49 54 45 5f 49 4e 53 45 52 54 29 3b 0a 20 20  LITE_INSERT);.  
25190 7d 65 6c 73 65 7b 0a 20 20 20 20 70 54 61 62 20  }else{.    pTab 
251a0 3d 20 30 3b 20 2f 2a 20 4e 6f 74 20 6e 65 65 64  = 0; /* Not need
251b0 65 64 2e 20 20 53 69 6c 65 6e 63 65 20 61 20 63  ed.  Silence a c
251c0 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e  ompiler warning.
251d0 20 2a 2f 0a 20 20 20 20 7a 44 62 20 3d 20 30 3b   */.    zDb = 0;
251e0 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e    /* Not needed.
251f0 20 20 53 69 6c 65 6e 63 65 20 61 20 63 6f 6d 70    Silence a comp
25200 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f  iler warning. */
25210 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c  .  }..#ifdef SQL
25220 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50  ITE_ENABLE_PREUP
25230 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 2f 2a 20 49  DATE_HOOK.  /* I
25240 6e 76 6f 6b 65 20 74 68 65 20 70 72 65 2d 75 70  nvoke the pre-up
25250 64 61 74 65 20 68 6f 6f 6b 2c 20 69 66 20 61 6e  date hook, if an
25260 79 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78  y */.  if( db->x
25270 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
25280 6b 20 0a 20 20 20 26 26 20 70 4f 70 2d 3e 70 34  k .   && pOp->p4
25290 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 0a 20  type==P4_TABLE. 
252a0 20 20 26 26 20 21 28 70 4f 70 2d 3e 70 35 20 26    && !(pOp->p5 &
252b0 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45   OPFLAG_ISUPDATE
252c0 29 0a 20 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ).  ){.    sqlit
252d0 65 33 56 64 62 65 50 72 65 55 70 64 61 74 65 48  e3VdbePreUpdateH
252e0 6f 6f 6b 28 70 2c 20 70 43 2c 20 53 51 4c 49 54  ook(p, pC, SQLIT
252f0 45 5f 49 4e 53 45 52 54 2c 20 7a 44 62 2c 20 70  E_INSERT, zDb, p
25300 54 61 62 2c 20 78 2e 6e 4b 65 79 2c 20 70 4f 70  Tab, x.nKey, pOp
25310 2d 3e 70 32 29 3b 0a 20 20 7d 0a 20 20 69 66 28  ->p2);.  }.  if(
25320 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41   pOp->p5 & OPFLA
25330 47 5f 49 53 4e 4f 4f 50 20 29 20 62 72 65 61 6b  G_ISNOOP ) break
25340 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28 20  ;.#endif..  if( 
25350 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
25360 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43  _NCHANGE ) p->nC
25370 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70  hange++;.  if( p
25380 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
25390 4c 41 53 54 52 4f 57 49 44 20 29 20 64 62 2d 3e  LASTROWID ) db->
253a0 6c 61 73 74 52 6f 77 69 64 20 3d 20 78 2e 6e 4b  lastRowid = x.nK
253b0 65 79 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44  ey;.  assert( pD
253c0 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  ata->flags & (ME
253d0 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20  M_Blob|MEM_Str) 
253e0 29 3b 0a 20 20 78 2e 70 44 61 74 61 20 3d 20 70  );.  x.pData = p
253f0 44 61 74 61 2d 3e 7a 3b 0a 20 20 78 2e 6e 44 61  Data->z;.  x.nDa
25400 74 61 20 3d 20 70 44 61 74 61 2d 3e 6e 3b 0a 20  ta = pData->n;. 
25410 20 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 28 28   seekResult = ((
25420 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
25430 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20  _USESEEKRESULT) 
25440 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74  ? pC->seekResult
25450 20 3a 20 30 29 3b 0a 20 20 69 66 28 20 70 44 61   : 0);.  if( pDa
25460 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ta->flags & MEM_
25470 5a 65 72 6f 20 29 7b 0a 20 20 20 20 78 2e 6e 5a  Zero ){.    x.nZ
25480 65 72 6f 20 3d 20 70 44 61 74 61 2d 3e 75 2e 6e  ero = pData->u.n
25490 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  Zero;.  }else{. 
254a0 20 20 20 78 2e 6e 5a 65 72 6f 20 3d 20 30 3b 0a     x.nZero = 0;.
254b0 20 20 7d 0a 20 20 78 2e 70 4b 65 79 20 3d 20 30    }.  x.pKey = 0
254c0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
254d0 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d 3e  BtreeInsert(pC->
254e0 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 78 2c 0a  uc.pCursor, &x,.
254f0 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26        (pOp->p5 &
25500 20 28 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 7c   (OPFLAG_APPEND|
25510 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54  OPFLAG_SAVEPOSIT
25520 49 4f 4e 29 29 2c 20 73 65 65 6b 52 65 73 75 6c  ION)), seekResul
25530 74 0a 20 20 29 3b 0a 20 20 70 43 2d 3e 64 65 66  t.  );.  pC->def
25540 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
25550 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
25560 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
25570 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  ;..  /* Invoke t
25580 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69  he update-hook i
25590 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20  f required. */. 
255a0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
255b0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
255c0 72 3b 0a 20 20 69 66 28 20 64 62 2d 3e 78 55 70  r;.  if( db->xUp
255d0 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20  dateCallback && 
255e0 6f 70 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78 55  op ){.    db->xU
255f0 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62  pdateCallback(db
25600 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20 6f 70  ->pUpdateArg, op
25610 2c 20 7a 44 62 2c 20 70 54 61 62 2d 3e 7a 4e 61  , zDb, pTab->zNa
25620 6d 65 2c 20 78 2e 6e 4b 65 79 29 3b 0a 20 20 7d  me, x.nKey);.  }
25630 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
25640 4f 70 63 6f 64 65 3a 20 44 65 6c 65 74 65 20 50  Opcode: Delete P
25650 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
25660 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68 65 20 72  .** Delete the r
25670 65 63 6f 72 64 20 61 74 20 77 68 69 63 68 20 74  ecord at which t
25680 68 65 20 50 31 20 63 75 72 73 6f 72 20 69 73 20  he P1 cursor is 
25690 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
256a0 6e 67 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ng..**.** If the
256b0 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49   OPFLAG_SAVEPOSI
256c0 54 49 4f 4e 20 62 69 74 20 6f 66 20 74 68 65 20  TION bit of the 
256d0 50 35 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  P5 parameter is 
256e0 73 65 74 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65  set, then.** the
256f0 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 20   cursor will be 
25700 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
25710 20 20 65 69 74 68 65 72 20 74 68 65 20 6e 65 78    either the nex
25720 74 20 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75  t or the previou
25730 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20 74  s.** record in t
25740 68 65 20 74 61 62 6c 65 2e 20 49 66 20 69 74 20  he table. If it 
25750 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67  is left pointing
25760 20 61 74 20 74 68 65 20 6e 65 78 74 20 72 65 63   at the next rec
25770 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65  ord, then.** the
25780 20 6e 65 78 74 20 4e 65 78 74 20 69 6e 73 74 72   next Next instr
25790 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61  uction will be a
257a0 20 6e 6f 2d 6f 70 2e 20 41 73 20 61 20 72 65 73   no-op. As a res
257b0 75 6c 74 2c 20 69 6e 20 74 68 69 73 20 63 61 73  ult, in this cas
257c0 65 0a 2a 2a 20 69 74 20 69 73 20 6f 6b 20 74 6f  e.** it is ok to
257d0 20 64 65 6c 65 74 65 20 61 20 72 65 63 6f 72 64   delete a record
257e0 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 4e   from within a N
257f0 65 78 74 20 6c 6f 6f 70 2e 20 49 66 20 0a 2a 2a  ext loop. If .**
25800 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49   OPFLAG_SAVEPOSI
25810 54 49 4f 4e 20 62 69 74 20 6f 66 20 50 35 20 69  TION bit of P5 i
25820 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 74 68  s clear, then th
25830 65 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65  e cursor will be
25840 0a 2a 2a 20 6c 65 66 74 20 69 6e 20 61 6e 20 75  .** left in an u
25850 6e 64 65 66 69 6e 65 64 20 73 74 61 74 65 2e 0a  ndefined state..
25860 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
25870 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20 62 69  LAG_AUXDELETE bi
25880 74 20 69 73 20 73 65 74 20 6f 6e 20 50 35 2c 20  t is set on P5, 
25890 74 68 61 74 20 69 6e 64 69 63 61 74 65 73 20 74  that indicates t
258a0 68 61 74 20 74 68 69 73 0a 2a 2a 20 64 65 6c 65  hat this.** dele
258b0 74 65 20 6f 6e 65 20 6f 66 20 73 65 76 65 72 61  te one of severa
258c0 6c 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  l associated wit
258d0 68 20 64 65 6c 65 74 69 6e 67 20 61 20 74 61 62  h deleting a tab
258e0 6c 65 20 72 6f 77 20 61 6e 64 20 61 6c 6c 20 69  le row and all i
258f0 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64  ts.** associated
25900 20 69 6e 64 65 78 20 65 6e 74 72 69 65 73 2e 20   index entries. 
25910 20 45 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66 20   Exactly one of 
25920 74 68 6f 73 65 20 64 65 6c 65 74 65 73 20 69 73  those deletes is
25930 20 74 68 65 20 22 70 72 69 6d 61 72 79 22 0a 2a   the "primary".*
25940 2a 20 64 65 6c 65 74 65 2e 20 20 54 68 65 20 6f  * delete.  The o
25950 74 68 65 72 73 20 61 72 65 20 61 6c 6c 20 6f 6e  thers are all on
25960 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54   OPFLAG_FORDELET
25970 45 20 63 75 72 73 6f 72 73 20 6f 72 20 65 6c 73  E cursors or els
25980 65 20 61 72 65 0a 2a 2a 20 6d 61 72 6b 65 64 20  e are.** marked 
25990 77 69 74 68 20 74 68 65 20 41 55 58 44 45 4c 45  with the AUXDELE
259a0 54 45 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 49  TE flag..**.** I
259b0 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48  f the OPFLAG_NCH
259c0 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 32 20  ANGE flag of P2 
259d0 28 4e 42 3a 20 50 32 20 6e 6f 74 20 50 35 29 20  (NB: P2 not P5) 
259e0 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65  is set, then the
259f0 20 72 6f 77 0a 2a 2a 20 63 68 61 6e 67 65 20 63   row.** change c
25a00 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e  ount is incremen
25a10 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e  ted (otherwise n
25a20 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75  ot)..**.** P1 mu
25a30 73 74 20 6e 6f 74 20 62 65 20 70 73 65 75 64 6f  st not be pseudo
25a40 2d 74 61 62 6c 65 2e 20 20 49 74 20 68 61 73 20  -table.  It has 
25a50 74 6f 20 62 65 20 61 20 72 65 61 6c 20 74 61 62  to be a real tab
25a60 6c 65 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69  le with.** multi
25a70 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20  ple rows..**.** 
25a80 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c  If P4 is not NUL
25a90 4c 20 74 68 65 6e 20 69 74 20 70 6f 69 6e 74 73  L then it points
25aa0 20 74 6f 20 61 20 54 61 62 6c 65 20 6f 62 6a 65   to a Table obje
25ab0 63 74 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  ct. In this case
25ac0 20 65 69 74 68 65 72 20 0a 2a 2a 20 74 68 65 20   either .** the 
25ad0 75 70 64 61 74 65 20 6f 72 20 70 72 65 2d 75 70  update or pre-up
25ae0 64 61 74 65 20 68 6f 6f 6b 2c 20 6f 72 20 62 6f  date hook, or bo
25af0 74 68 2c 20 6d 61 79 20 62 65 20 69 6e 76 6f 6b  th, may be invok
25b00 65 64 2e 20 54 68 65 20 50 31 20 63 75 72 73 6f  ed. The P1 curso
25b10 72 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20 62  r must.** have b
25b20 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64 20 75  een positioned u
25b30 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64  sing OP_NotFound
25b40 20 70 72 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69   prior to invoki
25b50 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69  ng this opcode i
25b60 6e 20 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 2e  n .** this case.
25b70 20 53 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 69   Specifically, i
25b80 66 20 6f 6e 65 20 69 73 20 63 6f 6e 66 69 67 75  f one is configu
25b90 72 65 64 2c 20 74 68 65 20 70 72 65 2d 75 70 64  red, the pre-upd
25ba0 61 74 65 20 68 6f 6f 6b 20 69 73 20 0a 2a 2a 20  ate hook is .** 
25bb0 69 6e 76 6f 6b 65 64 20 69 66 20 50 34 20 69 73  invoked if P4 is
25bc0 20 6e 6f 74 20 4e 55 4c 4c 2e 20 54 68 65 20 75   not NULL. The u
25bd0 70 64 61 74 65 2d 68 6f 6f 6b 20 69 73 20 69 6e  pdate-hook is in
25be0 76 6f 6b 65 64 20 69 66 20 6f 6e 65 20 69 73 20  voked if one is 
25bf0 63 6f 6e 66 69 67 75 72 65 64 2c 20 0a 2a 2a 20  configured, .** 
25c00 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20  P4 is not NULL, 
25c10 61 6e 64 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e  and the OPFLAG_N
25c20 43 48 41 4e 47 45 20 66 6c 61 67 20 69 73 20 73  CHANGE flag is s
25c30 65 74 20 69 6e 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  et in P2..**.** 
25c40 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53  If the OPFLAG_IS
25c50 55 50 44 41 54 45 20 66 6c 61 67 20 69 73 20 73  UPDATE flag is s
25c60 65 74 20 69 6e 20 50 32 2c 20 74 68 65 6e 20 50  et in P2, then P
25c70 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61  3 contains the a
25c80 64 64 72 65 73 73 0a 2a 2a 20 6f 66 20 74 68 65  ddress.** of the
25c90 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
25ca0 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 76  t contains the v
25cb0 61 6c 75 65 20 74 68 61 74 20 74 68 65 20 72 6f  alue that the ro
25cc0 77 69 64 20 6f 66 20 74 68 65 20 72 6f 77 20 77  wid of the row w
25cd0 69 6c 6c 0a 2a 2a 20 62 65 20 73 65 74 20 74 6f  ill.** be set to
25ce0 20 62 79 20 74 68 65 20 75 70 64 61 74 65 2e 0a   by the update..
25cf0 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 6c 65 74  */.case OP_Delet
25d00 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  e: {.  VdbeCurso
25d10 72 20 2a 70 43 3b 0a 20 20 63 6f 6e 73 74 20 63  r *pC;.  const c
25d20 68 61 72 20 2a 7a 44 62 3b 0a 20 20 54 61 62 6c  har *zDb;.  Tabl
25d30 65 20 2a 70 54 61 62 3b 0a 20 20 69 6e 74 20 6f  e *pTab;.  int o
25d40 70 66 6c 61 67 73 3b 0a 0a 20 20 6f 70 66 6c 61  pflags;..  opfla
25d50 67 73 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  gs = pOp->p2;.  
25d60 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
25d70 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
25d80 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
25d90 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
25da0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
25db0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
25dc0 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
25dd0 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
25de0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
25df0 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  uc.pCursor!=0 );
25e00 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64  .  assert( pC->d
25e10 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
25e20 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49   );..#ifdef SQLI
25e30 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70  TE_DEBUG.  if( p
25e40 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54  Op->p4type==P4_T
25e50 41 42 4c 45 20 26 26 20 48 61 73 52 6f 77 69 64  ABLE && HasRowid
25e60 28 70 4f 70 2d 3e 70 34 2e 70 54 61 62 29 20 26  (pOp->p4.pTab) &
25e70 26 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 7b 0a  & pOp->p5==0 ){.
25e80 20 20 20 20 2f 2a 20 49 66 20 70 35 20 69 73 20      /* If p5 is 
25e90 7a 65 72 6f 2c 20 74 68 65 20 73 65 65 6b 20 6f  zero, the seek o
25ea0 70 65 72 61 74 69 6f 6e 20 74 68 61 74 20 70 6f  peration that po
25eb0 73 69 74 69 6f 6e 65 64 20 74 68 65 20 63 75 72  sitioned the cur
25ec0 73 6f 72 20 70 72 69 6f 72 20 74 6f 0a 20 20 20  sor prior to.   
25ed0 20 2a 2a 20 4f 50 5f 44 65 6c 65 74 65 20 77 69   ** OP_Delete wi
25ee0 6c 6c 20 68 61 76 65 20 61 6c 73 6f 20 73 65 74  ll have also set
25ef0 20 74 68 65 20 70 43 2d 3e 6d 6f 76 65 74 6f 54   the pC->movetoT
25f00 61 72 67 65 74 20 66 69 65 6c 64 20 74 6f 20 74  arget field to t
25f10 68 65 20 72 6f 77 69 64 20 6f 66 0a 20 20 20 20  he rowid of.    
25f20 2a 2a 20 74 68 65 20 72 6f 77 20 74 68 61 74 20  ** the row that 
25f30 69 73 20 62 65 69 6e 67 20 64 65 6c 65 74 65 64  is being deleted
25f40 20 2a 2f 0a 20 20 20 20 69 36 34 20 69 4b 65 79   */.    i64 iKey
25f50 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
25f60 6e 74 65 67 65 72 4b 65 79 28 70 43 2d 3e 75 63  ntegerKey(pC->uc
25f70 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 61  .pCursor);.    a
25f80 73 73 65 72 74 28 20 70 43 2d 3e 6d 6f 76 65 74  ssert( pC->movet
25f90 6f 54 61 72 67 65 74 3d 3d 69 4b 65 79 20 29 3b  oTarget==iKey );
25fa0 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f  .  }.#endif..  /
25fb0 2a 20 49 66 20 74 68 65 20 75 70 64 61 74 65 2d  * If the update-
25fc0 68 6f 6f 6b 20 6f 72 20 70 72 65 2d 75 70 64 61  hook or pre-upda
25fd0 74 65 2d 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20  te-hook will be 
25fe0 69 6e 76 6f 6b 65 64 2c 20 73 65 74 20 7a 44 62  invoked, set zDb
25ff0 20 74 6f 0a 20 20 2a 2a 20 74 68 65 20 6e 61 6d   to.  ** the nam
26000 65 20 6f 66 20 74 68 65 20 64 62 20 74 6f 20 70  e of the db to p
26010 61 73 73 20 61 73 20 74 6f 20 69 74 2e 20 41 6c  ass as to it. Al
26020 73 6f 20 73 65 74 20 6c 6f 63 61 6c 20 70 54 61  so set local pTa
26030 62 20 74 6f 20 61 20 63 6f 70 79 0a 20 20 2a 2a  b to a copy.  **
26040 20 6f 66 20 70 34 2e 70 54 61 62 2e 20 46 69 6e   of p4.pTab. Fin
26050 61 6c 6c 79 2c 20 69 66 20 70 35 20 69 73 20 74  ally, if p5 is t
26060 72 75 65 2c 20 69 6e 64 69 63 61 74 69 6e 67 20  rue, indicating 
26070 74 68 61 74 20 74 68 69 73 20 63 75 72 73 6f 72  that this cursor
26080 20 77 61 73 0a 20 20 2a 2a 20 6c 61 73 74 20 6d   was.  ** last m
26090 6f 76 65 64 20 77 69 74 68 20 4f 50 5f 4e 65 78  oved with OP_Nex
260a0 74 20 6f 72 20 4f 50 5f 50 72 65 76 2c 20 6e 6f  t or OP_Prev, no
260b0 74 20 53 65 65 6b 20 6f 72 20 4e 6f 74 46 6f 75  t Seek or NotFou
260c0 6e 64 2c 20 73 65 74 20 0a 20 20 2a 2a 20 56 64  nd, set .  ** Vd
260d0 62 65 43 75 72 73 6f 72 2e 6d 6f 76 65 74 6f 54  beCursor.movetoT
260e0 61 72 67 65 74 20 74 6f 20 74 68 65 20 63 75 72  arget to the cur
260f0 72 65 6e 74 20 72 6f 77 69 64 2e 20 20 2a 2f 0a  rent rowid.  */.
26100 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
26110 65 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26 20 48  e==P4_TABLE && H
26120 41 53 5f 55 50 44 41 54 45 5f 48 4f 4f 4b 28 64  AS_UPDATE_HOOK(d
26130 62 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  b) ){.    assert
26140 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a  ( pC->iDb>=0 );.
26150 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
26160 3e 70 34 2e 70 54 61 62 21 3d 30 20 29 3b 0a 20  >p4.pTab!=0 );. 
26170 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62     zDb = db->aDb
26180 5b 70 43 2d 3e 69 44 62 5d 2e 7a 44 62 53 4e 61  [pC->iDb].zDbSNa
26190 6d 65 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 70  me;.    pTab = p
261a0 4f 70 2d 3e 70 34 2e 70 54 61 62 3b 0a 20 20 20  Op->p4.pTab;.   
261b0 20 69 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20   if( (pOp->p5 & 
261c0 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54  OPFLAG_SAVEPOSIT
261d0 49 4f 4e 29 21 3d 30 20 26 26 20 70 43 2d 3e 69  ION)!=0 && pC->i
261e0 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 20 20  sTable ){.      
261f0 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
26200 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
26210 6e 74 65 67 65 72 4b 65 79 28 70 43 2d 3e 75 63  ntegerKey(pC->uc
26220 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d  .pCursor);.    }
26230 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 7a 44  .  }else{.    zD
26240 62 20 3d 20 30 3b 20 20 20 2f 2a 20 4e 6f 74 20  b = 0;   /* Not 
26250 6e 65 65 64 65 64 2e 20 20 53 69 6c 65 6e 63 65  needed.  Silence
26260 20 61 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e   a compiler warn
26270 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 70 54 61 62  ing. */.    pTab
26280 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65   = 0;  /* Not ne
26290 65 64 65 64 2e 20 20 53 69 6c 65 6e 63 65 20 61  eded.  Silence a
262a0 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e   compiler warnin
262b0 67 2e 20 2a 2f 0a 20 20 7d 0a 0a 23 69 66 64 65  g. */.  }..#ifde
262c0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
262d0 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20  PREUPDATE_HOOK. 
262e0 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 70   /* Invoke the p
262f0 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69  re-update-hook i
26300 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20  f required. */. 
26310 20 69 66 28 20 64 62 2d 3e 78 50 72 65 55 70 64   if( db->xPreUpd
26320 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70  ateCallback && p
26330 4f 70 2d 3e 70 34 2e 70 54 61 62 20 29 7b 0a 20  Op->p4.pTab ){. 
26340 20 20 20 61 73 73 65 72 74 28 20 21 28 6f 70 66     assert( !(opf
26350 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 49 53  lags & OPFLAG_IS
26360 55 50 44 41 54 45 29 20 0a 20 20 20 20 20 20 20  UPDATE) .       
26370 20 20 7c 7c 20 48 61 73 52 6f 77 69 64 28 70 54    || HasRowid(pT
26380 61 62 29 3d 3d 30 20 0a 20 20 20 20 20 20 20 20  ab)==0 .        
26390 20 7c 7c 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70   || (aMem[pOp->p
263a0 33 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  3].flags & MEM_I
263b0 6e 74 29 20 0a 20 20 20 20 29 3b 0a 20 20 20 20  nt) .    );.    
263c0 73 71 6c 69 74 65 33 56 64 62 65 50 72 65 55 70  sqlite3VdbePreUp
263d0 64 61 74 65 48 6f 6f 6b 28 70 2c 20 70 43 2c 0a  dateHook(p, pC,.
263e0 20 20 20 20 20 20 20 20 28 6f 70 66 6c 61 67 73          (opflags
263f0 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41   & OPFLAG_ISUPDA
26400 54 45 29 20 3f 20 53 51 4c 49 54 45 5f 55 50 44  TE) ? SQLITE_UPD
26410 41 54 45 20 3a 20 53 51 4c 49 54 45 5f 44 45 4c  ATE : SQLITE_DEL
26420 45 54 45 2c 20 0a 20 20 20 20 20 20 20 20 7a 44  ETE, .        zD
26430 62 2c 20 70 54 61 62 2c 20 70 43 2d 3e 6d 6f 76  b, pTab, pC->mov
26440 65 74 6f 54 61 72 67 65 74 2c 0a 20 20 20 20 20  etoTarget,.     
26450 20 20 20 70 4f 70 2d 3e 70 33 0a 20 20 20 20 29     pOp->p3.    )
26460 3b 0a 20 20 7d 0a 20 20 69 66 28 20 6f 70 66 6c  ;.  }.  if( opfl
26470 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 49 53 4e  ags & OPFLAG_ISN
26480 4f 4f 50 20 29 20 62 72 65 61 6b 3b 0a 23 65 6e  OOP ) break;.#en
26490 64 69 66 0a 20 0a 20 20 2f 2a 20 4f 6e 6c 79 20  dif. .  /* Only 
264a0 66 6c 61 67 73 20 74 68 61 74 20 63 61 6e 20 62  flags that can b
264b0 65 20 73 65 74 20 61 72 65 20 53 41 56 45 50 4f  e set are SAVEPO
264c0 49 53 54 49 4f 4e 20 61 6e 64 20 41 55 58 44 45  ISTION and AUXDE
264d0 4c 45 54 45 20 2a 2f 20 0a 20 20 61 73 73 65 72  LETE */ .  asser
264e0 74 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 7e 28  t( (pOp->p5 & ~(
264f0 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54  OPFLAG_SAVEPOSIT
26500 49 4f 4e 7c 4f 50 46 4c 41 47 5f 41 55 58 44 45  ION|OPFLAG_AUXDE
26510 4c 45 54 45 29 29 3d 3d 30 20 29 3b 0a 20 20 61  LETE))==0 );.  a
26520 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 53 41  ssert( OPFLAG_SA
26530 56 45 50 4f 53 49 54 49 4f 4e 3d 3d 42 54 52 45  VEPOSITION==BTRE
26540 45 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 29  E_SAVEPOSITION )
26550 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c  ;.  assert( OPFL
26560 41 47 5f 41 55 58 44 45 4c 45 54 45 3d 3d 42 54  AG_AUXDELETE==BT
26570 52 45 45 5f 41 55 58 44 45 4c 45 54 45 20 29 3b  REE_AUXDELETE );
26580 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
26590 44 45 42 55 47 0a 20 20 69 66 28 20 70 2d 3e 70  DEBUG.  if( p->p
265a0 46 72 61 6d 65 3d 3d 30 20 29 7b 0a 20 20 20 20  Frame==0 ){.    
265b0 69 66 28 20 70 43 2d 3e 69 73 45 70 68 65 6d 65  if( pC->isEpheme
265c0 72 61 6c 3d 3d 30 0a 20 20 20 20 20 20 20 20 26  ral==0.        &
265d0 26 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  & (pOp->p5 & OPF
265e0 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 29 3d 3d  LAG_AUXDELETE)==
265f0 30 0a 20 20 20 20 20 20 20 20 26 26 20 28 70 43  0.        && (pC
26600 2d 3e 77 72 46 6c 61 67 20 26 20 4f 50 46 4c 41  ->wrFlag & OPFLA
26610 47 5f 46 4f 52 44 45 4c 45 54 45 29 3d 3d 30 0a  G_FORDELETE)==0.
26620 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 6e        ){.      n
26630 45 78 74 72 61 44 65 6c 65 74 65 2b 2b 3b 0a 20  ExtraDelete++;. 
26640 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 4f 70     }.    if( pOp
26650 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f 4e 43  ->p2 & OPFLAG_NC
26660 48 41 4e 47 45 20 29 7b 0a 20 20 20 20 20 20 6e  HANGE ){.      n
26670 45 78 74 72 61 44 65 6c 65 74 65 2d 2d 3b 0a 20  ExtraDelete--;. 
26680 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a     }.  }.#endif.
26690 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
266a0 74 72 65 65 44 65 6c 65 74 65 28 70 43 2d 3e 75  treeDelete(pC->u
266b0 63 2e 70 43 75 72 73 6f 72 2c 20 70 4f 70 2d 3e  c.pCursor, pOp->
266c0 70 35 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  p5);.  pC->cache
266d0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
266e0 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 73 65 65 6b  TALE;.  pC->seek
266f0 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20 69 66  Result = 0;.  if
26700 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
26710 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
26720 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
26730 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20   update-hook if 
26740 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69  required. */.  i
26750 66 28 20 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  f( opflags & OPF
26760 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 7b 0a 20  LAG_NCHANGE ){. 
26770 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b     p->nChange++;
26780 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78 55 70  .    if( db->xUp
26790 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20  dateCallback && 
267a0 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20 29  HasRowid(pTab) )
267b0 7b 0a 20 20 20 20 20 20 64 62 2d 3e 78 55 70 64  {.      db->xUpd
267c0 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e  ateCallback(db->
267d0 70 55 70 64 61 74 65 41 72 67 2c 20 53 51 4c 49  pUpdateArg, SQLI
267e0 54 45 5f 44 45 4c 45 54 45 2c 20 7a 44 62 2c 20  TE_DELETE, zDb, 
267f0 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20  pTab->zName,.   
26800 20 20 20 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74         pC->movet
26810 6f 54 61 72 67 65 74 29 3b 0a 20 20 20 20 20 20  oTarget);.      
26820 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e  assert( pC->iDb>
26830 3d 30 20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  =0 );.    }.  }.
26840 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f  .  break;.}./* O
26850 70 63 6f 64 65 3a 20 52 65 73 65 74 43 6f 75 6e  pcode: ResetCoun
26860 74 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  t * * * * *.**.*
26870 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 74  * The value of t
26880 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  he change counte
26890 72 20 69 73 20 63 6f 70 69 65 64 20 74 6f 20 74  r is copied to t
268a0 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
268b0 6c 65 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75  le.** change cou
268c0 6e 74 65 72 20 28 72 65 74 75 72 6e 65 64 20 62  nter (returned b
268d0 79 20 73 75 62 73 65 71 75 65 6e 74 20 63 61 6c  y subsequent cal
268e0 6c 73 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 68  ls to sqlite3_ch
268f0 61 6e 67 65 73 28 29 29 2e 0a 2a 2a 20 54 68 65  anges())..** The
26900 6e 20 74 68 65 20 56 4d 73 20 69 6e 74 65 72 6e  n the VMs intern
26910 61 6c 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  al change counte
26920 72 20 72 65 73 65 74 73 20 74 6f 20 30 2e 0a 2a  r resets to 0..*
26930 2a 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62  * This is used b
26940 79 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  y trigger progra
26950 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ms..*/.case OP_R
26960 65 73 65 74 43 6f 75 6e 74 3a 20 7b 0a 20 20 73  esetCount: {.  s
26970 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61  qlite3VdbeSetCha
26980 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61  nges(db, p->nCha
26990 6e 67 65 29 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e  nge);.  p->nChan
269a0 67 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b  ge = 0;.  break;
269b0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
269c0 6f 72 74 65 72 43 6f 6d 70 61 72 65 20 50 31 20  orterCompare P1 
269d0 50 32 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f  P2 P3 P4.** Syno
269e0 70 73 69 73 3a 20 69 66 20 6b 65 79 28 50 31 29  psis: if key(P1)
269f0 21 3d 74 72 69 6d 28 72 5b 50 33 5d 2c 50 34 29  !=trim(r[P3],P4)
26a00 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 50   goto P2.**.** P
26a10 31 20 69 73 20 61 20 73 6f 72 74 65 72 20 63 75  1 is a sorter cu
26a20 72 73 6f 72 2e 20 54 68 69 73 20 69 6e 73 74 72  rsor. This instr
26a30 75 63 74 69 6f 6e 20 63 6f 6d 70 61 72 65 73 20  uction compares 
26a40 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 0a  a prefix of the.
26a50 2a 2a 20 72 65 63 6f 72 64 20 62 6c 6f 62 20 69  ** record blob i
26a60 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 67  n register P3 ag
26a70 61 69 6e 73 74 20 61 20 70 72 65 66 69 78 20 6f  ainst a prefix o
26a80 66 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74  f the entry that
26a90 20 0a 2a 2a 20 74 68 65 20 73 6f 72 74 65 72 20   .** the sorter 
26aa0 63 75 72 73 6f 72 20 63 75 72 72 65 6e 74 6c 79  cursor currently
26ab0 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 4f 6e 6c   points to.  Onl
26ac0 79 20 74 68 65 20 66 69 72 73 74 20 50 34 20 66  y the first P4 f
26ad0 69 65 6c 64 73 0a 2a 2a 20 6f 66 20 72 5b 50 33  ields.** of r[P3
26ae0 5d 20 61 6e 64 20 74 68 65 20 73 6f 72 74 65 72  ] and the sorter
26af0 20 72 65 63 6f 72 64 20 61 72 65 20 63 6f 6d 70   record are comp
26b00 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65  ared..**.** If e
26b10 69 74 68 65 72 20 50 33 20 6f 72 20 74 68 65 20  ither P3 or the 
26b20 73 6f 72 74 65 72 20 63 6f 6e 74 61 69 6e 73 20  sorter contains 
26b30 61 20 4e 55 4c 4c 20 69 6e 20 6f 6e 65 20 6f 66  a NULL in one of
26b40 20 74 68 65 69 72 20 73 69 67 6e 69 66 69 63 61   their significa
26b50 6e 74 0a 2a 2a 20 66 69 65 6c 64 73 20 28 6e 6f  nt.** fields (no
26b60 74 20 63 6f 75 6e 74 69 6e 67 20 74 68 65 20 50  t counting the P
26b70 34 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20  4 fields at the 
26b80 65 6e 64 20 77 68 69 63 68 20 61 72 65 20 69 67  end which are ig
26b90 6e 6f 72 65 64 29 20 74 68 65 6e 0a 2a 2a 20 74  nored) then.** t
26ba0 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  he comparison is
26bb0 20 61 73 73 75 6d 65 64 20 74 6f 20 62 65 20 65   assumed to be e
26bc0 71 75 61 6c 2e 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c  qual..**.** Fall
26bd0 20 74 68 72 6f 75 67 68 20 74 6f 20 6e 65 78 74   through to next
26be0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 66 20   instruction if 
26bf0 74 68 65 20 74 77 6f 20 72 65 63 6f 72 64 73 20  the two records 
26c00 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 74 6f  compare equal to
26c10 0a 2a 2a 20 65 61 63 68 20 6f 74 68 65 72 2e 20  .** each other. 
26c20 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
26c30 68 65 79 20 61 72 65 20 64 69 66 66 65 72 65 6e  hey are differen
26c40 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  t..*/.case OP_So
26c50 72 74 65 72 43 6f 6d 70 61 72 65 3a 20 7b 0a 20  rterCompare: {. 
26c60 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
26c70 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e  .  int res;.  in
26c80 74 20 6e 4b 65 79 43 6f 6c 3b 0a 0a 20 20 70 43  t nKeyCol;..  pC
26c90 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
26ca0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
26cb0 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a  isSorter(pC) );.
26cc0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
26cd0 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
26ce0 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  );.  pIn3 = &aMe
26cf0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6e 4b  m[pOp->p3];.  nK
26d00 65 79 43 6f 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e  eyCol = pOp->p4.
26d10 69 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  i;.  res = 0;.  
26d20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
26d30 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 28 70 43  SorterCompare(pC
26d40 2c 20 70 49 6e 33 2c 20 6e 4b 65 79 43 6f 6c 2c  , pIn3, nKeyCol,
26d50 20 26 72 65 73 29 3b 0a 20 20 56 64 62 65 42 72   &res);.  VdbeBr
26d60 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
26d70 2c 32 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  ,2);.  if( rc ) 
26d80 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
26d90 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 72  o_error;.  if( r
26da0 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  es ) goto jump_t
26db0 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  o_p2;.  break;.}
26dc0 3b 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  ;../* Opcode: So
26dd0 72 74 65 72 44 61 74 61 20 50 31 20 50 32 20 50  rterData P1 P2 P
26de0 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
26df0 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a  s: r[P2]=data.**
26e00 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72  .** Write into r
26e10 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63  egister P2 the c
26e20 75 72 72 65 6e 74 20 73 6f 72 74 65 72 20 64 61  urrent sorter da
26e30 74 61 20 66 6f 72 20 73 6f 72 74 65 72 20 63 75  ta for sorter cu
26e40 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 6e  rsor P1..** Then
26e50 20 63 6c 65 61 72 20 74 68 65 20 63 6f 6c 75 6d   clear the colum
26e60 6e 20 68 65 61 64 65 72 20 63 61 63 68 65 20 6f  n header cache o
26e70 6e 20 63 75 72 73 6f 72 20 50 33 2e 0a 2a 2a 0a  n cursor P3..**.
26e80 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
26e90 73 20 6e 6f 72 6d 61 6c 6c 79 20 75 73 65 20 74  s normally use t
26ea0 6f 20 6d 6f 76 65 20 61 20 72 65 63 6f 72 64 20  o move a record 
26eb0 6f 75 74 20 6f 66 20 74 68 65 20 73 6f 72 74 65  out of the sorte
26ec0 72 20 61 6e 64 20 69 6e 74 6f 0a 2a 2a 20 61 20  r and into.** a 
26ed0 72 65 67 69 73 74 65 72 20 74 68 61 74 20 69 73  register that is
26ee0 20 74 68 65 20 73 6f 75 72 63 65 20 66 6f 72 20   the source for 
26ef0 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63  a pseudo-table c
26f00 75 72 73 6f 72 20 63 72 65 61 74 65 64 20 75 73  ursor created us
26f10 69 6e 67 0a 2a 2a 20 4f 70 65 6e 50 73 65 75 64  ing.** OpenPseud
26f20 6f 2e 20 20 54 68 61 74 20 70 73 65 75 64 6f 2d  o.  That pseudo-
26f30 74 61 62 6c 65 20 63 75 72 73 6f 72 20 69 73 20  table cursor is 
26f40 74 68 65 20 6f 6e 65 20 74 68 61 74 20 69 73 20  the one that is 
26f50 69 64 65 6e 74 69 66 69 65 64 20 62 79 0a 2a 2a  identified by.**
26f60 20 70 61 72 61 6d 65 74 65 72 20 50 33 2e 20 20   parameter P3.  
26f70 43 6c 65 61 72 69 6e 67 20 74 68 65 20 50 33 20  Clearing the P3 
26f80 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 61 73 20  column cache as 
26f90 70 61 72 74 20 6f 66 20 74 68 69 73 20 6f 70 63  part of this opc
26fa0 6f 64 65 20 73 61 76 65 73 0a 2a 2a 20 75 73 20  ode saves.** us 
26fb0 66 72 6f 6d 20 68 61 76 69 6e 67 20 74 6f 20 69  from having to i
26fc0 73 73 75 65 20 61 20 73 65 70 61 72 61 74 65 20  ssue a separate 
26fd0 4e 75 6c 6c 52 6f 77 20 69 6e 73 74 72 75 63 74  NullRow instruct
26fe0 69 6f 6e 20 74 6f 20 63 6c 65 61 72 20 74 68 61  ion to clear tha
26ff0 74 20 63 61 63 68 65 2e 0a 2a 2f 0a 63 61 73 65  t cache..*/.case
27000 20 4f 50 5f 53 6f 72 74 65 72 44 61 74 61 3a 20   OP_SorterData: 
27010 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
27020 70 43 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61  pC;..  pOut = &a
27030 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
27040 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
27050 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
27060 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
27070 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
27080 56 64 62 65 53 6f 72 74 65 72 52 6f 77 6b 65 79  VdbeSorterRowkey
27090 28 70 43 2c 20 70 4f 75 74 29 3b 0a 20 20 61 73  (pC, pOut);.  as
270a0 73 65 72 74 28 20 72 63 21 3d 53 51 4c 49 54 45  sert( rc!=SQLITE
270b0 5f 4f 4b 20 7c 7c 20 28 70 4f 75 74 2d 3e 66 6c  _OK || (pOut->fl
270c0 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 20  ags & MEM_Blob) 
270d0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
270e0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
270f0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
27100 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
27110 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
27120 72 6f 72 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b  ror;.  p->apCsr[
27130 70 4f 70 2d 3e 70 33 5d 2d 3e 63 61 63 68 65 53  pOp->p3]->cacheS
27140 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
27150 41 4c 45 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ALE;.  break;.}.
27160 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44  ./* Opcode: RowD
27170 61 74 61 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ata P1 P2 P3 * *
27180 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
27190 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57  P2]=data.**.** W
271a0 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74  rite into regist
271b0 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65  er P2 the comple
271c0 74 65 20 72 6f 77 20 63 6f 6e 74 65 6e 74 20 66  te row content f
271d0 6f 72 20 74 68 65 20 72 6f 77 20 61 74 20 0a 2a  or the row at .*
271e0 2a 20 77 68 69 63 68 20 63 75 72 73 6f 72 20 50  * which cursor P
271f0 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  1 is currently p
27200 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 20 54 68 65 72  ointing..** Ther
27210 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65  e is no interpre
27220 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61  tation of the da
27230 74 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a  ta.  .** It is j
27240 75 73 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20  ust copied onto 
27250 74 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20  the P2 register 
27260 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69  exactly as .** i
27270 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68  t is found in th
27280 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
27290 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  .**.** If cursor
272a0 20 50 31 20 69 73 20 61 6e 20 69 6e 64 65 78 2c   P1 is an index,
272b0 20 74 68 65 6e 20 74 68 65 20 63 6f 6e 74 65 6e   then the conten
272c0 74 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20  t is the key of 
272d0 74 68 65 20 72 6f 77 2e 0a 2a 2a 20 49 66 20 63  the row..** If c
272e0 75 72 73 6f 72 20 50 32 20 69 73 20 61 20 74 61  ursor P2 is a ta
272f0 62 6c 65 2c 20 74 68 65 6e 20 74 68 65 20 63 6f  ble, then the co
27300 6e 74 65 6e 74 20 65 78 74 72 61 63 74 65 64 20  ntent extracted 
27310 69 73 20 74 68 65 20 64 61 74 61 2e 0a 2a 2a 0a  is the data..**.
27320 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63 75 72  ** If the P1 cur
27330 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e  sor must be poin
27340 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20  ting to a valid 
27350 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20  row (not a NULL 
27360 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61  row).** of a rea
27370 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70  l table, not a p
27380 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a  seudo-table..**.
27390 2a 2a 20 49 66 20 50 33 21 3d 30 20 74 68 65 6e  ** If P3!=0 then
273a0 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   this opcode is 
273b0 61 6c 6c 6f 77 65 64 20 74 6f 20 6d 61 6b 65 20  allowed to make 
273c0 61 6e 20 65 70 68 65 72 6d 65 72 61 6c 20 70 6f  an ephermeral po
273d0 69 6e 74 65 72 0a 2a 2a 20 69 6e 74 6f 20 74 68  inter.** into th
273e0 65 20 64 61 74 61 62 61 73 65 20 70 61 67 65 2e  e database page.
273f0 20 20 54 68 61 74 20 6d 65 61 6e 73 20 74 68 61    That means tha
27400 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  t the content of
27410 20 74 68 65 20 6f 75 74 70 75 74 0a 2a 2a 20 72   the output.** r
27420 65 67 69 73 74 65 72 20 77 69 6c 6c 20 62 65 20  egister will be 
27430 69 6e 76 61 6c 69 64 61 74 65 64 20 61 73 20 73  invalidated as s
27440 6f 6f 6e 20 61 73 20 74 68 65 20 63 75 72 73 6f  oon as the curso
27450 72 20 6d 6f 76 65 73 20 2d 20 69 6e 63 6c 75 64  r moves - includ
27460 69 6e 67 0a 2a 2a 20 6d 6f 76 65 73 20 63 61 75  ing.** moves cau
27470 73 65 64 20 62 79 20 6f 74 68 65 72 20 63 75 72  sed by other cur
27480 73 6f 72 73 20 74 68 61 74 20 22 73 61 76 65 22  sors that "save"
27490 20 74 68 65 20 74 68 65 20 63 75 72 72 65 6e 74   the the current
274a0 20 63 75 72 73 6f 72 73 0a 2a 2a 20 70 6f 73 69   cursors.** posi
274b0 74 69 6f 6e 20 69 6e 20 6f 72 64 65 72 20 74 68  tion in order th
274c0 61 74 20 74 68 65 79 20 63 61 6e 20 77 72 69 74  at they can writ
274d0 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20 74 61  e to the same ta
274e0 62 6c 65 2e 20 20 49 66 20 50 33 3d 3d 30 0a 2a  ble.  If P3==0.*
274f0 2a 20 74 68 65 6e 20 61 20 63 6f 70 79 20 6f 66  * then a copy of
27500 20 74 68 65 20 64 61 74 61 20 69 73 20 6d 61 64   the data is mad
27510 65 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 2e 20 20  e into memory.  
27520 50 33 21 3d 30 20 69 73 20 66 61 73 74 65 72 2c  P3!=0 is faster,
27530 20 62 75 74 0a 2a 2a 20 50 33 3d 3d 30 20 69 73   but.** P3==0 is
27540 20 73 61 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 66   safer..**.** If
27550 20 50 33 21 3d 30 20 74 68 65 6e 20 74 68 65 20   P3!=0 then the 
27560 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 50  content of the P
27570 32 20 72 65 67 69 73 74 65 72 20 69 73 20 75 6e  2 register is un
27580 73 75 69 74 61 62 6c 65 20 66 6f 72 20 75 73 65  suitable for use
27590 0a 2a 2a 20 69 6e 20 4f 50 5f 52 65 73 75 6c 74  .** in OP_Result
275a0 20 61 6e 64 20 61 6e 79 20 4f 50 5f 52 65 73 75   and any OP_Resu
275b0 6c 74 20 77 69 6c 6c 20 69 6e 76 61 6c 69 64 61  lt will invalida
275c0 74 65 20 74 68 65 20 50 32 20 72 65 67 69 73 74  te the P2 regist
275d0 65 72 20 63 6f 6e 74 65 6e 74 2e 0a 2a 2a 20 54  er content..** T
275e0 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20 63  he P2 register c
275f0 6f 6e 74 65 6e 74 20 69 73 20 69 6e 76 61 6c 69  ontent is invali
27600 64 61 74 65 64 20 62 79 20 6f 70 63 6f 64 65 73  dated by opcodes
27610 20 6c 69 6b 65 20 4f 50 5f 46 75 6e 63 74 69 6f   like OP_Functio
27620 6e 20 6f 72 0a 2a 2a 20 62 79 20 61 6e 79 20 75  n or.** by any u
27630 73 65 20 6f 66 20 61 6e 6f 74 68 65 72 20 63 75  se of another cu
27640 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f  rsor pointing to
27650 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65 2e   the same table.
27660 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44  .*/.case OP_RowD
27670 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ata: {.  VdbeCur
27680 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
27690 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 75 33  sor *pCrsr;.  u3
276a0 32 20 6e 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f  2 n;..  pOut = o
276b0 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
276c0 20 70 4f 70 29 3b 0a 0a 20 20 61 73 73 65 72 74   pOp);..  assert
276d0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
276e0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
276f0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
27700 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
27710 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
27720 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
27730 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
27740 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73  PE_BTREE );.  as
27750 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
27760 43 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  C)==0 );.  asser
27770 74 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d  t( pC->nullRow==
27780 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
27790 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30  C->uc.pCursor!=0
277a0 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
277b0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 0a 20  ->uc.pCursor;.. 
277c0 20 2f 2a 20 54 68 65 20 4f 50 5f 52 6f 77 44 61   /* The OP_RowDa
277d0 74 61 20 6f 70 63 6f 64 65 73 20 61 6c 77 61 79  ta opcodes alway
277e0 73 20 66 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f 74 45  s follow OP_NotE
277f0 78 69 73 74 73 20 6f 72 0a 20 20 2a 2a 20 4f 50  xists or.  ** OP
27800 5f 53 65 65 6b 52 6f 77 69 64 20 6f 72 20 4f 50  _SeekRowid or OP
27810 5f 52 65 77 69 6e 64 2f 4f 70 5f 4e 65 78 74 20  _Rewind/Op_Next 
27820 77 69 74 68 20 6e 6f 20 69 6e 74 65 72 76 65 6e  with no interven
27830 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 73  ing instructions
27840 0a 20 20 2a 2a 20 74 68 61 74 20 6d 69 67 68 74  .  ** that might
27850 20 69 6e 76 61 6c 69 64 61 74 65 20 74 68 65 20   invalidate the 
27860 63 75 72 73 6f 72 2e 0a 20 20 2a 2a 20 49 66 20  cursor..  ** If 
27870 74 68 69 73 20 77 68 65 72 65 20 6e 6f 74 20 74  this where not t
27880 68 65 20 63 61 73 65 2c 20 6f 6e 20 6f 66 20 74  he case, on of t
27890 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 73 73  he following ass
278a0 65 72 74 28 29 73 0a 20 20 2a 2a 20 77 6f 75 6c  ert()s.  ** woul
278b0 64 20 66 61 69 6c 2e 20 20 53 68 6f 75 6c 64 20  d fail.  Should 
278c0 74 68 69 73 20 65 76 65 72 20 63 68 61 6e 67 65  this ever change
278d0 20 28 62 65 63 61 75 73 65 20 6f 66 20 63 68 61   (because of cha
278e0 6e 67 65 73 20 69 6e 20 74 68 65 20 63 6f 64 65  nges in the code
278f0 0a 20 20 2a 2a 20 67 65 6e 65 72 61 74 6f 72 29  .  ** generator)
27900 20 74 68 65 6e 20 74 68 65 20 66 69 78 20 77 6f   then the fix wo
27910 75 6c 64 20 62 65 20 74 6f 20 69 6e 73 65 72 74  uld be to insert
27920 20 61 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20   a call to.  ** 
27930 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
27940 72 4d 6f 76 65 74 6f 28 29 2e 0a 20 20 2a 2f 0a  rMoveto()..  */.
27950 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
27960 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
27970 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c  );.  assert( sql
27980 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49  ite3BtreeCursorI
27990 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b  sValid(pCrsr) );
279a0 0a 23 69 66 20 30 20 20 2f 2a 20 4e 6f 74 20 72  .#if 0  /* Not r
279b0 65 71 75 69 72 65 64 20 64 75 65 20 74 6f 20 74  equired due to t
279c0 68 65 20 70 72 65 76 69 6f 75 73 20 74 6f 20 61  he previous to a
279d0 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
279e0 74 73 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c  ts */.  rc = sql
279f0 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
27a00 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20  veto(pC);.  if( 
27a10 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
27a20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
27a30 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a  o_error;.#endif.
27a40 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 42 74  .  n = sqlite3Bt
27a50 72 65 65 50 61 79 6c 6f 61 64 53 69 7a 65 28 70  reePayloadSize(p
27a60 43 72 73 72 29 3b 0a 20 20 69 66 28 20 6e 3e 28  Crsr);.  if( n>(
27a70 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  u32)db->aLimit[S
27a80 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
27a90 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  TH] ){.    goto 
27aa0 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 74  too_big;.  }.  t
27ab0 65 73 74 63 61 73 65 28 20 6e 3d 3d 30 20 29 3b  estcase( n==0 );
27ac0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
27ad0 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28  dbeMemFromBtree(
27ae0 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75  pCrsr, 0, n, pOu
27af0 74 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  t);.  if( rc ) g
27b00 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
27b10 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 21 70  _error;.  if( !p
27b20 4f 70 2d 3e 70 33 20 29 20 44 65 65 70 68 65 6d  Op->p3 ) Deephem
27b30 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 20  eralize(pOut);. 
27b40 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
27b50 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 52 45  SIZE(pOut);.  RE
27b60 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
27b70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 62  ->p2, pOut);.  b
27b80 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
27b90 64 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32 20  de: Rowid P1 P2 
27ba0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
27bb0 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a  s: r[P2]=rowid.*
27bc0 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72 65  *.** Store in re
27bd0 67 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74  gister P2 an int
27be0 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68  eger which is th
27bf0 65 20 6b 65 79 20 6f 66 20 74 68 65 20 74 61 62  e key of the tab
27c00 6c 65 20 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a  le entry that.**
27c10 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
27c20 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a   point to..**.**
27c30 20 50 31 20 63 61 6e 20 62 65 20 65 69 74 68 65   P1 can be eithe
27c40 72 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74 61  r an ordinary ta
27c50 62 6c 65 20 6f 72 20 61 20 76 69 72 74 75 61 6c  ble or a virtual
27c60 20 74 61 62 6c 65 2e 20 20 54 68 65 72 65 20 75   table.  There u
27c70 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 61 20 73  sed to.** be a s
27c80 65 70 61 72 61 74 65 20 4f 50 5f 56 52 6f 77 69  eparate OP_VRowi
27c90 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 75 73 65  d opcode for use
27ca0 20 77 69 74 68 20 76 69 72 74 75 61 6c 20 74 61   with virtual ta
27cb0 62 6c 65 73 2c 20 62 75 74 20 74 68 69 73 0a 2a  bles, but this.*
27cc0 2a 20 6f 6e 65 20 6f 70 63 6f 64 65 20 6e 6f 77  * one opcode now
27cd0 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74 68 20   works for both 
27ce0 74 61 62 6c 65 20 74 79 70 65 73 2e 0a 2a 2f 0a  table types..*/.
27cf0 63 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a 20 7b  case OP_Rowid: {
27d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d10 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64   /* out2 */.  Vd
27d20 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
27d30 69 36 34 20 76 3b 0a 20 20 73 71 6c 69 74 65 33  i64 v;.  sqlite3
27d40 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
27d50 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
27d60 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a  dule *pModule;..
27d70 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
27d80 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
27d90 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
27da0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
27db0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
27dc0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
27dd0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
27de0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
27df0 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
27e00 70 65 21 3d 43 55 52 54 59 50 45 5f 50 53 45 55  pe!=CURTYPE_PSEU
27e10 44 4f 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f  DO || pC->nullRo
27e20 77 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 6e  w );.  if( pC->n
27e30 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 70 4f  ullRow ){.    pO
27e40 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
27e50 4e 75 6c 6c 3b 0a 20 20 20 20 62 72 65 61 6b 3b  Null;.    break;
27e60 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d  .  }else if( pC-
27e70 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
27e80 29 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d 3e 6d  ){.    v = pC->m
27e90 6f 76 65 74 6f 54 61 72 67 65 74 3b 0a 23 69 66  ovetoTarget;.#if
27ea0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
27eb0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
27ec0 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 65 43  }else if( pC->eC
27ed0 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
27ee0 56 54 41 42 20 29 7b 0a 20 20 20 20 61 73 73 65  VTAB ){.    asse
27ef0 72 74 28 20 70 43 2d 3e 75 63 2e 70 56 43 75 72  rt( pC->uc.pVCur
27f00 21 3d 30 20 29 3b 0a 20 20 20 20 70 56 74 61 62  !=0 );.    pVtab
27f10 20 3d 20 70 43 2d 3e 75 63 2e 70 56 43 75 72 2d   = pC->uc.pVCur-
27f20 3e 70 56 74 61 62 3b 0a 20 20 20 20 70 4d 6f 64  >pVtab;.    pMod
27f30 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f  ule = pVtab->pMo
27f40 64 75 6c 65 3b 0a 20 20 20 20 61 73 73 65 72 74  dule;.    assert
27f50 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69  ( pModule->xRowi
27f60 64 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d  d );.    rc = pM
27f70 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70 43  odule->xRowid(pC
27f80 2d 3e 75 63 2e 70 56 43 75 72 2c 20 26 76 29 3b  ->uc.pVCur, &v);
27f90 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62  .    sqlite3Vtab
27fa0 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20  ImportErrmsg(p, 
27fb0 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66 28 20  pVtab);.    if( 
27fc0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
27fd0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65  due_to_error;.#e
27fe0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
27ff0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
28000 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   */.  }else{.   
28010 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
28020 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
28030 54 52 45 45 20 29 3b 0a 20 20 20 20 61 73 73 65  TREE );.    asse
28040 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  rt( pC->uc.pCurs
28050 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20  or!=0 );.    rc 
28060 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
28070 73 6f 72 52 65 73 74 6f 72 65 28 70 43 29 3b 0a  sorRestore(pC);.
28080 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74      if( rc ) got
28090 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
280a0 72 72 6f 72 3b 0a 20 20 20 20 69 66 28 20 70 43  rror;.    if( pC
280b0 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
280c0 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
280d0 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20   MEM_Null;.     
280e0 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
280f0 20 20 76 20 3d 20 73 71 6c 69 74 65 33 42 74 72    v = sqlite3Btr
28100 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43 2d  eeIntegerKey(pC-
28110 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20  >uc.pCursor);.  
28120 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  }.  pOut->u.i = 
28130 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  v;.  break;.}../
28140 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f  * Opcode: NullRo
28150 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  w P1 * * * *.**.
28160 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63 75 72 73  ** Move the curs
28170 6f 72 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20  or P1 to a null 
28180 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c  row.  Any OP_Col
28190 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a  umn operations.*
281a0 2a 20 74 68 61 74 20 6f 63 63 75 72 20 77 68 69  * that occur whi
281b0 6c 65 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  le the cursor is
281c0 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77   on the null row
281d0 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20   will always.** 
281e0 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f  write a NULL..*/
281f0 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77  .case OP_NullRow
28200 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
28210 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28   *pC;..  assert(
28220 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
28230 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
28240 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
28250 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
28260 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
28270 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
28280 3d 20 31 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 1;.  pC->cache
28290 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
282a0 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 43 2d 3e  TALE;.  if( pC->
282b0 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
282c0 45 5f 42 54 52 45 45 20 29 7b 0a 20 20 20 20 61  E_BTREE ){.    a
282d0 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
282e0 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20  ursor!=0 );.    
282f0 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61  sqlite3BtreeClea
28300 72 43 75 72 73 6f 72 28 70 43 2d 3e 75 63 2e 70  rCursor(pC->uc.p
28310 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62  Cursor);.  }.  b
28320 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
28330 64 65 3a 20 53 65 65 6b 45 6e 64 20 50 31 20 2a  de: SeekEnd P1 *
28340 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 6f 73   * * *.**.** Pos
28350 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ition cursor P1 
28360 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
28370 65 20 62 74 72 65 65 20 66 6f 72 20 74 68 65 20  e btree for the 
28380 70 75 72 70 6f 73 65 20 6f 66 0a 2a 2a 20 61 70  purpose of.** ap
28390 70 65 6e 64 69 6e 67 20 61 20 6e 65 77 20 65 6e  pending a new en
283a0 74 72 79 20 6f 6e 74 6f 20 74 68 65 20 62 74 72  try onto the btr
283b0 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20  ee..**.** It is 
283c0 61 73 73 75 6d 65 64 20 74 68 61 74 20 74 68 65  assumed that the
283d0 20 63 75 72 73 6f 72 20 69 73 20 75 73 65 64 20   cursor is used 
283e0 6f 6e 6c 79 20 66 6f 72 20 61 70 70 65 6e 64 69  only for appendi
283f0 6e 67 20 61 6e 64 20 73 6f 0a 2a 2a 20 69 66 20  ng and so.** if 
28400 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 76 61  the cursor is va
28410 6c 69 64 2c 20 74 68 65 6e 20 74 68 65 20 63 75  lid, then the cu
28420 72 73 6f 72 20 6d 75 73 74 20 61 6c 72 65 61 64  rsor must alread
28430 79 20 62 65 20 70 6f 69 6e 74 69 6e 67 0a 2a 2a  y be pointing.**
28440 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
28450 68 65 20 62 74 72 65 65 20 61 6e 64 20 73 6f 20  he btree and so 
28460 6e 6f 20 63 68 61 6e 67 65 73 20 61 72 65 20 6d  no changes are m
28470 61 64 65 20 74 6f 0a 2a 2a 20 74 68 65 20 63 75  ade to.** the cu
28480 72 73 6f 72 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  rsor..*/./* Opco
28490 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20 2a  de: Last P1 P2 *
284a0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e   * *.**.** The n
284b0 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52  ext use of the R
284c0 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f  owid or Column o
284d0 72 20 50 72 65 76 20 69 6e 73 74 72 75 63 74 69  r Prev instructi
284e0 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69  on for P1 .** wi
284f0 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20  ll refer to the 
28500 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  last entry in th
28510 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
28520 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66   or index..** If
28530 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
28540 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64  dex is empty and
28550 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70   P2>0, then jump
28560 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
28570 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  P2..** If P2 is 
28580 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c  0 or if the tabl
28590 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f  e or index is no
285a0 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68  t empty, fall th
285b0 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
285c0 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
285d0 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ction..**.** Thi
285e0 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20  s opcode leaves 
285f0 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69  the cursor confi
28600 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e  gured to move in
28610 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a   reverse order,.
28620 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20  ** from the end 
28630 74 6f 77 61 72 64 20 74 68 65 20 62 65 67 69 6e  toward the begin
28640 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20  ning.  In other 
28650 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f  words, the curso
28660 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72  r is.** configur
28670 65 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20  ed to use Prev, 
28680 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2f 0a 63 61 73  not Next..*/.cas
28690 65 20 4f 50 5f 53 65 65 6b 45 6e 64 3a 0a 63 61  e OP_SeekEnd:.ca
286a0 73 65 20 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20  se OP_Last: {   
286b0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
286c0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
286d0 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
286e0 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
286f0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
28700 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
28710 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
28720 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
28730 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
28740 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
28750 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
28760 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
28770 45 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  E );.  pCrsr = p
28780 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20  C->uc.pCursor;. 
28790 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73 65   res = 0;.  asse
287a0 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a  rt( pCrsr!=0 );.
287b0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
287c0 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70  BUG.  pC->seekOp
287d0 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a   = pOp->opcode;.
287e0 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70 4f 70  #endif.  if( pOp
287f0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65  ->opcode==OP_See
28800 6b 45 6e 64 20 29 7b 0a 20 20 20 20 61 73 73 65  kEnd ){.    asse
28810 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29  rt( pOp->p2==0 )
28820 3b 0a 20 20 20 20 70 43 2d 3e 73 65 65 6b 52 65  ;.    pC->seekRe
28830 73 75 6c 74 20 3d 20 2d 31 3b 0a 20 20 20 20 69  sult = -1;.    i
28840 66 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  f( sqlite3BtreeC
28850 75 72 73 6f 72 49 73 56 61 6c 69 64 4e 4e 28 70  ursorIsValidNN(p
28860 43 72 73 72 29 20 29 7b 0a 20 20 20 20 20 20 62  Crsr) ){.      b
28870 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  reak;.    }.  }.
28880 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
28890 72 65 65 4c 61 73 74 28 70 43 72 73 72 2c 20 26  reeLast(pCrsr, &
288a0 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c  res);.  pC->null
288b0 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20  Row = (u8)res;. 
288c0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
288d0 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  eto = 0;.  pC->c
288e0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
288f0 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20  HE_STALE;.  if( 
28900 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
28910 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
28920 69 66 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 7b  if( pOp->p2>0 ){
28930 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
28940 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a  aken(res!=0,2);.
28950 20 20 20 20 69 66 28 20 72 65 73 20 29 20 67 6f      if( res ) go
28960 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
28970 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
28980 2a 20 4f 70 63 6f 64 65 3a 20 49 66 53 6d 61 6c  * Opcode: IfSmal
28990 6c 65 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ler P1 P2 P3 * *
289a0 0a 2a 2a 0a 2a 2a 20 45 73 74 69 6d 61 74 65 20  .**.** Estimate 
289b0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
289c0 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ws in the table 
289d0 50 31 2e 20 20 4a 75 6d 70 20 74 6f 20 50 32 20  P1.  Jump to P2 
289e0 69 66 20 74 68 61 74 0a 2a 2a 20 65 73 74 69 6d  if that.** estim
289f0 61 74 65 20 69 73 20 6c 65 73 73 20 74 68 61 6e  ate is less than
28a00 20 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 20 32   approximately 2
28a10 2a 2a 28 30 2e 31 2a 50 33 29 2e 0a 2a 2f 0a 63  **(0.1*P3)..*/.c
28a20 61 73 65 20 4f 50 5f 49 66 53 6d 61 6c 6c 65 72  ase OP_IfSmaller
28a30 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
28a40 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  mp */.  VdbeCurs
28a50 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
28a60 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
28a70 20 72 65 73 3b 0a 20 20 69 36 34 20 73 7a 3b 0a   res;.  i64 sz;.
28a80 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
28a90 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
28aa0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
28ab0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
28ac0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
28ad0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43  t( pC!=0 );.  pC
28ae0 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75  rsr = pC->uc.pCu
28af0 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rsor;.  assert( 
28b00 70 43 72 73 72 20 29 3b 0a 20 20 72 63 20 3d 20  pCrsr );.  rc = 
28b10 73 71 6c 69 74 65 33 42 74 72 65 65 46 69 72 73  sqlite3BtreeFirs
28b20 74 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a  t(pCrsr, &res);.
28b30 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
28b40 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
28b50 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d 30  or;.  if( res==0
28b60 20 29 7b 0a 20 20 20 20 73 7a 20 3d 20 73 71 6c   ){.    sz = sql
28b70 69 74 65 33 42 74 72 65 65 52 6f 77 43 6f 75 6e  ite3BtreeRowCoun
28b80 74 45 73 74 28 70 43 72 73 72 29 3b 0a 20 20 20  tEst(pCrsr);.   
28b90 20 69 66 28 20 41 4c 57 41 59 53 28 73 7a 3e 3d   if( ALWAYS(sz>=
28ba0 30 29 20 26 26 20 73 71 6c 69 74 65 33 4c 6f 67  0) && sqlite3Log
28bb0 45 73 74 28 28 75 36 34 29 73 7a 29 3c 70 4f 70  Est((u64)sz)<pOp
28bc0 2d 3e 70 33 20 29 20 72 65 73 20 3d 20 31 3b 0a  ->p3 ) res = 1;.
28bd0 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68    }.  VdbeBranch
28be0 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b  Taken(res!=0,2);
28bf0 0a 20 20 69 66 28 20 72 65 73 20 29 20 67 6f 74  .  if( res ) got
28c00 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
28c10 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
28c20 63 6f 64 65 3a 20 53 6f 72 74 65 72 53 6f 72 74  code: SorterSort
28c30 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
28c40 2a 2a 20 41 66 74 65 72 20 61 6c 6c 20 72 65 63  ** After all rec
28c50 6f 72 64 73 20 68 61 76 65 20 62 65 65 6e 20 69  ords have been i
28c60 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65  nserted into the
28c70 20 53 6f 72 74 65 72 20 6f 62 6a 65 63 74 0a 2a   Sorter object.*
28c80 2a 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  * identified by 
28c90 50 31 2c 20 69 6e 76 6f 6b 65 20 74 68 69 73 20  P1, invoke this 
28ca0 6f 70 63 6f 64 65 20 74 6f 20 61 63 74 75 61 6c  opcode to actual
28cb0 6c 79 20 64 6f 20 74 68 65 20 73 6f 72 74 69 6e  ly do the sortin
28cc0 67 2e 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32  g..** Jump to P2
28cd0 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   if there are no
28ce0 20 72 65 63 6f 72 64 73 20 74 6f 20 62 65 20 73   records to be s
28cf0 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  orted..**.** Thi
28d00 73 20 6f 70 63 6f 64 65 20 69 73 20 61 6e 20 61  s opcode is an a
28d10 6c 69 61 73 20 66 6f 72 20 4f 50 5f 53 6f 72 74  lias for OP_Sort
28d20 20 61 6e 64 20 4f 50 5f 52 65 77 69 6e 64 20 74   and OP_Rewind t
28d30 68 61 74 20 69 73 20 75 73 65 64 0a 2a 2a 20 66  hat is used.** f
28d40 6f 72 20 53 6f 72 74 65 72 20 6f 62 6a 65 63 74  or Sorter object
28d50 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  s..*/./* Opcode:
28d60 20 53 6f 72 74 20 50 31 20 50 32 20 2a 20 2a 20   Sort P1 P2 * * 
28d70 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  *.**.** This opc
28d80 6f 64 65 20 64 6f 65 73 20 65 78 61 63 74 6c 79  ode does exactly
28d90 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67 20   the same thing 
28da0 61 73 20 4f 50 5f 52 65 77 69 6e 64 20 65 78 63  as OP_Rewind exc
28db0 65 70 74 20 74 68 61 74 0a 2a 2a 20 69 74 20 69  ept that.** it i
28dc0 6e 63 72 65 6d 65 6e 74 73 20 61 6e 20 75 6e 64  ncrements an und
28dd0 6f 63 75 6d 65 6e 74 65 64 20 67 6c 6f 62 61 6c  ocumented global
28de0 20 76 61 72 69 61 62 6c 65 20 75 73 65 64 20 66   variable used f
28df0 6f 72 20 74 65 73 74 69 6e 67 2e 0a 2a 2a 0a 2a  or testing..**.*
28e00 2a 20 53 6f 72 74 69 6e 67 20 69 73 20 61 63 63  * Sorting is acc
28e10 6f 6d 70 6c 69 73 68 65 64 20 62 79 20 77 72 69  omplished by wri
28e20 74 69 6e 67 20 72 65 63 6f 72 64 73 20 69 6e 74  ting records int
28e30 6f 20 61 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  o a sorting inde
28e40 78 2c 0a 2a 2a 20 74 68 65 6e 20 72 65 77 69 6e  x,.** then rewin
28e50 64 69 6e 67 20 74 68 61 74 20 69 6e 64 65 78 20  ding that index 
28e60 61 6e 64 20 70 6c 61 79 69 6e 67 20 69 74 20 62  and playing it b
28e70 61 63 6b 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69  ack from beginni
28e80 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20 20 57  ng to.** end.  W
28e90 65 20 75 73 65 20 74 68 65 20 4f 50 5f 53 6f 72  e use the OP_Sor
28ea0 74 20 6f 70 63 6f 64 65 20 69 6e 73 74 65 61 64  t opcode instead
28eb0 20 6f 66 20 4f 50 5f 52 65 77 69 6e 64 20 74 6f   of OP_Rewind to
28ec0 20 64 6f 20 74 68 65 0a 2a 2a 20 72 65 77 69 6e   do the.** rewin
28ed0 64 69 6e 67 20 73 6f 20 74 68 61 74 20 74 68 65  ding so that the
28ee0 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
28ef0 20 77 69 6c 6c 20 62 65 20 69 6e 63 72 65 6d 65   will be increme
28f00 6e 74 65 64 20 61 6e 64 0a 2a 2a 20 72 65 67 72  nted and.** regr
28f10 65 73 73 69 6f 6e 20 74 65 73 74 73 20 63 61 6e  ession tests can
28f20 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68   determine wheth
28f30 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6f 70  er or not the op
28f40 74 69 6d 69 7a 65 72 20 69 73 0a 2a 2a 20 63 6f  timizer is.** co
28f50 72 72 65 63 74 6c 79 20 6f 70 74 69 6d 69 7a 69  rrectly optimizi
28f60 6e 67 20 6f 75 74 20 73 6f 72 74 73 2e 0a 2a 2f  ng out sorts..*/
28f70 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 53  .case OP_SorterS
28f80 6f 72 74 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20  ort:    /* jump 
28f90 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 3a  */.case OP_Sort:
28fa0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
28fb0 70 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  p */.#ifdef SQLI
28fc0 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65  TE_TEST.  sqlite
28fd0 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b 3b 0a  3_sort_count++;.
28fe0 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68    sqlite3_search
28ff0 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64 69 66  _count--;.#endif
29000 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53  .  p->aCounter[S
29010 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53  QLITE_STMTSTATUS
29020 5f 53 4f 52 54 5d 2b 2b 3b 0a 20 20 2f 2a 20 46  _SORT]++;.  /* F
29030 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f  all through into
29040 20 4f 50 5f 52 65 77 69 6e 64 20 2a 2f 0a 7d 0a   OP_Rewind */.}.
29050 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 77 69 6e  /* Opcode: Rewin
29060 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
29070 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65  .** The next use
29080 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72   of the Rowid or
29090 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20   Column or Next 
290a0 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20  instruction for 
290b0 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65  P1 .** will refe
290c0 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65  r to the first e
290d0 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61 74 61  ntry in the data
290e0 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e  base table or in
290f0 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74  dex..** If the t
29100 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73  able or index is
29110 20 65 6d 70 74 79 2c 20 6a 75 6d 70 20 69 6d 6d   empty, jump imm
29120 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
29130 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20  ** If the table 
29140 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20  or index is not 
29150 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f  empty, fall thro
29160 75 67 68 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  ugh to the follo
29170 77 69 6e 67 20 0a 2a 2a 20 69 6e 73 74 72 75 63  wing .** instruc
29180 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  tion..**.** This
29190 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74   opcode leaves t
291a0 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67  he cursor config
291b0 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20  ured to move in 
291c0 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a  forward order,.*
291d0 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  * from the begin
291e0 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20  ning toward the 
291f0 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  end.  In other w
29200 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72  ords, the cursor
29210 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65   is.** configure
29220 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e  d to use Next, n
29230 6f 74 20 50 72 65 76 2e 0a 2a 2f 0a 63 61 73 65  ot Prev..*/.case
29240 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20 20   OP_Rewind: {   
29250 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
29260 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
29270 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
29280 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
29290 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
292a0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
292b0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
292c0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
292d0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
292e0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
292f0 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
29300 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65  C)==(pOp->opcode
29310 3d 3d 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 29  ==OP_SorterSort)
29320 20 29 3b 0a 20 20 72 65 73 20 3d 20 31 3b 0a 23   );.  res = 1;.#
29330 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
29340 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20  UG.  pC->seekOp 
29350 3d 20 4f 50 5f 52 65 77 69 6e 64 3b 0a 23 65 6e  = OP_Rewind;.#en
29360 64 69 66 0a 20 20 69 66 28 20 69 73 53 6f 72 74  dif.  if( isSort
29370 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20 72 63  er(pC) ){.    rc
29380 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f   = sqlite3VdbeSo
29390 72 74 65 72 52 65 77 69 6e 64 28 70 43 2c 20 26  rterRewind(pC, &
293a0 72 65 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  res);.  }else{. 
293b0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65     assert( pC->e
293c0 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
293d0 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20 70 43  _BTREE );.    pC
293e0 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75  rsr = pC->uc.pCu
293f0 72 73 6f 72 3b 0a 20 20 20 20 61 73 73 65 72 74  rsor;.    assert
29400 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20 20 72  ( pCrsr );.    r
29410 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
29420 46 69 72 73 74 28 70 43 72 73 72 2c 20 26 72 65  First(pCrsr, &re
29430 73 29 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65  s);.    pC->defe
29440 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
29450 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
29460 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
29470 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20  E;.  }.  if( rc 
29480 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
29490 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 43 2d  _to_error;.  pC-
294a0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72  >nullRow = (u8)r
294b0 65 73 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  es;.  assert( pO
294c0 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p2>0 && pOp->
294d0 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 56  p2<p->nOp );.  V
294e0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
294f0 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20  es!=0,2);.  if( 
29500 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  res ) goto jump_
29510 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a  to_p2;.  break;.
29520 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65  }../* Opcode: Ne
29530 78 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  xt P1 P2 P3 P4 P
29540 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20  5.**.** Advance 
29550 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
29560 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74  t it points to t
29570 68 65 20 6e 65 78 74 20 6b 65 79 2f 64 61 74 61  he next key/data
29580 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20   pair in its.** 
29590 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20  table or index. 
295a0 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
295b0 20 6d 6f 72 65 20 6b 65 79 2f 76 61 6c 75 65 20   more key/value 
295c0 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20  pairs then fall 
295d0 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
295e0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
295f0 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66  ruction.  But if
29600 20 74 68 65 20 63 75 72 73 6f 72 20 61 64 76 61   the cursor adva
29610 6e 63 65 20 77 61 73 20 73 75 63 63 65 73 73 66  nce was successf
29620 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65  ul,.** jump imme
29630 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
29640 2a 0a 2a 2a 20 54 68 65 20 4e 65 78 74 20 6f 70  *.** The Next op
29650 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c  code is only val
29660 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20  id following an 
29670 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20  SeekGT, SeekGE, 
29680 6f 72 0a 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 20  or.** OP_Rewind 
29690 6f 70 63 6f 64 65 20 75 73 65 64 20 74 6f 20 70  opcode used to p
296a0 6f 73 69 74 69 6f 6e 20 74 68 65 20 63 75 72 73  osition the curs
296b0 6f 72 2e 20 20 4e 65 78 74 20 69 73 20 6e 6f 74  or.  Next is not
296c0 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66   allowed.** to f
296d0 6f 6c 6c 6f 77 20 53 65 65 6b 4c 54 2c 20 53 65  ollow SeekLT, Se
296e0 65 6b 4c 45 2c 20 6f 72 20 4f 50 5f 4c 61 73 74  ekLE, or OP_Last
296f0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63  ..**.** The P1 c
29700 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f  ursor must be fo
29710 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  r a real table, 
29720 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
29730 6c 65 2e 20 20 50 31 20 6d 75 73 74 20 68 61 76  le.  P1 must hav
29740 65 0a 2a 2a 20 62 65 65 6e 20 6f 70 65 6e 65 64  e.** been opened
29750 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20 6f   prior to this o
29760 70 63 6f 64 65 20 6f 72 20 74 68 65 20 70 72 6f  pcode or the pro
29770 67 72 61 6d 20 77 69 6c 6c 20 73 65 67 66 61 75  gram will segfau
29780 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33  lt..**.** The P3
29790 20 76 61 6c 75 65 20 69 73 20 61 20 68 69 6e 74   value is a hint
297a0 20 74 6f 20 74 68 65 20 62 74 72 65 65 20 69 6d   to the btree im
297b0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49 66  plementation. If
297c0 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a 20   P3==1, that.** 
297d0 6d 65 61 6e 73 20 50 31 20 69 73 20 61 6e 20 53  means P1 is an S
297e0 51 4c 20 69 6e 64 65 78 20 61 6e 64 20 74 68 61  QL index and tha
297f0 74 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  t this instructi
29800 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65 20 62 65  on could have be
29810 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69 66  en.** omitted if
29820 20 74 68 61 74 20 69 6e 64 65 78 20 68 61 64 20   that index had 
29830 62 65 65 6e 20 75 6e 69 71 75 65 2e 20 20 50 33  been unique.  P3
29840 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e 20 20   is usually 0.  
29850 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20  P3 is.** always 
29860 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a  either 0 or 1..*
29870 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77 61 79  *.** P4 is alway
29880 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41 44 56  s of type P4_ADV
29890 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63 74 69  ANCE. The functi
298a0 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74  on pointer point
298b0 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42  s to.** sqlite3B
298c0 74 72 65 65 4e 65 78 74 28 29 2e 0a 2a 2a 0a 2a  treeNext()..**.*
298d0 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73 69 74  * If P5 is posit
298e0 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d 70  ive and the jump
298f0 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20   is taken, then 
29900 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a  event counter.**
29910 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e 20   number P5-1 in 
29920 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61  the prepared sta
29930 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65 6d  tement is increm
29940 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ented..**.** See
29950 20 61 6c 73 6f 3a 20 50 72 65 76 2c 20 4e 65 78   also: Prev, Nex
29960 74 49 66 4f 70 65 6e 0a 2a 2f 0a 2f 2a 20 4f 70  tIfOpen.*/./* Op
29970 63 6f 64 65 3a 20 4e 65 78 74 49 66 4f 70 65 6e  code: NextIfOpen
29980 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
29990 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
299a0 65 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  e works just lik
299b0 65 20 4e 65 78 74 20 65 78 63 65 70 74 20 74 68  e Next except th
299c0 61 74 20 69 66 20 63 75 72 73 6f 72 20 50 31 20  at if cursor P1 
299d0 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69  is not.** open i
299e0 74 20 62 65 68 61 76 65 73 20 61 20 6e 6f 2d 6f  t behaves a no-o
299f0 70 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  p..*/./* Opcode:
29a00 20 50 72 65 76 20 50 31 20 50 32 20 50 33 20 50   Prev P1 P2 P3 P
29a10 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 61 63 6b 20  4 P5.**.** Back 
29a20 75 70 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  up cursor P1 so 
29a30 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74  that it points t
29a40 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 6b  o the previous k
29a50 65 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20  ey/data pair in 
29a60 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  its.** table or 
29a70 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72 65  index.  If there
29a80 20 69 73 20 6e 6f 20 70 72 65 76 69 6f 75 73 20   is no previous 
29a90 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20  key/value pairs 
29aa0 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
29ab0 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c  h.** to the foll
29ac0 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  owing instructio
29ad0 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 63  n.  But if the c
29ae0 75 72 73 6f 72 20 62 61 63 6b 75 70 20 77 61 73  ursor backup was
29af0 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20   successful,.** 
29b00 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
29b10 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 0a 2a 2a   to P2..**.**.**
29b20 20 54 68 65 20 50 72 65 76 20 6f 70 63 6f 64 65   The Prev opcode
29b30 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 66   is only valid f
29b40 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53 65 65 6b  ollowing an Seek
29b50 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 0a 2a  LT, SeekLE, or.*
29b60 2a 20 4f 50 5f 4c 61 73 74 20 6f 70 63 6f 64 65  * OP_Last opcode
29b70 20 75 73 65 64 20 74 6f 20 70 6f 73 69 74 69 6f   used to positio
29b80 6e 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 50  n the cursor.  P
29b90 72 65 76 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77  rev is not allow
29ba0 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20  ed.** to follow 
29bb0 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20  SeekGT, SeekGE, 
29bc0 6f 72 20 4f 50 5f 52 65 77 69 6e 64 2e 0a 2a 2a  or OP_Rewind..**
29bd0 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f  .** The P1 curso
29be0 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20  r must be for a 
29bf0 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
29c00 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20  a pseudo-table. 
29c10 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 6e 6f 74   If P1 is.** not
29c20 20 6f 70 65 6e 20 74 68 65 6e 20 74 68 65 20 62   open then the b
29c30 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66  ehavior is undef
29c40 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ined..**.** The 
29c50 50 33 20 76 61 6c 75 65 20 69 73 20 61 20 68 69  P3 value is a hi
29c60 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65 65 20  nt to the btree 
29c70 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20  implementation. 
29c80 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a  If P3==1, that.*
29c90 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20 61 6e  * means P1 is an
29ca0 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64 20 74   SQL index and t
29cb0 68 61 74 20 74 68 69 73 20 69 6e 73 74 72 75 63  hat this instruc
29cc0 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65 20  tion could have 
29cd0 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20  been.** omitted 
29ce0 69 66 20 74 68 61 74 20 69 6e 64 65 78 20 68 61  if that index ha
29cf0 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e 20 20  d been unique.  
29d00 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e  P3 is usually 0.
29d10 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79    P3 is.** alway
29d20 73 20 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e  s either 0 or 1.
29d30 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77  .**.** P4 is alw
29d40 61 79 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41  ays of type P4_A
29d50 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63  DVANCE. The func
29d60 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69  tion pointer poi
29d70 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65  nts to.** sqlite
29d80 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 28 29  3BtreePrevious()
29d90 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  ..**.** If P5 is
29da0 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68   positive and th
29db0 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c  e jump is taken,
29dc0 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e   then event coun
29dd0 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35  ter.** number P5
29de0 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70 61 72  -1 in the prepar
29df0 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ed statement is 
29e00 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2f 0a  incremented..*/.
29e10 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 49  /* Opcode: PrevI
29e20 66 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20 50  fOpen P1 P2 P3 P
29e30 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  4 P5.**.** This 
29e40 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73  opcode works jus
29e50 74 20 6c 69 6b 65 20 50 72 65 76 20 65 78 63 65  t like Prev exce
29e60 70 74 20 74 68 61 74 20 69 66 20 63 75 72 73 6f  pt that if curso
29e70 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f  r P1 is not.** o
29e80 70 65 6e 20 69 74 20 62 65 68 61 76 65 73 20 61  pen it behaves a
29e90 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 2f 2a 20 4f 70   no-op..*/./* Op
29ea0 63 6f 64 65 3a 20 53 6f 72 74 65 72 4e 65 78 74  code: SorterNext
29eb0 20 50 31 20 50 32 20 2a 20 2a 20 50 35 0a 2a 2a   P1 P2 * * P5.**
29ec0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
29ed0 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
29ee0 4f 50 5f 4e 65 78 74 20 65 78 63 65 70 74 20 74  OP_Next except t
29ef0 68 61 74 20 50 31 20 6d 75 73 74 20 62 65 20 61  hat P1 must be a
29f00 0a 2a 2a 20 73 6f 72 74 65 72 20 6f 62 6a 65 63  .** sorter objec
29f10 74 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 20  t for which the 
29f20 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 20 6f 70  OP_SorterSort op
29f30 63 6f 64 65 20 68 61 73 20 62 65 65 6e 0a 2a 2a  code has been.**
29f40 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68 69 73 20   invoked.  This 
29f50 6f 70 63 6f 64 65 20 61 64 76 61 6e 63 65 73 20  opcode advances 
29f60 74 68 65 20 63 75 72 73 6f 72 20 74 6f 20 74 68  the cursor to th
29f70 65 20 6e 65 78 74 20 73 6f 72 74 65 64 0a 2a 2a  e next sorted.**
29f80 20 72 65 63 6f 72 64 2c 20 6f 72 20 6a 75 6d 70   record, or jump
29f90 73 20 74 6f 20 50 32 20 69 66 20 74 68 65 72 65  s to P2 if there
29fa0 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20 73 6f 72   are no more sor
29fb0 74 65 64 20 72 65 63 6f 72 64 73 2e 0a 2a 2f 0a  ted records..*/.
29fc0 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 4e 65  case OP_SorterNe
29fd0 78 74 3a 20 7b 20 20 2f 2a 20 6a 75 6d 70 20 2a  xt: {  /* jump *
29fe0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
29ff0 70 43 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61  pC;..  pC = p->a
2a000 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
2a010 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65   assert( isSorte
2a020 72 28 70 43 29 20 29 3b 0a 20 20 72 63 20 3d 20  r(pC) );.  rc = 
2a030 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
2a040 72 4e 65 78 74 28 64 62 2c 20 70 43 29 3b 0a 20  rNext(db, pC);. 
2a050 20 67 6f 74 6f 20 6e 65 78 74 5f 74 61 69 6c 3b   goto next_tail;
2a060 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 49 66 4f  .case OP_PrevIfO
2a070 70 65 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20  pen:    /* jump 
2a080 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 49  */.case OP_NextI
2a090 66 4f 70 65 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d  fOpen:    /* jum
2a0a0 70 20 2a 2f 0a 20 20 69 66 28 20 70 2d 3e 61 70  p */.  if( p->ap
2a0b0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3d 3d 30 20  Csr[pOp->p1]==0 
2a0c0 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61  ) break;.  /* Fa
2a0d0 6c 6c 20 74 68 72 6f 75 67 68 20 2a 2f 0a 63 61  ll through */.ca
2a0e0 73 65 20 4f 50 5f 50 72 65 76 3a 20 20 20 20 20  se OP_Prev:     
2a0f0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
2a100 63 61 73 65 20 4f 50 5f 4e 65 78 74 3a 20 20 20  case OP_Next:   
2a110 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
2a120 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
2a130 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
2a140 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
2a150 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2a160 35 3c 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 61  5<ArraySize(p->a
2a170 43 6f 75 6e 74 65 72 29 20 29 3b 0a 20 20 70 43  Counter) );.  pC
2a180 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
2a190 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2a1a0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
2a1b0 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
2a1c0 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73  oveto==0 );.  as
2a1d0 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
2a1e0 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
2a1f0 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  E );.  assert( p
2a200 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e  Op->opcode!=OP_N
2a210 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78  ext || pOp->p4.x
2a220 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33  Advance==sqlite3
2a230 42 74 72 65 65 4e 65 78 74 20 29 3b 0a 20 20 61  BtreeNext );.  a
2a240 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
2a250 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20 70  de!=OP_Prev || p
2a260 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d  Op->p4.xAdvance=
2a270 3d 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65  =sqlite3BtreePre
2a280 76 69 6f 75 73 20 29 3b 0a 20 20 61 73 73 65 72  vious );.  asser
2a290 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
2a2a0 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 20 7c 7c  OP_NextIfOpen ||
2a2b0 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63   pOp->p4.xAdvanc
2a2c0 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 4e  e==sqlite3BtreeN
2a2d0 65 78 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ext );.  assert(
2a2e0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
2a2f0 5f 50 72 65 76 49 66 4f 70 65 6e 20 7c 7c 20 70  _PrevIfOpen || p
2a300 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d  Op->p4.xAdvance=
2a310 3d 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65  =sqlite3BtreePre
2a320 76 69 6f 75 73 29 3b 0a 0a 20 20 2f 2a 20 54 68  vious);..  /* Th
2a330 65 20 4e 65 78 74 20 6f 70 63 6f 64 65 20 69 73  e Next opcode is
2a340 20 6f 6e 6c 79 20 75 73 65 64 20 61 66 74 65 72   only used after
2a350 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c   SeekGT, SeekGE,
2a360 20 61 6e 64 20 52 65 77 69 6e 64 2e 0a 20 20 2a   and Rewind..  *
2a370 2a 20 54 68 65 20 50 72 65 76 20 6f 70 63 6f 64  * The Prev opcod
2a380 65 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 61  e is only used a
2a390 66 74 65 72 20 53 65 65 6b 4c 54 2c 20 53 65 65  fter SeekLT, See
2a3a0 6b 4c 45 2c 20 61 6e 64 20 4c 61 73 74 2e 20 2a  kLE, and Last. *
2a3b0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
2a3c0 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74  >opcode!=OP_Next
2a3d0 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21   || pOp->opcode!
2a3e0 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 0a 20  =OP_NextIfOpen. 
2a3f0 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65        || pC->see
2a400 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c  kOp==OP_SeekGT |
2a410 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50  | pC->seekOp==OP
2a420 5f 53 65 65 6b 47 45 0a 20 20 20 20 20 20 20 7c  _SeekGE.       |
2a430 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50  | pC->seekOp==OP
2a440 5f 52 65 77 69 6e 64 20 7c 7c 20 70 43 2d 3e 73  _Rewind || pC->s
2a450 65 65 6b 4f 70 3d 3d 4f 50 5f 46 6f 75 6e 64 29  eekOp==OP_Found)
2a460 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2a470 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76  >opcode!=OP_Prev
2a480 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21   || pOp->opcode!
2a490 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 0a 20  =OP_PrevIfOpen. 
2a4a0 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65        || pC->see
2a4b0 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c  kOp==OP_SeekLT |
2a4c0 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50  | pC->seekOp==OP
2a4d0 5f 53 65 65 6b 4c 45 0a 20 20 20 20 20 20 20 7c  _SeekLE.       |
2a4e0 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50  | pC->seekOp==OP
2a4f0 5f 4c 61 73 74 20 29 3b 0a 0a 20 20 72 63 20 3d  _Last );..  rc =
2a500 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63   pOp->p4.xAdvanc
2a510 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  e(pC->uc.pCursor
2a520 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a 6e 65 78 74  , pOp->p3);.next
2a530 5f 74 61 69 6c 3a 0a 20 20 70 43 2d 3e 63 61 63  _tail:.  pC->cac
2a540 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
2a550 5f 53 54 41 4c 45 3b 0a 20 20 56 64 62 65 42 72  _STALE;.  VdbeBr
2a560 61 6e 63 68 54 61 6b 65 6e 28 72 63 3d 3d 53 51  anchTaken(rc==SQ
2a570 4c 49 54 45 5f 4f 4b 2c 32 29 3b 0a 20 20 69 66  LITE_OK,2);.  if
2a580 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
2a590 29 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52  ){.    pC->nullR
2a5a0 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70 2d 3e 61  ow = 0;.    p->a
2a5b0 43 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e 70 35 5d  Counter[pOp->p5]
2a5c0 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  ++;.#ifdef SQLIT
2a5d0 45 5f 54 45 53 54 0a 20 20 20 20 73 71 6c 69 74  E_TEST.    sqlit
2a5e0 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b  e3_search_count+
2a5f0 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 67 6f  +;.#endif.    go
2a600 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e  to jump_to_p2_an
2a610 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  d_check_for_inte
2a620 72 72 75 70 74 3b 0a 20 20 7d 0a 20 20 69 66 28  rrupt;.  }.  if(
2a630 20 72 63 21 3d 53 51 4c 49 54 45 5f 44 4f 4e 45   rc!=SQLITE_DONE
2a640 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2a650 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 72 63  e_to_error;.  rc
2a660 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
2a670 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  pC->nullRow = 1;
2a680 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f  .  goto check_fo
2a690 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a  r_interrupt;.}..
2a6a0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 49 6e  /* Opcode: IdxIn
2a6b0 73 65 72 74 20 50 31 20 50 32 20 50 33 20 50 34  sert P1 P2 P3 P4
2a6c0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
2a6d0 20 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a   key=r[P2].**.**
2a6e0 20 52 65 67 69 73 74 65 72 20 50 32 20 68 6f 6c   Register P2 hol
2a6f0 64 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20  ds an SQL index 
2a700 6b 65 79 20 6d 61 64 65 20 75 73 69 6e 67 20 74  key made using t
2a710 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64  he.** MakeRecord
2a720 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20 20   instructions.  
2a730 54 68 69 73 20 6f 70 63 6f 64 65 20 77 72 69 74  This opcode writ
2a740 65 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69  es that key.** i
2a750 6e 74 6f 20 74 68 65 20 69 6e 64 65 78 20 50 31  nto the index P1
2a760 2e 20 20 44 61 74 61 20 66 6f 72 20 74 68 65 20  .  Data for the 
2a770 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a  entry is nil..**
2a780 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74  .** If P4 is not
2a790 20 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69   zero, then it i
2a7a0 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
2a7b0 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 75 6e  values in the un
2a7c0 70 61 63 6b 65 64 0a 2a 2a 20 6b 65 79 20 6f 66  packed.** key of
2a7d0 20 72 65 67 28 50 32 29 2e 20 20 49 6e 20 74 68   reg(P2).  In th
2a7e0 61 74 20 63 61 73 65 2c 20 50 33 20 69 73 20 74  at case, P3 is t
2a7f0 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
2a800 66 69 72 73 74 20 72 65 67 69 73 74 65 72 0a 2a  first register.*
2a810 2a 20 66 6f 72 20 74 68 65 20 75 6e 70 61 63 6b  * for the unpack
2a820 65 64 20 6b 65 79 2e 20 20 54 68 65 20 61 76 61  ed key.  The ava
2a830 69 6c 61 62 69 6c 69 74 79 20 6f 66 20 74 68 65  ilability of the
2a840 20 75 6e 70 61 63 6b 65 64 20 6b 65 79 20 63 61   unpacked key ca
2a850 6e 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 62  n sometimes.** b
2a860 65 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f  e an optimizatio
2a870 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68  n..**.** If P5 h
2a880 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 41 50  as the OPFLAG_AP
2a890 50 45 4e 44 20 62 69 74 20 73 65 74 2c 20 74 68  PEND bit set, th
2a8a0 61 74 20 69 73 20 61 20 68 69 6e 74 20 74 6f 20  at is a hint to 
2a8b0 74 68 65 20 62 2d 74 72 65 65 20 6c 61 79 65 72  the b-tree layer
2a8c0 0a 2a 2a 20 74 68 61 74 20 74 68 69 73 20 69 6e  .** that this in
2a8d0 73 65 72 74 20 69 73 20 6c 69 6b 65 6c 79 20 74  sert is likely t
2a8e0 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a  o be an append..
2a8f0 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20  **.** If P5 has 
2a900 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
2a910 47 45 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e  GE bit set, then
2a920 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e   the change coun
2a930 74 65 72 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d  ter is.** increm
2a940 65 6e 74 65 64 20 62 79 20 74 68 69 73 20 69 6e  ented by this in
2a950 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74  struction.  If t
2a960 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47  he OPFLAG_NCHANG
2a970 45 20 62 69 74 20 69 73 20 63 6c 65 61 72 2c 0a  E bit is clear,.
2a980 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 68 61 6e  ** then the chan
2a990 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20 75 6e  ge counter is un
2a9a0 63 68 61 6e 67 65 64 2e 0a 2a 2a 0a 2a 2a 20 49  changed..**.** I
2a9b0 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45  f the OPFLAG_USE
2a9c0 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20  SEEKRESULT flag 
2a9d0 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20 74 68  of P5 is set, th
2a9e0 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
2a9f0 20 6d 69 67 68 74 0a 2a 2a 20 72 75 6e 20 66 61   might.** run fa
2aa00 73 74 65 72 20 62 79 20 61 76 6f 69 64 69 6e 67  ster by avoiding
2aa10 20 61 6e 20 75 6e 6e 65 63 65 73 73 61 72 79 20   an unnecessary 
2aa20 73 65 65 6b 20 6f 6e 20 63 75 72 73 6f 72 20 50  seek on cursor P
2aa30 31 2e 20 20 48 6f 77 65 76 65 72 2c 0a 2a 2a 20  1.  However,.** 
2aa40 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  the OPFLAG_USESE
2aa50 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6d 75  EKRESULT flag mu
2aa60 73 74 20 6f 6e 6c 79 20 62 65 20 73 65 74 20 69  st only be set i
2aa70 66 20 74 68 65 72 65 20 68 61 76 65 20 62 65 65  f there have bee
2aa80 6e 20 6e 6f 20 70 72 69 6f 72 0a 2a 2a 20 73 65  n no prior.** se
2aa90 65 6b 73 20 6f 6e 20 74 68 65 20 63 75 72 73 6f  eks on the curso
2aaa0 72 20 6f 72 20 69 66 20 74 68 65 20 6d 6f 73 74  r or if the most
2aab0 20 72 65 63 65 6e 74 20 73 65 65 6b 20 75 73 65   recent seek use
2aac0 64 20 61 20 6b 65 79 20 65 71 75 69 76 61 6c 65  d a key equivale
2aad0 6e 74 0a 2a 2a 20 74 6f 20 50 32 2e 20 0a 2a 2a  nt.** to P2. .**
2aae0 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
2aaf0 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  tion only works 
2ab00 66 6f 72 20 69 6e 64 69 63 65 73 2e 20 20 54 68  for indices.  Th
2ab10 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73  e equivalent ins
2ab20 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20  truction.** for 
2ab30 74 61 62 6c 65 73 20 69 73 20 4f 50 5f 49 6e 73  tables is OP_Ins
2ab40 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ert..*/./* Opcod
2ab50 65 3a 20 53 6f 72 74 65 72 49 6e 73 65 72 74 20  e: SorterInsert 
2ab60 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
2ab70 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
2ab80 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  2].**.** Registe
2ab90 72 20 50 32 20 68 6f 6c 64 73 20 61 6e 20 53 51  r P2 holds an SQ
2aba0 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d 61 64 65  L index key made
2abb0 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61   using the.** Ma
2abc0 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63  keRecord instruc
2abd0 74 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70 63  tions.  This opc
2abe0 6f 64 65 20 77 72 69 74 65 73 20 74 68 61 74 20  ode writes that 
2abf0 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20  key.** into the 
2ac00 73 6f 72 74 65 72 20 50 31 2e 20 20 44 61 74 61  sorter P1.  Data
2ac10 20 66 6f 72 20 74 68 65 20 65 6e 74 72 79 20 69   for the entry i
2ac20 73 20 6e 69 6c 2e 0a 2a 2f 0a 63 61 73 65 20 4f  s nil..*/.case O
2ac30 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 3a 20  P_SorterInsert: 
2ac40 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a        /* in2 */.
2ac50 63 61 73 65 20 4f 50 5f 49 64 78 49 6e 73 65 72  case OP_IdxInser
2ac60 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69  t: {        /* i
2ac70 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  n2 */.  VdbeCurs
2ac80 6f 72 20 2a 70 43 3b 0a 20 20 42 74 72 65 65 50  or *pC;.  BtreeP
2ac90 61 79 6c 6f 61 64 20 78 3b 0a 0a 20 20 61 73 73  ayload x;..  ass
2aca0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2acb0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
2acc0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
2acd0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
2ace0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
2acf0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2ad00 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70  isSorter(pC)==(p
2ad10 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
2ad20 6f 72 74 65 72 49 6e 73 65 72 74 29 20 29 3b 0a  orterInsert) );.
2ad30 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
2ad40 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
2ad50 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26  t( pIn2->flags &
2ad60 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 69   MEM_Blob );.  i
2ad70 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  f( pOp->p5 & OPF
2ad80 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d  LAG_NCHANGE ) p-
2ad90 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 61 73  >nChange++;.  as
2ada0 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
2adb0 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
2adc0 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  E || pOp->opcode
2add0 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72  ==OP_SorterInser
2ade0 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t );.  assert( p
2adf0 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b  C->isTable==0 );
2ae00 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c  .  rc = ExpandBl
2ae10 6f 62 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20  ob(pIn2);.  if( 
2ae20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
2ae30 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2ae40 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
2ae50 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74  =OP_SorterInsert
2ae60 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
2ae70 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 57 72  ite3VdbeSorterWr
2ae80 69 74 65 28 70 43 2c 20 70 49 6e 32 29 3b 0a 20  ite(pC, pIn2);. 
2ae90 20 7d 65 6c 73 65 7b 0a 20 20 20 20 78 2e 6e 4b   }else{.    x.nK
2aea0 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20  ey = pIn2->n;.  
2aeb0 20 20 78 2e 70 4b 65 79 20 3d 20 70 49 6e 32 2d    x.pKey = pIn2-
2aec0 3e 7a 3b 0a 20 20 20 20 78 2e 61 4d 65 6d 20 3d  >z;.    x.aMem =
2aed0 20 61 4d 65 6d 20 2b 20 70 4f 70 2d 3e 70 33 3b   aMem + pOp->p3;
2aee0 0a 20 20 20 20 78 2e 6e 4d 65 6d 20 3d 20 28 75  .    x.nMem = (u
2aef0 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20  16)pOp->p4.i;.  
2af00 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
2af10 72 65 65 49 6e 73 65 72 74 28 70 43 2d 3e 75 63  reeInsert(pC->uc
2af20 2e 70 43 75 72 73 6f 72 2c 20 26 78 2c 0a 20 20  .pCursor, &x,.  
2af30 20 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20         (pOp->p5 
2af40 26 20 28 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44  & (OPFLAG_APPEND
2af50 7c 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49  |OPFLAG_SAVEPOSI
2af60 54 49 4f 4e 29 29 2c 20 0a 20 20 20 20 20 20 20  TION)), .       
2af70 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46   ((pOp->p5 & OPF
2af80 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
2af90 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73  T) ? pC->seekRes
2afa0 75 6c 74 20 3a 20 30 29 0a 20 20 20 20 20 20 20  ult : 0).       
2afb0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
2afc0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
2afd0 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d  to==0 );.    pC-
2afe0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
2aff0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a  ACHE_STALE;.  }.
2b000 20 20 69 66 28 20 72 63 29 20 67 6f 74 6f 20 61    if( rc) goto a
2b010 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2b020 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  r;.  break;.}../
2b030 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 44 65 6c  * Opcode: IdxDel
2b040 65 74 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ete P1 P2 P3 * *
2b050 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
2b060 79 3d 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a  y=r[P2@P3].**.**
2b070 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   The content of 
2b080 50 33 20 72 65 67 69 73 74 65 72 73 20 73 74 61  P3 registers sta
2b090 72 74 69 6e 67 20 61 74 20 72 65 67 69 73 74 65  rting at registe
2b0a0 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20  r P2 form.** an 
2b0b0 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
2b0c0 65 79 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20  ey. This opcode 
2b0d0 72 65 6d 6f 76 65 73 20 74 68 61 74 20 65 6e 74  removes that ent
2b0e0 72 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20  ry from the .** 
2b0f0 69 6e 64 65 78 20 6f 70 65 6e 65 64 20 62 79 20  index opened by 
2b100 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61  cursor P1..*/.ca
2b110 73 65 20 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a  se OP_IdxDelete:
2b120 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
2b130 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
2b140 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65  *pCrsr;.  int re
2b150 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  s;.  UnpackedRec
2b160 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74  ord r;..  assert
2b170 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20  ( pOp->p3>0 );. 
2b180 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
2b190 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f  >0 && pOp->p2+pO
2b1a0 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p3<=(p->nMem+
2b1b0 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  1 - p->nCursor)+
2b1c0 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  1 );.  assert( p
2b1d0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
2b1e0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
2b1f0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
2b200 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
2b210 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
2b220 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
2b230 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
2b240 42 54 52 45 45 20 29 3b 0a 20 20 70 43 72 73 72  BTREE );.  pCrsr
2b250 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f   = pC->uc.pCurso
2b260 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72  r;.  assert( pCr
2b270 73 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  sr!=0 );.  asser
2b280 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b  t( pOp->p5==0 );
2b290 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20  .  r.pKeyInfo = 
2b2a0 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
2b2b0 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
2b2c0 70 4f 70 2d 3e 70 33 3b 0a 20 20 72 2e 64 65 66  pOp->p3;.  r.def
2b2d0 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 72  ault_rc = 0;.  r
2b2e0 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f  .aMem = &aMem[pO
2b2f0 70 2d 3e 70 32 5d 3b 0a 20 20 72 63 20 3d 20 73  p->p2];.  rc = s
2b300 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
2b310 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c  oUnpacked(pCrsr,
2b320 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29   &r, 0, 0, &res)
2b330 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
2b340 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2b350 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 3d  rror;.  if( res=
2b360 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  =0 ){.    rc = s
2b370 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74  qlite3BtreeDelet
2b380 65 28 70 43 72 73 72 2c 20 42 54 52 45 45 5f 41  e(pCrsr, BTREE_A
2b390 55 58 44 45 4c 45 54 45 29 3b 0a 20 20 20 20 69  UXDELETE);.    i
2b3a0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
2b3b0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2b3c0 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
2b3d0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
2b3e0 6f 3d 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 63 61  o==0 );.  pC->ca
2b3f0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
2b400 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 73  E_STALE;.  pC->s
2b410 65 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20  eekResult = 0;. 
2b420 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2b430 63 6f 64 65 3a 20 44 65 66 65 72 72 65 64 53 65  code: DeferredSe
2b440 65 6b 20 50 31 20 2a 20 50 33 20 50 34 20 2a 0a  ek P1 * P3 P4 *.
2b450 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 4d 6f 76  ** Synopsis: Mov
2b460 65 20 50 33 20 74 6f 20 50 31 2e 72 6f 77 69 64  e P3 to P1.rowid
2b470 20 69 66 20 6e 65 65 64 65 64 0a 2a 2a 0a 2a 2a   if needed.**.**
2b480 20 50 31 20 69 73 20 61 6e 20 6f 70 65 6e 20 69   P1 is an open i
2b490 6e 64 65 78 20 63 75 72 73 6f 72 20 61 6e 64 20  ndex cursor and 
2b4a0 50 33 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f  P3 is a cursor o
2b4b0 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  n the correspond
2b4c0 69 6e 67 0a 2a 2a 20 74 61 62 6c 65 2e 20 20 54  ing.** table.  T
2b4d0 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20  his opcode does 
2b4e0 61 20 64 65 66 65 72 72 65 64 20 73 65 65 6b 20  a deferred seek 
2b4f0 6f 66 20 74 68 65 20 50 33 20 74 61 62 6c 65 20  of the P3 table 
2b500 63 75 72 73 6f 72 0a 2a 2a 20 74 6f 20 74 68 65  cursor.** to the
2b510 20 72 6f 77 20 74 68 61 74 20 63 6f 72 72 65 73   row that corres
2b520 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 63 75 72  ponds to the cur
2b530 72 65 6e 74 20 72 6f 77 20 6f 66 20 50 31 2e 0a  rent row of P1..
2b540 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 20  **.** This is a 
2b550 64 65 66 65 72 72 65 64 20 73 65 65 6b 2e 20 20  deferred seek.  
2b560 4e 6f 74 68 69 6e 67 20 61 63 74 75 61 6c 6c 79  Nothing actually
2b570 20 68 61 70 70 65 6e 73 20 75 6e 74 69 6c 0a 2a   happens until.*
2b580 2a 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  * the cursor is 
2b590 75 73 65 64 20 74 6f 20 72 65 61 64 20 61 20 72  used to read a r
2b5a0 65 63 6f 72 64 2e 20 20 54 68 61 74 20 77 61 79  ecord.  That way
2b5b0 2c 20 69 66 20 6e 6f 20 72 65 61 64 73 0a 2a 2a  , if no reads.**
2b5c0 20 6f 63 63 75 72 2c 20 6e 6f 20 75 6e 6e 65 63   occur, no unnec
2b5d0 65 73 73 61 72 79 20 49 2f 4f 20 68 61 70 70 65  essary I/O happe
2b5e0 6e 73 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79  ns..**.** P4 may
2b5f0 20 62 65 20 61 6e 20 61 72 72 61 79 20 6f 66 20   be an array of 
2b600 69 6e 74 65 67 65 72 73 20 28 74 79 70 65 20 50  integers (type P
2b610 34 5f 49 4e 54 41 52 52 41 59 29 20 63 6f 6e 74  4_INTARRAY) cont
2b620 61 69 6e 69 6e 67 0a 2a 2a 20 6f 6e 65 20 65 6e  aining.** one en
2b630 74 72 79 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  try for each col
2b640 75 6d 6e 20 69 6e 20 74 68 65 20 50 33 20 74 61  umn in the P3 ta
2b650 62 6c 65 2e 20 20 49 66 20 61 72 72 61 79 20 65  ble.  If array e
2b660 6e 74 72 79 20 61 28 69 29 0a 2a 2a 20 69 73 20  ntry a(i).** is 
2b670 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 72  non-zero, then r
2b680 65 61 64 69 6e 67 20 63 6f 6c 75 6d 6e 20 61 28  eading column a(
2b690 69 29 2d 31 20 66 72 6f 6d 20 63 75 72 73 6f 72  i)-1 from cursor
2b6a0 20 50 33 20 69 73 20 0a 2a 2a 20 65 71 75 69 76   P3 is .** equiv
2b6b0 61 6c 65 6e 74 20 74 6f 20 70 65 72 66 6f 72 6d  alent to perform
2b6c0 69 6e 67 20 74 68 65 20 64 65 66 65 72 72 65 64  ing the deferred
2b6d0 20 73 65 65 6b 20 61 6e 64 20 74 68 65 6e 20 72   seek and then r
2b6e0 65 61 64 69 6e 67 20 63 6f 6c 75 6d 6e 20 69 20  eading column i 
2b6f0 0a 2a 2a 20 66 72 6f 6d 20 50 31 2e 20 20 54 68  .** from P1.  Th
2b700 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  is information i
2b710 73 20 73 74 6f 72 65 64 20 69 6e 20 50 33 20 61  s stored in P3 a
2b720 6e 64 20 75 73 65 64 20 74 6f 20 72 65 64 69 72  nd used to redir
2b730 65 63 74 0a 2a 2a 20 72 65 61 64 73 20 61 67 61  ect.** reads aga
2b740 69 6e 73 74 20 50 33 20 6f 76 65 72 20 74 6f 20  inst P3 over to 
2b750 50 31 2c 20 74 68 75 73 20 70 6f 73 73 69 62 6c  P1, thus possibl
2b760 79 20 61 76 6f 69 64 69 6e 67 20 74 68 65 20 6e  y avoiding the n
2b770 65 65 64 20 74 6f 0a 2a 2a 20 73 65 65 6b 20 61  eed to.** seek a
2b780 6e 64 20 72 65 61 64 20 63 75 72 73 6f 72 20 50  nd read cursor P
2b790 33 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  3..*/./* Opcode:
2b7a0 20 49 64 78 52 6f 77 69 64 20 50 31 20 50 32 20   IdxRowid P1 P2 
2b7b0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
2b7c0 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a  s: r[P2]=rowid.*
2b7d0 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20  *.** Write into 
2b7e0 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20 69  register P2 an i
2b7f0 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20  nteger which is 
2b800 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69  the last entry i
2b810 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 0a  n the record at.
2b820 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  ** the end of th
2b830 65 20 69 6e 64 65 78 20 6b 65 79 20 70 6f 69 6e  e index key poin
2b840 74 65 64 20 74 6f 20 62 79 20 63 75 72 73 6f 72  ted to by cursor
2b850 20 50 31 2e 20 20 54 68 69 73 20 69 6e 74 65 67   P1.  This integ
2b860 65 72 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20  er should be.** 
2b870 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65  the rowid of the
2b880 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 6f 20   table entry to 
2b890 77 68 69 63 68 20 74 68 69 73 20 69 6e 64 65 78  which this index
2b8a0 20 65 6e 74 72 79 20 70 6f 69 6e 74 73 2e 0a 2a   entry points..*
2b8b0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 52  *.** See also: R
2b8c0 6f 77 69 64 2c 20 4d 61 6b 65 52 65 63 6f 72 64  owid, MakeRecord
2b8d0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 66  ..*/.case OP_Def
2b8e0 65 72 72 65 64 53 65 65 6b 3a 0a 63 61 73 65 20  erredSeek:.case 
2b8f0 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b 20 20  OP_IdxRowid: {  
2b900 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
2b910 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
2b920 20 2a 70 43 3b 20 20 20 20 20 20 20 20 20 20 20   *pC;           
2b930 20 20 2f 2a 20 54 68 65 20 50 31 20 69 6e 64 65    /* The P1 inde
2b940 78 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 56 64  x cursor */.  Vd
2b950 62 65 43 75 72 73 6f 72 20 2a 70 54 61 62 43 75  beCursor *pTabCu
2b960 72 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  r;        /* The
2b970 20 50 32 20 74 61 62 6c 65 20 63 75 72 73 6f 72   P2 table cursor
2b980 20 28 4f 50 5f 44 65 66 65 72 72 65 64 53 65 65   (OP_DeferredSee
2b990 6b 20 6f 6e 6c 79 29 20 2a 2f 0a 20 20 69 36 34  k only) */.  i64
2b9a0 20 72 6f 77 69 64 3b 20 20 20 20 20 20 20 20 20   rowid;         
2b9b0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 77 69           /* Rowi
2b9c0 64 20 74 68 61 74 20 50 31 20 63 75 72 72 65 6e  d that P1 curren
2b9d0 74 20 70 6f 69 6e 74 73 20 74 6f 20 2a 2f 0a 0a  t points to */..
2b9e0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2b9f0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
2ba00 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
2ba10 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
2ba20 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2ba30 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
2ba40 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
2ba50 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
2ba60 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2ba70 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20  ->uc.pCursor!=0 
2ba80 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
2ba90 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20  >isTable==0 );. 
2baa0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
2bab0 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
2bac0 3b 0a 20 20 61 73 73 65 72 74 28 20 21 70 43 2d  ;.  assert( !pC-
2bad0 3e 6e 75 6c 6c 52 6f 77 20 7c 7c 20 70 4f 70 2d  >nullRow || pOp-
2bae0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 52  >opcode==OP_IdxR
2baf0 6f 77 69 64 20 29 3b 0a 0a 20 20 2f 2a 20 54 68  owid );..  /* Th
2bb00 65 20 49 64 78 52 6f 77 69 64 20 61 6e 64 20 53  e IdxRowid and S
2bb10 65 65 6b 20 6f 70 63 6f 64 65 73 20 61 72 65 20  eek opcodes are 
2bb20 63 6f 6d 62 69 6e 65 64 20 62 65 63 61 75 73 65  combined because
2bb30 20 6f 66 20 74 68 65 20 63 6f 6d 6d 6f 6e 61 6c   of the commonal
2bb40 69 74 79 0a 20 20 2a 2a 20 6f 66 20 73 71 6c 69  ity.  ** of sqli
2bb50 74 65 33 56 64 62 65 43 75 72 73 6f 72 52 65 73  te3VdbeCursorRes
2bb60 74 6f 72 65 28 29 20 61 6e 64 20 73 71 6c 69 74  tore() and sqlit
2bb70 65 33 56 64 62 65 49 64 78 52 6f 77 69 64 28 29  e3VdbeIdxRowid()
2bb80 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69  . */.  rc = sqli
2bb90 74 65 33 56 64 62 65 43 75 72 73 6f 72 52 65 73  te3VdbeCursorRes
2bba0 74 6f 72 65 28 70 43 29 3b 0a 0a 20 20 2f 2a 20  tore(pC);..  /* 
2bbb0 73 71 6c 69 74 65 33 56 62 65 43 75 72 73 6f 72  sqlite3VbeCursor
2bbc0 52 65 73 74 6f 72 65 28 29 20 63 61 6e 20 6f 6e  Restore() can on
2bbd0 6c 79 20 66 61 69 6c 20 69 66 20 74 68 65 20 72  ly fail if the r
2bbe0 65 63 6f 72 64 20 68 61 73 20 62 65 65 6e 20 64  ecord has been d
2bbf0 65 6c 65 74 65 64 0a 20 20 2a 2a 20 6f 75 74 20  eleted.  ** out 
2bc00 66 72 6f 6d 20 75 6e 64 65 72 20 74 68 65 20 63  from under the c
2bc10 75 72 73 6f 72 2e 20 20 54 68 61 74 20 77 69 6c  ursor.  That wil
2bc20 6c 20 6e 65 76 65 72 20 68 61 70 70 65 6e 73 20  l never happens 
2bc30 66 6f 72 20 61 6e 20 49 64 78 52 6f 77 69 64 0a  for an IdxRowid.
2bc40 20 20 2a 2a 20 6f 72 20 53 65 65 6b 20 6f 70 63    ** or Seek opc
2bc50 6f 64 65 20 2a 2f 0a 20 20 69 66 28 20 4e 45 56  ode */.  if( NEV
2bc60 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  ER(rc!=SQLITE_OK
2bc70 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
2bc80 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20  ue_to_error;..  
2bc90 69 66 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77  if( !pC->nullRow
2bca0 20 29 7b 0a 20 20 20 20 72 6f 77 69 64 20 3d 20   ){.    rowid = 
2bcb0 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65  0;  /* Not neede
2bcc0 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f  d.  Only used to
2bcd0 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69   silence a warni
2bce0 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20  ng. */.    rc = 
2bcf0 73 71 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f  sqlite3VdbeIdxRo
2bd00 77 69 64 28 64 62 2c 20 70 43 2d 3e 75 63 2e 70  wid(db, pC->uc.p
2bd10 43 75 72 73 6f 72 2c 20 26 72 6f 77 69 64 29 3b  Cursor, &rowid);
2bd20 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c  .    if( rc!=SQL
2bd30 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
2bd40 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2bd50 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  o_error;.    }. 
2bd60 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f     if( pOp->opco
2bd70 64 65 3d 3d 4f 50 5f 44 65 66 65 72 72 65 64 53  de==OP_DeferredS
2bd80 65 65 6b 20 29 7b 0a 20 20 20 20 20 20 61 73 73  eek ){.      ass
2bd90 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20  ert( pOp->p3>=0 
2bda0 26 26 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e 6e 43  && pOp->p3<p->nC
2bdb0 75 72 73 6f 72 20 29 3b 0a 20 20 20 20 20 20 70  ursor );.      p
2bdc0 54 61 62 43 75 72 20 3d 20 70 2d 3e 61 70 43 73  TabCur = p->apCs
2bdd0 72 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  r[pOp->p3];.    
2bde0 20 20 61 73 73 65 72 74 28 20 70 54 61 62 43 75    assert( pTabCu
2bdf0 72 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73  r!=0 );.      as
2be00 73 65 72 74 28 20 70 54 61 62 43 75 72 2d 3e 65  sert( pTabCur->e
2be10 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
2be20 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20 20 20  _BTREE );.      
2be30 61 73 73 65 72 74 28 20 70 54 61 62 43 75 72 2d  assert( pTabCur-
2be40 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29  >uc.pCursor!=0 )
2be50 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
2be60 70 54 61 62 43 75 72 2d 3e 69 73 54 61 62 6c 65  pTabCur->isTable
2be70 20 29 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75   );.      pTabCu
2be80 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  r->nullRow = 0;.
2be90 20 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e 6d        pTabCur->m
2bea0 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 72 6f  ovetoTarget = ro
2beb0 77 69 64 3b 0a 20 20 20 20 20 20 70 54 61 62 43  wid;.      pTabC
2bec0 75 72 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  ur->deferredMove
2bed0 74 6f 20 3d 20 31 3b 0a 20 20 20 20 20 20 61 73  to = 1;.      as
2bee0 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
2bef0 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 7c  e==P4_INTARRAY |
2bf00 7c 20 70 4f 70 2d 3e 70 34 2e 61 69 3d 3d 30 20  | pOp->p4.ai==0 
2bf10 29 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75 72  );.      pTabCur
2bf20 2d 3e 61 41 6c 74 4d 61 70 20 3d 20 70 4f 70 2d  ->aAltMap = pOp-
2bf30 3e 70 34 2e 61 69 3b 0a 20 20 20 20 20 20 70 54  >p4.ai;.      pT
2bf40 61 62 43 75 72 2d 3e 70 41 6c 74 43 75 72 73 6f  abCur->pAltCurso
2bf50 72 20 3d 20 70 43 3b 0a 20 20 20 20 7d 65 6c 73  r = pC;.    }els
2bf60 65 7b 0a 20 20 20 20 20 20 70 4f 75 74 20 3d 20  e{.      pOut = 
2bf70 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
2bf80 2c 20 70 4f 70 29 3b 0a 20 20 20 20 20 20 70 4f  , pOp);.      pO
2bf90 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69 64 3b  ut->u.i = rowid;
2bfa0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
2bfb0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
2bfc0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 52  >opcode==OP_IdxR
2bfd0 6f 77 69 64 20 29 3b 0a 20 20 20 20 73 71 6c 69  owid );.    sqli
2bfe0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
2bff0 6c 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  l(&aMem[pOp->p2]
2c000 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
2c010 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  }../* Opcode: Id
2c020 78 47 45 20 50 31 20 50 32 20 50 33 20 50 34 20  xGE P1 P2 P3 P4 
2c030 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
2c040 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
2c050 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74  ** The P4 regist
2c060 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e  er values beginn
2c070 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d  ing with P3 form
2c080 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
2c090 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20  ex .** key that 
2c0a0 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52  omits the PRIMAR
2c0b0 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65 20  Y KEY.  Compare 
2c0c0 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61  this key value a
2c0d0 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78  gainst the index
2c0e0 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20   .** that P1 is 
2c0f0 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
2c100 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20  ng to, ignoring 
2c110 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
2c120 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65  or ROWID .** fie
2c130 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 2e 0a  lds at the end..
2c140 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
2c150 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 67  index entry is g
2c160 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
2c170 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
2c180 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75  value.** then ju
2c190 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72  mp to P2.  Other
2c1a0 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67  wise fall throug
2c1b0 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
2c1c0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  struction..*/./*
2c1d0 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 54 20 50   Opcode: IdxGT P
2c1e0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
2c1f0 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
2c200 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68  [P3@P4].**.** Th
2c210 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61  e P4 register va
2c220 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  lues beginning w
2c230 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75  ith P3 form an u
2c240 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a  npacked index .*
2c250 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73  * key that omits
2c260 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
2c270 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20  .  Compare this 
2c280 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73  key value agains
2c290 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20  t the index .** 
2c2a0 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65  that P1 is curre
2c2b0 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f  ntly pointing to
2c2c0 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50  , ignoring the P
2c2d0 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f  RIMARY KEY or RO
2c2e0 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20 61  WID .** fields a
2c2f0 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a  t the end..**.**
2c300 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
2c310 20 65 6e 74 72 79 20 69 73 20 67 72 65 61 74 65   entry is greate
2c320 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76  r than the key v
2c330 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d  alue.** then jum
2c340 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77  p to P2.  Otherw
2c350 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ise fall through
2c360 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
2c370 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  truction..*/./* 
2c380 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54 20 50 31  Opcode: IdxLT P1
2c390 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
2c3a0 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
2c3b0 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65  P3@P4].**.** The
2c3c0 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c   P4 register val
2c3d0 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ues beginning wi
2c3e0 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e  th P3 form an un
2c3f0 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a  packed index .**
2c400 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20   key that omits 
2c410 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
2c420 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61  or ROWID.  Compa
2c430 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75  re this key valu
2c440 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68 65  e against.** the
2c450 20 69 6e 64 65 78 20 74 68 61 74 20 50 31 20 69   index that P1 i
2c460 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
2c470 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e  ting to, ignorin
2c480 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  g the PRIMARY KE
2c490 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e  Y or.** ROWID on
2c4a0 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a   the P1 index..*
2c4b0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69  *.** If the P1 i
2c4c0 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65  ndex entry is le
2c4d0 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  ss than the key 
2c4e0 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 20  value then jump 
2c4f0 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68 65 72 77  to P2..** Otherw
2c500 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ise fall through
2c510 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
2c520 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  truction..*/./* 
2c530 4f 70 63 6f 64 65 3a 20 49 64 78 4c 45 20 50 31  Opcode: IdxLE P1
2c540 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
2c550 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
2c560 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65  P3@P4].**.** The
2c570 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c   P4 register val
2c580 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ues beginning wi
2c590 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e  th P3 form an un
2c5a0 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a  packed index .**
2c5b0 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20   key that omits 
2c5c0 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
2c5d0 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61  or ROWID.  Compa
2c5e0 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75  re this key valu
2c5f0 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68 65  e against.** the
2c600 20 69 6e 64 65 78 20 74 68 61 74 20 50 31 20 69   index that P1 i
2c610 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
2c620 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e  ting to, ignorin
2c630 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  g the PRIMARY KE
2c640 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e  Y or.** ROWID on
2c650 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a   the P1 index..*
2c660 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69  *.** If the P1 i
2c670 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65  ndex entry is le
2c680 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
2c690 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75   to the key valu
2c6a0 65 20 74 68 65 6e 20 6a 75 6d 70 0a 2a 2a 20 74  e then jump.** t
2c6b0 6f 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 20  o P2. Otherwise 
2c6c0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
2c6d0 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
2c6e0 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
2c6f0 5f 49 64 78 4c 45 3a 20 20 20 20 20 20 20 20 20  _IdxLE:         
2c700 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
2c710 20 4f 50 5f 49 64 78 47 54 3a 20 20 20 20 20 20   OP_IdxGT:      
2c720 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63      /* jump */.c
2c730 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20 20  ase OP_IdxLT:   
2c740 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
2c750 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 45 3a  /.case OP_IdxGE:
2c760 20 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d    {       /* jum
2c770 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  p */.  VdbeCurso
2c780 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73  r *pC;.  int res
2c790 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
2c7a0 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28  rd r;..  assert(
2c7b0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
2c7c0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
2c7d0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
2c7e0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
2c7f0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
2c800 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2c810 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 61  isOrdered );.  a
2c820 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
2c830 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
2c840 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  EE );.  assert( 
2c850 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d  pC->uc.pCursor!=
2c860 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  0);.  assert( pC
2c870 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
2c880 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
2c890 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70   pOp->p5==0 || p
2c8a0 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 61  Op->p5==1 );.  a
2c8b0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
2c8c0 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
2c8d0 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
2c8e0 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72  C->pKeyInfo;.  r
2c8f0 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70  .nField = (u16)p
2c900 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 69 66 28 20  Op->p4.i;.  if( 
2c910 70 4f 70 2d 3e 6f 70 63 6f 64 65 3c 4f 50 5f 49  pOp->opcode<OP_I
2c920 64 78 4c 54 20 29 7b 0a 20 20 20 20 61 73 73 65  dxLT ){.    asse
2c930 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
2c940 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f 70  =OP_IdxLE || pOp
2c950 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
2c960 47 54 20 29 3b 0a 20 20 20 20 72 2e 64 65 66 61  GT );.    r.defa
2c970 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20 7d  ult_rc = -1;.  }
2c980 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
2c990 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
2c9a0 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e  P_IdxGE || pOp->
2c9b0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54  opcode==OP_IdxLT
2c9c0 20 29 3b 0a 20 20 20 20 72 2e 64 65 66 61 75 6c   );.    r.defaul
2c9d0 74 5f 72 63 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  t_rc = 0;.  }.  
2c9e0 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  r.aMem = &aMem[p
2c9f0 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20  Op->p3];.#ifdef 
2ca00 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 7b  SQLITE_DEBUG.  {
2ca10 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b   int i; for(i=0;
2ca20 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b   i<r.nField; i++
2ca30 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56  ) assert( memIsV
2ca40 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29  alid(&r.aMem[i])
2ca50 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72   ); }.#endif.  r
2ca60 65 73 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  es = 0;  /* Not 
2ca70 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73  needed.  Only us
2ca80 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20  ed to silence a 
2ca90 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63  warning. */.  rc
2caa0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64   = sqlite3VdbeId
2cab0 78 4b 65 79 43 6f 6d 70 61 72 65 28 64 62 2c 20  xKeyCompare(db, 
2cac0 70 43 2c 20 26 72 2c 20 26 72 65 73 29 3b 0a 20  pC, &r, &res);. 
2cad0 20 61 73 73 65 72 74 28 20 28 4f 50 5f 49 64 78   assert( (OP_Idx
2cae0 4c 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c 54  LE&1)==(OP_IdxLT
2caf0 26 31 29 20 26 26 20 28 4f 50 5f 49 64 78 47 45  &1) && (OP_IdxGE
2cb00 26 31 29 3d 3d 28 4f 50 5f 49 64 78 47 54 26 31  &1)==(OP_IdxGT&1
2cb10 29 20 29 3b 0a 20 20 69 66 28 20 28 70 4f 70 2d  ) );.  if( (pOp-
2cb20 3e 6f 70 63 6f 64 65 26 31 29 3d 3d 28 4f 50 5f  >opcode&1)==(OP_
2cb30 49 64 78 4c 54 26 31 29 20 29 7b 0a 20 20 20 20  IdxLT&1) ){.    
2cb40 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
2cb50 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c  ode==OP_IdxLE ||
2cb60 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
2cb70 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72 65  _IdxLT );.    re
2cb80 73 20 3d 20 2d 72 65 73 3b 0a 20 20 7d 65 6c 73  s = -res;.  }els
2cb90 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
2cba0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
2cbb0 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  dxGE || pOp->opc
2cbc0 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b  ode==OP_IdxGT );
2cbd0 0a 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20 7d 0a  .    res++;.  }.
2cbe0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
2cbf0 6e 28 72 65 73 3e 30 2c 32 29 3b 0a 20 20 69 66  n(res>0,2);.  if
2cc00 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
2cc10 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2cc20 20 20 69 66 28 20 72 65 73 3e 30 20 29 20 67 6f    if( res>0 ) go
2cc30 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
2cc40 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2cc50 63 6f 64 65 3a 20 44 65 73 74 72 6f 79 20 50 31  code: Destroy P1
2cc60 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
2cc70 20 44 65 6c 65 74 65 20 61 6e 20 65 6e 74 69 72   Delete an entir
2cc80 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
2cc90 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20   or index whose 
2cca0 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 74 68 65  root page in the
2ccb0 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c   database.** fil
2ccc0 65 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31  e is given by P1
2ccd0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c  ..**.** The tabl
2cce0 65 20 62 65 69 6e 67 20 64 65 73 74 72 6f 79 65  e being destroye
2ccf0 64 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e  d is in the main
2cd00 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
2cd10 66 20 50 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20  f P3==0.  If.** 
2cd20 50 33 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74  P3==1 then the t
2cd30 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72  able to be clear
2cd40 20 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c   is in the auxil
2cd50 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69  iary database fi
2cd60 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73  le.** that is us
2cd70 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c  ed to store tabl
2cd80 65 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20  es create using 
2cd90 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59  CREATE TEMPORARY
2cda0 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66   TABLE..**.** If
2cdb0 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20 65   AUTOVACUUM is e
2cdc0 6e 61 62 6c 65 64 20 74 68 65 6e 20 69 74 20 69  nabled then it i
2cdd0 73 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20  s possible that 
2cde0 61 6e 6f 74 68 65 72 20 72 6f 6f 74 20 70 61 67  another root pag
2cdf0 65 0a 2a 2a 20 6d 69 67 68 74 20 62 65 20 6d 6f  e.** might be mo
2ce00 76 65 64 20 69 6e 74 6f 20 74 68 65 20 6e 65 77  ved into the new
2ce10 6c 79 20 64 65 6c 65 74 65 64 20 72 6f 6f 74 20  ly deleted root 
2ce20 70 61 67 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  page in order to
2ce30 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f   keep all.** roo
2ce40 74 20 70 61 67 65 73 20 63 6f 6e 74 69 67 75 6f  t pages contiguo
2ce50 75 73 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e  us at the beginn
2ce60 69 6e 67 20 6f 66 20 74 68 65 20 64 61 74 61 62  ing of the datab
2ce70 61 73 65 2e 20 20 54 68 65 20 66 6f 72 6d 65 72  ase.  The former
2ce80 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74 68 65  .** value of the
2ce90 20 72 6f 6f 74 20 70 61 67 65 20 74 68 61 74 20   root page that 
2cea0 6d 6f 76 65 64 20 2d 20 69 74 73 20 76 61 6c 75  moved - its valu
2ceb0 65 20 62 65 66 6f 72 65 20 74 68 65 20 6d 6f 76  e before the mov
2cec0 65 20 6f 63 63 75 72 72 65 64 20 2d 0a 2a 2a 20  e occurred -.** 
2ced0 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
2cee0 69 73 74 65 72 20 50 32 2e 20 49 66 20 6e 6f 20  ister P2. If no 
2cef0 70 61 67 65 20 6d 6f 76 65 6d 65 6e 74 20 77 61  page movement wa
2cf00 73 20 72 65 71 75 69 72 65 64 20 28 62 65 63 61  s required (beca
2cf10 75 73 65 20 74 68 65 0a 2a 2a 20 74 61 62 6c 65  use the.** table
2cf20 20 62 65 69 6e 67 20 64 72 6f 70 70 65 64 20 77   being dropped w
2cf30 61 73 20 61 6c 72 65 61 64 79 20 74 68 65 20 6c  as already the l
2cf40 61 73 74 20 6f 6e 65 20 69 6e 20 74 68 65 20 64  ast one in the d
2cf50 61 74 61 62 61 73 65 29 20 74 68 65 6e 20 61 20  atabase) then a 
2cf60 0a 2a 2a 20 7a 65 72 6f 20 69 73 20 73 74 6f 72  .** zero is stor
2cf70 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
2cf80 32 2e 20 20 49 66 20 41 55 54 4f 56 41 43 55 55  2.  If AUTOVACUU
2cf90 4d 20 69 73 20 64 69 73 61 62 6c 65 64 20 74 68  M is disabled th
2cfa0 65 6e 20 61 20 7a 65 72 6f 20 0a 2a 2a 20 69 73  en a zero .** is
2cfb0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
2cfc0 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68  ter P2..**.** Th
2cfd0 69 73 20 6f 70 63 6f 64 65 20 74 68 72 6f 77 73  is opcode throws
2cfe0 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68 65   an error if the
2cff0 72 65 20 61 72 65 20 61 6e 79 20 61 63 74 69 76  re are any activ
2d000 65 20 72 65 61 64 65 72 20 56 4d 73 20 77 68 65  e reader VMs whe
2d010 6e 0a 2a 2a 20 69 74 20 69 73 20 69 6e 76 6f 6b  n.** it is invok
2d020 65 64 2e 20 54 68 69 73 20 69 73 20 64 6f 6e 65  ed. This is done
2d030 20 74 6f 20 61 76 6f 69 64 20 74 68 65 20 64 69   to avoid the di
2d040 66 66 69 63 75 6c 74 79 20 61 73 73 6f 63 69 61  fficulty associa
2d050 74 65 64 20 77 69 74 68 20 0a 2a 2a 20 75 70 64  ted with .** upd
2d060 61 74 69 6e 67 20 65 78 69 73 74 69 6e 67 20 63  ating existing c
2d070 75 72 73 6f 72 73 20 77 68 65 6e 20 61 20 72 6f  ursors when a ro
2d080 6f 74 20 70 61 67 65 20 69 73 20 6d 6f 76 65 64  ot page is moved
2d090 20 69 6e 20 61 6e 20 41 55 54 4f 56 41 43 55 55   in an AUTOVACUU
2d0a0 4d 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20  M .** database. 
2d0b0 54 68 69 73 20 65 72 72 6f 72 20 69 73 20 74 68  This error is th
2d0c0 72 6f 77 6e 20 65 76 65 6e 20 69 66 20 74 68 65  rown even if the
2d0d0 20 64 61 74 61 62 61 73 65 20 69 73 20 6e 6f 74   database is not
2d0e0 20 61 6e 20 41 55 54 4f 56 41 43 55 55 4d 20 0a   an AUTOVACUUM .
2d0f0 2a 2a 20 64 62 20 69 6e 20 6f 72 64 65 72 20 74  ** db in order t
2d100 6f 20 61 76 6f 69 64 20 69 6e 74 72 6f 64 75 63  o avoid introduc
2d110 69 6e 67 20 61 6e 20 69 6e 63 6f 6d 70 61 74 69  ing an incompati
2d120 62 69 6c 69 74 79 20 62 65 74 77 65 65 6e 20 61  bility between a
2d130 75 74 6f 76 61 63 75 75 6d 20 0a 2a 2a 20 61 6e  utovacuum .** an
2d140 64 20 6e 6f 6e 2d 61 75 74 6f 76 61 63 75 75 6d  d non-autovacuum
2d150 20 6d 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a 20 53 65   modes..**.** Se
2d160 65 20 61 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f  e also: Clear.*/
2d170 0a 63 61 73 65 20 4f 50 5f 44 65 73 74 72 6f 79  .case OP_Destroy
2d180 3a 20 7b 20 20 20 20 20 2f 2a 20 6f 75 74 32 20  : {     /* out2 
2d190 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64 3b  */.  int iMoved;
2d1a0 0a 20 20 69 6e 74 20 69 44 62 3b 0a 0a 20 20 61  .  int iDb;..  a
2d1b0 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
2d1c0 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ly==0 );.  asser
2d1d0 74 28 20 70 4f 70 2d 3e 70 31 3e 31 20 29 3b 0a  t( pOp->p1>1 );.
2d1e0 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
2d1f0 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
2d200 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
2d210 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28   MEM_Null;.  if(
2d220 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 20 3e   db->nVdbeRead >
2d230 20 64 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2b 31   db->nVDestroy+1
2d240 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
2d250 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20  ITE_LOCKED;.    
2d260 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d  p->errorAction =
2d270 20 4f 45 5f 41 62 6f 72 74 3b 0a 20 20 20 20 67   OE_Abort;.    g
2d280 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2d290 5f 65 72 72 6f 72 3b 0a 20 20 7d 65 6c 73 65 7b  _error;.  }else{
2d2a0 0a 20 20 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  .    iDb = pOp->
2d2b0 70 33 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  p3;.    assert( 
2d2c0 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
2d2d0 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b  reeMask, iDb) );
2d2e0 0a 20 20 20 20 69 4d 6f 76 65 64 20 3d 20 30 3b  .    iMoved = 0;
2d2f0 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e    /* Not needed.
2d300 20 20 4f 6e 6c 79 20 74 6f 20 73 69 6c 65 6e 63    Only to silenc
2d310 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a  e a warning. */.
2d320 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2d330 42 74 72 65 65 44 72 6f 70 54 61 62 6c 65 28 64  BtreeDropTable(d
2d340 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c  b->aDb[iDb].pBt,
2d350 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f 76 65   pOp->p1, &iMove
2d360 64 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c  d);.    pOut->fl
2d370 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
2d380 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69     pOut->u.i = i
2d390 4d 6f 76 65 64 3b 0a 20 20 20 20 69 66 28 20 72  Moved;.    if( r
2d3a0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
2d3b0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 69 66  ue_to_error;.#if
2d3c0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2d3d0 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 20 20  _AUTOVACUUM.    
2d3e0 69 66 28 20 69 4d 6f 76 65 64 21 3d 30 20 29 7b  if( iMoved!=0 ){
2d3f0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f  .      sqlite3Ro
2d400 6f 74 50 61 67 65 4d 6f 76 65 64 28 64 62 2c 20  otPageMoved(db, 
2d410 69 44 62 2c 20 69 4d 6f 76 65 64 2c 20 70 4f 70  iDb, iMoved, pOp
2d420 2d 3e 70 31 29 3b 0a 20 20 20 20 20 20 2f 2a 20  ->p1);.      /* 
2d430 41 6c 6c 20 4f 50 5f 44 65 73 74 72 6f 79 20 6f  All OP_Destroy o
2d440 70 65 72 61 74 69 6f 6e 73 20 6f 63 63 75 72 20  perations occur 
2d450 6f 6e 20 74 68 65 20 73 61 6d 65 20 62 74 72 65  on the same btre
2d460 65 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72  e */.      asser
2d470 74 28 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e  t( resetSchemaOn
2d480 46 61 75 6c 74 3d 3d 30 20 7c 7c 20 72 65 73 65  Fault==0 || rese
2d490 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d  tSchemaOnFault==
2d4a0 69 44 62 2b 31 20 29 3b 0a 20 20 20 20 20 20 72  iDb+1 );.      r
2d4b0 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c  esetSchemaOnFaul
2d4c0 74 20 3d 20 69 44 62 2b 31 3b 0a 20 20 20 20 7d  t = iDb+1;.    }
2d4d0 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72  .#endif.  }.  br
2d4e0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2d4f0 65 3a 20 43 6c 65 61 72 20 50 31 20 50 32 20 50  e: Clear P1 P2 P
2d500 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61  3.**.** Delete a
2d510 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74  ll contents of t
2d520 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
2d530 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65  e or index whose
2d540 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e   root page.** in
2d550 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
2d560 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20 50  le is given by P
2d570 31 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20  1.  But, unlike 
2d580 44 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a  Destroy, do not.
2d590 2a 2a 20 72 65 6d 6f 76 65 20 74 68 65 20 74 61  ** remove the ta
2d5a0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 72 6f  ble or index fro
2d5b0 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  m the database f
2d5c0 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74  ile..**.** The t
2d5d0 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72  able being clear
2d5e0 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20   is in the main 
2d5f0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
2d600 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50   P2==0.  If.** P
2d610 32 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61  2==1 then the ta
2d620 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20  ble to be clear 
2d630 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69  is in the auxili
2d640 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
2d650 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65  e.** that is use
2d660 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65  d to store table
2d670 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43  s create using C
2d680 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20  REATE TEMPORARY 
2d690 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  TABLE..**.** If 
2d6a0 74 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20  the P3 value is 
2d6b0 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74  non-zero, then t
2d6c0 68 65 20 74 61 62 6c 65 20 72 65 66 65 72 72 65  he table referre
2d6d0 64 20 74 6f 20 6d 75 73 74 20 62 65 20 61 6e 0a  d to must be an.
2d6e0 2a 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c 65 20  ** intkey table 
2d6f0 28 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20 6e  (an SQL table, n
2d700 6f 74 20 61 6e 20 69 6e 64 65 78 29 2e 20 49 6e  ot an index). In
2d710 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20 72   this case the r
2d720 6f 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63 6f  ow change .** co
2d730 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  unt is increment
2d740 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72  ed by the number
2d750 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20   of rows in the 
2d760 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61  table being clea
2d770 72 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20 69  red. .** If P3 i
2d780 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a  s greater than z
2d790 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 76 61  ero, then the va
2d7a0 6c 75 65 20 73 74 6f 72 65 64 20 69 6e 20 72 65  lue stored in re
2d7b0 67 69 73 74 65 72 20 50 33 20 69 73 0a 2a 2a 20  gister P3 is.** 
2d7c0 61 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65 64  also incremented
2d7d0 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   by the number o
2d7e0 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61  f rows in the ta
2d7f0 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65  ble being cleare
2d800 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  d..**.** See als
2d810 6f 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63 61  o: Destroy.*/.ca
2d820 73 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a 20  se OP_Clear: {. 
2d830 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20 0a   int nChange;. .
2d840 20 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20    nChange = 0;. 
2d850 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
2d860 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73 73  Only==0 );.  ass
2d870 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
2d880 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f  p->btreeMask, pO
2d890 70 2d 3e 70 32 29 20 29 3b 0a 20 20 72 63 20 3d  p->p2) );.  rc =
2d8a0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65   sqlite3BtreeCle
2d8b0 61 72 54 61 62 6c 65 28 0a 20 20 20 20 20 20 64  arTable(.      d
2d8c0 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e  b->aDb[pOp->p2].
2d8d0 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28 70  pBt, pOp->p1, (p
2d8e0 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e 67  Op->p3 ? &nChang
2d8f0 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69 66  e : 0).  );.  if
2d900 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20  ( pOp->p3 ){.   
2d910 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20 6e   p->nChange += n
2d920 43 68 61 6e 67 65 3b 0a 20 20 20 20 69 66 28 20  Change;.    if( 
2d930 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20  pOp->p3>0 ){.   
2d940 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
2d950 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d  Valid(&aMem[pOp-
2d960 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 6d  >p3]) );.      m
2d970 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
2d980 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  p, &aMem[pOp->p3
2d990 5d 29 3b 0a 20 20 20 20 20 20 61 4d 65 6d 5b 70  ]);.      aMem[p
2d9a0 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e  Op->p3].u.i += n
2d9b0 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20 20  Change;.    }.  
2d9c0 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  }.  if( rc ) got
2d9d0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2d9e0 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
2d9f0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73  ../* Opcode: Res
2da00 65 74 53 6f 72 74 65 72 20 50 31 20 2a 20 2a 20  etSorter P1 * * 
2da10 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65  * *.**.** Delete
2da20 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 66 72   all contents fr
2da30 6f 6d 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c  om the ephemeral
2da40 20 74 61 62 6c 65 20 6f 72 20 73 6f 72 74 65 72   table or sorter
2da50 0a 2a 2a 20 74 68 61 74 20 69 73 20 6f 70 65 6e  .** that is open
2da60 20 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a   on cursor P1..*
2da70 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
2da80 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20   only works for 
2da90 63 75 72 73 6f 72 73 20 75 73 65 64 20 66 6f 72  cursors used for
2daa0 20 73 6f 72 74 69 6e 67 20 61 6e 64 0a 2a 2a 20   sorting and.** 
2dab0 6f 70 65 6e 65 64 20 77 69 74 68 20 4f 50 5f 4f  opened with OP_O
2dac0 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 72 20  penEphemeral or 
2dad0 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 2e 0a 2a  OP_SorterOpen..*
2dae0 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74 53  /.case OP_ResetS
2daf0 6f 72 74 65 72 3a 20 7b 0a 20 20 56 64 62 65 43  orter: {.  VdbeC
2db00 75 72 73 6f 72 20 2a 70 43 3b 0a 20 0a 20 20 61  ursor *pC;. .  a
2db10 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2db20 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
2db30 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
2db40 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2db50 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2db60 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 73  C!=0 );.  if( is
2db70 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20  Sorter(pC) ){.  
2db80 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72    sqlite3VdbeSor
2db90 74 65 72 52 65 73 65 74 28 64 62 2c 20 70 43 2d  terReset(db, pC-
2dba0 3e 75 63 2e 70 53 6f 72 74 65 72 29 3b 0a 20 20  >uc.pSorter);.  
2dbb0 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
2dbc0 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
2dbd0 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
2dbe0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
2dbf0 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 29 3b  ->isEphemeral );
2dc00 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
2dc10 33 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65  3BtreeClearTable
2dc20 4f 66 43 75 72 73 6f 72 28 70 43 2d 3e 75 63 2e  OfCursor(pC->uc.
2dc30 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 69 66  pCursor);.    if
2dc40 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
2dc50 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2dc60 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2dc70 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74  /* Opcode: Creat
2dc80 65 42 74 72 65 65 20 50 31 20 50 32 20 50 33 20  eBtree P1 P2 P3 
2dc90 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2dca0 20 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d   r[P2]=root iDb=
2dcb0 50 31 20 66 6c 61 67 73 3d 50 33 0a 2a 2a 0a 2a  P1 flags=P3.**.*
2dcc0 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77  * Allocate a new
2dcd0 20 62 2d 74 72 65 65 20 69 6e 20 74 68 65 20 6d   b-tree in the m
2dce0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
2dcf0 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e  e if P1==0 or in
2dd00 20 74 68 65 0a 2a 2a 20 54 45 4d 50 20 64 61 74   the.** TEMP dat
2dd10 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31  abase file if P1
2dd20 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74  ==1 or in an att
2dd30 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20 69  ached database i
2dd40 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 54 68 65 20  f.** P1>1.  The 
2dd50 50 33 20 61 72 67 75 6d 65 6e 74 20 6d 75 73 74  P3 argument must
2dd60 20 62 65 20 31 20 28 42 54 52 45 45 5f 49 4e 54   be 1 (BTREE_INT
2dd70 4b 45 59 29 20 66 6f 72 20 61 20 72 6f 77 69 64  KEY) for a rowid
2dd80 20 74 61 62 6c 65 0a 2a 2a 20 69 74 20 6d 75 73   table.** it mus
2dd90 74 20 62 65 20 32 20 28 42 54 52 45 45 5f 42 4c  t be 2 (BTREE_BL
2dda0 4f 42 4b 45 59 29 20 66 6f 72 20 61 20 69 6e 64  OBKEY) for a ind
2ddb0 65 78 20 6f 72 20 57 49 54 48 4f 55 54 20 52 4f  ex or WITHOUT RO
2ddc0 57 49 44 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68  WID table..** Th
2ddd0 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  e root page numb
2dde0 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 62 2d  er of the new b-
2ddf0 74 72 65 65 20 69 73 20 73 74 6f 72 65 64 20 69  tree is stored i
2de00 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
2de10 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65  /.case OP_Create
2de20 42 74 72 65 65 3a 20 7b 20 20 20 20 20 20 20 20  Btree: {        
2de30 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69    /* out2 */.  i
2de40 6e 74 20 70 67 6e 6f 3b 0a 20 20 44 62 20 2a 70  nt pgno;.  Db *p
2de50 44 62 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75  Db;..  pOut = ou
2de60 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
2de70 70 4f 70 29 3b 0a 20 20 70 67 6e 6f 20 3d 20 30  pOp);.  pgno = 0
2de80 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2de90 3e 70 33 3d 3d 42 54 52 45 45 5f 49 4e 54 4b 45  >p3==BTREE_INTKE
2dea0 59 20 7c 7c 20 70 4f 70 2d 3e 70 33 3d 3d 42 54  Y || pOp->p3==BT
2deb0 52 45 45 5f 42 4c 4f 42 4b 45 59 20 29 3b 0a 20  REE_BLOBKEY );. 
2dec0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
2ded0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
2dee0 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
2def0 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
2df00 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70  ->btreeMask, pOp
2df10 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72  ->p1) );.  asser
2df20 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
2df30 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62  0 );.  pDb = &db
2df40 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  ->aDb[pOp->p1];.
2df50 20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70    assert( pDb->p
2df60 42 74 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20  Bt!=0 );.  rc = 
2df70 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61  sqlite3BtreeCrea
2df80 74 65 54 61 62 6c 65 28 70 44 62 2d 3e 70 42 74  teTable(pDb->pBt
2df90 2c 20 26 70 67 6e 6f 2c 20 70 4f 70 2d 3e 70 33  , &pgno, pOp->p3
2dfa0 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
2dfb0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2dfc0 65 72 72 6f 72 3b 0a 20 20 70 4f 75 74 2d 3e 75  error;.  pOut->u
2dfd0 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20 20 62 72 65  .i = pgno;.  bre
2dfe0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2dff0 3a 20 53 71 6c 45 78 65 63 20 2a 20 2a 20 2a 20  : SqlExec * * * 
2e000 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 75 6e 20 74  P4 *.**.** Run t
2e010 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
2e020 20 6f 72 20 73 74 61 74 65 6d 65 6e 74 73 20 73   or statements s
2e030 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65 20  pecified in the 
2e040 50 34 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 63 61  P4 string..*/.ca
2e050 73 65 20 4f 50 5f 53 71 6c 45 78 65 63 3a 20 7b  se OP_SqlExec: {
2e060 0a 20 20 64 62 2d 3e 6e 53 71 6c 45 78 65 63 2b  .  db->nSqlExec+
2e070 2b 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  +;.  rc = sqlite
2e080 33 5f 65 78 65 63 28 64 62 2c 20 70 4f 70 2d 3e  3_exec(db, pOp->
2e090 70 34 2e 7a 2c 20 30 2c 20 30 2c 20 30 29 3b 0a  p4.z, 0, 0, 0);.
2e0a0 20 20 64 62 2d 3e 6e 53 71 6c 45 78 65 63 2d 2d    db->nSqlExec--
2e0b0 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
2e0c0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2e0d0 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
2e0e0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72  ../* Opcode: Par
2e0f0 73 65 53 63 68 65 6d 61 20 50 31 20 2a 20 2a 20  seSchema P1 * * 
2e100 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20  P4 *.**.** Read 
2e110 61 6e 64 20 70 61 72 73 65 20 61 6c 6c 20 65 6e  and parse all en
2e120 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20 53  tries from the S
2e130 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 74 61 62  QLITE_MASTER tab
2e140 6c 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 50  le of database P
2e150 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63 68 20  1.** that match 
2e160 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  the WHERE clause
2e170 20 50 34 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73   P4. .**.** This
2e180 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
2e190 74 68 65 20 70 61 72 73 65 72 20 74 6f 20 63 72  the parser to cr
2e1a0 65 61 74 65 20 61 20 6e 65 77 20 76 69 72 74 75  eate a new virtu
2e1b0 61 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74  al machine,.** t
2e1c0 68 65 6e 20 72 75 6e 73 20 74 68 65 20 6e 65 77  hen runs the new
2e1d0 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
2e1e0 2e 20 20 49 74 20 69 73 20 74 68 75 73 20 61 20  .  It is thus a 
2e1f0 72 65 2d 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64  re-entrant opcod
2e200 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61  e..*/.case OP_Pa
2e210 72 73 65 53 63 68 65 6d 61 3a 20 7b 0a 20 20 69  rseSchema: {.  i
2e220 6e 74 20 69 44 62 3b 0a 20 20 63 6f 6e 73 74 20  nt iDb;.  const 
2e230 63 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20  char *zMaster;. 
2e240 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 49   char *zSql;.  I
2e250 6e 69 74 44 61 74 61 20 69 6e 69 74 44 61 74 61  nitData initData
2e260 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20 70 72 65 70  ;..  /* Any prep
2e270 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 74  ared statement t
2e280 68 61 74 20 69 6e 76 6f 6b 65 73 20 74 68 69 73  hat invokes this
2e290 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 68 6f 6c   opcode will hol
2e2a0 64 20 6d 75 74 65 78 65 73 0a 20 20 2a 2a 20 6f  d mutexes.  ** o
2e2b0 6e 20 65 76 65 72 79 20 62 74 72 65 65 2e 20 20  n every btree.  
2e2c0 54 68 69 73 20 69 73 20 61 20 70 72 65 72 65 71  This is a prereq
2e2d0 75 69 73 69 74 65 20 66 6f 72 20 69 6e 76 6f 6b  uisite for invok
2e2e0 69 6e 67 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65  ing .  ** sqlite
2e2f0 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 29 2e  3InitCallback().
2e300 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  .  */.#ifdef SQL
2e310 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f 72 28  ITE_DEBUG.  for(
2e320 69 44 62 3d 30 3b 20 69 44 62 3c 64 62 2d 3e 6e  iDb=0; iDb<db->n
2e330 44 62 3b 20 69 44 62 2b 2b 29 7b 0a 20 20 20 20  Db; iDb++){.    
2e340 61 73 73 65 72 74 28 20 69 44 62 3d 3d 31 20 7c  assert( iDb==1 |
2e350 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65 48 6f  | sqlite3BtreeHo
2e360 6c 64 73 4d 75 74 65 78 28 64 62 2d 3e 61 44 62  ldsMutex(db->aDb
2e370 5b 69 44 62 5d 2e 70 42 74 29 20 29 3b 0a 20 20  [iDb].pBt) );.  
2e380 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69 44 62 20  }.#endif..  iDb 
2e390 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73  = pOp->p1;.  ass
2e3a0 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69  ert( iDb>=0 && i
2e3b0 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  Db<db->nDb );.  
2e3c0 61 73 73 65 72 74 28 20 44 62 48 61 73 50 72 6f  assert( DbHasPro
2e3d0 70 65 72 74 79 28 64 62 2c 20 69 44 62 2c 20 44  perty(db, iDb, D
2e3e0 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 20  B_SchemaLoaded) 
2e3f0 29 3b 0a 20 20 2f 2a 20 55 73 65 64 20 74 6f 20  );.  /* Used to 
2e400 62 65 20 61 20 63 6f 6e 64 69 74 69 6f 6e 61 6c  be a conditional
2e410 20 2a 2f 20 7b 0a 20 20 20 20 7a 4d 61 73 74 65   */ {.    zMaste
2e420 72 20 3d 20 4d 41 53 54 45 52 5f 4e 41 4d 45 3b  r = MASTER_NAME;
2e430 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 64 62  .    initData.db
2e440 20 3d 20 64 62 3b 0a 20 20 20 20 69 6e 69 74 44   = db;.    initD
2e450 61 74 61 2e 69 44 62 20 3d 20 70 4f 70 2d 3e 70  ata.iDb = pOp->p
2e460 31 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e  1;.    initData.
2e470 70 7a 45 72 72 4d 73 67 20 3d 20 26 70 2d 3e 7a  pzErrMsg = &p->z
2e480 45 72 72 4d 73 67 3b 0a 20 20 20 20 7a 53 71 6c  ErrMsg;.    zSql
2e490 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74   = sqlite3MPrint
2e4a0 66 28 64 62 2c 0a 20 20 20 20 20 20 20 22 53 45  f(db,.       "SE
2e4b0 4c 45 43 54 20 6e 61 6d 65 2c 20 72 6f 6f 74 70  LECT name, rootp
2e4c0 61 67 65 2c 20 73 71 6c 20 46 52 4f 4d 20 27 25  age, sql FROM '%
2e4d0 71 27 2e 25 73 20 57 48 45 52 45 20 25 73 20 4f  q'.%s WHERE %s O
2e4e0 52 44 45 52 20 42 59 20 72 6f 77 69 64 22 2c 0a  RDER BY rowid",.
2e4f0 20 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69         db->aDb[i
2e500 44 62 5d 2e 7a 44 62 53 4e 61 6d 65 2c 20 7a 4d  Db].zDbSName, zM
2e510 61 73 74 65 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a  aster, pOp->p4.z
2e520 29 3b 0a 20 20 20 20 69 66 28 20 7a 53 71 6c 3d  );.    if( zSql=
2e530 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  =0 ){.      rc =
2e540 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b   SQLITE_NOMEM_BK
2e550 50 54 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  PT;.    }else{. 
2e560 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
2e570 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29 3b  >init.busy==0 );
2e580 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e  .      db->init.
2e590 62 75 73 79 20 3d 20 31 3b 0a 20 20 20 20 20 20  busy = 1;.      
2e5a0 69 6e 69 74 44 61 74 61 2e 72 63 20 3d 20 53 51  initData.rc = SQ
2e5b0 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 61  LITE_OK;.      a
2e5c0 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c  ssert( !db->mall
2e5d0 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20  ocFailed );.    
2e5e0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65    rc = sqlite3_e
2e5f0 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20 73 71  xec(db, zSql, sq
2e600 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
2e610 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c 20 30 29  k, &initData, 0)
2e620 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  ;.      if( rc==
2e630 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72 63 20 3d  SQLITE_OK ) rc =
2e640 20 69 6e 69 74 44 61 74 61 2e 72 63 3b 0a 20 20   initData.rc;.  
2e650 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
2e660 65 4e 4e 28 64 62 2c 20 7a 53 71 6c 29 3b 0a 20  eNN(db, zSql);. 
2e670 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75       db->init.bu
2e680 73 79 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20  sy = 0;.    }.  
2e690 7d 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20  }.  if( rc ){.  
2e6a0 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c    sqlite3ResetAl
2e6b0 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63  lSchemasOfConnec
2e6c0 74 69 6f 6e 28 64 62 29 3b 0a 20 20 20 20 69 66  tion(db);.    if
2e6d0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d  ( rc==SQLITE_NOM
2e6e0 45 4d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  EM ){.      goto
2e6f0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20   no_mem;.    }. 
2e700 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
2e710 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
2e720 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69    break;  .}..#i
2e730 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2e740 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 0a  E_OMIT_ANALYZE).
2e750 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41  /* Opcode: LoadA
2e760 6e 61 6c 79 73 69 73 20 50 31 20 2a 20 2a 20 2a  nalysis P1 * * *
2e770 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68   *.**.** Read th
2e780 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74  e sqlite_stat1 t
2e790 61 62 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73  able for databas
2e7a0 65 20 50 31 20 61 6e 64 20 6c 6f 61 64 20 74 68  e P1 and load th
2e7b0 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20  e content.** of 
2e7c0 74 68 61 74 20 74 61 62 6c 65 20 69 6e 74 6f 20  that table into 
2e7d0 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64  the internal ind
2e7e0 65 78 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20  ex hash table.  
2e7f0 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 0a  This will cause.
2e800 2a 2a 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20  ** the analysis 
2e810 74 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20  to be used when 
2e820 70 72 65 70 61 72 69 6e 67 20 61 6c 6c 20 73 75  preparing all su
2e830 62 73 65 71 75 65 6e 74 20 71 75 65 72 69 65 73  bsequent queries
2e840 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61  ..*/.case OP_Loa
2e850 64 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20 20 61  dAnalysis: {.  a
2e860 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2e870 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
2e880 3e 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d 20 73  >nDb );.  rc = s
2e890 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f  qlite3AnalysisLo
2e8a0 61 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b  ad(db, pOp->p1);
2e8b0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
2e8c0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2e8d0 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 20 20 0a  ror;.  break;  .
2e8e0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66  }.#endif /* !def
2e8f0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
2e900 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a  _ANALYZE) */../*
2e910 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 61 62   Opcode: DropTab
2e920 6c 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  le P1 * * P4 *.*
2e930 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20  *.** Remove the 
2e940 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d  internal (in-mem
2e950 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74  ory) data struct
2e960 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69  ures that descri
2e970 62 65 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20  be.** the table 
2e980 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61  named P4 in data
2e990 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69  base P1.  This i
2e9a0 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61  s called after a
2e9b0 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f   table.** is dro
2e9c0 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28  pped from disk (
2e9d0 75 73 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f  using the Destro
2e9e0 79 20 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72 64  y opcode) in ord
2e9f0 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74  er to keep .** t
2ea00 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72  he internal repr
2ea10 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
2ea20 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73  e.** schema cons
2ea30 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74  istent with what
2ea40 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a   is on disk..*/.
2ea50 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 61 62 6c  case OP_DropTabl
2ea60 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e  e: {.  sqlite3Un
2ea70 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62  linkAndDeleteTab
2ea80 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  le(db, pOp->p1, 
2ea90 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72  pOp->p4.z);.  br
2eaa0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2eab0 65 3a 20 44 72 6f 70 49 6e 64 65 78 20 50 31 20  e: DropIndex P1 
2eac0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
2ead0 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e  emove the intern
2eae0 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64  al (in-memory) d
2eaf0 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74  ata structures t
2eb00 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20  hat describe.** 
2eb10 74 68 65 20 69 6e 64 65 78 20 6e 61 6d 65 64 20  the index named 
2eb20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  P4 in database P
2eb30 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c  1.  This is call
2eb40 65 64 20 61 66 74 65 72 20 61 6e 20 69 6e 64 65  ed after an inde
2eb50 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20  x.** is dropped 
2eb60 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67  from disk (using
2eb70 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63   the Destroy opc
2eb80 6f 64 65 29 0a 2a 2a 20 69 6e 20 6f 72 64 65 72  ode).** in order
2eb90 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74   to keep the int
2eba0 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
2ebb0 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
2ebc0 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74  chema consistent
2ebd0 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e   with what is on
2ebe0 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f   disk..*/.case O
2ebf0 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20  P_DropIndex: {. 
2ec00 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
2ec10 64 44 65 6c 65 74 65 49 6e 64 65 78 28 64 62 2c  dDeleteIndex(db,
2ec20 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
2ec30 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.z);.  break;.}
2ec40 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f  ../* Opcode: Dro
2ec50 70 54 72 69 67 67 65 72 20 50 31 20 2a 20 2a 20  pTrigger P1 * * 
2ec60 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76  P4 *.**.** Remov
2ec70 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28  e the internal (
2ec80 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20  in-memory) data 
2ec90 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20  structures that 
2eca0 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20  describe.** the 
2ecb0 74 72 69 67 67 65 72 20 6e 61 6d 65 64 20 50 34  trigger named P4
2ecc0 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
2ecd0 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64    This is called
2ece0 20 61 66 74 65 72 20 61 20 74 72 69 67 67 65 72   after a trigger
2ecf0 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66  .** is dropped f
2ed00 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20  rom disk (using 
2ed10 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f  the Destroy opco
2ed20 64 65 29 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  de) in order to 
2ed30 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74  keep .** the int
2ed40 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
2ed50 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
2ed60 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74  chema consistent
2ed70 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e   with what is on
2ed80 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f   disk..*/.case O
2ed90 50 5f 44 72 6f 70 54 72 69 67 67 65 72 3a 20 7b  P_DropTrigger: {
2eda0 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  .  sqlite3Unlink
2edb0 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72  AndDeleteTrigger
2edc0 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
2edd0 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61  p->p4.z);.  brea
2ede0 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53  k;.}...#ifndef S
2edf0 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47  QLITE_OMIT_INTEG
2ee00 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70  RITY_CHECK./* Op
2ee10 63 6f 64 65 3a 20 49 6e 74 65 67 72 69 74 79 43  code: IntegrityC
2ee20 6b 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  k P1 P2 P3 P4 P5
2ee30 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61  .**.** Do an ana
2ee40 6c 79 73 69 73 20 6f 66 20 74 68 65 20 63 75 72  lysis of the cur
2ee50 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74 61  rently open data
2ee60 62 61 73 65 2e 20 20 53 74 6f 72 65 20 69 6e 0a  base.  Store in.
2ee70 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 74  ** register P1 t
2ee80 68 65 20 74 65 78 74 20 6f 66 20 61 6e 20 65 72  he text of an er
2ee90 72 6f 72 20 6d 65 73 73 61 67 65 20 64 65 73 63  ror message desc
2eea0 72 69 62 69 6e 67 20 61 6e 79 20 70 72 6f 62 6c  ribing any probl
2eeb0 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70 72  ems..** If no pr
2eec0 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f 75 6e 64  oblems are found
2eed0 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69  , store a NULL i
2eee0 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
2eef0 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65  *.** The registe
2ef00 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 6f 6e  r P3 contains on
2ef10 65 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20  e less than the 
2ef20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f  maximum number o
2ef30 66 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f 72 73  f allowed errors
2ef40 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72 65 67  ..** At most reg
2ef50 28 50 33 29 20 65 72 72 6f 72 73 20 77 69 6c 6c  (P3) errors will
2ef60 20 62 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a   be reported..**
2ef70 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
2ef80 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20 73 74   the analysis st
2ef90 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61 73 20 72  ops as soon as r
2efa0 65 67 28 50 31 29 20 65 72 72 6f 72 73 20 61 72  eg(P1) errors ar
2efb0 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52 65 67  e .** seen.  Reg
2efc0 28 50 31 29 20 69 73 20 75 70 64 61 74 65 64 20  (P1) is updated 
2efd0 77 69 74 68 20 74 68 65 20 6e 75 6d 62 65 72 20  with the number 
2efe0 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e  of errors remain
2eff0 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72  ing..**.** The r
2f000 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 73  oot page numbers
2f010 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20 69   of all tables i
2f020 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  n the database a
2f030 72 65 20 69 6e 74 65 67 65 72 73 0a 2a 2a 20 73  re integers.** s
2f040 74 6f 72 65 64 20 69 6e 20 50 34 5f 49 4e 54 41  tored in P4_INTA
2f050 52 52 41 59 20 61 72 67 75 6d 65 6e 74 2e 0a 2a  RRAY argument..*
2f060 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f  *.** If P5 is no
2f070 74 20 7a 65 72 6f 2c 20 74 68 65 20 63 68 65 63  t zero, the chec
2f080 6b 20 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68 65  k is done on the
2f090 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
2f0a0 61 73 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74  ase.** file, not
2f0b0 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
2f0c0 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54  se file..**.** T
2f0d0 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73  his opcode is us
2f0e0 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20  ed to implement 
2f0f0 74 68 65 20 69 6e 74 65 67 72 69 74 79 5f 63 68  the integrity_ch
2f100 65 63 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63  eck pragma..*/.c
2f110 61 73 65 20 4f 50 5f 49 6e 74 65 67 72 69 74 79  ase OP_Integrity
2f120 43 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f  Ck: {.  int nRoo
2f130 74 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  t;      /* Numbe
2f140 72 20 6f 66 20 74 61 62 6c 65 73 20 74 6f 20 63  r of tables to c
2f150 68 65 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20 6f  heck.  (Number o
2f160 66 20 72 6f 6f 74 20 70 61 67 65 73 2e 29 20 2a  f root pages.) *
2f170 2f 0a 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 20  /.  int *aRoot; 
2f180 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20      /* Array of 
2f190 72 6f 6f 74 70 61 67 65 20 6e 75 6d 62 65 72 73  rootpage numbers
2f1a0 20 66 6f 72 20 74 61 62 6c 65 73 20 74 6f 20 62   for tables to b
2f1b0 65 20 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20 69  e checked */.  i
2f1c0 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 2f  nt nErr;       /
2f1d0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  * Number of erro
2f1e0 72 73 20 72 65 70 6f 72 74 65 64 20 2a 2f 0a 20  rs reported */. 
2f1f0 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20   char *z;       
2f200 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20   /* Text of the 
2f210 65 72 72 6f 72 20 72 65 70 6f 72 74 20 2a 2f 0a  error report */.
2f220 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b 20 20 20    Mem *pnErr;   
2f230 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 6b 65    /* Register ke
2f240 65 70 69 6e 67 20 74 72 61 63 6b 20 6f 66 20 65  eping track of e
2f250 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 20  rrors remaining 
2f260 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  */..  assert( p-
2f270 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20  >bIsReader );.  
2f280 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32 3b  nRoot = pOp->p2;
2f290 0a 20 20 61 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e  .  aRoot = pOp->
2f2a0 70 34 2e 61 69 3b 0a 20 20 61 73 73 65 72 74 28  p4.ai;.  assert(
2f2b0 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a 20 20 61 73   nRoot>0 );.  as
2f2c0 73 65 72 74 28 20 61 52 6f 6f 74 5b 30 5d 3d 3d  sert( aRoot[0]==
2f2d0 6e 52 6f 6f 74 20 29 3b 0a 20 20 61 73 73 65 72  nRoot );.  asser
2f2e0 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
2f2f0 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
2f300 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
2f310 29 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20 26  ) );.  pnErr = &
2f320 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
2f330 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d   assert( (pnErr-
2f340 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
2f350 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )!=0 );.  assert
2f360 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20  ( (pnErr->flags 
2f370 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
2f380 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70 49  lob))==0 );.  pI
2f390 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
2f3a0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2f3b0 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20 29  Op->p5<db->nDb )
2f3c0 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61  ;.  assert( DbMa
2f3d0 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
2f3e0 61 73 6b 2c 20 70 4f 70 2d 3e 70 35 29 20 29 3b  ask, pOp->p5) );
2f3f0 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 42 74  .  z = sqlite3Bt
2f400 72 65 65 49 6e 74 65 67 72 69 74 79 43 68 65 63  reeIntegrityChec
2f410 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  k(db->aDb[pOp->p
2f420 35 5d 2e 70 42 74 2c 20 26 61 52 6f 6f 74 5b 31  5].pBt, &aRoot[1
2f430 5d 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20  ], nRoot,.      
2f440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f450 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29             (int)
2f460 70 6e 45 72 72 2d 3e 75 2e 69 2b 31 2c 20 26 6e  pnErr->u.i+1, &n
2f470 45 72 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  Err);.  sqlite3V
2f480 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49  dbeMemSetNull(pI
2f490 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45 72 72 3d  n1);.  if( nErr=
2f4a0 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
2f4b0 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c 73  ( z==0 );.  }els
2f4c0 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20  e if( z==0 ){.  
2f4d0 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
2f4e0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 6e 45 72   }else{.    pnEr
2f4f0 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 2d 31  r->u.i -= nErr-1
2f500 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
2f510 65 4d 65 6d 53 65 74 53 74 72 28 70 49 6e 31 2c  eMemSetStr(pIn1,
2f520 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55   z, -1, SQLITE_U
2f530 54 46 38 2c 20 73 71 6c 69 74 65 33 5f 66 72 65  TF8, sqlite3_fre
2f540 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45  e);.  }.  UPDATE
2f550 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49  _MAX_BLOBSIZE(pI
2f560 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
2f570 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
2f580 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29  (pIn1, encoding)
2f590 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
2f5a0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2f5b0 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
2f5c0 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  CK */../* Opcode
2f5d0 3a 20 52 6f 77 53 65 74 41 64 64 20 50 31 20 50  : RowSetAdd P1 P
2f5e0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
2f5f0 73 69 73 3a 20 72 6f 77 73 65 74 28 50 31 29 3d  sis: rowset(P1)=
2f600 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 49 6e 73 65  r[P2].**.** Inse
2f610 72 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  rt the integer v
2f620 61 6c 75 65 20 68 65 6c 64 20 62 79 20 72 65 67  alue held by reg
2f630 69 73 74 65 72 20 50 32 20 69 6e 74 6f 20 61 20  ister P2 into a 
2f640 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 0a 2a 2a  RowSet object.**
2f650 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65   held in registe
2f660 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 61  r P1..**.** An a
2f670 73 73 65 72 74 69 6f 6e 20 66 61 69 6c 73 20 69  ssertion fails i
2f680 66 20 50 32 20 69 73 20 6e 6f 74 20 61 6e 20 69  f P2 is not an i
2f690 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20  nteger..*/.case 
2f6a0 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a 20 7b 20  OP_RowSetAdd: { 
2f6b0 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e        /* in1, in
2f6c0 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
2f6d0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2f6e0 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
2f6f0 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
2f700 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20   (pIn2->flags & 
2f710 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20  MEM_Int)!=0 );. 
2f720 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
2f730 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
2f740 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
2f750 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65  3VdbeMemSetRowSe
2f760 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28  t(pIn1);.    if(
2f770 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
2f780 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
2f790 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
2f7a0 7d 0a 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65  }.  sqlite3RowSe
2f7b0 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e  tInsert(pIn1->u.
2f7c0 70 52 6f 77 53 65 74 2c 20 70 49 6e 32 2d 3e 75  pRowSet, pIn2->u
2f7d0 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .i);.  break;.}.
2f7e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53  ./* Opcode: RowS
2f7f0 65 74 52 65 61 64 20 50 31 20 50 32 20 50 33 20  etRead P1 P2 P3 
2f800 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2f810 20 72 5b 50 33 5d 3d 72 6f 77 73 65 74 28 50 31   r[P3]=rowset(P1
2f820 29 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61 63 74 20  ).**.** Extract 
2f830 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c  the smallest val
2f840 75 65 20 66 72 6f 6d 20 74 68 65 20 52 6f 77 53  ue from the RowS
2f850 65 74 20 6f 62 6a 65 63 74 20 69 6e 20 50 31 0a  et object in P1.
2f860 2a 2a 20 61 6e 64 20 70 75 74 20 74 68 61 74 20  ** and put that 
2f870 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73  value into regis
2f880 74 65 72 20 50 33 2e 0a 2a 2a 20 4f 72 2c 20 69  ter P3..** Or, i
2f890 66 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20  f RowSet object 
2f8a0 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20  P1 is initially 
2f8b0 65 6d 70 74 79 2c 20 6c 65 61 76 65 20 50 33 0a  empty, leave P3.
2f8c0 2a 2a 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64  ** unchanged and
2f8d0 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
2f8e0 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  tion P2..*/.case
2f8f0 20 4f 50 5f 52 6f 77 53 65 74 52 65 61 64 3a 20   OP_RowSetRead: 
2f900 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c  {       /* jump,
2f910 20 69 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in1, out3 */.  
2f920 69 36 34 20 76 61 6c 3b 0a 0a 20 20 70 49 6e 31  i64 val;..  pIn1
2f930 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
2f940 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  ];.  if( (pIn1->
2f950 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
2f960 65 74 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71  et)==0 .   || sq
2f970 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28  lite3RowSetNext(
2f980 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c  pIn1->u.pRowSet,
2f990 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20   &val)==0.  ){. 
2f9a0 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f 6c 65 61     /* The boolea
2f9b0 6e 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79  n index is empty
2f9c0 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56   */.    sqlite3V
2f9d0 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49  dbeMemSetNull(pI
2f9e0 6e 31 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61  n1);.    VdbeBra
2f9f0 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20  nchTaken(1,2);. 
2fa00 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
2fa10 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72  p2_and_check_for
2fa20 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 65  _interrupt;.  }e
2fa30 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76 61  lse{.    /* A va
2fa40 6c 75 65 20 77 61 73 20 70 75 6c 6c 65 64 20 66  lue was pulled f
2fa50 72 6f 6d 20 74 68 65 20 69 6e 64 65 78 20 2a 2f  rom the index */
2fa60 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
2fa70 61 6b 65 6e 28 30 2c 32 29 3b 0a 20 20 20 20 73  aken(0,2);.    s
2fa80 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
2fa90 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d  Int64(&aMem[pOp-
2faa0 3e 70 33 5d 2c 20 76 61 6c 29 3b 0a 20 20 7d 0a  >p3], val);.  }.
2fab0 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72    goto check_for
2fac0 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f  _interrupt;.}../
2fad0 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74  * Opcode: RowSet
2fae0 54 65 73 74 20 50 31 20 50 32 20 50 33 20 50 34  Test P1 P2 P3 P4
2faf0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
2fb00 20 72 5b 50 33 5d 20 69 6e 20 72 6f 77 73 65 74   r[P3] in rowset
2fb10 28 50 31 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  (P1) goto P2.**.
2fb20 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 69  ** Register P3 i
2fb30 73 20 61 73 73 75 6d 65 64 20 74 6f 20 68 6f 6c  s assumed to hol
2fb40 64 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67  d a 64-bit integ
2fb50 65 72 20 76 61 6c 75 65 2e 20 49 66 20 72 65 67  er value. If reg
2fb60 69 73 74 65 72 20 50 31 0a 2a 2a 20 63 6f 6e 74  ister P1.** cont
2fb70 61 69 6e 73 20 61 20 52 6f 77 53 65 74 20 6f 62  ains a RowSet ob
2fb80 6a 65 63 74 20 61 6e 64 20 74 68 61 74 20 52 6f  ject and that Ro
2fb90 77 53 65 74 20 6f 62 6a 65 63 74 20 63 6f 6e 74  wSet object cont
2fba0 61 69 6e 73 0a 2a 2a 20 74 68 65 20 76 61 6c 75  ains.** the valu
2fbb0 65 20 68 65 6c 64 20 69 6e 20 50 33 2c 20 6a 75  e held in P3, ju
2fbc0 6d 70 20 74 6f 20 72 65 67 69 73 74 65 72 20 50  mp to register P
2fbd0 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 6e  2. Otherwise, in
2fbe0 73 65 72 74 20 74 68 65 0a 2a 2a 20 69 6e 74 65  sert the.** inte
2fbf0 67 65 72 20 69 6e 20 50 33 20 69 6e 74 6f 20 74  ger in P3 into t
2fc00 68 65 20 52 6f 77 53 65 74 20 61 6e 64 20 63 6f  he RowSet and co
2fc10 6e 74 69 6e 75 65 20 6f 6e 20 74 6f 20 74 68 65  ntinue on to the
2fc20 0a 2a 2a 20 6e 65 78 74 20 6f 70 63 6f 64 65 2e  .** next opcode.
2fc30 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 6f 77 53 65  .**.** The RowSe
2fc40 74 20 6f 62 6a 65 63 74 20 69 73 20 6f 70 74 69  t object is opti
2fc50 6d 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63 61  mized for the ca
2fc60 73 65 20 77 68 65 72 65 20 73 65 74 73 20 6f 66  se where sets of
2fc70 20 69 6e 74 65 67 65 72 73 0a 2a 2a 20 61 72 65   integers.** are
2fc80 20 69 6e 73 65 72 74 65 64 20 69 6e 20 64 69 73   inserted in dis
2fc90 74 69 6e 63 74 20 70 68 61 73 65 73 2c 20 77 68  tinct phases, wh
2fca0 69 63 68 20 65 61 63 68 20 73 65 74 20 63 6f 6e  ich each set con
2fcb0 74 61 69 6e 73 20 6e 6f 20 64 75 70 6c 69 63 61  tains no duplica
2fcc0 74 65 73 2e 0a 2a 2a 20 45 61 63 68 20 73 65 74  tes..** Each set
2fcd0 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 62   is identified b
2fce0 79 20 61 20 75 6e 69 71 75 65 20 50 34 20 76 61  y a unique P4 va
2fcf0 6c 75 65 2e 20 54 68 65 20 66 69 72 73 74 20 73  lue. The first s
2fd00 65 74 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65 20  et.** must have 
2fd10 50 34 3d 3d 30 2c 20 74 68 65 20 66 69 6e 61 6c  P4==0, the final
2fd20 20 73 65 74 20 6d 75 73 74 20 68 61 76 65 20 50   set must have P
2fd30 34 3d 3d 2d 31 2c 20 61 6e 64 20 66 6f 72 20 61  4==-1, and for a
2fd40 6c 6c 20 6f 74 68 65 72 20 73 65 74 73 0a 2a 2a  ll other sets.**
2fd50 20 6d 75 73 74 20 68 61 76 65 20 50 34 3e 30 2e   must have P4>0.
2fd60 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f  .**.** This allo
2fd70 77 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  ws optimizations
2fd80 3a 20 28 61 29 20 77 68 65 6e 20 50 34 3d 3d 30  : (a) when P4==0
2fd90 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65   there is no nee
2fda0 64 20 74 6f 20 74 65 73 74 0a 2a 2a 20 74 68 65  d to test.** the
2fdb0 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 66   RowSet object f
2fdc0 6f 72 20 50 33 2c 20 61 73 20 69 74 20 69 73 20  or P3, as it is 
2fdd0 67 75 61 72 61 6e 74 65 65 64 20 6e 6f 74 20 74  guaranteed not t
2fde0 6f 20 63 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a  o contain it,.**
2fdf0 20 28 62 29 20 77 68 65 6e 20 50 34 3d 3d 2d 31   (b) when P4==-1
2fe00 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65   there is no nee
2fe10 64 20 74 6f 20 69 6e 73 65 72 74 20 74 68 65 20  d to insert the 
2fe20 76 61 6c 75 65 2c 20 61 73 20 69 74 20 77 69 6c  value, as it wil
2fe30 6c 0a 2a 2a 20 6e 65 76 65 72 20 62 65 20 74 65  l.** never be te
2fe40 73 74 65 64 20 66 6f 72 2c 20 61 6e 64 20 28 63  sted for, and (c
2fe50 29 20 77 68 65 6e 20 61 20 76 61 6c 75 65 20 74  ) when a value t
2fe60 68 61 74 20 69 73 20 70 61 72 74 20 6f 66 20 73  hat is part of s
2fe70 65 74 20 58 20 69 73 0a 2a 2a 20 69 6e 73 65 72  et X is.** inser
2fe80 74 65 64 2c 20 74 68 65 72 65 20 69 73 20 6e 6f  ted, there is no
2fe90 20 6e 65 65 64 20 74 6f 20 73 65 61 72 63 68 20   need to search 
2fea0 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 73 61  to see if the sa
2feb0 6d 65 20 76 61 6c 75 65 20 77 61 73 0a 2a 2a 20  me value was.** 
2fec0 70 72 65 76 69 6f 75 73 6c 79 20 69 6e 73 65 72  previously inser
2fed0 74 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 73  ted as part of s
2fee0 65 74 20 58 20 28 6f 6e 6c 79 20 69 66 20 69 74  et X (only if it
2fef0 20 77 61 73 20 70 72 65 76 69 6f 75 73 6c 79 0a   was previously.
2ff00 2a 2a 20 69 6e 73 65 72 74 65 64 20 61 73 20 70  ** inserted as p
2ff10 61 72 74 20 6f 66 20 73 6f 6d 65 20 6f 74 68 65  art of some othe
2ff20 72 20 73 65 74 29 2e 0a 2a 2f 0a 63 61 73 65 20  r set)..*/.case 
2ff30 4f 50 5f 52 6f 77 53 65 74 54 65 73 74 3a 20 7b  OP_RowSetTest: {
2ff40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff50 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
2ff60 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20  1, in3 */.  int 
2ff70 69 53 65 74 3b 0a 20 20 69 6e 74 20 65 78 69 73  iSet;.  int exis
2ff80 74 73 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61  ts;..  pIn1 = &a
2ff90 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2ffa0 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
2ffb0 2d 3e 70 33 5d 3b 0a 20 20 69 53 65 74 20 3d 20  ->p3];.  iSet = 
2ffc0 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 61 73 73  pOp->p4.i;.  ass
2ffd0 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73  ert( pIn3->flags
2ffe0 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f  &MEM_Int );..  /
2fff0 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 61 6e  * If there is an
30000 79 74 68 69 6e 67 20 6f 74 68 65 72 20 74 68 61  ything other tha
30010 6e 20 61 20 72 6f 77 73 65 74 20 6f 62 6a 65 63  n a rowset objec
30020 74 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  t in memory cell
30030 20 50 31 2c 0a 20 20 2a 2a 20 64 65 6c 65 74 65   P1,.  ** delete
30040 20 69 74 20 6e 6f 77 20 61 6e 64 20 69 6e 69 74   it now and init
30050 69 61 6c 69 7a 65 20 50 31 20 77 69 74 68 20 61  ialize P1 with a
30060 6e 20 65 6d 70 74 79 20 72 6f 77 73 65 74 0a 20  n empty rowset. 
30070 20 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d   */.  if( (pIn1-
30080 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
30090 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73  Set)==0 ){.    s
300a0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
300b0 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20  RowSet(pIn1);.  
300c0 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
300d0 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
300e0 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
300f0 6d 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74  m;.  }..  assert
30100 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
30110 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61 73 73  4_INT32 );.  ass
30120 65 72 74 28 20 69 53 65 74 3d 3d 2d 31 20 7c 7c  ert( iSet==-1 ||
30130 20 69 53 65 74 3e 3d 30 20 29 3b 0a 20 20 69 66   iSet>=0 );.  if
30140 28 20 69 53 65 74 20 29 7b 0a 20 20 20 20 65 78  ( iSet ){.    ex
30150 69 73 74 73 20 3d 20 73 71 6c 69 74 65 33 52 6f  ists = sqlite3Ro
30160 77 53 65 74 54 65 73 74 28 70 49 6e 31 2d 3e 75  wSetTest(pIn1->u
30170 2e 70 52 6f 77 53 65 74 2c 20 69 53 65 74 2c 20  .pRowSet, iSet, 
30180 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 20 20  pIn3->u.i);.    
30190 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
301a0 65 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20  exists!=0,2);.  
301b0 20 20 69 66 28 20 65 78 69 73 74 73 20 29 20 67    if( exists ) g
301c0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
301d0 20 20 7d 0a 20 20 69 66 28 20 69 53 65 74 3e 3d    }.  if( iSet>=
301e0 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
301f0 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e  RowSetInsert(pIn
30200 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49  1->u.pRowSet, pI
30210 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20  n3->u.i);.  }.  
30220 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64  break;.}...#ifnd
30230 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
30240 52 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64  RIGGER../* Opcod
30250 65 3a 20 50 72 6f 67 72 61 6d 20 50 31 20 50 32  e: Program P1 P2
30260 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
30270 45 78 65 63 75 74 65 20 74 68 65 20 74 72 69 67  Execute the trig
30280 67 65 72 20 70 72 6f 67 72 61 6d 20 70 61 73 73  ger program pass
30290 65 64 20 61 73 20 50 34 20 28 74 79 70 65 20 50  ed as P4 (type P
302a0 34 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a  4_SUBPROGRAM). .
302b0 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e  **.** P1 contain
302c0 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66  s the address of
302d0 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   the memory cell
302e0 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74   that contains t
302f0 68 65 20 66 69 72 73 74 20 6d 65 6d 6f 72 79 20  he first memory 
30300 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61  .** cell in an a
30310 72 72 61 79 20 6f 66 20 76 61 6c 75 65 73 20 75  rray of values u
30320 73 65 64 20 61 73 20 61 72 67 75 6d 65 6e 74 73  sed as arguments
30330 20 74 6f 20 74 68 65 20 73 75 62 2d 70 72 6f 67   to the sub-prog
30340 72 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74  ram. P2 .** cont
30350 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73  ains the address
30360 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20 74   to jump to if t
30370 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74  he sub-program t
30380 68 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45 20  hrows an IGNORE 
30390 0a 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20 75 73  .** exception us
303a0 69 6e 67 20 74 68 65 20 52 41 49 53 45 28 29 20  ing the RAISE() 
303b0 66 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73 74  function. Regist
303c0 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74  er P3 contains t
303d0 68 65 20 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f  he address .** o
303e0 66 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  f a memory cell 
303f0 69 6e 20 74 68 69 73 20 28 74 68 65 20 70 61 72  in this (the par
30400 65 6e 74 29 20 56 4d 20 74 68 61 74 20 69 73 20  ent) VM that is 
30410 75 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65  used to allocate
30420 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20   the .** memory 
30430 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20  required by the 
30440 73 75 62 2d 76 64 62 65 20 61 74 20 72 75 6e 74  sub-vdbe at runt
30450 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  ime..**.** P4 is
30460 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
30470 65 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20  e VM containing 
30480 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
30490 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ram..**.** If P5
304a0 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
304b0 65 6e 20 72 65 63 75 72 73 69 76 65 20 70 72 6f  en recursive pro
304c0 67 72 61 6d 20 69 6e 76 6f 63 61 74 69 6f 6e 20  gram invocation 
304d0 69 73 20 65 6e 61 62 6c 65 64 2e 0a 2a 2f 0a 63  is enabled..*/.c
304e0 61 73 65 20 4f 50 5f 50 72 6f 67 72 61 6d 3a 20  ase OP_Program: 
304f0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
30500 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20   */.  int nMem; 
30510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
30520 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72   Number of memor
30530 79 20 72 65 67 69 73 74 65 72 73 20 66 6f 72 20  y registers for 
30540 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20  sub-program */. 
30550 20 69 6e 74 20 6e 42 79 74 65 3b 20 20 20 20 20   int nByte;     
30560 20 20 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65           /* Byte
30570 73 20 6f 66 20 72 75 6e 74 69 6d 65 20 73 70 61  s of runtime spa
30580 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ce required for 
30590 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20  sub-program */. 
305a0 20 4d 65 6d 20 2a 70 52 74 3b 20 20 20 20 20 20   Mem *pRt;      
305b0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
305c0 73 74 65 72 20 74 6f 20 61 6c 6c 6f 63 61 74 65  ster to allocate
305d0 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20 2a   runtime space *
305e0 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20  /.  Mem *pMem;  
305f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
30600 73 65 64 20 74 6f 20 69 74 65 72 61 74 65 20 74  sed to iterate t
30610 68 72 6f 75 67 68 20 6d 65 6d 6f 72 79 20 63 65  hrough memory ce
30620 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45  lls */.  Mem *pE
30630 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nd;             
30640 20 2f 2a 20 4c 61 73 74 20 6d 65 6d 6f 72 79 20   /* Last memory 
30650 63 65 6c 6c 20 69 6e 20 6e 65 77 20 61 72 72 61  cell in new arra
30660 79 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65  y */.  VdbeFrame
30670 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 20 2f   *pFrame;      /
30680 2a 20 4e 65 77 20 76 64 62 65 20 66 72 61 6d 65  * New vdbe frame
30690 20 74 6f 20 65 78 65 63 75 74 65 20 69 6e 20 2a   to execute in *
306a0 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a  /.  SubProgram *
306b0 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 53  pProgram;   /* S
306c0 75 62 2d 70 72 6f 67 72 61 6d 20 74 6f 20 65 78  ub-program to ex
306d0 65 63 75 74 65 20 2a 2f 0a 20 20 76 6f 69 64 20  ecute */.  void 
306e0 2a 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  *t;             
306f0 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 69 64 65 6e     /* Token iden
30700 74 69 66 79 69 6e 67 20 74 72 69 67 67 65 72 20  tifying trigger 
30710 2a 2f 0a 0a 20 20 70 50 72 6f 67 72 61 6d 20 3d  */..  pProgram =
30720 20 70 4f 70 2d 3e 70 34 2e 70 50 72 6f 67 72 61   pOp->p4.pProgra
30730 6d 3b 0a 20 20 70 52 74 20 3d 20 26 61 4d 65 6d  m;.  pRt = &aMem
30740 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
30750 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  ert( pProgram->n
30760 4f 70 3e 30 20 29 3b 0a 20 20 0a 20 20 2f 2a 20  Op>0 );.  .  /* 
30770 49 66 20 74 68 65 20 70 35 20 66 6c 61 67 20 69  If the p5 flag i
30780 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65  s clear, then re
30790 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69  cursive invocati
307a0 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73 20 69  on of triggers i
307b0 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64  s .  ** disabled
307c0 20 66 6f 72 20 62 61 63 6b 77 61 72 64 73 20 63   for backwards c
307d0 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 28 70 35  ompatibility (p5
307e0 20 69 73 20 73 65 74 20 69 66 20 74 68 69 73 20   is set if this 
307f0 73 75 62 2d 70 72 6f 67 72 61 6d 0a 20 20 2a 2a  sub-program.  **
30800 20 69 73 20 72 65 61 6c 6c 79 20 61 20 74 72 69   is really a tri
30810 67 67 65 72 2c 20 6e 6f 74 20 61 20 66 6f 72 65  gger, not a fore
30820 69 67 6e 20 6b 65 79 20 61 63 74 69 6f 6e 2c 20  ign key action, 
30830 61 6e 64 20 74 68 65 20 66 6c 61 67 20 73 65 74  and the flag set
30840 0a 20 20 2a 2a 20 61 6e 64 20 63 6c 65 61 72 65  .  ** and cleare
30850 64 20 62 79 20 74 68 65 20 22 50 52 41 47 4d 41  d by the "PRAGMA
30860 20 72 65 63 75 72 73 69 76 65 5f 74 72 69 67 67   recursive_trigg
30870 65 72 73 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20  ers" command is 
30880 63 6c 65 61 72 29 2e 0a 20 20 2a 2a 20 0a 20 20  clear)..  ** .  
30890 2a 2a 20 49 74 20 69 73 20 72 65 63 75 72 73 69  ** It is recursi
308a0 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66  ve invocation of
308b0 20 74 72 69 67 67 65 72 73 2c 20 61 74 20 74 68   triggers, at th
308c0 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20 74 68 61  e SQL level, tha
308d0 74 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62  t is .  ** disab
308e0 6c 65 64 2e 20 49 6e 20 73 6f 6d 65 20 63 61 73  led. In some cas
308f0 65 73 20 61 20 73 69 6e 67 6c 65 20 74 72 69 67  es a single trig
30900 67 65 72 20 6d 61 79 20 67 65 6e 65 72 61 74 65  ger may generate
30910 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 0a   more than one .
30920 20 20 2a 2a 20 53 75 62 50 72 6f 67 72 61 6d 20    ** SubProgram 
30930 28 69 66 20 74 68 65 20 74 72 69 67 67 65 72 20  (if the trigger 
30940 6d 61 79 20 62 65 20 65 78 65 63 75 74 65 64 20  may be executed 
30950 77 69 74 68 20 6d 6f 72 65 20 74 68 61 6e 20 6f  with more than o
30960 6e 65 20 64 69 66 66 65 72 65 6e 74 20 0a 20 20  ne different .  
30970 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61  ** ON CONFLICT a
30980 6c 67 6f 72 69 74 68 6d 29 2e 20 53 75 62 50 72  lgorithm). SubPr
30990 6f 67 72 61 6d 20 73 74 72 75 63 74 75 72 65 73  ogram structures
309a0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
309b0 20 61 0a 20 20 2a 2a 20 73 69 6e 67 6c 65 20 74   a.  ** single t
309c0 72 69 67 67 65 72 20 61 6c 6c 20 68 61 76 65 20  rigger all have 
309d0 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66  the same value f
309e0 6f 72 20 74 68 65 20 53 75 62 50 72 6f 67 72 61  or the SubProgra
309f0 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a 2a 20 76 61  m.token .  ** va
30a00 72 69 61 62 6c 65 2e 20 20 2a 2f 0a 20 20 69 66  riable.  */.  if
30a10 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20  ( pOp->p5 ){.   
30a20 20 74 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74   t = pProgram->t
30a30 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f 72 28 70 46  oken;.    for(pF
30a40 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20  rame=p->pFrame; 
30a50 70 46 72 61 6d 65 20 26 26 20 70 46 72 61 6d 65  pFrame && pFrame
30a60 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20 70 46 72 61  ->token!=t; pFra
30a70 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  me=pFrame->pPare
30a80 6e 74 29 3b 0a 20 20 20 20 69 66 28 20 70 46 72  nt);.    if( pFr
30a90 61 6d 65 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d  ame ) break;.  }
30aa0 0a 0a 20 20 69 66 28 20 70 2d 3e 6e 46 72 61 6d  ..  if( p->nFram
30ab0 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  e>=db->aLimit[SQ
30ac0 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47  LITE_LIMIT_TRIGG
30ad0 45 52 5f 44 45 50 54 48 5d 20 29 7b 0a 20 20 20  ER_DEPTH] ){.   
30ae0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
30af0 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  OR;.    sqlite3V
30b00 64 62 65 45 72 72 6f 72 28 70 2c 20 22 74 6f 6f  dbeError(p, "too
30b10 20 6d 61 6e 79 20 6c 65 76 65 6c 73 20 6f 66 20   many levels of 
30b20 74 72 69 67 67 65 72 20 72 65 63 75 72 73 69 6f  trigger recursio
30b30 6e 22 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62  n");.    goto ab
30b40 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
30b50 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69  ;.  }..  /* Regi
30b60 73 74 65 72 20 70 52 74 20 69 73 20 75 73 65 64  ster pRt is used
30b70 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 6d 65   to store the me
30b80 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 74 6f  mory required to
30b90 20 73 61 76 65 20 74 68 65 20 73 74 61 74 65 0a   save the state.
30ba0 20 20 2a 2a 20 6f 66 20 74 68 65 20 63 75 72 72    ** of the curr
30bb0 65 6e 74 20 70 72 6f 67 72 61 6d 2c 20 61 6e 64  ent program, and
30bc0 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75   the memory requ
30bd0 69 72 65 64 20 61 74 20 72 75 6e 74 69 6d 65 20  ired at runtime 
30be0 74 6f 20 65 78 65 63 75 74 65 0a 20 20 2a 2a 20  to execute.  ** 
30bf0 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
30c00 72 61 6d 2e 20 49 66 20 74 68 69 73 20 74 72 69  ram. If this tri
30c10 67 67 65 72 20 68 61 73 20 62 65 65 6e 20 66 69  gger has been fi
30c20 72 65 64 20 62 65 66 6f 72 65 2c 20 74 68 65 6e  red before, then
30c30 20 70 52 74 20 0a 20 20 2a 2a 20 69 73 20 61 6c   pRt .  ** is al
30c40 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 2e  ready allocated.
30c50 20 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20 6d   Otherwise, it m
30c60 75 73 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a  ust be initializ
30c70 65 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20 28 70  ed.  */.  if( (p
30c80 52 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 46 72  Rt->flags&MEM_Fr
30c90 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2f  ame)==0 ){.    /
30ca0 2a 20 53 75 62 50 72 6f 67 72 61 6d 2e 6e 4d 65  * SubProgram.nMe
30cb0 6d 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  m is set to the 
30cc0 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79  number of memory
30cd0 20 63 65 6c 6c 73 20 75 73 65 64 20 62 79 20 74   cells used by t
30ce0 68 65 20 0a 20 20 20 20 2a 2a 20 70 72 6f 67 72  he .    ** progr
30cf0 61 6d 20 73 74 6f 72 65 64 20 69 6e 20 53 75 62  am stored in Sub
30d00 50 72 6f 67 72 61 6d 2e 61 4f 70 2e 20 41 73 20  Program.aOp. As 
30d10 77 65 6c 6c 20 61 73 20 74 68 65 73 65 2c 20 6f  well as these, o
30d20 6e 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a  ne memory.    **
30d30 20 63 65 6c 6c 20 69 73 20 72 65 71 75 69 72 65   cell is require
30d40 64 20 66 6f 72 20 65 61 63 68 20 63 75 72 73 6f  d for each curso
30d50 72 20 75 73 65 64 20 62 79 20 74 68 65 20 70 72  r used by the pr
30d60 6f 67 72 61 6d 2e 20 53 65 74 20 6c 6f 63 61 6c  ogram. Set local
30d70 0a 20 20 20 20 2a 2a 20 76 61 72 69 61 62 6c 65  .    ** variable
30d80 20 6e 4d 65 6d 20 28 61 6e 64 20 6c 61 74 65 72   nMem (and later
30d90 2c 20 56 64 62 65 46 72 61 6d 65 2e 6e 43 68 69  , VdbeFrame.nChi
30da0 6c 64 4d 65 6d 29 20 74 6f 20 74 68 69 73 20 76  ldMem) to this v
30db0 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  alue..    */.   
30dc0 20 6e 4d 65 6d 20 3d 20 70 50 72 6f 67 72 61 6d   nMem = pProgram
30dd0 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f 67 72 61  ->nMem + pProgra
30de0 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 61 73 73  m->nCsr;.    ass
30df0 65 72 74 28 20 6e 4d 65 6d 3e 30 20 29 3b 0a 20  ert( nMem>0 );. 
30e00 20 20 20 69 66 28 20 70 50 72 6f 67 72 61 6d 2d     if( pProgram-
30e10 3e 6e 43 73 72 3d 3d 30 20 29 20 6e 4d 65 6d 2b  >nCsr==0 ) nMem+
30e20 2b 3b 0a 20 20 20 20 6e 42 79 74 65 20 3d 20 52  +;.    nByte = R
30e30 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56 64 62  OUND8(sizeof(Vdb
30e40 65 46 72 61 6d 65 29 29 0a 20 20 20 20 20 20 20  eFrame)).       
30e50 20 20 20 20 20 20 20 2b 20 6e 4d 65 6d 20 2a 20         + nMem * 
30e60 73 69 7a 65 6f 66 28 4d 65 6d 29 0a 20 20 20 20  sizeof(Mem).    
30e70 20 20 20 20 20 20 20 20 20 20 2b 20 70 50 72 6f            + pPro
30e80 67 72 61 6d 2d 3e 6e 43 73 72 20 2a 20 73 69 7a  gram->nCsr * siz
30e90 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72 2a 29  eof(VdbeCursor*)
30ea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b  .              +
30eb0 20 28 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 20   (pProgram->nOp 
30ec0 2b 20 37 29 2f 38 3b 0a 20 20 20 20 70 46 72 61  + 7)/8;.    pFra
30ed0 6d 65 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61  me = sqlite3DbMa
30ee0 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c 20 6e 42 79  llocZero(db, nBy
30ef0 74 65 29 3b 0a 20 20 20 20 69 66 28 20 21 70 46  te);.    if( !pF
30f00 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 67 6f  rame ){.      go
30f10 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d  to no_mem;.    }
30f20 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
30f30 4d 65 6d 52 65 6c 65 61 73 65 28 70 52 74 29 3b  MemRelease(pRt);
30f40 0a 20 20 20 20 70 52 74 2d 3e 66 6c 61 67 73 20  .    pRt->flags 
30f50 3d 20 4d 45 4d 5f 46 72 61 6d 65 3b 0a 20 20 20  = MEM_Frame;.   
30f60 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65 20 3d   pRt->u.pFrame =
30f70 20 70 46 72 61 6d 65 3b 0a 0a 20 20 20 20 70 46   pFrame;..    pF
30f80 72 61 6d 65 2d 3e 76 20 3d 20 70 3b 0a 20 20 20  rame->v = p;.   
30f90 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d   pFrame->nChildM
30fa0 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20 20 20 20 70  em = nMem;.    p
30fb0 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72  Frame->nChildCsr
30fc0 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73   = pProgram->nCs
30fd0 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 70  r;.    pFrame->p
30fe0 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  c = (int)(pOp - 
30ff0 61 4f 70 29 3b 0a 20 20 20 20 70 46 72 61 6d 65  aOp);.    pFrame
31000 2d 3e 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d  ->aMem = p->aMem
31010 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4d  ;.    pFrame->nM
31020 65 6d 20 3d 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20  em = p->nMem;.  
31030 20 20 70 46 72 61 6d 65 2d 3e 61 70 43 73 72 20    pFrame->apCsr 
31040 3d 20 70 2d 3e 61 70 43 73 72 3b 0a 20 20 20 20  = p->apCsr;.    
31050 70 46 72 61 6d 65 2d 3e 6e 43 75 72 73 6f 72 20  pFrame->nCursor 
31060 3d 20 70 2d 3e 6e 43 75 72 73 6f 72 3b 0a 20 20  = p->nCursor;.  
31070 20 20 70 46 72 61 6d 65 2d 3e 61 4f 70 20 3d 20    pFrame->aOp = 
31080 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 70 46 72 61  p->aOp;.    pFra
31090 6d 65 2d 3e 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70  me->nOp = p->nOp
310a0 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 74 6f  ;.    pFrame->to
310b0 6b 65 6e 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  ken = pProgram->
310c0 74 6f 6b 65 6e 3b 0a 23 69 66 64 65 66 20 53 51  token;.#ifdef SQ
310d0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54  LITE_ENABLE_STMT
310e0 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20 20 20  _SCANSTATUS.    
310f0 70 46 72 61 6d 65 2d 3e 61 6e 45 78 65 63 20 3d  pFrame->anExec =
31100 20 70 2d 3e 61 6e 45 78 65 63 3b 0a 23 65 6e 64   p->anExec;.#end
31110 69 66 0a 0a 20 20 20 20 70 45 6e 64 20 3d 20 26  if..    pEnd = &
31120 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72  VdbeFrameMem(pFr
31130 61 6d 65 29 5b 70 46 72 61 6d 65 2d 3e 6e 43 68  ame)[pFrame->nCh
31140 69 6c 64 4d 65 6d 5d 3b 0a 20 20 20 20 66 6f 72  ildMem];.    for
31150 28 70 4d 65 6d 3d 56 64 62 65 46 72 61 6d 65 4d  (pMem=VdbeFrameM
31160 65 6d 28 70 46 72 61 6d 65 29 3b 20 70 4d 65 6d  em(pFrame); pMem
31170 21 3d 70 45 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b  !=pEnd; pMem++){
31180 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61  .      pMem->fla
31190 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e  gs = MEM_Undefin
311a0 65 64 3b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e  ed;.      pMem->
311b0 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 7d 0a 20  db = db;.    }. 
311c0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 46 72 61   }else{.    pFra
311d0 6d 65 20 3d 20 70 52 74 2d 3e 75 2e 70 46 72 61  me = pRt->u.pFra
311e0 6d 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  me;.    assert( 
311f0 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 70  pProgram->nMem+p
31200 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70  Program->nCsr==p
31210 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
31220 20 0a 20 20 20 20 20 20 20 20 7c 7c 20 28 70 50   .        || (pP
31230 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 30 20  rogram->nCsr==0 
31240 26 26 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65  && pProgram->nMe
31250 6d 2b 31 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68  m+1==pFrame->nCh
31260 69 6c 64 4d 65 6d 29 20 29 3b 0a 20 20 20 20 61  ildMem) );.    a
31270 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d  ssert( pProgram-
31280 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e  >nCsr==pFrame->n
31290 43 68 69 6c 64 43 73 72 20 29 3b 0a 20 20 20 20  ChildCsr );.    
312a0 61 73 73 65 72 74 28 20 28 69 6e 74 29 28 70 4f  assert( (int)(pO
312b0 70 20 2d 20 61 4f 70 29 3d 3d 70 46 72 61 6d 65  p - aOp)==pFrame
312c0 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20 70  ->pc );.  }..  p
312d0 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70 46  ->nFrame++;.  pF
312e0 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20  rame->pParent = 
312f0 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46 72  p->pFrame;.  pFr
31300 61 6d 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d  ame->lastRowid =
31310 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a   db->lastRowid;.
31320 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 61 6e 67    pFrame->nChang
31330 65 20 3d 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a  e = p->nChange;.
31340 20 20 70 46 72 61 6d 65 2d 3e 6e 44 62 43 68 61    pFrame->nDbCha
31350 6e 67 65 20 3d 20 70 2d 3e 64 62 2d 3e 6e 43 68  nge = p->db->nCh
31360 61 6e 67 65 3b 0a 20 20 61 73 73 65 72 74 28 20  ange;.  assert( 
31370 70 46 72 61 6d 65 2d 3e 70 41 75 78 44 61 74 61  pFrame->pAuxData
31380 3d 3d 30 20 29 3b 0a 20 20 70 46 72 61 6d 65 2d  ==0 );.  pFrame-
31390 3e 70 41 75 78 44 61 74 61 20 3d 20 70 2d 3e 70  >pAuxData = p->p
313a0 41 75 78 44 61 74 61 3b 0a 20 20 70 2d 3e 70 41  AuxData;.  p->pA
313b0 75 78 44 61 74 61 20 3d 20 30 3b 0a 20 20 70 2d  uxData = 0;.  p-
313c0 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20  >nChange = 0;.  
313d0 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61  p->pFrame = pFra
313e0 6d 65 3b 0a 20 20 70 2d 3e 61 4d 65 6d 20 3d 20  me;.  p->aMem = 
313f0 61 4d 65 6d 20 3d 20 56 64 62 65 46 72 61 6d 65  aMem = VdbeFrame
31400 4d 65 6d 28 70 46 72 61 6d 65 29 3b 0a 20 20 70  Mem(pFrame);.  p
31410 2d 3e 6e 4d 65 6d 20 3d 20 70 46 72 61 6d 65 2d  ->nMem = pFrame-
31420 3e 6e 43 68 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d  >nChildMem;.  p-
31430 3e 6e 43 75 72 73 6f 72 20 3d 20 28 75 31 36 29  >nCursor = (u16)
31440 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73  pFrame->nChildCs
31450 72 3b 0a 20 20 70 2d 3e 61 70 43 73 72 20 3d 20  r;.  p->apCsr = 
31460 28 56 64 62 65 43 75 72 73 6f 72 20 2a 2a 29 26  (VdbeCursor **)&
31470 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d 3b 0a 20  aMem[p->nMem];. 
31480 20 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 20 3d   pFrame->aOnce =
31490 20 28 75 38 2a 29 26 70 2d 3e 61 70 43 73 72 5b   (u8*)&p->apCsr[
314a0 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 5d 3b  pProgram->nCsr];
314b0 0a 20 20 6d 65 6d 73 65 74 28 70 46 72 61 6d 65  .  memset(pFrame
314c0 2d 3e 61 4f 6e 63 65 2c 20 30 2c 20 28 70 50 72  ->aOnce, 0, (pPr
314d0 6f 67 72 61 6d 2d 3e 6e 4f 70 20 2b 20 37 29 2f  ogram->nOp + 7)/
314e0 38 29 3b 0a 20 20 70 2d 3e 61 4f 70 20 3d 20 61  8);.  p->aOp = a
314f0 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 61  Op = pProgram->a
31500 4f 70 3b 0a 20 20 70 2d 3e 6e 4f 70 20 3d 20 70  Op;.  p->nOp = p
31510 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3b 0a 23 69  Program->nOp;.#i
31520 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
31530 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54  LE_STMT_SCANSTAT
31540 55 53 0a 20 20 70 2d 3e 61 6e 45 78 65 63 20 3d  US.  p->anExec =
31550 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 70 4f 70   0;.#endif.  pOp
31560 20 3d 20 26 61 4f 70 5b 2d 31 5d 3b 0a 0a 20 20   = &aOp[-1];..  
31570 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
31580 6f 64 65 3a 20 50 61 72 61 6d 20 50 31 20 50 32  ode: Param P1 P2
31590 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69   * * *.**.** Thi
315a0 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  s opcode is only
315b0 20 65 76 65 72 20 70 72 65 73 65 6e 74 20 69 6e   ever present in
315c0 20 73 75 62 2d 70 72 6f 67 72 61 6d 73 20 63 61   sub-programs ca
315d0 6c 6c 65 64 20 76 69 61 20 74 68 65 20 0a 2a 2a  lled via the .**
315e0 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74   OP_Program inst
315f0 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20 61 20  ruction. Copy a 
31600 76 61 6c 75 65 20 63 75 72 72 65 6e 74 6c 79 20  value currently 
31610 73 74 6f 72 65 64 20 69 6e 20 61 20 6d 65 6d 6f  stored in a memo
31620 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20 74  ry .** cell of t
31630 68 65 20 63 61 6c 6c 69 6e 67 20 28 70 61 72 65  he calling (pare
31640 6e 74 29 20 66 72 61 6d 65 20 74 6f 20 63 65 6c  nt) frame to cel
31650 6c 20 50 32 20 69 6e 20 74 68 65 20 63 75 72 72  l P2 in the curr
31660 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a 20 61  ent frames .** a
31670 64 64 72 65 73 73 20 73 70 61 63 65 2e 20 54 68  ddress space. Th
31680 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72  is is used by tr
31690 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 20 74  igger programs t
316a0 6f 20 61 63 63 65 73 73 20 74 68 65 20 6e 65 77  o access the new
316b0 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a  .* .** and old.*
316c0 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54   values..**.** T
316d0 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68  he address of th
316e0 65 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 70 61  e cell in the pa
316f0 72 65 6e 74 20 66 72 61 6d 65 20 69 73 20 64 65  rent frame is de
31700 74 65 72 6d 69 6e 65 64 20 62 79 20 61 64 64 69  termined by addi
31710 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20  ng.** the value 
31720 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65  of the P1 argume
31730 6e 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  nt to the value 
31740 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65  of the P1 argume
31750 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63 61 6c  nt to the.** cal
31760 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 20  ling OP_Program 
31770 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
31780 63 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a 20 7b  case OP_Param: {
31790 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
317a0 74 32 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d  t2 */.  VdbeFram
317b0 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 4d 65 6d  e *pFrame;.  Mem
317c0 20 2a 70 49 6e 3b 0a 20 20 70 4f 75 74 20 3d 20   *pIn;.  pOut = 
317d0 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
317e0 2c 20 70 4f 70 29 3b 0a 20 20 70 46 72 61 6d 65  , pOp);.  pFrame
317f0 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20   = p->pFrame;.  
31800 70 49 6e 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61  pIn = &pFrame->a
31810 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20 70 46  Mem[pOp->p1 + pF
31820 72 61 6d 65 2d 3e 61 4f 70 5b 70 46 72 61 6d 65  rame->aOp[pFrame
31830 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20 20 0a 20 20  ->pc].p1];   .  
31840 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
31850 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20  allowCopy(pOut, 
31860 70 49 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b  pIn, MEM_Ephem);
31870 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e  .  break;.}..#en
31880 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53  dif /* #ifndef S
31890 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
318a0 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  ER */..#ifndef S
318b0 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
318c0 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f 64 65  GN_KEY./* Opcode
318d0 3a 20 46 6b 43 6f 75 6e 74 65 72 20 50 31 20 50  : FkCounter P1 P
318e0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
318f0 73 69 73 3a 20 66 6b 63 74 72 5b 50 31 5d 2b 3d  sis: fkctr[P1]+=
31900 50 32 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65  P2.**.** Increme
31910 6e 74 20 61 20 22 63 6f 6e 73 74 72 61 69 6e 74  nt a "constraint
31920 20 63 6f 75 6e 74 65 72 22 20 62 79 20 50 32 20   counter" by P2 
31930 28 50 32 20 6d 61 79 20 62 65 20 6e 65 67 61 74  (P2 may be negat
31940 69 76 65 20 6f 72 20 70 6f 73 69 74 69 76 65 29  ive or positive)
31950 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f  ..** If P1 is no
31960 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 64 61 74 61  n-zero, the data
31970 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 20  base constraint 
31980 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65  counter is incre
31990 6d 65 6e 74 65 64 20 0a 2a 2a 20 28 64 65 66 65  mented .** (defe
319a0 72 72 65 64 20 66 6f 72 65 69 67 6e 20 6b 65 79  rred foreign key
319b0 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 20 4f   constraints). O
319c0 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 31 20  therwise, if P1 
319d0 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 0a 2a 2a  is zero, the .**
319e0 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 75 6e 74   statement count
319f0 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  er is incremente
31a00 64 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72  d (immediate for
31a10 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
31a20 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ints)..*/.case O
31a30 50 5f 46 6b 43 6f 75 6e 74 65 72 3a 20 7b 0a 20  P_FkCounter: {. 
31a40 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26   if( db->flags &
31a50 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73   SQLITE_DeferFKs
31a60 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66   ){.    db->nDef
31a70 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 2b 3d 20  erredImmCons += 
31a80 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65  pOp->p2;.  }else
31a90 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a   if( pOp->p1 ){.
31aa0 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65      db->nDeferre
31ab0 64 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32  dCons += pOp->p2
31ac0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
31ad0 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 20  ->nFkConstraint 
31ae0 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 0a  += pOp->p2;.  }.
31af0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
31b00 70 63 6f 64 65 3a 20 46 6b 49 66 5a 65 72 6f 20  pcode: FkIfZero 
31b10 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
31b20 79 6e 6f 70 73 69 73 3a 20 69 66 20 66 6b 63 74  ynopsis: if fkct
31b30 72 5b 50 31 5d 3d 3d 30 20 67 6f 74 6f 20 50 32  r[P1]==0 goto P2
31b40 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
31b50 64 65 20 74 65 73 74 73 20 69 66 20 61 20 66 6f  de tests if a fo
31b60 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
31b70 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20  aint-counter is 
31b80 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a  currently zero..
31b90 2a 2a 20 49 66 20 73 6f 2c 20 6a 75 6d 70 20 74  ** If so, jump t
31ba0 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
31bb0 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c  . Otherwise, fal
31bc0 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
31bd0 20 6e 65 78 74 20 0a 2a 2a 20 69 6e 73 74 72 75   next .** instru
31be0 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ction..**.** If 
31bf0 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  P1 is non-zero, 
31c00 74 68 65 6e 20 74 68 65 20 6a 75 6d 70 20 69 73  then the jump is
31c10 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 64 61   taken if the da
31c20 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e  tabase constrain
31c30 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20 69 73 20  t-counter.** is 
31c40 7a 65 72 6f 20 28 74 68 65 20 6f 6e 65 20 74 68  zero (the one th
31c50 61 74 20 63 6f 75 6e 74 73 20 64 65 66 65 72 72  at counts deferr
31c60 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  ed constraint vi
31c70 6f 6c 61 74 69 6f 6e 73 29 2e 20 49 66 20 50 31  olations). If P1
31c80 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68 65   is.** zero, the
31c90 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
31ca0 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  f the statement 
31cb0 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74  constraint-count
31cc0 65 72 20 69 73 20 7a 65 72 6f 0a 2a 2a 20 28 69  er is zero.** (i
31cd0 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e  mmediate foreign
31ce0 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20   key constraint 
31cf0 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a  violations)..*/.
31d00 63 61 73 65 20 4f 50 5f 46 6b 49 66 5a 65 72 6f  case OP_FkIfZero
31d10 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  : {         /* j
31d20 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70  ump */.  if( pOp
31d30 2d 3e 70 31 20 29 7b 0a 20 20 20 20 56 64 62 65  ->p1 ){.    Vdbe
31d40 42 72 61 6e 63 68 54 61 6b 65 6e 28 64 62 2d 3e  BranchTaken(db->
31d50 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30  nDeferredCons==0
31d60 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   && db->nDeferre
31d70 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b  dImmCons==0, 2);
31d80 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 44 65  .    if( db->nDe
31d90 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26  ferredCons==0 &&
31da0 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
31db0 6d 43 6f 6e 73 3d 3d 30 20 29 20 67 6f 74 6f 20  mCons==0 ) goto 
31dc0 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65  jump_to_p2;.  }e
31dd0 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61  lse{.    VdbeBra
31de0 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 6e 46 6b 43  nchTaken(p->nFkC
31df0 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26 26 20  onstraint==0 && 
31e00 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
31e10 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20  Cons==0, 2);.   
31e20 20 69 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74   if( p->nFkConst
31e30 72 61 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e  raint==0 && db->
31e40 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
31e50 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  ==0 ) goto jump_
31e60 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
31e70 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
31e80 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
31e90 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20  MIT_FOREIGN_KEY 
31ea0 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
31eb0 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52  TE_OMIT_AUTOINCR
31ec0 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  EMENT./* Opcode:
31ed0 20 4d 65 6d 4d 61 78 20 50 31 20 50 32 20 2a 20   MemMax P1 P2 * 
31ee0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
31ef0 20 72 5b 50 31 5d 3d 6d 61 78 28 72 5b 50 31 5d   r[P1]=max(r[P1]
31f00 2c 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 50 31  ,r[P2]).**.** P1
31f10 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 69   is a register i
31f20 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65  n the root frame
31f30 20 6f 66 20 74 68 69 73 20 56 4d 20 28 74 68 65   of this VM (the
31f40 20 72 6f 6f 74 20 66 72 61 6d 65 20 69 73 0a 2a   root frame is.*
31f50 2a 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d  * different from
31f60 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72 61   the current fra
31f70 6d 65 20 69 66 20 74 68 69 73 20 69 6e 73 74 72  me if this instr
31f80 75 63 74 69 6f 6e 20 69 73 20 62 65 69 6e 67 20  uction is being 
31f90 65 78 65 63 75 74 65 64 0a 2a 2a 20 77 69 74 68  executed.** with
31fa0 69 6e 20 61 20 73 75 62 2d 70 72 6f 67 72 61 6d  in a sub-program
31fb0 29 2e 20 53 65 74 20 74 68 65 20 76 61 6c 75 65  ). Set the value
31fc0 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
31fd0 74 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f  to the maximum o
31fe0 66 20 0a 2a 2a 20 69 74 73 20 63 75 72 72 65 6e  f .** its curren
31ff0 74 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20  t value and the 
32000 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
32010 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P2..**.** This
32020 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 72   instruction thr
32030 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20  ows an error if 
32040 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  the memory cell 
32050 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79  is not initially
32060 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  .** an integer..
32070 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d 61  */.case OP_MemMa
32080 78 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69  x: {        /* i
32090 6e 32 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d  n2 */.  VdbeFram
320a0 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69 66 28  e *pFrame;.  if(
320b0 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20   p->pFrame ){.  
320c0 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e    for(pFrame=p->
320d0 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e  pFrame; pFrame->
320e0 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d  pParent; pFrame=
320f0 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29  pFrame->pParent)
32100 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 70 46  ;.    pIn1 = &pF
32110 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  rame->aMem[pOp->
32120 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  p1];.  }else{.  
32130 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
32140 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20 20 61  Op->p1];.  }.  a
32150 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
32160 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 73 71 6c  d(pIn1) );.  sql
32170 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
32180 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70  erify(pIn1);.  p
32190 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
321a0 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56  >p2];.  sqlite3V
321b0 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
321c0 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 70 49  (pIn2);.  if( pI
321d0 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e  n1->u.i<pIn2->u.
321e0 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e  i){.    pIn1->u.
321f0 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  i = pIn2->u.i;. 
32200 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
32210 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
32220 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
32230 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  T */../* Opcode:
32240 20 49 66 50 6f 73 20 50 31 20 50 32 20 50 33 20   IfPos P1 P2 P3 
32250 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
32260 20 69 66 20 72 5b 50 31 5d 3e 30 20 74 68 65 6e   if r[P1]>0 then
32270 20 72 5b 50 31 5d 2d 3d 50 33 2c 20 67 6f 74 6f   r[P1]-=P3, goto
32280 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74   P2.**.** Regist
32290 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61  er P1 must conta
322a0 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  in an integer..*
322b0 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f  * If the value o
322c0 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  f register P1 is
322d0 20 31 20 6f 72 20 67 72 65 61 74 65 72 2c 20 73   1 or greater, s
322e0 75 62 74 72 61 63 74 20 50 33 20 66 72 6f 6d 20  ubtract P3 from 
322f0 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20  the.** value in 
32300 50 31 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 50  P1 and jump to P
32310 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  2..**.** If the 
32320 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66  initial value of
32330 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
32340 6c 65 73 73 20 74 68 61 6e 20 31 2c 20 74 68 65  less than 1, the
32350 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69  n the.** value i
32360 73 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20  s unchanged and 
32370 63 6f 6e 74 72 6f 6c 20 70 61 73 73 65 73 20 74  control passes t
32380 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
32390 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
323a0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f 73  */.case OP_IfPos
323b0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
323c0 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
323d0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
323e0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
323f0 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
32400 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  t );.  VdbeBranc
32410 68 54 61 6b 65 6e 28 20 70 49 6e 31 2d 3e 75 2e  hTaken( pIn1->u.
32420 69 3e 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70  i>0, 2);.  if( p
32430 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20 20  In1->u.i>0 ){.  
32440 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2d 3d 20 70    pIn1->u.i -= p
32450 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 67 6f 74 6f  Op->p3;.    goto
32460 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
32470 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
32480 4f 70 63 6f 64 65 3a 20 4f 66 66 73 65 74 4c 69  Opcode: OffsetLi
32490 6d 69 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  mit P1 P2 P3 * *
324a0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
324b0 20 72 5b 50 31 5d 3e 30 20 74 68 65 6e 20 72 5b   r[P1]>0 then r[
324c0 50 32 5d 3d 72 5b 50 31 5d 2b 6d 61 78 28 30 2c  P2]=r[P1]+max(0,
324d0 72 5b 50 33 5d 29 20 65 6c 73 65 20 72 5b 50 32  r[P3]) else r[P2
324e0 5d 3d 28 2d 31 29 0a 2a 2a 0a 2a 2a 20 54 68 69  ]=(-1).**.** Thi
324f0 73 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d  s opcode perform
32500 73 20 61 20 63 6f 6d 6d 6f 6e 6c 79 20 75 73 65  s a commonly use
32510 64 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 61 73  d computation as
32520 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a 2a 2a  sociated with.**
32530 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53 45   LIMIT and OFFSE
32540 54 20 70 72 6f 63 65 73 73 2e 20 20 72 5b 50 31  T process.  r[P1
32550 5d 20 68 6f 6c 64 73 20 74 68 65 20 6c 69 6d 69  ] holds the limi
32560 74 20 63 6f 75 6e 74 65 72 2e 20 20 72 5b 50 33  t counter.  r[P3
32570 5d 0a 2a 2a 20 68 6f 6c 64 73 20 74 68 65 20 6f  ].** holds the o
32580 66 66 73 65 74 20 63 6f 75 6e 74 65 72 2e 20 20  ffset counter.  
32590 54 68 65 20 6f 70 63 6f 64 65 20 63 6f 6d 70 75  The opcode compu
325a0 74 65 73 20 74 68 65 20 63 6f 6d 62 69 6e 65 64  tes the combined
325b0 20 76 61 6c 75 65 0a 2a 2a 20 6f 66 20 74 68 65   value.** of the
325c0 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53 45   LIMIT and OFFSE
325d0 54 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61  T and stores tha
325e0 74 20 76 61 6c 75 65 20 69 6e 20 72 5b 50 32 5d  t value in r[P2]
325f0 2e 20 20 54 68 65 20 72 5b 50 32 5d 0a 2a 2a 20  .  The r[P2].** 
32600 76 61 6c 75 65 20 63 6f 6d 70 75 74 65 64 20 69  value computed i
32610 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  s the total numb
32620 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61 74 20  er of rows that 
32630 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 0a  will need to be.
32640 2a 2a 20 76 69 73 69 74 65 64 20 69 6e 20 6f 72  ** visited in or
32650 64 65 72 20 74 6f 20 63 6f 6d 70 6c 65 74 65 20  der to complete 
32660 74 68 65 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a  the query..**.**
32670 20 49 66 20 72 5b 50 33 5d 20 69 73 20 7a 65 72   If r[P3] is zer
32680 6f 20 6f 72 20 6e 65 67 61 74 69 76 65 2c 20 74  o or negative, t
32690 68 61 74 20 6d 65 61 6e 73 20 74 68 65 72 65 20  hat means there 
326a0 69 73 20 6e 6f 20 4f 46 46 53 45 54 0a 2a 2a 20  is no OFFSET.** 
326b0 61 6e 64 20 72 5b 50 32 5d 20 69 73 20 73 65 74  and r[P2] is set
326c0 20 74 6f 20 62 65 20 74 68 65 20 76 61 6c 75 65   to be the value
326d0 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 2c 20 72   of the LIMIT, r
326e0 5b 50 31 5d 2e 0a 2a 2a 0a 2a 2a 20 69 66 20 72  [P1]..**.** if r
326f0 5b 50 31 5d 20 69 73 20 7a 65 72 6f 20 6f 72 20  [P1] is zero or 
32700 6e 65 67 61 74 69 76 65 2c 20 74 68 61 74 20 6d  negative, that m
32710 65 61 6e 73 20 74 68 65 72 65 20 69 73 20 6e 6f  eans there is no
32720 20 4c 49 4d 49 54 0a 2a 2a 20 61 6e 64 20 72 5b   LIMIT.** and r[
32730 50 32 5d 20 69 73 20 73 65 74 20 74 6f 20 2d 31  P2] is set to -1
32740 2e 20 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 77 69  . .**.** Otherwi
32750 73 65 2c 20 72 5b 50 32 5d 20 69 73 20 73 65 74  se, r[P2] is set
32760 20 74 6f 20 74 68 65 20 73 75 6d 20 6f 66 20 72   to the sum of r
32770 5b 50 31 5d 20 61 6e 64 20 72 5b 50 33 5d 2e 0a  [P1] and r[P3]..
32780 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 66 66 73 65  */.case OP_Offse
32790 74 4c 69 6d 69 74 3a 20 7b 20 20 20 20 2f 2a 20  tLimit: {    /* 
327a0 69 6e 31 2c 20 6f 75 74 32 2c 20 69 6e 33 20 2a  in1, out2, in3 *
327b0 2f 0a 20 20 69 36 34 20 78 3b 0a 20 20 70 49 6e  /.  i64 x;.  pIn
327c0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
327d0 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d  1];.  pIn3 = &aM
327e0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70  em[pOp->p3];.  p
327f0 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
32800 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
32810 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
32820 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
32830 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d  .  assert( pIn3-
32840 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
32850 20 29 3b 0a 20 20 78 20 3d 20 70 49 6e 31 2d 3e   );.  x = pIn1->
32860 75 2e 69 3b 0a 20 20 69 66 28 20 78 3c 3d 30 20  u.i;.  if( x<=0 
32870 7c 7c 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74  || sqlite3AddInt
32880 36 34 28 26 78 2c 20 70 49 6e 33 2d 3e 75 2e 69  64(&x, pIn3->u.i
32890 3e 30 3f 70 49 6e 33 2d 3e 75 2e 69 3a 30 29 20  >0?pIn3->u.i:0) 
328a0 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65  ){.    /* If the
328b0 20 4c 49 4d 49 54 20 69 73 20 6c 65 73 73 20 74   LIMIT is less t
328c0 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
328d0 7a 65 72 6f 2c 20 6c 6f 6f 70 20 66 6f 72 65 76  zero, loop forev
328e0 65 72 2e 20 20 54 68 69 73 0a 20 20 20 20 2a 2a  er.  This.    **
328f0 20 69 73 20 64 6f 63 75 6d 65 6e 74 65 64 2e 20   is documented. 
32900 20 42 75 74 20 61 6c 73 6f 2c 20 69 66 20 74 68   But also, if th
32910 65 20 4c 49 4d 49 54 2b 4f 46 46 53 45 54 20 65  e LIMIT+OFFSET e
32920 78 63 65 65 64 73 20 32 5e 36 33 20 74 68 65 6e  xceeds 2^63 then
32930 0a 20 20 20 20 2a 2a 20 61 6c 73 6f 20 6c 6f 6f  .    ** also loo
32940 70 20 66 6f 72 65 76 65 72 2e 20 20 54 68 69 73  p forever.  This
32950 20 69 73 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64   is undocumented
32960 2e 20 20 49 6e 20 66 61 63 74 2c 20 6f 6e 65 20  .  In fact, one 
32970 63 6f 75 6c 64 20 61 72 67 75 65 0a 20 20 20 20  could argue.    
32980 2a 2a 20 74 68 61 74 20 74 68 65 20 6c 6f 6f 70  ** that the loop
32990 20 73 68 6f 75 6c 64 20 74 65 72 6d 69 6e 61 74   should terminat
329a0 65 2e 20 20 42 75 74 20 61 73 73 75 6d 69 6e 67  e.  But assuming
329b0 20 31 20 62 69 6c 6c 69 6f 6e 20 69 74 65 72 61   1 billion itera
329c0 74 69 6f 6e 73 0a 20 20 20 20 2a 2a 20 70 65 72  tions.    ** per
329d0 20 73 65 63 6f 6e 64 20 28 66 61 72 20 65 78 63   second (far exc
329e0 65 65 64 69 6e 67 20 74 68 65 20 63 61 70 61 62  eeding the capab
329f0 69 6c 69 74 69 65 73 20 6f 66 20 61 6e 79 20 63  ilities of any c
32a00 75 72 72 65 6e 74 20 68 61 72 64 77 61 72 65 29  urrent hardware)
32a10 0a 20 20 20 20 2a 2a 20 69 74 20 77 6f 75 6c 64  .    ** it would
32a20 20 74 61 6b 65 20 6e 65 61 72 6c 79 20 33 30 30   take nearly 300
32a30 20 79 65 61 72 73 20 74 6f 20 61 63 74 75 61 6c   years to actual
32a40 6c 79 20 72 65 61 63 68 20 74 68 65 20 6c 69 6d  ly reach the lim
32a50 69 74 2e 20 20 53 6f 0a 20 20 20 20 2a 2a 20 6c  it.  So.    ** l
32a60 6f 6f 70 69 6e 67 20 66 6f 72 65 76 65 72 20 69  ooping forever i
32a70 73 20 61 20 72 65 61 73 6f 6e 61 62 6c 65 20 61  s a reasonable a
32a80 70 70 72 6f 78 69 6d 61 74 69 6f 6e 2e 20 2a 2f  pproximation. */
32a90 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
32aa0 20 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20   -1;.  }else{.  
32ab0 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 78 3b    pOut->u.i = x;
32ac0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
32ad0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f  ./* Opcode: IfNo
32ae0 74 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20  tZero P1 P2 * * 
32af0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
32b00 66 20 72 5b 50 31 5d 21 3d 30 20 74 68 65 6e 20  f r[P1]!=0 then 
32b10 72 5b 50 31 5d 2d 2d 2c 20 67 6f 74 6f 20 50 32  r[P1]--, goto P2
32b20 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
32b30 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20  P1 must contain 
32b40 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20  an integer.  If 
32b50 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
32b60 65 67 69 73 74 65 72 20 50 31 20 69 73 0a 2a 2a  egister P1 is.**
32b70 20 69 6e 69 74 69 61 6c 6c 79 20 67 72 65 61 74   initially great
32b80 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68  er than zero, th
32b90 65 6e 20 64 65 63 72 65 6d 65 6e 74 20 74 68 65  en decrement the
32ba0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
32bb0 65 72 20 50 31 2e 0a 2a 2a 20 49 66 20 69 74 20  er P1..** If it 
32bc0 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 28 6e 65 67  is non-zero (neg
32bd0 61 74 69 76 65 20 6f 72 20 70 6f 73 69 74 69 76  ative or positiv
32be0 65 29 20 61 6e 64 20 74 68 65 6e 20 61 6c 73 6f  e) and then also
32bf0 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 0a 2a   jump to P2.  .*
32c00 2a 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31  * If register P1
32c10 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 7a 65   is initially ze
32c20 72 6f 2c 20 6c 65 61 76 65 20 69 74 20 75 6e 63  ro, leave it unc
32c30 68 61 6e 67 65 64 20 61 6e 64 20 66 61 6c 6c 20  hanged and fall 
32c40 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a 63 61 73 65  through..*/.case
32c50 20 4f 50 5f 49 66 4e 6f 74 5a 65 72 6f 3a 20 7b   OP_IfNotZero: {
32c60 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
32c70 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
32c80 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
32c90 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
32ca0 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
32cb0 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
32cc0 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3c 30 2c  ken(pIn1->u.i<0,
32cd0 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d   2);.  if( pIn1-
32ce0 3e 75 2e 69 20 29 7b 0a 20 20 20 20 20 69 66 28  >u.i ){.     if(
32cf0 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 20 70   pIn1->u.i>0 ) p
32d00 49 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a 20 20 20 20  In1->u.i--;.    
32d10 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
32d20 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
32d30 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 63  ../* Opcode: Dec
32d40 72 4a 75 6d 70 5a 65 72 6f 20 50 31 20 50 32 20  rJumpZero P1 P2 
32d50 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
32d60 73 3a 20 69 66 20 28 2d 2d 72 5b 50 31 5d 29 3d  s: if (--r[P1])=
32d70 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  =0 goto P2.**.**
32d80 20 52 65 67 69 73 74 65 72 20 50 31 20 6d 75 73   Register P1 mus
32d90 74 20 68 6f 6c 64 20 61 6e 20 69 6e 74 65 67 65  t hold an intege
32da0 72 2e 20 20 44 65 63 72 65 6d 65 6e 74 20 74 68  r.  Decrement th
32db0 65 20 76 61 6c 75 65 20 69 6e 20 50 31 0a 2a 2a  e value in P1.**
32dc0 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 50 32 20   and jump to P2 
32dd0 69 66 20 74 68 65 20 6e 65 77 20 76 61 6c 75 65  if the new value
32de0 20 69 73 20 65 78 61 63 74 6c 79 20 7a 65 72 6f   is exactly zero
32df0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 63  ..*/.case OP_Dec
32e00 72 4a 75 6d 70 5a 65 72 6f 3a 20 7b 20 20 20 20  rJumpZero: {    
32e10 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
32e20 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
32e30 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
32e40 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
32e50 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66  &MEM_Int );.  if
32e60 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 53 4d 41 4c  ( pIn1->u.i>SMAL
32e70 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 70 49 6e  LEST_INT64 ) pIn
32e80 31 2d 3e 75 2e 69 2d 2d 3b 0a 20 20 56 64 62 65  1->u.i--;.  Vdbe
32e90 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31  BranchTaken(pIn1
32ea0 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29 3b 0a 20 20  ->u.i==0, 2);.  
32eb0 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30  if( pIn1->u.i==0
32ec0 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
32ed0 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p2;.  break;.}..
32ee0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 53  ./* Opcode: AggS
32ef0 74 65 70 30 20 2a 20 50 32 20 50 33 20 50 34 20  tep0 * P2 P3 P4 
32f00 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
32f10 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73 74 65 70  accum=r[P3] step
32f20 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a  (r[P2@P5]).**.**
32f30 20 45 78 65 63 75 74 65 20 74 68 65 20 73 74 65   Execute the ste
32f40 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61  p function for a
32f50 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 54 68  n aggregate.  Th
32f60 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 68 61  e.** function ha
32f70 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e 20  s P5 arguments. 
32f80 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65    P4 is a pointe
32f90 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66  r to the FuncDef
32fa0 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74 68  .** structure th
32fb0 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68 65  at specifies the
32fc0 20 66 75 6e 63 74 69 6f 6e 2e 20 20 52 65 67 69   function.  Regi
32fd0 73 74 65 72 20 50 33 20 69 73 20 74 68 65 0a 2a  ster P3 is the.*
32fe0 2a 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a  * accumulator..*
32ff0 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75  *.** The P5 argu
33000 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20  ments are taken 
33010 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32  from register P2
33020 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63   and its.** succ
33030 65 73 73 6f 72 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70  essors..*/./* Op
33040 63 6f 64 65 3a 20 41 67 67 53 74 65 70 20 2a 20  code: AggStep * 
33050 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
33060 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72  ynopsis: accum=r
33070 5b 50 33 5d 20 73 74 65 70 28 72 5b 50 32 40 50  [P3] step(r[P2@P
33080 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74  5]).**.** Execut
33090 65 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74  e the step funct
330a0 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65  ion for an aggre
330b0 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75  gate.  The.** fu
330c0 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61 72  nction has P5 ar
330d0 67 75 6d 65 6e 74 73 2e 20 20 20 50 34 20 69 73  guments.   P4 is
330e0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e   a pointer to an
330f0 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
33100 0a 2a 2a 20 6f 62 6a 65 63 74 20 74 68 61 74 20  .** object that 
33110 69 73 20 75 73 65 64 20 74 6f 20 72 75 6e 20 74  is used to run t
33120 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 52 65  he function.  Re
33130 67 69 73 74 65 72 20 50 33 20 69 73 0a 2a 2a 20  gister P3 is.** 
33140 61 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74  as the accumulat
33150 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35  or..**.** The P5
33160 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74   arguments are t
33170 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74  aken from regist
33180 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a  er P2 and its.**
33190 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2a 0a   successors..**.
331a0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
331b0 73 20 69 6e 69 74 69 61 6c 6c 79 20 63 6f 64 65  s initially code
331c0 64 20 61 73 20 4f 50 5f 41 67 67 53 74 65 70 30  d as OP_AggStep0
331d0 2e 20 20 4f 6e 20 66 69 72 73 74 20 65 76 61 6c  .  On first eval
331e0 75 61 74 69 6f 6e 2c 0a 2a 2a 20 74 68 65 20 46  uation,.** the F
331f0 75 6e 63 44 65 66 20 73 74 6f 72 65 64 20 69 6e  uncDef stored in
33200 20 50 34 20 69 73 20 63 6f 6e 76 65 72 74 65 64   P4 is converted
33210 20 69 6e 74 6f 20 61 6e 20 73 71 6c 69 74 65 33   into an sqlite3
33220 5f 63 6f 6e 74 65 78 74 20 61 6e 64 0a 2a 2a 20  _context and.** 
33230 74 68 65 20 6f 70 63 6f 64 65 20 69 73 20 63 68  the opcode is ch
33240 61 6e 67 65 64 2e 20 20 49 6e 20 74 68 69 73 20  anged.  In this 
33250 77 61 79 2c 20 74 68 65 20 69 6e 69 74 69 61 6c  way, the initial
33260 69 7a 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ization of the.*
33270 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  * sqlite3_contex
33280 74 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73 20 6f  t only happens o
33290 6e 63 65 2c 20 69 6e 73 74 65 61 64 20 6f 66 20  nce, instead of 
332a0 6f 6e 20 65 61 63 68 20 63 61 6c 6c 20 74 6f 20  on each call to 
332b0 74 68 65 0a 2a 2a 20 73 74 65 70 20 66 75 6e 63  the.** step func
332c0 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
332d0 5f 41 67 67 53 74 65 70 30 3a 20 7b 0a 20 20 69  _AggStep0: {.  i
332e0 6e 74 20 6e 3b 0a 20 20 73 71 6c 69 74 65 33 5f  nt n;.  sqlite3_
332f0 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a 0a  context *pCtx;..
33300 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
33310 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45  4type==P4_FUNCDE
33320 46 20 29 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e  F );.  n = pOp->
33330 70 35 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p5;.  assert( pO
33340 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
33350 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p3<=(p->nMem+1 -
33360 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
33370 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c    assert( n==0 |
33380 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  | (pOp->p2>0 && 
33390 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70 2d 3e 6e  pOp->p2+n<=(p->n
333a0 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
333b0 6f 72 29 2b 31 29 20 29 3b 0a 20 20 61 73 73 65  or)+1) );.  asse
333c0 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d  rt( pOp->p3<pOp-
333d0 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d  >p2 || pOp->p3>=
333e0 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70  pOp->p2+n );.  p
333f0 43 74 78 20 3d 20 73 71 6c 69 74 65 33 44 62 4d  Ctx = sqlite3DbM
33400 61 6c 6c 6f 63 52 61 77 4e 4e 28 64 62 2c 20 73  allocRawNN(db, s
33410 69 7a 65 6f 66 28 2a 70 43 74 78 29 20 2b 20 28  izeof(*pCtx) + (
33420 6e 2d 31 29 2a 73 69 7a 65 6f 66 28 73 71 6c 69  n-1)*sizeof(sqli
33430 74 65 33 5f 76 61 6c 75 65 2a 29 29 3b 0a 20 20  te3_value*));.  
33440 69 66 28 20 70 43 74 78 3d 3d 30 20 29 20 67 6f  if( pCtx==0 ) go
33450 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 74  to no_mem;.  pCt
33460 78 2d 3e 70 4d 65 6d 20 3d 20 30 3b 0a 20 20 70  x->pMem = 0;.  p
33470 43 74 78 2d 3e 70 46 75 6e 63 20 3d 20 70 4f 70  Ctx->pFunc = pOp
33480 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 70 43  ->p4.pFunc;.  pC
33490 74 78 2d 3e 69 4f 70 20 3d 20 28 69 6e 74 29 28  tx->iOp = (int)(
334a0 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 70 43  pOp - aOp);.  pC
334b0 74 78 2d 3e 70 56 64 62 65 20 3d 20 70 3b 0a 20  tx->pVdbe = p;. 
334c0 20 70 43 74 78 2d 3e 61 72 67 63 20 3d 20 6e 3b   pCtx->argc = n;
334d0 0a 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d  .  pOp->p4type =
334e0 20 50 34 5f 46 55 4e 43 43 54 58 3b 0a 20 20 70   P4_FUNCCTX;.  p
334f0 4f 70 2d 3e 70 34 2e 70 43 74 78 20 3d 20 70 43  Op->p4.pCtx = pC
33500 74 78 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64  tx;.  pOp->opcod
33510 65 20 3d 20 4f 50 5f 41 67 67 53 74 65 70 3b 0a  e = OP_AggStep;.
33520 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
33530 68 20 69 6e 74 6f 20 4f 50 5f 41 67 67 53 74 65  h into OP_AggSte
33540 70 20 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50 5f 41  p */.}.case OP_A
33550 67 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74 20  ggStep: {.  int 
33560 69 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  i;.  sqlite3_con
33570 74 65 78 74 20 2a 70 43 74 78 3b 0a 20 20 4d 65  text *pCtx;.  Me
33580 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d 20 74  m *pMem;.  Mem t
33590 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
335a0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e  ->p4type==P4_FUN
335b0 43 43 54 58 20 29 3b 0a 20 20 70 43 74 78 20 3d  CCTX );.  pCtx =
335c0 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78 3b 0a 20   pOp->p4.pCtx;. 
335d0 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f   pMem = &aMem[pO
335e0 70 2d 3e 70 33 5d 3b 0a 0a 20 20 2f 2a 20 49 66  p->p3];..  /* If
335f0 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69   this function i
33600 73 20 69 6e 73 69 64 65 20 6f 66 20 61 20 74 72  s inside of a tr
33610 69 67 67 65 72 2c 20 74 68 65 20 72 65 67 69 73  igger, the regis
33620 74 65 72 20 61 72 72 61 79 20 69 6e 20 61 4d 65  ter array in aMe
33630 6d 5b 5d 0a 20 20 2a 2a 20 6d 69 67 68 74 20 63  m[].  ** might c
33640 68 61 6e 67 65 20 66 72 6f 6d 20 6f 6e 65 20 65  hange from one e
33650 76 61 6c 75 61 74 69 6f 6e 20 74 6f 20 74 68 65  valuation to the
33660 20 6e 65 78 74 2e 20 20 54 68 65 20 6e 65 78 74   next.  The next
33670 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 0a 20   block of code. 
33680 20 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20 73 65   ** checks to se
33690 65 20 69 66 20 74 68 65 20 72 65 67 69 73 74 65  e if the registe
336a0 72 20 61 72 72 61 79 20 68 61 73 20 63 68 61 6e  r array has chan
336b0 67 65 64 2c 20 61 6e 64 20 69 66 20 73 6f 20 69  ged, and if so i
336c0 74 0a 20 20 2a 2a 20 72 65 69 6e 69 74 69 61 6c  t.  ** reinitial
336d0 69 7a 65 73 20 74 68 65 20 72 65 6c 61 76 61 6e  izes the relavan
336e0 74 20 70 61 72 74 73 20 6f 66 20 74 68 65 20 73  t parts of the s
336f0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f  qlite3_context o
33700 62 6a 65 63 74 20 2a 2f 0a 20 20 69 66 28 20 70  bject */.  if( p
33710 43 74 78 2d 3e 70 4d 65 6d 20 21 3d 20 70 4d 65  Ctx->pMem != pMe
33720 6d 20 29 7b 0a 20 20 20 20 70 43 74 78 2d 3e 70  m ){.    pCtx->p
33730 4d 65 6d 20 3d 20 70 4d 65 6d 3b 0a 20 20 20 20  Mem = pMem;.    
33740 66 6f 72 28 69 3d 70 43 74 78 2d 3e 61 72 67 63  for(i=pCtx->argc
33750 2d 31 3b 20 69 3e 3d 30 3b 20 69 2d 2d 29 20 70  -1; i>=0; i--) p
33760 43 74 78 2d 3e 61 72 67 76 5b 69 5d 20 3d 20 26  Ctx->argv[i] = &
33770 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 2b 69 5d 3b  aMem[pOp->p2+i];
33780 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c  .  }..#ifdef SQL
33790 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f 72 28  ITE_DEBUG.  for(
337a0 69 3d 30 3b 20 69 3c 70 43 74 78 2d 3e 61 72 67  i=0; i<pCtx->arg
337b0 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73  c; i++){.    ass
337c0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
337d0 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29 20 29  pCtx->argv[i]) )
337e0 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
337f0 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 69 2c 20  RACE(pOp->p2+i, 
33800 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29 3b 0a  pCtx->argv[i]);.
33810 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 70 4d    }.#endif..  pM
33820 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 73 71 6c 69 74  em->n++;.  sqlit
33830 65 33 56 64 62 65 4d 65 6d 49 6e 69 74 28 26 74  e3VdbeMemInit(&t
33840 2c 20 64 62 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  , db, MEM_Null);
33850 0a 20 20 70 43 74 78 2d 3e 70 4f 75 74 20 3d 20  .  pCtx->pOut = 
33860 26 74 3b 0a 20 20 70 43 74 78 2d 3e 66 45 72 72  &t;.  pCtx->fErr
33870 6f 72 4f 72 41 75 78 20 3d 20 30 3b 0a 20 20 70  orOrAux = 0;.  p
33880 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20 3d 20  Ctx->skipFlag = 
33890 30 3b 0a 20 20 28 70 43 74 78 2d 3e 70 46 75 6e  0;.  (pCtx->pFun
338a0 63 2d 3e 78 53 46 75 6e 63 29 28 70 43 74 78 2c  c->xSFunc)(pCtx,
338b0 70 43 74 78 2d 3e 61 72 67 63 2c 70 43 74 78 2d  pCtx->argc,pCtx-
338c0 3e 61 72 67 76 29 3b 20 2f 2a 20 49 4d 50 3a 20  >argv); /* IMP: 
338d0 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f  R-24505-23230 */
338e0 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 66 45 72  .  if( pCtx->fEr
338f0 72 6f 72 4f 72 41 75 78 20 29 7b 0a 20 20 20 20  rorOrAux ){.    
33900 69 66 28 20 70 43 74 78 2d 3e 69 73 45 72 72 6f  if( pCtx->isErro
33910 72 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  r ){.      sqlit
33920 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22  e3VdbeError(p, "
33930 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  %s", sqlite3_val
33940 75 65 5f 74 65 78 74 28 26 74 29 29 3b 0a 20 20  ue_text(&t));.  
33950 20 20 20 20 72 63 20 3d 20 70 43 74 78 2d 3e 69      rc = pCtx->i
33960 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  sError;.    }.  
33970 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
33980 52 65 6c 65 61 73 65 28 26 74 29 3b 0a 20 20 20  Release(&t);.   
33990 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
339a0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
339b0 72 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  r;.  }else{.    
339c0 61 73 73 65 72 74 28 20 74 2e 66 6c 61 67 73 3d  assert( t.flags=
339d0 3d 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 7d  =MEM_Null );.  }
339e0 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 73 6b 69  .  if( pCtx->ski
339f0 70 46 6c 61 67 20 29 7b 0a 20 20 20 20 61 73 73  pFlag ){.    ass
33a00 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63  ert( pOp[-1].opc
33a10 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20  ode==OP_CollSeq 
33a20 29 3b 0a 20 20 20 20 69 20 3d 20 70 4f 70 5b 2d  );.    i = pOp[-
33a30 31 5d 2e 70 31 3b 0a 20 20 20 20 69 66 28 20 69  1].p1;.    if( i
33a40 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   ) sqlite3VdbeMe
33a50 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b  mSetInt64(&aMem[
33a60 69 5d 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 62 72  i], 1);.  }.  br
33a70 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
33a80 65 3a 20 41 67 67 46 69 6e 61 6c 20 50 31 20 50  e: AggFinal P1 P
33a90 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
33aa0 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 31  psis: accum=r[P1
33ab0 5d 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20 45 78 65  ] N=P2.**.** Exe
33ac0 63 75 74 65 20 74 68 65 20 66 69 6e 61 6c 69 7a  cute the finaliz
33ad0 65 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20  er function for 
33ae0 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 50  an aggregate.  P
33af0 31 20 69 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f  1 is.** the memo
33b00 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74  ry location that
33b10 20 69 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61   is the accumula
33b20 74 6f 72 20 66 6f 72 20 74 68 65 20 61 67 67 72  tor for the aggr
33b30 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  egate..**.** P2 
33b40 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
33b50 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20   arguments that 
33b60 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f  the step functio
33b70 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50  n takes and.** P
33b80 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
33b90 6f 20 74 68 65 20 46 75 6e 63 44 65 66 20 66 6f  o the FuncDef fo
33ba0 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e  r this function.
33bb0 20 20 54 68 65 20 50 32 0a 2a 2a 20 61 72 67 75    The P2.** argu
33bc0 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75 73 65 64  ment is not used
33bd0 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e   by this opcode.
33be0 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 74 68 65    It is only the
33bf0 72 65 20 74 6f 20 64 69 73 61 6d 62 69 67 75 61  re to disambigua
33c00 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20  te.** functions 
33c10 74 68 61 74 20 63 61 6e 20 74 61 6b 65 20 76 61  that can take va
33c20 72 79 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66  rying numbers of
33c30 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 54 68 65   arguments.  The
33c40 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e 74 20  .** P4 argument 
33c50 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66  is only needed f
33c60 6f 72 20 74 68 65 20 64 65 67 65 6e 65 72 61 74  or the degenerat
33c70 65 20 63 61 73 65 20 77 68 65 72 65 0a 2a 2a 20  e case where.** 
33c80 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f  the step functio
33c90 6e 20 77 61 73 20 6e 6f 74 20 70 72 65 76 69 6f  n was not previo
33ca0 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a  usly called..*/.
33cb0 63 61 73 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c  case OP_AggFinal
33cc0 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b  : {.  Mem *pMem;
33cd0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
33ce0 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  p1>0 && pOp->p1<
33cf0 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
33d00 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
33d10 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
33d20 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
33d30 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 7e  (pMem->flags & ~
33d40 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67  (MEM_Null|MEM_Ag
33d50 67 29 29 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d  g))==0 );.  rc =
33d60 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46   sqlite3VdbeMemF
33d70 69 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c 20 70 4f  inalize(pMem, pO
33d80 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a 20 20  p->p4.pFunc);.  
33d90 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 73 71  if( rc ){.    sq
33da0 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
33db0 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f  , "%s", sqlite3_
33dc0 76 61 6c 75 65 5f 74 65 78 74 28 70 4d 65 6d 29  value_text(pMem)
33dd0 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  );.    goto abor
33de0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
33df0 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62    }.  sqlite3Vdb
33e00 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
33e10 70 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pMem, encoding);
33e20 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
33e30 4f 42 53 49 5a 45 28 70 4d 65 6d 29 3b 0a 20 20  OBSIZE(pMem);.  
33e40 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
33e50 65 6d 54 6f 6f 42 69 67 28 70 4d 65 6d 29 20 29  emTooBig(pMem) )
33e60 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
33e70 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ig;.  }.  break;
33e80 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
33e90 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f  TE_OMIT_WAL./* O
33ea0 70 63 6f 64 65 3a 20 43 68 65 63 6b 70 6f 69 6e  pcode: Checkpoin
33eb0 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
33ec0 2a 0a 2a 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20  *.** Checkpoint 
33ed0 64 61 74 61 62 61 73 65 20 50 31 2e 20 54 68 69  database P1. Thi
33ee0 73 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20  s is a no-op if 
33ef0 50 31 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e  P1 is not curren
33f00 74 6c 79 20 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f  tly in.** WAL mo
33f10 64 65 2e 20 50 61 72 61 6d 65 74 65 72 20 50 32  de. Parameter P2
33f20 20 69 73 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54   is one of SQLIT
33f30 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53  E_CHECKPOINT_PAS
33f40 53 49 56 45 2c 20 46 55 4c 4c 2c 0a 2a 2a 20 52  SIVE, FULL,.** R
33f50 45 53 54 41 52 54 2c 20 6f 72 20 54 52 55 4e 43  ESTART, or TRUNC
33f60 41 54 45 2e 20 20 57 72 69 74 65 20 31 20 6f 72  ATE.  Write 1 or
33f70 20 30 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 5d 20   0 into mem[P3] 
33f80 69 66 20 74 68 65 20 63 68 65 63 6b 70 6f 69 6e  if the checkpoin
33f90 74 20 72 65 74 75 72 6e 73 0a 2a 2a 20 53 51 4c  t returns.** SQL
33fa0 49 54 45 5f 42 55 53 59 20 6f 72 20 6e 6f 74 2c  ITE_BUSY or not,
33fb0 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20   respectively.  
33fc0 57 72 69 74 65 20 74 68 65 20 6e 75 6d 62 65 72  Write the number
33fd0 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65   of pages in the
33fe0 0a 2a 2a 20 57 41 4c 20 61 66 74 65 72 20 74 68  .** WAL after th
33ff0 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 69 6e 74  e checkpoint int
34000 6f 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 20  o mem[P3+1] and 
34010 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  the number of pa
34020 67 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 57 41  ges.** in the WA
34030 4c 20 74 68 61 74 20 68 61 76 65 20 62 65 65 6e  L that have been
34040 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20 61 66   checkpointed af
34050 74 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f 69  ter the checkpoi
34060 6e 74 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 73 20  nt.** completes 
34070 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 32 5d 2e 20  into mem[P3+2]. 
34080 20 48 6f 77 65 76 65 72 20 6f 6e 20 61 6e 20 65   However on an e
34090 72 72 6f 72 2c 20 6d 65 6d 5b 50 33 2b 31 5d 20  rror, mem[P3+1] 
340a0 61 6e 64 0a 2a 2a 20 6d 65 6d 5b 50 33 2b 32 5d  and.** mem[P3+2]
340b0 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64   are initialized
340c0 20 74 6f 20 2d 31 2e 0a 2a 2f 0a 63 61 73 65 20   to -1..*/.case 
340d0 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74 3a 20 7b  OP_Checkpoint: {
340e0 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20  .  int i;       
340f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34100 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
34110 65 72 20 2a 2f 0a 20 20 69 6e 74 20 61 52 65 73  er */.  int aRes
34120 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [3];            
34130 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c          /* Resul
34140 74 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  ts */.  Mem *pMe
34150 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
34160 20 20 20 20 20 20 20 20 2f 2a 20 57 72 69 74 65          /* Write
34170 20 72 65 73 75 6c 74 73 20 68 65 72 65 20 2a 2f   results here */
34180 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ..  assert( p->r
34190 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
341a0 61 52 65 73 5b 30 5d 20 3d 20 30 3b 0a 20 20 61  aRes[0] = 0;.  a
341b0 52 65 73 5b 31 5d 20 3d 20 61 52 65 73 5b 32 5d  Res[1] = aRes[2]
341c0 20 3d 20 2d 31 3b 0a 20 20 61 73 73 65 72 74 28   = -1;.  assert(
341d0 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
341e0 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53  _CHECKPOINT_PASS
341f0 49 56 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f  IVE.       || pO
34200 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48  p->p2==SQLITE_CH
34210 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 0a 20 20  ECKPOINT_FULL.  
34220 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d       || pOp->p2=
34230 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49  =SQLITE_CHECKPOI
34240 4e 54 5f 52 45 53 54 41 52 54 0a 20 20 20 20 20  NT_RESTART.     
34250 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51    || pOp->p2==SQ
34260 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f  LITE_CHECKPOINT_
34270 54 52 55 4e 43 41 54 45 0a 20 20 29 3b 0a 20 20  TRUNCATE.  );.  
34280 72 63 20 3d 20 73 71 6c 69 74 65 33 43 68 65 63  rc = sqlite3Chec
34290 6b 70 6f 69 6e 74 28 64 62 2c 20 70 4f 70 2d 3e  kpoint(db, pOp->
342a0 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 26 61 52  p1, pOp->p2, &aR
342b0 65 73 5b 31 5d 2c 20 26 61 52 65 73 5b 32 5d 29  es[1], &aRes[2])
342c0 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20  ;.  if( rc ){.  
342d0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
342e0 5f 42 55 53 59 20 29 20 67 6f 74 6f 20 61 62 6f  _BUSY ) goto abo
342f0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
34300 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
34310 5f 4f 4b 3b 0a 20 20 20 20 61 52 65 73 5b 30 5d  _OK;.    aRes[0]
34320 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 66 6f 72 28   = 1;.  }.  for(
34330 69 3d 30 2c 20 70 4d 65 6d 20 3d 20 26 61 4d 65  i=0, pMem = &aMe
34340 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 20 69 3c 33 3b  m[pOp->p3]; i<3;
34350 20 69 2b 2b 2c 20 70 4d 65 6d 2b 2b 29 7b 0a 20   i++, pMem++){. 
34360 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
34370 6d 53 65 74 49 6e 74 36 34 28 70 4d 65 6d 2c 20  mSetInt64(pMem, 
34380 28 69 36 34 29 61 52 65 73 5b 69 5d 29 3b 0a 20  (i64)aRes[i]);. 
34390 20 7d 20 20 20 20 0a 20 20 62 72 65 61 6b 3b 0a   }    .  break;.
343a0 7d 3b 20 20 0a 23 65 6e 64 69 66 0a 0a 23 69 66  };  .#endif..#if
343b0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
343c0 5f 50 52 41 47 4d 41 0a 2f 2a 20 4f 70 63 6f 64  _PRAGMA./* Opcod
343d0 65 3a 20 4a 6f 75 72 6e 61 6c 4d 6f 64 65 20 50  e: JournalMode P
343e0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
343f0 2a 20 43 68 61 6e 67 65 20 74 68 65 20 6a 6f 75  * Change the jou
34400 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 64 61 74  rnal mode of dat
34410 61 62 61 73 65 20 50 31 20 74 6f 20 50 33 2e 20  abase P1 to P3. 
34420 50 33 20 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f  P3 must be one o
34430 66 20 74 68 65 0a 2a 2a 20 50 41 47 45 52 5f 4a  f the.** PAGER_J
34440 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 76  OURNALMODE_XXX v
34450 61 6c 75 65 73 2e 20 49 66 20 63 68 61 6e 67 69  alues. If changi
34460 6e 67 20 62 65 74 77 65 65 6e 20 74 68 65 20 76  ng between the v
34470 61 72 69 6f 75 73 20 72 6f 6c 6c 62 61 63 6b 0a  arious rollback.
34480 2a 2a 20 6d 6f 64 65 73 20 28 64 65 6c 65 74 65  ** modes (delete
34490 2c 20 74 72 75 6e 63 61 74 65 2c 20 70 65 72 73  , truncate, pers
344a0 69 73 74 2c 20 6f 66 66 20 61 6e 64 20 6d 65 6d  ist, off and mem
344b0 6f 72 79 29 2c 20 74 68 69 73 20 69 73 20 61 20  ory), this is a 
344c0 73 69 6d 70 6c 65 0a 2a 2a 20 6f 70 65 72 61 74  simple.** operat
344d0 69 6f 6e 2e 20 4e 6f 20 49 4f 20 69 73 20 72 65  ion. No IO is re
344e0 71 75 69 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  quired..**.** If
344f0 20 63 68 61 6e 67 69 6e 67 20 69 6e 74 6f 20 6f   changing into o
34500 72 20 6f 75 74 20 6f 66 20 57 41 4c 20 6d 6f 64  r out of WAL mod
34510 65 20 74 68 65 20 70 72 6f 63 65 64 75 72 65 20  e the procedure 
34520 69 73 20 6d 6f 72 65 20 63 6f 6d 70 6c 69 63 61  is more complica
34530 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  ted..**.** Write
34540 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69   a string contai
34550 6e 69 6e 67 20 74 68 65 20 66 69 6e 61 6c 20 6a  ning the final j
34560 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 74 6f 20 72  ournal-mode to r
34570 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
34580 61 73 65 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f  ase OP_JournalMo
34590 64 65 3a 20 7b 20 20 20 20 2f 2a 20 6f 75 74 32  de: {    /* out2
345a0 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74   */.  Btree *pBt
345b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
345c0 20 20 20 20 20 20 2f 2a 20 42 74 72 65 65 20 74        /* Btree t
345d0 6f 20 63 68 61 6e 67 65 20 6a 6f 75 72 6e 61 6c  o change journal
345e0 20 6d 6f 64 65 20 6f 66 20 2a 2f 0a 20 20 50 61   mode of */.  Pa
345f0 67 65 72 20 2a 70 50 61 67 65 72 3b 20 20 20 20  ger *pPager;    
34600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
34610 20 50 61 67 65 72 20 61 73 73 6f 63 69 61 74 65   Pager associate
34620 64 20 77 69 74 68 20 70 42 74 20 2a 2f 0a 20 20  d with pBt */.  
34630 69 6e 74 20 65 4e 65 77 3b 20 20 20 20 20 20 20  int eNew;       
34640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34650 2f 2a 20 4e 65 77 20 6a 6f 75 72 6e 61 6c 20 6d  /* New journal m
34660 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 65 4f 6c  ode */.  int eOl
34670 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
34680 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
34690 6f 6c 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65  old journal mode
346a0 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
346b0 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 63 6f  TE_OMIT_WAL.  co
346c0 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e  nst char *zFilen
346d0 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ame;          /*
346e0 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73   Name of databas
346f0 65 20 66 69 6c 65 20 66 6f 72 20 70 50 61 67 65  e file for pPage
34700 72 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20 20 70  r */.#endif..  p
34710 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
34720 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
34730 65 4e 65 77 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  eNew = pOp->p3;.
34740 20 20 61 73 73 65 72 74 28 20 65 4e 65 77 3d 3d    assert( eNew==
34750 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
34760 45 5f 44 45 4c 45 54 45 20 0a 20 20 20 20 20 20  E_DELETE .      
34770 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
34780 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e  JOURNALMODE_TRUN
34790 43 41 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20  CATE .       || 
347a0 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
347b0 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54 20  NALMODE_PERSIST 
347c0 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
347d0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
347e0 44 45 5f 4f 46 46 0a 20 20 20 20 20 20 20 7c 7c  DE_OFF.       ||
347f0 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
34800 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 0a  RNALMODE_MEMORY.
34810 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
34820 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
34830 45 5f 57 41 4c 0a 20 20 20 20 20 20 20 7c 7c 20  E_WAL.       || 
34840 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
34850 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 0a 20 20  NALMODE_QUERY.  
34860 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
34870 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
34880 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
34890 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
348a0 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 70 42 74  nly==0 );..  pBt
348b0 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
348c0 70 31 5d 2e 70 42 74 3b 0a 20 20 70 50 61 67 65  p1].pBt;.  pPage
348d0 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  r = sqlite3Btree
348e0 50 61 67 65 72 28 70 42 74 29 3b 0a 20 20 65 4f  Pager(pBt);.  eO
348f0 6c 64 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  ld = sqlite3Page
34900 72 47 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28  rGetJournalMode(
34910 70 50 61 67 65 72 29 3b 0a 20 20 69 66 28 20 65  pPager);.  if( e
34920 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
34930 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20 29 20 65  ALMODE_QUERY ) e
34940 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 69 66  New = eOld;.  if
34950 28 20 21 73 71 6c 69 74 65 33 50 61 67 65 72 4f  ( !sqlite3PagerO
34960 6b 54 6f 43 68 61 6e 67 65 4a 6f 75 72 6e 61 6c  kToChangeJournal
34970 4d 6f 64 65 28 70 50 61 67 65 72 29 20 29 20 65  Mode(pPager) ) e
34980 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 0a 23 69 66  New = eOld;..#if
34990 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
349a0 5f 57 41 4c 0a 20 20 7a 46 69 6c 65 6e 61 6d 65  _WAL.  zFilename
349b0 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 46   = sqlite3PagerF
349c0 69 6c 65 6e 61 6d 65 28 70 50 61 67 65 72 2c 20  ilename(pPager, 
349d0 31 29 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74  1);..  /* Do not
349e0 20 61 6c 6c 6f 77 20 61 20 74 72 61 6e 73 69 74   allow a transit
349f0 69 6f 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f 6d  ion to journal_m
34a00 6f 64 65 3d 57 41 4c 20 66 6f 72 20 61 20 64 61  ode=WAL for a da
34a10 74 61 62 61 73 65 0a 20 20 2a 2a 20 69 6e 20 74  tabase.  ** in t
34a20 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61 67 65  emporary storage
34a30 20 6f 72 20 69 66 20 74 68 65 20 56 46 53 20 64   or if the VFS d
34a40 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20  oes not support 
34a50 73 68 61 72 65 64 20 6d 65 6d 6f 72 79 20 0a 20  shared memory . 
34a60 20 2a 2f 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d   */.  if( eNew==
34a70 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
34a80 45 5f 57 41 4c 0a 20 20 20 26 26 20 28 73 71 6c  E_WAL.   && (sql
34a90 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 46 69  ite3Strlen30(zFi
34aa0 6c 65 6e 61 6d 65 29 3d 3d 30 20 20 20 20 20 20  lename)==0      
34ab0 20 20 20 20 20 2f 2a 20 54 65 6d 70 20 66 69 6c       /* Temp fil
34ac0 65 20 2a 2f 0a 20 20 20 20 20 20 20 7c 7c 20 21  e */.       || !
34ad0 73 71 6c 69 74 65 33 50 61 67 65 72 57 61 6c 53  sqlite3PagerWalS
34ae0 75 70 70 6f 72 74 65 64 28 70 50 61 67 65 72 29  upported(pPager)
34af0 29 20 20 20 2f 2a 20 4e 6f 20 73 68 61 72 65 64  )   /* No shared
34b00 2d 6d 65 6d 6f 72 79 20 73 75 70 70 6f 72 74 20  -memory support 
34b10 2a 2f 0a 20 20 29 7b 0a 20 20 20 20 65 4e 65 77  */.  ){.    eNew
34b20 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a 20 20   = eOld;.  }..  
34b30 69 66 28 20 28 65 4e 65 77 21 3d 65 4f 6c 64 29  if( (eNew!=eOld)
34b40 0a 20 20 20 26 26 20 28 65 4f 6c 64 3d 3d 50 41  .   && (eOld==PA
34b50 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
34b60 57 41 4c 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47  WAL || eNew==PAG
34b70 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
34b80 41 4c 29 0a 20 20 29 7b 0a 20 20 20 20 69 66 28  AL).  ){.    if(
34b90 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74   !db->autoCommit
34ba0 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65 61   || db->nVdbeRea
34bb0 64 3e 31 20 29 7b 0a 20 20 20 20 20 20 72 63 20  d>1 ){.      rc 
34bc0 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
34bd0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
34be0 65 45 72 72 6f 72 28 70 2c 0a 20 20 20 20 20 20  eError(p,.      
34bf0 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 68 61 6e      "cannot chan
34c00 67 65 20 25 73 20 77 61 6c 20 6d 6f 64 65 20 66  ge %s wal mode f
34c10 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74 72 61  rom within a tra
34c20 6e 73 61 63 74 69 6f 6e 22 2c 0a 20 20 20 20 20  nsaction",.     
34c30 20 20 20 20 20 28 65 4e 65 77 3d 3d 50 41 47 45       (eNew==PAGE
34c40 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
34c50 4c 20 3f 20 22 69 6e 74 6f 22 20 3a 20 22 6f 75  L ? "into" : "ou
34c60 74 20 6f 66 22 29 0a 20 20 20 20 20 20 29 3b 0a  t of").      );.
34c70 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
34c80 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
34c90 20 20 20 7d 65 6c 73 65 7b 0a 20 0a 20 20 20 20     }else{. .    
34ca0 20 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45    if( eOld==PAGE
34cb0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
34cc0 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  L ){.        /* 
34cd0 49 66 20 6c 65 61 76 69 6e 67 20 57 41 4c 20 6d  If leaving WAL m
34ce0 6f 64 65 2c 20 63 6c 6f 73 65 20 74 68 65 20 6c  ode, close the l
34cf0 6f 67 20 66 69 6c 65 2e 20 49 66 20 73 75 63 63  og file. If succ
34d00 65 73 73 66 75 6c 2c 20 74 68 65 20 63 61 6c 6c  essful, the call
34d10 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 6f 20 50  .        ** to P
34d20 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 29 20 63  agerCloseWal() c
34d30 68 65 63 6b 70 6f 69 6e 74 73 20 61 6e 64 20 64  heckpoints and d
34d40 65 6c 65 74 65 73 20 74 68 65 20 77 72 69 74 65  eletes the write
34d50 2d 61 68 65 61 64 2d 6c 6f 67 20 0a 20 20 20 20  -ahead-log .    
34d60 20 20 20 20 2a 2a 20 66 69 6c 65 2e 20 41 6e 20      ** file. An 
34d70 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 6d  EXCLUSIVE lock m
34d80 61 79 20 73 74 69 6c 6c 20 62 65 20 68 65 6c 64  ay still be held
34d90 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
34da0 20 66 69 6c 65 20 0a 20 20 20 20 20 20 20 20 2a   file .        *
34db0 2a 20 61 66 74 65 72 20 61 20 73 75 63 63 65 73  * after a succes
34dc0 73 66 75 6c 20 72 65 74 75 72 6e 2e 20 0a 20 20  sful return. .  
34dd0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20        */.       
34de0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 50 61 67   rc = sqlite3Pag
34df0 65 72 43 6c 6f 73 65 57 61 6c 28 70 50 61 67 65  erCloseWal(pPage
34e00 72 2c 20 64 62 29 3b 0a 20 20 20 20 20 20 20 20  r, db);.        
34e10 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
34e20 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  K ){.          s
34e30 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f  qlite3PagerSetJo
34e40 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72  urnalMode(pPager
34e50 2c 20 65 4e 65 77 29 3b 0a 20 20 20 20 20 20 20  , eNew);.       
34e60 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69   }.      }else i
34e70 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a  f( eOld==PAGER_J
34e80 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52  OURNALMODE_MEMOR
34e90 59 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  Y ){.        /* 
34ea0 43 61 6e 6e 6f 74 20 74 72 61 6e 73 69 74 69 6f  Cannot transitio
34eb0 6e 20 64 69 72 65 63 74 6c 79 20 66 72 6f 6d 20  n directly from 
34ec0 4d 45 4d 4f 52 59 20 74 6f 20 57 41 4c 2e 20 20  MEMORY to WAL.  
34ed0 55 73 65 20 6d 6f 64 65 20 4f 46 46 0a 20 20 20  Use mode OFF.   
34ee0 20 20 20 20 20 2a 2a 20 61 73 20 61 6e 20 69 6e       ** as an in
34ef0 74 65 72 6d 65 64 69 61 74 65 20 2a 2f 0a 20 20  termediate */.  
34f00 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 67        sqlite3Pag
34f10 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65  erSetJournalMode
34f20 28 70 50 61 67 65 72 2c 20 50 41 47 45 52 5f 4a  (pPager, PAGER_J
34f30 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b  OURNALMODE_OFF);
34f40 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20  .      }.  .    
34f50 20 20 2f 2a 20 4f 70 65 6e 20 61 20 74 72 61 6e    /* Open a tran
34f60 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20 64  saction on the d
34f70 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 52 65  atabase file. Re
34f80 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20  gardless of the 
34f90 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a  journal.      **
34fa0 20 6d 6f 64 65 2c 20 74 68 69 73 20 74 72 61 6e   mode, this tran
34fb0 73 61 63 74 69 6f 6e 20 61 6c 77 61 79 73 20 75  saction always u
34fc0 73 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a  ses a rollback j
34fd0 6f 75 72 6e 61 6c 2e 0a 20 20 20 20 20 20 2a 2f  ournal..      */
34fe0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
34ff0 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e 54  qlite3BtreeIsInT
35000 72 61 6e 73 28 70 42 74 29 3d 3d 30 20 29 3b 0a  rans(pBt)==0 );.
35010 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
35020 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
35030 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
35040 74 72 65 65 53 65 74 56 65 72 73 69 6f 6e 28 70  treeSetVersion(p
35050 42 74 2c 20 28 65 4e 65 77 3d 3d 50 41 47 45 52  Bt, (eNew==PAGER
35060 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
35070 20 3f 20 32 20 3a 20 31 29 29 3b 0a 20 20 20 20   ? 2 : 1));.    
35080 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65    }.    }.  }.#e
35090 6e 64 69 66 20 2f 2a 20 69 66 6e 64 65 66 20 53  ndif /* ifndef S
350a0 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a  QLITE_OMIT_WAL *
350b0 2f 0a 0a 20 20 69 66 28 20 72 63 20 29 20 65 4e  /..  if( rc ) eN
350c0 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 65 4e 65  ew = eOld;.  eNe
350d0 77 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  w = sqlite3Pager
350e0 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  SetJournalMode(p
350f0 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 0a 20  Pager, eNew);.. 
35100 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
35110 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69  EM_Str|MEM_Stati
35120 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f  c|MEM_Term;.  pO
35130 75 74 2d 3e 7a 20 3d 20 28 63 68 61 72 20 2a 29  ut->z = (char *)
35140 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f  sqlite3JournalMo
35150 64 65 6e 61 6d 65 28 65 4e 65 77 29 3b 0a 20 20  dename(eNew);.  
35160 70 4f 75 74 2d 3e 6e 20 3d 20 73 71 6c 69 74 65  pOut->n = sqlite
35170 33 53 74 72 6c 65 6e 33 30 28 70 4f 75 74 2d 3e  3Strlen30(pOut->
35180 7a 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20  z);.  pOut->enc 
35190 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 0a 20  = SQLITE_UTF8;. 
351a0 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
351b0 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c  geEncoding(pOut,
351c0 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66   encoding);.  if
351d0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
351e0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
351f0 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 23 65 6e 64    break;.};.#end
35200 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
35210 54 5f 50 52 41 47 4d 41 20 2a 2f 0a 0a 23 69 66  T_PRAGMA */..#if
35220 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
35230 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 29 20 26 26  _OMIT_VACUUM) &&
35240 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
35250 5f 4f 4d 49 54 5f 41 54 54 41 43 48 29 0a 2f 2a  _OMIT_ATTACH)./*
35260 20 4f 70 63 6f 64 65 3a 20 56 61 63 75 75 6d 20   Opcode: Vacuum 
35270 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
35280 20 56 61 63 75 75 6d 20 74 68 65 20 65 6e 74 69   Vacuum the enti
35290 72 65 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  re database P1. 
352a0 20 50 31 20 69 73 20 30 20 66 6f 72 20 22 6d 61   P1 is 0 for "ma
352b0 69 6e 22 2c 20 61 6e 64 20 32 20 6f 72 20 6d 6f  in", and 2 or mo
352c0 72 65 0a 2a 2a 20 66 6f 72 20 61 6e 20 61 74 74  re.** for an att
352d0 61 63 68 65 64 20 64 61 74 61 62 61 73 65 2e 20  ached database. 
352e0 20 54 68 65 20 22 74 65 6d 70 22 20 64 61 74 61   The "temp" data
352f0 62 61 73 65 20 6d 61 79 20 6e 6f 74 20 62 65 20  base may not be 
35300 76 61 63 75 75 6d 65 64 2e 0a 2a 2f 0a 63 61 73  vacuumed..*/.cas
35310 65 20 4f 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20  e OP_Vacuum: {. 
35320 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
35330 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 72 63 20  Only==0 );.  rc 
35340 3d 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75  = sqlite3RunVacu
35350 75 6d 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  um(&p->zErrMsg, 
35360 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20  db, pOp->p1);.  
35370 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
35380 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
35390 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
353a0 64 69 66 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  dif..#if !define
353b0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  d(SQLITE_OMIT_AU
353c0 54 4f 56 41 43 55 55 4d 29 0a 2f 2a 20 4f 70 63  TOVACUUM)./* Opc
353d0 6f 64 65 3a 20 49 6e 63 72 56 61 63 75 75 6d 20  ode: IncrVacuum 
353e0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
353f0 2a 20 50 65 72 66 6f 72 6d 20 61 20 73 69 6e 67  * Perform a sing
35400 6c 65 20 73 74 65 70 20 6f 66 20 74 68 65 20 69  le step of the i
35410 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63 75 75  ncremental vacuu
35420 6d 20 70 72 6f 63 65 64 75 72 65 20 6f 6e 0a 2a  m procedure on.*
35430 2a 20 74 68 65 20 50 31 20 64 61 74 61 62 61 73  * the P1 databas
35440 65 2e 20 49 66 20 74 68 65 20 76 61 63 75 75 6d  e. If the vacuum
35450 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20 6a   has finished, j
35460 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
35470 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68 65 72 77  on.** P2. Otherw
35480 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  ise, fall throug
35490 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
354a0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
354b0 73 65 20 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d  se OP_IncrVacuum
354c0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
354d0 6d 70 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70  mp */.  Btree *p
354e0 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Bt;..  assert( p
354f0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
35500 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
35510 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
35520 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
35530 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20  k, pOp->p1) );. 
35540 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
35550 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 42 74  Only==0 );.  pBt
35560 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
35570 70 31 5d 2e 70 42 74 3b 0a 20 20 72 63 20 3d 20  p1].pBt;.  rc = 
35580 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 63 72  sqlite3BtreeIncr
35590 56 61 63 75 75 6d 28 70 42 74 29 3b 0a 20 20 56  Vacuum(pBt);.  V
355a0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
355b0 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 2c 32  c==SQLITE_DONE,2
355c0 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20  );.  if( rc ){. 
355d0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
355e0 45 5f 44 4f 4e 45 20 29 20 67 6f 74 6f 20 61 62  E_DONE ) goto ab
355f0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
35600 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
35610 45 5f 4f 4b 3b 0a 20 20 20 20 67 6f 74 6f 20 6a  E_OK;.    goto j
35620 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
35630 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
35640 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 78 70  ../* Opcode: Exp
35650 69 72 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ire P1 * * * *.*
35660 2a 0a 2a 2a 20 43 61 75 73 65 20 70 72 65 63 6f  *.** Cause preco
35670 6d 70 69 6c 65 64 20 73 74 61 74 65 6d 65 6e 74  mpiled statement
35680 73 20 74 6f 20 65 78 70 69 72 65 2e 20 20 57 68  s to expire.  Wh
35690 65 6e 20 61 6e 20 65 78 70 69 72 65 64 20 73 74  en an expired st
356a0 61 74 65 6d 65 6e 74 0a 2a 2a 20 69 73 20 65 78  atement.** is ex
356b0 65 63 75 74 65 64 20 75 73 69 6e 67 20 73 71 6c  ecuted using sql
356c0 69 74 65 33 5f 73 74 65 70 28 29 20 69 74 20 77  ite3_step() it w
356d0 69 6c 6c 20 65 69 74 68 65 72 20 61 75 74 6f 6d  ill either autom
356e0 61 74 69 63 61 6c 6c 79 0a 2a 2a 20 72 65 70 72  atically.** repr
356f0 65 70 61 72 65 20 69 74 73 65 6c 66 20 28 69 66  epare itself (if
35700 20 69 74 20 77 61 73 20 6f 72 69 67 69 6e 61 6c   it was original
35710 6c 79 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  ly created using
35720 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
35730 5f 76 32 28 29 29 0a 2a 2a 20 6f 72 20 69 74 20  _v2()).** or it 
35740 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 53  will fail with S
35750 51 4c 49 54 45 5f 53 43 48 45 4d 41 2e 0a 2a 2a  QLITE_SCHEMA..**
35760 20 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 30 2c   .** If P1 is 0,
35770 20 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74   then all SQL st
35780 61 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20  atements become 
35790 65 78 70 69 72 65 64 2e 20 49 66 20 50 31 20 69  expired. If P1 i
357a0 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74  s non-zero,.** t
357b0 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75 72  hen only the cur
357c0 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67  rently executing
357d0 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 65 78   statement is ex
357e0 70 69 72 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  pired..*/.case O
357f0 50 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20 69 66  P_Expire: {.  if
35800 28 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  ( !pOp->p1 ){.  
35810 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50    sqlite3ExpireP
35820 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
35830 73 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  s(db);.  }else{.
35840 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d      p->expired =
35850 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
35860 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
35870 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
35880 41 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ACHE./* Opcode: 
35890 54 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32 20  TableLock P1 P2 
358a0 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
358b0 73 69 73 3a 20 69 44 62 3d 50 31 20 72 6f 6f 74  sis: iDb=P1 root
358c0 3d 50 32 20 77 72 69 74 65 3d 50 33 0a 2a 2a 0a  =P2 write=P3.**.
358d0 2a 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63 6b  ** Obtain a lock
358e0 20 6f 6e 20 61 20 70 61 72 74 69 63 75 6c 61 72   on a particular
358f0 20 74 61 62 6c 65 2e 20 54 68 69 73 20 69 6e 73   table. This ins
35900 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79  truction is only
35910 20 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74 68   used when.** th
35920 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 66  e shared-cache f
35930 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65  eature is enable
35940 64 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  d. .**.** P1 is 
35950 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  the index of the
35960 20 64 61 74 61 62 61 73 65 20 69 6e 20 73 71 6c   database in sql
35970 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74 68  ite3.aDb[] of th
35980 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f 6e  e database.** on
35990 20 77 68 69 63 68 20 74 68 65 20 6c 6f 63 6b 20   which the lock 
359a0 69 73 20 61 63 71 75 69 72 65 64 2e 20 20 41 20  is acquired.  A 
359b0 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74 61  readlock is obta
359c0 69 6e 65 64 20 69 66 20 50 33 3d 3d 30 20 6f 72  ined if P3==0 or
359d0 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f 63 6b  .** a write lock
359e0 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a   if P3==1..**.**
359f0 20 50 32 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P2 contains the
35a00 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68   root-page of th
35a10 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e  e table to lock.
35a20 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61 69  .**.** P4 contai
35a30 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ns a pointer to 
35a40 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
35a50 74 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63 6b  table being lock
35a60 65 64 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79  ed. This is only
35a70 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67 65 6e 65  .** used to gene
35a80 72 61 74 65 20 61 6e 20 65 72 72 6f 72 20 6d 65  rate an error me
35a90 73 73 61 67 65 20 69 66 20 74 68 65 20 6c 6f 63  ssage if the loc
35aa0 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61  k cannot be obta
35ab0 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ined..*/.case OP
35ac0 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20  _TableLock: {.  
35ad0 75 38 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 3d  u8 isWriteLock =
35ae0 20 28 75 38 29 70 4f 70 2d 3e 70 33 3b 0a 20 20   (u8)pOp->p3;.  
35af0 69 66 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 20  if( isWriteLock 
35b00 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c 61 67 73  || 0==(db->flags
35b10 26 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f  &SQLITE_ReadUnco
35b20 6d 6d 69 74 29 20 29 7b 0a 20 20 20 20 69 6e 74  mmit) ){.    int
35b30 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a   p1 = pOp->p1; .
35b40 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 3d      assert( p1>=
35b50 30 20 26 26 20 70 31 3c 64 62 2d 3e 6e 44 62 20  0 && p1<db->nDb 
35b60 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 44  );.    assert( D
35b70 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
35b80 65 65 4d 61 73 6b 2c 20 70 31 29 20 29 3b 0a 20  eeMask, p1) );. 
35b90 20 20 20 61 73 73 65 72 74 28 20 69 73 57 72 69     assert( isWri
35ba0 74 65 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73 57  teLock==0 || isW
35bb0 72 69 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20  riteLock==1 );. 
35bc0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
35bd0 74 72 65 65 4c 6f 63 6b 54 61 62 6c 65 28 64 62  treeLockTable(db
35be0 2d 3e 61 44 62 5b 70 31 5d 2e 70 42 74 2c 20 70  ->aDb[p1].pBt, p
35bf0 4f 70 2d 3e 70 32 2c 20 69 73 57 72 69 74 65 4c  Op->p2, isWriteL
35c00 6f 63 6b 29 3b 0a 20 20 20 20 69 66 28 20 72 63  ock);.    if( rc
35c10 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 72   ){.      if( (r
35c20 63 26 30 78 46 46 29 3d 3d 53 51 4c 49 54 45 5f  c&0xFF)==SQLITE_
35c30 4c 4f 43 4b 45 44 20 29 7b 0a 20 20 20 20 20 20  LOCKED ){.      
35c40 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20    const char *z 
35c50 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20  = pOp->p4.z;.   
35c60 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
35c70 45 72 72 6f 72 28 70 2c 20 22 64 61 74 61 62 61  Error(p, "databa
35c80 73 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b  se table is lock
35c90 65 64 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20 20  ed: %s", z);.   
35ca0 20 20 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20     }.      goto 
35cb0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
35cc0 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  or;.    }.  }.  
35cd0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
35ce0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  /* SQLITE_OMIT_S
35cf0 48 41 52 45 44 5f 43 41 43 48 45 20 2a 2f 0a 0a  HARED_CACHE */..
35d00 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
35d10 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
35d20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 42 65 67  ./* Opcode: VBeg
35d30 69 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  in * * * P4 *.**
35d40 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20  .** P4 may be a 
35d50 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71  pointer to an sq
35d60 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63  lite3_vtab struc
35d70 74 75 72 65 2e 20 49 66 20 73 6f 2c 20 63 61 6c  ture. If so, cal
35d80 6c 20 74 68 65 20 0a 2a 2a 20 78 42 65 67 69 6e  l the .** xBegin
35d90 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 61 74   method for that
35da0 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c   table..**.** Al
35db0 73 6f 2c 20 77 68 65 74 68 65 72 20 6f 72 20 6e  so, whether or n
35dc0 6f 74 20 50 34 20 69 73 20 73 65 74 2c 20 63 68  ot P4 is set, ch
35dd0 65 63 6b 20 74 68 61 74 20 74 68 69 73 20 69 73  eck that this is
35de0 20 6e 6f 74 20 62 65 69 6e 67 20 63 61 6c 6c 65   not being calle
35df0 64 20 66 72 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e  d from.** within
35e00 20 61 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20 61   a callback to a
35e10 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 78   virtual table x
35e20 53 79 6e 63 28 29 20 6d 65 74 68 6f 64 2e 20 49  Sync() method. I
35e30 66 20 69 74 20 69 73 2c 20 74 68 65 20 65 72 72  f it is, the err
35e40 6f 72 0a 2a 2a 20 63 6f 64 65 20 77 69 6c 6c 20  or.** code will 
35e50 62 65 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45  be set to SQLITE
35e60 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65  _LOCKED..*/.case
35e70 20 4f 50 5f 56 42 65 67 69 6e 3a 20 7b 0a 20 20   OP_VBegin: {.  
35e80 56 54 61 62 6c 65 20 2a 70 56 54 61 62 3b 0a 20  VTable *pVTab;. 
35e90 20 70 56 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34   pVTab = pOp->p4
35ea0 2e 70 56 74 61 62 3b 0a 20 20 72 63 20 3d 20 73  .pVtab;.  rc = s
35eb0 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28  qlite3VtabBegin(
35ec0 64 62 2c 20 70 56 54 61 62 29 3b 0a 20 20 69 66  db, pVTab);.  if
35ed0 28 20 70 56 54 61 62 20 29 20 73 71 6c 69 74 65  ( pVTab ) sqlite
35ee0 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
35ef0 67 28 70 2c 20 70 56 54 61 62 2d 3e 70 56 74 61  g(p, pVTab->pVta
35f00 62 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  b);.  if( rc ) g
35f10 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
35f20 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
35f30 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
35f40 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
35f50 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
35f60 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
35f70 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
35f80 63 6f 64 65 3a 20 56 43 72 65 61 74 65 20 50 31  code: VCreate P1
35f90 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
35fa0 50 32 20 69 73 20 61 20 72 65 67 69 73 74 65 72  P2 is a register
35fb0 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20   that holds the 
35fc0 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61  name of a virtua
35fd0 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62  l table in datab
35fe0 61 73 65 20 0a 2a 2a 20 50 31 2e 20 43 61 6c 6c  ase .** P1. Call
35ff0 20 74 68 65 20 78 43 72 65 61 74 65 20 6d 65 74   the xCreate met
36000 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74 61 62  hod for that tab
36010 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  le..*/.case OP_V
36020 43 72 65 61 74 65 3a 20 7b 0a 20 20 4d 65 6d 20  Create: {.  Mem 
36030 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f  sMem;          /
36040 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68  * For storing th
36050 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64  e record being d
36060 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73  ecoded */.  cons
36070 74 20 63 68 61 72 20 2a 7a 54 61 62 3b 20 20 2f  t char *zTab;  /
36080 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 76 69  * Name of the vi
36090 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a  rtual table */..
360a0 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20    memset(&sMem, 
360b0 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29  0, sizeof(sMem))
360c0 3b 0a 20 20 73 4d 65 6d 2e 64 62 20 3d 20 64 62  ;.  sMem.db = db
360d0 3b 0a 20 20 2f 2a 20 42 65 63 61 75 73 65 20 50  ;.  /* Because P
360e0 32 20 69 73 20 61 6c 77 61 79 73 20 61 20 73 74  2 is always a st
360f0 61 74 69 63 20 73 74 72 69 6e 67 2c 20 69 74 20  atic string, it 
36100 69 73 20 69 6d 70 6f 73 73 69 62 6c 65 20 66 6f  is impossible fo
36110 72 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74  r the.  ** sqlit
36120 65 33 56 64 62 65 4d 65 6d 43 6f 70 79 28 29 20  e3VdbeMemCopy() 
36130 74 6f 20 66 61 69 6c 20 2a 2f 0a 20 20 61 73 73  to fail */.  ass
36140 65 72 74 28 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e  ert( (aMem[pOp->
36150 70 32 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  p2].flags & MEM_
36160 53 74 72 29 21 3d 30 20 29 3b 0a 20 20 61 73 73  Str)!=0 );.  ass
36170 65 72 74 28 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e  ert( (aMem[pOp->
36180 70 32 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  p2].flags & MEM_
36190 53 74 61 74 69 63 29 21 3d 30 20 29 3b 0a 20 20  Static)!=0 );.  
361a0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
361b0 4d 65 6d 43 6f 70 79 28 26 73 4d 65 6d 2c 20 26  MemCopy(&sMem, &
361c0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a  aMem[pOp->p2]);.
361d0 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
361e0 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 7a 54 61  LITE_OK );.  zTa
361f0 62 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a  b = (const char*
36200 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  )sqlite3_value_t
36210 65 78 74 28 26 73 4d 65 6d 29 3b 0a 20 20 61 73  ext(&sMem);.  as
36220 73 65 72 74 28 20 7a 54 61 62 20 7c 7c 20 64 62  sert( zTab || db
36230 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
36240 3b 0a 20 20 69 66 28 20 7a 54 61 62 20 29 7b 0a  ;.  if( zTab ){.
36250 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
36260 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 64  VtabCallCreate(d
36270 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 7a 54 61 62  b, pOp->p1, zTab
36280 2c 20 26 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  , &p->zErrMsg);.
36290 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62    }.  sqlite3Vdb
362a0 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65  eMemRelease(&sMe
362b0 6d 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  m);.  if( rc ) g
362c0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
362d0 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
362e0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
362f0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
36300 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
36310 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
36320 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
36330 63 6f 64 65 3a 20 56 44 65 73 74 72 6f 79 20 50  code: VDestroy P
36340 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
36350 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d 65 20   P4 is the name 
36360 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  of a virtual tab
36370 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  le in database P
36380 31 2e 20 20 43 61 6c 6c 20 74 68 65 20 78 44 65  1.  Call the xDe
36390 73 74 72 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a 20  stroy method.** 
363a0 6f 66 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a  of that table..*
363b0 2f 0a 63 61 73 65 20 4f 50 5f 56 44 65 73 74 72  /.case OP_VDestr
363c0 6f 79 3a 20 7b 0a 20 20 64 62 2d 3e 6e 56 44 65  oy: {.  db->nVDe
363d0 73 74 72 6f 79 2b 2b 3b 0a 20 20 72 63 20 3d 20  stroy++;.  rc = 
363e0 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44  sqlite3VtabCallD
363f0 65 73 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e  estroy(db, pOp->
36400 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
36410 20 20 64 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2d    db->nVDestroy-
36420 2d 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  -;.  if( rc ) go
36430 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
36440 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a  error;.  break;.
36450 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
36460 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
36470 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
36480 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
36490 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
364a0 6f 64 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a 20  ode: VOpen P1 * 
364b0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
364c0 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
364d0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
364e0 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74  object, an sqlit
364f0 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
36500 65 2e 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75  e..** P1 is a cu
36510 72 73 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54 68  rsor number.  Th
36520 69 73 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73 20  is opcode opens 
36530 61 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20  a cursor to the 
36540 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65  virtual.** table
36550 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61 74   and stores that
36560 20 63 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a 2a   cursor in P1..*
36570 2f 0a 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e 3a  /.case OP_VOpen:
36580 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
36590 2a 70 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33  *pCur;.  sqlite3
365a0 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56  _vtab_cursor *pV
365b0 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  Cur;.  sqlite3_v
365c0 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
365d0 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
365e0 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20  le *pModule;..  
365f0 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
36600 61 64 65 72 20 29 3b 0a 20 20 70 43 75 72 20 3d  ader );.  pCur =
36610 20 30 3b 0a 20 20 70 56 43 75 72 20 3d 20 30 3b   0;.  pVCur = 0;
36620 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e  .  pVtab = pOp->
36630 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b  p4.pVtab->pVtab;
36640 0a 20 20 69 66 28 20 70 56 74 61 62 3d 3d 30 20  .  if( pVtab==0 
36650 7c 7c 20 4e 45 56 45 52 28 70 56 74 61 62 2d 3e  || NEVER(pVtab->
36660 70 4d 6f 64 75 6c 65 3d 3d 30 29 20 29 7b 0a 20  pModule==0) ){. 
36670 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c     rc = SQLITE_L
36680 4f 43 4b 45 44 3b 0a 20 20 20 20 67 6f 74 6f 20  OCKED;.    goto 
36690 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
366a0 6f 72 3b 0a 20 20 7d 0a 20 20 70 4d 6f 64 75 6c  or;.  }.  pModul
366b0 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
366c0 6c 65 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75  le;.  rc = pModu
366d0 6c 65 2d 3e 78 4f 70 65 6e 28 70 56 74 61 62 2c  le->xOpen(pVtab,
366e0 20 26 70 56 43 75 72 29 3b 0a 20 20 73 71 6c 69   &pVCur);.  sqli
366f0 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
36700 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  msg(p, pVtab);. 
36710 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
36720 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
36730 72 3b 0a 0a 20 20 2f 2a 20 49 6e 69 74 69 61 6c  r;..  /* Initial
36740 69 7a 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ize sqlite3_vtab
36750 5f 63 75 72 73 6f 72 20 62 61 73 65 20 63 6c 61  _cursor base cla
36760 73 73 20 2a 2f 0a 20 20 70 56 43 75 72 2d 3e 70  ss */.  pVCur->p
36770 56 74 61 62 20 3d 20 70 56 74 61 62 3b 0a 0a 20  Vtab = pVtab;.. 
36780 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 76   /* Initialize v
36790 64 62 65 20 63 75 72 73 6f 72 20 6f 62 6a 65 63  dbe cursor objec
367a0 74 20 2a 2f 0a 20 20 70 43 75 72 20 3d 20 61 6c  t */.  pCur = al
367b0 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
367c0 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 2d 31 2c 20  pOp->p1, 0, -1, 
367d0 43 55 52 54 59 50 45 5f 56 54 41 42 29 3b 0a 20  CURTYPE_VTAB);. 
367e0 20 69 66 28 20 70 43 75 72 20 29 7b 0a 20 20 20   if( pCur ){.   
367f0 20 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 20   pCur->uc.pVCur 
36800 3d 20 70 56 43 75 72 3b 0a 20 20 20 20 70 56 74  = pVCur;.    pVt
36810 61 62 2d 3e 6e 52 65 66 2b 2b 3b 0a 20 20 7d 65  ab->nRef++;.  }e
36820 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
36830 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
36840 64 20 29 3b 0a 20 20 20 20 70 4d 6f 64 75 6c 65  d );.    pModule
36850 2d 3e 78 43 6c 6f 73 65 28 70 56 43 75 72 29 3b  ->xClose(pVCur);
36860 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
36870 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
36880 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
36890 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
368a0 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
368b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
368c0 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
368d0 64 65 3a 20 56 46 69 6c 74 65 72 20 50 31 20 50  de: VFilter P1 P
368e0 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
368f0 6f 70 73 69 73 3a 20 69 70 6c 61 6e 3d 72 5b 50  opsis: iplan=r[P
36900 33 5d 20 7a 70 6c 61 6e 3d 27 50 34 27 0a 2a 2a  3] zplan='P4'.**
36910 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72 73  .** P1 is a curs
36920 6f 72 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20  or opened using 
36930 56 4f 70 65 6e 2e 20 20 50 32 20 69 73 20 61 6e  VOpen.  P2 is an
36940 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75 6d 70   address to jump
36950 20 74 6f 20 69 66 0a 2a 2a 20 74 68 65 20 66 69   to if.** the fi
36960 6c 74 65 72 65 64 20 72 65 73 75 6c 74 20 73 65  ltered result se
36970 74 20 69 73 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a  t is empty..**.*
36980 2a 20 50 34 20 69 73 20 65 69 74 68 65 72 20 4e  * P4 is either N
36990 55 4c 4c 20 6f 72 20 61 20 73 74 72 69 6e 67 20  ULL or a string 
369a0 74 68 61 74 20 77 61 73 20 67 65 6e 65 72 61 74  that was generat
369b0 65 64 20 62 79 20 74 68 65 20 78 42 65 73 74 49  ed by the xBestI
369c0 6e 64 65 78 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f  ndex.** method o
369d0 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 20 54  f the module.  T
369e0 68 65 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f  he interpretatio
369f0 6e 20 6f 66 20 74 68 65 20 50 34 20 73 74 72 69  n of the P4 stri
36a00 6e 67 20 69 73 20 6c 65 66 74 0a 2a 2a 20 74 6f  ng is left.** to
36a10 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c   the module impl
36a20 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  ementation..**.*
36a30 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e  * This opcode in
36a40 76 6f 6b 65 73 20 74 68 65 20 78 46 69 6c 74 65  vokes the xFilte
36a50 72 20 6d 65 74 68 6f 64 20 6f 6e 20 74 68 65 20  r method on the 
36a60 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 70  virtual table sp
36a70 65 63 69 66 69 65 64 0a 2a 2a 20 62 79 20 50 31  ecified.** by P1
36a80 2e 20 20 54 68 65 20 69 6e 74 65 67 65 72 20 71  .  The integer q
36a90 75 65 72 79 20 70 6c 61 6e 20 70 61 72 61 6d 65  uery plan parame
36aa0 74 65 72 20 74 6f 20 78 46 69 6c 74 65 72 20 69  ter to xFilter i
36ab0 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
36ac0 73 74 65 72 0a 2a 2a 20 50 33 2e 20 52 65 67 69  ster.** P3. Regi
36ad0 73 74 65 72 20 50 33 2b 31 20 73 74 6f 72 65 73  ster P3+1 stores
36ae0 20 74 68 65 20 61 72 67 63 20 70 61 72 61 6d 65   the argc parame
36af0 74 65 72 20 74 6f 20 62 65 20 70 61 73 73 65 64  ter to be passed
36b00 20 74 6f 20 74 68 65 0a 2a 2a 20 78 46 69 6c 74   to the.** xFilt
36b10 65 72 20 6d 65 74 68 6f 64 2e 20 52 65 67 69 73  er method. Regis
36b20 74 65 72 73 20 50 33 2b 32 2e 2e 50 33 2b 31 2b  ters P3+2..P3+1+
36b30 61 72 67 63 20 61 72 65 20 74 68 65 20 61 72 67  argc are the arg
36b40 63 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20  c.** additional 
36b50 70 61 72 61 6d 65 74 65 72 73 20 77 68 69 63 68  parameters which
36b60 20 61 72 65 20 70 61 73 73 65 64 20 74 6f 0a 2a   are passed to.*
36b70 2a 20 78 46 69 6c 74 65 72 20 61 73 20 61 72 67  * xFilter as arg
36b80 76 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b 32  v. Register P3+2
36b90 20 62 65 63 6f 6d 65 73 20 61 72 67 76 5b 30 5d   becomes argv[0]
36ba0 20 77 68 65 6e 20 70 61 73 73 65 64 20 74 6f 20   when passed to 
36bb0 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41  xFilter..**.** A
36bc0 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f   jump is made to
36bd0 20 50 32 20 69 66 20 74 68 65 20 72 65 73 75 6c   P2 if the resul
36be0 74 20 73 65 74 20 61 66 74 65 72 20 66 69 6c 74  t set after filt
36bf0 65 72 69 6e 67 20 77 6f 75 6c 64 20 62 65 20 65  ering would be e
36c00 6d 70 74 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  mpty..*/.case OP
36c10 5f 56 46 69 6c 74 65 72 3a 20 7b 20 20 20 2f 2a  _VFilter: {   /*
36c20 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e   jump */.  int n
36c30 41 72 67 3b 0a 20 20 69 6e 74 20 69 51 75 65 72  Arg;.  int iQuer
36c40 79 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74  y;.  const sqlit
36c50 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
36c60 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 51 75 65 72  le;.  Mem *pQuer
36c70 79 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67 63 3b  y;.  Mem *pArgc;
36c80 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  .  sqlite3_vtab_
36c90 63 75 72 73 6f 72 20 2a 70 56 43 75 72 3b 0a 20  cursor *pVCur;. 
36ca0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
36cb0 56 74 61 62 3b 0a 20 20 56 64 62 65 43 75 72 73  Vtab;.  VdbeCurs
36cc0 6f 72 20 2a 70 43 75 72 3b 0a 20 20 69 6e 74 20  or *pCur;.  int 
36cd0 72 65 73 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  res;.  int i;.  
36ce0 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 0a 20 20  Mem **apArg;..  
36cf0 70 51 75 65 72 79 20 3d 20 26 61 4d 65 6d 5b 70  pQuery = &aMem[p
36d00 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 41 72 67 63  Op->p3];.  pArgc
36d10 20 3d 20 26 70 51 75 65 72 79 5b 31 5d 3b 0a 20   = &pQuery[1];. 
36d20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72   pCur = p->apCsr
36d30 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
36d40 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
36d50 70 51 75 65 72 79 29 20 29 3b 0a 20 20 52 45 47  pQuery) );.  REG
36d60 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
36d70 3e 70 33 2c 20 70 51 75 65 72 79 29 3b 0a 20 20  >p3, pQuery);.  
36d80 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 65 43  assert( pCur->eC
36d90 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
36da0 56 54 41 42 20 29 3b 0a 20 20 70 56 43 75 72 20  VTAB );.  pVCur 
36db0 3d 20 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72  = pCur->uc.pVCur
36dc0 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 56 43 75  ;.  pVtab = pVCu
36dd0 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64  r->pVtab;.  pMod
36de0 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f  ule = pVtab->pMo
36df0 64 75 6c 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62  dule;..  /* Grab
36e00 20 74 68 65 20 69 6e 64 65 78 20 6e 75 6d 62 65   the index numbe
36e10 72 20 61 6e 64 20 61 72 67 63 20 70 61 72 61 6d  r and argc param
36e20 65 74 65 72 73 20 2a 2f 0a 20 20 61 73 73 65 72  eters */.  asser
36e30 74 28 20 28 70 51 75 65 72 79 2d 3e 66 6c 61 67  t( (pQuery->flag
36e40 73 26 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26  s&MEM_Int)!=0 &&
36e50 20 70 41 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d   pArgc->flags==M
36e60 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67  EM_Int );.  nArg
36e70 20 3d 20 28 69 6e 74 29 70 41 72 67 63 2d 3e 75   = (int)pArgc->u
36e80 2e 69 3b 0a 20 20 69 51 75 65 72 79 20 3d 20 28  .i;.  iQuery = (
36e90 69 6e 74 29 70 51 75 65 72 79 2d 3e 75 2e 69 3b  int)pQuery->u.i;
36ea0 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  ..  /* Invoke th
36eb0 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64  e xFilter method
36ec0 20 2a 2f 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20   */.  res = 0;. 
36ed0 20 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72   apArg = p->apAr
36ee0 67 3b 0a 20 20 66 6f 72 28 69 20 3d 20 30 3b 20  g;.  for(i = 0; 
36ef0 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20  i<nArg; i++){.  
36f00 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 26 70 41    apArg[i] = &pA
36f10 72 67 63 5b 69 2b 31 5d 3b 0a 20 20 7d 0a 20 20  rgc[i+1];.  }.  
36f20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 46  rc = pModule->xF
36f30 69 6c 74 65 72 28 70 56 43 75 72 2c 20 69 51 75  ilter(pVCur, iQu
36f40 65 72 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20  ery, pOp->p4.z, 
36f50 6e 41 72 67 2c 20 61 70 41 72 67 29 3b 0a 20 20  nArg, apArg);.  
36f60 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
36f70 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62  tErrmsg(p, pVtab
36f80 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
36f90 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
36fa0 65 72 72 6f 72 3b 0a 20 20 72 65 73 20 3d 20 70  error;.  res = p
36fb0 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 56 43  Module->xEof(pVC
36fc0 75 72 29 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c  ur);.  pCur->nul
36fd0 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 56 64 62 65  lRow = 0;.  Vdbe
36fe0 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21  BranchTaken(res!
36ff0 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73  =0,2);.  if( res
37000 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
37010 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  p2;.  break;.}.#
37020 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
37030 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
37040 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
37050 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
37060 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
37070 3a 20 56 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20  : VColumn P1 P2 
37080 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
37090 69 73 3a 20 72 5b 50 33 5d 3d 76 63 6f 6c 75 6d  is: r[P3]=vcolum
370a0 6e 28 50 32 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72  n(P2).**.** Stor
370b0 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  e the value of t
370c0 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 20  he P2-th column 
370d0 6f 66 0a 2a 2a 20 74 68 65 20 72 6f 77 20 6f 66  of.** the row of
370e0 20 74 68 65 20 76 69 72 74 75 61 6c 2d 74 61 62   the virtual-tab
370f0 6c 65 20 74 68 61 74 20 74 68 65 20 0a 2a 2a 20  le that the .** 
37100 50 31 20 63 75 72 73 6f 72 20 69 73 20 70 6f 69  P1 cursor is poi
37110 6e 74 69 6e 67 20 74 6f 20 69 6e 74 6f 20 72 65  nting to into re
37120 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61  gister P3..*/.ca
37130 73 65 20 4f 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b  se OP_VColumn: {
37140 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
37150 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20  *pVtab;.  const 
37160 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
37170 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a  pModule;.  Mem *
37180 70 44 65 73 74 3b 0a 20 20 73 71 6c 69 74 65 33  pDest;.  sqlite3
37190 5f 63 6f 6e 74 65 78 74 20 73 43 6f 6e 74 65 78  _context sContex
371a0 74 3b 0a 0a 20 20 56 64 62 65 43 75 72 73 6f 72  t;..  VdbeCursor
371b0 20 2a 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73   *pCur = p->apCs
371c0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
371d0 73 65 72 74 28 20 70 43 75 72 2d 3e 65 43 75 72  sert( pCur->eCur
371e0 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 56 54  Type==CURTYPE_VT
371f0 41 42 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  AB );.  assert( 
37200 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
37210 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p3<=(p->nMem+1
37220 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
37230 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65  ;.  pDest = &aMe
37240 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65  m[pOp->p3];.  me
37250 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
37260 2c 20 70 44 65 73 74 29 3b 0a 20 20 69 66 28 20  , pDest);.  if( 
37270 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  pCur->nullRow ){
37280 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
37290 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74  MemSetNull(pDest
372a0 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
372b0 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75 72  }.  pVtab = pCur
372c0 2d 3e 75 63 2e 70 56 43 75 72 2d 3e 70 56 74 61  ->uc.pVCur->pVta
372d0 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70  b;.  pModule = p
372e0 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
372f0 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65   assert( pModule
37300 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d  ->xColumn );.  m
37310 65 6d 73 65 74 28 26 73 43 6f 6e 74 65 78 74 2c  emset(&sContext,
37320 20 30 2c 20 73 69 7a 65 6f 66 28 73 43 6f 6e 74   0, sizeof(sCont
37330 65 78 74 29 29 3b 0a 20 20 73 43 6f 6e 74 65 78  ext));.  sContex
37340 74 2e 70 4f 75 74 20 3d 20 70 44 65 73 74 3b 0a  t.pOut = pDest;.
37350 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
37360 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c  (pDest, MEM_Null
37370 29 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  );.  rc = pModul
37380 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43 75 72 2d  e->xColumn(pCur-
37390 3e 75 63 2e 70 56 43 75 72 2c 20 26 73 43 6f 6e  >uc.pVCur, &sCon
373a0 74 65 78 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a  text, pOp->p2);.
373b0 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70    sqlite3VtabImp
373c0 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74  ortErrmsg(p, pVt
373d0 61 62 29 3b 0a 20 20 69 66 28 20 73 43 6f 6e 74  ab);.  if( sCont
373e0 65 78 74 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20  ext.isError ){. 
373f0 20 20 20 72 63 20 3d 20 73 43 6f 6e 74 65 78 74     rc = sContext
37400 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20  .isError;.  }.  
37410 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
37420 65 45 6e 63 6f 64 69 6e 67 28 70 44 65 73 74 2c  eEncoding(pDest,
37430 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 52 45   encoding);.  RE
37440 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
37450 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20  ->p3, pDest);.  
37460 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
37470 49 5a 45 28 70 44 65 73 74 29 3b 0a 0a 20 20 69  IZE(pDest);..  i
37480 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
37490 6d 54 6f 6f 42 69 67 28 70 44 65 73 74 29 20 29  mTooBig(pDest) )
374a0 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
374b0 69 67 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63  ig;.  }.  if( rc
374c0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
374d0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
374e0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
374f0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
37500 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
37510 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
37520 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
37530 2a 20 4f 70 63 6f 64 65 3a 20 56 4e 65 78 74 20  * Opcode: VNext 
37540 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
37550 2a 20 41 64 76 61 6e 63 65 20 76 69 72 74 75 61  * Advance virtua
37560 6c 20 74 61 62 6c 65 20 50 31 20 74 6f 20 74 68  l table P1 to th
37570 65 20 6e 65 78 74 20 72 6f 77 20 69 6e 20 69 74  e next row in it
37580 73 20 72 65 73 75 6c 74 20 73 65 74 20 61 6e 64  s result set and
37590 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74  .** jump to inst
375a0 72 75 63 74 69 6f 6e 20 50 32 2e 20 20 4f 72 2c  ruction P2.  Or,
375b0 20 69 66 20 74 68 65 20 76 69 72 74 75 61 6c 20   if the virtual 
375c0 74 61 62 6c 65 20 68 61 73 20 72 65 61 63 68 65  table has reache
375d0 64 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20  d.** the end of 
375e0 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 2c 20  its result set, 
375f0 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
37600 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
37610 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
37620 73 65 20 4f 50 5f 56 4e 65 78 74 3a 20 7b 20 20  se OP_VNext: {  
37630 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 73 71   /* jump */.  sq
37640 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
37650 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74  b;.  const sqlit
37660 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
37670 6c 65 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  le;.  int res;. 
37680 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
37690 72 3b 0a 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20  r;..  res = 0;. 
376a0 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72   pCur = p->apCsr
376b0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
376c0 65 72 74 28 20 70 43 75 72 2d 3e 65 43 75 72 54  ert( pCur->eCurT
376d0 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 56 54 41  ype==CURTYPE_VTA
376e0 42 20 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d  B );.  if( pCur-
376f0 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
37700 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74  break;.  }.  pVt
37710 61 62 20 3d 20 70 43 75 72 2d 3e 75 63 2e 70 56  ab = pCur->uc.pV
37720 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d  Cur->pVtab;.  pM
37730 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
37740 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74  Module;.  assert
37750 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74  ( pModule->xNext
37760 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65   );..  /* Invoke
37770 20 74 68 65 20 78 4e 65 78 74 28 29 20 6d 65 74   the xNext() met
37780 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c  hod of the modul
37790 65 2e 20 54 68 65 72 65 20 69 73 20 6e 6f 20 77  e. There is no w
377a0 61 79 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20  ay for the.  ** 
377b0 75 6e 64 65 72 6c 79 69 6e 67 20 69 6d 70 6c 65  underlying imple
377c0 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 72 65 74  mentation to ret
377d0 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 66 20  urn an error if 
377e0 6f 6e 65 20 6f 63 63 75 72 73 20 64 75 72 69 6e  one occurs durin
377f0 67 0a 20 20 2a 2a 20 78 4e 65 78 74 28 29 2e 20  g.  ** xNext(). 
37800 49 6e 73 74 65 61 64 2c 20 69 66 20 61 6e 20 65  Instead, if an e
37810 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 74 72 75  rror occurs, tru
37820 65 20 69 73 20 72 65 74 75 72 6e 65 64 20 28 69  e is returned (i
37830 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20 0a  ndicating that .
37840 20 20 2a 2a 20 64 61 74 61 20 69 73 20 61 76 61    ** data is ava
37850 69 6c 61 62 6c 65 29 20 61 6e 64 20 74 68 65 20  ilable) and the 
37860 65 72 72 6f 72 20 63 6f 64 65 20 72 65 74 75 72  error code retur
37870 6e 65 64 20 77 68 65 6e 20 78 43 6f 6c 75 6d 6e  ned when xColumn
37880 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f 74   or.  ** some ot
37890 68 65 72 20 6d 65 74 68 6f 64 20 69 73 20 6e 65  her method is ne
378a0 78 74 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 74 68  xt invoked on th
378b0 65 20 73 61 76 65 20 76 69 72 74 75 61 6c 20 74  e save virtual t
378c0 61 62 6c 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a  able cursor..  *
378d0 2f 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65  /.  rc = pModule
378e0 2d 3e 78 4e 65 78 74 28 70 43 75 72 2d 3e 75 63  ->xNext(pCur->uc
378f0 2e 70 56 43 75 72 29 3b 0a 20 20 73 71 6c 69 74  .pVCur);.  sqlit
37900 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
37910 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20  sg(p, pVtab);.  
37920 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
37930 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
37940 3b 0a 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c  ;.  res = pModul
37950 65 2d 3e 78 45 6f 66 28 70 43 75 72 2d 3e 75 63  e->xEof(pCur->uc
37960 2e 70 56 43 75 72 29 3b 0a 20 20 56 64 62 65 42  .pVCur);.  VdbeB
37970 72 61 6e 63 68 54 61 6b 65 6e 28 21 72 65 73 2c  ranchTaken(!res,
37980 32 29 3b 0a 20 20 69 66 28 20 21 72 65 73 20 29  2);.  if( !res )
37990 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72  {.    /* If ther
379a0 65 20 69 73 20 64 61 74 61 2c 20 6a 75 6d 70 20  e is data, jump 
379b0 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 67 6f 74  to P2 */.    got
379c0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64  o jump_to_p2_and
379d0 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72  _check_for_inter
379e0 72 75 70 74 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f  rupt;.  }.  goto
379f0 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72   check_for_inter
37a00 72 75 70 74 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  rupt;.}.#endif /
37a10 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
37a20 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
37a30 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
37a40 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
37a50 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61  /* Opcode: VRena
37a60 6d 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  me P1 * * P4 *.*
37a70 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
37a80 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61  nter to a virtua
37a90 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  l table object, 
37aa0 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
37ab0 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68  structure..** Th
37ac0 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
37ad0 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  s the correspond
37ae0 69 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65 74 68  ing xRename meth
37af0 6f 64 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a  od. The value.**
37b00 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
37b10 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65  is passed as the
37b20 20 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20   zName argument 
37b30 74 6f 20 74 68 65 20 78 52 65 6e 61 6d 65 20 6d  to the xRename m
37b40 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ethod..*/.case O
37b50 50 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20 73  P_VRename: {.  s
37b60 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
37b70 61 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d 65  ab;.  Mem *pName
37b80 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70  ;..  pVtab = pOp
37b90 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61  ->p4.pVtab->pVta
37ba0 62 3b 0a 20 20 70 4e 61 6d 65 20 3d 20 26 61 4d  b;.  pName = &aM
37bb0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
37bc0 73 73 65 72 74 28 20 70 56 74 61 62 2d 3e 70 4d  ssert( pVtab->pM
37bd0 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 20 29  odule->xRename )
37be0 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ;.  assert( memI
37bf0 73 56 61 6c 69 64 28 70 4e 61 6d 65 29 20 29 3b  sValid(pName) );
37c00 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
37c10 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 52  adOnly==0 );.  R
37c20 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
37c30 70 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b 0a 20  p->p1, pName);. 
37c40 20 61 73 73 65 72 74 28 20 70 4e 61 6d 65 2d 3e   assert( pName->
37c50 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20  flags & MEM_Str 
37c60 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
37c70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54  Name->enc==SQLIT
37c80 45 5f 55 54 46 38 20 29 3b 0a 20 20 74 65 73 74  E_UTF8 );.  test
37c90 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63  case( pName->enc
37ca0 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  ==SQLITE_UTF16BE
37cb0 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
37cc0 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49  pName->enc==SQLI
37cd0 54 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20 20  TE_UTF16LE );.  
37ce0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
37cf0 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
37d00 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 55 54 46  Name, SQLITE_UTF
37d10 38 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  8);.  if( rc ) g
37d20 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
37d30 5f 65 72 72 6f 72 3b 0a 20 20 72 63 20 3d 20 70  _error;.  rc = p
37d40 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78  Vtab->pModule->x
37d50 52 65 6e 61 6d 65 28 70 56 74 61 62 2c 20 70 4e  Rename(pVtab, pN
37d60 61 6d 65 2d 3e 7a 29 3b 0a 20 20 73 71 6c 69 74  ame->z);.  sqlit
37d70 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
37d80 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20  sg(p, pVtab);.  
37d90 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a  p->expired = 0;.
37da0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
37db0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
37dc0 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  or;.  break;.}.#
37dd0 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
37de0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
37df0 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
37e00 65 3a 20 56 55 70 64 61 74 65 20 50 31 20 50 32  e: VUpdate P1 P2
37e10 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
37e20 6f 70 73 69 73 3a 20 64 61 74 61 3d 72 5b 50 33  opsis: data=r[P3
37e30 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  @P2].**.** P4 is
37e40 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
37e50 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62  virtual table ob
37e60 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33  ject, an sqlite3
37e70 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e  _vtab structure.
37e80 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
37e90 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72  invokes the corr
37ea0 65 73 70 6f 6e 64 69 6e 67 20 78 55 70 64 61 74  esponding xUpdat
37eb0 65 20 6d 65 74 68 6f 64 2e 20 50 32 20 76 61 6c  e method. P2 val
37ec0 75 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 69  ues.** are conti
37ed0 67 75 6f 75 73 20 6d 65 6d 6f 72 79 20 63 65 6c  guous memory cel
37ee0 6c 73 20 73 74 61 72 74 69 6e 67 20 61 74 20 50  ls starting at P
37ef0 33 20 74 6f 20 70 61 73 73 20 74 6f 20 74 68 65  3 to pass to the
37f00 20 78 55 70 64 61 74 65 20 0a 2a 2a 20 69 6e 76   xUpdate .** inv
37f10 6f 63 61 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c  ocation. The val
37f20 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 28  ue in register (
37f30 50 33 2b 50 32 2d 31 29 20 63 6f 72 72 65 73 70  P3+P2-1) corresp
37f40 6f 6e 64 73 20 74 6f 20 74 68 65 20 0a 2a 2a 20  onds to the .** 
37f50 70 32 74 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20  p2th element of 
37f60 74 68 65 20 61 72 67 76 20 61 72 72 61 79 20 70  the argv array p
37f70 61 73 73 65 64 20 74 6f 20 78 55 70 64 61 74 65  assed to xUpdate
37f80 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 78 55 70 64  ..**.** The xUpd
37f90 61 74 65 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20  ate method will 
37fa0 64 6f 20 61 20 44 45 4c 45 54 45 20 6f 72 20 61  do a DELETE or a
37fb0 6e 20 49 4e 53 45 52 54 20 6f 72 20 62 6f 74 68  n INSERT or both
37fc0 2e 0a 2a 2a 20 54 68 65 20 61 72 67 76 5b 30 5d  ..** The argv[0]
37fd0 20 65 6c 65 6d 65 6e 74 20 28 77 68 69 63 68 20   element (which 
37fe0 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 6d  corresponds to m
37ff0 65 6d 6f 72 79 20 63 65 6c 6c 20 50 33 29 0a 2a  emory cell P3).*
38000 2a 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f  * is the rowid o
38010 66 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74  f a row to delet
38020 65 2e 20 20 49 66 20 61 72 67 76 5b 30 5d 20 69  e.  If argv[0] i
38030 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f 20 0a  s NULL then no .
38040 2a 2a 20 64 65 6c 65 74 69 6f 6e 20 6f 63 63 75  ** deletion occu
38050 72 73 2e 20 20 54 68 65 20 61 72 67 76 5b 31 5d  rs.  The argv[1]
38060 20 65 6c 65 6d 65 6e 74 20 69 73 20 74 68 65 20   element is the 
38070 72 6f 77 69 64 20 6f 66 20 74 68 65 20 6e 65 77  rowid of the new
38080 20 0a 2a 2a 20 72 6f 77 2e 20 20 54 68 69 73 20   .** row.  This 
38090 63 61 6e 20 62 65 20 4e 55 4c 4c 20 74 6f 20 68  can be NULL to h
380a0 61 76 65 20 74 68 65 20 76 69 72 74 75 61 6c 20  ave the virtual 
380b0 74 61 62 6c 65 20 73 65 6c 65 63 74 20 74 68 65  table select the
380c0 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 69 64 20 66   new .** rowid f
380d0 6f 72 20 69 74 73 65 6c 66 2e 20 20 54 68 65 20  or itself.  The 
380e0 73 75 62 73 65 71 75 65 6e 74 20 65 6c 65 6d 65  subsequent eleme
380f0 6e 74 73 20 69 6e 20 74 68 65 20 61 72 72 61 79  nts in the array
38100 20 61 72 65 20 0a 2a 2a 20 74 68 65 20 76 61 6c   are .** the val
38110 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ues of columns i
38120 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 2a  n the new row..*
38130 2a 0a 2a 2a 20 49 66 20 50 32 3d 3d 31 20 74 68  *.** If P2==1 th
38140 65 6e 20 6e 6f 20 69 6e 73 65 72 74 20 69 73 20  en no insert is 
38150 70 65 72 66 6f 72 6d 65 64 2e 20 20 61 72 67 76  performed.  argv
38160 5b 30 5d 20 69 73 20 74 68 65 20 72 6f 77 69 64  [0] is the rowid
38170 20 6f 66 0a 2a 2a 20 61 20 72 6f 77 20 74 6f 20   of.** a row to 
38180 64 65 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 31  delete..**.** P1
38190 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c   is a boolean fl
381a0 61 67 2e 20 49 66 20 69 74 20 69 73 20 73 65 74  ag. If it is set
381b0 20 74 6f 20 74 72 75 65 20 61 6e 64 20 74 68 65   to true and the
381c0 20 78 55 70 64 61 74 65 20 63 61 6c 6c 0a 2a 2a   xUpdate call.**
381d0 20 69 73 20 73 75 63 63 65 73 73 66 75 6c 2c 20   is successful, 
381e0 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 72  then the value r
381f0 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
38200 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  e3_last_insert_r
38210 6f 77 69 64 28 29 20 0a 2a 2a 20 69 73 20 73 65  owid() .** is se
38220 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  t to the value o
38230 66 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20  f the rowid for 
38240 74 68 65 20 72 6f 77 20 6a 75 73 74 20 69 6e 73  the row just ins
38250 65 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 35 20  erted..**.** P5 
38260 69 73 20 74 68 65 20 65 72 72 6f 72 20 61 63 74  is the error act
38270 69 6f 6e 73 20 28 4f 45 5f 52 65 70 6c 61 63 65  ions (OE_Replace
38280 2c 20 4f 45 5f 46 61 69 6c 2c 20 4f 45 5f 49 67  , OE_Fail, OE_Ig
38290 6e 6f 72 65 2c 20 65 74 63 29 20 74 6f 0a 2a 2a  nore, etc) to.**
382a0 20 61 70 70 6c 79 20 69 6e 20 74 68 65 20 63 61   apply in the ca
382b0 73 65 20 6f 66 20 61 20 63 6f 6e 73 74 72 61 69  se of a constrai
382c0 6e 74 20 66 61 69 6c 75 72 65 20 6f 6e 20 61 6e  nt failure on an
382d0 20 69 6e 73 65 72 74 20 6f 72 20 75 70 64 61 74   insert or updat
382e0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 55  e..*/.case OP_VU
382f0 70 64 61 74 65 3a 20 7b 0a 20 20 73 71 6c 69 74  pdate: {.  sqlit
38300 65 33 5f 76 74 61 62 20 2a 70