/ Hex Artifact Content
Login

Artifact f2706d5564d2b2887a27c909e8e1575250029503:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 20   like that ever 
0520: 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66 64  happens..*/.#ifd
0530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
0540: 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75  # define memAbou
0550: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73  tToChange(P,M) s
0560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
0570: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a  utToChange(P,M).
0580: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d  #else.# define m
0590: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
05a0: 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  P,M).#endif../*.
05b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
05c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
05d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
05e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
05f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0600: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53  ther by the OP_S
0610: 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  eekXX, OP_Next, 
0620: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0630: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0640: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0650: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0660: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0670: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0680: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0690: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
06a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
06b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
06c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
06d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
06e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
06f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0700: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0710: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0720: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0730: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0740: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0750: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0760: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0770: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0780: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0790: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
07a0: 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65    When it reache
07b0: 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69  s zero, the u1.i
07c0: 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20  sInterrupted.** 
07d0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
07e0: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69  ite3 structure i
07f0: 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74  s set in order t
0800: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
0810: 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54  terrupt..**.** T
0820: 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20  his facility is 
0830: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
0840: 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20   purposes only. 
0850: 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e   It does not fun
0860: 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f  ction.** in an o
0870: 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a  rdinary build..*
0880: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0890: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
08a0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
08b0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
08c0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f  .** The next glo
08d0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20  bal variable is 
08e0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68  incremented each
08f0: 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72   type the OP_Sor
0900: 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  t opcode.** is e
0910: 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65  xecuted.  The te
0920: 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73  st procedures us
0930: 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  e this informati
0940: 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  on to make sure 
0950: 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20  that.** sorting 
0960: 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20  is occurring or 
0970: 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74  not occurring at
0980: 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d   appropriate tim
0990: 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  es.   This varia
09a0: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
09b0: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
09c0: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
09f0: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
0a00: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0a10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  int sqlite3_sort
0a20: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0a30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0a40: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0a50: 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73  le records the s
0a60: 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
0a70: 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f  st MEM_Blob.** o
0a80: 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68  r MEM_Str that h
0a90: 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20  as been used by 
0aa0: 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20  a VDBE opcode.  
0ab0: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0ac0: 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20  res.** use this 
0ad0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d  information to m
0ae0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
0af0: 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63  e zero-blob func
0b00: 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20  tionality.** is 
0b10: 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  working correctl
0b20: 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  y.   This variab
0b30: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0b40: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0b50: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0b60: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0b70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0b80: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0b90: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ba0: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0bb0: 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63  size = 0;.static
0bc0: 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42   void updateMaxB
0bd0: 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b  lobsize(Mem *p){
0be0: 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  .  if( (p->flags
0bf0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
0c00: 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e  Blob))!=0 && p->
0c10: 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c  n>sqlite3_max_bl
0c20: 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71  obsize ){.    sq
0c30: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0c40: 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d  ze = p->n;.  }.}
0c50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0c60: 68 69 73 20 6d 61 63 72 6f 20 65 76 61 6c 75 61  his macro evalua
0c70: 74 65 73 20 74 6f 20 74 72 75 65 20 69 66 20 65  tes to true if e
0c80: 69 74 68 65 72 20 74 68 65 20 75 70 64 61 74 65  ither the update
0c90: 20 68 6f 6f 6b 20 6f 72 20 74 68 65 20 70 72 65   hook or the pre
0ca0: 75 70 64 61 74 65 0a 2a 2a 20 68 6f 6f 6b 20 61  update.** hook a
0cb0: 72 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 64  re enabled for d
0cc0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 20  atabase connect 
0cd0: 44 42 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  DB..*/.#ifdef SQ
0ce0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
0cf0: 50 44 41 54 45 5f 48 4f 4f 4b 0a 23 20 64 65 66  PDATE_HOOK.# def
0d00: 69 6e 65 20 48 41 53 5f 55 50 44 41 54 45 5f 48  ine HAS_UPDATE_H
0d10: 4f 4f 4b 28 44 42 29 20 28 28 44 42 29 2d 3e 78  OOK(DB) ((DB)->x
0d20: 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
0d30: 6b 7c 7c 28 44 42 29 2d 3e 78 55 70 64 61 74 65  k||(DB)->xUpdate
0d40: 43 61 6c 6c 62 61 63 6b 29 0a 23 65 6c 73 65 0a  Callback).#else.
0d50: 23 20 64 65 66 69 6e 65 20 48 41 53 5f 55 50 44  # define HAS_UPD
0d60: 41 54 45 5f 48 4f 4f 4b 28 44 42 29 20 28 28 44  ATE_HOOK(DB) ((D
0d70: 42 29 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  B)->xUpdateCallb
0d80: 61 63 6b 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ack).#endif../*.
0d90: 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62  ** The next glob
0da0: 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69  al variable is i
0db0: 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20  ncremented each 
0dc0: 74 69 6d 65 20 74 68 65 20 4f 50 5f 46 6f 75 6e  time the OP_Foun
0dd0: 64 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  d opcode.** is e
0de0: 78 65 63 75 74 65 64 2e 20 54 68 69 73 20 69 73  xecuted. This is
0df0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 77 68   used to test wh
0e00: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
0e10: 20 66 6f 72 65 69 67 6e 20 6b 65 79 0a 2a 2a 20   foreign key.** 
0e20: 6f 70 65 72 61 74 69 6f 6e 20 69 6d 70 6c 65 6d  operation implem
0e30: 65 6e 74 65 64 20 75 73 69 6e 67 20 4f 50 5f 46  ented using OP_F
0e40: 6b 49 73 5a 65 72 6f 20 69 73 20 77 6f 72 6b 69  kIsZero is worki
0e50: 6e 67 2e 20 54 68 69 73 20 76 61 72 69 61 62 6c  ng. This variabl
0e60: 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63  e.** has no func
0e70: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
0e80: 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  to help verify t
0e90: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0ea0: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c  tion of the.** l
0eb0: 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  ibrary..*/.#ifde
0ec0: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e  f SQLITE_TEST.in
0ed0: 74 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f  t sqlite3_found_
0ee0: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0ef0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 61 20  f../*.** Test a 
0f00: 72 65 67 69 73 74 65 72 20 74 6f 20 73 65 65 20  register to see 
0f10: 69 66 20 69 74 20 65 78 63 65 65 64 73 20 74 68  if it exceeds th
0f20: 65 20 63 75 72 72 65 6e 74 20 6d 61 78 69 6d 75  e current maximu
0f30: 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20  m blob size..** 
0f40: 49 66 20 69 74 20 64 6f 65 73 2c 20 72 65 63 6f  If it does, reco
0f50: 72 64 20 74 68 65 20 6e 65 77 20 6d 61 78 69 6d  rd the new maxim
0f60: 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f  um blob size..*/
0f70: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
0f80: 49 54 45 5f 54 45 53 54 29 20 26 26 20 21 64 65  ITE_TEST) && !de
0f90: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
0fa0: 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 29 0a  T_BUILTIN_TEST).
0fb0: 23 20 64 65 66 69 6e 65 20 55 50 44 41 54 45 5f  # define UPDATE_
0fc0: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 50 29 20  MAX_BLOBSIZE(P) 
0fd0: 20 75 70 64 61 74 65 4d 61 78 42 6c 6f 62 73 69   updateMaxBlobsi
0fe0: 7a 65 28 50 29 0a 23 65 6c 73 65 0a 23 20 64 65  ze(P).#else.# de
0ff0: 66 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f  fine UPDATE_MAX_
1000: 42 4c 4f 42 53 49 5a 45 28 50 29 0a 23 65 6e 64  BLOBSIZE(P).#end
1010: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65  if../*.** Invoke
1020: 20 74 68 65 20 56 44 42 45 20 63 6f 76 65 72 61   the VDBE covera
1030: 67 65 20 63 61 6c 6c 62 61 63 6b 2c 20 69 66 20  ge callback, if 
1040: 74 68 61 74 20 63 61 6c 6c 62 61 63 6b 20 69 73  that callback is
1050: 20 64 65 66 69 6e 65 64 2e 20 20 54 68 69 73 0a   defined.  This.
1060: 2a 2a 20 66 65 61 74 75 72 65 20 69 73 20 75 73  ** feature is us
1070: 65 64 20 66 6f 72 20 74 65 73 74 20 73 75 69 74  ed for test suit
1080: 65 20 76 61 6c 69 64 61 74 69 6f 6e 20 6f 6e 6c  e validation onl
1090: 79 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 61  y and does not a
10a0: 70 70 65 61 72 20 61 6e 0a 2a 2a 20 70 72 6f 64  ppear an.** prod
10b0: 75 63 74 69 6f 6e 20 62 75 69 6c 64 73 2e 0a 2a  uction builds..*
10c0: 2a 0a 2a 2a 20 4d 20 69 73 20 61 6e 20 69 6e 74  *.** M is an int
10d0: 65 67 65 72 2c 20 32 20 6f 72 20 33 2c 20 74 68  eger, 2 or 3, th
10e0: 61 74 20 69 6e 64 69 63 65 73 20 68 6f 77 20 6d  at indices how m
10f0: 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77 61  any different wa
1100: 79 73 20 74 68 65 0a 2a 2a 20 62 72 61 6e 63 68  ys the.** branch
1110: 20 63 61 6e 20 67 6f 2e 20 20 49 74 20 69 73 20   can go.  It is 
1120: 75 73 75 61 6c 6c 79 20 32 2e 20 20 22 49 22 20  usually 2.  "I" 
1130: 69 73 20 74 68 65 20 64 69 72 65 63 74 69 6f 6e  is the direction
1140: 20 74 68 65 20 62 72 61 6e 63 68 0a 2a 2a 20 67   the branch.** g
1150: 6f 65 73 2e 20 20 30 20 6d 65 61 6e 73 20 66 61  oes.  0 means fa
1160: 6c 6c 73 20 74 68 72 6f 75 67 68 2e 20 20 31 20  lls through.  1 
1170: 6d 65 61 6e 73 20 62 72 61 6e 63 68 20 69 73 20  means branch is 
1180: 74 61 6b 65 6e 2e 20 20 32 20 6d 65 61 6e 73 20  taken.  2 means 
1190: 74 68 65 0a 2a 2a 20 73 65 63 6f 6e 64 20 61 6c  the.** second al
11a0: 74 65 72 6e 61 74 69 76 65 20 62 72 61 6e 63 68  ternative branch
11b0: 20 69 73 20 74 61 6b 65 6e 2e 0a 2a 2a 0a 2a 2a   is taken..**.**
11c0: 20 69 53 72 63 4c 69 6e 65 20 69 73 20 74 68 65   iSrcLine is the
11d0: 20 73 6f 75 72 63 65 20 63 6f 64 65 20 6c 69 6e   source code lin
11e0: 65 20 28 66 72 6f 6d 20 74 68 65 20 5f 5f 4c 49  e (from the __LI
11f0: 4e 45 5f 5f 20 6d 61 63 72 6f 29 20 74 68 61 74  NE__ macro) that
1200: 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 74 68  .** generated th
1210: 65 20 56 44 42 45 20 69 6e 73 74 72 75 63 74 69  e VDBE instructi
1220: 6f 6e 2e 20 20 54 68 69 73 20 69 6e 73 74 72 75  on.  This instru
1230: 6d 65 6e 74 61 74 69 6f 6e 20 61 73 73 75 6d 65  mentation assume
1240: 73 20 74 68 61 74 20 61 6c 6c 0a 2a 2a 20 73 6f  s that all.** so
1250: 75 72 63 65 20 63 6f 64 65 20 69 73 20 69 6e 20  urce code is in 
1260: 61 20 73 69 6e 67 6c 65 20 66 69 6c 65 20 28 74  a single file (t
1270: 68 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 29  he amalgamation)
1280: 2e 20 20 53 70 65 63 69 61 6c 20 76 61 6c 75 65  .  Special value
1290: 73 20 31 0a 2a 2a 20 61 6e 64 20 32 20 66 6f 72  s 1.** and 2 for
12a0: 20 74 68 65 20 69 53 72 63 4c 69 6e 65 20 70 61   the iSrcLine pa
12b0: 72 61 6d 65 74 65 72 20 6d 65 61 6e 20 74 68 61  rameter mean tha
12c0: 74 20 74 68 69 73 20 70 61 72 74 69 63 75 6c 61  t this particula
12d0: 72 20 62 72 61 6e 63 68 20 69 73 0a 2a 2a 20 61  r branch is.** a
12e0: 6c 77 61 79 73 20 74 61 6b 65 6e 20 6f 72 20 6e  lways taken or n
12f0: 65 76 65 72 20 74 61 6b 65 6e 2c 20 72 65 73 70  ever taken, resp
1300: 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 23 69 66  ectively..*/.#if
1310: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1320: 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 29 0a  _VDBE_COVERAGE).
1330: 23 20 64 65 66 69 6e 65 20 56 64 62 65 42 72 61  # define VdbeBra
1340: 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29 0a 23 65  nchTaken(I,M).#e
1350: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 56 64 62  lse.# define Vdb
1360: 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 49 2c 4d  eBranchTaken(I,M
1370: 29 20 76 64 62 65 54 61 6b 65 42 72 61 6e 63 68  ) vdbeTakeBranch
1380: 28 70 4f 70 2d 3e 69 53 72 63 4c 69 6e 65 2c 49  (pOp->iSrcLine,I
1390: 2c 4d 29 0a 20 20 73 74 61 74 69 63 20 76 6f 69  ,M).  static voi
13a0: 64 20 76 64 62 65 54 61 6b 65 42 72 61 6e 63 68  d vdbeTakeBranch
13b0: 28 69 6e 74 20 69 53 72 63 4c 69 6e 65 2c 20 75  (int iSrcLine, u
13c0: 38 20 49 2c 20 75 38 20 4d 29 7b 0a 20 20 20 20  8 I, u8 M){.    
13d0: 69 66 28 20 69 53 72 63 4c 69 6e 65 3c 3d 32 20  if( iSrcLine<=2 
13e0: 26 26 20 41 4c 57 41 59 53 28 69 53 72 63 4c 69  && ALWAYS(iSrcLi
13f0: 6e 65 3e 30 29 20 29 7b 0a 20 20 20 20 20 20 4d  ne>0) ){.      M
1400: 20 3d 20 69 53 72 63 4c 69 6e 65 3b 0a 20 20 20   = iSrcLine;.   
1410: 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 65     /* Assert the
1420: 20 74 72 75 74 68 20 6f 66 20 56 64 62 65 43 6f   truth of VdbeCo
1430: 76 65 72 61 67 65 41 6c 77 61 79 73 54 61 6b 65  verageAlwaysTake
1440: 6e 28 29 20 61 6e 64 20 0a 20 20 20 20 20 20 2a  n() and .      *
1450: 2a 20 56 64 62 65 43 6f 76 65 72 61 67 65 4e 65  * VdbeCoverageNe
1460: 76 65 72 54 61 6b 65 6e 28 29 20 2a 2f 0a 20 20  verTaken() */.  
1470: 20 20 20 20 61 73 73 65 72 74 28 20 28 4d 20 26      assert( (M &
1480: 20 49 29 3d 3d 49 20 29 3b 0a 20 20 20 20 7d 65   I)==I );.    }e
1490: 6c 73 65 7b 0a 20 20 20 20 20 20 69 66 28 20 73  lse{.      if( s
14a0: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
14b0: 69 67 2e 78 56 64 62 65 42 72 61 6e 63 68 3d 3d  ig.xVdbeBranch==
14c0: 30 20 29 20 72 65 74 75 72 6e 3b 20 20 2f 2a 4e  0 ) return;  /*N
14d0: 4f 5f 54 45 53 54 2a 2f 0a 20 20 20 20 20 20 73  O_TEST*/.      s
14e0: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
14f0: 69 67 2e 78 56 64 62 65 42 72 61 6e 63 68 28 73  ig.xVdbeBranch(s
1500: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
1510: 69 67 2e 70 56 64 62 65 42 72 61 6e 63 68 41 72  ig.pVdbeBranchAr
1520: 67 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  g,.             
1530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1540: 20 20 20 20 20 20 20 20 20 69 53 72 63 4c 69 6e           iSrcLin
1550: 65 2c 49 2c 4d 29 3b 0a 20 20 20 20 7d 0a 20 20  e,I,M);.    }.  
1560: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
1570: 43 6f 6e 76 65 72 74 20 74 68 65 20 67 69 76 65  Convert the give
1580: 6e 20 72 65 67 69 73 74 65 72 20 69 6e 74 6f 20  n register into 
1590: 61 20 73 74 72 69 6e 67 20 69 66 20 69 74 20 69  a string if it i
15a0: 73 6e 27 74 20 6f 6e 65 0a 2a 2a 20 61 6c 72 65  sn't one.** alre
15b0: 61 64 79 2e 20 52 65 74 75 72 6e 20 6e 6f 6e 2d  ady. Return non-
15c0: 7a 65 72 6f 20 69 66 20 61 20 6d 61 6c 6c 6f 63  zero if a malloc
15d0: 28 29 20 66 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65  () fails..*/.#de
15e0: 66 69 6e 65 20 53 74 72 69 6e 67 69 66 79 28 50  fine Stringify(P
15f0: 2c 20 65 6e 63 29 20 5c 0a 20 20 20 69 66 28 28  , enc) \.   if((
1600: 28 50 29 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f  (P)->flags&(MEM_
1610: 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d  Str|MEM_Blob))==
1620: 30 20 26 26 20 73 71 6c 69 74 65 33 56 64 62 65  0 && sqlite3Vdbe
1630: 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 50 2c 65  MemStringify(P,e
1640: 6e 63 2c 30 29 29 20 5c 0a 20 20 20 20 20 7b 20  nc,0)) \.     { 
1650: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 20 7d 0a 0a  goto no_mem; }..
1660: 2f 2a 0a 2a 2a 20 41 6e 20 65 70 68 65 6d 65 72  /*.** An ephemer
1670: 61 6c 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20  al string value 
1680: 28 73 69 67 6e 69 66 69 65 64 20 62 79 20 74 68  (signified by th
1690: 65 20 4d 45 4d 5f 45 70 68 65 6d 20 66 6c 61 67  e MEM_Ephem flag
16a0: 29 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 61 20  ) contains.** a 
16b0: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 64 79 6e  pointer to a dyn
16c0: 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74  amically allocat
16d0: 65 64 20 73 74 72 69 6e 67 20 77 68 65 72 65 20  ed string where 
16e0: 73 6f 6d 65 20 6f 74 68 65 72 20 65 6e 74 69 74  some other entit
16f0: 79 0a 2a 2a 20 69 73 20 72 65 73 70 6f 6e 73 69  y.** is responsi
1700: 62 6c 65 20 66 6f 72 20 64 65 61 6c 6c 6f 63 61  ble for dealloca
1710: 74 69 6e 67 20 74 68 61 74 20 73 74 72 69 6e 67  ting that string
1720: 2e 20 20 42 65 63 61 75 73 65 20 74 68 65 20 72  .  Because the r
1730: 65 67 69 73 74 65 72 0a 2a 2a 20 64 6f 65 73 20  egister.** does 
1740: 6e 6f 74 20 63 6f 6e 74 72 6f 6c 20 74 68 65 20  not control the 
1750: 73 74 72 69 6e 67 2c 20 69 74 20 6d 69 67 68 74  string, it might
1760: 20 62 65 20 64 65 6c 65 74 65 64 20 77 69 74 68   be deleted with
1770: 6f 75 74 20 74 68 65 20 72 65 67 69 73 74 65 72  out the register
1780: 0a 2a 2a 20 6b 6e 6f 77 69 6e 67 20 69 74 2e 0a  .** knowing it..
1790: 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69  **.** This routi
17a0: 6e 65 20 63 6f 6e 76 65 72 74 73 20 61 6e 20 65  ne converts an e
17b0: 70 68 65 6d 65 72 61 6c 20 73 74 72 69 6e 67 20  phemeral string 
17c0: 69 6e 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c  into a dynamical
17d0: 6c 79 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20  ly allocated.** 
17e0: 73 74 72 69 6e 67 20 74 68 61 74 20 74 68 65 20  string that the 
17f0: 72 65 67 69 73 74 65 72 20 69 74 73 65 6c 66 20  register itself 
1800: 63 6f 6e 74 72 6f 6c 73 2e 20 20 49 6e 20 6f 74  controls.  In ot
1810: 68 65 72 20 77 6f 72 64 73 2c 20 69 74 0a 2a 2a  her words, it.**
1820: 20 63 6f 6e 76 65 72 74 73 20 61 6e 20 4d 45 4d   converts an MEM
1830: 5f 45 70 68 65 6d 20 73 74 72 69 6e 67 20 69 6e  _Ephem string in
1840: 74 6f 20 61 20 73 74 72 69 6e 67 20 77 69 74 68  to a string with
1850: 20 50 2e 7a 3d 3d 50 2e 7a 4d 61 6c 6c 6f 63 2e   P.z==P.zMalloc.
1860: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 65 65 70  .*/.#define Deep
1870: 68 65 6d 65 72 61 6c 69 7a 65 28 50 29 20 5c 0a  hemeralize(P) \.
1880: 20 20 20 69 66 28 20 28 28 50 29 2d 3e 66 6c 61     if( ((P)->fla
1890: 67 73 26 4d 45 4d 5f 45 70 68 65 6d 29 21 3d 30  gs&MEM_Ephem)!=0
18a0: 20 5c 0a 20 20 20 20 20 20 20 26 26 20 73 71 6c   \.       && sql
18b0: 69 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65 57  ite3VdbeMemMakeW
18c0: 72 69 74 65 61 62 6c 65 28 50 29 20 29 7b 20 67  riteable(P) ){ g
18d0: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a  oto no_mem;}../*
18e0: 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20   Return true if 
18f0: 74 68 65 20 63 75 72 73 6f 72 20 77 61 73 20 6f  the cursor was o
1900: 70 65 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20  pened using the 
1910: 4f 50 5f 4f 70 65 6e 53 6f 72 74 65 72 20 6f 70  OP_OpenSorter op
1920: 63 6f 64 65 2e 20 2a 2f 0a 23 64 65 66 69 6e 65  code. */.#define
1930: 20 69 73 53 6f 72 74 65 72 28 78 29 20 28 28 78   isSorter(x) ((x
1940: 29 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  )->eCurType==CUR
1950: 54 59 50 45 5f 53 4f 52 54 45 52 29 0a 0a 2f 2a  TYPE_SORTER)../*
1960: 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 56 64 62  .** Allocate Vdb
1970: 65 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 69  eCursor number i
1980: 43 75 72 2e 20 20 52 65 74 75 72 6e 20 61 20 70  Cur.  Return a p
1990: 6f 69 6e 74 65 72 20 74 6f 20 69 74 2e 20 20 52  ointer to it.  R
19a0: 65 74 75 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66  eturn NULL.** if
19b0: 20 77 65 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d   we run out of m
19c0: 65 6d 6f 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63  emory..*/.static
19d0: 20 56 64 62 65 43 75 72 73 6f 72 20 2a 61 6c 6c   VdbeCursor *all
19e0: 6f 63 61 74 65 43 75 72 73 6f 72 28 0a 20 20 56  ocateCursor(.  V
19f0: 64 62 65 20 2a 70 2c 20 20 20 20 20 20 20 20 20  dbe *p,         
1a00: 20 20 20 20 20 2f 2a 20 54 68 65 20 76 69 72 74       /* The virt
1a10: 75 61 6c 20 6d 61 63 68 69 6e 65 20 2a 2f 0a 20  ual machine */. 
1a20: 20 69 6e 74 20 69 43 75 72 2c 20 20 20 20 20 20   int iCur,      
1a30: 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
1a40: 6f 66 20 74 68 65 20 6e 65 77 20 56 64 62 65 43  of the new VdbeC
1a50: 75 72 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  ursor */.  int n
1a60: 46 69 65 6c 64 2c 20 20 20 20 20 20 20 20 20 20  Field,          
1a70: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69   /* Number of fi
1a80: 65 6c 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c  elds in the tabl
1a90: 65 20 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20  e or index */.  
1aa0: 69 6e 74 20 69 44 62 2c 20 20 20 20 20 20 20 20  int iDb,        
1ab0: 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73        /* Databas
1ac0: 65 20 74 68 65 20 63 75 72 73 6f 72 20 62 65 6c  e the cursor bel
1ad0: 6f 6e 67 73 20 74 6f 2c 20 6f 72 20 2d 31 20 2a  ongs to, or -1 *
1ae0: 2f 0a 20 20 75 38 20 65 43 75 72 54 79 70 65 20  /.  u8 eCurType 
1af0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 79 70            /* Typ
1b00: 65 20 6f 66 20 74 68 65 20 6e 65 77 20 63 75 72  e of the new cur
1b10: 73 6f 72 20 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 46  sor */.){.  /* F
1b20: 69 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 63  ind the memory c
1b30: 65 6c 6c 20 74 68 61 74 20 77 69 6c 6c 20 62 65  ell that will be
1b40: 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
1b50: 68 65 20 62 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72  he blob of memor
1b60: 79 0a 20 20 2a 2a 20 72 65 71 75 69 72 65 64 20  y.  ** required 
1b70: 66 6f 72 20 74 68 69 73 20 56 64 62 65 43 75 72  for this VdbeCur
1b80: 73 6f 72 20 73 74 72 75 63 74 75 72 65 2e 20 49  sor structure. I
1b90: 74 20 69 73 20 63 6f 6e 76 65 6e 69 65 6e 74 20  t is convenient 
1ba0: 74 6f 20 75 73 65 20 61 20 0a 20 20 2a 2a 20 76  to use a .  ** v
1bb0: 64 62 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  dbe memory cell 
1bc0: 74 6f 20 6d 61 6e 61 67 65 20 74 68 65 20 6d 65  to manage the me
1bd0: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
1be0: 72 65 71 75 69 72 65 64 20 66 6f 72 20 61 0a 20  required for a. 
1bf0: 20 2a 2a 20 56 64 62 65 43 75 72 73 6f 72 20 73   ** VdbeCursor s
1c00: 74 72 75 63 74 75 72 65 20 66 6f 72 20 74 68 65  tructure for the
1c10: 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 65 61 73 6f   following reaso
1c20: 6e 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20  ns:.  **.  **   
1c30: 2a 20 53 6f 6d 65 74 69 6d 65 73 20 63 75 72 73  * Sometimes curs
1c40: 6f 72 20 6e 75 6d 62 65 72 73 20 61 72 65 20 75  or numbers are u
1c50: 73 65 64 20 66 6f 72 20 61 20 63 6f 75 70 6c 65  sed for a couple
1c60: 20 6f 66 20 64 69 66 66 65 72 65 6e 74 0a 20 20   of different.  
1c70: 2a 2a 20 20 20 20 20 70 75 72 70 6f 73 65 73 20  **     purposes 
1c80: 69 6e 20 61 20 76 64 62 65 20 70 72 6f 67 72 61  in a vdbe progra
1c90: 6d 2e 20 54 68 65 20 64 69 66 66 65 72 65 6e 74  m. The different
1ca0: 20 75 73 65 73 20 6d 69 67 68 74 20 72 65 71 75   uses might requ
1cb0: 69 72 65 0a 20 20 2a 2a 20 20 20 20 20 64 69 66  ire.  **     dif
1cc0: 66 65 72 65 6e 74 20 73 69 7a 65 64 20 61 6c 6c  ferent sized all
1cd0: 6f 63 61 74 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79  ocations. Memory
1ce0: 20 63 65 6c 6c 73 20 70 72 6f 76 69 64 65 20 67   cells provide g
1cf0: 72 6f 77 61 62 6c 65 0a 20 20 2a 2a 20 20 20 20  rowable.  **    
1d00: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e 0a 20 20   allocations..  
1d10: 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 57 68 65 6e  **.  **   * When
1d20: 20 75 73 69 6e 67 20 45 4e 41 42 4c 45 5f 4d 45   using ENABLE_ME
1d30: 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c  MORY_MANAGEMENT,
1d40: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 62 75 66   memory cell buf
1d50: 66 65 72 73 20 63 61 6e 0a 20 20 2a 2a 20 20 20  fers can.  **   
1d60: 20 20 62 65 20 66 72 65 65 64 20 6c 61 7a 69 6c    be freed lazil
1d70: 79 20 76 69 61 20 74 68 65 20 73 71 6c 69 74 65  y via the sqlite
1d80: 33 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79  3_release_memory
1d90: 28 29 20 41 50 49 2e 20 54 68 69 73 0a 20 20 2a  () API. This.  *
1da0: 2a 20 20 20 20 20 6d 69 6e 69 6d 69 7a 65 73 20  *     minimizes 
1db0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 61  the number of ma
1dc0: 6c 6c 6f 63 20 63 61 6c 6c 73 20 6d 61 64 65 20  lloc calls made 
1dd0: 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 20  by the system.. 
1de0: 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 6d 65 6d   **.  ** The mem
1df0: 6f 72 79 20 63 65 6c 6c 20 66 6f 72 20 63 75 72  ory cell for cur
1e00: 73 6f 72 20 30 20 69 73 20 61 4d 65 6d 5b 30 5d  sor 0 is aMem[0]
1e10: 2e 20 54 68 65 20 72 65 73 74 20 61 72 65 20 61  . The rest are a
1e20: 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d 0a 20 20  llocated from.  
1e30: 2a 2a 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  ** the top of th
1e40: 65 20 72 65 67 69 73 74 65 72 20 73 70 61 63 65  e register space
1e50: 2e 20 20 43 75 72 73 6f 72 20 31 20 69 73 20 61  .  Cursor 1 is a
1e60: 74 20 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 31 5d  t Mem[p->nMem-1]
1e70: 2e 0a 20 20 2a 2a 20 43 75 72 73 6f 72 20 32 20  ..  ** Cursor 2 
1e80: 69 73 20 61 74 20 4d 65 6d 5b 70 2d 3e 6e 4d 65  is at Mem[p->nMe
1e90: 6d 2d 32 5d 2e 20 41 6e 64 20 73 6f 20 66 6f 72  m-2]. And so for
1ea0: 74 68 2e 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20 2a  th..  */.  Mem *
1eb0: 70 4d 65 6d 20 3d 20 69 43 75 72 3e 30 20 3f 20  pMem = iCur>0 ? 
1ec0: 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d  &p->aMem[p->nMem
1ed0: 2d 69 43 75 72 5d 20 3a 20 70 2d 3e 61 4d 65 6d  -iCur] : p->aMem
1ee0: 3b 0a 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a  ;..  int nByte;.
1ef0: 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1f00: 78 20 3d 20 30 3b 0a 20 20 6e 42 79 74 65 20 3d  x = 0;.  nByte =
1f10: 20 0a 20 20 20 20 20 20 52 4f 55 4e 44 38 28 73   .      ROUND8(s
1f20: 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72  izeof(VdbeCursor
1f30: 29 29 20 2b 20 32 2a 73 69 7a 65 6f 66 28 75 33  )) + 2*sizeof(u3
1f40: 32 29 2a 6e 46 69 65 6c 64 20 2b 20 0a 20 20 20  2)*nField + .   
1f50: 20 20 20 28 65 43 75 72 54 79 70 65 3d 3d 43 55     (eCurType==CU
1f60: 52 54 59 50 45 5f 42 54 52 45 45 3f 73 71 6c 69  RTYPE_BTREE?sqli
1f70: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 53 69  te3BtreeCursorSi
1f80: 7a 65 28 29 3a 30 29 3b 0a 0a 20 20 61 73 73 65  ze():0);..  asse
1f90: 72 74 28 20 69 43 75 72 3e 3d 30 20 26 26 20 69  rt( iCur>=0 && i
1fa0: 43 75 72 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  Cur<p->nCursor )
1fb0: 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72  ;.  if( p->apCsr
1fc0: 5b 69 43 75 72 5d 20 29 7b 20 2f 2a 4f 50 54 49  [iCur] ){ /*OPTI
1fd0: 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53  MIZATION-IF-FALS
1fe0: 45 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56  E*/.    sqlite3V
1ff0: 64 62 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c  dbeFreeCursor(p,
2000: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 29   p->apCsr[iCur])
2010: 3b 0a 20 20 20 20 70 2d 3e 61 70 43 73 72 5b 69  ;.    p->apCsr[i
2020: 43 75 72 5d 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Cur] = 0;.  }.  
2030: 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 73  if( SQLITE_OK==s
2040: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65  qlite3VdbeMemCle
2050: 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4d 65 6d  arAndResize(pMem
2060: 2c 20 6e 42 79 74 65 29 20 29 7b 0a 20 20 20 20  , nByte) ){.    
2070: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d  p->apCsr[iCur] =
2080: 20 70 43 78 20 3d 20 28 56 64 62 65 43 75 72 73   pCx = (VdbeCurs
2090: 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 20  or*)pMem->z;.   
20a0: 20 6d 65 6d 73 65 74 28 70 43 78 2c 20 30 2c 20   memset(pCx, 0, 
20b0: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
20c0: 72 29 29 3b 0a 20 20 20 20 70 43 78 2d 3e 65 43  r));.    pCx->eC
20d0: 75 72 54 79 70 65 20 3d 20 65 43 75 72 54 79 70  urType = eCurTyp
20e0: 65 3b 0a 20 20 20 20 70 43 78 2d 3e 69 44 62 20  e;.    pCx->iDb 
20f0: 3d 20 69 44 62 3b 0a 20 20 20 20 70 43 78 2d 3e  = iDb;.    pCx->
2100: 6e 46 69 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b  nField = nField;
2110: 0a 20 20 20 20 70 43 78 2d 3e 61 4f 66 66 73 65  .    pCx->aOffse
2120: 74 20 3d 20 26 70 43 78 2d 3e 61 54 79 70 65 5b  t = &pCx->aType[
2130: 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20 69 66 28  nField];.    if(
2140: 20 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59   eCurType==CURTY
2150: 50 45 5f 42 54 52 45 45 20 29 7b 0a 20 20 20 20  PE_BTREE ){.    
2160: 20 20 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f    pCx->uc.pCurso
2170: 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29 0a  r = (BtCursor*).
2180: 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d 2d            &pMem-
2190: 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66  >z[ROUND8(sizeof
21a0: 28 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32 2a  (VdbeCursor))+2*
21b0: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
21c0: 6c 64 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ld];.      sqlit
21d0: 65 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65 72  e3BtreeCursorZer
21e0: 6f 28 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f  o(pCx->uc.pCurso
21f0: 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  r);.    }.  }.  
2200: 72 65 74 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f  return pCx;.}../
2210: 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76  *.** Try to conv
2220: 65 72 74 20 61 20 76 61 6c 75 65 20 69 6e 74 6f  ert a value into
2230: 20 61 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65   a numeric repre
2240: 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 77 65 20  sentation if we 
2250: 63 61 6e 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74  can.** do so wit
2260: 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66  hout loss of inf
2270: 6f 72 6d 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74  ormation.  In ot
2280: 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68  her words, if th
2290: 65 20 73 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b  e string.** look
22a0: 73 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c  s like a number,
22b0: 20 63 6f 6e 76 65 72 74 20 69 74 20 69 6e 74 6f   convert it into
22c0: 20 61 20 6e 75 6d 62 65 72 2e 20 20 49 66 20 69   a number.  If i
22d0: 74 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f  t does not.** lo
22e0: 6f 6b 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72  ok like a number
22f0: 2c 20 6c 65 61 76 65 20 69 74 20 61 6c 6f 6e 65  , leave it alone
2300: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 62  ..**.** If the b
2310: 54 72 79 46 6f 72 49 6e 74 20 66 6c 61 67 20 69  TryForInt flag i
2320: 73 20 74 72 75 65 2c 20 74 68 65 6e 20 65 78 74  s true, then ext
2330: 72 61 20 65 66 66 6f 72 74 20 69 73 20 6d 61 64  ra effort is mad
2340: 65 20 74 6f 20 67 69 76 65 0a 2a 2a 20 61 6e 20  e to give.** an 
2350: 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e  integer represen
2360: 74 61 74 69 6f 6e 2e 20 20 53 74 72 69 6e 67 73  tation.  Strings
2370: 20 74 68 61 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20   that look like 
2380: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 0a 2a  floating point.*
2390: 2a 20 76 61 6c 75 65 73 20 62 75 74 20 77 68 69  * values but whi
23a0: 63 68 20 68 61 76 65 20 6e 6f 20 66 72 61 63 74  ch have no fract
23b0: 69 6f 6e 61 6c 20 63 6f 6d 70 6f 6e 65 6e 74 20  ional component 
23c0: 28 65 78 61 6d 70 6c 65 3a 20 27 34 38 2e 30 30  (example: '48.00
23d0: 27 29 0a 2a 2a 20 77 69 6c 6c 20 68 61 76 65 20  ').** will have 
23e0: 61 20 4d 45 4d 5f 49 6e 74 20 72 65 70 72 65 73  a MEM_Int repres
23f0: 65 6e 74 61 74 69 6f 6e 20 77 68 65 6e 20 62 54  entation when bT
2400: 72 79 46 6f 72 49 6e 74 20 69 73 20 74 72 75 65  ryForInt is true
2410: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 62 54 72 79 46  ..**.** If bTryF
2420: 6f 72 49 6e 74 20 69 73 20 66 61 6c 73 65 2c 20  orInt is false, 
2430: 74 68 65 6e 20 69 66 20 74 68 65 20 69 6e 70 75  then if the inpu
2440: 74 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e  t string contain
2450: 73 20 61 20 64 65 63 69 6d 61 6c 0a 2a 2a 20 70  s a decimal.** p
2460: 6f 69 6e 74 20 6f 72 20 65 78 70 6f 6e 65 6e 74  oint or exponent
2470: 69 61 6c 20 6e 6f 74 61 74 69 6f 6e 2c 20 74 68  ial notation, th
2480: 65 20 72 65 73 75 6c 74 20 69 73 20 6f 6e 6c 79  e result is only
2490: 20 4d 45 4d 5f 52 65 61 6c 2c 20 65 76 65 6e 0a   MEM_Real, even.
24a0: 2a 2a 20 69 66 20 74 68 65 72 65 20 69 73 20 61  ** if there is a
24b0: 6e 20 65 78 61 63 74 20 69 6e 74 65 67 65 72 20  n exact integer 
24c0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
24d0: 66 20 74 68 65 20 71 75 61 6e 74 69 74 79 2e 0a  f the quantity..
24e0: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61  */.static void a
24f0: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
2500: 69 74 79 28 4d 65 6d 20 2a 70 52 65 63 2c 20 69  ity(Mem *pRec, i
2510: 6e 74 20 62 54 72 79 46 6f 72 49 6e 74 29 7b 0a  nt bTryForInt){.
2520: 20 20 64 6f 75 62 6c 65 20 72 56 61 6c 75 65 3b    double rValue;
2530: 0a 20 20 69 36 34 20 69 56 61 6c 75 65 3b 0a 20  .  i64 iValue;. 
2540: 20 75 38 20 65 6e 63 20 3d 20 70 52 65 63 2d 3e   u8 enc = pRec->
2550: 65 6e 63 3b 0a 20 20 61 73 73 65 72 74 28 20 28  enc;.  assert( (
2560: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pRec->flags & (M
2570: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 49 6e 74 7c 4d  EM_Str|MEM_Int|M
2580: 45 4d 5f 52 65 61 6c 29 29 3d 3d 4d 45 4d 5f 53  EM_Real))==MEM_S
2590: 74 72 20 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  tr );.  if( sqli
25a0: 74 65 33 41 74 6f 46 28 70 52 65 63 2d 3e 7a 2c  te3AtoF(pRec->z,
25b0: 20 26 72 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e   &rValue, pRec->
25c0: 6e 2c 20 65 6e 63 29 3d 3d 30 20 29 20 72 65 74  n, enc)==0 ) ret
25d0: 75 72 6e 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71  urn;.  if( 0==sq
25e0: 6c 69 74 65 33 41 74 6f 69 36 34 28 70 52 65 63  lite3Atoi64(pRec
25f0: 2d 3e 7a 2c 20 26 69 56 61 6c 75 65 2c 20 70 52  ->z, &iValue, pR
2600: 65 63 2d 3e 6e 2c 20 65 6e 63 29 20 29 7b 0a 20  ec->n, enc) ){. 
2610: 20 20 20 70 52 65 63 2d 3e 75 2e 69 20 3d 20 69     pRec->u.i = i
2620: 56 61 6c 75 65 3b 0a 20 20 20 20 70 52 65 63 2d  Value;.    pRec-
2630: 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e  >flags |= MEM_In
2640: 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  t;.  }else{.    
2650: 70 52 65 63 2d 3e 75 2e 72 20 3d 20 72 56 61 6c  pRec->u.r = rVal
2660: 75 65 3b 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c  ue;.    pRec->fl
2670: 61 67 73 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c 3b  ags |= MEM_Real;
2680: 0a 20 20 20 20 69 66 28 20 62 54 72 79 46 6f 72  .    if( bTryFor
2690: 49 6e 74 20 29 20 73 71 6c 69 74 65 33 56 64 62  Int ) sqlite3Vdb
26a0: 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79  eIntegerAffinity
26b0: 28 70 52 65 63 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f  (pRec);.  }.}../
26c0: 2a 0a 2a 2a 20 50 72 6f 63 65 73 73 69 6e 67 20  *.** Processing 
26d0: 69 73 20 64 65 74 65 72 6d 69 6e 65 20 62 79 20  is determine by 
26e0: 74 68 65 20 61 66 66 69 6e 69 74 79 20 70 61 72  the affinity par
26f0: 61 6d 65 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51  ameter:.**.** SQ
2700: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
2710: 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  :.** SQLITE_AFF_
2720: 52 45 41 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f  REAL:.** SQLITE_
2730: 41 46 46 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20  AFF_NUMERIC:.** 
2740: 20 20 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72     Try to conver
2750: 74 20 70 52 65 63 20 74 6f 20 61 6e 20 69 6e 74  t pRec to an int
2760: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
2770: 69 6f 6e 20 6f 72 20 61 20 0a 2a 2a 20 20 20 20  ion or a .**    
2780: 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 72  floating-point r
2790: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66  epresentation if
27a0: 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72   an integer repr
27b0: 65 73 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20 20  esentation.**   
27c0: 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
27d0: 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  .  Note that the
27e0: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
27f0: 6e 74 61 74 69 6f 6e 20 69 73 0a 2a 2a 20 20 20  ntation is.**   
2800: 20 61 6c 77 61 79 73 20 70 72 65 66 65 72 72 65   always preferre
2810: 64 2c 20 65 76 65 6e 20 69 66 20 74 68 65 20 61  d, even if the a
2820: 66 66 69 6e 69 74 79 20 69 73 20 52 45 41 4c 2c  ffinity is REAL,
2830: 20 62 65 63 61 75 73 65 0a 2a 2a 20 20 20 20 61   because.**    a
2840: 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73  n integer repres
2850: 65 6e 74 61 74 69 6f 6e 20 69 73 20 6d 6f 72 65  entation is more
2860: 20 73 70 61 63 65 20 65 66 66 69 63 69 65 6e 74   space efficient
2870: 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20   on disk..**.** 
2880: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 3a  SQLITE_AFF_TEXT:
2890: 0a 2a 2a 20 20 20 20 43 6f 6e 76 65 72 74 20 70  .**    Convert p
28a0: 52 65 63 20 74 6f 20 61 20 74 65 78 74 20 72 65  Rec to a text re
28b0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a  presentation..**
28c0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 42  .** SQLITE_AFF_B
28d0: 4c 4f 42 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70  LOB:.**    No-op
28e0: 2e 20 20 70 52 65 63 20 69 73 20 75 6e 63 68 61  .  pRec is uncha
28f0: 6e 67 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  nged..*/.static 
2900: 76 6f 69 64 20 61 70 70 6c 79 41 66 66 69 6e 69  void applyAffini
2910: 74 79 28 0a 20 20 4d 65 6d 20 2a 70 52 65 63 2c  ty(.  Mem *pRec,
2920: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
2930: 20 76 61 6c 75 65 20 74 6f 20 61 70 70 6c 79 20   value to apply 
2940: 61 66 66 69 6e 69 74 79 20 74 6f 20 2a 2f 0a 20  affinity to */. 
2950: 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 2c 20   char affinity, 
2960: 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69       /* The affi
2970: 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69  nity to be appli
2980: 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 20 20  ed */.  u8 enc  
2990: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
29a0: 73 65 20 74 68 69 73 20 74 65 78 74 20 65 6e 63  se this text enc
29b0: 6f 64 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66  oding */.){.  if
29c0: 28 20 61 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49  ( affinity>=SQLI
29d0: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29  TE_AFF_NUMERIC )
29e0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 61 66  {.    assert( af
29f0: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2a00: 46 46 5f 49 4e 54 45 47 45 52 20 7c 7c 20 61 66  FF_INTEGER || af
2a10: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2a20: 46 46 5f 52 45 41 4c 0a 20 20 20 20 20 20 20 20  FF_REAL.        
2a30: 20 20 20 20 20 7c 7c 20 61 66 66 69 6e 69 74 79       || affinity
2a40: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  ==SQLITE_AFF_NUM
2a50: 45 52 49 43 20 29 3b 0a 20 20 20 20 69 66 28 20  ERIC );.    if( 
2a60: 28 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d  (pRec->flags & M
2a70: 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 20 2f 2a  EM_Int)==0 ){ /*
2a80: 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d  OPTIMIZATION-IF-
2a90: 46 41 4c 53 45 2a 2f 0a 20 20 20 20 20 20 69 66  FALSE*/.      if
2aa0: 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  ( (pRec->flags &
2ab0: 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b   MEM_Real)==0 ){
2ac0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 52 65  .        if( pRe
2ad0: 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53  c->flags & MEM_S
2ae0: 74 72 20 29 20 61 70 70 6c 79 4e 75 6d 65 72 69  tr ) applyNumeri
2af0: 63 41 66 66 69 6e 69 74 79 28 70 52 65 63 2c 31  cAffinity(pRec,1
2b00: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
2b10: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
2b20: 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69  dbeIntegerAffini
2b30: 74 79 28 70 52 65 63 29 3b 0a 20 20 20 20 20 20  ty(pRec);.      
2b40: 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20  }.    }.  }else 
2b50: 69 66 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51  if( affinity==SQ
2b60: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29 7b  LITE_AFF_TEXT ){
2b70: 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 74 74  .    /* Only att
2b80: 65 6d 70 74 20 74 68 65 20 63 6f 6e 76 65 72 73  empt the convers
2b90: 69 6f 6e 20 74 6f 20 54 45 58 54 20 69 66 20 74  ion to TEXT if t
2ba0: 68 65 72 65 20 69 73 20 61 6e 20 69 6e 74 65 67  here is an integ
2bb0: 65 72 20 6f 72 20 72 65 61 6c 0a 20 20 20 20 2a  er or real.    *
2bc0: 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  * representation
2bd0: 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55 4c 4c 20   (blob and NULL 
2be0: 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f 6e 76 65  do not get conve
2bf0: 72 74 65 64 29 20 62 75 74 20 6e 6f 20 73 74 72  rted) but no str
2c00: 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 70 72 65  ing.    ** repre
2c10: 73 65 6e 74 61 74 69 6f 6e 2e 20 20 49 74 20 77  sentation.  It w
2c20: 6f 75 6c 64 20 62 65 20 68 61 72 6d 6c 65 73 73  ould be harmless
2c30: 20 74 6f 20 72 65 70 65 61 74 20 74 68 65 20 63   to repeat the c
2c40: 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 0a 20 20  onversion if .  
2c50: 20 20 2a 2a 20 74 68 65 72 65 20 69 73 20 61 6c    ** there is al
2c60: 72 65 61 64 79 20 61 20 73 74 72 69 6e 67 20 72  ready a string r
2c70: 65 70 2c 20 62 75 74 20 69 74 20 69 73 20 70 6f  ep, but it is po
2c80: 69 6e 74 6c 65 73 73 20 74 6f 20 77 61 73 74 65  intless to waste
2c90: 20 74 68 6f 73 65 0a 20 20 20 20 2a 2a 20 43 50   those.    ** CP
2ca0: 55 20 63 79 63 6c 65 73 2e 20 2a 2f 0a 20 20 20  U cycles. */.   
2cb0: 20 69 66 28 20 30 3d 3d 28 70 52 65 63 2d 3e 66   if( 0==(pRec->f
2cc0: 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 20 29 7b  lags&MEM_Str) ){
2cd0: 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d   /*OPTIMIZATION-
2ce0: 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 20  IF-FALSE*/.     
2cf0: 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67   if( (pRec->flag
2d00: 73 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f  s&(MEM_Real|MEM_
2d10: 49 6e 74 29 29 20 29 7b 0a 20 20 20 20 20 20 20  Int)) ){.       
2d20: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2d30: 74 72 69 6e 67 69 66 79 28 70 52 65 63 2c 20 65  tringify(pRec, e
2d40: 6e 63 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a  nc, 1);.      }.
2d50: 20 20 20 20 7d 0a 20 20 20 20 70 52 65 63 2d 3e      }.    pRec->
2d60: 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 52  flags &= ~(MEM_R
2d70: 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  eal|MEM_Int);.  
2d80: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74  }.}../*.** Try t
2d90: 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20 74 79  o convert the ty
2da0: 70 65 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  pe of a function
2db0: 20 61 72 67 75 6d 65 6e 74 20 6f 72 20 61 20 72   argument or a r
2dc0: 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a 2a 20  esult column.** 
2dd0: 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72  into a numeric r
2de0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20  epresentation.  
2df0: 55 73 65 20 65 69 74 68 65 72 20 49 4e 54 45 47  Use either INTEG
2e00: 45 52 20 6f 72 20 52 45 41 4c 20 77 68 69 63 68  ER or REAL which
2e10: 65 76 65 72 0a 2a 2a 20 69 73 20 61 70 70 72 6f  ever.** is appro
2e20: 70 72 69 61 74 65 2e 20 20 42 75 74 20 6f 6e 6c  priate.  But onl
2e30: 79 20 64 6f 20 74 68 65 20 63 6f 6e 76 65 72 73  y do the convers
2e40: 69 6f 6e 20 69 66 20 69 74 20 69 73 20 70 6f 73  ion if it is pos
2e50: 73 69 62 6c 65 20 77 69 74 68 6f 75 74 0a 2a 2a  sible without.**
2e60: 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61   loss of informa
2e70: 74 69 6f 6e 20 61 6e 64 20 72 65 74 75 72 6e 20  tion and return 
2e80: 74 68 65 20 72 65 76 69 73 65 64 20 74 79 70 65  the revised type
2e90: 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   of the argument
2ea0: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
2eb0: 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63 5f 74  _value_numeric_t
2ec0: 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ype(sqlite3_valu
2ed0: 65 20 2a 70 56 61 6c 29 7b 0a 20 20 69 6e 74 20  e *pVal){.  int 
2ee0: 65 54 79 70 65 20 3d 20 73 71 6c 69 74 65 33 5f  eType = sqlite3_
2ef0: 76 61 6c 75 65 5f 74 79 70 65 28 70 56 61 6c 29  value_type(pVal)
2f00: 3b 0a 20 20 69 66 28 20 65 54 79 70 65 3d 3d 53  ;.  if( eType==S
2f10: 51 4c 49 54 45 5f 54 45 58 54 20 29 7b 0a 20 20  QLITE_TEXT ){.  
2f20: 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20 28 4d    Mem *pMem = (M
2f30: 65 6d 2a 29 70 56 61 6c 3b 0a 20 20 20 20 61 70  em*)pVal;.    ap
2f40: 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
2f50: 74 79 28 70 4d 65 6d 2c 20 30 29 3b 0a 20 20 20  ty(pMem, 0);.   
2f60: 20 65 54 79 70 65 20 3d 20 73 71 6c 69 74 65 33   eType = sqlite3
2f70: 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 56 61 6c  _value_type(pVal
2f80: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
2f90: 65 54 79 70 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  eType;.}../*.** 
2fa0: 45 78 70 6f 72 74 65 64 20 76 65 72 73 69 6f 6e  Exported version
2fb0: 20 6f 66 20 61 70 70 6c 79 41 66 66 69 6e 69 74   of applyAffinit
2fc0: 79 28 29 2e 20 54 68 69 73 20 6f 6e 65 20 77 6f  y(). This one wo
2fd0: 72 6b 73 20 6f 6e 20 73 71 6c 69 74 65 33 5f 76  rks on sqlite3_v
2fe0: 61 6c 75 65 2a 2c 20 0a 2a 2a 20 6e 6f 74 20 74  alue*, .** not t
2ff0: 68 65 20 69 6e 74 65 72 6e 61 6c 20 4d 65 6d 2a  he internal Mem*
3000: 20 74 79 70 65 2e 0a 2a 2f 0a 76 6f 69 64 20 73   type..*/.void s
3010: 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79  qlite3ValueApply
3020: 41 66 66 69 6e 69 74 79 28 0a 20 20 73 71 6c 69  Affinity(.  sqli
3030: 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 2c  te3_value *pVal,
3040: 20 0a 20 20 75 38 20 61 66 66 69 6e 69 74 79 2c   .  u8 affinity,
3050: 20 0a 20 20 75 38 20 65 6e 63 0a 29 7b 0a 20 20   .  u8 enc.){.  
3060: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 28 4d  applyAffinity((M
3070: 65 6d 20 2a 29 70 56 61 6c 2c 20 61 66 66 69 6e  em *)pVal, affin
3080: 69 74 79 2c 20 65 6e 63 29 3b 0a 7d 0a 0a 2f 2a  ity, enc);.}../*
3090: 0a 2a 2a 20 70 4d 65 6d 20 63 75 72 72 65 6e 74  .** pMem current
30a0: 6c 79 20 6f 6e 6c 79 20 68 6f 6c 64 73 20 61 20  ly only holds a 
30b0: 73 74 72 69 6e 67 20 74 79 70 65 20 28 6f 72 20  string type (or 
30c0: 6d 61 79 62 65 20 61 20 42 4c 4f 42 20 74 68 61  maybe a BLOB tha
30d0: 74 20 77 65 20 63 61 6e 0a 2a 2a 20 69 6e 74 65  t we can.** inte
30e0: 72 70 72 65 74 20 61 73 20 61 20 73 74 72 69 6e  rpret as a strin
30f0: 67 20 69 66 20 77 65 20 77 61 6e 74 20 74 6f 29  g if we want to)
3100: 2e 20 20 43 6f 6d 70 75 74 65 20 69 74 73 20 63  .  Compute its c
3110: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a 2a 2a 20  orresponding.** 
3120: 6e 75 6d 65 72 69 63 20 74 79 70 65 2c 20 69 66  numeric type, if
3130: 20 68 61 73 20 6f 6e 65 2e 20 20 53 65 74 20 74   has one.  Set t
3140: 68 65 20 70 4d 65 6d 2d 3e 75 2e 72 20 61 6e 64  he pMem->u.r and
3150: 20 70 4d 65 6d 2d 3e 75 2e 69 20 66 69 65 6c 64   pMem->u.i field
3160: 73 0a 2a 2a 20 61 63 63 6f 72 64 69 6e 67 6c 79  s.** accordingly
3170: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31 36 20  ..*/.static u16 
3180: 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20  SQLITE_NOINLINE 
3190: 63 6f 6d 70 75 74 65 4e 75 6d 65 72 69 63 54 79  computeNumericTy
31a0: 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20  pe(Mem *pMem){. 
31b0: 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e   assert( (pMem->
31c0: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74  flags & (MEM_Int
31d0: 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d 3d 30 20 29  |MEM_Real))==0 )
31e0: 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65  ;.  assert( (pMe
31f0: 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  m->flags & (MEM_
3200: 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 21 3d  Str|MEM_Blob))!=
3210: 30 20 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  0 );.  if( sqlit
3220: 65 33 41 74 6f 46 28 70 4d 65 6d 2d 3e 7a 2c 20  e3AtoF(pMem->z, 
3230: 26 70 4d 65 6d 2d 3e 75 2e 72 2c 20 70 4d 65 6d  &pMem->u.r, pMem
3240: 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63 29 3d  ->n, pMem->enc)=
3250: 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  =0 ){.    return
3260: 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71   0;.  }.  if( sq
3270: 6c 69 74 65 33 41 74 6f 69 36 34 28 70 4d 65 6d  lite3Atoi64(pMem
3280: 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e 69 2c  ->z, &pMem->u.i,
3290: 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e   pMem->n, pMem->
32a0: 65 6e 63 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  enc)==SQLITE_OK 
32b0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 4d 45  ){.    return ME
32c0: 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20 72 65 74  M_Int;.  }.  ret
32d0: 75 72 6e 20 4d 45 4d 5f 52 65 61 6c 3b 0a 7d 0a  urn MEM_Real;.}.
32e0: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  ./*.** Return th
32f0: 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 66  e numeric type f
3300: 6f 72 20 70 4d 65 6d 2c 20 65 69 74 68 65 72 20  or pMem, either 
3310: 4d 45 4d 5f 49 6e 74 20 6f 72 20 4d 45 4d 5f 52  MEM_Int or MEM_R
3320: 65 61 6c 20 6f 72 20 62 6f 74 68 20 6f 72 0a 2a  eal or both or.*
3330: 2a 20 6e 6f 6e 65 2e 20 20 0a 2a 2a 0a 2a 2a 20  * none.  .**.** 
3340: 55 6e 6c 69 6b 65 20 61 70 70 6c 79 4e 75 6d 65  Unlike applyNume
3350: 72 69 63 41 66 66 69 6e 69 74 79 28 29 2c 20 74  ricAffinity(), t
3360: 68 69 73 20 72 6f 75 74 69 6e 65 20 64 6f 65 73  his routine does
3370: 20 6e 6f 74 20 6d 6f 64 69 66 79 20 70 4d 65 6d   not modify pMem
3380: 2d 3e 66 6c 61 67 73 2e 0a 2a 2a 20 42 75 74 20  ->flags..** But 
3390: 69 74 20 64 6f 65 73 20 73 65 74 20 70 4d 65 6d  it does set pMem
33a0: 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e  ->u.r and pMem->
33b0: 75 2e 69 20 61 70 70 72 6f 70 72 69 61 74 65 6c  u.i appropriatel
33c0: 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31 36  y..*/.static u16
33d0: 20 6e 75 6d 65 72 69 63 54 79 70 65 28 4d 65 6d   numericType(Mem
33e0: 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 66 28 20 70   *pMem){.  if( p
33f0: 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  Mem->flags & (ME
3400: 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 20  M_Int|MEM_Real) 
3410: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 70 4d  ){.    return pM
3420: 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  em->flags & (MEM
3430: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 3b 0a  _Int|MEM_Real);.
3440: 20 20 7d 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e    }.  if( pMem->
3450: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72  flags & (MEM_Str
3460: 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a 20 20  |MEM_Blob) ){.  
3470: 20 20 72 65 74 75 72 6e 20 63 6f 6d 70 75 74 65    return compute
3480: 4e 75 6d 65 72 69 63 54 79 70 65 28 70 4d 65 6d  NumericType(pMem
3490: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
34a0: 30 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c  0;.}..#ifdef SQL
34b0: 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20  ITE_DEBUG./*.** 
34c0: 57 72 69 74 65 20 61 20 6e 69 63 65 20 73 74 72  Write a nice str
34d0: 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74 69  ing representati
34e0: 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e  on of the conten
34f0: 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65 6d 0a  ts of cell pMem.
3500: 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72 20 7a  ** into buffer z
3510: 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42 75 66  Buf, length nBuf
3520: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
3530: 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72  3VdbeMemPrettyPr
3540: 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63  int(Mem *pMem, c
3550: 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20 63 68  har *zBuf){.  ch
3560: 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75 66 3b  ar *zCsr = zBuf;
3570: 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65 6d 2d  .  int f = pMem-
3580: 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61 74 69  >flags;..  stati
3590: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f  c const char *co
35a0: 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d  nst encnames[] =
35b0: 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22 2c 20   {"(X)", "(8)", 
35c0: 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36 42 45  "(16LE)", "(16BE
35d0: 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26 4d 45  )"};..  if( f&ME
35e0: 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20 69 6e  M_Blob ){.    in
35f0: 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20 63 3b  t i;.    char c;
3600: 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d  .    if( f & MEM
3610: 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 63 20  _Dyn ){.      c 
3620: 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73  = 'z';.      ass
3630: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53  ert( (f & (MEM_S
3640: 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29  tatic|MEM_Ephem)
3650: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
3660: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74  e if( f & MEM_St
3670: 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20 63 20  atic ){.      c 
3680: 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73  = 't';.      ass
3690: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44  ert( (f & (MEM_D
36a0: 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d  yn|MEM_Ephem))==
36b0: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  0 );.    }else i
36c0: 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d  f( f & MEM_Ephem
36d0: 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 65   ){.      c = 'e
36e0: 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ';.      assert(
36f0: 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69   (f & (MEM_Stati
3700: 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29  c|MEM_Dyn))==0 )
3710: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
3720: 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20 20 20     c = 's';.    
3730: 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  }..    sqlite3_s
3740: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3750: 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a 20 20 20  r, "%c", c);.   
3760: 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33   zCsr += sqlite3
3770: 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a  Strlen30(zCsr);.
3780: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
3790: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20  intf(100, zCsr, 
37a0: 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b  "%d[", pMem->n);
37b0: 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c  .    zCsr += sql
37c0: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73  ite3Strlen30(zCs
37d0: 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b  r);.    for(i=0;
37e0: 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d   i<16 && i<pMem-
37f0: 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  >n; i++){.      
3800: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
3810: 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 30 32  (100, zCsr, "%02
3820: 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d 2d 3e  X", ((int)pMem->
3830: 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b 0a 20  z[i] & 0xFF));. 
3840: 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c       zCsr += sql
3850: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73  ite3Strlen30(zCs
3860: 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f  r);.    }.    fo
3870: 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69  r(i=0; i<16 && i
3880: 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a  <pMem->n; i++){.
3890: 20 20 20 20 20 20 63 68 61 72 20 7a 20 3d 20 70        char z = p
38a0: 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20 20 20  Mem->z[i];.     
38b0: 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a 3e 31   if( z<32 || z>1
38c0: 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d 20 27  26 ) *zCsr++ = '
38d0: 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73 65 20 2a  .';.      else *
38e0: 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20 20 20  zCsr++ = z;.    
38f0: 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  }..    sqlite3_s
3900: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3910: 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63 6e 61 6d  r, "]%s", encnam
3920: 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a  es[pMem->enc]);.
3930: 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69      zCsr += sqli
3940: 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72  te3Strlen30(zCsr
3950: 29 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  );.    if( f & M
3960: 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20  EM_Zero ){.     
3970: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
3980: 66 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b 25 64  f(100, zCsr,"+%d
3990: 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72 6f  z",pMem->u.nZero
39a0: 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d  );.      zCsr +=
39b0: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
39c0: 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20  (zCsr);.    }.  
39d0: 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27 3b 0a    *zCsr = '\0';.
39e0: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
39f0: 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 69  MEM_Str ){.    i
3a00: 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42 75  nt j, k;.    zBu
3a10: 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20  f[0] = ' ';.    
3a20: 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20  if( f & MEM_Dyn 
3a30: 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d  ){.      zBuf[1]
3a40: 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73   = 'z';.      as
3a50: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
3a60: 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d  Static|MEM_Ephem
3a70: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
3a80: 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53  se if( f & MEM_S
3a90: 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20 7a  tatic ){.      z
3aa0: 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a 20 20  Buf[1] = 't';.  
3ab0: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
3ac0: 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70   (MEM_Dyn|MEM_Ep
3ad0: 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  hem))==0 );.    
3ae0: 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45  }else if( f & ME
3af0: 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20  M_Ephem ){.     
3b00: 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27 3b 0a   zBuf[1] = 'e';.
3b10: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
3b20: 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d   & (MEM_Static|M
3b30: 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20  EM_Dyn))==0 );. 
3b40: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
3b50: 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b 0a 20  zBuf[1] = 's';. 
3b60: 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32 3b 0a     }.    k = 2;.
3b70: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
3b80: 69 6e 74 66 28 31 30 30 2c 20 26 7a 42 75 66 5b  intf(100, &zBuf[
3b90: 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d 2d 3e  k], "%d", pMem->
3ba0: 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c  n);.    k += sql
3bb0: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42  ite3Strlen30(&zB
3bc0: 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66  uf[k]);.    zBuf
3bd0: 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20 20 20  [k++] = '[';.   
3be0: 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35 20 26   for(j=0; j<15 &
3bf0: 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b  & j<pMem->n; j++
3c00: 29 7b 0a 20 20 20 20 20 20 75 38 20 63 20 3d 20  ){.      u8 c = 
3c10: 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20 20  pMem->z[j];.    
3c20: 20 20 69 66 28 20 63 3e 3d 30 78 32 30 20 26 26    if( c>=0x20 &&
3c30: 20 63 3c 30 78 37 66 20 29 7b 0a 20 20 20 20 20   c<0x7f ){.     
3c40: 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 63     zBuf[k++] = c
3c50: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
3c60: 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d         zBuf[k++]
3c70: 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 7d 0a   = '.';.      }.
3c80: 20 20 20 20 7d 0a 20 20 20 20 7a 42 75 66 5b 6b      }.    zBuf[k
3c90: 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20 20 73  ++] = ']';.    s
3ca0: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
3cb0: 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20 65 6e  100,&zBuf[k], en
3cc0: 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63  cnames[pMem->enc
3cd0: 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c  ]);.    k += sql
3ce0: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42  ite3Strlen30(&zB
3cf0: 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66  uf[k]);.    zBuf
3d00: 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d  [k++] = 0;.  }.}
3d10: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
3d20: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a  SQLITE_DEBUG./*.
3d30: 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 76 61 6c  ** Print the val
3d40: 75 65 20 6f 66 20 61 20 72 65 67 69 73 74 65 72  ue of a register
3d50: 20 66 6f 72 20 74 72 61 63 69 6e 67 20 70 75 72   for tracing pur
3d60: 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74 69 63  poses:.*/.static
3d70: 20 76 6f 69 64 20 6d 65 6d 54 72 61 63 65 50 72   void memTracePr
3d80: 69 6e 74 28 4d 65 6d 20 2a 70 29 7b 0a 20 20 69  int(Mem *p){.  i
3d90: 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  f( p->flags & ME
3da0: 4d 5f 55 6e 64 65 66 69 6e 65 64 20 29 7b 0a 20  M_Undefined ){. 
3db0: 20 20 20 70 72 69 6e 74 66 28 22 20 75 6e 64 65     printf(" unde
3dc0: 66 69 6e 65 64 22 29 3b 0a 20 20 7d 65 6c 73 65  fined");.  }else
3dd0: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3de0: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
3df0: 70 72 69 6e 74 66 28 22 20 4e 55 4c 4c 22 29 3b  printf(" NULL");
3e00: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28 70 2d  .  }else if( (p-
3e10: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e  >flags & (MEM_In
3e20: 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28 4d 45  t|MEM_Str))==(ME
3e30: 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 20 29  M_Int|MEM_Str) )
3e40: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 73  {.    printf(" s
3e50: 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29  i:%lld", p->u.i)
3e60: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d  ;.  }else if( p-
3e70: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
3e80: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
3e90: 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69   i:%lld", p->u.i
3ea0: 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
3eb0: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
3ec0: 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20 69 66  POINT.  }else if
3ed0: 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ( p->flags & MEM
3ee0: 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70 72 69  _Real ){.    pri
3ef0: 6e 74 66 28 22 20 72 3a 25 67 22 2c 20 70 2d 3e  ntf(" r:%g", p->
3f00: 75 2e 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d  u.r);.#endif.  }
3f10: 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67  else if( p->flag
3f20: 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 20 29  s & MEM_RowSet )
3f30: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 28  {.    printf(" (
3f40: 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d 65 6c  rowset)");.  }el
3f50: 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a 42 75  se{.    char zBu
3f60: 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71 6c 69  f[200];.    sqli
3f70: 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79  te3VdbeMemPretty
3f80: 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29 3b 0a  Print(p, zBuf);.
3f90: 20 20 20 20 70 72 69 6e 74 66 28 22 20 25 73 22      printf(" %s"
3fa0: 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 20 20 69  , zBuf);.  }.  i
3fb0: 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  f( p->flags & ME
3fc0: 4d 5f 53 75 62 74 79 70 65 20 29 20 70 72 69 6e  M_Subtype ) prin
3fd0: 74 66 28 22 20 73 75 62 74 79 70 65 3d 30 78 25  tf(" subtype=0x%
3fe0: 30 32 78 22 2c 20 70 2d 3e 65 53 75 62 74 79 70  02x", p->eSubtyp
3ff0: 65 29 3b 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69  e);.}.static voi
4000: 64 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28  d registerTrace(
4010: 69 6e 74 20 69 52 65 67 2c 20 4d 65 6d 20 2a 70  int iReg, Mem *p
4020: 29 7b 0a 20 20 70 72 69 6e 74 66 28 22 52 45 47  ){.  printf("REG
4030: 5b 25 64 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b  [%d] = ", iReg);
4040: 0a 20 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74  .  memTracePrint
4050: 28 70 29 3b 0a 20 20 70 72 69 6e 74 66 28 22 5c  (p);.  printf("\
4060: 6e 22 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  n");.}.#endif..#
4070: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
4080: 55 47 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47  UG.#  define REG
4090: 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29  ISTER_TRACE(R,M)
40a0: 20 69 66 28 64 62 2d 3e 66 6c 61 67 73 26 53 51   if(db->flags&SQ
40b0: 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 29 72  LITE_VdbeTrace)r
40c0: 65 67 69 73 74 65 72 54 72 61 63 65 28 52 2c 4d  egisterTrace(R,M
40d0: 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  ).#else.#  defin
40e0: 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45  e REGISTER_TRACE
40f0: 28 52 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 0a 23  (R,M).#endif...#
4100: 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49  ifdef VDBE_PROFI
4110: 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77 74 69 6d  LE../* .** hwtim
4120: 65 2e 68 20 63 6f 6e 74 61 69 6e 73 20 69 6e 6c  e.h contains inl
4130: 69 6e 65 20 61 73 73 65 6d 62 6c 65 72 20 63 6f  ine assembler co
4140: 64 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e 74  de for implement
4150: 69 6e 67 20 0a 2a 2a 20 68 69 67 68 2d 70 65 72  ing .** high-per
4160: 66 6f 72 6d 61 6e 63 65 20 74 69 6d 69 6e 67 20  formance timing 
4170: 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23 69 6e  routines..*/.#in
4180: 63 6c 75 64 65 20 22 68 77 74 69 6d 65 2e 68 22  clude "hwtime.h"
4190: 0a 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ..#endif..#ifnde
41a0: 66 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 54  f NDEBUG./*.** T
41b0: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
41c0: 6f 6e 6c 79 20 63 61 6c 6c 65 64 20 66 72 6f 6d  only called from
41d0: 20 77 69 74 68 69 6e 20 61 6e 20 61 73 73 65 72   within an asser
41e0: 74 28 29 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  t() expression. 
41f0: 49 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74 68 61  It.** checks tha
4200: 74 20 74 68 65 20 73 71 6c 69 74 65 33 2e 6e 54  t the sqlite3.nT
4210: 72 61 6e 73 61 63 74 69 6f 6e 20 76 61 72 69 61  ransaction varia
4220: 62 6c 65 20 69 73 20 63 6f 72 72 65 63 74 6c 79  ble is correctly
4230: 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e   set to.** the n
4240: 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61  umber of non-tra
4250: 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
4260: 6e 74 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  nts currently in
4270: 20 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b 65 64 20   the .** linked 
4280: 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74  list starting at
4290: 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f   sqlite3.pSavepo
42a0: 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55 73 61 67  int..** .** Usag
42b0: 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73  e:.**.**     ass
42c0: 65 72 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f  ert( checkSavepo
42d0: 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a  intCount(db) );.
42e0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63 68  */.static int ch
42f0: 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e  eckSavepointCoun
4300: 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a  t(sqlite3 *db){.
4310: 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20 20 53    int n = 0;.  S
4320: 61 76 65 70 6f 69 6e 74 20 2a 70 3b 0a 20 20 66  avepoint *p;.  f
4330: 6f 72 28 70 3d 64 62 2d 3e 70 53 61 76 65 70 6f  or(p=db->pSavepo
4340: 69 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e 70 4e 65  int; p; p=p->pNe
4350: 78 74 29 20 6e 2b 2b 3b 0a 20 20 61 73 73 65 72  xt) n++;.  asser
4360: 74 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53 61 76 65  t( n==(db->nSave
4370: 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 69 73 54 72  point + db->isTr
4380: 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
4390: 6e 74 29 20 29 3b 0a 20 20 72 65 74 75 72 6e 20  nt) );.  return 
43a0: 31 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  1;.}.#endif../*.
43b0: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 72 65  ** Return the re
43c0: 67 69 73 74 65 72 20 6f 66 20 70 4f 70 2d 3e 70  gister of pOp->p
43d0: 32 20 61 66 74 65 72 20 66 69 72 73 74 20 70 72  2 after first pr
43e0: 65 70 61 72 69 6e 67 20 69 74 20 74 6f 20 62 65  eparing it to be
43f0: 0a 2a 2a 20 6f 76 65 72 77 72 69 74 74 65 6e 20  .** overwritten 
4400: 77 69 74 68 20 61 6e 20 69 6e 74 65 67 65 72 20  with an integer 
4410: 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  value..*/.static
4420: 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45   SQLITE_NOINLINE
4430: 20 4d 65 6d 20 2a 6f 75 74 32 50 72 65 72 65 6c   Mem *out2Prerel
4440: 65 61 73 65 57 69 74 68 43 6c 65 61 72 28 4d 65  easeWithClear(Me
4450: 6d 20 2a 70 4f 75 74 29 7b 0a 20 20 73 71 6c 69  m *pOut){.  sqli
4460: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
4470: 6c 28 70 4f 75 74 29 3b 0a 20 20 70 4f 75 74 2d  l(pOut);.  pOut-
4480: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
4490: 3b 0a 20 20 72 65 74 75 72 6e 20 70 4f 75 74 3b  ;.  return pOut;
44a0: 0a 7d 0a 73 74 61 74 69 63 20 4d 65 6d 20 2a 6f  .}.static Mem *o
44b0: 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 56 64  ut2Prerelease(Vd
44c0: 62 65 20 2a 70 2c 20 56 64 62 65 4f 70 20 2a 70  be *p, VdbeOp *p
44d0: 4f 70 29 7b 0a 20 20 4d 65 6d 20 2a 70 4f 75 74  Op){.  Mem *pOut
44e0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
44f0: 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  >p2>0 );.  asser
4500: 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e  t( pOp->p2<=(p->
4510: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
4520: 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 20 3d  sor) );.  pOut =
4530: 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
4540: 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  2];.  memAboutTo
4550: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
4560: 0a 20 20 69 66 28 20 56 64 62 65 4d 65 6d 44 79  .  if( VdbeMemDy
4570: 6e 61 6d 69 63 28 70 4f 75 74 29 20 29 7b 20 2f  namic(pOut) ){ /
4580: 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46  *OPTIMIZATION-IF
4590: 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 72 65 74  -FALSE*/.    ret
45a0: 75 72 6e 20 6f 75 74 32 50 72 65 72 65 6c 65 61  urn out2Prerelea
45b0: 73 65 57 69 74 68 43 6c 65 61 72 28 70 4f 75 74  seWithClear(pOut
45c0: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
45d0: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
45e0: 4d 5f 49 6e 74 3b 0a 20 20 20 20 72 65 74 75 72  M_Int;.    retur
45f0: 6e 20 70 4f 75 74 3b 0a 20 20 7d 0a 7d 0a 0a 0a  n pOut;.  }.}...
4600: 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 61 73  /*.** Execute as
4610: 20 6d 75 63 68 20 6f 66 20 61 20 56 44 42 45 20   much of a VDBE 
4620: 70 72 6f 67 72 61 6d 20 61 73 20 77 65 20 63 61  program as we ca
4630: 6e 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68  n..** This is th
4640: 65 20 63 6f 72 65 20 6f 66 20 73 71 6c 69 74 65  e core of sqlite
4650: 33 5f 73 74 65 70 28 29 2e 20 20 0a 2a 2f 0a 69  3_step().  .*/.i
4660: 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 45 78  nt sqlite3VdbeEx
4670: 65 63 28 0a 20 20 56 64 62 65 20 2a 70 20 20 20  ec(.  Vdbe *p   
4680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4690: 20 2f 2a 20 54 68 65 20 56 44 42 45 20 2a 2f 0a   /* The VDBE */.
46a0: 29 7b 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20 70  ){.  Op *aOp = p
46b0: 2d 3e 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20  ->aOp;          
46c0: 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4f  /* Copy of p->aO
46d0: 70 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 20 3d  p */.  Op *pOp =
46e0: 20 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20 20   aOp;           
46f0: 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70 65    /* Current ope
4700: 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 20 64 65  ration */.#if de
4710: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
4720: 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 56  UG) || defined(V
4730: 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a 20 20 4f  DBE_PROFILE).  O
4740: 70 20 2a 70 4f 72 69 67 4f 70 3b 20 20 20 20 20  p *pOrigOp;     
4750: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
4760: 75 65 20 6f 66 20 70 4f 70 20 61 74 20 74 68 65  ue of pOp at the
4770: 20 74 6f 70 20 6f 66 20 74 68 65 20 6c 6f 6f 70   top of the loop
4780: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64 65   */.#endif.#ifde
4790: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
47a0: 20 69 6e 74 20 6e 45 78 74 72 61 44 65 6c 65 74   int nExtraDelet
47b0: 65 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 56  e = 0;      /* V
47c0: 65 72 69 66 69 65 73 20 46 4f 52 44 45 4c 45 54  erifies FORDELET
47d0: 45 20 61 6e 64 20 41 55 58 44 45 4c 45 54 45 20  E and AUXDELETE 
47e0: 66 6c 61 67 73 20 2a 2f 0a 23 65 6e 64 69 66 0a  flags */.#endif.
47f0: 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54    int rc = SQLIT
4800: 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20 2f 2a 20  E_OK;        /* 
4810: 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
4820: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  */.  sqlite3 *db
4830: 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20 20 20 20   = p->db;       
4840: 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
4850: 2a 2f 0a 20 20 75 38 20 72 65 73 65 74 53 63 68  */.  u8 resetSch
4860: 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 30 3b 20  emaOnFault = 0; 
4870: 2f 2a 20 52 65 73 65 74 20 73 63 68 65 6d 61 20  /* Reset schema 
4880: 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 69  after an error i
4890: 66 20 70 6f 73 69 74 69 76 65 20 2a 2f 0a 20 20  f positive */.  
48a0: 75 38 20 65 6e 63 6f 64 69 6e 67 20 3d 20 45 4e  u8 encoding = EN
48b0: 43 28 64 62 29 3b 20 20 20 20 20 2f 2a 20 54 68  C(db);     /* Th
48c0: 65 20 64 61 74 61 62 61 73 65 20 65 6e 63 6f 64  e database encod
48d0: 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 43 6f  ing */.  int iCo
48e0: 6d 70 61 72 65 20 3d 20 30 3b 20 20 20 20 20 20  mpare = 0;      
48f0: 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66      /* Result of
4900: 20 6c 61 73 74 20 4f 50 5f 43 6f 6d 70 61 72 65   last OP_Compare
4910: 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 20 20   operation */.  
4920: 75 6e 73 69 67 6e 65 64 20 6e 56 6d 53 74 65 70  unsigned nVmStep
4930: 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e 75   = 0;      /* Nu
4940: 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20  mber of virtual 
4950: 6d 61 63 68 69 6e 65 20 73 74 65 70 73 20 2a 2f  machine steps */
4960: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
4970: 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41  OMIT_PROGRESS_CA
4980: 4c 4c 42 41 43 4b 0a 20 20 75 6e 73 69 67 6e 65  LLBACK.  unsigne
4990: 64 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74  d nProgressLimit
49a0: 20 3d 20 30 3b 2f 2a 20 49 6e 76 6f 6b 65 20 78   = 0;/* Invoke x
49b0: 50 72 6f 67 72 65 73 73 28 29 20 77 68 65 6e 20  Progress() when 
49c0: 6e 56 6d 53 74 65 70 20 72 65 61 63 68 65 73 20  nVmStep reaches 
49d0: 74 68 69 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  this */.#endif. 
49e0: 20 4d 65 6d 20 2a 61 4d 65 6d 20 3d 20 70 2d 3e   Mem *aMem = p->
49f0: 61 4d 65 6d 3b 20 20 20 20 20 20 20 2f 2a 20 43  aMem;       /* C
4a00: 6f 70 79 20 6f 66 20 70 2d 3e 61 4d 65 6d 20 2a  opy of p->aMem *
4a10: 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 20 3d 20  /.  Mem *pIn1 = 
4a20: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
4a30: 2a 20 31 73 74 20 69 6e 70 75 74 20 6f 70 65 72  * 1st input oper
4a40: 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49  and */.  Mem *pI
4a50: 6e 32 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  n2 = 0;         
4a60: 20 20 20 20 2f 2a 20 32 6e 64 20 69 6e 70 75 74      /* 2nd input
4a70: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65   operand */.  Me
4a80: 6d 20 2a 70 49 6e 33 20 3d 20 30 3b 20 20 20 20  m *pIn3 = 0;    
4a90: 20 20 20 20 20 20 20 20 20 2f 2a 20 33 72 64 20           /* 3rd 
4aa0: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
4ab0: 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20 3d 20 30  .  Mem *pOut = 0
4ac0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
4ad0: 20 4f 75 74 70 75 74 20 6f 70 65 72 61 6e 64 20   Output operand 
4ae0: 2a 2f 0a 20 20 69 6e 74 20 2a 61 50 65 72 6d 75  */.  int *aPermu
4af0: 74 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  te = 0;         
4b00: 2f 2a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f  /* Permutation o
4b10: 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 4f 50  f columns for OP
4b20: 5f 43 6f 6d 70 61 72 65 20 2a 2f 0a 20 20 69 36  _Compare */.  i6
4b30: 34 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62  4 lastRowid = db
4b40: 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 20 20 2f 2a  ->lastRowid;  /*
4b50: 20 53 61 76 65 64 20 76 61 6c 75 65 20 6f 66 20   Saved value of 
4b60: 74 68 65 20 6c 61 73 74 20 69 6e 73 65 72 74 20  the last insert 
4b70: 52 4f 57 49 44 20 2a 2f 0a 23 69 66 64 65 66 20  ROWID */.#ifdef 
4b80: 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 75  VDBE_PROFILE.  u
4b90: 36 34 20 73 74 61 72 74 3b 20 20 20 20 20 20 20  64 start;       
4ba0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 50 55            /* CPU
4bb0: 20 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61 74 20   clock count at 
4bc0: 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65 20  start of opcode 
4bd0: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 2a 2a  */.#endif.  /***
4be0: 20 49 4e 53 45 52 54 20 53 54 41 43 4b 20 55 4e   INSERT STACK UN
4bf0: 49 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a 0a 20  ION HERE ***/.. 
4c00: 20 61 73 73 65 72 74 28 20 70 2d 3e 6d 61 67 69   assert( p->magi
4c10: 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55  c==VDBE_MAGIC_RU
4c20: 4e 20 29 3b 20 20 2f 2a 20 73 71 6c 69 74 65 33  N );  /* sqlite3
4c30: 5f 73 74 65 70 28 29 20 76 65 72 69 66 69 65 73  _step() verifies
4c40: 20 74 68 69 73 20 2a 2f 0a 20 20 73 71 6c 69 74   this */.  sqlit
4c50: 65 33 56 64 62 65 45 6e 74 65 72 28 70 29 3b 0a  e3VdbeEnter(p);.
4c60: 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c    if( p->rc==SQL
4c70: 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20  ITE_NOMEM ){.   
4c80: 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73   /* This happens
4c90: 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 69   if a malloc() i
4ca0: 6e 73 69 64 65 20 61 20 63 61 6c 6c 20 74 6f 20  nside a call to 
4cb0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
4cc0: 65 78 74 28 29 20 6f 72 0a 20 20 20 20 2a 2a 20  ext() or.    ** 
4cd0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
4ce0: 65 78 74 31 36 28 29 20 66 61 69 6c 65 64 2e 20  ext16() failed. 
4cf0: 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f   */.    goto no_
4d00: 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  mem;.  }.  asser
4d10: 74 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45  t( p->rc==SQLITE
4d20: 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63 26 30 78  _OK || (p->rc&0x
4d30: 66 66 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59  ff)==SQLITE_BUSY
4d40: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
4d50: 3e 62 49 73 52 65 61 64 65 72 20 7c 7c 20 70 2d  >bIsReader || p-
4d60: 3e 72 65 61 64 4f 6e 6c 79 21 3d 30 20 29 3b 0a  >readOnly!=0 );.
4d70: 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45    p->rc = SQLITE
4d80: 5f 4f 4b 3b 0a 20 20 70 2d 3e 69 43 75 72 72 65  _OK;.  p->iCurre
4d90: 6e 74 54 69 6d 65 20 3d 20 30 3b 0a 20 20 61 73  ntTime = 0;.  as
4da0: 73 65 72 74 28 20 70 2d 3e 65 78 70 6c 61 69 6e  sert( p->explain
4db0: 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e 70 52 65 73  ==0 );.  p->pRes
4dc0: 75 6c 74 53 65 74 20 3d 20 30 3b 0a 20 20 64 62  ultSet = 0;.  db
4dd0: 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42  ->busyHandler.nB
4de0: 75 73 79 20 3d 20 30 3b 0a 20 20 69 66 28 20 64  usy = 0;.  if( d
4df0: 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70  b->u1.isInterrup
4e00: 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  ted ) goto abort
4e10: 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70  _due_to_interrup
4e20: 74 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  t;.  sqlite3Vdbe
4e30: 49 4f 54 72 61 63 65 53 71 6c 28 70 29 3b 0a 23  IOTraceSql(p);.#
4e40: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
4e50: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
4e60: 42 41 43 4b 0a 20 20 69 66 28 20 64 62 2d 3e 78  BACK.  if( db->x
4e70: 50 72 6f 67 72 65 73 73 20 29 7b 0a 20 20 20 20  Progress ){.    
4e80: 75 33 32 20 69 50 72 69 6f 72 20 3d 20 70 2d 3e  u32 iPrior = p->
4e90: 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f  aCounter[SQLITE_
4ea0: 53 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f 53 54  STMTSTATUS_VM_ST
4eb0: 45 50 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  EP];.    assert(
4ec0: 20 30 20 3c 20 64 62 2d 3e 6e 50 72 6f 67 72 65   0 < db->nProgre
4ed0: 73 73 4f 70 73 20 29 3b 0a 20 20 20 20 6e 50 72  ssOps );.    nPr
4ee0: 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 64 62  ogressLimit = db
4ef0: 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 2d  ->nProgressOps -
4f00: 20 28 69 50 72 69 6f 72 20 25 20 64 62 2d 3e 6e   (iPrior % db->n
4f10: 50 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a 20 20  ProgressOps);.  
4f20: 7d 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  }.#endif.#ifdef 
4f30: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 73  SQLITE_DEBUG.  s
4f40: 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67  qlite3BeginBenig
4f50: 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 69 66 28  nMalloc();.  if(
4f60: 20 70 2d 3e 70 63 3d 3d 30 0a 20 20 20 26 26 20   p->pc==0.   && 
4f70: 28 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20  (p->db->flags & 
4f80: 28 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74  (SQLITE_VdbeList
4f90: 69 6e 67 7c 53 51 4c 49 54 45 5f 56 64 62 65 45  ing|SQLITE_VdbeE
4fa0: 51 50 7c 53 51 4c 49 54 45 5f 56 64 62 65 54 72  QP|SQLITE_VdbeTr
4fb0: 61 63 65 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20  ace))!=0.  ){.  
4fc0: 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 69 6e 74    int i;.    int
4fd0: 20 6f 6e 63 65 20 3d 20 31 3b 0a 20 20 20 20 73   once = 1;.    s
4fe0: 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 53  qlite3VdbePrintS
4ff0: 71 6c 28 70 29 3b 0a 20 20 20 20 69 66 28 20 70  ql(p);.    if( p
5000: 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51  ->db->flags & SQ
5010: 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67  LITE_VdbeListing
5020: 20 29 7b 0a 20 20 20 20 20 20 70 72 69 6e 74 66   ){.      printf
5030: 28 22 56 44 42 45 20 50 72 6f 67 72 61 6d 20 4c  ("VDBE Program L
5040: 69 73 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20  isting:\n");.   
5050: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d     for(i=0; i<p-
5060: 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  >nOp; i++){.    
5070: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
5080: 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 69  rintOp(stdout, i
5090: 2c 20 26 61 4f 70 5b 69 5d 29 3b 0a 20 20 20 20  , &aOp[i]);.    
50a0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66    }.    }.    if
50b0: 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26  ( p->db->flags &
50c0: 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20   SQLITE_VdbeEQP 
50d0: 29 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  ){.      for(i=0
50e0: 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29  ; i<p->nOp; i++)
50f0: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 61 4f  {.        if( aO
5100: 70 5b 69 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  p[i].opcode==OP_
5110: 45 78 70 6c 61 69 6e 20 29 7b 0a 20 20 20 20 20  Explain ){.     
5120: 20 20 20 20 20 69 66 28 20 6f 6e 63 65 20 29 20       if( once ) 
5130: 70 72 69 6e 74 66 28 22 56 44 42 45 20 51 75 65  printf("VDBE Que
5140: 72 79 20 50 6c 61 6e 3a 5c 6e 22 29 3b 0a 20 20  ry Plan:\n");.  
5150: 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22          printf("
5160: 25 73 5c 6e 22 2c 20 61 4f 70 5b 69 5d 2e 70 34  %s\n", aOp[i].p4
5170: 2e 7a 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f  .z);.          o
5180: 6e 63 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  nce = 0;.       
5190: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d   }.      }.    }
51a0: 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e  .    if( p->db->
51b0: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
51c0: 64 62 65 54 72 61 63 65 20 29 20 20 70 72 69 6e  dbeTrace )  prin
51d0: 74 66 28 22 56 44 42 45 20 54 72 61 63 65 3a 5c  tf("VDBE Trace:\
51e0: 6e 22 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  n");.  }.  sqlit
51f0: 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
5200: 63 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 66 6f  c();.#endif.  fo
5210: 72 28 70 4f 70 3d 26 61 4f 70 5b 70 2d 3e 70 63  r(pOp=&aOp[p->pc
5220: 5d 3b 20 31 3b 20 70 4f 70 2b 2b 29 7b 0a 20 20  ]; 1; pOp++){.  
5230: 20 20 2f 2a 20 45 72 72 6f 72 73 20 61 72 65 20    /* Errors are 
5240: 64 65 74 65 63 74 65 64 20 62 79 20 69 6e 64 69  detected by indi
5250: 76 69 64 75 61 6c 20 6f 70 63 6f 64 65 73 2c 20  vidual opcodes, 
5260: 77 69 74 68 20 61 6e 20 69 6d 6d 65 64 69 61 74  with an immediat
5270: 65 0a 20 20 20 20 2a 2a 20 6a 75 6d 70 73 20 74  e.    ** jumps t
5280: 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
5290: 72 72 6f 72 2e 20 2a 2f 0a 20 20 20 20 61 73 73  rror. */.    ass
52a0: 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
52b0: 4f 4b 20 29 3b 0a 0a 20 20 20 20 61 73 73 65 72  OK );..    asser
52c0: 74 28 20 70 4f 70 3e 3d 61 4f 70 20 26 26 20 70  t( pOp>=aOp && p
52d0: 4f 70 3c 26 61 4f 70 5b 70 2d 3e 6e 4f 70 5d 29  Op<&aOp[p->nOp])
52e0: 3b 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  ;.#ifdef VDBE_PR
52f0: 4f 46 49 4c 45 0a 20 20 20 20 73 74 61 72 74 20  OFILE.    start 
5300: 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28  = sqlite3Hwtime(
5310: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 6e 56  );.#endif.    nV
5320: 6d 53 74 65 70 2b 2b 3b 0a 23 69 66 64 65 66 20  mStep++;.#ifdef 
5330: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
5340: 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20  MT_SCANSTATUS.  
5350: 20 20 69 66 28 20 70 2d 3e 61 6e 45 78 65 63 20    if( p->anExec 
5360: 29 20 70 2d 3e 61 6e 45 78 65 63 5b 28 69 6e 74  ) p->anExec[(int
5370: 29 28 70 4f 70 2d 61 4f 70 29 5d 2b 2b 3b 0a 23  )(pOp-aOp)]++;.#
5380: 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e  endif..    /* On
5390: 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63 69 6e 67  ly allow tracing
53a0: 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47   if SQLITE_DEBUG
53b0: 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20   is defined..   
53c0: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
53d0: 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20  E_DEBUG.    if( 
53e0: 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
53f0: 54 45 5f 56 64 62 65 54 72 61 63 65 20 29 7b 0a  TE_VdbeTrace ){.
5400: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
5410: 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c  ePrintOp(stdout,
5420: 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
5430: 29 2c 20 70 4f 70 29 3b 0a 20 20 20 20 7d 0a 23  ), pOp);.    }.#
5440: 65 6e 64 69 66 0a 20 20 20 20 20 20 0a 0a 20 20  endif.      ..  
5450: 20 20 2f 2a 20 43 68 65 63 6b 20 74 6f 20 73 65    /* Check to se
5460: 65 20 69 66 20 77 65 20 6e 65 65 64 20 74 6f 20  e if we need to 
5470: 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e 74 65  simulate an inte
5480: 72 72 75 70 74 2e 20 20 54 68 69 73 20 6f 6e 6c  rrupt.  This onl
5490: 79 20 68 61 70 70 65 6e 73 0a 20 20 20 20 2a 2a  y happens.    **
54a0: 20 69 66 20 77 65 20 68 61 76 65 20 61 20 73 70   if we have a sp
54b0: 65 63 69 61 6c 20 74 65 73 74 20 62 75 69 6c 64  ecial test build
54c0: 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20  ..    */.#ifdef 
54d0: 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20  SQLITE_TEST.    
54e0: 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65  if( sqlite3_inte
54f0: 72 72 75 70 74 5f 63 6f 75 6e 74 3e 30 20 29 7b  rrupt_count>0 ){
5500: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69  .      sqlite3_i
5510: 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 2d 2d  nterrupt_count--
5520: 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  ;.      if( sqli
5530: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
5540: 75 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  unt==0 ){.      
5550: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72    sqlite3_interr
5560: 75 70 74 28 64 62 29 3b 0a 20 20 20 20 20 20 7d  upt(db);.      }
5570: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  .    }.#endif.. 
5580: 20 20 20 2f 2a 20 53 61 6e 69 74 79 20 63 68 65     /* Sanity che
5590: 63 6b 69 6e 67 20 6f 6e 20 6f 74 68 65 72 20 6f  cking on other o
55a0: 70 65 72 61 6e 64 73 20 2a 2f 0a 23 69 66 64 65  perands */.#ifde
55b0: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
55c0: 20 20 20 7b 0a 20 20 20 20 20 20 75 38 20 6f 70     {.      u8 op
55d0: 50 72 6f 70 65 72 74 79 20 3d 20 73 71 6c 69 74  Property = sqlit
55e0: 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79  e3OpcodeProperty
55f0: 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 5d 3b 0a 20  [pOp->opcode];. 
5600: 20 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70       if( (opProp
5610: 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 31  erty & OPFLG_IN1
5620: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
5630: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
5640: 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  0 );.        ass
5650: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 28 70  ert( pOp->p1<=(p
5660: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
5670: 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
5680: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
5690: 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  alid(&aMem[pOp->
56a0: 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20  p1]) );.        
56b0: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56  assert( sqlite3V
56c0: 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72  dbeCheckMemInvar
56d0: 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d  iants(&aMem[pOp-
56e0: 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 20  >p1]) );.       
56f0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
5700: 70 4f 70 2d 3e 70 31 2c 20 26 61 4d 65 6d 5b 70  pOp->p1, &aMem[p
5710: 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 20 20 20 20  Op->p1]);.      
5720: 7d 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70 50  }.      if( (opP
5730: 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f  roperty & OPFLG_
5740: 49 4e 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  IN2)!=0 ){.     
5750: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5760: 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20  p2>0 );.        
5770: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c  assert( pOp->p2<
5780: 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
5790: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
57a0: 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
57b0: 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f  IsValid(&aMem[pO
57c0: 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20  p->p2]) );.     
57d0: 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
57e0: 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e  e3VdbeCheckMemIn
57f0: 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70  variants(&aMem[p
5800: 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20  Op->p2]) );.    
5810: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
5820: 43 45 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65  CE(pOp->p2, &aMe
5830: 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20  m[pOp->p2]);.   
5840: 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28     }.      if( (
5850: 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46  opProperty & OPF
5860: 4c 47 5f 49 4e 33 29 21 3d 30 20 29 7b 0a 20 20  LG_IN3)!=0 ){.  
5870: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5880: 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20  p->p3>0 );.     
5890: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
58a0: 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p3<=(p->nMem+1 -
58b0: 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
58c0: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
58d0: 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
58e0: 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20  [pOp->p3]) );.  
58f0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
5900: 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65  lite3VdbeCheckMe
5910: 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65  mInvariants(&aMe
5920: 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20  m[pOp->p3]) );. 
5930: 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f         REGISTER_
5940: 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26  TRACE(pOp->p3, &
5950: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a  aMem[pOp->p3]);.
5960: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
5970: 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20  ( (opProperty & 
5980: 4f 50 46 4c 47 5f 4f 55 54 32 29 21 3d 30 20 29  OPFLG_OUT2)!=0 )
5990: 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
59a0: 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
59b0: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
59c0: 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p2<=(p->nMem
59d0: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
59e0: 20 29 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41   );.        memA
59f0: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
5a00: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b  &aMem[pOp->p2]);
5a10: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
5a20: 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26  f( (opProperty &
5a30: 20 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d 30 20   OPFLG_OUT3)!=0 
5a40: 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
5a50: 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
5a60: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
5a70: 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
5a80: 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
5a90: 29 20 29 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d  ) );.        mem
5aa0: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
5ab0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29   &aMem[pOp->p3])
5ac0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
5ad0: 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
5ae0: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
5af0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 56 44 42 45   || defined(VDBE
5b00: 5f 50 52 4f 46 49 4c 45 29 0a 20 20 20 20 70 4f  _PROFILE).    pO
5b10: 72 69 67 4f 70 20 3d 20 70 4f 70 3b 0a 23 65 6e  rigOp = pOp;.#en
5b20: 64 69 66 0a 20 20 0a 20 20 20 20 73 77 69 74 63  dif.  .    switc
5b30: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
5b40: 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  {../************
5b50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b70: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b80: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b90: 2a 0a 2a 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77  *.** What follow
5ba0: 73 20 69 73 20 61 20 6d 61 73 73 69 76 65 20 73  s is a massive s
5bb0: 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20  witch statement 
5bc0: 77 68 65 72 65 20 65 61 63 68 20 63 61 73 65 20  where each case 
5bd0: 69 6d 70 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20  implements a.** 
5be0: 73 65 70 61 72 61 74 65 20 69 6e 73 74 72 75 63  separate instruc
5bf0: 74 69 6f 6e 20 69 6e 20 74 68 65 20 76 69 72 74  tion in the virt
5c00: 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 66  ual machine.  If
5c10: 20 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75   we follow the u
5c20: 73 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74  sual.** indentat
5c30: 69 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c  ion conventions,
5c40: 20 65 61 63 68 20 63 61 73 65 20 73 68 6f 75 6c   each case shoul
5c50: 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62 79  d be indented by
5c60: 20 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 0a   6 spaces.  But.
5c70: 2a 2a 20 74 68 61 74 20 69 73 20 61 20 6c 6f 74  ** that is a lot
5c80: 20 6f 66 20 77 61 73 74 65 64 20 73 70 61 63 65   of wasted space
5c90: 20 6f 6e 20 74 68 65 20 6c 65 66 74 20 6d 61 72   on the left mar
5ca0: 67 69 6e 2e 20 20 53 6f 20 74 68 65 20 63 6f 64  gin.  So the cod
5cb0: 65 20 77 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20  e within.** the 
5cc0: 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74  switch statement
5cd0: 20 77 69 6c 6c 20 62 72 65 61 6b 20 77 69 74 68   will break with
5ce0: 20 63 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20   convention and 
5cf0: 62 65 20 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41  be flush-left. A
5d00: 6e 6f 74 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f  nother.** big co
5d10: 6d 6d 65 6e 74 20 28 73 69 6d 69 6c 61 72 20 74  mment (similar t
5d20: 6f 20 74 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c  o this one) will
5d30: 20 6d 61 72 6b 20 74 68 65 20 70 6f 69 6e 74 20   mark the point 
5d40: 69 6e 20 74 68 65 20 63 6f 64 65 20 77 68 65 72  in the code wher
5d50: 65 0a 2a 2a 20 77 65 20 74 72 61 6e 73 69 74 69  e.** we transiti
5d60: 6f 6e 20 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61  on back to norma
5d70: 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a  l indentation..*
5d80: 2a 0a 2a 2a 20 54 68 65 20 66 6f 72 6d 61 74 74  *.** The formatt
5d90: 69 6e 67 20 6f 66 20 65 61 63 68 20 63 61 73 65  ing of each case
5da0: 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20   is important.  
5db0: 54 68 65 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72  The makefile for
5dc0: 20 53 51 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72   SQLite.** gener
5dd0: 61 74 65 73 20 74 77 6f 20 43 20 66 69 6c 65 73  ates two C files
5de0: 20 22 6f 70 63 6f 64 65 73 2e 68 22 20 61 6e 64   "opcodes.h" and
5df0: 20 22 6f 70 63 6f 64 65 73 2e 63 22 20 62 79 20   "opcodes.c" by 
5e00: 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a  scanning this.**
5e10: 20 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f   file looking fo
5e20: 72 20 6c 69 6e 65 73 20 74 68 61 74 20 62 65 67  r lines that beg
5e30: 69 6e 20 77 69 74 68 20 22 63 61 73 65 20 4f 50  in with "case OP
5e40: 5f 22 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 73  _".  The opcodes
5e50: 2e 68 20 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c  .h files.** will
5e60: 20 62 65 20 66 69 6c 6c 65 64 20 77 69 74 68 20   be filled with 
5e70: 23 64 65 66 69 6e 65 73 20 74 68 61 74 20 67 69  #defines that gi
5e80: 76 65 20 75 6e 69 71 75 65 20 69 6e 74 65 67 65  ve unique intege
5e90: 72 20 76 61 6c 75 65 73 20 74 6f 20 65 61 63 68  r values to each
5ea0: 0a 2a 2a 20 6f 70 63 6f 64 65 20 61 6e 64 20 74  .** opcode and t
5eb0: 68 65 20 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c  he opcodes.c fil
5ec0: 65 20 69 73 20 66 69 6c 6c 65 64 20 77 69 74 68  e is filled with
5ed0: 20 61 6e 20 61 72 72 61 79 20 6f 66 20 73 74 72   an array of str
5ee0: 69 6e 67 73 20 77 68 65 72 65 0a 2a 2a 20 65 61  ings where.** ea
5ef0: 63 68 20 73 74 72 69 6e 67 20 69 73 20 74 68 65  ch string is the
5f00: 20 73 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66   symbolic name f
5f10: 6f 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  or the correspon
5f20: 64 69 6e 67 20 6f 70 63 6f 64 65 2e 20 20 49 66  ding opcode.  If
5f30: 20 74 68 65 0a 2a 2a 20 63 61 73 65 20 73 74 61   the.** case sta
5f40: 74 65 6d 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77  tement is follow
5f50: 65 64 20 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20  ed by a comment 
5f60: 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 2f 23 20  of the form "/# 
5f70: 73 61 6d 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a  same as ... #/".
5f80: 2a 2a 20 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20  ** that comment 
5f90: 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72  is used to deter
5fa0: 6d 69 6e 65 20 74 68 65 20 70 61 72 74 69 63 75  mine the particu
5fb0: 6c 61 72 20 76 61 6c 75 65 20 6f 66 20 74 68 65  lar value of the
5fc0: 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f   opcode..**.** O
5fd0: 74 68 65 72 20 6b 65 79 77 6f 72 64 73 20 69 6e  ther keywords in
5fe0: 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61   the comment tha
5ff0: 74 20 66 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63  t follows each c
6000: 61 73 65 20 61 72 65 20 75 73 65 64 20 74 6f 0a  ase are used to.
6010: 2a 2a 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65  ** construct the
6020: 20 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a   OPFLG_INITIALIZ
6030: 45 52 20 76 61 6c 75 65 20 74 68 61 74 20 69 6e  ER value that in
6040: 69 74 69 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65  itializes opcode
6050: 50 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b  Property[]..** K
6060: 65 79 77 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a  eywords include:
6070: 20 69 6e 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20   in1, in2, in3, 
6080: 6f 75 74 32 2c 20 6f 75 74 33 2e 20 20 53 65 65  out2, out3.  See
6090: 0a 2a 2a 20 74 68 65 20 6d 6b 6f 70 63 6f 64 65  .** the mkopcode
60a0: 68 2e 61 77 6b 20 73 63 72 69 70 74 20 66 6f 72  h.awk script for
60b0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
60c0: 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44  rmation..**.** D
60d0: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62 6f  ocumentation abo
60e0: 75 74 20 56 44 42 45 20 6f 70 63 6f 64 65 73 20  ut VDBE opcodes 
60f0: 69 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20  is generated by 
6100: 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 20 66 69  scanning this fi
6110: 6c 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65 73 20  le.** for lines 
6120: 6f 66 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 20  of that contain 
6130: 22 4f 70 63 6f 64 65 3a 22 2e 20 20 54 68 61 74  "Opcode:".  That
6140: 20 6c 69 6e 65 20 61 6e 64 20 61 6c 6c 20 73 75   line and all su
6150: 62 73 65 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d  bsequent.** comm
6160: 65 6e 74 20 6c 69 6e 65 73 20 61 72 65 20 75 73  ent lines are us
6170: 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61  ed in the genera
6180: 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 63 6f  tion of the opco
6190: 64 65 2e 68 74 6d 6c 20 64 6f 63 75 6d 65 6e 74  de.html document
61a0: 61 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a  ation.** file..*
61b0: 2a 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a  *.** SUMMARY:.**
61c0: 0a 2a 2a 20 20 20 20 20 46 6f 72 6d 61 74 74 69  .**     Formatti
61d0: 6e 67 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20  ng is important 
61e0: 74 6f 20 73 63 72 69 70 74 73 20 74 68 61 74 20  to scripts that 
61f0: 73 63 61 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a  scan this file..
6200: 2a 2a 20 20 20 20 20 44 6f 20 6e 6f 74 20 64 65  **     Do not de
6210: 76 69 61 74 65 20 66 72 6f 6d 20 74 68 65 20 66  viate from the f
6220: 6f 72 6d 61 74 74 69 6e 67 20 73 74 79 6c 65 20  ormatting style 
6230: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65  currently in use
6240: 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..**.***********
6250: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6260: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6270: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6280: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6290: 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  **/../* Opcode: 
62a0: 20 47 6f 74 6f 20 2a 20 50 32 20 2a 20 2a 20 2a   Goto * P2 * * *
62b0: 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64  .**.** An uncond
62c0: 69 74 69 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f 20  itional jump to 
62d0: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 20 54  address P2..** T
62e0: 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
62f0: 69 6f 6e 20 65 78 65 63 75 74 65 64 20 77 69 6c  ion executed wil
6300: 6c 20 62 65 20 0a 2a 2a 20 74 68 65 20 6f 6e 65  l be .** the one
6310: 20 61 74 20 69 6e 64 65 78 20 50 32 20 66 72 6f   at index P2 fro
6320: 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  m the beginning 
6330: 6f 66 0a 2a 2a 20 74 68 65 20 70 72 6f 67 72 61  of.** the progra
6340: 6d 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20  m..**.** The P1 
6350: 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74  parameter is not
6360: 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64 20 62   actually used b
6370: 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20  y this opcode.  
6380: 48 6f 77 65 76 65 72 2c 20 69 74 0a 2a 2a 20 69  However, it.** i
6390: 73 20 73 6f 6d 65 74 69 6d 65 73 20 73 65 74 20  s sometimes set 
63a0: 74 6f 20 31 20 69 6e 73 74 65 61 64 20 6f 66 20  to 1 instead of 
63b0: 30 20 61 73 20 61 20 68 69 6e 74 20 74 6f 20 74  0 as a hint to t
63c0: 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20  he command-line 
63d0: 73 68 65 6c 6c 0a 2a 2a 20 74 68 61 74 20 74 68  shell.** that th
63e0: 69 73 20 47 6f 74 6f 20 69 73 20 74 68 65 20 62  is Goto is the b
63f0: 6f 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20  ottom of a loop 
6400: 61 6e 64 20 74 68 61 74 20 74 68 65 20 6c 69 6e  and that the lin
6410: 65 73 20 66 72 6f 6d 20 50 32 20 64 6f 77 6e 0a  es from P2 down.
6420: 2a 2a 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e  ** to the curren
6430: 74 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 62 65  t line should be
6440: 20 69 6e 64 65 6e 74 65 64 20 66 6f 72 20 45 58   indented for EX
6450: 50 4c 41 49 4e 20 6f 75 74 70 75 74 2e 0a 2a 2f  PLAIN output..*/
6460: 0a 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b  .case OP_Goto: {
6470: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
6480: 6a 75 6d 70 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f  jump */.jump_to_
6490: 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72  p2_and_check_for
64a0: 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 70 4f  _interrupt:.  pO
64b0: 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32  p = &aOp[pOp->p2
64c0: 20 2d 20 31 5d 3b 0a 0a 20 20 2f 2a 20 4f 70 63   - 1];..  /* Opc
64d0: 6f 64 65 73 20 74 68 61 74 20 61 72 65 20 75 73  odes that are us
64e0: 65 64 20 61 73 20 74 68 65 20 62 6f 74 74 6f 6d  ed as the bottom
64f0: 20 6f 66 20 61 20 6c 6f 6f 70 20 28 4f 50 5f 4e   of a loop (OP_N
6500: 65 78 74 2c 20 4f 50 5f 50 72 65 76 2c 0a 20 20  ext, OP_Prev,.  
6510: 2a 2a 20 4f 50 5f 56 4e 65 78 74 2c 20 4f 50 5f  ** OP_VNext, OP_
6520: 52 6f 77 53 65 74 4e 65 78 74 2c 20 6f 72 20 4f  RowSetNext, or O
6530: 50 5f 53 6f 72 74 65 72 4e 65 78 74 29 20 61 6c  P_SorterNext) al
6540: 6c 20 6a 75 6d 70 20 68 65 72 65 20 75 70 6f 6e  l jump here upon
6550: 0a 20 20 2a 2a 20 63 6f 6d 70 6c 65 74 69 6f 6e  .  ** completion
6560: 2e 20 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20  .  Check to see 
6570: 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  if sqlite3_inter
6580: 72 75 70 74 28 29 20 68 61 73 20 62 65 65 6e 20  rupt() has been 
6590: 63 61 6c 6c 65 64 0a 20 20 2a 2a 20 6f 72 20 69  called.  ** or i
65a0: 66 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  f the progress c
65b0: 61 6c 6c 62 61 63 6b 20 6e 65 65 64 73 20 74 6f  allback needs to
65c0: 20 62 65 20 69 6e 76 6f 6b 65 64 2e 20 0a 20 20   be invoked. .  
65d0: 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 63 6f 64  **.  ** This cod
65e0: 65 20 75 73 65 73 20 75 6e 73 74 72 75 63 74 75  e uses unstructu
65f0: 72 65 64 20 22 67 6f 74 6f 22 20 73 74 61 74 65  red "goto" state
6600: 6d 65 6e 74 73 20 61 6e 64 20 64 6f 65 73 20 6e  ments and does n
6610: 6f 74 20 6c 6f 6f 6b 20 63 6c 65 61 6e 2e 0a 20  ot look clean.. 
6620: 20 2a 2a 20 42 75 74 20 74 68 61 74 20 69 73 20   ** But that is 
6630: 6e 6f 74 20 64 75 65 20 74 6f 20 73 6c 6f 70 70  not due to slopp
6640: 79 20 63 6f 64 69 6e 67 20 68 61 62 69 74 73 2e  y coding habits.
6650: 20 54 68 65 20 63 6f 64 65 20 69 73 20 77 72 69   The code is wri
6660: 74 74 65 6e 20 74 68 69 73 0a 20 20 2a 2a 20 77  tten this.  ** w
6670: 61 79 20 66 6f 72 20 70 65 72 66 6f 72 6d 61 6e  ay for performan
6680: 63 65 2c 20 74 6f 20 61 76 6f 69 64 20 68 61 76  ce, to avoid hav
6690: 69 6e 67 20 74 6f 20 72 75 6e 20 74 68 65 20 69  ing to run the i
66a0: 6e 74 65 72 72 75 70 74 20 61 6e 64 20 70 72 6f  nterrupt and pro
66b0: 67 72 65 73 73 0a 20 20 2a 2a 20 63 68 65 63 6b  gress.  ** check
66c0: 73 20 6f 6e 20 65 76 65 72 79 20 6f 70 63 6f 64  s on every opcod
66d0: 65 2e 20 20 54 68 69 73 20 68 65 6c 70 73 20 73  e.  This helps s
66e0: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 74 6f  qlite3_step() to
66f0: 20 72 75 6e 20 61 62 6f 75 74 20 31 2e 35 25 0a   run about 1.5%.
6700: 20 20 2a 2a 20 66 61 73 74 65 72 20 61 63 63 6f    ** faster acco
6710: 72 64 69 6e 67 20 74 6f 20 22 76 61 6c 67 72 69  rding to "valgri
6720: 6e 64 20 2d 2d 74 6f 6f 6c 3d 63 61 63 68 65 67  nd --tool=cacheg
6730: 72 69 6e 64 22 20 2a 2f 0a 63 68 65 63 6b 5f 66  rind" */.check_f
6740: 6f 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20  or_interrupt:.  
6750: 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74  if( db->u1.isInt
6760: 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20  errupted ) goto 
6770: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74  abort_due_to_int
6780: 65 72 72 75 70 74 3b 0a 23 69 66 6e 64 65 66 20  errupt;.#ifndef 
6790: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47  SQLITE_OMIT_PROG
67a0: 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20  RESS_CALLBACK.  
67b0: 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70 72 6f 67  /* Call the prog
67c0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 69 66  ress callback if
67d0: 20 69 74 20 69 73 20 63 6f 6e 66 69 67 75 72 65   it is configure
67e0: 64 20 61 6e 64 20 74 68 65 20 72 65 71 75 69 72  d and the requir
67f0: 65 64 20 6e 75 6d 62 65 72 0a 20 20 2a 2a 20 6f  ed number.  ** o
6800: 66 20 56 44 42 45 20 6f 70 73 20 68 61 76 65 20  f VDBE ops have 
6810: 62 65 65 6e 20 65 78 65 63 75 74 65 64 20 28 65  been executed (e
6820: 69 74 68 65 72 20 73 69 6e 63 65 20 74 68 69 73  ither since this
6830: 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a 20   invocation of. 
6840: 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 45   ** sqlite3VdbeE
6850: 78 65 63 28 29 20 6f 72 20 73 69 6e 63 65 20 6c  xec() or since l
6860: 61 73 74 20 74 69 6d 65 20 74 68 65 20 70 72 6f  ast time the pro
6870: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 77  gress callback w
6880: 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20 2a 2a  as called)..  **
6890: 20 49 66 20 74 68 65 20 70 72 6f 67 72 65 73 73   If the progress
68a0: 20 63 61 6c 6c 62 61 63 6b 20 72 65 74 75 72 6e   callback return
68b0: 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69 74  s non-zero, exit
68c0: 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   the virtual mac
68d0: 68 69 6e 65 20 77 69 74 68 0a 20 20 2a 2a 20 61  hine with.  ** a
68e0: 20 72 65 74 75 72 6e 20 63 6f 64 65 20 53 51 4c   return code SQL
68f0: 49 54 45 5f 41 42 4f 52 54 2e 0a 20 20 2a 2f 0a  ITE_ABORT..  */.
6900: 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72    if( db->xProgr
6910: 65 73 73 21 3d 30 20 26 26 20 6e 56 6d 53 74 65  ess!=0 && nVmSte
6920: 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69  p>=nProgressLimi
6930: 74 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  t ){.    assert(
6940: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
6950: 73 21 3d 30 20 29 3b 0a 20 20 20 20 6e 50 72 6f  s!=0 );.    nPro
6960: 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 6e 56 6d  gressLimit = nVm
6970: 53 74 65 70 20 2b 20 64 62 2d 3e 6e 50 72 6f 67  Step + db->nProg
6980: 72 65 73 73 4f 70 73 20 2d 20 28 6e 56 6d 53 74  ressOps - (nVmSt
6990: 65 70 25 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73  ep%db->nProgress
69a0: 4f 70 73 29 3b 0a 20 20 20 20 69 66 28 20 64 62  Ops);.    if( db
69b0: 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e  ->xProgress(db->
69c0: 70 50 72 6f 67 72 65 73 73 41 72 67 29 20 29 7b  pProgressArg) ){
69d0: 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
69e0: 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  TE_INTERRUPT;.  
69f0: 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
6a00: 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
6a10: 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20   }.  }.#endif.  
6a20: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
6a30: 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62 20 50  Opcode:  Gosub P
6a40: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
6a50: 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65   Write the curre
6a60: 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74 6f 20  nt address onto 
6a70: 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 61  register P1.** a
6a80: 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  nd then jump to 
6a90: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a 63  address P2..*/.c
6aa0: 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b 20  ase OP_Gosub: { 
6ab0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
6ac0: 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
6ad0: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
6ae0: 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p1<=(p->nMem+1
6af0: 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
6b00: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
6b10: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
6b20: 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61  ert( VdbeMemDyna
6b30: 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20 29 3b 0a  mic(pIn1)==0 );.
6b40: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
6b50: 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 70  ge(p, pIn1);.  p
6b60: 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  In1->flags = MEM
6b70: 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e  _Int;.  pIn1->u.
6b80: 69 20 3d 20 28 69 6e 74 29 28 70 4f 70 2d 61 4f  i = (int)(pOp-aO
6b90: 70 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  p);.  REGISTER_T
6ba0: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49  RACE(pOp->p1, pI
6bb0: 6e 31 29 3b 0a 0a 20 20 2f 2a 20 4d 6f 73 74 20  n1);..  /* Most 
6bc0: 6a 75 6d 70 20 6f 70 65 72 61 74 69 6f 6e 73 20  jump operations 
6bd0: 64 6f 20 61 20 67 6f 74 6f 20 74 6f 20 74 68 69  do a goto to thi
6be0: 73 20 73 70 6f 74 20 69 6e 20 6f 72 64 65 72 20  s spot in order 
6bf0: 74 6f 20 75 70 64 61 74 65 0a 20 20 2a 2a 20 74  to update.  ** t
6c00: 68 65 20 70 4f 70 20 70 6f 69 6e 74 65 72 2e 20  he pOp pointer. 
6c10: 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32 3a 0a 20  */.jump_to_p2:. 
6c20: 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d   pOp = &aOp[pOp-
6c30: 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 62 72 65 61  >p2 - 1];.  brea
6c40: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
6c50: 20 20 52 65 74 75 72 6e 20 50 31 20 2a 20 2a 20    Return P1 * * 
6c60: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
6c70: 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
6c80: 75 63 74 69 6f 6e 20 61 66 74 65 72 20 74 68 65  uction after the
6c90: 20 61 64 64 72 65 73 73 20 69 6e 20 72 65 67 69   address in regi
6ca0: 73 74 65 72 20 50 31 2e 20 20 41 66 74 65 72 0a  ster P1.  After.
6cb0: 2a 2a 20 74 68 65 20 6a 75 6d 70 2c 20 72 65 67  ** the jump, reg
6cc0: 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65 73  ister P1 becomes
6cd0: 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 63   undefined..*/.c
6ce0: 61 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a 20 7b  ase OP_Return: {
6cf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
6d00: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
6d10: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
6d20: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
6d30: 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a  ags==MEM_Int );.
6d40: 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 49 6e    pOp = &aOp[pIn
6d50: 31 2d 3e 75 2e 69 5d 3b 0a 20 20 70 49 6e 31 2d  1->u.i];.  pIn1-
6d60: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64  >flags = MEM_Und
6d70: 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b  efined;.  break;
6d80: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
6d90: 6e 69 74 43 6f 72 6f 75 74 69 6e 65 20 50 31 20  nitCoroutine P1 
6da0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
6db0: 53 65 74 20 75 70 20 72 65 67 69 73 74 65 72 20  Set up register 
6dc0: 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 77 69  P1 so that it wi
6dd0: 6c 6c 20 59 69 65 6c 64 20 74 6f 20 74 68 65 20  ll Yield to the 
6de0: 63 6f 72 6f 75 74 69 6e 65 0a 2a 2a 20 6c 6f 63  coroutine.** loc
6df0: 61 74 65 64 20 61 74 20 61 64 64 72 65 73 73 20  ated at address 
6e00: 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 21  P3..**.** If P2!
6e10: 3d 30 20 74 68 65 6e 20 74 68 65 20 63 6f 72 6f  =0 then the coro
6e20: 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61  utine implementa
6e30: 74 69 6f 6e 20 69 6d 6d 65 64 69 61 74 65 6c 79  tion immediately
6e40: 20 66 6f 6c 6c 6f 77 73 0a 2a 2a 20 74 68 69 73   follows.** this
6e50: 20 6f 70 63 6f 64 65 2e 20 20 53 6f 20 6a 75 6d   opcode.  So jum
6e60: 70 20 6f 76 65 72 20 74 68 65 20 63 6f 72 6f 75  p over the corou
6e70: 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tine implementat
6e80: 69 6f 6e 20 74 6f 0a 2a 2a 20 61 64 64 72 65 73  ion to.** addres
6e90: 73 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  s P2..**.** See 
6ea0: 61 6c 73 6f 3a 20 45 6e 64 43 6f 72 6f 75 74 69  also: EndCorouti
6eb0: 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  ne.*/.case OP_In
6ec0: 69 74 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20  itCoroutine: {  
6ed0: 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
6ee0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
6ef0: 30 20 26 26 20 20 70 4f 70 2d 3e 70 31 3c 3d 28  0 &&  pOp->p1<=(
6f00: 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
6f10: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73  Cursor) );.  ass
6f20: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20  ert( pOp->p2>=0 
6f30: 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f  && pOp->p2<p->nO
6f40: 70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p );.  assert( p
6f50: 4f 70 2d 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70  Op->p3>=0 && pOp
6f60: 2d 3e 70 33 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20  ->p3<p->nOp );. 
6f70: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
6f80: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
6f90: 28 20 21 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69  ( !VdbeMemDynami
6fa0: 63 28 70 4f 75 74 29 20 29 3b 0a 20 20 70 4f 75  c(pOut) );.  pOu
6fb0: 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 33  t->u.i = pOp->p3
6fc0: 20 2d 20 31 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c   - 1;.  pOut->fl
6fd0: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
6fe0: 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 29 20 67   if( pOp->p2 ) g
6ff0: 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
7000: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
7010: 70 63 6f 64 65 3a 20 20 45 6e 64 43 6f 72 6f 75  pcode:  EndCorou
7020: 74 69 6e 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  tine P1 * * * *.
7030: 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 73 74 72 75  **.** The instru
7040: 63 74 69 6f 6e 20 61 74 20 74 68 65 20 61 64 64  ction at the add
7050: 72 65 73 73 20 69 6e 20 72 65 67 69 73 74 65 72  ress in register
7060: 20 50 31 20 69 73 20 61 20 59 69 65 6c 64 2e 0a   P1 is a Yield..
7070: 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 50  ** Jump to the P
7080: 32 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 74  2 parameter of t
7090: 68 61 74 20 59 69 65 6c 64 2e 0a 2a 2a 20 41 66  hat Yield..** Af
70a0: 74 65 72 20 74 68 65 20 6a 75 6d 70 2c 20 72 65  ter the jump, re
70b0: 67 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65  gister P1 become
70c0: 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a  s undefined..**.
70d0: 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69  ** See also: Ini
70e0: 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61  tCoroutine.*/.ca
70f0: 73 65 20 4f 50 5f 45 6e 64 43 6f 72 6f 75 74 69  se OP_EndCorouti
7100: 6e 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ne: {           
7110: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 56 64 62 65  /* in1 */.  Vdbe
7120: 4f 70 20 2a 70 43 61 6c 6c 65 72 3b 0a 20 20 70  Op *pCaller;.  p
7130: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
7140: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
7150: 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d  pIn1->flags==MEM
7160: 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74  _Int );.  assert
7170: 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 3d 30 20 26  ( pIn1->u.i>=0 &
7180: 26 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 2d 3e 6e  & pIn1->u.i<p->n
7190: 4f 70 20 29 3b 0a 20 20 70 43 61 6c 6c 65 72 20  Op );.  pCaller 
71a0: 3d 20 26 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69  = &aOp[pIn1->u.i
71b0: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 61  ];.  assert( pCa
71c0: 6c 6c 65 72 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50  ller->opcode==OP
71d0: 5f 59 69 65 6c 64 20 29 3b 0a 20 20 61 73 73 65  _Yield );.  asse
71e0: 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e 70 32 3e  rt( pCaller->p2>
71f0: 3d 30 20 26 26 20 70 43 61 6c 6c 65 72 2d 3e 70  =0 && pCaller->p
7200: 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f  2<p->nOp );.  pO
7210: 70 20 3d 20 26 61 4f 70 5b 70 43 61 6c 6c 65 72  p = &aOp[pCaller
7220: 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 70 49 6e  ->p2 - 1];.  pIn
7230: 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55  1->flags = MEM_U
7240: 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61  ndefined;.  brea
7250: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
7260: 20 20 59 69 65 6c 64 20 50 31 20 50 32 20 2a 20    Yield P1 P2 * 
7270: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74  * *.**.** Swap t
7280: 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74  he program count
7290: 65 72 20 77 69 74 68 20 74 68 65 20 76 61 6c 75  er with the valu
72a0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
72b0: 2e 20 20 54 68 69 73 0a 2a 2a 20 68 61 73 20 74  .  This.** has t
72c0: 68 65 20 65 66 66 65 63 74 20 6f 66 20 79 69 65  he effect of yie
72d0: 6c 64 69 6e 67 20 74 6f 20 61 20 63 6f 72 6f 75  lding to a corou
72e0: 74 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  tine..**.** If t
72f0: 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 74 68 61  he coroutine tha
7300: 74 20 69 73 20 6c 61 75 6e 63 68 65 64 20 62 79  t is launched by
7310: 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
7320: 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20 59  n ends with.** Y
7330: 69 65 6c 64 20 6f 72 20 52 65 74 75 72 6e 20 74  ield or Return t
7340: 68 65 6e 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20  hen continue to 
7350: 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
7360: 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 0a 2a 2a  tion.  But if.**
7370: 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 6c   the coroutine l
7380: 61 75 6e 63 68 65 64 20 62 79 20 74 68 69 73 20  aunched by this 
7390: 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e 64 73  instruction ends
73a0: 20 77 69 74 68 0a 2a 2a 20 45 6e 64 43 6f 72 6f   with.** EndCoro
73b0: 75 74 69 6e 65 2c 20 74 68 65 6e 20 6a 75 6d 70  utine, then jump
73c0: 20 74 6f 20 50 32 20 72 61 74 68 65 72 20 74 68   to P2 rather th
73d0: 61 6e 20 63 6f 6e 74 69 6e 75 69 6e 67 20 77 69  an continuing wi
73e0: 74 68 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 69  th the.** next i
73f0: 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
7400: 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74  * See also: Init
7410: 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73  Coroutine.*/.cas
7420: 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20 20  e OP_Yield: {   
7430: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c           /* in1,
7440: 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 70   jump */.  int p
7450: 63 44 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d 20  cDest;.  pIn1 = 
7460: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
7470: 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65    assert( VdbeMe
7480: 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d  mDynamic(pIn1)==
7490: 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  0 );.  pIn1->fla
74a0: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
74b0: 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29 70 49  pcDest = (int)pI
74c0: 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31 2d  n1->u.i;.  pIn1-
74d0: 3e 75 2e 69 20 3d 20 28 69 6e 74 29 28 70 4f 70  >u.i = (int)(pOp
74e0: 20 2d 20 61 4f 70 29 3b 0a 20 20 52 45 47 49 53   - aOp);.  REGIS
74f0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
7500: 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 4f 70 20  1, pIn1);.  pOp 
7510: 3d 20 26 61 4f 70 5b 70 63 44 65 73 74 5d 3b 0a  = &aOp[pcDest];.
7520: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
7530: 70 63 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e 75  pcode:  HaltIfNu
7540: 6c 6c 20 20 50 31 20 50 32 20 50 33 20 50 34 20  ll  P1 P2 P3 P4 
7550: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
7560: 20 69 66 20 72 5b 50 33 5d 3d 6e 75 6c 6c 20 68   if r[P3]=null h
7570: 61 6c 74 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20  alt.**.** Check 
7580: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
7590: 69 73 74 65 72 20 50 33 2e 20 20 49 66 20 69 74  ister P3.  If it
75a0: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61   is NULL then Ha
75b0: 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61  lt using.** para
75c0: 6d 65 74 65 72 20 50 31 2c 20 50 32 2c 20 61 6e  meter P1, P2, an
75d0: 64 20 50 34 20 61 73 20 69 66 20 74 68 69 73 20  d P4 as if this 
75e0: 77 65 72 65 20 61 20 48 61 6c 74 20 69 6e 73 74  were a Halt inst
75f0: 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65  ruction.  If the
7600: 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67  .** value in reg
7610: 69 73 74 65 72 20 50 33 20 69 73 20 6e 6f 74 20  ister P3 is not 
7620: 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73 20  NULL, then this 
7630: 72 6f 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d  routine is a no-
7640: 6f 70 2e 0a 2a 2a 20 54 68 65 20 50 35 20 70 61  op..** The P5 pa
7650: 72 61 6d 65 74 65 72 20 73 68 6f 75 6c 64 20 62  rameter should b
7660: 65 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  e 1..*/.case OP_
7670: 48 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20  HaltIfNull: {   
7680: 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 70     /* in3 */.  p
7690: 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
76a0: 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p3];.  if( (pIn
76b0: 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  3->flags & MEM_N
76c0: 75 6c 6c 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b  ull)==0 ) break;
76d0: 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
76e0: 67 68 20 69 6e 74 6f 20 4f 50 5f 48 61 6c 74 20  gh into OP_Halt 
76f0: 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  */.}../* Opcode:
7700: 20 20 48 61 6c 74 20 50 31 20 50 32 20 2a 20 50    Halt P1 P2 * P
7710: 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20  4 P5.**.** Exit 
7720: 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 41 6c  immediately.  Al
7730: 6c 20 6f 70 65 6e 20 63 75 72 73 6f 72 73 2c 20  l open cursors, 
7740: 65 74 63 20 61 72 65 20 63 6c 6f 73 65 64 0a 2a  etc are closed.*
7750: 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e  * automatically.
7760: 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65  .**.** P1 is the
7770: 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65 74   result code ret
7780: 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
7790: 5f 65 78 65 63 28 29 2c 20 73 71 6c 69 74 65 33  _exec(), sqlite3
77a0: 5f 72 65 73 65 74 28 29 2c 0a 2a 2a 20 6f 72 20  _reset(),.** or 
77b0: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
77c0: 28 29 2e 20 20 46 6f 72 20 61 20 6e 6f 72 6d 61  ().  For a norma
77d0: 6c 20 68 61 6c 74 2c 20 74 68 69 73 20 73 68 6f  l halt, this sho
77e0: 75 6c 64 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b  uld be SQLITE_OK
77f0: 20 28 30 29 2e 0a 2a 2a 20 46 6f 72 20 65 72 72   (0)..** For err
7800: 6f 72 73 2c 20 69 74 20 63 61 6e 20 62 65 20 73  ors, it can be s
7810: 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c 75 65 2e  ome other value.
7820: 20 20 49 66 20 50 31 21 3d 30 20 74 68 65 6e 20    If P1!=0 then 
7830: 50 32 20 77 69 6c 6c 20 64 65 74 65 72 6d 69 6e  P2 will determin
7840: 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20  e.** whether or 
7850: 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20  not to rollback 
7860: 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e  the current tran
7870: 73 61 63 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74  saction.  Do not
7880: 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66 20   rollback.** if 
7890: 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f 20  P2==OE_Fail. Do 
78a0: 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 69 66 20  the rollback if 
78b0: 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e  P2==OE_Rollback.
78c0: 20 20 49 66 20 50 32 3d 3d 4f 45 5f 41 62 6f 72    If P2==OE_Abor
78d0: 74 2c 0a 2a 2a 20 74 68 65 6e 20 62 61 63 6b 20  t,.** then back 
78e0: 6f 75 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 20  out all changes 
78f0: 74 68 61 74 20 68 61 76 65 20 6f 63 63 75 72 72  that have occurr
7900: 65 64 20 64 75 72 69 6e 67 20 74 68 69 73 20 65  ed during this e
7910: 78 65 63 75 74 69 6f 6e 20 6f 66 20 74 68 65 0a  xecution of the.
7920: 2a 2a 20 56 44 42 45 2c 20 62 75 74 20 64 6f 20  ** VDBE, but do 
7930: 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65  not rollback the
7940: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a   transaction. .*
7950: 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f  *.** If P4 is no
7960: 74 20 6e 75 6c 6c 20 74 68 65 6e 20 69 74 20 69  t null then it i
7970: 73 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  s an error messa
7980: 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a  ge string..**.**
7990: 20 50 35 20 69 73 20 61 20 76 61 6c 75 65 20 62   P5 is a value b
79a0: 65 74 77 65 65 6e 20 30 20 61 6e 64 20 34 2c 20  etween 0 and 4, 
79b0: 69 6e 63 6c 75 73 69 76 65 2c 20 74 68 61 74 20  inclusive, that 
79c0: 6d 6f 64 69 66 69 65 73 20 74 68 65 20 50 34 20  modifies the P4 
79d0: 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20  string..**.**   
79e0: 20 30 3a 20 20 28 6e 6f 20 63 68 61 6e 67 65 29   0:  (no change)
79f0: 0a 2a 2a 20 20 20 20 31 3a 20 20 4e 4f 54 20 4e  .**    1:  NOT N
7a00: 55 4c 4c 20 63 6f 6e 74 72 61 69 6e 74 20 66 61  ULL contraint fa
7a10: 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 32  iled: P4.**    2
7a20: 3a 20 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72  :  UNIQUE constr
7a30: 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a  aint failed: P4.
7a40: 2a 2a 20 20 20 20 33 3a 20 20 43 48 45 43 4b 20  **    3:  CHECK 
7a50: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
7a60: 64 3a 20 50 34 0a 2a 2a 20 20 20 20 34 3a 20 20  d: P4.**    4:  
7a70: 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73  FOREIGN KEY cons
7a80: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50  traint failed: P
7a90: 34 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  4.**.** If P5 is
7aa0: 20 6e 6f 74 20 7a 65 72 6f 20 61 6e 64 20 50 34   not zero and P4
7ab0: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 65   is NULL, then e
7ac0: 76 65 72 79 74 68 69 6e 67 20 61 66 74 65 72 20  verything after 
7ad0: 74 68 65 20 22 3a 22 20 69 73 0a 2a 2a 20 6f 6d  the ":" is.** om
7ae0: 69 74 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  itted..**.** The
7af0: 72 65 20 69 73 20 61 6e 20 69 6d 70 6c 69 65 64  re is an implied
7b00: 20 22 48 61 6c 74 20 30 20 30 20 30 22 20 69 6e   "Halt 0 0 0" in
7b10: 73 74 72 75 63 74 69 6f 6e 20 69 6e 73 65 72 74  struction insert
7b20: 65 64 20 61 74 20 74 68 65 20 76 65 72 79 20 65  ed at the very e
7b30: 6e 64 20 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70  nd of.** every p
7b40: 72 6f 67 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75  rogram.  So a ju
7b50: 6d 70 20 70 61 73 74 20 74 68 65 20 6c 61 73 74  mp past the last
7b60: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20   instruction of 
7b70: 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69  the program.** i
7b80: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 65 78  s the same as ex
7b90: 65 63 75 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f  ecuting Halt..*/
7ba0: 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b  .case OP_Halt: {
7bb0: 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
7bc0: 72 61 6d 65 3b 0a 20 20 69 6e 74 20 70 63 78 3b  rame;.  int pcx;
7bd0: 0a 0a 20 20 70 63 78 20 3d 20 28 69 6e 74 29 28  ..  pcx = (int)(
7be0: 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 69 66  pOp - aOp);.  if
7bf0: 28 20 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54  ( pOp->p1==SQLIT
7c00: 45 5f 4f 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d  E_OK && p->pFram
7c10: 65 20 29 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74  e ){.    /* Halt
7c20: 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
7c30: 2e 20 52 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c  . Return control
7c40: 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74 20 66   to the parent f
7c50: 72 61 6d 65 2e 20 2a 2f 0a 20 20 20 20 70 46 72  rame. */.    pFr
7c60: 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b  ame = p->pFrame;
7c70: 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d  .    p->pFrame =
7c80: 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74   pFrame->pParent
7c90: 3b 0a 20 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d  ;.    p->nFrame-
7ca0: 2d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  -;.    sqlite3Vd
7cb0: 62 65 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c  beSetChanges(db,
7cc0: 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20   p->nChange);.  
7cd0: 20 20 70 63 78 20 3d 20 73 71 6c 69 74 65 33 56    pcx = sqlite3V
7ce0: 64 62 65 46 72 61 6d 65 52 65 73 74 6f 72 65 28  dbeFrameRestore(
7cf0: 70 46 72 61 6d 65 29 3b 0a 20 20 20 20 6c 61 73  pFrame);.    las
7d00: 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73  tRowid = db->las
7d10: 74 52 6f 77 69 64 3b 0a 20 20 20 20 69 66 28 20  tRowid;.    if( 
7d20: 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f  pOp->p2==OE_Igno
7d30: 72 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  re ){.      /* I
7d40: 6e 73 74 72 75 63 74 69 6f 6e 20 70 63 78 20 69  nstruction pcx i
7d50: 73 20 74 68 65 20 4f 50 5f 50 72 6f 67 72 61 6d  s the OP_Program
7d60: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
7d70: 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 0a 20  e sub-program . 
7d80: 20 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 6c       ** currentl
7d90: 79 20 62 65 69 6e 67 20 68 61 6c 74 65 64 2e 20  y being halted. 
7da0: 49 66 20 74 68 65 20 70 32 20 69 6e 73 74 72 75  If the p2 instru
7db0: 63 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 4f 50  ction of this OP
7dc0: 5f 48 61 6c 74 0a 20 20 20 20 20 20 2a 2a 20 69  _Halt.      ** i
7dd0: 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 73 65  nstruction is se
7de0: 74 20 74 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c 20  t to OE_Ignore, 
7df0: 74 68 65 6e 20 74 68 65 20 73 75 62 2d 70 72 6f  then the sub-pro
7e00: 67 72 61 6d 20 69 73 20 74 68 72 6f 77 69 6e 67  gram is throwing
7e10: 0a 20 20 20 20 20 20 2a 2a 20 61 6e 20 49 47 4e  .      ** an IGN
7e20: 4f 52 45 20 65 78 63 65 70 74 69 6f 6e 2e 20 49  ORE exception. I
7e30: 6e 20 74 68 69 73 20 63 61 73 65 20 6a 75 6d 70  n this case jump
7e40: 20 74 6f 20 74 68 65 20 61 64 64 72 65 73 73 20   to the address 
7e50: 73 70 65 63 69 66 69 65 64 0a 20 20 20 20 20 20  specified.      
7e60: 2a 2a 20 61 73 20 74 68 65 20 70 32 20 6f 66 20  ** as the p2 of 
7e70: 74 68 65 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50  the calling OP_P
7e80: 72 6f 67 72 61 6d 2e 20 20 2a 2f 0a 20 20 20 20  rogram.  */.    
7e90: 20 20 70 63 78 20 3d 20 70 2d 3e 61 4f 70 5b 70    pcx = p->aOp[p
7ea0: 63 78 5d 2e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a  cx].p2-1;.    }.
7eb0: 20 20 20 20 61 4f 70 20 3d 20 70 2d 3e 61 4f 70      aOp = p->aOp
7ec0: 3b 0a 20 20 20 20 61 4d 65 6d 20 3d 20 70 2d 3e  ;.    aMem = p->
7ed0: 61 4d 65 6d 3b 0a 20 20 20 20 70 4f 70 20 3d 20  aMem;.    pOp = 
7ee0: 26 61 4f 70 5b 70 63 78 5d 3b 0a 20 20 20 20 62  &aOp[pcx];.    b
7ef0: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 2d 3e 72  reak;.  }.  p->r
7f00: 63 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  c = pOp->p1;.  p
7f10: 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20  ->errorAction = 
7f20: 28 75 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70  (u8)pOp->p2;.  p
7f30: 2d 3e 70 63 20 3d 20 70 63 78 3b 0a 20 20 61 73  ->pc = pcx;.  as
7f40: 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3e 3d 30  sert( pOp->p5>=0
7f50: 20 26 26 20 70 4f 70 2d 3e 70 35 3c 3d 34 20 29   && pOp->p5<=4 )
7f60: 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 20 29 7b  ;.  if( p->rc ){
7f70: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  .    if( pOp->p5
7f80: 20 29 7b 0a 20 20 20 20 20 20 73 74 61 74 69 63   ){.      static
7f90: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 63 6f   const char * co
7fa0: 6e 73 74 20 61 7a 54 79 70 65 5b 5d 20 3d 20 7b  nst azType[] = {
7fb0: 20 22 4e 4f 54 20 4e 55 4c 4c 22 2c 20 22 55 4e   "NOT NULL", "UN
7fc0: 49 51 55 45 22 2c 20 22 43 48 45 43 4b 22 2c 0a  IQUE", "CHECK",.
7fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46 4f               "FO
8000: 52 45 49 47 4e 20 4b 45 59 22 20 7d 3b 0a 20 20  REIGN KEY" };.  
8010: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f      testcase( pO
8020: 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 20 20  p->p5==1 );.    
8030: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
8040: 3e 70 35 3d 3d 32 20 29 3b 0a 20 20 20 20 20 20  >p5==2 );.      
8050: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
8060: 35 3d 3d 33 20 29 3b 0a 20 20 20 20 20 20 74 65  5==3 );.      te
8070: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d  stcase( pOp->p5=
8080: 3d 34 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  =4 );.      sqli
8090: 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
80a0: 22 25 73 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  "%s constraint f
80b0: 61 69 6c 65 64 22 2c 20 61 7a 54 79 70 65 5b 70  ailed", azType[p
80c0: 4f 70 2d 3e 70 35 2d 31 5d 29 3b 0a 20 20 20 20  Op->p5-1]);.    
80d0: 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20    if( pOp->p4.z 
80e0: 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 7a 45  ){.        p->zE
80f0: 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 4d  rrMsg = sqlite3M
8100: 50 72 69 6e 74 66 28 64 62 2c 20 22 25 7a 3a 20  Printf(db, "%z: 
8110: 25 73 22 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 2c  %s", p->zErrMsg,
8120: 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20   pOp->p4.z);.   
8130: 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
8140: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
8150: 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20  eError(p, "%s", 
8160: 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20  pOp->p4.z);.    
8170: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f  }.    sqlite3_lo
8180: 67 28 70 4f 70 2d 3e 70 31 2c 20 22 61 62 6f 72  g(pOp->p1, "abor
8190: 74 20 61 74 20 25 64 20 69 6e 20 5b 25 73 5d 3a  t at %d in [%s]:
81a0: 20 25 73 22 2c 20 70 63 78 2c 20 70 2d 3e 7a 53   %s", pcx, p->zS
81b0: 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  ql, p->zErrMsg);
81c0: 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
81d0: 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a  te3VdbeHalt(p);.
81e0: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
81f0: 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 72 63 3d  LITE_BUSY || rc=
8200: 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63  =SQLITE_OK || rc
8210: 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 29  ==SQLITE_ERROR )
8220: 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
8230: 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 70  TE_BUSY ){.    p
8240: 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  ->rc = SQLITE_BU
8250: 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  SY;.  }else{.   
8260: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
8270: 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63  ITE_OK || (p->rc
8280: 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43  &0xff)==SQLITE_C
8290: 4f 4e 53 54 52 41 49 4e 54 20 29 3b 0a 20 20 20  ONSTRAINT );.   
82a0: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
82b0: 49 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44  ITE_OK || db->nD
82c0: 65 66 65 72 72 65 64 43 6f 6e 73 3e 30 20 7c 7c  eferredCons>0 ||
82d0: 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
82e0: 6d 43 6f 6e 73 3e 30 20 29 3b 0a 20 20 20 20 72  mCons>0 );.    r
82f0: 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49  c = p->rc ? SQLI
8300: 54 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c 49 54  TE_ERROR : SQLIT
8310: 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f  E_DONE;.  }.  go
8320: 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
8330: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
8340: 74 65 67 65 72 20 50 31 20 50 32 20 2a 20 2a 20  teger P1 P2 * * 
8350: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
8360: 5b 50 32 5d 3d 50 31 0a 2a 2a 0a 2a 2a 20 54 68  [P2]=P1.**.** Th
8370: 65 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72  e 32-bit integer
8380: 20 76 61 6c 75 65 20 50 31 20 69 73 20 77 72 69   value P1 is wri
8390: 74 74 65 6e 20 69 6e 74 6f 20 72 65 67 69 73 74  tten into regist
83a0: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
83b0: 50 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20 20 20  P_Integer: {    
83c0: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
83d0: 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
83e0: 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
83f0: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
8400: 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61 6b 3b  Op->p1;.  break;
8410: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
8420: 6e 74 36 34 20 2a 20 50 32 20 2a 20 50 34 20 2a  nt64 * P2 * P4 *
8430: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
8440: 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20  P2]=P4.**.** P4 
8450: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
8460: 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72  a 64-bit integer
8470: 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65   value..** Write
8480: 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f   that value into
8490: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
84a0: 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36 34 3a 20  .case OP_Int64: 
84b0: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
84c0: 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20  ut2 */.  pOut = 
84d0: 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
84e0: 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74  , pOp);.  assert
84f0: 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36 34 21 3d  ( pOp->p4.pI64!=
8500: 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  0 );.  pOut->u.i
8510: 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 49 36 34   = *pOp->p4.pI64
8520: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  ;.  break;.}..#i
8530: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
8540: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
8550: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c  ./* Opcode: Real
8560: 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20   * P2 * P4 *.** 
8570: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
8580: 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  P4.**.** P4 is a
8590: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34   pointer to a 64
85a0: 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20 70 6f  -bit floating po
85b0: 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72  int value..** Wr
85c0: 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69  ite that value i
85d0: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
85e0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c  .*/.case OP_Real
85f0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
8600: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 46 4c 4f  * same as TK_FLO
8610: 41 54 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f  AT, out2 */.  pO
8620: 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
8630: 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70  ase(p, pOp);.  p
8640: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
8650: 5f 52 65 61 6c 3b 0a 20 20 61 73 73 65 72 74 28  _Real;.  assert(
8660: 20 21 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 2a   !sqlite3IsNaN(*
8670: 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 29 20 29  pOp->p4.pReal) )
8680: 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d 20  ;.  pOut->u.r = 
8690: 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a  *pOp->p4.pReal;.
86a0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
86b0: 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74  f../* Opcode: St
86c0: 72 69 6e 67 38 20 2a 20 50 32 20 2a 20 50 34 20  ring8 * P2 * P4 
86d0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
86e0: 5b 50 32 5d 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20  [P2]='P4'.**.** 
86f0: 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 6e  P4 points to a n
8700: 75 6c 20 74 65 72 6d 69 6e 61 74 65 64 20 55 54  ul terminated UT
8710: 46 2d 38 20 73 74 72 69 6e 67 2e 20 54 68 69 73  F-8 string. This
8720: 20 6f 70 63 6f 64 65 20 69 73 20 74 72 61 6e 73   opcode is trans
8730: 66 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f 20  formed .** into 
8740: 61 20 53 74 72 69 6e 67 20 6f 70 63 6f 64 65 20  a String opcode 
8750: 62 65 66 6f 72 65 20 69 74 20 69 73 20 65 78 65  before it is exe
8760: 63 75 74 65 64 20 66 6f 72 20 74 68 65 20 66 69  cuted for the fi
8770: 72 73 74 20 74 69 6d 65 2e 20 20 44 75 72 69 6e  rst time.  Durin
8780: 67 0a 2a 2a 20 74 68 69 73 20 74 72 61 6e 73 66  g.** this transf
8790: 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 6c 65  ormation, the le
87a0: 6e 67 74 68 20 6f 66 20 73 74 72 69 6e 67 20 50  ngth of string P
87b0: 34 20 69 73 20 63 6f 6d 70 75 74 65 64 20 61 6e  4 is computed an
87c0: 64 20 73 74 6f 72 65 64 0a 2a 2a 20 61 73 20 74  d stored.** as t
87d0: 68 65 20 50 31 20 70 61 72 61 6d 65 74 65 72 2e  he P1 parameter.
87e0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69  .*/.case OP_Stri
87f0: 6e 67 38 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  ng8: {         /
8800: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 52  * same as TK_STR
8810: 49 4e 47 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 61  ING, out2 */.  a
8820: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a  ssert( pOp->p4.z
8830: 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  !=0 );.  pOut = 
8840: 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
8850: 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 70 2d 3e 6f  , pOp);.  pOp->o
8860: 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72 69 6e  pcode = OP_Strin
8870: 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20 73  g;.  pOp->p1 = s
8880: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70  qlite3Strlen30(p
8890: 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e  Op->p4.z);..#ifn
88a0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
88b0: 55 54 46 31 36 0a 20 20 69 66 28 20 65 6e 63 6f  UTF16.  if( enco
88c0: 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55 54 46  ding!=SQLITE_UTF
88d0: 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  8 ){.    rc = sq
88e0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53  lite3VdbeMemSetS
88f0: 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34  tr(pOut, pOp->p4
8900: 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55  .z, -1, SQLITE_U
8910: 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  TF8, SQLITE_STAT
8920: 49 43 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  IC);.    assert(
8930: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc==SQLITE_OK |
8940: 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f  | rc==SQLITE_TOO
8950: 42 49 47 20 29 3b 0a 20 20 20 20 69 66 28 20 53  BIG );.    if( S
8960: 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65  QLITE_OK!=sqlite
8970: 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
8980: 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69  ing(pOut, encodi
8990: 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ng) ) goto no_me
89a0: 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  m;.    assert( p
89b0: 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 3e 30 20  Out->szMalloc>0 
89c0: 26 26 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63  && pOut->zMalloc
89d0: 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20 20  ==pOut->z );.   
89e0: 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d   assert( VdbeMem
89f0: 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 3d 3d 30  Dynamic(pOut)==0
8a00: 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 73 7a   );.    pOut->sz
8a10: 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20  Malloc = 0;.    
8a20: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pOut->flags |= M
8a30: 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20 20 69  EM_Static;.    i
8a40: 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
8a50: 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20  P4_DYNAMIC ){.  
8a60: 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
8a70: 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  e(db, pOp->p4.z)
8a80: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d  ;.    }.    pOp-
8a90: 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 44 59 4e  >p4type = P4_DYN
8aa0: 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  AMIC;.    pOp->p
8ab0: 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20  4.z = pOut->z;. 
8ac0: 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75     pOp->p1 = pOu
8ad0: 74 2d 3e 6e 3b 0a 20 20 7d 0a 20 20 74 65 73 74  t->n;.  }.  test
8ae0: 63 61 73 65 28 20 72 63 3d 3d 53 51 4c 49 54 45  case( rc==SQLITE
8af0: 5f 54 4f 4f 42 49 47 20 29 3b 0a 23 65 6e 64 69  _TOOBIG );.#endi
8b00: 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e  f.  if( pOp->p1>
8b10: 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
8b20: 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
8b30: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
8b40: 62 69 67 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  big;.  }.  asser
8b50: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
8b60: 20 29 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68   );.  /* Fall th
8b70: 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
8b80: 74 20 63 61 73 65 2c 20 4f 50 5f 53 74 72 69 6e  t case, OP_Strin
8b90: 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63  g */.}.  ./* Opc
8ba0: 6f 64 65 3a 20 53 74 72 69 6e 67 20 50 31 20 50  ode: String P1 P
8bb0: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
8bc0: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50  nopsis: r[P2]='P
8bd0: 34 27 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a  4' (len=P1).**.*
8be0: 2a 20 54 68 65 20 73 74 72 69 6e 67 20 76 61 6c  * The string val
8bf0: 75 65 20 50 34 20 6f 66 20 6c 65 6e 67 74 68 20  ue P4 of length 
8c00: 50 31 20 28 62 79 74 65 73 29 20 69 73 20 73 74  P1 (bytes) is st
8c10: 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
8c20: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33   P2..**.** If P3
8c30: 20 69 73 20 6e 6f 74 20 7a 65 72 6f 20 61 6e 64   is not zero and
8c40: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
8c50: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 65  register P3 is e
8c60: 71 75 61 6c 20 74 6f 20 50 35 2c 20 74 68 65 6e  qual to P5, then
8c70: 0a 2a 2a 20 74 68 65 20 64 61 74 61 74 79 70 65  .** the datatype
8c80: 20 6f 66 20 74 68 65 20 72 65 67 69 73 74 65 72   of the register
8c90: 20 50 32 20 69 73 20 63 6f 6e 76 65 72 74 65 64   P2 is converted
8ca0: 20 74 6f 20 42 4c 4f 42 2e 20 20 54 68 65 20 63   to BLOB.  The c
8cb0: 6f 6e 74 65 6e 74 20 69 73 0a 2a 2a 20 74 68 65  ontent is.** the
8cc0: 20 73 61 6d 65 20 73 65 71 75 65 6e 63 65 20 6f   same sequence o
8cd0: 66 20 62 79 74 65 73 2c 20 69 74 20 69 73 20 6d  f bytes, it is m
8ce0: 65 72 65 6c 79 20 69 6e 74 65 72 70 72 65 74 65  erely interprete
8cf0: 64 20 61 73 20 61 20 42 4c 4f 42 20 69 6e 73 74  d as a BLOB inst
8d00: 65 61 64 0a 2a 2a 20 6f 66 20 61 20 73 74 72 69  ead.** of a stri
8d10: 6e 67 2c 20 61 73 20 69 66 20 69 74 20 68 61 64  ng, as if it had
8d20: 20 62 65 65 6e 20 43 41 53 54 2e 20 20 49 6e 20   been CAST.  In 
8d30: 6f 74 68 65 72 20 77 6f 72 64 73 3a 0a 2a 2a 0a  other words:.**.
8d40: 2a 2a 20 69 66 28 20 50 33 21 3d 30 20 61 6e 64  ** if( P3!=0 and
8d50: 20 72 65 67 5b 50 33 5d 3d 3d 50 35 20 29 20 72   reg[P3]==P5 ) r
8d60: 65 67 5b 50 32 5d 20 3a 3d 20 43 41 53 54 28 72  eg[P2] := CAST(r
8d70: 65 67 5b 50 32 5d 20 61 73 20 42 4c 4f 42 29 0a  eg[P2] as BLOB).
8d80: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e  */.case OP_Strin
8d90: 67 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a  g: {          /*
8da0: 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72   out2 */.  asser
8db0: 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20  t( pOp->p4.z!=0 
8dc0: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  );.  pOut = out2
8dd0: 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
8de0: 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  p);.  pOut->flag
8df0: 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f  s = MEM_Str|MEM_
8e00: 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b  Static|MEM_Term;
8e10: 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70  .  pOut->z = pOp
8e20: 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e  ->p4.z;.  pOut->
8e30: 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  n = pOp->p1;.  p
8e40: 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  Out->enc = encod
8e50: 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ing;.  UPDATE_MA
8e60: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
8e70: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
8e80: 5f 4c 49 4b 45 5f 44 4f 45 53 4e 54 5f 4d 41 54  _LIKE_DOESNT_MAT
8e90: 43 48 5f 42 4c 4f 42 53 0a 20 20 69 66 28 20 70  CH_BLOBS.  if( p
8ea0: 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20  Op->p3>0 ){.    
8eb0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
8ec0: 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
8ed0: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
8ee0: 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
8ef0: 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73 65  p->p3];.    asse
8f00: 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  rt( pIn3->flags 
8f10: 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20  & MEM_Int );.   
8f20: 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 69 3d 3d   if( pIn3->u.i==
8f30: 70 4f 70 2d 3e 70 35 20 29 20 70 4f 75 74 2d 3e  pOp->p5 ) pOut->
8f40: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62  flags = MEM_Blob
8f50: 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  |MEM_Static|MEM_
8f60: 54 65 72 6d 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  Term;.  }.#endif
8f70: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
8f80: 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 50 31 20  Opcode: Null P1 
8f90: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
8fa0: 6f 70 73 69 73 3a 20 20 72 5b 50 32 2e 2e 50 33  opsis:  r[P2..P3
8fb0: 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 57 72 69  ]=NULL.**.** Wri
8fc0: 74 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f 20 72  te a NULL into r
8fd0: 65 67 69 73 74 65 72 73 20 50 32 2e 20 20 49 66  egisters P2.  If
8fe0: 20 50 33 20 67 72 65 61 74 65 72 20 74 68 61 6e   P3 greater than
8ff0: 20 50 32 2c 20 74 68 65 6e 20 61 6c 73 6f 20 77   P2, then also w
9000: 72 69 74 65 0a 2a 2a 20 4e 55 4c 4c 20 69 6e 74  rite.** NULL int
9010: 6f 20 72 65 67 69 73 74 65 72 20 50 33 20 61 6e  o register P3 an
9020: 64 20 65 76 65 72 79 20 72 65 67 69 73 74 65 72  d every register
9030: 20 69 6e 20 62 65 74 77 65 65 6e 20 50 32 20 61   in between P2 a
9040: 6e 64 20 50 33 2e 20 20 49 66 20 50 33 0a 2a 2a  nd P3.  If P3.**
9050: 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 50 32   is less than P2
9060: 20 28 74 79 70 69 63 61 6c 6c 79 20 50 33 20 69   (typically P3 i
9070: 73 20 7a 65 72 6f 29 20 74 68 65 6e 20 6f 6e 6c  s zero) then onl
9080: 79 20 72 65 67 69 73 74 65 72 20 50 32 20 69 73  y register P2 is
9090: 0a 2a 2a 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e  .** set to NULL.
90a0: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
90b0: 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65   value is non-ze
90c0: 72 6f 2c 20 74 68 65 6e 20 61 6c 73 6f 20 73 65  ro, then also se
90d0: 74 20 74 68 65 20 4d 45 4d 5f 43 6c 65 61 72 65  t the MEM_Cleare
90e0: 64 20 66 6c 61 67 20 73 6f 20 74 68 61 74 0a 2a  d flag so that.*
90f0: 2a 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 77 69  * NULL values wi
9100: 6c 6c 20 6e 6f 74 20 63 6f 6d 70 61 72 65 20 65  ll not compare e
9110: 71 75 61 6c 20 65 76 65 6e 20 69 66 20 53 51 4c  qual even if SQL
9120: 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65  ITE_NULLEQ is se
9130: 74 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e 65 20 6f 72  t on.** OP_Ne or
9140: 20 4f 50 5f 45 71 2e 0a 2a 2f 0a 63 61 73 65 20   OP_Eq..*/.case 
9150: 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20  OP_Null: {      
9160: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
9170: 20 20 69 6e 74 20 63 6e 74 3b 0a 20 20 75 31 36    int cnt;.  u16
9180: 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 70 4f 75   nullFlag;.  pOu
9190: 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
91a0: 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 63 6e  se(p, pOp);.  cn
91b0: 74 20 3d 20 70 4f 70 2d 3e 70 33 2d 70 4f 70 2d  t = pOp->p3-pOp-
91c0: 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p2;.  assert( p
91d0: 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
91e0: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
91f0: 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   );.  pOut->flag
9200: 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 20 3d 20 70  s = nullFlag = p
9210: 4f 70 2d 3e 70 31 20 3f 20 28 4d 45 4d 5f 4e 75  Op->p1 ? (MEM_Nu
9220: 6c 6c 7c 4d 45 4d 5f 43 6c 65 61 72 65 64 29 20  ll|MEM_Cleared) 
9230: 3a 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 77 68  : MEM_Null;.  wh
9240: 69 6c 65 28 20 63 6e 74 3e 30 20 29 7b 0a 20 20  ile( cnt>0 ){.  
9250: 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 6d 65    pOut++;.    me
9260: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
9270: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c  , pOut);.    sql
9280: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
9290: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 70 4f  ll(pOut);.    pO
92a0: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c  ut->flags = null
92b0: 46 6c 61 67 3b 0a 20 20 20 20 63 6e 74 2d 2d 3b  Flag;.    cnt--;
92c0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
92d0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 66 74  ./* Opcode: Soft
92e0: 4e 75 6c 6c 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  Null P1 * * * *.
92f0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
9300: 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 53  P1]=NULL.**.** S
9310: 65 74 20 72 65 67 69 73 74 65 72 20 50 31 20 74  et register P1 t
9320: 6f 20 68 61 76 65 20 74 68 65 20 76 61 6c 75 65  o have the value
9330: 20 4e 55 4c 4c 20 61 73 20 73 65 65 6e 20 62 79   NULL as seen by
9340: 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f   the OP_MakeReco
9350: 72 64 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f  rd.** instructio
9360: 6e 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 66 72  n, but do not fr
9370: 65 65 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72  ee any string or
9380: 20 62 6c 6f 62 20 6d 65 6d 6f 72 79 20 61 73 73   blob memory ass
9390: 6f 63 69 61 74 65 64 20 77 69 74 68 0a 2a 2a 20  ociated with.** 
93a0: 74 68 65 20 72 65 67 69 73 74 65 72 2c 20 73 6f  the register, so
93b0: 20 74 68 61 74 20 69 66 20 74 68 65 20 76 61 6c   that if the val
93c0: 75 65 20 77 61 73 20 61 20 73 74 72 69 6e 67 20  ue was a string 
93d0: 6f 72 20 62 6c 6f 62 20 74 68 61 74 20 77 61 73  or blob that was
93e0: 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 63  .** previously c
93f0: 6f 70 69 65 64 20 75 73 69 6e 67 20 4f 50 5f 53  opied using OP_S
9400: 43 6f 70 79 2c 20 74 68 65 20 63 6f 70 69 65 73  Copy, the copies
9410: 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75 65 20 74   will continue t
9420: 6f 20 62 65 20 76 61 6c 69 64 2e 0a 2a 2f 0a 63  o be valid..*/.c
9430: 61 73 65 20 4f 50 5f 53 6f 66 74 4e 75 6c 6c 3a  ase OP_SoftNull:
9440: 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
9450: 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p1>0 && pOp->p
9460: 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  1<=(p->nMem+1 - 
9470: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
9480: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
9490: 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 2d 3e  p->p1];.  pOut->
94a0: 66 6c 61 67 73 20 3d 20 28 70 4f 75 74 2d 3e 66  flags = (pOut->f
94b0: 6c 61 67 73 7c 4d 45 4d 5f 4e 75 6c 6c 29 26 7e  lags|MEM_Null)&~
94c0: 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20  MEM_Undefined;. 
94d0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
94e0: 63 6f 64 65 3a 20 42 6c 6f 62 20 50 31 20 50 32  code: Blob P1 P2
94f0: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
9500: 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 20 28 6c  sis: r[P2]=P4 (l
9510: 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 50 34 20  en=P1).**.** P4 
9520: 70 6f 69 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62  points to a blob
9530: 20 6f 66 20 64 61 74 61 20 50 31 20 62 79 74 65   of data P1 byte
9540: 73 20 6c 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74  s long.  Store t
9550: 68 69 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72  his.** blob in r
9560: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
9570: 61 73 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20  ase OP_Blob: {  
9580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9590: 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72   out2 */.  asser
95a0: 74 28 20 70 4f 70 2d 3e 70 31 20 3c 3d 20 53 51  t( pOp->p1 <= SQ
95b0: 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 20  LITE_MAX_LENGTH 
95c0: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  );.  pOut = out2
95d0: 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
95e0: 70 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  p);.  sqlite3Vdb
95f0: 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c  eMemSetStr(pOut,
9600: 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d   pOp->p4.z, pOp-
9610: 3e 70 31 2c 20 30 2c 20 30 29 3b 0a 20 20 70 4f  >p1, 0, 0);.  pO
9620: 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69  ut->enc = encodi
9630: 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  ng;.  UPDATE_MAX
9640: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
9650: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
9660: 4f 70 63 6f 64 65 3a 20 56 61 72 69 61 62 6c 65  Opcode: Variable
9670: 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
9680: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
9690: 3d 70 61 72 61 6d 65 74 65 72 28 50 31 2c 50 34  =parameter(P1,P4
96a0: 29 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72  ).**.** Transfer
96b0: 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 62   the values of b
96c0: 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72 20 50  ound parameter P
96d0: 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  1 into register 
96e0: 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  P2.**.** If the 
96f0: 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 61 6d  parameter is nam
9700: 65 64 2c 20 74 68 65 6e 20 69 74 73 20 6e 61 6d  ed, then its nam
9710: 65 20 61 70 70 65 61 72 73 20 69 6e 20 50 34 2e  e appears in P4.
9720: 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65  .** The P4 value
9730: 20 69 73 20 75 73 65 64 20 62 79 20 73 71 6c 69   is used by sqli
9740: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
9750: 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61  er_name()..*/.ca
9760: 73 65 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a 20  se OP_Variable: 
9770: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
9780: 6f 75 74 32 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  out2 */.  Mem *p
9790: 56 61 72 3b 20 20 20 20 20 20 20 2f 2a 20 56 61  Var;       /* Va
97a0: 6c 75 65 20 62 65 69 6e 67 20 74 72 61 6e 73 66  lue being transf
97b0: 65 72 72 65 64 20 2a 2f 0a 0a 20 20 61 73 73 65  erred */..  asse
97c0: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26  rt( pOp->p1>0 &&
97d0: 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 56 61   pOp->p1<=p->nVa
97e0: 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
97f0: 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c 20 70  Op->p4.z==0 || p
9800: 4f 70 2d 3e 70 34 2e 7a 3d 3d 70 2d 3e 61 7a 56  Op->p4.z==p->azV
9810: 61 72 5b 70 4f 70 2d 3e 70 31 2d 31 5d 20 29 3b  ar[pOp->p1-1] );
9820: 0a 20 20 70 56 61 72 20 3d 20 26 70 2d 3e 61 56  .  pVar = &p->aV
9830: 61 72 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b  ar[pOp->p1 - 1];
9840: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
9850: 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 56 61 72  beMemTooBig(pVar
9860: 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ) ){.    goto to
9870: 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 70 4f 75  o_big;.  }.  pOu
9880: 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
9890: 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 73 71  se(p, pOp);.  sq
98a0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
98b0: 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 56  lowCopy(pOut, pV
98c0: 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b  ar, MEM_Static);
98d0: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
98e0: 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
98f0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
9900: 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20 50 32 20  ode: Move P1 P2 
9910: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
9920: 69 73 3a 20 20 72 5b 50 32 40 50 33 5d 3d 72 5b  is:  r[P2@P3]=r[
9930: 50 31 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d 6f 76  P1@P3].**.** Mov
9940: 65 20 74 68 65 20 50 33 20 76 61 6c 75 65 73 20  e the P3 values 
9950: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 2e  in register P1..
9960: 50 31 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e 74  P1+P3-1 over int
9970: 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20 50  o.** registers P
9980: 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65 67  2..P2+P3-1.  Reg
9990: 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33  isters P1..P1+P3
99a0: 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20 68  -1 are.** left h
99b0: 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20 20  olding a NULL.  
99c0: 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66  It is an error f
99d0: 6f 72 20 72 65 67 69 73 74 65 72 20 72 61 6e 67  or register rang
99e0: 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33 2d  es.** P1..P1+P3-
99f0: 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33 2d  1 and P2..P2+P3-
9a00: 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e 20 20 49  1 to overlap.  I
9a10: 74 20 69 73 20 61 6e 20 65 72 72 6f 72 0a 2a 2a  t is an error.**
9a20: 20 66 6f 72 20 50 33 20 74 6f 20 62 65 20 6c 65   for P3 to be le
9a30: 73 73 20 74 68 61 6e 20 31 2e 0a 2a 2f 0a 63 61  ss than 1..*/.ca
9a40: 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20  se OP_Move: {.  
9a50: 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20  int n;          
9a60: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65   /* Number of re
9a70: 67 69 73 74 65 72 73 20 6c 65 66 74 20 74 6f 20  gisters left to 
9a80: 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20 70 31  copy */.  int p1
9a90: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  ;          /* Re
9aa0: 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 66  gister to copy f
9ab0: 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b  rom */.  int p2;
9ac0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
9ad0: 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 74 6f  ister to copy to
9ae0: 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e   */..  n = pOp->
9af0: 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e  p3;.  p1 = pOp->
9b00: 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e  p1;.  p2 = pOp->
9b10: 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e  p2;.  assert( n>
9b20: 30 20 26 26 20 70 31 3e 30 20 26 26 20 70 32 3e  0 && p1>0 && p2>
9b30: 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
9b40: 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c  1+n<=p2 || p2+n<
9b50: 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31 20 3d  =p1 );..  pIn1 =
9b60: 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f   &aMem[p1];.  pO
9b70: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a  ut = &aMem[p2];.
9b80: 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74    do{.    assert
9b90: 28 20 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b 28 70  ( pOut<=&aMem[(p
9ba0: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
9bb0: 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61  ursor)] );.    a
9bc0: 73 73 65 72 74 28 20 70 49 6e 31 3c 3d 26 61 4d  ssert( pIn1<=&aM
9bd0: 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  em[(p->nMem+1 - 
9be0: 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a  p->nCursor)] );.
9bf0: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
9c00: 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a  sValid(pIn1) );.
9c10: 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
9c20: 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20  ange(p, pOut);. 
9c30: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
9c40: 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e 31  mMove(pOut, pIn1
9c50: 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
9c60: 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 70  _DEBUG.    if( p
9c70: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3e  Out->pScopyFrom>
9c80: 3d 26 61 4d 65 6d 5b 70 31 5d 20 26 26 20 70 4f  =&aMem[p1] && pO
9c90: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3c 70  ut->pScopyFrom<p
9ca0: 4f 75 74 20 29 7b 0a 20 20 20 20 20 20 70 4f 75  Out ){.      pOu
9cb0: 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 2b 3d  t->pScopyFrom +=
9cc0: 20 70 4f 70 2d 3e 70 32 20 2d 20 70 31 3b 0a 20   pOp->p2 - p1;. 
9cd0: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20     }.#endif.    
9ce0: 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70  Deephemeralize(p
9cf0: 4f 75 74 29 3b 0a 20 20 20 20 52 45 47 49 53 54  Out);.    REGIST
9d00: 45 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c 20 70  ER_TRACE(p2++, p
9d10: 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b  Out);.    pIn1++
9d20: 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20  ;.    pOut++;.  
9d30: 7d 77 68 69 6c 65 28 20 2d 2d 6e 20 29 3b 0a 20  }while( --n );. 
9d40: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
9d50: 63 6f 64 65 3a 20 43 6f 70 79 20 50 31 20 50 32  code: Copy P1 P2
9d60: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
9d70: 73 69 73 3a 20 72 5b 50 32 40 50 33 2b 31 5d 3d  sis: r[P2@P3+1]=
9d80: 72 5b 50 31 40 50 33 2b 31 5d 0a 2a 2a 0a 2a 2a  r[P1@P3+1].**.**
9d90: 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20   Make a copy of 
9da0: 72 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31  registers P1..P1
9db0: 2b 50 33 20 69 6e 74 6f 20 72 65 67 69 73 74 65  +P3 into registe
9dc0: 72 73 20 50 32 2e 2e 50 32 2b 50 33 2e 0a 2a 2a  rs P2..P2+P3..**
9dd0: 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
9de0: 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65 65  tion makes a dee
9df0: 70 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61  p copy of the va
9e00: 6c 75 65 2e 20 20 41 20 64 75 70 6c 69 63 61 74  lue.  A duplicat
9e10: 65 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66 20  e.** is made of 
9e20: 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c  any string or bl
9e30: 6f 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53 65  ob constant.  Se
9e40: 65 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79 2e  e also OP_SCopy.
9e50: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70 79  .*/.case OP_Copy
9e60: 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20  : {.  int n;..  
9e70: 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70  n = pOp->p3;.  p
9e80: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
9e90: 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p1];.  pOut = &
9ea0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
9eb0: 20 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70   assert( pOut!=p
9ec0: 49 6e 31 20 29 3b 0a 20 20 77 68 69 6c 65 28 20  In1 );.  while( 
9ed0: 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  1 ){.    sqlite3
9ee0: 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
9ef0: 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d  py(pOut, pIn1, M
9f00: 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 20 20 44  EM_Ephem);.    D
9f10: 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f  eephemeralize(pO
9f20: 75 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  ut);.#ifdef SQLI
9f30: 54 45 5f 44 45 42 55 47 0a 20 20 20 20 70 4f 75  TE_DEBUG.    pOu
9f40: 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20  t->pScopyFrom = 
9f50: 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 52 45  0;.#endif.    RE
9f60: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
9f70: 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 2d 6e 2c 20  ->p2+pOp->p3-n, 
9f80: 70 4f 75 74 29 3b 0a 20 20 20 20 69 66 28 20 28  pOut);.    if( (
9f90: 6e 2d 2d 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b  n--)==0 ) break;
9fa0: 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20  .    pOut++;.   
9fb0: 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62   pIn1++;.  }.  b
9fc0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
9fd0: 64 65 3a 20 53 43 6f 70 79 20 50 31 20 50 32 20  de: SCopy P1 P2 
9fe0: 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
9ff0: 73 3a 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a  s: r[P2]=r[P1].*
a000: 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68 61 6c  *.** Make a shal
a010: 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72 65 67 69  low copy of regi
a020: 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67  ster P1 into reg
a030: 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
a040: 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
a050: 20 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c 6f 77   makes a shallow
a060: 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c   copy of the val
a070: 75 65 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  ue.  If the valu
a080: 65 0a 2a 2a 20 69 73 20 61 20 73 74 72 69 6e 67  e.** is a string
a090: 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e 20 74   or blob, then t
a0a0: 68 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c 79 20  he copy is only 
a0b0: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
a0c0: 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61 6e 64  .** original and
a0d0: 20 68 65 6e 63 65 20 69 66 20 74 68 65 20 6f 72   hence if the or
a0e0: 69 67 69 6e 61 6c 20 63 68 61 6e 67 65 73 20 73  iginal changes s
a0f0: 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f 70 79 2e  o will the copy.
a100: 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20 74 68  .** Worse, if th
a110: 65 20 6f 72 69 67 69 6e 61 6c 20 69 73 20 64 65  e original is de
a120: 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 20 63  allocated, the c
a130: 6f 70 79 20 62 65 63 6f 6d 65 73 20 69 6e 76 61  opy becomes inva
a140: 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74 68 65  lid..** Thus the
a150: 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20 67 75   program must gu
a160: 61 72 61 6e 74 65 65 20 74 68 61 74 20 74 68 65  arantee that the
a170: 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c 20 6e   original will n
a180: 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64 75 72  ot change.** dur
a190: 69 6e 67 20 74 68 65 20 6c 69 66 65 74 69 6d 65  ing the lifetime
a1a0: 20 6f 66 20 74 68 65 20 63 6f 70 79 2e 20 20 55   of the copy.  U
a1b0: 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20 6d 61  se OP_Copy to ma
a1c0: 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a  ke a complete.**
a1d0: 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f   copy..*/.case O
a1e0: 50 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20 20 20  P_SCopy: {      
a1f0: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
a200: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
a210: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74  pOp->p1];.  pOut
a220: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
a230: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75  ];.  assert( pOu
a240: 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c  t!=pIn1 );.  sql
a250: 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
a260: 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e  owCopy(pOut, pIn
a270: 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 23  1, MEM_Ephem);.#
a280: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
a290: 55 47 0a 20 20 69 66 28 20 70 4f 75 74 2d 3e 70  UG.  if( pOut->p
a2a0: 53 63 6f 70 79 46 72 6f 6d 3d 3d 30 20 29 20 70  ScopyFrom==0 ) p
a2b0: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20  Out->pScopyFrom 
a2c0: 3d 20 70 49 6e 31 3b 0a 23 65 6e 64 69 66 0a 20  = pIn1;.#endif. 
a2d0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
a2e0: 63 6f 64 65 3a 20 49 6e 74 43 6f 70 79 20 50 31  code: IntCopy P1
a2f0: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
a300: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 5b 50  opsis: r[P2]=r[P
a310: 31 5d 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65  1].**.** Transfe
a320: 72 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61  r the integer va
a330: 6c 75 65 20 68 65 6c 64 20 69 6e 20 72 65 67 69  lue held in regi
a340: 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67  ster P1 into reg
a350: 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
a360: 54 68 69 73 20 69 73 20 61 6e 20 6f 70 74 69 6d  This is an optim
a370: 69 7a 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20  ized version of 
a380: 53 43 6f 70 79 20 74 68 61 74 20 77 6f 72 6b 73  SCopy that works
a390: 20 6f 6e 6c 79 20 66 6f 72 20 69 6e 74 65 67 65   only for intege
a3a0: 72 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a 2f 0a  r.** values..*/.
a3b0: 63 61 73 65 20 4f 50 5f 49 6e 74 43 6f 70 79 3a  case OP_IntCopy:
a3c0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
a3d0: 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20   out2 */.  pIn1 
a3e0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
a3f0: 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e  ;.  assert( (pIn
a400: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
a410: 6e 74 29 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74  nt)!=0 );.  pOut
a420: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
a430: 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  ];.  sqlite3Vdbe
a440: 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74  MemSetInt64(pOut
a450: 2c 20 70 49 6e 31 2d 3e 75 2e 69 29 3b 0a 20 20  , pIn1->u.i);.  
a460: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
a470: 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f 77 20 50  ode: ResultRow P
a480: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
a490: 6e 6f 70 73 69 73 3a 20 20 6f 75 74 70 75 74 3d  nopsis:  output=
a4a0: 72 5b 50 31 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 54  r[P1@P2].**.** T
a4b0: 68 65 20 72 65 67 69 73 74 65 72 73 20 50 31 20  he registers P1 
a4c0: 74 68 72 6f 75 67 68 20 50 31 2b 50 32 2d 31 20  through P1+P2-1 
a4d0: 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c 65  contain a single
a4e0: 20 72 6f 77 20 6f 66 0a 2a 2a 20 72 65 73 75 6c   row of.** resul
a4f0: 74 73 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20  ts. This opcode 
a500: 63 61 75 73 65 73 20 74 68 65 20 73 71 6c 69 74  causes the sqlit
a510: 65 33 5f 73 74 65 70 28 29 20 63 61 6c 6c 20 74  e3_step() call t
a520: 6f 20 74 65 72 6d 69 6e 61 74 65 0a 2a 2a 20 77  o terminate.** w
a530: 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 52 4f  ith an SQLITE_RO
a540: 57 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61 6e  W return code an
a550: 64 20 69 74 20 73 65 74 73 20 75 70 20 74 68 65  d it sets up the
a560: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 0a 2a 2a   sqlite3_stmt.**
a570: 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 70 72   structure to pr
a580: 6f 76 69 64 65 20 61 63 63 65 73 73 20 74 6f 20  ovide access to 
a590: 74 68 65 20 72 28 50 31 29 2e 2e 72 28 50 31 2b  the r(P1)..r(P1+
a5a0: 50 32 2d 31 29 20 76 61 6c 75 65 73 20 61 73 0a  P2-1) values as.
a5b0: 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f  ** the result ro
a5c0: 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  w..*/.case OP_Re
a5d0: 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d  sultRow: {.  Mem
a5e0: 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b   *pMem;.  int i;
a5f0: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6e 52  .  assert( p->nR
a600: 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70  esColumn==pOp->p
a610: 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  2 );.  assert( p
a620: 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73  Op->p1>0 );.  as
a630: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f  sert( pOp->p1+pO
a640: 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p2<=(p->nMem+
a650: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  1 - p->nCursor)+
a660: 31 20 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  1 );..#ifndef SQ
a670: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
a680: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a  SS_CALLBACK.  /*
a690: 20 52 75 6e 20 74 68 65 20 70 72 6f 67 72 65 73   Run the progres
a6a0: 73 20 63 6f 75 6e 74 65 72 20 6a 75 73 74 20 62  s counter just b
a6b0: 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 2e  efore returning.
a6c0: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e  .  */.  if( db->
a6d0: 78 50 72 6f 67 72 65 73 73 21 3d 30 0a 20 20 20  xProgress!=0.   
a6e0: 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f  && nVmStep>=nPro
a6f0: 67 72 65 73 73 4c 69 6d 69 74 0a 20 20 20 26 26  gressLimit.   &&
a700: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64   db->xProgress(d
a710: 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29  b->pProgressArg)
a720: 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 72 63 20  !=0.  ){.    rc 
a730: 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55  = SQLITE_INTERRU
a740: 50 54 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f  PT;.    goto abo
a750: 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
a760: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f  .  }.#endif..  /
a770: 2a 20 49 66 20 74 68 69 73 20 73 74 61 74 65 6d  * If this statem
a780: 65 6e 74 20 68 61 73 20 76 69 6f 6c 61 74 65 64  ent has violated
a790: 20 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69   immediate forei
a7a0: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
a7b0: 74 73 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74 20  ts, do.  ** not 
a7c0: 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  return the numbe
a7d0: 72 20 6f 66 20 72 6f 77 73 20 6d 6f 64 69 66 69  r of rows modifi
a7e0: 65 64 2e 20 41 6e 64 20 64 6f 20 6e 6f 74 20 52  ed. And do not R
a7f0: 45 4c 45 41 53 45 20 74 68 65 20 73 74 61 74 65  ELEASE the state
a800: 6d 65 6e 74 0a 20 20 2a 2a 20 74 72 61 6e 73 61  ment.  ** transa
a810: 63 74 69 6f 6e 2e 20 49 74 20 6e 65 65 64 73 20  ction. It needs 
a820: 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  to be rolled bac
a830: 6b 2e 20 20 2a 2f 0a 20 20 69 66 28 20 53 51 4c  k.  */.  if( SQL
a840: 49 54 45 5f 4f 4b 21 3d 28 72 63 20 3d 20 73 71  ITE_OK!=(rc = sq
a850: 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b  lite3VdbeCheckFk
a860: 28 70 2c 20 30 29 29 20 29 7b 0a 20 20 20 20 61  (p, 0)) ){.    a
a870: 73 73 65 72 74 28 20 64 62 2d 3e 66 6c 61 67 73  ssert( db->flags
a880: 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77  &SQLITE_CountRow
a890: 73 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  s );.    assert(
a8a0: 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72   p->usesStmtJour
a8b0: 6e 61 6c 20 29 3b 0a 20 20 20 20 67 6f 74 6f 20  nal );.    goto 
a8c0: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
a8d0: 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66  or;.  }..  /* If
a8e0: 20 74 68 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e   the SQLITE_Coun
a8f0: 74 52 6f 77 73 20 66 6c 61 67 20 69 73 20 73 65  tRows flag is se
a900: 74 20 69 6e 20 73 71 6c 69 74 65 33 2e 66 6c 61  t in sqlite3.fla
a910: 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 0a 20  gs mask, then . 
a920: 20 2a 2a 20 44 4d 4c 20 73 74 61 74 65 6d 65 6e   ** DML statemen
a930: 74 73 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f  ts invoke this o
a940: 70 63 6f 64 65 20 74 6f 20 72 65 74 75 72 6e 20  pcode to return 
a950: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
a960: 77 73 20 0a 20 20 2a 2a 20 6d 6f 64 69 66 69 65  ws .  ** modifie
a970: 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54  d to the user. T
a980: 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20  his is the only 
a990: 77 61 79 20 74 68 61 74 20 61 20 56 4d 20 74 68  way that a VM th
a9a0: 61 74 0a 20 20 2a 2a 20 6f 70 65 6e 73 20 61 20  at.  ** opens a 
a9b0: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
a9c0: 63 74 69 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b 65  ction may invoke
a9d0: 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 20 20   this opcode..  
a9e0: 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63 61 73 65 20  **.  ** In case 
a9f0: 74 68 69 73 20 69 73 20 73 75 63 68 20 61 20 73  this is such a s
aa00: 74 61 74 65 6d 65 6e 74 2c 20 63 6c 6f 73 65 20  tatement, close 
aa10: 61 6e 79 20 73 74 61 74 65 6d 65 6e 74 20 74 72  any statement tr
aa20: 61 6e 73 61 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f  ansaction.  ** o
aa30: 70 65 6e 65 64 20 62 79 20 74 68 69 73 20 56 4d  pened by this VM
aa40: 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e   before returnin
aa50: 67 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65  g control to the
aa60: 20 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74   user. This is t
aa70: 6f 0a 20 20 2a 2a 20 65 6e 73 75 72 65 20 74 68  o.  ** ensure th
aa80: 61 74 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61  at statement-tra
aa90: 6e 73 61 63 74 69 6f 6e 73 20 61 72 65 20 61 6c  nsactions are al
aaa0: 77 61 79 73 20 6e 65 73 74 65 64 2c 20 6e 6f 74  ways nested, not
aab0: 20 6f 76 65 72 6c 61 70 70 69 6e 67 2e 0a 20 20   overlapping..  
aac0: 2a 2a 20 49 66 20 74 68 65 20 6f 70 65 6e 20 73  ** If the open s
aad0: 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63  tatement-transac
aae0: 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6c 6f 73  tion is not clos
aaf0: 65 64 20 68 65 72 65 2c 20 74 68 65 6e 20 74 68  ed here, then th
ab00: 65 20 75 73 65 72 0a 20 20 2a 2a 20 6d 61 79 20  e user.  ** may 
ab10: 73 74 65 70 20 61 6e 6f 74 68 65 72 20 56 4d 20  step another VM 
ab20: 74 68 61 74 20 6f 70 65 6e 73 20 69 74 73 20 6f  that opens its o
ab30: 77 6e 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  wn statement tra
ab40: 6e 73 61 63 74 69 6f 6e 2e 20 54 68 69 73 0a 20  nsaction. This. 
ab50: 20 2a 2a 20 6d 61 79 20 6c 65 61 64 20 74 6f 20   ** may lead to 
ab60: 6f 76 65 72 6c 61 70 70 69 6e 67 20 73 74 61 74  overlapping stat
ab70: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
ab80: 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  ns..  **.  ** Th
ab90: 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  e statement tran
aba0: 73 61 63 74 69 6f 6e 20 69 73 20 6e 65 76 65 72  saction is never
abb0: 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20 74 72 61   a top-level tra
abc0: 6e 73 61 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65  nsaction.  Hence
abd0: 0a 20 20 2a 2a 20 74 68 65 20 52 45 4c 45 41 53  .  ** the RELEAS
abe0: 45 20 63 61 6c 6c 20 62 65 6c 6f 77 20 63 61 6e  E call below can
abf0: 20 6e 65 76 65 72 20 66 61 69 6c 2e 0a 20 20 2a   never fail..  *
ac00: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 69  /.  assert( p->i
ac10: 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20  Statement==0 || 
ac20: 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45  db->flags&SQLITE
ac30: 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20  _CountRows );.  
ac40: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
ac50: 43 6c 6f 73 65 53 74 61 74 65 6d 65 6e 74 28 70  CloseStatement(p
ac60: 2c 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  , SAVEPOINT_RELE
ac70: 41 53 45 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ASE);.  assert( 
ac80: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
ac90: 0a 0a 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74  ..  /* Invalidat
aca0: 65 20 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c 20  e all ephemeral 
acb0: 63 75 72 73 6f 72 20 72 6f 77 20 63 61 63 68 65  cursor row cache
acc0: 73 20 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65 43  s */.  p->cacheC
acd0: 74 72 20 3d 20 28 70 2d 3e 63 61 63 68 65 43 74  tr = (p->cacheCt
ace0: 72 20 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20  r + 2)|1;..  /* 
acf0: 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 72 65  Make sure the re
ad00: 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 75 72  sults of the cur
ad10: 72 65 6e 74 20 72 6f 77 20 61 72 65 20 5c 30 30  rent row are \00
ad20: 30 20 74 65 72 6d 69 6e 61 74 65 64 0a 20 20 2a  0 terminated.  *
ad30: 2a 20 61 6e 64 20 68 61 76 65 20 61 6e 20 61 73  * and have an as
ad40: 73 69 67 6e 65 64 20 74 79 70 65 2e 20 20 54 68  signed type.  Th
ad50: 65 20 72 65 73 75 6c 74 73 20 61 72 65 20 64 65  e results are de
ad60: 2d 65 70 68 65 6d 65 72 61 6c 69 7a 65 64 20 61  -ephemeralized a
ad70: 73 0a 20 20 2a 2a 20 61 20 73 69 64 65 20 65 66  s.  ** a side ef
ad80: 66 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65  fect..  */.  pMe
ad90: 6d 20 3d 20 70 2d 3e 70 52 65 73 75 6c 74 53 65  m = p->pResultSe
ada0: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
adb0: 31 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  1];.  for(i=0; i
adc0: 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a  <pOp->p2; i++){.
add0: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
ade0: 73 56 61 6c 69 64 28 26 70 4d 65 6d 5b 69 5d 29  sValid(&pMem[i])
adf0: 20 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65   );.    Deepheme
ae00: 72 61 6c 69 7a 65 28 26 70 4d 65 6d 5b 69 5d 29  ralize(&pMem[i])
ae10: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70  ;.    assert( (p
ae20: 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 4d  Mem[i].flags & M
ae30: 45 4d 5f 45 70 68 65 6d 29 3d 3d 30 0a 20 20 20  EM_Ephem)==0.   
ae40: 20 20 20 20 20 20 20 20 20 7c 7c 20 28 70 4d 65           || (pMe
ae50: 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 28 4d 45  m[i].flags & (ME
ae60: 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29  M_Str|MEM_Blob))
ae70: 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  ==0 );.    sqlit
ae80: 65 33 56 64 62 65 4d 65 6d 4e 75 6c 54 65 72 6d  e3VdbeMemNulTerm
ae90: 69 6e 61 74 65 28 26 70 4d 65 6d 5b 69 5d 29 3b  inate(&pMem[i]);
aea0: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
aeb0: 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26  ACE(pOp->p1+i, &
aec0: 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20  pMem[i]);.  }.  
aed0: 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  if( db->mallocFa
aee0: 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  iled ) goto no_m
aef0: 65 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e  em;..  /* Return
af00: 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f   SQLITE_ROW.  */
af10: 0a 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29  .  p->pc = (int)
af20: 28 70 4f 70 20 2d 20 61 4f 70 29 20 2b 20 31 3b  (pOp - aOp) + 1;
af30: 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52  .  rc = SQLITE_R
af40: 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f  OW;.  goto vdbe_
af50: 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70  return;.}../* Op
af60: 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50 31 20  code: Concat P1 
af70: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
af80: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
af90: 32 5d 2b 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 41  2]+r[P1].**.** A
afa0: 64 64 20 74 68 65 20 74 65 78 74 20 69 6e 20 72  dd the text in r
afb0: 65 67 69 73 74 65 72 20 50 31 20 6f 6e 74 6f 20  egister P1 onto 
afc0: 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 74  the end of the t
afd0: 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74  ext in.** regist
afe0: 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20  er P2 and store 
aff0: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
b000: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
b010: 20 65 69 74 68 65 72 20 74 68 65 20 50 31 20 6f   either the P1 o
b020: 72 20 50 32 20 74 65 78 74 20 61 72 65 20 4e 55  r P2 text are NU
b030: 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 4e 55  LL then store NU
b040: 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  LL in P3..**.** 
b050: 20 20 50 33 20 3d 20 50 32 20 7c 7c 20 50 31 0a    P3 = P2 || P1.
b060: 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65  **.** It is ille
b070: 67 61 6c 20 66 6f 72 20 50 31 20 61 6e 64 20 50  gal for P1 and P
b080: 33 20 74 6f 20 62 65 20 74 68 65 20 73 61 6d 65  3 to be the same
b090: 20 72 65 67 69 73 74 65 72 2e 20 53 6f 6d 65 74   register. Somet
b0a0: 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33 20 69  imes,.** if P3 i
b0b0: 73 20 74 68 65 20 73 61 6d 65 20 72 65 67 69 73  s the same regis
b0c0: 74 65 72 20 61 73 20 50 32 2c 20 74 68 65 20 69  ter as P2, the i
b0d0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73  mplementation is
b0e0: 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f 69   able.** to avoi
b0f0: 64 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f  d a memcpy()..*/
b100: 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61 74 3a  .case OP_Concat:
b110: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
b120: 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e 43 41  same as TK_CONCA
b130: 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  T, in1, in2, out
b140: 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65  3 */.  i64 nByte
b150: 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  ;..  pIn1 = &aMe
b160: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
b170: 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
b180: 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p2];.  pOut = &a
b190: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
b1a0: 61 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70 4f  assert( pIn1!=pO
b1b0: 75 74 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  ut );.  if( (pIn
b1c0: 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d  1->flags | pIn2-
b1d0: 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75  >flags) & MEM_Nu
b1e0: 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ll ){.    sqlite
b1f0: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
b200: 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  pOut);.    break
b210: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 45 78 70 61  ;.  }.  if( Expa
b220: 6e 64 42 6c 6f 62 28 70 49 6e 31 29 20 7c 7c 20  ndBlob(pIn1) || 
b230: 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29  ExpandBlob(pIn2)
b240: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
b250: 20 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31    Stringify(pIn1
b260: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 53  , encoding);.  S
b270: 74 72 69 6e 67 69 66 79 28 70 49 6e 32 2c 20 65  tringify(pIn2, e
b280: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e 42 79 74  ncoding);.  nByt
b290: 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20 70 49  e = pIn1->n + pI
b2a0: 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e 42 79  n2->n;.  if( nBy
b2b0: 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  te>db->aLimit[SQ
b2c0: 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
b2d0: 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  H] ){.    goto t
b2e0: 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 69 66  oo_big;.  }.  if
b2f0: 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
b300: 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29  Grow(pOut, (int)
b310: 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74 3d 3d 70  nByte+2, pOut==p
b320: 49 6e 32 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  In2) ){.    goto
b330: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 4d   no_mem;.  }.  M
b340: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
b350: 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a 20 20  ut, MEM_Str);.  
b360: 69 66 28 20 70 4f 75 74 21 3d 70 49 6e 32 20 29  if( pOut!=pIn2 )
b370: 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 4f 75  {.    memcpy(pOu
b380: 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70  t->z, pIn2->z, p
b390: 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d  In2->n);.  }.  m
b3a0: 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e 7a 5b 70  emcpy(&pOut->z[p
b3b0: 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a  In2->n], pIn1->z
b3c0: 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f  , pIn1->n);.  pO
b3d0: 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 3d 30 3b 0a  ut->z[nByte]=0;.
b3e0: 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 2b    pOut->z[nByte+
b3f0: 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e  1] = 0;.  pOut->
b400: 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72  flags |= MEM_Ter
b410: 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28  m;.  pOut->n = (
b420: 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75  int)nByte;.  pOu
b430: 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e  t->enc = encodin
b440: 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  g;.  UPDATE_MAX_
b450: 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
b460: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
b470: 70 63 6f 64 65 3a 20 41 64 64 20 50 31 20 50 32  pcode: Add P1 P2
b480: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
b490: 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31  sis:  r[P3]=r[P1
b4a0: 5d 2b 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 41 64  ]+r[P2].**.** Ad
b4b0: 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  d the value in r
b4c0: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 74 68  egister P1 to th
b4d0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
b4e0: 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74  ter P2.** and st
b4f0: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
b500: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
b510: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
b520: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
b530: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
b540: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 6c  /./* Opcode: Mul
b550: 74 69 70 6c 79 20 50 31 20 50 32 20 50 33 20 2a  tiply P1 P2 P3 *
b560: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
b570: 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2a 72 5b 50   r[P3]=r[P1]*r[P
b580: 32 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74  2].**.**.** Mult
b590: 69 70 6c 79 20 74 68 65 20 76 61 6c 75 65 20 69  iply the value i
b5a0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79  n register P1 by
b5b0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
b5c0: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
b5d0: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
b5e0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
b5f0: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
b600: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
b610: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b620: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
b630: 53 75 62 74 72 61 63 74 20 50 31 20 50 32 20 50  Subtract P1 P2 P
b640: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
b650: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2d  s:  r[P3]=r[P2]-
b660: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 75 62 74  r[P1].**.** Subt
b670: 72 61 63 74 20 74 68 65 20 76 61 6c 75 65 20 69  ract the value i
b680: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 66 72  n register P1 fr
b690: 6f 6d 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  om the value in 
b6a0: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61  register P2.** a
b6b0: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
b6c0: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
b6d0: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
b6e0: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
b6f0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
b700: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
b710: 3a 20 44 69 76 69 64 65 20 50 31 20 50 32 20 50  : Divide P1 P2 P
b720: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
b730: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2f  s:  r[P3]=r[P2]/
b740: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 44 69 76 69  r[P1].**.** Divi
b750: 64 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  de the value in 
b760: 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74  register P1 by t
b770: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
b780: 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73  ster P2.** and s
b790: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
b7a0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 28  in register P3 (
b7b0: 50 33 3d 50 32 2f 50 31 29 2e 20 49 66 20 74 68  P3=P2/P1). If th
b7c0: 65 20 76 61 6c 75 65 20 69 6e 20 0a 2a 2a 20 72  e value in .** r
b7d0: 65 67 69 73 74 65 72 20 50 31 20 69 73 20 7a 65  egister P1 is ze
b7e0: 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ro, then the res
b7f0: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 49 66 20  ult is NULL. If 
b800: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
b810: 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65  .** NULL, the re
b820: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
b830: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d 61  ./* Opcode: Rema
b840: 69 6e 64 65 72 20 50 31 20 50 32 20 50 33 20 2a  inder P1 P2 P3 *
b850: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
b860: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 25 72 5b 50   r[P3]=r[P2]%r[P
b870: 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65  1].**.** Compute
b880: 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 61   the remainder a
b890: 66 74 65 72 20 69 6e 74 65 67 65 72 20 72 65 67  fter integer reg
b8a0: 69 73 74 65 72 20 50 32 20 69 73 20 64 69 76 69  ister P2 is divi
b8b0: 64 65 64 20 62 79 20 0a 2a 2a 20 72 65 67 69 73  ded by .** regis
b8c0: 74 65 72 20 50 31 20 61 6e 64 20 73 74 6f 72 65  ter P1 and store
b8d0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
b8e0: 65 67 69 73 74 65 72 20 50 33 2e 20 0a 2a 2a 20  egister P3. .** 
b8f0: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  If the value in 
b900: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 7a  register P1 is z
b910: 65 72 6f 20 74 68 65 20 72 65 73 75 6c 74 20 69  ero the result i
b920: 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69  s NULL..** If ei
b930: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
b940: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
b950: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73   is NULL..*/.cas
b960: 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20  e OP_Add:       
b970: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
b980: 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55 53 2c 20  ame as TK_PLUS, 
b990: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
b9a0: 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61  /.case OP_Subtra
b9b0: 63 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  ct:             
b9c0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4d   /* same as TK_M
b9d0: 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  INUS, in1, in2, 
b9e0: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
b9f0: 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 20 20 20  Multiply:       
ba00: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
ba10: 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e 31 2c 20  s TK_STAR, in1, 
ba20: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
ba30: 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 20 20 20  e OP_Divide:    
ba40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
ba50: 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41 53 48 2c  ame as TK_SLASH,
ba60: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
ba70: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6d 61 69  */.case OP_Remai
ba80: 6e 64 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20  nder: {         
ba90: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
baa0: 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  REM, in1, in2, o
bab0: 75 74 33 20 2a 2f 0a 20 20 63 68 61 72 20 62 49  ut3 */.  char bI
bac0: 6e 74 69 6e 74 3b 20 20 20 2f 2a 20 53 74 61 72  ntint;   /* Star
bad0: 74 65 64 20 6f 75 74 20 61 73 20 74 77 6f 20 69  ted out as two i
bae0: 6e 74 65 67 65 72 20 6f 70 65 72 61 6e 64 73 20  nteger operands 
baf0: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 3b 20  */.  u16 flags; 
bb00: 20 20 20 20 20 2f 2a 20 43 6f 6d 62 69 6e 65 64       /* Combined
bb10: 20 4d 45 4d 5f 2a 20 66 6c 61 67 73 20 66 72 6f   MEM_* flags fro
bb20: 6d 20 62 6f 74 68 20 69 6e 70 75 74 73 20 2a 2f  m both inputs */
bb30: 0a 20 20 75 31 36 20 74 79 70 65 31 3b 20 20 20  .  u16 type1;   
bb40: 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79     /* Numeric ty
bb50: 70 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61  pe of left opera
bb60: 6e 64 20 2a 2f 0a 20 20 75 31 36 20 74 79 70 65  nd */.  u16 type
bb70: 32 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72  2;      /* Numer
bb80: 69 63 20 74 79 70 65 20 6f 66 20 72 69 67 68 74  ic type of right
bb90: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36   operand */.  i6
bba0: 34 20 69 41 3b 20 20 20 20 20 20 20 20 20 2f 2a  4 iA;         /*
bbb0: 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f   Integer value o
bbc0: 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a  f left operand *
bbd0: 2f 0a 20 20 69 36 34 20 69 42 3b 20 20 20 20 20  /.  i64 iB;     
bbe0: 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76      /* Integer v
bbf0: 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70  alue of right op
bc00: 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c  erand */.  doubl
bc10: 65 20 72 41 3b 20 20 20 20 20 20 2f 2a 20 52 65  e rA;      /* Re
bc20: 61 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74  al value of left
bc30: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f   operand */.  do
bc40: 75 62 6c 65 20 72 42 3b 20 20 20 20 20 20 2f 2a  uble rB;      /*
bc50: 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 72   Real value of r
bc60: 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  ight operand */.
bc70: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
bc80: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 74 79 70 65  pOp->p1];.  type
bc90: 31 20 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28  1 = numericType(
bca0: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20  pIn1);.  pIn2 = 
bcb0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
bcc0: 20 20 74 79 70 65 32 20 3d 20 6e 75 6d 65 72 69    type2 = numeri
bcd0: 63 54 79 70 65 28 70 49 6e 32 29 3b 0a 20 20 70  cType(pIn2);.  p
bce0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
bcf0: 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 20 3d 20  >p3];.  flags = 
bd00: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
bd10: 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28  n2->flags;.  if(
bd20: 20 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75   (flags & MEM_Nu
bd30: 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f 20 61 72  ll)!=0 ) goto ar
bd40: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
bd50: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20 28  is_null;.  if( (
bd60: 74 79 70 65 31 20 26 20 74 79 70 65 32 20 26 20  type1 & type2 & 
bd70: 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20  MEM_Int)!=0 ){. 
bd80: 20 20 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e     iA = pIn1->u.
bd90: 69 3b 0a 20 20 20 20 69 42 20 3d 20 70 49 6e 32  i;.    iB = pIn2
bda0: 2d 3e 75 2e 69 3b 0a 20 20 20 20 62 49 6e 74 69  ->u.i;.    bInti
bdb0: 6e 74 20 3d 20 31 3b 0a 20 20 20 20 73 77 69 74  nt = 1;.    swit
bdc0: 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ch( pOp->opcode 
bdd0: 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  ){.      case OP
bde0: 5f 41 64 64 3a 20 20 20 20 20 20 20 69 66 28 20  _Add:       if( 
bdf0: 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28  sqlite3AddInt64(
be00: 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66  &iB,iA) ) goto f
be10: 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a  p_math;  break;.
be20: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75        case OP_Su
be30: 62 74 72 61 63 74 3a 20 20 69 66 28 20 73 71 6c  btract:  if( sql
be40: 69 74 65 33 53 75 62 49 6e 74 36 34 28 26 69 42  ite3SubInt64(&iB
be50: 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d  ,iA) ) goto fp_m
be60: 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20  ath;  break;.   
be70: 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69     case OP_Multi
be80: 70 6c 79 3a 20 20 69 66 28 20 73 71 6c 69 74 65  ply:  if( sqlite
be90: 33 4d 75 6c 49 6e 74 36 34 28 26 69 42 2c 69 41  3MulInt64(&iB,iA
bea0: 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68  ) ) goto fp_math
beb0: 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20  ;  break;.      
bec0: 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20  case OP_Divide: 
bed0: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  {.        if( iA
bee0: 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  ==0 ) goto arith
bef0: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
bf00: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66  null;.        if
bf10: 28 20 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d  ( iA==-1 && iB==
bf20: 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29  SMALLEST_INT64 )
bf30: 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 0a 20   goto fp_math;. 
bf40: 20 20 20 20 20 20 20 69 42 20 2f 3d 20 69 41 3b         iB /= iA;
bf50: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
bf60: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65        }.      de
bf70: 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20  fault: {.       
bf80: 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74   if( iA==0 ) got
bf90: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
bfa0: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
bfb0: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20       if( iA==-1 
bfc0: 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20  ) iA = 1;.      
bfd0: 20 20 69 42 20 25 3d 20 69 41 3b 0a 20 20 20 20    iB %= iA;.    
bfe0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
bff0: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75   }.    }.    pOu
c000: 74 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a 20 20 20  t->u.i = iB;.   
c010: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
c020: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
c030: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 62 49 6e    }else{.    bIn
c040: 74 69 6e 74 20 3d 20 30 3b 0a 66 70 5f 6d 61 74  tint = 0;.fp_mat
c050: 68 3a 0a 20 20 20 20 72 41 20 3d 20 73 71 6c 69  h:.    rA = sqli
c060: 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65  te3VdbeRealValue
c070: 28 70 49 6e 31 29 3b 0a 20 20 20 20 72 42 20 3d  (pIn1);.    rB =
c080: 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c   sqlite3VdbeReal
c090: 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20  Value(pIn2);.   
c0a0: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
c0b0: 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61  code ){.      ca
c0c0: 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20  se OP_Add:      
c0d0: 20 20 20 72 42 20 2b 3d 20 72 41 3b 20 20 20 20     rB += rA;    
c0e0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
c0f0: 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74  case OP_Subtract
c100: 3a 20 20 20 20 72 42 20 2d 3d 20 72 41 3b 20 20  :    rB -= rA;  
c110: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
c120: 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70    case OP_Multip
c130: 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20 72 41 3b  ly:    rB *= rA;
c140: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
c150: 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69      case OP_Divi
c160: 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a  de: {.        /*
c170: 20 28 64 6f 75 62 6c 65 29 30 20 49 6e 20 63 61   (double)0 In ca
c180: 73 65 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49  se of SQLITE_OMI
c190: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
c1a0: 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  ... */.        i
c1b0: 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29 30  f( rA==(double)0
c1c0: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
c1d0: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
c1e0: 6c 3b 0a 20 20 20 20 20 20 20 20 72 42 20 2f 3d  l;.        rB /=
c1f0: 20 72 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65   rA;.        bre
c200: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
c210: 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20    default: {.   
c220: 20 20 20 20 20 69 41 20 3d 20 28 69 36 34 29 72       iA = (i64)r
c230: 41 3b 0a 20 20 20 20 20 20 20 20 69 42 20 3d 20  A;.        iB = 
c240: 28 69 36 34 29 72 42 3b 0a 20 20 20 20 20 20 20  (i64)rB;.       
c250: 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74   if( iA==0 ) got
c260: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
c270: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
c280: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20       if( iA==-1 
c290: 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20  ) iA = 1;.      
c2a0: 20 20 72 42 20 3d 20 28 64 6f 75 62 6c 65 29 28    rB = (double)(
c2b0: 69 42 20 25 20 69 41 29 3b 0a 20 20 20 20 20 20  iB % iA);.      
c2c0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
c2d0: 0a 20 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51  .    }.#ifdef SQ
c2e0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
c2f0: 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f 75  NG_POINT.    pOu
c300: 74 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20 20  t->u.i = rB;.   
c310: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
c320: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
c330: 23 65 6c 73 65 0a 20 20 20 20 69 66 28 20 73 71  #else.    if( sq
c340: 6c 69 74 65 33 49 73 4e 61 4e 28 72 42 29 20 29  lite3IsNaN(rB) )
c350: 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69  {.      goto ari
c360: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
c370: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20  s_null;.    }.  
c380: 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d 20 72 42    pOut->u.r = rB
c390: 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
c3a0: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 52  Flag(pOut, MEM_R
c3b0: 65 61 6c 29 3b 0a 20 20 20 20 69 66 28 20 28 28  eal);.    if( ((
c3c0: 74 79 70 65 31 7c 74 79 70 65 32 29 26 4d 45 4d  type1|type2)&MEM
c3d0: 5f 52 65 61 6c 29 3d 3d 30 20 26 26 20 21 62 49  _Real)==0 && !bI
c3e0: 6e 74 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73  ntint ){.      s
c3f0: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65  qlite3VdbeIntege
c400: 72 41 66 66 69 6e 69 74 79 28 70 4f 75 74 29 3b  rAffinity(pOut);
c410: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
c420: 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61 72 69 74  }.  break;..arit
c430: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
c440: 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69 74 65 33  _null:.  sqlite3
c450: 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
c460: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
c470: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c  ../* Opcode: Col
c480: 6c 53 65 71 20 50 31 20 2a 20 2a 20 50 34 0a 2a  lSeq P1 * * P4.*
c490: 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
c4a0: 6e 74 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65  nter to a CollSe
c4b0: 71 20 73 74 72 75 63 74 2e 20 49 66 20 74 68 65  q struct. If the
c4c0: 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f 20 61 20   next call to a 
c4d0: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a  user function.**
c4e0: 20 6f 72 20 61 67 67 72 65 67 61 74 65 20 63 61   or aggregate ca
c4f0: 6c 6c 73 20 73 71 6c 69 74 65 33 47 65 74 46 75  lls sqlite3GetFu
c500: 6e 63 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69  ncCollSeq(), thi
c510: 73 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  s collation sequ
c520: 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20  ence will.** be 
c530: 72 65 74 75 72 6e 65 64 2e 20 54 68 69 73 20 69  returned. This i
c540: 73 20 75 73 65 64 20 62 79 20 74 68 65 20 62 75  s used by the bu
c550: 69 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61  ilt-in min(), ma
c560: 78 28 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29  x() and nullif()
c570: 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a  .** functions..*
c580: 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f  *.** If P1 is no
c590: 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20  t zero, then it 
c5a0: 69 73 20 61 20 72 65 67 69 73 74 65 72 20 74 68  is a register th
c5b0: 61 74 20 61 20 73 75 62 73 65 71 75 65 6e 74 20  at a subsequent 
c5c0: 6d 69 6e 28 29 20 6f 72 0a 2a 2a 20 6d 61 78 28  min() or.** max(
c5d0: 29 20 61 67 67 72 65 67 61 74 65 20 77 69 6c 6c  ) aggregate will
c5e0: 20 73 65 74 20 74 6f 20 31 20 69 66 20 74 68 65   set to 1 if the
c5f0: 20 63 75 72 72 65 6e 74 20 72 6f 77 20 69 73 20   current row is 
c600: 6e 6f 74 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20  not the minimum 
c610: 6f 72 0a 2a 2a 20 6d 61 78 69 6d 75 6d 2e 20 20  or.** maximum.  
c620: 54 68 65 20 50 31 20 72 65 67 69 73 74 65 72 20  The P1 register 
c630: 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74  is initialized t
c640: 6f 20 30 20 62 79 20 74 68 69 73 20 69 6e 73 74  o 0 by this inst
c650: 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ruction..**.** T
c660: 68 65 20 69 6e 74 65 72 66 61 63 65 20 75 73 65  he interface use
c670: 64 20 62 79 20 74 68 65 20 69 6d 70 6c 65 6d 65  d by the impleme
c680: 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 61  ntation of the a
c690: 66 6f 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66 75  forementioned fu
c6a0: 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65  nctions.** to re
c6b0: 74 72 69 65 76 65 20 74 68 65 20 63 6f 6c 6c 61  trieve the colla
c6c0: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 73 65  tion sequence se
c6d0: 74 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65  t by this opcode
c6e0: 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c   is not availabl
c6f0: 65 0a 2a 2a 20 70 75 62 6c 69 63 6c 79 2e 20 20  e.** publicly.  
c700: 4f 6e 6c 79 20 62 75 69 6c 74 2d 69 6e 20 66 75  Only built-in fu
c710: 6e 63 74 69 6f 6e 73 20 68 61 76 65 20 61 63 63  nctions have acc
c720: 65 73 73 20 74 6f 20 74 68 69 73 20 66 65 61 74  ess to this feat
c730: 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ure..*/.case OP_
c740: 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73 73  CollSeq: {.  ass
c750: 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
c760: 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a  ==P4_COLLSEQ );.
c770: 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b    if( pOp->p1 ){
c780: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
c790: 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65  MemSetInt64(&aMe
c7a0: 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 30 29 3b 0a  m[pOp->p1], 0);.
c7b0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
c7c0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 75 6e 63 74  /* Opcode: Funct
c7d0: 69 6f 6e 30 20 50 31 20 50 32 20 50 33 20 50 34  ion0 P1 P2 P3 P4
c7e0: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
c7f0: 20 72 5b 50 33 5d 3d 66 75 6e 63 28 72 5b 50 32   r[P3]=func(r[P2
c800: 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f  @P5]).**.** Invo
c810: 6b 65 20 61 20 75 73 65 72 20 66 75 6e 63 74 69  ke a user functi
c820: 6f 6e 20 28 50 34 20 69 73 20 61 20 70 6f 69 6e  on (P4 is a poin
c830: 74 65 72 20 74 6f 20 61 20 46 75 6e 63 44 65 66  ter to a FuncDef
c840: 20 6f 62 6a 65 63 74 20 74 68 61 74 0a 2a 2a 20   object that.** 
c850: 64 65 66 69 6e 65 73 20 74 68 65 20 66 75 6e 63  defines the func
c860: 74 69 6f 6e 29 20 77 69 74 68 20 50 35 20 61 72  tion) with P5 ar
c870: 67 75 6d 65 6e 74 73 20 74 61 6b 65 6e 20 66 72  guments taken fr
c880: 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61  om register P2 a
c890: 6e 64 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73  nd.** successors
c8a0: 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66  .  The result of
c8b0: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 73   the function is
c8c0: 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
c8d0: 74 65 72 20 50 33 2e 0a 2a 2a 20 52 65 67 69 73  ter P3..** Regis
c8e0: 74 65 72 20 50 33 20 6d 75 73 74 20 6e 6f 74 20  ter P3 must not 
c8f0: 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 75  be one of the fu
c900: 6e 63 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a  nction inputs..*
c910: 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 33 32 2d  *.** P1 is a 32-
c920: 62 69 74 20 62 69 74 6d 61 73 6b 20 69 6e 64 69  bit bitmask indi
c930: 63 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f  cating whether o
c940: 72 20 6e 6f 74 20 65 61 63 68 20 61 72 67 75 6d  r not each argum
c950: 65 6e 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66  ent to the .** f
c960: 75 6e 63 74 69 6f 6e 20 77 61 73 20 64 65 74 65  unction was dete
c970: 72 6d 69 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e  rmined to be con
c980: 73 74 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65  stant at compile
c990: 20 74 69 6d 65 2e 20 49 66 20 74 68 65 20 66 69   time. If the fi
c9a0: 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  rst.** argument 
c9b0: 77 61 73 20 63 6f 6e 73 74 61 6e 74 20 74 68 65  was constant the
c9c0: 6e 20 62 69 74 20 30 20 6f 66 20 50 31 20 69 73  n bit 0 of P1 is
c9d0: 20 73 65 74 2e 20 54 68 69 73 20 69 73 20 75 73   set. This is us
c9e0: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a  ed to determine.
c9f0: 2a 2a 20 77 68 65 74 68 65 72 20 6d 65 74 61 20  ** whether meta 
ca00: 64 61 74 61 20 61 73 73 6f 63 69 61 74 65 64 20  data associated 
ca10: 77 69 74 68 20 61 20 75 73 65 72 20 66 75 6e 63  with a user func
ca20: 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75 73  tion argument us
ca30: 69 6e 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74  ing the.** sqlit
ca40: 65 33 5f 73 65 74 5f 61 75 78 64 61 74 61 28 29  e3_set_auxdata()
ca50: 20 41 50 49 20 6d 61 79 20 62 65 20 73 61 66 65   API may be safe
ca60: 6c 79 20 72 65 74 61 69 6e 65 64 20 75 6e 74 69  ly retained unti
ca70: 6c 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e  l the next.** in
ca80: 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 69 73  vocation of this
ca90: 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53   opcode..**.** S
caa0: 65 65 20 61 6c 73 6f 3a 20 46 75 6e 63 74 69 6f  ee also: Functio
cab0: 6e 2c 20 41 67 67 53 74 65 70 2c 20 41 67 67 46  n, AggStep, AggF
cac0: 69 6e 61 6c 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  inal.*/./* Opcod
cad0: 65 3a 20 46 75 6e 63 74 69 6f 6e 20 50 31 20 50  e: Function P1 P
cae0: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
caf0: 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 66 75  nopsis: r[P3]=fu
cb00: 6e 63 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a  nc(r[P2@P5]).**.
cb10: 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73 65 72  ** Invoke a user
cb20: 20 66 75 6e 63 74 69 6f 6e 20 28 50 34 20 69 73   function (P4 is
cb30: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e   a pointer to an
cb40: 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
cb50: 20 6f 62 6a 65 63 74 20 74 68 61 74 0a 2a 2a 20   object that.** 
cb60: 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e 74  contains a point
cb70: 65 72 20 74 6f 20 74 68 65 20 66 75 6e 63 74 69  er to the functi
cb80: 6f 6e 20 74 6f 20 62 65 20 72 75 6e 29 20 77 69  on to be run) wi
cb90: 74 68 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20  th P5 arguments 
cba0: 74 61 6b 65 6e 0a 2a 2a 20 66 72 6f 6d 20 72 65  taken.** from re
cbb0: 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 73 75  gister P2 and su
cbc0: 63 63 65 73 73 6f 72 73 2e 20 20 54 68 65 20 72  ccessors.  The r
cbd0: 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e  esult of the fun
cbe0: 63 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 0a  ction is stored.
cbf0: 2a 2a 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ** in register P
cc00: 33 2e 20 20 52 65 67 69 73 74 65 72 20 50 33 20  3.  Register P3 
cc10: 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65 20  must not be one 
cc20: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  of the function 
cc30: 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31  inputs..**.** P1
cc40: 20 69 73 20 61 20 33 32 2d 62 69 74 20 62 69 74   is a 32-bit bit
cc50: 6d 61 73 6b 20 69 6e 64 69 63 61 74 69 6e 67 20  mask indicating 
cc60: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 65  whether or not e
cc70: 61 63 68 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  ach argument to 
cc80: 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e  the .** function
cc90: 20 77 61 73 20 64 65 74 65 72 6d 69 6e 65 64 20   was determined 
cca0: 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74 20 61  to be constant a
ccb0: 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e 20  t compile time. 
ccc0: 49 66 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  If the first.** 
ccd0: 61 72 67 75 6d 65 6e 74 20 77 61 73 20 63 6f 6e  argument was con
cce0: 73 74 61 6e 74 20 74 68 65 6e 20 62 69 74 20 30  stant then bit 0
ccf0: 20 6f 66 20 50 31 20 69 73 20 73 65 74 2e 20 54   of P1 is set. T
cd00: 68 69 73 20 69 73 20 75 73 65 64 20 74 6f 20 64  his is used to d
cd10: 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74  etermine.** whet
cd20: 68 65 72 20 6d 65 74 61 20 64 61 74 61 20 61 73  her meta data as
cd30: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
cd40: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 61 72  user function ar
cd50: 67 75 6d 65 6e 74 20 75 73 69 6e 67 20 74 68 65  gument using the
cd60: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65 74 5f  .** sqlite3_set_
cd70: 61 75 78 64 61 74 61 28 29 20 41 50 49 20 6d 61  auxdata() API ma
cd80: 79 20 62 65 20 73 61 66 65 6c 79 20 72 65 74 61  y be safely reta
cd90: 69 6e 65 64 20 75 6e 74 69 6c 20 74 68 65 20 6e  ined until the n
cda0: 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f  ext.** invocatio
cdb0: 6e 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65  n of this opcode
cdc0: 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 20 66 75 6e 63  ..**.** SQL func
cdd0: 74 69 6f 6e 73 20 61 72 65 20 69 6e 69 74 69 61  tions are initia
cde0: 6c 6c 79 20 63 6f 64 65 64 20 61 73 20 4f 50 5f  lly coded as OP_
cdf0: 46 75 6e 63 74 69 6f 6e 30 20 77 69 74 68 20 50  Function0 with P
ce00: 34 20 70 6f 69 6e 74 69 6e 67 0a 2a 2a 20 74 6f  4 pointing.** to
ce10: 20 61 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63   a FuncDef objec
ce20: 74 2e 20 20 42 75 74 20 6f 6e 20 66 69 72 73 74  t.  But on first
ce30: 20 65 76 61 6c 75 61 74 69 6f 6e 2c 20 74 68 65   evaluation, the
ce40: 20 50 34 20 6f 70 65 72 61 6e 64 20 69 73 0a 2a   P4 operand is.*
ce50: 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  * automatically 
ce60: 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61  converted into a
ce70: 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  n sqlite3_contex
ce80: 74 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 65  t object and the
ce90: 20 6f 70 65 72 61 74 69 6f 6e 0a 2a 2a 20 63 68   operation.** ch
cea0: 61 6e 67 65 64 20 74 6f 20 74 68 69 73 20 4f 50  anged to this OP
ceb0: 5f 46 75 6e 63 74 69 6f 6e 20 6f 70 63 6f 64 65  _Function opcode
cec0: 2e 20 20 49 6e 20 74 68 69 73 20 77 61 79 2c 20  .  In this way, 
ced0: 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  the initializati
cee0: 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 73 71 6c  on of.** the sql
cef0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a  ite3_context obj
cf00: 65 63 74 20 6f 63 63 75 72 73 20 6f 6e 6c 79 20  ect occurs only 
cf10: 6f 6e 63 65 2c 20 72 61 74 68 65 72 20 74 68 61  once, rather tha
cf20: 6e 20 6f 6e 63 65 20 66 6f 72 20 65 61 63 68 0a  n once for each.
cf30: 2a 2a 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66  ** evaluation of
cf40: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a   the function..*
cf50: 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
cf60: 75 6e 63 74 69 6f 6e 30 2c 20 41 67 67 53 74 65  unction0, AggSte
cf70: 70 2c 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63  p, AggFinal.*/.c
cf80: 61 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 30  ase OP_Function0
cf90: 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 73  : {.  int n;.  s
cfa0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
cfb0: 70 43 74 78 3b 0a 0a 20 20 61 73 73 65 72 74 28  pCtx;..  assert(
cfc0: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
cfd0: 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20 20 6e 20  _FUNCDEF );.  n 
cfe0: 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73  = pOp->p5;.  ass
cff0: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
d000: 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  & pOp->p3<=(p->n
d010: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
d020: 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  or) );.  assert(
d030: 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70   n==0 || (pOp->p
d040: 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e  2>0 && pOp->p2+n
d050: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
d060: 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 29 20 29 3b  ->nCursor)+1) );
d070: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
d080: 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f  p3<pOp->p2 || pO
d090: 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e  p->p3>=pOp->p2+n
d0a0: 20 29 3b 0a 20 20 70 43 74 78 20 3d 20 73 71 6c   );.  pCtx = sql
d0b0: 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e  ite3DbMallocRawN
d0c0: 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28 2a 70 43  N(db, sizeof(*pC
d0d0: 74 78 29 20 2b 20 28 6e 2d 31 29 2a 73 69 7a 65  tx) + (n-1)*size
d0e0: 6f 66 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  of(sqlite3_value
d0f0: 2a 29 29 3b 0a 20 20 69 66 28 20 70 43 74 78 3d  *));.  if( pCtx=
d100: 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
d110: 3b 0a 20 20 70 43 74 78 2d 3e 70 4f 75 74 20 3d  ;.  pCtx->pOut =
d120: 20 30 3b 0a 20 20 70 43 74 78 2d 3e 70 46 75 6e   0;.  pCtx->pFun
d130: 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e  c = pOp->p4.pFun
d140: 63 3b 0a 20 20 70 43 74 78 2d 3e 69 4f 70 20 3d  c;.  pCtx->iOp =
d150: 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
d160: 29 3b 0a 20 20 70 43 74 78 2d 3e 70 56 64 62 65  );.  pCtx->pVdbe
d170: 20 3d 20 70 3b 0a 20 20 70 43 74 78 2d 3e 61 72   = p;.  pCtx->ar
d180: 67 63 20 3d 20 6e 3b 0a 20 20 70 4f 70 2d 3e 70  gc = n;.  pOp->p
d190: 34 74 79 70 65 20 3d 20 50 34 5f 46 55 4e 43 43  4type = P4_FUNCC
d1a0: 54 58 3b 0a 20 20 70 4f 70 2d 3e 70 34 2e 70 43  TX;.  pOp->p4.pC
d1b0: 74 78 20 3d 20 70 43 74 78 3b 0a 20 20 70 4f 70  tx = pCtx;.  pOp
d1c0: 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 46 75  ->opcode = OP_Fu
d1d0: 6e 63 74 69 6f 6e 3b 0a 20 20 2f 2a 20 46 61 6c  nction;.  /* Fal
d1e0: 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
d1f0: 50 5f 46 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 0a  P_Function */.}.
d200: 63 61 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e  case OP_Function
d210: 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73  : {.  int i;.  s
d220: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
d230: 70 43 74 78 3b 0a 0a 20 20 61 73 73 65 72 74 28  pCtx;..  assert(
d240: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
d250: 5f 46 55 4e 43 43 54 58 20 29 3b 0a 20 20 70 43  _FUNCCTX );.  pC
d260: 74 78 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 43 74  tx = pOp->p4.pCt
d270: 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73  x;..  /* If this
d280: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e 73   function is ins
d290: 69 64 65 20 6f 66 20 61 20 74 72 69 67 67 65 72  ide of a trigger
d2a0: 2c 20 74 68 65 20 72 65 67 69 73 74 65 72 20 61  , the register a
d2b0: 72 72 61 79 20 69 6e 20 61 4d 65 6d 5b 5d 0a 20  rray in aMem[]. 
d2c0: 20 2a 2a 20 6d 69 67 68 74 20 63 68 61 6e 67 65   ** might change
d2d0: 20 66 72 6f 6d 20 6f 6e 65 20 65 76 61 6c 75 61   from one evalua
d2e0: 74 69 6f 6e 20 74 6f 20 74 68 65 20 6e 65 78 74  tion to the next
d2f0: 2e 20 20 54 68 65 20 6e 65 78 74 20 62 6c 6f 63  .  The next bloc
d300: 6b 20 6f 66 20 63 6f 64 65 0a 20 20 2a 2a 20 63  k of code.  ** c
d310: 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20  hecks to see if 
d320: 74 68 65 20 72 65 67 69 73 74 65 72 20 61 72 72  the register arr
d330: 61 79 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20  ay has changed, 
d340: 61 6e 64 20 69 66 20 73 6f 20 69 74 0a 20 20 2a  and if so it.  *
d350: 2a 20 72 65 69 6e 69 74 69 61 6c 69 7a 65 73 20  * reinitializes 
d360: 74 68 65 20 72 65 6c 61 76 61 6e 74 20 70 61 72  the relavant par
d370: 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ts of the sqlite
d380: 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74  3_context object
d390: 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d   */.  pOut = &aM
d3a0: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
d3b0: 66 28 20 70 43 74 78 2d 3e 70 4f 75 74 20 21 3d  f( pCtx->pOut !=
d3c0: 20 70 4f 75 74 20 29 7b 0a 20 20 20 20 70 43 74   pOut ){.    pCt
d3d0: 78 2d 3e 70 4f 75 74 20 3d 20 70 4f 75 74 3b 0a  x->pOut = pOut;.
d3e0: 20 20 20 20 66 6f 72 28 69 3d 70 43 74 78 2d 3e      for(i=pCtx->
d3f0: 61 72 67 63 2d 31 3b 20 69 3e 3d 30 3b 20 69 2d  argc-1; i>=0; i-
d400: 2d 29 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d  -) pCtx->argv[i]
d410: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
d420: 2b 69 5d 3b 0a 20 20 7d 0a 0a 20 20 6d 65 6d 41  +i];.  }..  memA
d430: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
d440: 70 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 23 69 66  pCtx->pOut);.#if
d450: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
d460: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 43  .  for(i=0; i<pC
d470: 74 78 2d 3e 61 72 67 63 3b 20 69 2b 2b 29 7b 0a  tx->argc; i++){.
d480: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
d490: 73 56 61 6c 69 64 28 70 43 74 78 2d 3e 61 72 67  sValid(pCtx->arg
d4a0: 76 5b 69 5d 29 20 29 3b 0a 20 20 20 20 52 45 47  v[i]) );.    REG
d4b0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
d4c0: 3e 70 32 2b 69 2c 20 70 43 74 78 2d 3e 61 72 67  >p2+i, pCtx->arg
d4d0: 76 5b 69 5d 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  v[i]);.  }.#endi
d4e0: 66 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  f.  MemSetTypeFl
d4f0: 61 67 28 70 43 74 78 2d 3e 70 4f 75 74 2c 20 4d  ag(pCtx->pOut, M
d500: 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 70 43 74 78  EM_Null);.  pCtx
d510: 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78 20 3d 20  ->fErrorOrAux = 
d520: 30 3b 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77  0;.  db->lastRow
d530: 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a  id = lastRowid;.
d540: 20 20 28 2a 70 43 74 78 2d 3e 70 46 75 6e 63 2d    (*pCtx->pFunc-
d550: 3e 78 53 46 75 6e 63 29 28 70 43 74 78 2c 20 70  >xSFunc)(pCtx, p
d560: 43 74 78 2d 3e 61 72 67 63 2c 20 70 43 74 78 2d  Ctx->argc, pCtx-
d570: 3e 61 72 67 76 29 3b 2f 2a 20 49 4d 50 3a 20 52  >argv);/* IMP: R
d580: 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a  -24505-23230 */.
d590: 20 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62    lastRowid = db
d5a0: 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 20 20 2f 2a  ->lastRowid;  /*
d5b0: 20 52 65 6d 65 6d 62 65 72 20 72 6f 77 69 64 20   Remember rowid 
d5c0: 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20  changes made by 
d5d0: 78 53 46 75 6e 63 20 2a 2f 0a 0a 20 20 2f 2a 20  xSFunc */..  /* 
d5e0: 49 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  If the function 
d5f0: 72 65 74 75 72 6e 65 64 20 61 6e 20 65 72 72 6f  returned an erro
d600: 72 2c 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65  r, throw an exce
d610: 70 74 69 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 70  ption */.  if( p
d620: 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78  Ctx->fErrorOrAux
d630: 20 29 7b 0a 20 20 20 20 69 66 28 20 70 43 74 78   ){.    if( pCtx
d640: 2d 3e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20  ->isError ){.   
d650: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
d660: 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71 6c  ror(p, "%s", sql
d670: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
d680: 70 43 74 78 2d 3e 70 4f 75 74 29 29 3b 0a 20 20  pCtx->pOut));.  
d690: 20 20 20 20 72 63 20 3d 20 70 43 74 78 2d 3e 69      rc = pCtx->i
d6a0: 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  sError;.    }.  
d6b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 44 65 6c    sqlite3VdbeDel
d6c0: 65 74 65 41 75 78 44 61 74 61 28 64 62 2c 20 26  eteAuxData(db, &
d6d0: 70 2d 3e 70 41 75 78 44 61 74 61 2c 20 70 43 74  p->pAuxData, pCt
d6e0: 78 2d 3e 69 4f 70 2c 20 70 4f 70 2d 3e 70 31 29  x->iOp, pOp->p1)
d6f0: 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67  ;.    if( rc ) g
d700: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
d710: 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f  _error;.  }..  /
d720: 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c  * Copy the resul
d730: 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  t of the functio
d740: 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  n into register 
d750: 50 33 20 2a 2f 0a 20 20 69 66 28 20 70 4f 75 74  P3 */.  if( pOut
d760: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
d770: 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a  tr|MEM_Blob) ){.
d780: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
d790: 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 43  hangeEncoding(pC
d7a0: 74 78 2d 3e 70 4f 75 74 2c 20 65 6e 63 6f 64 69  tx->pOut, encodi
d7b0: 6e 67 29 3b 0a 20 20 20 20 69 66 28 20 73 71 6c  ng);.    if( sql
d7c0: 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
d7d0: 67 28 70 43 74 78 2d 3e 70 4f 75 74 29 20 29 20  g(pCtx->pOut) ) 
d7e0: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
d7f0: 7d 0a 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  }..  REGISTER_TR
d800: 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 43 74  ACE(pOp->p3, pCt
d810: 78 2d 3e 70 4f 75 74 29 3b 0a 20 20 55 50 44 41  x->pOut);.  UPDA
d820: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
d830: 70 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 20 20 62  pCtx->pOut);.  b
d840: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
d850: 64 65 3a 20 42 69 74 41 6e 64 20 50 31 20 50 32  de: BitAnd P1 P2
d860: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
d870: 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31  sis:  r[P3]=r[P1
d880: 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61  ]&r[P2].**.** Ta
d890: 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20  ke the bit-wise 
d8a0: 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65  AND of the value
d8b0: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
d8c0: 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73   and P2 and.** s
d8d0: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
d8e0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
d8f0: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
d900: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
d910: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
d920: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  */./* Opcode: Bi
d930: 74 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a  tOr P1 P2 P3 * *
d940: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
d950: 5b 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b 50 32 5d  [P3]=r[P1]|r[P2]
d960: 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
d970: 62 69 74 2d 77 69 73 65 20 4f 52 20 6f 66 20 74  bit-wise OR of t
d980: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
d990: 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20  ister P1 and P2 
d9a0: 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  and.** store the
d9b0: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
d9c0: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
d9d0: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
d9e0: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
d9f0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
da00: 63 6f 64 65 3a 20 53 68 69 66 74 4c 65 66 74 20  code: ShiftLeft 
da10: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
da20: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
da30: 3d 72 5b 50 32 5d 3c 3c 72 5b 50 31 5d 0a 2a 2a  =r[P2]<<r[P1].**
da40: 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e  .** Shift the in
da50: 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72  teger value in r
da60: 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74 68  egister P2 to th
da70: 65 20 6c 65 66 74 20 62 79 20 74 68 65 0a 2a 2a  e left by the.**
da80: 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20   number of bits 
da90: 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65  specified by the
daa0: 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69   integer in regi
dab0: 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72  ster P1..** Stor
dac0: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
dad0: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
dae0: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
daf0: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
db00: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
db10: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74  /* Opcode: Shift
db20: 52 69 67 68 74 20 50 31 20 50 32 20 50 33 20 2a  Right P1 P2 P3 *
db30: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
db40: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3e 3e 72 5b   r[P3]=r[P2]>>r[
db50: 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20  P1].**.** Shift 
db60: 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  the integer valu
db70: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
db80: 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 62 79   to the right by
db90: 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f   the.** number o
dba0: 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65 64  f bits specified
dbb0: 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72 20   by the integer 
dbc0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
dbd0: 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65 73  ** Store the res
dbe0: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
dbf0: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
dc00: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
dc10: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
dc20: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42  LL..*/.case OP_B
dc30: 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20  itAnd:          
dc40: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
dc50: 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31  s TK_BITAND, in1
dc60: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
dc70: 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20  ase OP_BitOr:   
dc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
dc90: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54  * same as TK_BIT
dca0: 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  OR, in1, in2, ou
dcb0: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68  t3 */.case OP_Sh
dcc0: 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20 20 20  iftLeft:        
dcd0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
dce0: 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c   TK_LSHIFT, in1,
dcf0: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
dd00: 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74  se OP_ShiftRight
dd10: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
dd20: 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53 48 49   same as TK_RSHI
dd30: 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  FT, in1, in2, ou
dd40: 74 33 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 0a  t3 */.  i64 iA;.
dd50: 20 20 75 36 34 20 75 41 3b 0a 20 20 69 36 34 20    u64 uA;.  i64 
dd60: 69 42 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a 20 20  iB;.  u8 op;..  
dd70: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
dd80: 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20  ->p1];.  pIn2 = 
dd90: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
dda0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
ddb0: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28  Op->p3];.  if( (
ddc0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
ddd0: 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d  n2->flags) & MEM
dde0: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c  _Null ){.    sql
ddf0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
de00: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72  ll(pOut);.    br
de10: 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 41 20 3d 20  eak;.  }.  iA = 
de20: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
de30: 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 69 42 20  lue(pIn2);.  iB 
de40: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
de50: 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 6f  Value(pIn1);.  o
de60: 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b  p = pOp->opcode;
de70: 0a 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69  .  if( op==OP_Bi
de80: 74 41 6e 64 20 29 7b 0a 20 20 20 20 69 41 20 26  tAnd ){.    iA &
de90: 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66  = iB;.  }else if
dea0: 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72 20 29  ( op==OP_BitOr )
deb0: 7b 0a 20 20 20 20 69 41 20 7c 3d 20 69 42 3b 0a  {.    iA |= iB;.
dec0: 20 20 7d 65 6c 73 65 20 69 66 28 20 69 42 21 3d    }else if( iB!=
ded0: 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
dee0: 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67   op==OP_ShiftRig
def0: 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69  ht || op==OP_Shi
df00: 66 74 4c 65 66 74 20 29 3b 0a 0a 20 20 20 20 2f  ftLeft );..    /
df10: 2a 20 49 66 20 73 68 69 66 74 69 6e 67 20 62 79  * If shifting by
df20: 20 61 20 6e 65 67 61 74 69 76 65 20 61 6d 6f 75   a negative amou
df30: 6e 74 2c 20 73 68 69 66 74 20 69 6e 20 74 68 65  nt, shift in the
df40: 20 6f 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e   other direction
df50: 20 2a 2f 0a 20 20 20 20 69 66 28 20 69 42 3c 30   */.    if( iB<0
df60: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
df70: 28 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3d  ( OP_ShiftRight=
df80: 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 2b 31 20  =OP_ShiftLeft+1 
df90: 29 3b 0a 20 20 20 20 20 20 6f 70 20 3d 20 32 2a  );.      op = 2*
dfa0: 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 2b 20 31  OP_ShiftLeft + 1
dfb0: 20 2d 20 6f 70 3b 0a 20 20 20 20 20 20 69 42 20   - op;.      iB 
dfc0: 3d 20 69 42 3e 28 2d 36 34 29 20 3f 20 2d 69 42  = iB>(-64) ? -iB
dfd0: 20 3a 20 36 34 3b 0a 20 20 20 20 7d 0a 0a 20 20   : 64;.    }..  
dfe0: 20 20 69 66 28 20 69 42 3e 3d 36 34 20 29 7b 0a    if( iB>=64 ){.
dff0: 20 20 20 20 20 20 69 41 20 3d 20 28 69 41 3e 3d        iA = (iA>=
e000: 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66  0 || op==OP_Shif
e010: 74 4c 65 66 74 29 20 3f 20 30 20 3a 20 2d 31 3b  tLeft) ? 0 : -1;
e020: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
e030: 20 20 6d 65 6d 63 70 79 28 26 75 41 2c 20 26 69    memcpy(&uA, &i
e040: 41 2c 20 73 69 7a 65 6f 66 28 75 41 29 29 3b 0a  A, sizeof(uA));.
e050: 20 20 20 20 20 20 69 66 28 20 6f 70 3d 3d 4f 50        if( op==OP
e060: 5f 53 68 69 66 74 4c 65 66 74 20 29 7b 0a 20 20  _ShiftLeft ){.  
e070: 20 20 20 20 20 20 75 41 20 3c 3c 3d 20 69 42 3b        uA <<= iB;
e080: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
e090: 20 20 20 20 20 20 75 41 20 3e 3e 3d 20 69 42 3b        uA >>= iB;
e0a0: 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 69 67 6e  .        /* Sign
e0b0: 2d 65 78 74 65 6e 64 20 6f 6e 20 61 20 72 69 67  -extend on a rig
e0c0: 68 74 20 73 68 69 66 74 20 6f 66 20 61 20 6e 65  ht shift of a ne
e0d0: 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20 2a 2f  gative number */
e0e0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3c  .        if( iA<
e0f0: 30 20 29 20 75 41 20 7c 3d 20 28 28 28 28 75 36  0 ) uA |= ((((u6
e100: 34 29 30 78 66 66 66 66 66 66 66 66 29 3c 3c 33  4)0xffffffff)<<3
e110: 32 29 7c 30 78 66 66 66 66 66 66 66 66 29 20 3c  2)|0xffffffff) <
e120: 3c 20 28 36 34 2d 69 42 29 3b 0a 20 20 20 20 20  < (64-iB);.     
e130: 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28   }.      memcpy(
e140: 26 69 41 2c 20 26 75 41 2c 20 73 69 7a 65 6f 66  &iA, &uA, sizeof
e150: 28 69 41 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  (iA));.    }.  }
e160: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69  .  pOut->u.i = i
e170: 41 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  A;.  MemSetTypeF
e180: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
e190: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
e1a0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d  /* Opcode: AddIm
e1b0: 6d 20 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  m  P1 P2 * * *.*
e1c0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
e1d0: 31 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a 2a 20 0a  1]=r[P1]+P2.** .
e1e0: 2a 2a 20 41 64 64 20 74 68 65 20 63 6f 6e 73 74  ** Add the const
e1f0: 61 6e 74 20 50 32 20 74 6f 20 74 68 65 20 76 61  ant P2 to the va
e200: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
e210: 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c  P1..** The resul
e220: 74 20 69 73 20 61 6c 77 61 79 73 20 61 6e 20 69  t is always an i
e230: 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f  nteger..**.** To
e240: 20 66 6f 72 63 65 20 61 6e 79 20 72 65 67 69 73   force any regis
e250: 74 65 72 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  ter to be an int
e260: 65 67 65 72 2c 20 6a 75 73 74 20 61 64 64 20 30  eger, just add 0
e270: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64  ..*/.case OP_Add
e280: 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Imm: {          
e290: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49    /* in1 */.  pI
e2a0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
e2b0: 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p1];.  memAboutT
e2c0: 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29  oChange(p, pIn1)
e2d0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
e2e0: 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
e2f0: 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20  1);.  pIn1->u.i 
e300: 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72  += pOp->p2;.  br
e310: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
e320: 65 3a 20 4d 75 73 74 42 65 49 6e 74 20 50 31 20  e: MustBeInt P1 
e330: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20  P2 * * *.** .** 
e340: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
e350: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
e360: 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e  o be an integer.
e370: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
e380: 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f 74 20 61  * in P1 is not a
e390: 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20 63 61  n integer and ca
e3a0: 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65  nnot be converte
e3b0: 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65  d into an intege
e3c0: 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20 64 61 74  r.** without dat
e3d0: 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d  a loss, then jum
e3e0: 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
e3f0: 20 50 32 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30   P2, or if P2==0
e400: 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20 53 51 4c  .** raise an SQL
e410: 49 54 45 5f 4d 49 53 4d 41 54 43 48 20 65 78 63  ITE_MISMATCH exc
e420: 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  eption..*/.case 
e430: 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20  OP_MustBeInt: { 
e440: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
e450: 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
e460: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
e470: 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  1];.  if( (pIn1-
e480: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
e490: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70 70 6c  )==0 ){.    appl
e4a0: 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20  yAffinity(pIn1, 
e4b0: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
e4c0: 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  IC, encoding);. 
e4d0: 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
e4e0: 65 6e 28 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26  en((pIn1->flags&
e4f0: 4d 45 4d 5f 49 6e 74 29 3d 3d 30 2c 20 32 29 3b  MEM_Int)==0, 2);
e500: 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  .    if( (pIn1->
e510: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
e520: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ==0 ){.      if(
e530: 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20   pOp->p2==0 ){. 
e540: 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
e550: 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20  TE_MISMATCH;.   
e560: 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
e570: 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
e580: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
e590: 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
e5a0: 70 32 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  p2;.      }.    
e5b0: 7d 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79  }.  }.  MemSetTy
e5c0: 70 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d  peFlag(pIn1, MEM
e5d0: 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  _Int);.  break;.
e5e0: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
e5f0: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
e600: 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  POINT./* Opcode:
e610: 20 52 65 61 6c 41 66 66 69 6e 69 74 79 20 50 31   RealAffinity P1
e620: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49   * * * *.**.** I
e630: 66 20 72 65 67 69 73 74 65 72 20 50 31 20 68 6f  f register P1 ho
e640: 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 63  lds an integer c
e650: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 72  onvert it to a r
e660: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a  eal value..**.**
e670: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
e680: 75 73 65 64 20 77 68 65 6e 20 65 78 74 72 61 63  used when extrac
e690: 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ting information
e6a0: 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74   from a column t
e6b0: 68 61 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20  hat.** has REAL 
e6c0: 61 66 66 69 6e 69 74 79 2e 20 20 53 75 63 68 20  affinity.  Such 
e6d0: 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61  column values ma
e6e0: 79 20 73 74 69 6c 6c 20 62 65 20 73 74 6f 72 65  y still be store
e6f0: 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73  d as.** integers
e700: 2c 20 66 6f 72 20 73 70 61 63 65 20 65 66 66 69  , for space effi
e710: 63 69 65 6e 63 79 2c 20 62 75 74 20 61 66 74 65  ciency, but afte
e720: 72 20 65 78 74 72 61 63 74 69 6f 6e 20 77 65 20  r extraction we 
e730: 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20  want them.** to 
e740: 68 61 76 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c  have only a real
e750: 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20   value..*/.case 
e760: 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69 74 79 3a  OP_RealAffinity:
e770: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
e780: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
e790: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
e7a0: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p1];.  if( pIn
e7b0: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
e7c0: 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  nt ){.    sqlite
e7d0: 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28  3VdbeMemRealify(
e7e0: 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65  pIn1);.  }.  bre
e7f0: 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
e800: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
e810: 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65  T_CAST./* Opcode
e820: 3a 20 43 61 73 74 20 50 31 20 50 32 20 2a 20 2a  : Cast P1 P2 * *
e830: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
e840: 61 66 66 69 6e 69 74 79 28 72 5b 50 31 5d 29 0a  affinity(r[P1]).
e850: 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20  **.** Force the 
e860: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
e870: 72 20 50 31 20 74 6f 20 62 65 20 74 68 65 20 74  r P1 to be the t
e880: 79 70 65 20 64 65 66 69 6e 65 64 20 62 79 20 50  ype defined by P
e890: 32 2e 0a 2a 2a 20 0a 2a 2a 20 3c 75 6c 3e 0a 2a  2..** .** <ul>.*
e8a0: 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 39 37 22  * <li value="97"
e8b0: 3e 20 54 45 58 54 0a 2a 2a 20 3c 6c 69 20 76 61  > TEXT.** <li va
e8c0: 6c 75 65 3d 22 39 38 22 3e 20 42 4c 4f 42 0a 2a  lue="98"> BLOB.*
e8d0: 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 39 39 22  * <li value="99"
e8e0: 3e 20 4e 55 4d 45 52 49 43 0a 2a 2a 20 3c 6c 69  > NUMERIC.** <li
e8f0: 20 76 61 6c 75 65 3d 22 31 30 30 22 3e 20 49 4e   value="100"> IN
e900: 54 45 47 45 52 0a 2a 2a 20 3c 6c 69 20 76 61 6c  TEGER.** <li val
e910: 75 65 3d 22 31 30 31 22 3e 20 52 45 41 4c 0a 2a  ue="101"> REAL.*
e920: 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 41 20  * </ul>.**.** A 
e930: 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f  NULL value is no
e940: 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69  t changed by thi
e950: 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72  s routine.  It r
e960: 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  emains NULL..*/.
e970: 63 61 73 65 20 4f 50 5f 43 61 73 74 3a 20 7b 20  case OP_Cast: { 
e980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e990: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73   /* in1 */.  ass
e9a0: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 53 51  ert( pOp->p2>=SQ
e9b0: 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 26 26  LITE_AFF_BLOB &&
e9c0: 20 70 4f 70 2d 3e 70 32 3c 3d 53 51 4c 49 54 45   pOp->p2<=SQLITE
e9d0: 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20 74  _AFF_REAL );.  t
e9e0: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32  estcase( pOp->p2
e9f0: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  ==SQLITE_AFF_TEX
ea00: 54 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  T );.  testcase(
ea10: 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
ea20: 5f 41 46 46 5f 42 4c 4f 42 20 29 3b 0a 20 20 74  _AFF_BLOB );.  t
ea30: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32  estcase( pOp->p2
ea40: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  ==SQLITE_AFF_NUM
ea50: 45 52 49 43 20 29 3b 0a 20 20 74 65 73 74 63 61  ERIC );.  testca
ea60: 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c  se( pOp->p2==SQL
ea70: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20  ITE_AFF_INTEGER 
ea80: 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
ea90: 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41  Op->p2==SQLITE_A
eaa0: 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20 70 49 6e  FF_REAL );.  pIn
eab0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
eac0: 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  1];.  memAboutTo
ead0: 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b  Change(p, pIn1);
eae0: 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c  .  rc = ExpandBl
eaf0: 6f 62 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69  ob(pIn1);.  sqli
eb00: 74 65 33 56 64 62 65 4d 65 6d 43 61 73 74 28 70  te3VdbeMemCast(p
eb10: 49 6e 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 65 6e  In1, pOp->p2, en
eb20: 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54  coding);.  UPDAT
eb30: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
eb40: 49 6e 31 29 3b 0a 20 20 69 66 28 20 72 63 20 29  In1);.  if( rc )
eb50: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
eb60: 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
eb70: 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
eb80: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20  QLITE_OMIT_CAST 
eb90: 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  */../* Opcode: L
eba0: 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
ebb0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
ebc0: 20 72 5b 50 31 5d 3c 72 5b 50 33 5d 20 67 6f 74   r[P1]<r[P3] got
ebd0: 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61  o P2.**.** Compa
ebe0: 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  re the values in
ebf0: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
ec00: 20 50 33 2e 20 20 49 66 20 72 65 67 28 50 33 29   P3.  If reg(P3)
ec10: 3c 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a  <reg(P1) then.**
ec20: 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73   jump to address
ec30: 20 50 32 2e 20 20 0a 2a 2a 0a 2a 2a 20 49 66 20   P2.  .**.** If 
ec40: 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  the SQLITE_JUMPI
ec50: 46 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50 35 20  FNULL bit of P5 
ec60: 69 73 20 73 65 74 20 61 6e 64 20 65 69 74 68 65  is set and eithe
ec70: 72 20 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a 20  r reg(P1) or.** 
ec80: 72 65 67 28 50 33 29 20 69 73 20 4e 55 4c 4c 20  reg(P3) is NULL 
ec90: 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
eca0: 6d 70 2e 20 20 49 66 20 74 68 65 20 53 51 4c 49  mp.  If the SQLI
ecb0: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a  TE_JUMPIFNULL .*
ecc0: 2a 20 62 69 74 20 69 73 20 63 6c 65 61 72 20 74  * bit is clear t
ecd0: 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
ece0: 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   if either opera
ecf0: 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  nd is NULL..**.*
ed00: 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46  * The SQLITE_AFF
ed10: 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66  _MASK portion of
ed20: 20 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20 61   P5 must be an a
ed30: 66 66 69 6e 69 74 79 20 63 68 61 72 61 63 74 65  ffinity characte
ed40: 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  r -.** SQLITE_AF
ed50: 46 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f 41  F_TEXT, SQLITE_A
ed60: 46 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64 20  FF_INTEGER, and 
ed70: 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74 74  so forth. An att
ed80: 65 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a  empt is made .**
ed90: 20 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68 20   to coerce both 
eda0: 69 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e 67  inputs according
edb0: 20 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69 74   to this affinit
edc0: 79 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20  y before the.** 
edd0: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d 61  comparison is ma
ede0: 64 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49 54  de. If the SQLIT
edf0: 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30 78  E_AFF_MASK is 0x
ee00: 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69 63  00, then numeric
ee10: 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73 20  .** affinity is 
ee20: 75 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74 20  used. Note that 
ee30: 74 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f 6e  the affinity con
ee40: 76 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74 6f  versions are sto
ee50: 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f  red.** back into
ee60: 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73   the input regis
ee70: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 20  ters P1 and P3. 
ee80: 20 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20   So this opcode 
ee90: 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65 72  can cause.** per
eea0: 73 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73 20  sistent changes 
eeb0: 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 31 20  to registers P1 
eec0: 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e  and P3..**.** On
eed0: 63 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f  ce any conversio
eee0: 6e 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70 6c  ns have taken pl
eef0: 61 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65 72  ace, and neither
ef00: 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20   value is NULL, 
ef10: 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 61  .** the values a
ef20: 72 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66 20  re compared. If 
ef30: 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 20  both values are 
ef40: 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d  blobs then memcm
ef50: 70 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20 74  p() is.** used t
ef60: 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o determine the 
ef70: 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63  results of the c
ef80: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 62  omparison.  If b
ef90: 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72  oth values.** ar
efa0: 65 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68 65  e text, then the
efb0: 20 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f 6c   appropriate col
efc0: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
efd0: 73 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20  specified in.** 
efe0: 50 34 20 69 73 20 20 75 73 65 64 20 74 6f 20 64  P4 is  used to d
eff0: 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  o the comparison
f000: 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  .  If P4 is not 
f010: 73 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a 2a  specified then.*
f020: 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75 73  * memcmp() is us
f030: 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65  ed to compare te
f040: 78 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20 62  xt string.  If b
f050: 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a 2a  oth values are.*
f060: 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e 20  * numeric, then 
f070: 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61 72  a numeric compar
f080: 69 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49 66  ison is used. If
f090: 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73 0a   the two values.
f0a0: 2a 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65 72  ** are of differ
f0b0: 65 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e 20  ent types, then 
f0c0: 6e 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e 73  numbers are cons
f0d0: 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e  idered less than
f0e0: 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64 20  .** strings and 
f0f0: 73 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e 73  strings are cons
f100: 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e  idered less than
f110: 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66   blobs..**.** If
f120: 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f 52   the SQLITE_STOR
f130: 45 50 32 20 62 69 74 20 6f 66 20 50 35 20 69 73  EP2 bit of P5 is
f140: 20 73 65 74 2c 20 74 68 65 6e 20 64 6f 20 6e 6f   set, then do no
f150: 74 20 6a 75 6d 70 2e 20 20 49 6e 73 74 65 61 64  t jump.  Instead
f160: 2c 0a 2a 2a 20 73 74 6f 72 65 20 61 20 62 6f 6f  ,.** store a boo
f170: 6c 65 61 6e 20 72 65 73 75 6c 74 20 28 65 69 74  lean result (eit
f180: 68 65 72 20 30 2c 20 6f 72 20 31 2c 20 6f 72 20  her 0, or 1, or 
f190: 4e 55 4c 4c 29 20 69 6e 20 72 65 67 69 73 74 65  NULL) in registe
f1a0: 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  r P2..**.** If t
f1b0: 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  he SQLITE_NULLEQ
f1c0: 20 62 69 74 20 69 73 20 73 65 74 20 69 6e 20 50   bit is set in P
f1d0: 35 2c 20 74 68 65 6e 20 4e 55 4c 4c 20 76 61 6c  5, then NULL val
f1e0: 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ues are consider
f1f0: 65 64 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 20 6f  ed.** equal to o
f200: 6e 65 20 61 6e 6f 74 68 65 72 2c 20 70 72 6f 76  ne another, prov
f210: 69 64 65 64 20 74 68 61 74 20 74 68 65 79 20 64  ided that they d
f220: 6f 20 6e 6f 74 20 68 61 76 65 20 74 68 65 69 72  o not have their
f230: 20 4d 45 4d 5f 43 6c 65 61 72 65 64 0a 2a 2a 20   MEM_Cleared.** 
f240: 62 69 74 20 73 65 74 2e 0a 2a 2f 0a 2f 2a 20 4f  bit set..*/./* O
f250: 70 63 6f 64 65 3a 20 4e 65 20 50 31 20 50 32 20  pcode: Ne P1 P2 
f260: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
f270: 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d  psis: if r[P1]!=
f280: 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a  r[P3] goto P2.**
f290: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
f2a0: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
f2b0: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
f2c0: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
f2d0: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f  aken if.** the o
f2e0: 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73  perands in regis
f2f0: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61  ters P1 and P3 a
f300: 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53  re not equal.  S
f310: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
f320: 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e   for.** addition
f330: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
f340: 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f  **.** If SQLITE_
f350: 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e  NULLEQ is set in
f360: 20 50 35 20 74 68 65 6e 20 74 68 65 20 72 65 73   P5 then the res
f370: 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  ult of compariso
f380: 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69 74 68  n is always eith
f390: 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61  er.** true or fa
f3a0: 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72  lse and is never
f3b0: 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20   NULL.  If both 
f3c0: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c  operands are NUL
f3d0: 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  L then the resul
f3e0: 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73  t.** of comparis
f3f0: 6f 6e 20 69 73 20 66 61 6c 73 65 2e 20 20 49 66  on is false.  If
f400: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
f410: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  is NULL then the
f420: 20 72 65 73 75 6c 74 20 69 73 20 74 72 75 65 2e   result is true.
f430: 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f  .** If neither o
f440: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74  perand is NULL t
f450: 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65  he result is the
f460: 20 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75 6c   same as it woul
f470: 64 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20 53  d be if.** the S
f480: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61  QLITE_NULLEQ fla
f490: 67 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20 66  g were omitted f
f4a0: 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70  rom P5..*/./* Op
f4b0: 63 6f 64 65 3a 20 45 71 20 50 31 20 50 32 20 50  code: Eq P1 P2 P
f4c0: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
f4d0: 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3d 3d 72  sis: if r[P1]==r
f4e0: 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  [P3] goto P2.**.
f4f0: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
f500: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
f510: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
f520: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
f530: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70  ken if.** the op
f540: 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74  erands in regist
f550: 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72  ers P1 and P3 ar
f560: 65 20 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20  e equal..** See 
f570: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
f580: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
f590: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  ormation..**.** 
f5a0: 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  If SQLITE_NULLEQ
f5b0: 20 69 73 20 73 65 74 20 69 6e 20 50 35 20 74 68   is set in P5 th
f5c0: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  en the result of
f5d0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61   comparison is a
f5e0: 6c 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20  lways either.** 
f5f0: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e  true or false an
f600: 64 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e  d is never NULL.
f610: 20 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e    If both operan
f620: 64 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e  ds are NULL then
f630: 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f   the result.** o
f640: 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  f comparison is 
f650: 74 72 75 65 2e 20 20 49 66 20 65 69 74 68 65 72  true.  If either
f660: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
f670: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
f680: 20 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66   is false..** If
f690: 20 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64   neither operand
f6a0: 20 69 73 20 4e 55 4c 4c 20 74 68 65 20 72 65 73   is NULL the res
f6b0: 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65 20  ult is the same 
f6c0: 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69  as it would be i
f6d0: 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f  f.** the SQLITE_
f6e0: 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65  NULLEQ flag were
f6f0: 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35   omitted from P5
f700: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
f710: 4c 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Le P1 P2 P3 P4 P
f720: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  5.** Synopsis: i
f730: 66 20 72 5b 50 31 5d 3c 3d 72 5b 50 33 5d 20 67  f r[P1]<=r[P3] g
f740: 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69  oto P2.**.** Thi
f750: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
f760: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
f770: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
f780: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
f790: 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  .** the content 
f7a0: 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69  of register P3 i
f7b0: 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  s less than or e
f7c0: 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74  qual to the cont
f7d0: 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74  ent of.** regist
f7e0: 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20  er P1.  See the 
f7f0: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
f800: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
f810: 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
f820: 64 65 3a 20 47 74 20 50 31 20 50 32 20 50 33 20  de: Gt P1 P2 P3 
f830: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
f840: 73 3a 20 69 66 20 72 5b 50 31 5d 3e 72 5b 50 33  s: if r[P1]>r[P3
f850: 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  ] goto P2.**.** 
f860: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
f870: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
f880: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
f890: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
f8a0: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   if.** the conte
f8b0: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
f8c0: 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  3 is greater tha
f8d0: 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  n the content of
f8e0: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e  .** register P1.
f8f0: 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63    See the Lt opc
f900: 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
f910: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
f920: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65  */./* Opcode: Ge
f930: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
f940: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
f950: 72 5b 50 31 5d 3e 3d 72 5b 50 33 5d 20 67 6f 74  r[P1]>=r[P3] got
f960: 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  o P2.**.** This 
f970: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
f980: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
f990: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
f9a0: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
f9b0: 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * the content of
f9c0: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
f9d0: 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
f9e0: 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e  equal to the con
f9f0: 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73  tent of.** regis
fa00: 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65  ter P1.  See the
fa10: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61   Lt opcode for a
fa20: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
fa30: 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ation..*/.case O
fa40: 50 5f 45 71 3a 20 20 20 20 20 20 20 20 20 20 20  P_Eq:           
fa50: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
fa60: 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_EQ, jump, in1,
fa70: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
fa80: 4e 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Ne:             
fa90: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
faa0: 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  NE, jump, in1, i
fab0: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74  n3 */.case OP_Lt
fac0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
fad0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54  /* same as TK_LT
fae0: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
faf0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20   */.case OP_Le: 
fb00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
fb10: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20   same as TK_LE, 
fb20: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
fb30: 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20  /.case OP_Gt:   
fb40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
fb50: 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75  ame as TK_GT, ju
fb60: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
fb70: 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20  case OP_Ge: {   
fb80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
fb90: 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70  e as TK_GE, jump
fba0: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20  , in1, in3 */.  
fbb0: 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20  int res;        
fbc0: 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66      /* Result of
fbd0: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   the comparison 
fbe0: 6f 66 20 70 49 6e 31 20 61 67 61 69 6e 73 74 20  of pIn1 against 
fbf0: 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20 61  pIn3 */.  char a
fc00: 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a  ffinity;      /*
fc10: 20 41 66 66 69 6e 69 74 79 20 74 6f 20 75 73 65   Affinity to use
fc20: 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20   for comparison 
fc30: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 31 3b  */.  u16 flags1;
fc40: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79           /* Copy
fc50: 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75   of initial valu
fc60: 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67 73  e of pIn1->flags
fc70: 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 33   */.  u16 flags3
fc80: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70  ;         /* Cop
fc90: 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c  y of initial val
fca0: 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61 67  ue of pIn3->flag
fcb0: 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26  s */..  pIn1 = &
fcc0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
fcd0: 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
fce0: 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 31  p->p3];.  flags1
fcf0: 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a   = pIn1->flags;.
fd00: 20 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d    flags3 = pIn3-
fd10: 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66  >flags;.  if( (f
fd20: 6c 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29 26  lags1 | flags3)&
fd30: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
fd40: 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f  /* One or both o
fd50: 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c  perands are NULL
fd60: 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   */.    if( pOp-
fd70: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c  >p5 & SQLITE_NUL
fd80: 4c 45 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  LEQ ){.      /* 
fd90: 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  If SQLITE_NULLEQ
fda0: 20 69 73 20 73 65 74 20 28 77 68 69 63 68 20 77   is set (which w
fdb0: 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20  ill only happen 
fdc0: 69 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20  if the operator 
fdd0: 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45  is.      ** OP_E
fde0: 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e  q or OP_Ne) then
fdf0: 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f   take the jump o
fe00: 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20  r not depending 
fe10: 6f 6e 20 77 68 65 74 68 65 72 0a 20 20 20 20 20  on whether.     
fe20: 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20   ** or not both 
fe30: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 75 6c  operands are nul
fe40: 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  l..      */.    
fe50: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
fe60: 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20  pcode==OP_Eq || 
fe70: 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
fe80: 4e 65 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  Ne );.      asse
fe90: 72 74 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45  rt( (flags1 & ME
fea0: 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30 20 29 3b  M_Cleared)==0 );
feb0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
fec0: 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
fed0: 5f 4a 55 4d 50 49 46 4e 55 4c 4c 29 3d 3d 30 20  _JUMPIFNULL)==0 
fee0: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c  );.      if( (fl
fef0: 61 67 73 31 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  ags1&MEM_Null)!=
ff00: 30 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c 61  0.       && (fla
ff10: 67 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  gs3&MEM_Null)!=0
ff20: 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c 61 67  .       && (flag
ff30: 73 33 26 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d  s3&MEM_Cleared)=
ff40: 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20  =0.      ){.    
ff50: 20 20 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a      res = 0;  /*
ff60: 20 52 65 73 75 6c 74 73 20 61 72 65 20 65 71 75   Results are equ
ff70: 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73  al */.      }els
ff80: 65 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d  e{.        res =
ff90: 20 31 3b 20 20 2f 2a 20 52 65 73 75 6c 74 73 20   1;  /* Results 
ffa0: 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a 2f  are not equal */
ffb0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
ffc0: 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 53 51 4c  se{.      /* SQL
ffd0: 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 63 6c  ITE_NULLEQ is cl
ffe0: 65 61 72 20 61 6e 64 20 61 74 20 6c 65 61 73 74  ear and at least
fff0: 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69 73 20   one operand is 
10000 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a 20 74  NULL,.      ** t
10010 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
10020 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a 20  s always NULL.. 
10030 20 20 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70       ** The jump
10040 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65   is taken if the
10050 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
10060 4c 4c 20 62 69 74 20 69 73 20 73 65 74 2e 0a 20  LL bit is set.. 
10070 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66       */.      if
10080 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
10090 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20  TE_STOREP2 ){.  
100a0 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d        pOut = &aM
100b0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20  em[pOp->p2];.   
100c0 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
100d0 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
100e0 20 20 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79          MemSetTy
100f0 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
10100 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20  _Null);.        
10110 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
10120 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20  Op->p2, pOut);. 
10130 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
10140 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
10150 6b 65 6e 28 32 2c 33 29 3b 0a 20 20 20 20 20 20  ken(2,3);.      
10160 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
10170 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
10180 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67  L ){.          g
10190 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
101a0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
101b0 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  }.      break;. 
101c0 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
101d0 20 20 2f 2a 20 4e 65 69 74 68 65 72 20 6f 70 65    /* Neither ope
101e0 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 20 20 44  rand is NULL.  D
101f0 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  o a comparison. 
10200 2a 2f 0a 20 20 20 20 61 66 66 69 6e 69 74 79 20  */.    affinity 
10210 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  = pOp->p5 & SQLI
10220 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a 20 20 20  TE_AFF_MASK;.   
10230 20 69 66 28 20 61 66 66 69 6e 69 74 79 3e 3d 53   if( affinity>=S
10240 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
10250 43 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28  C ){.      if( (
10260 66 6c 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29  flags1 | flags3)
10270 26 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20  &MEM_Str ){.    
10280 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 20      if( (flags1 
10290 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
102a0 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d  eal|MEM_Str))==M
102b0 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20  EM_Str ){.      
102c0 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
102d0 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 30 29  Affinity(pIn1,0)
102e0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
102f0 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 33 20      if( (flags3 
10300 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
10310 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d  eal|MEM_Str))==M
10320 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20  EM_Str ){.      
10330 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
10340 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 30 29  Affinity(pIn3,0)
10350 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
10360 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 20 69 66    }.    }else if
10370 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49  ( affinity==SQLI
10380 54 45 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a 20  TE_AFF_TEXT ){. 
10390 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 31       if( (flags1
103a0 20 26 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26   & MEM_Str)==0 &
103b0 26 20 28 66 6c 61 67 73 31 20 26 20 28 4d 45 4d  & (flags1 & (MEM
103c0 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21  _Int|MEM_Real))!
103d0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 74 65  =0 ){.        te
103e0 73 74 63 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c  stcase( pIn1->fl
103f0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
10400 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73  .        testcas
10410 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  e( pIn1->flags &
10420 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20   MEM_Real );.   
10430 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10440 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70 49 6e  MemStringify(pIn
10450 31 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b  1, encoding, 1);
10460 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73  .        testcas
10470 65 28 20 28 66 6c 61 67 73 31 26 4d 45 4d 5f 44  e( (flags1&MEM_D
10480 79 6e 29 20 21 3d 20 28 70 49 6e 31 2d 3e 66 6c  yn) != (pIn1->fl
10490 61 67 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a  ags&MEM_Dyn) );.
104a0 20 20 20 20 20 20 20 20 66 6c 61 67 73 31 20 3d          flags1 =
104b0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
104c0 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c  ~MEM_TypeMask) |
104d0 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 54   (flags1 & MEM_T
104e0 79 70 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20  ypeMask);.      
104f0 7d 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c 61  }.      if( (fla
10500 67 73 33 20 26 20 4d 45 4d 5f 53 74 72 29 3d 3d  gs3 & MEM_Str)==
10510 30 20 26 26 20 28 66 6c 61 67 73 33 20 26 20 28  0 && (flags3 & (
10520 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
10530 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ))!=0 ){.       
10540 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 33 2d   testcase( pIn3-
10550 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
10560 20 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74   );.        test
10570 63 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67  case( pIn3->flag
10580 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a  s & MEM_Real );.
10590 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
105a0 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28  dbeMemStringify(
105b0 70 49 6e 33 2c 20 65 6e 63 6f 64 69 6e 67 2c 20  pIn3, encoding, 
105c0 31 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74  1);.        test
105d0 63 61 73 65 28 20 28 66 6c 61 67 73 33 26 4d 45  case( (flags3&ME
105e0 4d 5f 44 79 6e 29 20 21 3d 20 28 70 49 6e 33 2d  M_Dyn) != (pIn3-
105f0 3e 66 6c 61 67 73 26 4d 45 4d 5f 44 79 6e 29 20  >flags&MEM_Dyn) 
10600 29 3b 0a 20 20 20 20 20 20 20 20 66 6c 61 67 73  );.        flags
10610 33 20 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  3 = (pIn3->flags
10620 20 26 20 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b   & ~MEM_TypeMask
10630 29 20 7c 20 28 66 6c 61 67 73 33 20 26 20 4d 45  ) | (flags3 & ME
10640 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 20  M_TypeMask);.   
10650 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61     }.    }.    a
10660 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
10670 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 7c  pe==P4_COLLSEQ |
10680 7c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d  | pOp->p4.pColl=
10690 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 66 6c  =0 );.    if( fl
106a0 61 67 73 31 20 26 20 4d 45 4d 5f 5a 65 72 6f 20  ags1 & MEM_Zero 
106b0 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
106c0 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f  VdbeMemExpandBlo
106d0 62 28 70 49 6e 31 29 3b 0a 20 20 20 20 20 20 66  b(pIn1);.      f
106e0 6c 61 67 73 31 20 26 3d 20 7e 4d 45 4d 5f 5a 65  lags1 &= ~MEM_Ze
106f0 72 6f 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ro;.    }.    if
10700 28 20 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 5a  ( flags3 & MEM_Z
10710 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ero ){.      sql
10720 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e  ite3VdbeMemExpan
10730 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20  dBlob(pIn3);.   
10740 20 20 20 66 6c 61 67 73 33 20 26 3d 20 7e 4d 45     flags3 &= ~ME
10750 4d 5f 5a 65 72 6f 3b 0a 20 20 20 20 7d 0a 20 20  M_Zero;.    }.  
10760 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 4d    res = sqlite3M
10770 65 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20  emCompare(pIn3, 
10780 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43  pIn1, pOp->p4.pC
10790 6f 6c 6c 29 3b 0a 20 20 7d 0a 20 20 73 77 69 74  oll);.  }.  swit
107a0 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ch( pOp->opcode 
107b0 29 7b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 45  ){.    case OP_E
107c0 71 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3d  q:    res = res=
107d0 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  =0;     break;. 
107e0 20 20 20 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20     case OP_Ne:  
107f0 20 20 72 65 73 20 3d 20 72 65 73 21 3d 30 3b 20    res = res!=0; 
10800 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
10810 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 72 65  ase OP_Lt:    re
10820 73 20 3d 20 72 65 73 3c 30 3b 20 20 20 20 20 20  s = res<0;      
10830 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
10840 4f 50 5f 4c 65 3a 20 20 20 20 72 65 73 20 3d 20  OP_Le:    res = 
10850 72 65 73 3c 3d 30 3b 20 20 20 20 20 62 72 65 61  res<=0;     brea
10860 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 47  k;.    case OP_G
10870 74 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e  t:    res = res>
10880 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  0;      break;. 
10890 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20     default:     
108a0 20 20 72 65 73 20 3d 20 72 65 73 3e 3d 30 3b 20    res = res>=0; 
108b0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
108c0 20 20 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63 68    /* Undo any ch
108d0 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 61 70  anges made by ap
108e0 70 6c 79 41 66 66 69 6e 69 74 79 28 29 20 74 6f  plyAffinity() to
108f0 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73   the input regis
10900 74 65 72 73 2e 20 2a 2f 0a 20 20 61 73 73 65 72  ters. */.  asser
10910 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  t( (pIn1->flags 
10920 26 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66  & MEM_Dyn) == (f
10930 6c 61 67 73 31 20 26 20 4d 45 4d 5f 44 79 6e 29  lags1 & MEM_Dyn)
10940 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67   );.  pIn1->flag
10950 73 20 3d 20 66 6c 61 67 73 31 3b 0a 20 20 61 73  s = flags1;.  as
10960 73 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61  sert( (pIn3->fla
10970 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d  gs & MEM_Dyn) ==
10980 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 44   (flags3 & MEM_D
10990 79 6e 29 20 29 3b 0a 20 20 70 49 6e 33 2d 3e 66  yn) );.  pIn3->f
109a0 6c 61 67 73 20 3d 20 66 6c 61 67 73 33 3b 0a 0a  lags = flags3;..
109b0 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
109c0 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29  SQLITE_STOREP2 )
109d0 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d  {.    pOut = &aM
109e0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20  em[pOp->p2];.   
109f0 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
10a00 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  e(p, pOut);.    
10a10 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
10a20 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
10a30 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72     pOut->u.i = r
10a40 65 73 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52  es;.    REGISTER
10a50 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
10a60 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  pOut);.  }else{.
10a70 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
10a80 6b 65 6e 28 72 65 73 21 3d 30 2c 20 28 70 4f 70  ken(res!=0, (pOp
10a90 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55  ->p5 & SQLITE_NU
10aa0 4c 4c 45 51 29 3f 32 3a 33 29 3b 0a 20 20 20 20  LLEQ)?2:3);.    
10ab0 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20  if( res ){.     
10ac0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
10ad0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
10ae0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
10af0 65 3a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 2a  e: Permutation *
10b00 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
10b10 53 65 74 20 74 68 65 20 70 65 72 6d 75 74 61 74  Set the permutat
10b20 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20  ion used by the 
10b30 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61  OP_Compare opera
10b40 74 6f 72 20 74 6f 20 62 65 20 74 68 65 20 61 72  tor to be the ar
10b50 72 61 79 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65  ray.** of intege
10b60 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a 20  rs in P4..**.** 
10b70 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  The permutation 
10b80 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 75 6e  is only valid un
10b90 74 69 6c 20 74 68 65 20 6e 65 78 74 20 4f 50 5f  til the next OP_
10ba0 43 6f 6d 70 61 72 65 20 74 68 61 74 20 68 61 73  Compare that has
10bb0 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f 50  .** the OPFLAG_P
10bc0 45 52 4d 55 54 45 20 62 69 74 20 73 65 74 20 69  ERMUTE bit set i
10bd0 6e 20 50 35 2e 20 54 79 70 69 63 61 6c 6c 79 20  n P5. Typically 
10be0 74 68 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69  the OP_Permutati
10bf0 6f 6e 20 73 68 6f 75 6c 64 20 0a 2a 2a 20 6f 63  on should .** oc
10c00 63 75 72 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  cur immediately 
10c10 70 72 69 6f 72 20 74 6f 20 74 68 65 20 4f 50 5f  prior to the OP_
10c20 43 6f 6d 70 61 72 65 2e 0a 2a 2a 0a 2a 2a 20 54  Compare..**.** T
10c30 68 65 20 66 69 72 73 74 20 69 6e 74 65 67 65 72  he first integer
10c40 20 69 6e 20 74 68 65 20 50 34 20 69 6e 74 65 67   in the P4 integ
10c50 65 72 20 61 72 72 61 79 20 69 73 20 74 68 65 20  er array is the 
10c60 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 61 72  length of the ar
10c70 72 61 79 0a 2a 2a 20 61 6e 64 20 64 6f 65 73 20  ray.** and does 
10c80 6e 6f 74 20 62 65 63 6f 6d 65 20 70 61 72 74 20  not become part 
10c90 6f 66 20 74 68 65 20 70 65 72 6d 75 74 61 74 69  of the permutati
10ca0 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  on..*/.case OP_P
10cb0 65 72 6d 75 74 61 74 69 6f 6e 3a 20 7b 0a 20 20  ermutation: {.  
10cc0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
10cd0 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59  ype==P4_INTARRAY
10ce0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
10cf0 70 2d 3e 70 34 2e 61 69 20 29 3b 0a 20 20 61 50  p->p4.ai );.  aP
10d00 65 72 6d 75 74 65 20 3d 20 70 4f 70 2d 3e 70 34  ermute = pOp->p4
10d10 2e 61 69 20 2b 20 31 3b 0a 20 20 62 72 65 61 6b  .ai + 1;.  break
10d20 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
10d30 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50 33  Compare P1 P2 P3
10d40 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
10d50 69 73 3a 20 72 5b 50 31 40 50 33 5d 20 3c 2d 3e  is: r[P1@P3] <->
10d60 20 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20   r[P2@P3].**.** 
10d70 43 6f 6d 70 61 72 65 20 74 77 6f 20 76 65 63 74  Compare two vect
10d80 6f 72 73 20 6f 66 20 72 65 67 69 73 74 65 72 73  ors of registers
10d90 20 69 6e 20 72 65 67 28 50 31 29 2e 2e 72 65 67   in reg(P1)..reg
10da0 28 50 31 2b 50 33 2d 31 29 20 28 63 61 6c 6c 20  (P1+P3-1) (call 
10db0 74 68 69 73 0a 2a 2a 20 76 65 63 74 6f 72 20 22  this.** vector "
10dc0 41 22 29 20 61 6e 64 20 69 6e 20 72 65 67 28 50  A") and in reg(P
10dd0 32 29 2e 2e 72 65 67 28 50 32 2b 50 33 2d 31 29  2)..reg(P2+P3-1)
10de0 20 28 22 42 22 29 2e 20 20 53 61 76 65 20 74 68   ("B").  Save th
10df0 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74  e result of.** t
10e00 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 6f  he comparison fo
10e10 72 20 75 73 65 20 62 79 20 74 68 65 20 6e 65 78  r use by the nex
10e20 74 20 4f 50 5f 4a 75 6d 70 20 69 6e 73 74 72 75  t OP_Jump instru
10e30 63 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  ct..**.** If P5 
10e40 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 50  has the OPFLAG_P
10e50 45 52 4d 55 54 45 20 62 69 74 20 73 65 74 2c 20  ERMUTE bit set, 
10e60 74 68 65 6e 20 74 68 65 20 6f 72 64 65 72 20 6f  then the order o
10e70 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 0a  f comparison is.
10e80 2a 2a 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  ** determined by
10e90 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
10ea0 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20   OP_Permutation 
10eb0 6f 70 65 72 61 74 6f 72 2e 20 20 49 66 20 74 68  operator.  If th
10ec0 65 0a 2a 2a 20 4f 50 46 4c 41 47 5f 50 45 52 4d  e.** OPFLAG_PERM
10ed0 55 54 45 20 62 69 74 20 69 73 20 63 6c 65 61 72  UTE bit is clear
10ee0 2c 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  , then register 
10ef0 61 72 65 20 63 6f 6d 70 61 72 65 64 20 69 6e 20  are compared in 
10f00 73 65 71 75 65 6e 74 69 61 6c 0a 2a 2a 20 6f 72  sequential.** or
10f10 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  der..**.** P4 is
10f20 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
10f30 74 75 72 65 20 74 68 61 74 20 64 65 66 69 6e 65  ture that define
10f40 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  s collating sequ
10f50 65 6e 63 65 73 20 61 6e 64 20 73 6f 72 74 0a 2a  ences and sort.*
10f60 2a 20 6f 72 64 65 72 73 20 66 6f 72 20 74 68 65  * orders for the
10f70 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68   comparison.  Th
10f80 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 61 70  e permutation ap
10f90 70 6c 69 65 73 20 74 6f 20 72 65 67 69 73 74 65  plies to registe
10fa0 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65  rs.** only.  The
10fb0 20 4b 65 79 49 6e 66 6f 20 65 6c 65 6d 65 6e 74   KeyInfo element
10fc0 73 20 61 72 65 20 75 73 65 64 20 73 65 71 75 65  s are used seque
10fd0 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54  ntially..**.** T
10fe0 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  he comparison is
10ff0 20 61 20 73 6f 72 74 20 63 6f 6d 70 61 72 69 73   a sort comparis
11000 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d  on, so NULLs com
11010 70 61 72 65 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e  pare equal,.** N
11020 55 4c 4c 73 20 61 72 65 20 6c 65 73 73 20 74 68  ULLs are less th
11030 61 6e 20 6e 75 6d 62 65 72 73 2c 20 6e 75 6d 62  an numbers, numb
11040 65 72 73 20 61 72 65 20 6c 65 73 73 20 74 68 61  ers are less tha
11050 6e 20 73 74 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e  n strings,.** an
11060 64 20 73 74 72 69 6e 67 73 20 61 72 65 20 6c 65  d strings are le
11070 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a  ss than blobs..*
11080 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6d 70 61 72  /.case OP_Compar
11090 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20  e: {.  int n;.  
110a0 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 70 31 3b  int i;.  int p1;
110b0 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 63 6f 6e  .  int p2;.  con
110c0 73 74 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  st KeyInfo *pKey
110d0 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 69 64 78 3b  Info;.  int idx;
110e0 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c  .  CollSeq *pCol
110f0 6c 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  l;    /* Collati
11100 6e 67 20 73 65 71 75 65 6e 63 65 20 74 6f 20 75  ng sequence to u
11110 73 65 20 6f 6e 20 74 68 69 73 20 74 65 72 6d 20  se on this term 
11120 2a 2f 0a 20 20 69 6e 74 20 62 52 65 76 3b 20 20  */.  int bRev;  
11130 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
11140 66 6f 72 20 44 45 53 43 45 4e 44 49 4e 47 20 73  for DESCENDING s
11150 6f 72 74 20 6f 72 64 65 72 20 2a 2f 0a 0a 20 20  ort order */..  
11160 69 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f  if( (pOp->p5 & O
11170 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 29 3d 3d  PFLAG_PERMUTE)==
11180 30 20 29 20 61 50 65 72 6d 75 74 65 20 3d 20 30  0 ) aPermute = 0
11190 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b  ;.  n = pOp->p3;
111a0 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f  .  pKeyInfo = pO
111b0 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a  p->p4.pKeyInfo;.
111c0 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20 29 3b    assert( n>0 );
111d0 0a 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49  .  assert( pKeyI
111e0 6e 66 6f 21 3d 30 20 29 3b 0a 20 20 70 31 20 3d  nfo!=0 );.  p1 =
111f0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d   pOp->p1;.  p2 =
11200 20 70 4f 70 2d 3e 70 32 3b 0a 23 69 66 20 53 51   pOp->p2;.#if SQ
11210 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28  LITE_DEBUG.  if(
11220 20 61 50 65 72 6d 75 74 65 20 29 7b 0a 20 20 20   aPermute ){.   
11230 20 69 6e 74 20 6b 2c 20 6d 78 20 3d 20 30 3b 0a   int k, mx = 0;.
11240 20 20 20 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c 6e      for(k=0; k<n
11250 3b 20 6b 2b 2b 29 20 69 66 28 20 61 50 65 72 6d  ; k++) if( aPerm
11260 75 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78 20 3d  ute[k]>mx ) mx =
11270 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a 20 20   aPermute[k];.  
11280 20 20 61 73 73 65 72 74 28 20 70 31 3e 30 20 26    assert( p1>0 &
11290 26 20 70 31 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65  & p1+mx<=(p->nMe
112a0 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
112b0 29 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  )+1 );.    asser
112c0 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6d 78  t( p2>0 && p2+mx
112d0 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
112e0 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
112f0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
11300 65 72 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b  ert( p1>0 && p1+
11310 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  n<=(p->nMem+1 - 
11320 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
11330 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e  .    assert( p2>
11340 30 20 26 26 20 70 32 2b 6e 3c 3d 28 70 2d 3e 6e  0 && p2+n<=(p->n
11350 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
11360 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 0a 23 65 6e  or)+1 );.  }.#en
11370 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45  dif /* SQLITE_DE
11380 42 55 47 20 2a 2f 0a 20 20 66 6f 72 28 69 3d 30  BUG */.  for(i=0
11390 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20  ; i<n; i++){.   
113a0 20 69 64 78 20 3d 20 61 50 65 72 6d 75 74 65 20   idx = aPermute 
113b0 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d 20 3a 20  ? aPermute[i] : 
113c0 69 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  i;.    assert( m
113d0 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
113e0 70 31 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20  p1+idx]) );.    
113f0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
11400 69 64 28 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d  id(&aMem[p2+idx]
11410 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  ) );.    REGISTE
11420 52 5f 54 52 41 43 45 28 70 31 2b 69 64 78 2c 20  R_TRACE(p1+idx, 
11430 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 3b 0a  &aMem[p1+idx]);.
11440 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
11450 43 45 28 70 32 2b 69 64 78 2c 20 26 61 4d 65 6d  CE(p2+idx, &aMem
11460 5b 70 32 2b 69 64 78 5d 29 3b 0a 20 20 20 20 61  [p2+idx]);.    a
11470 73 73 65 72 74 28 20 69 3c 70 4b 65 79 49 6e 66  ssert( i<pKeyInf
11480 6f 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20 20 20  o->nField );.   
11490 20 70 43 6f 6c 6c 20 3d 20 70 4b 65 79 49 6e 66   pColl = pKeyInf
114a0 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a 20 20 20  o->aColl[i];.   
114b0 20 62 52 65 76 20 3d 20 70 4b 65 79 49 6e 66 6f   bRev = pKeyInfo
114c0 2d 3e 61 53 6f 72 74 4f 72 64 65 72 5b 69 5d 3b  ->aSortOrder[i];
114d0 0a 20 20 20 20 69 43 6f 6d 70 61 72 65 20 3d 20  .    iCompare = 
114e0 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72  sqlite3MemCompar
114f0 65 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c  e(&aMem[p1+idx],
11500 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 2c 20   &aMem[p2+idx], 
11510 70 43 6f 6c 6c 29 3b 0a 20 20 20 20 69 66 28 20  pColl);.    if( 
11520 69 43 6f 6d 70 61 72 65 20 29 7b 0a 20 20 20 20  iCompare ){.    
11530 20 20 69 66 28 20 62 52 65 76 20 29 20 69 43 6f    if( bRev ) iCo
11540 6d 70 61 72 65 20 3d 20 2d 69 43 6f 6d 70 61 72  mpare = -iCompar
11550 65 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  e;.      break;.
11560 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 50 65 72      }.  }.  aPer
11570 6d 75 74 65 20 3d 20 30 3b 0a 20 20 62 72 65 61  mute = 0;.  brea
11580 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
11590 20 4a 75 6d 70 20 50 31 20 50 32 20 50 33 20 2a   Jump P1 P2 P3 *
115a0 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f   *.**.** Jump to
115b0 20 74 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e   the instruction
115c0 20 61 74 20 61 64 64 72 65 73 73 20 50 31 2c 20   at address P1, 
115d0 50 32 2c 20 6f 72 20 50 33 20 64 65 70 65 6e 64  P2, or P3 depend
115e0 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a  ing on whether.*
115f0 2a 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 72 65  * in the most re
11600 63 65 6e 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20  cent OP_Compare 
11610 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 65 20  instruction the 
11620 50 31 20 76 65 63 74 6f 72 20 77 61 73 20 6c 65  P1 vector was le
11630 73 73 20 74 68 61 6e 0a 2a 2a 20 65 71 75 61 6c  ss than.** equal
11640 20 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72 20   to, or greater 
11650 74 68 61 6e 20 74 68 65 20 50 32 20 76 65 63 74  than the P2 vect
11660 6f 72 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  or, respectively
11670 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 75 6d  ..*/.case OP_Jum
11680 70 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  p: {            
11690 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66   /* jump */.  if
116a0 28 20 69 43 6f 6d 70 61 72 65 3c 30 20 29 7b 0a  ( iCompare<0 ){.
116b0 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
116c0 6b 65 6e 28 30 2c 33 29 3b 20 70 4f 70 20 3d 20  ken(0,3); pOp = 
116d0 26 61 4f 70 5b 70 4f 70 2d 3e 70 31 20 2d 20 31  &aOp[pOp->p1 - 1
116e0 5d 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69  ];.  }else if( i
116f0 43 6f 6d 70 61 72 65 3d 3d 30 20 29 7b 0a 20 20  Compare==0 ){.  
11700 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
11710 6e 28 31 2c 33 29 3b 20 70 4f 70 20 3d 20 26 61  n(1,3); pOp = &a
11720 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b  Op[pOp->p2 - 1];
11730 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64  .  }else{.    Vd
11740 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c  beBranchTaken(2,
11750 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70  3); pOp = &aOp[p
11760 4f 70 2d 3e 70 33 20 2d 20 31 5d 3b 0a 20 20 7d  Op->p3 - 1];.  }
11770 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
11780 4f 70 63 6f 64 65 3a 20 41 6e 64 20 50 31 20 50  Opcode: And P1 P
11790 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
117a0 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50  psis: r[P3]=(r[P
117b0 31 5d 20 26 26 20 72 5b 50 32 5d 29 0a 2a 2a 0a  1] && r[P2]).**.
117c0 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69  ** Take the logi
117d0 63 61 6c 20 41 4e 44 20 6f 66 20 74 68 65 20 76  cal AND of the v
117e0 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
117f0 72 73 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64  rs P1 and P2 and
11800 0a 2a 2a 20 77 72 69 74 65 20 74 68 65 20 72 65  .** write the re
11810 73 75 6c 74 20 69 6e 74 6f 20 72 65 67 69 73 74  sult into regist
11820 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P3..**.** If 
11830 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20  either P1 or P2 
11840 69 73 20 30 20 28 66 61 6c 73 65 29 20 74 68 65  is 0 (false) the
11850 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
11860 30 20 65 76 65 6e 20 69 66 0a 2a 2a 20 74 68 65  0 even if.** the
11870 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73 20   other input is 
11880 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e  NULL.  A NULL an
11890 64 20 74 72 75 65 20 6f 72 20 74 77 6f 20 4e 55  d true or two NU
118a0 4c 4c 73 20 67 69 76 65 0a 2a 2a 20 61 20 4e 55  LLs give.** a NU
118b0 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a  LL output..*/./*
118c0 20 4f 70 63 6f 64 65 3a 20 4f 72 20 50 31 20 50   Opcode: Or P1 P
118d0 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
118e0 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50  psis: r[P3]=(r[P
118f0 31 5d 20 7c 7c 20 72 5b 50 32 5d 29 0a 2a 2a 0a  1] || r[P2]).**.
11900 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69  ** Take the logi
11910 63 61 6c 20 4f 52 20 6f 66 20 74 68 65 20 76 61  cal OR of the va
11920 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
11930 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a   P1 and P2 and.*
11940 2a 20 73 74 6f 72 65 20 74 68 65 20 61 6e 73 77  * store the answ
11950 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  er in register P
11960 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68  3..**.** If eith
11970 65 72 20 50 31 20 6f 72 20 50 32 20 69 73 20 6e  er P1 or P2 is n
11980 6f 6e 7a 65 72 6f 20 28 74 72 75 65 29 20 74 68  onzero (true) th
11990 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
119a0 20 31 20 28 74 72 75 65 29 0a 2a 2a 20 65 76 65   1 (true).** eve
119b0 6e 20 69 66 20 74 68 65 20 6f 74 68 65 72 20 69  n if the other i
119c0 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41  nput is NULL.  A
119d0 20 4e 55 4c 4c 20 61 6e 64 20 66 61 6c 73 65 20   NULL and false 
119e0 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20  or two NULLs.** 
119f0 67 69 76 65 20 61 20 4e 55 4c 4c 20 6f 75 74 70  give a NULL outp
11a00 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  ut..*/.case OP_A
11a10 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  nd:             
11a20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 41   /* same as TK_A
11a30 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  ND, in1, in2, ou
11a40 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 72  t3 */.case OP_Or
11a50 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
11a60 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4f 52  /* same as TK_OR
11a70 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
11a80 20 2a 2f 0a 20 20 69 6e 74 20 76 31 3b 20 20 20   */.  int v1;   
11a90 20 2f 2a 20 4c 65 66 74 20 6f 70 65 72 61 6e 64   /* Left operand
11aa0 3a 20 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d  :  0==FALSE, 1==
11ab0 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e  TRUE, 2==UNKNOWN
11ac0 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e   or NULL */.  in
11ad0 74 20 76 32 3b 20 20 20 20 2f 2a 20 52 69 67 68  t v2;    /* Righ
11ae0 74 20 6f 70 65 72 61 6e 64 3a 20 30 3d 3d 46 41  t operand: 0==FA
11af0 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d  LSE, 1==TRUE, 2=
11b00 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c  =UNKNOWN or NULL
11b10 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61   */..  pIn1 = &a
11b20 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
11b30 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
11b40 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
11b50 20 20 76 31 20 3d 20 32 3b 0a 20 20 7d 65 6c 73    v1 = 2;.  }els
11b60 65 7b 0a 20 20 20 20 76 31 20 3d 20 73 71 6c 69  e{.    v1 = sqli
11b70 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
11b80 70 49 6e 31 29 21 3d 30 3b 0a 20 20 7d 0a 20 20  pIn1)!=0;.  }.  
11b90 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
11ba0 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p2];.  if( pIn
11bb0 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  2->flags & MEM_N
11bc0 75 6c 6c 20 29 7b 0a 20 20 20 20 76 32 20 3d 20  ull ){.    v2 = 
11bd0 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  2;.  }else{.    
11be0 76 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  v2 = sqlite3Vdbe
11bf0 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 21 3d  IntValue(pIn2)!=
11c00 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  0;.  }.  if( pOp
11c10 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64  ->opcode==OP_And
11c20 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63   ){.    static c
11c30 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
11c40 61 72 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d  ar and_logic[] =
11c50 20 7b 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31   { 0, 0, 0, 0, 1
11c60 2c 20 32 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a  , 2, 0, 2, 2 };.
11c70 20 20 20 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67      v1 = and_log
11c80 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d  ic[v1*3+v2];.  }
11c90 65 6c 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63  else{.    static
11ca0 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
11cb0 63 68 61 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20  char or_logic[] 
11cc0 3d 20 7b 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20  = { 0, 1, 2, 1, 
11cd0 31 2c 20 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b  1, 1, 2, 1, 2 };
11ce0 0a 20 20 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67  .    v1 = or_log
11cf0 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d  ic[v1*3+v2];.  }
11d00 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
11d10 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
11d20 76 31 3d 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d  v1==2 ){.    Mem
11d30 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
11d40 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d  , MEM_Null);.  }
11d50 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e  else{.    pOut->
11d60 75 2e 69 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65  u.i = v1;.    Me
11d70 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
11d80 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d  t, MEM_Int);.  }
11d90 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
11da0 4f 70 63 6f 64 65 3a 20 4e 6f 74 20 50 31 20 50  Opcode: Not P1 P
11db0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
11dc0 73 69 73 3a 20 72 5b 50 32 5d 3d 20 21 72 5b 50  sis: r[P2]= !r[P
11dd0 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  1].**.** Interpr
11de0 65 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  et the value in 
11df0 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61  register P1 as a
11e00 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20   boolean value. 
11e10 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 62 6f   Store the.** bo
11e20 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74  olean complement
11e30 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
11e40 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69    If the value i
11e50 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
11e60 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   .** NULL, then 
11e70 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f 72 65 64  a NULL is stored
11e80 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20   in P2..*/.case 
11e90 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20  OP_Not: {       
11ea0 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
11eb0 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c   as TK_NOT, in1,
11ec0 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20   out2 */.  pIn1 
11ed0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
11ee0 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
11ef0 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c  [pOp->p2];.  sql
11f00 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
11f10 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 69 66 28 20  ll(pOut);.  if( 
11f20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
11f30 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20  EM_Null)==0 ){. 
11f40 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
11f50 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f   MEM_Int;.    pO
11f60 75 74 2d 3e 75 2e 69 20 3d 20 21 73 71 6c 69 74  ut->u.i = !sqlit
11f70 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
11f80 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  In1);.  }.  brea
11f90 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
11fa0 20 42 69 74 4e 6f 74 20 50 31 20 50 32 20 2a 20   BitNot P1 P2 * 
11fb0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
11fc0 20 72 5b 50 31 5d 3d 20 7e 72 5b 50 31 5d 0a 2a   r[P1]= ~r[P1].*
11fd0 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
11fe0 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
11ff0 67 69 73 74 65 72 20 50 31 20 61 73 20 61 6e 20  gister P1 as an 
12000 69 6e 74 65 67 65 72 2e 20 20 53 74 6f 72 65 20  integer.  Store 
12010 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70  the.** ones-comp
12020 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 50 31  lement of the P1
12030 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69   value into regi
12040 73 74 65 72 20 50 32 2e 20 20 49 66 20 50 31 20  ster P2.  If P1 
12050 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20  holds.** a NULL 
12060 74 68 65 6e 20 73 74 6f 72 65 20 61 20 4e 55 4c  then store a NUL
12070 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  L in P2..*/.case
12080 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b 20 20 20   OP_BitNot: {   
12090 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
120a0 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f 54 2c 20  e as TK_BITNOT, 
120b0 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70  in1, out2 */.  p
120c0 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
120d0 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p1];.  pOut = &
120e0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
120f0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
12100 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
12110 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
12120 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20   & MEM_Null)==0 
12130 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  ){.    pOut->fla
12140 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
12150 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 7e 73    pOut->u.i = ~s
12160 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
12170 75 65 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20  ue(pIn1);.  }.  
12180 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
12190 6f 64 65 3a 20 4f 6e 63 65 20 50 31 20 50 32 20  ode: Once P1 P2 
121a0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63  * * *.**.** Chec
121b0 6b 20 74 68 65 20 22 6f 6e 63 65 22 20 66 6c 61  k the "once" fla
121c0 67 20 6e 75 6d 62 65 72 20 50 31 2e 20 49 66 20  g number P1. If 
121d0 69 74 20 69 73 20 73 65 74 2c 20 6a 75 6d 70 20  it is set, jump 
121e0 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50  to instruction P
121f0 32 2e 20 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65  2. .** Otherwise
12200 2c 20 73 65 74 20 74 68 65 20 66 6c 61 67 20 61  , set the flag a
12210 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  nd fall through 
12220 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
12230 72 75 63 74 69 6f 6e 2e 0a 2a 2a 20 49 6e 20 6f  ruction..** In o
12240 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 69 73  ther words, this
12250 20 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20 61   opcode causes a
12260 6c 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 70 63  ll following opc
12270 6f 64 65 73 20 75 70 20 74 68 72 6f 75 67 68 20  odes up through 
12280 50 32 0a 2a 2a 20 28 62 75 74 20 6e 6f 74 20 69  P2.** (but not i
12290 6e 63 6c 75 64 69 6e 67 20 50 32 29 20 74 6f 20  ncluding P2) to 
122a0 72 75 6e 20 6a 75 73 74 20 6f 6e 63 65 20 61 6e  run just once an
122b0 64 20 74 6f 20 62 65 20 73 6b 69 70 70 65 64 20  d to be skipped 
122c0 6f 6e 20 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a  on subsequent.**
122d0 20 74 69 6d 65 73 20 74 68 72 6f 75 67 68 20 74   times through t
122e0 68 65 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 41  he loop..**.** A
122f0 6c 6c 20 22 6f 6e 63 65 22 20 66 6c 61 67 73 20  ll "once" flags 
12300 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 63 6c  are initially cl
12310 65 61 72 65 64 20 77 68 65 6e 65 76 65 72 20 61  eared whenever a
12320 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
12330 65 6e 74 0a 2a 2a 20 66 69 72 73 74 20 62 65 67  ent.** first beg
12340 69 6e 73 20 74 6f 20 72 75 6e 2e 0a 2a 2f 0a 63  ins to run..*/.c
12350 61 73 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20  ase OP_Once: {  
12360 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
12370 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
12380 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 4f 6e 63 65  pOp->p1<p->nOnce
12390 46 6c 61 67 20 29 3b 0a 20 20 56 64 62 65 42 72  Flag );.  VdbeBr
123a0 61 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 61 4f 6e  anchTaken(p->aOn
123b0 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 21  ceFlag[pOp->p1]!
123c0 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 2d  =0, 2);.  if( p-
123d0 3e 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e  >aOnceFlag[pOp->
123e0 70 31 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  p1] ){.    goto 
123f0 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65  jump_to_p2;.  }e
12400 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 61 4f 6e 63  lse{.    p->aOnc
12410 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 3d  eFlag[pOp->p1] =
12420 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
12430 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
12440 66 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  f P1 P2 P3 * *.*
12450 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20  *.** Jump to P2 
12460 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  if the value in 
12470 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 74  register P1 is t
12480 72 75 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a  rue.  The value.
12490 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  ** is considered
124a0 20 74 72 75 65 20 69 66 20 69 74 20 69 73 20 6e   true if it is n
124b0 75 6d 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a  umeric and non-z
124c0 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c  ero.  If the val
124d0 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e  ue.** in P1 is N
124e0 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68  ULL then take th
124f0 65 20 6a 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e  e jump if and on
12500 6c 79 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d  ly if P3 is non-
12510 7a 65 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  zero..*/./* Opco
12520 64 65 3a 20 49 66 4e 6f 74 20 50 31 20 50 32 20  de: IfNot P1 P2 
12530 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d  P3 * *.**.** Jum
12540 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76  p to P2 if the v
12550 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
12560 20 50 31 20 69 73 20 46 61 6c 73 65 2e 20 20 54   P1 is False.  T
12570 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63  he value.** is c
12580 6f 6e 73 69 64 65 72 65 64 20 66 61 6c 73 65 20  onsidered false 
12590 69 66 20 69 74 20 68 61 73 20 61 20 6e 75 6d 65  if it has a nume
125a0 72 69 63 20 76 61 6c 75 65 20 6f 66 20 7a 65 72  ric value of zer
125b0 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  o.  If the value
125c0 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c  .** in P1 is NUL
125d0 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  L then take the 
125e0 6a 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79  jump if and only
125f0 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65   if P3 is non-ze
12600 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ro..*/.case OP_I
12610 66 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  f:              
12620 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
12630 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74  */.case OP_IfNot
12640 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
12650 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
12660 20 69 6e 74 20 63 3b 0a 20 20 70 49 6e 31 20 3d   int c;.  pIn1 =
12670 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
12680 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
12690 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
126a0 0a 20 20 20 20 63 20 3d 20 70 4f 70 2d 3e 70 33  .    c = pOp->p3
126b0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23 69 66 64 65  ;.  }else{.#ifde
126c0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
126d0 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20  OATING_POINT.   
126e0 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65   c = sqlite3Vdbe
126f0 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d  IntValue(pIn1)!=
12700 30 3b 0a 23 65 6c 73 65 0a 20 20 20 20 63 20 3d  0;.#else.    c =
12710 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c   sqlite3VdbeReal
12720 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 2e 30  Value(pIn1)!=0.0
12730 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28  ;.#endif.    if(
12740 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
12750 5f 49 66 4e 6f 74 20 29 20 63 20 3d 20 21 63 3b  _IfNot ) c = !c;
12760 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63  .  }.  VdbeBranc
12770 68 54 61 6b 65 6e 28 63 21 3d 30 2c 20 32 29 3b  hTaken(c!=0, 2);
12780 0a 20 20 69 66 28 20 63 20 29 7b 0a 20 20 20 20  .  if( c ){.    
12790 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
127a0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
127b0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75  ./* Opcode: IsNu
127c0 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ll P1 P2 * * *.*
127d0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 66 20  * Synopsis:  if 
127e0 72 5b 50 31 5d 3d 3d 4e 55 4c 4c 20 67 6f 74 6f  r[P1]==NULL goto
127f0 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74   P2.**.** Jump t
12800 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75  o P2 if the valu
12810 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
12820 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73   is NULL..*/.cas
12830 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20  e OP_IsNull: {  
12840 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
12850 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20  e as TK_ISNULL, 
12860 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  jump, in1 */.  p
12870 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
12880 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e  >p1];.  VdbeBran
12890 63 68 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e  chTaken( (pIn1->
128a0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
128b0 29 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20  )!=0, 2);.  if( 
128c0 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
128d0 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20  EM_Null)!=0 ){. 
128e0 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
128f0 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
12900 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
12910 6f 74 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a  otNull P1 P2 * *
12920 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
12930 69 66 20 72 5b 50 31 5d 21 3d 4e 55 4c 4c 20 67  if r[P1]!=NULL g
12940 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d  oto P2.**.** Jum
12950 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76  p to P2 if the v
12960 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
12970 20 50 31 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e   P1 is not NULL.
12980 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f    .*/.case OP_No
12990 74 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20  tNull: {        
129a0 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
129b0 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c  K_NOTNULL, jump,
129c0 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
129d0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
129e0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
129f0 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  en( (pIn1->flags
12a00 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 2c   & MEM_Null)==0,
12a10 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31   2);.  if( (pIn1
12a20 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
12a30 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f  ll)==0 ){.    go
12a40 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
12a50 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
12a60 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e  * Opcode: Column
12a70 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
12a80 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
12a90 50 33 5d 3d 50 58 0a 2a 2a 0a 2a 2a 20 49 6e 74  P3]=PX.**.** Int
12aa0 65 72 70 72 65 74 20 74 68 65 20 64 61 74 61 20  erpret the data 
12ab0 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 70  that cursor P1 p
12ac0 6f 69 6e 74 73 20 74 6f 20 61 73 20 61 20 73 74  oints to as a st
12ad0 72 75 63 74 75 72 65 20 62 75 69 6c 74 20 75 73  ructure built us
12ae0 69 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52  ing.** the MakeR
12af0 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f  ecord instructio
12b00 6e 2e 20 20 28 53 65 65 20 74 68 65 20 4d 61 6b  n.  (See the Mak
12b10 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 66  eRecord opcode f
12b20 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a  or additional.**
12b30 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
12b40 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66  ut the format of
12b50 20 74 68 65 20 64 61 74 61 2e 29 20 20 45 78 74   the data.)  Ext
12b60 72 61 63 74 20 74 68 65 20 50 32 2d 74 68 20 63  ract the P2-th c
12b70 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68  olumn.** from th
12b80 69 73 20 72 65 63 6f 72 64 2e 20 20 49 66 20 74  is record.  If t
12b90 68 65 72 65 20 61 72 65 20 6c 65 73 73 20 74 68  here are less th
12ba0 61 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61  at (P2+1) .** va
12bb0 6c 75 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f  lues in the reco
12bc0 72 64 2c 20 65 78 74 72 61 63 74 20 61 20 4e 55  rd, extract a NU
12bd0 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61  LL..**.** The va
12be0 6c 75 65 20 65 78 74 72 61 63 74 65 64 20 69 73  lue extracted is
12bf0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
12c00 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P3..**.** If
12c10 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74   the column cont
12c20 61 69 6e 73 20 66 65 77 65 72 20 74 68 61 6e 20  ains fewer than 
12c30 50 32 20 66 69 65 6c 64 73 2c 20 74 68 65 6e 20  P2 fields, then 
12c40 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20  extract a NULL. 
12c50 20 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50   Or,.** if the P
12c60 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  4 argument is a 
12c70 50 34 5f 4d 45 4d 20 75 73 65 20 74 68 65 20 76  P4_MEM use the v
12c80 61 6c 75 65 20 6f 66 20 74 68 65 20 50 34 20 61  alue of the P4 a
12c90 72 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68  rgument as.** th
12ca0 65 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20  e result..**.** 
12cb0 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 43 4c  If the OPFLAG_CL
12cc0 45 41 52 43 41 43 48 45 20 62 69 74 20 69 73 20  EARCACHE bit is 
12cd0 73 65 74 20 6f 6e 20 50 35 20 61 6e 64 20 50 31  set on P5 and P1
12ce0 20 69 73 20 61 20 70 73 65 75 64 6f 2d 74 61 62   is a pseudo-tab
12cf0 6c 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68  le cursor,.** th
12d00 65 6e 20 74 68 65 20 63 61 63 68 65 20 6f 66 20  en the cache of 
12d10 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 72 65  the cursor is re
12d20 73 65 74 20 70 72 69 6f 72 20 74 6f 20 65 78 74  set prior to ext
12d30 72 61 63 74 69 6e 67 20 74 68 65 20 63 6f 6c 75  racting the colu
12d40 6d 6e 2e 0a 2a 2a 20 54 68 65 20 66 69 72 73 74  mn..** The first
12d50 20 4f 50 5f 43 6f 6c 75 6d 6e 20 61 67 61 69 6e   OP_Column again
12d60 73 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  st a pseudo-tabl
12d70 65 20 61 66 74 65 72 20 74 68 65 20 76 61 6c 75  e after the valu
12d80 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74  e of the content
12d90 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 68 61 73  .** register has
12da0 20 63 68 61 6e 67 65 64 20 73 68 6f 75 6c 64 20   changed should 
12db0 68 61 76 65 20 74 68 69 73 20 62 69 74 20 73 65  have this bit se
12dc0 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  t..**.** If the 
12dd0 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47  OPFLAG_LENGTHARG
12de0 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45   and OPFLAG_TYPE
12df0 4f 46 41 52 47 20 62 69 74 73 20 61 72 65 20 73  OFARG bits are s
12e00 65 74 20 6f 6e 20 50 35 20 77 68 65 6e 0a 2a 2a  et on P5 when.**
12e10 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 67   the result is g
12e20 75 61 72 61 6e 74 65 65 64 20 74 6f 20 6f 6e 6c  uaranteed to onl
12e30 79 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65  y be used as the
12e40 20 61 72 67 75 6d 65 6e 74 20 6f 66 20 61 20 6c   argument of a l
12e50 65 6e 67 74 68 28 29 0a 2a 2a 20 6f 72 20 74 79  ength().** or ty
12e60 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c  peof() function,
12e70 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20   respectively.  
12e80 54 68 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20 6c  The loading of l
12e90 61 72 67 65 20 62 6c 6f 62 73 20 63 61 6e 20 62  arge blobs can b
12ea0 65 0a 2a 2a 20 73 6b 69 70 70 65 64 20 66 6f 72  e.** skipped for
12eb0 20 6c 65 6e 67 74 68 28 29 20 61 6e 64 20 61 6c   length() and al
12ec0 6c 20 63 6f 6e 74 65 6e 74 20 6c 6f 61 64 69 6e  l content loadin
12ed0 67 20 63 61 6e 20 62 65 20 73 6b 69 70 70 65 64  g can be skipped
12ee0 20 66 6f 72 20 74 79 70 65 6f 66 28 29 2e 0a 2a   for typeof()..*
12ef0 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e  /.case OP_Column
12f00 3a 20 7b 0a 20 20 69 36 34 20 70 61 79 6c 6f 61  : {.  i64 payloa
12f10 64 53 69 7a 65 36 34 3b 20 2f 2a 20 4e 75 6d 62  dSize64; /* Numb
12f20 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74  er of bytes in t
12f30 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
12f40 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20 20 20  nt p2;          
12f50 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62    /* column numb
12f60 65 72 20 74 6f 20 72 65 74 72 69 65 76 65 20 2a  er to retrieve *
12f70 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
12f80 70 43 3b 20 20 20 20 2f 2a 20 54 68 65 20 56 44  pC;    /* The VD
12f90 42 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 42  BE cursor */.  B
12fa0 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 20  tCursor *pCrsr; 
12fb0 20 20 2f 2a 20 54 68 65 20 42 54 72 65 65 20 63    /* The BTree c
12fc0 75 72 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a  ursor */.  u32 *
12fd0 61 4f 66 66 73 65 74 3b 20 20 20 20 20 20 2f 2a  aOffset;      /*
12fe0 20 61 4f 66 66 73 65 74 5b 69 5d 20 69 73 20 6f   aOffset[i] is o
12ff0 66 66 73 65 74 20 74 6f 20 73 74 61 72 74 20 6f  ffset to start o
13000 66 20 64 61 74 61 20 66 6f 72 20 69 2d 74 68 20  f data for i-th 
13010 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20  column */.  int 
13020 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  len;           /
13030 2a 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20  * The length of 
13040 74 68 65 20 73 65 72 69 61 6c 69 7a 65 64 20 64  the serialized d
13050 61 74 61 20 66 6f 72 20 74 68 65 20 63 6f 6c 75  ata for the colu
13060 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20  mn */.  int i;  
13070 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
13080 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20  op counter */.  
13090 4d 65 6d 20 2a 70 44 65 73 74 3b 20 20 20 20 20  Mem *pDest;     
130a0 20 20 20 2f 2a 20 57 68 65 72 65 20 74 6f 20 77     /* Where to w
130b0 72 69 74 65 20 74 68 65 20 65 78 74 72 61 63 74  rite the extract
130c0 65 64 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65  ed value */.  Me
130d0 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  m sMem;         
130e0 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20   /* For storing 
130f0 74 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67  the record being
13100 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f   decoded */.  co
13110 6e 73 74 20 75 38 20 2a 7a 44 61 74 61 3b 20 20  nst u8 *zData;  
13120 20 2f 2a 20 50 61 72 74 20 6f 66 20 74 68 65 20   /* Part of the 
13130 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63  record being dec
13140 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  oded */.  const 
13150 75 38 20 2a 7a 48 64 72 3b 20 20 20 20 2f 2a 20  u8 *zHdr;    /* 
13160 4e 65 78 74 20 75 6e 70 61 72 73 65 64 20 62 79  Next unparsed by
13170 74 65 20 6f 66 20 74 68 65 20 68 65 61 64 65 72  te of the header
13180 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a   */.  const u8 *
13190 7a 45 6e 64 48 64 72 3b 20 2f 2a 20 50 6f 69 6e  zEndHdr; /* Poin
131a0 74 65 72 20 74 6f 20 66 69 72 73 74 20 62 79 74  ter to first byt
131b0 65 20 61 66 74 65 72 20 74 68 65 20 68 65 61 64  e after the head
131c0 65 72 20 2a 2f 0a 20 20 75 33 32 20 6f 66 66 73  er */.  u32 offs
131d0 65 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 66  et;        /* Of
131e0 66 73 65 74 20 69 6e 74 6f 20 74 68 65 20 64 61  fset into the da
131f0 74 61 20 2a 2f 0a 20 20 75 36 34 20 6f 66 66 73  ta */.  u64 offs
13200 65 74 36 34 3b 20 20 20 20 20 20 2f 2a 20 36 34  et64;      /* 64
13210 2d 62 69 74 20 6f 66 66 73 65 74 20 2a 2f 0a 20  -bit offset */. 
13220 20 75 33 32 20 61 76 61 69 6c 3b 20 20 20 20 20   u32 avail;     
13230 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
13240 20 62 79 74 65 73 20 6f 66 20 61 76 61 69 6c 61   bytes of availa
13250 62 6c 65 20 64 61 74 61 20 2a 2f 0a 20 20 75 33  ble data */.  u3
13260 32 20 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  2 t;            
13270 20 2f 2a 20 41 20 74 79 70 65 20 63 6f 64 65 20   /* A type code 
13280 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 20  from the record 
13290 68 65 61 64 65 72 20 2a 2f 0a 20 20 4d 65 6d 20  header */.  Mem 
132a0 2a 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f  *pReg;         /
132b0 2a 20 50 73 65 75 64 6f 54 61 62 6c 65 20 69 6e  * PseudoTable in
132c0 70 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a  put register */.
132d0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
132e0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 32 20  [pOp->p1];.  p2 
132f0 3d 20 70 4f 70 2d 3e 70 32 3b 0a 0a 20 20 2f 2a  = pOp->p2;..  /*
13300 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 63   If the cursor c
13310 61 63 68 65 20 69 73 20 73 74 61 6c 65 2c 20 62  ache is stale, b
13320 72 69 6e 67 20 69 74 20 75 70 2d 74 6f 2d 64 61  ring it up-to-da
13330 74 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c  te */.  rc = sql
13340 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
13350 76 65 74 6f 28 26 70 43 2c 20 26 70 32 29 3b 0a  veto(&pC, &p2);.
13360 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
13370 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
13380 6f 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  or;..  assert( p
13390 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d  Op->p3>0 && pOp-
133a0 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p3<=(p->nMem+1 
133b0 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
133c0 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d  .  pDest = &aMem
133d0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d  [pOp->p3];.  mem
133e0 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
133f0 20 70 44 65 73 74 29 3b 0a 20 20 61 73 73 65 72   pDest);.  asser
13400 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
13410 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
13420 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
13430 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
13440 72 74 28 20 70 32 3c 70 43 2d 3e 6e 46 69 65 6c  rt( p2<pC->nFiel
13450 64 20 29 3b 0a 20 20 61 4f 66 66 73 65 74 20 3d  d );.  aOffset =
13460 20 70 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 20 20   pC->aOffset;.  
13470 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
13480 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f 56 54  Type!=CURTYPE_VT
13490 41 42 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  AB );.  assert( 
134a0 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55  pC->eCurType!=CU
134b0 52 54 59 50 45 5f 50 53 45 55 44 4f 20 7c 7c 20  RTYPE_PSEUDO || 
134c0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20  pC->nullRow );. 
134d0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
134e0 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f 53  rType!=CURTYPE_S
134f0 4f 52 54 45 52 20 29 3b 0a 20 20 70 43 72 73 72  ORTER );.  pCrsr
13500 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f   = pC->uc.pCurso
13510 72 3b 0a 0a 20 20 69 66 28 20 70 43 2d 3e 63 61  r;..  if( pC->ca
13520 63 68 65 53 74 61 74 75 73 21 3d 70 2d 3e 63 61  cheStatus!=p->ca
13530 63 68 65 43 74 72 20 29 7b 20 20 20 20 20 20 20  cheCtr ){       
13540 20 20 20 20 20 20 20 20 20 2f 2a 4f 50 54 49 4d           /*OPTIM
13550 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45  IZATION-IF-FALSE
13560 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e  */.    if( pC->n
13570 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20  ullRow ){.      
13580 69 66 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  if( pC->eCurType
13590 3d 3d 43 55 52 54 59 50 45 5f 50 53 45 55 44 4f  ==CURTYPE_PSEUDO
135a0 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
135b0 72 74 28 20 70 43 2d 3e 75 63 2e 70 73 65 75 64  rt( pC->uc.pseud
135c0 6f 54 61 62 6c 65 52 65 67 3e 30 20 29 3b 0a 20  oTableReg>0 );. 
135d0 20 20 20 20 20 20 20 70 52 65 67 20 3d 20 26 61         pReg = &a
135e0 4d 65 6d 5b 70 43 2d 3e 75 63 2e 70 73 65 75 64  Mem[pC->uc.pseud
135f0 6f 54 61 62 6c 65 52 65 67 5d 3b 0a 20 20 20 20  oTableReg];.    
13600 20 20 20 20 61 73 73 65 72 74 28 20 70 52 65 67      assert( pReg
13610 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
13620 6f 62 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  ob );.        as
13630 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
13640 28 70 52 65 67 29 20 29 3b 0a 20 20 20 20 20 20  (pReg) );.      
13650 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a    pC->payloadSiz
13660 65 20 3d 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20  e = pC->szRow = 
13670 61 76 61 69 6c 20 3d 20 70 52 65 67 2d 3e 6e 3b  avail = pReg->n;
13680 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f  .        pC->aRo
13690 77 20 3d 20 28 75 38 2a 29 70 52 65 67 2d 3e 7a  w = (u8*)pReg->z
136a0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
136b0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
136c0 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65  beMemSetNull(pDe
136d0 73 74 29 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  st);.        got
136e0 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b  o op_column_out;
136f0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
13700 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  se{.      assert
13710 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
13720 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
13730 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
13740 43 72 73 72 20 29 3b 0a 20 20 20 20 20 20 69 66  Crsr );.      if
13750 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
13760 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
13770 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
13780 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43  CursorIsValid(pC
13790 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20  rsr) );.        
137a0 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73  VVA_ONLY(rc =) s
137b0 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69  qlite3BtreeKeySi
137c0 7a 65 28 70 43 72 73 72 2c 20 26 70 61 79 6c 6f  ze(pCrsr, &paylo
137d0 61 64 53 69 7a 65 36 34 29 3b 0a 20 20 20 20 20  adSize64);.     
137e0 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
137f0 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 2f 2a 20 54  QLITE_OK ); /* T
13800 72 75 65 20 62 65 63 61 75 73 65 20 6f 66 20 43  rue because of C
13810 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61  ursorMoveto() ca
13820 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20  ll above */.    
13830 20 20 20 20 2f 2a 20 73 71 6c 69 74 65 33 42 74      /* sqlite3Bt
13840 72 65 65 50 61 72 73 65 43 65 6c 6c 50 74 72 28  reeParseCellPtr(
13850 29 20 75 73 65 73 20 67 65 74 56 61 72 69 6e 74  ) uses getVarint
13860 33 32 28 29 20 74 6f 20 65 78 74 72 61 63 74 20  32() to extract 
13870 74 68 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 70  the.        ** p
13880 61 79 6c 6f 61 64 20 73 69 7a 65 2c 20 73 6f 20  ayload size, so 
13890 69 74 20 69 73 20 69 6d 70 6f 73 73 69 62 6c 65  it is impossible
138a0 20 66 6f 72 20 70 61 79 6c 6f 61 64 53 69 7a 65   for payloadSize
138b0 36 34 20 74 6f 20 62 65 0a 20 20 20 20 20 20 20  64 to be.       
138c0 20 2a 2a 20 6c 61 72 67 65 72 20 74 68 61 6e 20   ** larger than 
138d0 33 32 20 62 69 74 73 2e 20 2a 2f 0a 20 20 20 20  32 bits. */.    
138e0 20 20 20 20 61 73 73 65 72 74 28 20 28 70 61 79      assert( (pay
138f0 6c 6f 61 64 53 69 7a 65 36 34 20 26 20 53 51 4c  loadSize64 & SQL
13900 49 54 45 5f 4d 41 58 5f 55 33 32 29 3d 3d 28 75  ITE_MAX_U32)==(u
13910 36 34 29 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  64)payloadSize64
13920 20 29 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e   );.        pC->
13930 61 52 6f 77 20 3d 20 73 71 6c 69 74 65 33 42 74  aRow = sqlite3Bt
13940 72 65 65 4b 65 79 46 65 74 63 68 28 70 43 72 73  reeKeyFetch(pCrs
13950 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20  r, &avail);.    
13960 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53      pC->payloadS
13970 69 7a 65 20 3d 20 28 75 33 32 29 70 61 79 6c 6f  ize = (u32)paylo
13980 61 64 53 69 7a 65 36 34 3b 0a 20 20 20 20 20 20  adSize64;.      
13990 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 61  }else{.        a
139a0 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
139b0 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64  reeCursorIsValid
139c0 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20  (pCrsr) );.     
139d0 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d     VVA_ONLY(rc =
139e0 29 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61  ) sqlite3BtreeDa
139f0 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20 26 70  taSize(pCrsr, &p
13a00 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 3b  C->payloadSize);
13a10 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
13a20 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
13a30 3b 20 20 20 2f 2a 20 44 61 74 61 53 69 7a 65 28  ;   /* DataSize(
13a40 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f  ) cannot fail */
13a50 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f  .        pC->aRo
13a60 77 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  w = sqlite3Btree
13a70 44 61 74 61 46 65 74 63 68 28 70 43 72 73 72 2c  DataFetch(pCrsr,
13a80 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20 20 20   &avail);.      
13a90 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  }.      assert( 
13aa0 61 76 61 69 6c 3c 3d 36 35 35 33 36 20 29 3b 20  avail<=65536 ); 
13ab0 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 70 61 67 65   /* Maximum page
13ac0 20 73 69 7a 65 20 69 73 20 36 34 4b 69 42 20 2a   size is 64KiB *
13ad0 2f 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e  /.      if( pC->
13ae0 70 61 79 6c 6f 61 64 53 69 7a 65 20 3c 3d 20 28  payloadSize <= (
13af0 75 33 32 29 61 76 61 69 6c 20 29 7b 0a 20 20 20  u32)avail ){.   
13b00 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d       pC->szRow =
13b10 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
13b20 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
13b30 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a  ( pC->payloadSiz
13b40 65 20 3e 20 28 75 33 32 29 64 62 2d 3e 61 4c 69  e > (u32)db->aLi
13b50 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
13b60 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
13b70 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
13b80 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
13b90 20 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77         pC->szRow
13ba0 20 3d 20 61 76 61 69 6c 3b 0a 20 20 20 20 20 20   = avail;.      
13bb0 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e  }.    }.    pC->
13bc0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 70 2d  cacheStatus = p-
13bd0 3e 63 61 63 68 65 43 74 72 3b 0a 20 20 20 20 70  >cacheCtr;.    p
13be0 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 20 3d 20  C->iHdrOffset = 
13bf0 67 65 74 56 61 72 69 6e 74 33 32 28 70 43 2d 3e  getVarint32(pC->
13c00 61 52 6f 77 2c 20 6f 66 66 73 65 74 29 3b 0a 20  aRow, offset);. 
13c10 20 20 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65     pC->nHdrParse
13c20 64 20 3d 20 30 3b 0a 20 20 20 20 61 4f 66 66 73  d = 0;.    aOffs
13c30 65 74 5b 30 5d 20 3d 20 6f 66 66 73 65 74 3b 0a  et[0] = offset;.
13c40 0a 0a 20 20 20 20 69 66 28 20 61 76 61 69 6c 3c  ..    if( avail<
13c50 6f 66 66 73 65 74 20 29 7b 20 20 20 20 20 20 2f  offset ){      /
13c60 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46  *OPTIMIZATION-IF
13c70 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 20 20 2f  -FALSE*/.      /
13c80 2a 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20  * pC->aRow does 
13c90 6e 6f 74 20 68 61 76 65 20 74 6f 20 68 6f 6c 64  not have to hold
13ca0 20 74 68 65 20 65 6e 74 69 72 65 20 72 6f 77 2c   the entire row,
13cb0 20 62 75 74 20 69 74 20 64 6f 65 73 20 61 74 20   but it does at 
13cc0 6c 65 61 73 74 0a 20 20 20 20 20 20 2a 2a 20 6e  least.      ** n
13cd0 65 65 64 20 74 6f 20 63 6f 76 65 72 20 74 68 65  eed to cover the
13ce0 20 68 65 61 64 65 72 20 6f 66 20 74 68 65 20 72   header of the r
13cf0 65 63 6f 72 64 2e 20 20 49 66 20 70 43 2d 3e 61  ecord.  If pC->a
13d00 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e  Row does not con
13d10 74 61 69 6e 0a 20 20 20 20 20 20 2a 2a 20 74 68  tain.      ** th
13d20 65 20 63 6f 6d 70 6c 65 74 65 20 68 65 61 64 65  e complete heade
13d30 72 2c 20 74 68 65 6e 20 73 65 74 20 69 74 20 74  r, then set it t
13d40 6f 20 7a 65 72 6f 2c 20 66 6f 72 63 69 6e 67 20  o zero, forcing 
13d50 74 68 65 20 68 65 61 64 65 72 20 74 6f 20 62 65  the header to be
13d60 0a 20 20 20 20 20 20 2a 2a 20 64 79 6e 61 6d 69  .      ** dynami
13d70 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 2e  cally allocated.
13d80 20 2a 2f 0a 20 20 20 20 20 20 70 43 2d 3e 61 52   */.      pC->aR
13d90 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 43  ow = 0;.      pC
13da0 2d 3e 73 7a 52 6f 77 20 3d 20 30 3b 0a 0a 20 20  ->szRow = 0;..  
13db0 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65      /* Make sure
13dc0 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62   a corrupt datab
13dd0 61 73 65 20 68 61 73 20 6e 6f 74 20 67 69 76 65  ase has not give
13de0 6e 20 75 73 20 61 6e 20 6f 76 65 72 73 69 7a 65  n us an oversize
13df0 20 68 65 61 64 65 72 2e 0a 20 20 20 20 20 20 2a   header..      *
13e00 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77 20 74 6f  * Do this now to
13e10 20 61 76 6f 69 64 20 61 6e 20 6f 76 65 72 73 69   avoid an oversi
13e20 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ze memory alloca
13e30 74 69 6f 6e 2e 0a 20 20 20 20 20 20 2a 2a 0a 20  tion..      **. 
13e40 20 20 20 20 20 2a 2a 20 54 79 70 65 20 65 6e 74       ** Type ent
13e50 72 69 65 73 20 63 61 6e 20 62 65 20 62 65 74 77  ries can be betw
13e60 65 65 6e 20 31 20 61 6e 64 20 35 20 62 79 74 65  een 1 and 5 byte
13e70 73 20 65 61 63 68 2e 20 20 42 75 74 20 34 20 61  s each.  But 4 a
13e80 6e 64 20 35 20 62 79 74 65 0a 20 20 20 20 20 20  nd 5 byte.      
13e90 2a 2a 20 74 79 70 65 73 20 75 73 65 20 73 6f 20  ** types use so 
13ea0 6d 75 63 68 20 64 61 74 61 20 73 70 61 63 65 20  much data space 
13eb0 74 68 61 74 20 74 68 65 72 65 20 63 61 6e 20 6f  that there can o
13ec0 6e 6c 79 20 62 65 20 34 30 39 36 20 61 6e 64 20  nly be 4096 and 
13ed0 33 32 20 6f 66 0a 20 20 20 20 20 20 2a 2a 20 74  32 of.      ** t
13ee0 68 65 6d 2c 20 72 65 73 70 65 63 74 69 76 65 6c  hem, respectivel
13ef0 79 2e 20 20 53 6f 20 74 68 65 20 6d 61 78 69 6d  y.  So the maxim
13f00 75 6d 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68  um header length
13f10 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 61 0a   results from a.
13f20 20 20 20 20 20 20 2a 2a 20 33 2d 62 79 74 65 20        ** 3-byte 
13f30 74 79 70 65 20 66 6f 72 20 65 61 63 68 20 6f 66  type for each of
13f40 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20   the maximum of 
13f50 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c  32768 columns pl
13f60 75 73 20 74 68 72 65 65 0a 20 20 20 20 20 20 2a  us three.      *
13f70 2a 20 65 78 74 72 61 20 62 79 74 65 73 20 66 6f  * extra bytes fo
13f80 72 20 74 68 65 20 68 65 61 64 65 72 20 6c 65 6e  r the header len
13f90 67 74 68 20 69 74 73 65 6c 66 2e 20 20 33 32 37  gth itself.  327
13fa0 36 38 2a 33 20 2b 20 33 20 3d 20 39 38 33 30 37  68*3 + 3 = 98307
13fb0 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
13fc0 20 69 66 28 20 6f 66 66 73 65 74 20 3e 20 39 38   if( offset > 98
13fd0 33 30 37 20 7c 7c 20 6f 66 66 73 65 74 20 3e 20  307 || offset > 
13fe0 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20  pC->payloadSize 
13ff0 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
14000 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42  SQLITE_CORRUPT_B
14010 4b 50 54 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  KPT;.        got
14020 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
14030 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
14040 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 66 66 73    }else if( offs
14050 65 74 3e 30 20 29 7b 20 2f 2a 4f 50 54 49 4d 49  et>0 ){ /*OPTIMI
14060 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 2a 2f  ZATION-IF-TRUE*/
14070 0a 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66 6f  .      /* The fo
14080 6c 6c 6f 77 69 6e 67 20 67 6f 74 6f 20 69 73 20  llowing goto is 
14090 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e  an optimization.
140a0 20 20 49 74 20 63 61 6e 20 62 65 20 6f 6d 69 74    It can be omit
140b0 74 65 64 20 61 6e 64 0a 20 20 20 20 20 20 2a 2a  ted and.      **
140c0 20 65 76 65 72 79 74 68 69 6e 67 20 77 69 6c 6c   everything will
140d0 20 73 74 69 6c 6c 20 77 6f 72 6b 2e 20 20 42 75   still work.  Bu
140e0 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20 69 73 20 6d  t OP_Column is m
140f0 65 61 73 75 72 61 62 6c 79 20 66 61 73 74 65 72  easurably faster
14100 0a 20 20 20 20 20 20 2a 2a 20 62 79 20 73 6b 69  .      ** by ski
14110 70 70 69 6e 67 20 74 68 65 20 73 75 62 73 65 71  pping the subseq
14120 75 65 6e 74 20 63 6f 6e 64 69 74 69 6f 6e 61 6c  uent conditional
14130 2c 20 77 68 69 63 68 20 69 73 20 61 6c 77 61 79  , which is alway
14140 73 20 74 72 75 65 2e 0a 20 20 20 20 20 20 2a 2f  s true..      */
14150 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 70  .      zData = p
14160 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 20 20 61  C->aRow;.      a
14170 73 73 65 72 74 28 20 70 43 2d 3e 6e 48 64 72 50  ssert( pC->nHdrP
14180 61 72 73 65 64 3c 3d 70 32 20 29 3b 20 20 20 20  arsed<=p2 );    
14190 20 20 20 20 20 2f 2a 20 43 6f 6e 64 69 74 69 6f       /* Conditio
141a0 6e 61 6c 20 73 6b 69 70 70 65 64 20 2a 2f 0a 20  nal skipped */. 
141b0 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
141c0 75 6d 6e 5f 72 65 61 64 5f 68 65 61 64 65 72 3b  umn_read_header;
141d0 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a  .    }.  }..  /*
141e0 20 4d 61 6b 65 20 73 75 72 65 20 61 74 20 6c 65   Make sure at le
141f0 61 73 74 20 74 68 65 20 66 69 72 73 74 20 70 32  ast the first p2
14200 2b 31 20 65 6e 74 72 69 65 73 20 6f 66 20 74 68  +1 entries of th
14210 65 20 68 65 61 64 65 72 20 68 61 76 65 20 62 65  e header have be
14220 65 6e 0a 20 20 2a 2a 20 70 61 72 73 65 64 20 61  en.  ** parsed a
14230 6e 64 20 76 61 6c 69 64 20 69 6e 66 6f 72 6d 61  nd valid informa
14240 74 69 6f 6e 20 69 73 20 69 6e 20 61 4f 66 66 73  tion is in aOffs
14250 65 74 5b 5d 20 61 6e 64 20 70 43 2d 3e 61 54 79  et[] and pC->aTy
14260 70 65 5b 5d 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  pe[]..  */.  if(
14270 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c   pC->nHdrParsed<
14280 3d 70 32 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  =p2 ){.    /* If
14290 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65 20 68   there is more h
142a0 65 61 64 65 72 20 61 76 61 69 6c 61 62 6c 65 20  eader available 
142b0 66 6f 72 20 70 61 72 73 69 6e 67 20 69 6e 20 74  for parsing in t
142c0 68 65 20 72 65 63 6f 72 64 2c 20 74 72 79 0a 20  he record, try. 
142d0 20 20 20 2a 2a 20 74 6f 20 65 78 74 72 61 63 74     ** to extract
142e0 20 61 64 64 69 74 69 6f 6e 61 6c 20 66 69 65 6c   additional fiel
142f0 64 73 20 75 70 20 74 68 72 6f 75 67 68 20 74 68  ds up through th
14300 65 20 70 32 2b 31 2d 74 68 20 66 69 65 6c 64 20  e p2+1-th field 
14310 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
14320 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 3c 61  pC->iHdrOffset<a
14330 4f 66 66 73 65 74 5b 30 5d 20 29 7b 0a 20 20 20  Offset[0] ){.   
14340 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20     /* Make sure 
14350 7a 44 61 74 61 20 70 6f 69 6e 74 73 20 74 6f 20  zData points to 
14360 65 6e 6f 75 67 68 20 6f 66 20 74 68 65 20 72 65  enough of the re
14370 63 6f 72 64 20 74 6f 20 63 6f 76 65 72 20 74 68  cord to cover th
14380 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20 20 20  e header. */.   
14390 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d     if( pC->aRow=
143a0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 6d 65  =0 ){.        me
143b0 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73  mset(&sMem, 0, s
143c0 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20  izeof(sMem));.  
143d0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
143e0 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72  e3VdbeMemFromBtr
143f0 65 65 28 70 43 72 73 72 2c 20 30 2c 20 61 4f 66  ee(pCrsr, 0, aOf
14400 66 73 65 74 5b 30 5d 2c 20 21 70 43 2d 3e 69 73  fset[0], !pC->is
14410 54 61 62 6c 65 2c 20 26 73 4d 65 6d 29 3b 0a 20  Table, &sMem);. 
14420 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
14430 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
14440 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
14450 6f 72 3b 0a 20 20 20 20 20 20 20 20 7a 44 61 74  or;.        zDat
14460 61 20 3d 20 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b  a = (u8*)sMem.z;
14470 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
14480 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43        zData = pC
14490 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 20 20 7d 0a  ->aRow;.      }.
144a0 20 20 0a 20 20 20 20 20 20 2f 2a 20 46 69 6c 6c    .      /* Fill
144b0 20 69 6e 20 70 43 2d 3e 61 54 79 70 65 5b 69 5d   in pC->aType[i]
144c0 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d 20   and aOffset[i] 
144d0 76 61 6c 75 65 73 20 74 68 72 6f 75 67 68 20 74  values through t
144e0 68 65 20 70 32 2d 74 68 20 66 69 65 6c 64 2e 20  he p2-th field. 
144f0 2a 2f 0a 20 20 20 20 6f 70 5f 63 6f 6c 75 6d 6e  */.    op_column
14500 5f 72 65 61 64 5f 68 65 61 64 65 72 3a 0a 20 20  _read_header:.  
14510 20 20 20 20 69 20 3d 20 70 43 2d 3e 6e 48 64 72      i = pC->nHdr
14520 50 61 72 73 65 64 3b 0a 20 20 20 20 20 20 6f 66  Parsed;.      of
14530 66 73 65 74 36 34 20 3d 20 61 4f 66 66 73 65 74  fset64 = aOffset
14540 5b 69 5d 3b 0a 20 20 20 20 20 20 7a 48 64 72 20  [i];.      zHdr 
14550 3d 20 7a 44 61 74 61 20 2b 20 70 43 2d 3e 69 48  = zData + pC->iH
14560 64 72 4f 66 66 73 65 74 3b 0a 20 20 20 20 20 20  drOffset;.      
14570 7a 45 6e 64 48 64 72 20 3d 20 7a 44 61 74 61 20  zEndHdr = zData 
14580 2b 20 61 4f 66 66 73 65 74 5b 30 5d 3b 0a 20 20  + aOffset[0];.  
14590 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20      do{.        
145a0 69 66 28 20 28 74 20 3d 20 7a 48 64 72 5b 30 5d  if( (t = zHdr[0]
145b0 29 3c 30 78 38 30 20 29 7b 0a 20 20 20 20 20 20  )<0x80 ){.      
145c0 20 20 20 20 7a 48 64 72 2b 2b 3b 0a 20 20 20 20      zHdr++;.    
145d0 20 20 20 20 20 20 6f 66 66 73 65 74 36 34 20 2b        offset64 +
145e0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4f 6e 65  = sqlite3VdbeOne
145f0 42 79 74 65 53 65 72 69 61 6c 54 79 70 65 4c 65  ByteSerialTypeLe
14600 6e 28 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 65  n(t);.        }e
14610 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 7a  lse{.          z
14620 48 64 72 20 2b 3d 20 73 71 6c 69 74 65 33 47 65  Hdr += sqlite3Ge
14630 74 56 61 72 69 6e 74 33 32 28 7a 48 64 72 2c 20  tVarint32(zHdr, 
14640 26 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f  &t);.          o
14650 66 66 73 65 74 36 34 20 2b 3d 20 73 71 6c 69 74  ffset64 += sqlit
14660 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
14670 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20 20 20 20  Len(t);.        
14680 7d 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 54  }.        pC->aT
14690 79 70 65 5b 69 2b 2b 5d 20 3d 20 74 3b 0a 20 20  ype[i++] = t;.  
146a0 20 20 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d        aOffset[i]
146b0 20 3d 20 28 75 33 32 29 28 6f 66 66 73 65 74 36   = (u32)(offset6
146c0 34 20 26 20 30 78 66 66 66 66 66 66 66 66 29 3b  4 & 0xffffffff);
146d0 0a 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20 69  .      }while( i
146e0 3c 3d 70 32 20 26 26 20 7a 48 64 72 3c 7a 45 6e  <=p2 && zHdr<zEn
146f0 64 48 64 72 20 29 3b 0a 0a 20 20 20 20 20 20 2f  dHdr );..      /
14700 2a 20 54 68 65 20 72 65 63 6f 72 64 20 69 73 20  * The record is 
14710 63 6f 72 72 75 70 74 20 69 66 20 61 6e 79 20 6f  corrupt if any o
14720 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
14730 61 72 65 20 74 72 75 65 3a 0a 20 20 20 20 20 20  are true:.      
14740 2a 2a 20 28 31 29 20 74 68 65 20 62 79 74 65 73  ** (1) the bytes
14750 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 65   of the header e
14760 78 74 65 6e 64 20 70 61 73 74 20 74 68 65 20 64  xtend past the d
14770 65 63 6c 61 72 65 64 20 68 65 61 64 65 72 20 73  eclared header s
14780 69 7a 65 0a 20 20 20 20 20 20 2a 2a 20 28 32 29  ize.      ** (2)
14790 20 74 68 65 20 65 6e 74 69 72 65 20 68 65 61 64   the entire head
147a0 65 72 20 77 61 73 20 75 73 65 64 20 62 75 74 20  er was used but 
147b0 6e 6f 74 20 61 6c 6c 20 64 61 74 61 20 77 61 73  not all data was
147c0 20 75 73 65 64 0a 20 20 20 20 20 20 2a 2a 20 28   used.      ** (
147d0 33 29 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  3) the end of th
147e0 65 20 64 61 74 61 20 65 78 74 65 6e 64 73 20 62  e data extends b
147f0 65 79 6f 6e 64 20 74 68 65 20 65 6e 64 20 6f 66  eyond the end of
14800 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20   the record..   
14810 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20     */.      if( 
14820 28 7a 48 64 72 3e 3d 7a 45 6e 64 48 64 72 20 26  (zHdr>=zEndHdr &
14830 26 20 28 7a 48 64 72 3e 7a 45 6e 64 48 64 72 20  & (zHdr>zEndHdr 
14840 7c 7c 20 6f 66 66 73 65 74 36 34 21 3d 70 43 2d  || offset64!=pC-
14850 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 29 0a 20  >payloadSize)). 
14860 20 20 20 20 20 20 7c 7c 20 28 6f 66 66 73 65 74        || (offset
14870 36 34 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64  64 > pC->payload
14880 53 69 7a 65 29 0a 20 20 20 20 20 20 29 7b 0a 20  Size).      ){. 
14890 20 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61         if( pC->a
148a0 52 6f 77 3d 3d 30 20 29 20 73 71 6c 69 74 65 33  Row==0 ) sqlite3
148b0 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26  VdbeMemRelease(&
148c0 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 72  sMem);.        r
148d0 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  c = SQLITE_CORRU
148e0 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 20  PT_BKPT;.       
148f0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
14900 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
14910 7d 0a 0a 20 20 20 20 20 20 70 43 2d 3e 6e 48 64  }..      pC->nHd
14920 72 50 61 72 73 65 64 20 3d 20 69 3b 0a 20 20 20  rParsed = i;.   
14930 20 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65     pC->iHdrOffse
14940 74 20 3d 20 28 75 33 32 29 28 7a 48 64 72 20 2d  t = (u32)(zHdr -
14950 20 7a 44 61 74 61 29 3b 0a 20 20 20 20 20 20 69   zData);.      i
14960 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29  f( pC->aRow==0 )
14970 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
14980 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20  elease(&sMem);. 
14990 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
149a0 74 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 0a 20 20  t = 0;.    }..  
149b0 20 20 2f 2a 20 49 66 20 61 66 74 65 72 20 74 72    /* If after tr
149c0 79 69 6e 67 20 74 6f 20 65 78 74 72 61 63 74 20  ying to extract 
149d0 6e 65 77 20 65 6e 74 72 69 65 73 20 66 72 6f 6d  new entries from
149e0 20 74 68 65 20 68 65 61 64 65 72 2c 20 6e 48 64   the header, nHd
149f0 72 50 61 72 73 65 64 20 69 73 0a 20 20 20 20 2a  rParsed is.    *
14a00 2a 20 73 74 69 6c 6c 20 6e 6f 74 20 75 70 20 74  * still not up t
14a10 6f 20 70 32 2c 20 74 68 61 74 20 6d 65 61 6e 73  o p2, that means
14a20 20 74 68 61 74 20 74 68 65 20 72 65 63 6f 72 64   that the record
14a30 20 68 61 73 20 66 65 77 65 72 20 74 68 61 6e 20   has fewer than 
14a40 70 32 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e  p2.    ** column
14a50 73 2e 20 20 53 6f 20 74 68 65 20 72 65 73 75 6c  s.  So the resul
14a60 74 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72  t will be either
14a70 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c   the default val
14a80 75 65 20 6f 72 20 61 20 4e 55 4c 4c 2e 0a 20 20  ue or a NULL..  
14a90 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d    */.    if( pC-
14aa0 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20  >nHdrParsed<=p2 
14ab0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70  ){.      if( pOp
14ac0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45 4d  ->p4type==P4_MEM
14ad0 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
14ae0 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
14af0 77 43 6f 70 79 28 70 44 65 73 74 2c 20 70 4f 70  wCopy(pDest, pOp
14b00 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53  ->p4.pMem, MEM_S
14b10 74 61 74 69 63 29 3b 0a 20 20 20 20 20 20 7d 65  tatic);.      }e
14b20 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  lse{.        sql
14b30 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
14b40 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20  ll(pDest);.     
14b50 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70   }.      goto op
14b60 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20  _column_out;.   
14b70 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
14b80 74 20 3d 20 70 43 2d 3e 61 54 79 70 65 5b 70 32  t = pC->aType[p2
14b90 5d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 45 78 74  ];.  }..  /* Ext
14ba0 72 61 63 74 20 74 68 65 20 63 6f 6e 74 65 6e 74  ract the content
14bb0 20 66 6f 72 20 74 68 65 20 70 32 2b 31 2d 74 68   for the p2+1-th
14bc0 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6e 74 72 6f   column.  Contro
14bd0 6c 20 63 61 6e 20 6f 6e 6c 79 0a 20 20 2a 2a 20  l can only.  ** 
14be0 72 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74  reach this point
14bf0 20 69 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c   if aOffset[p2],
14c00 20 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d 2c 20   aOffset[p2+1], 
14c10 61 6e 64 20 70 43 2d 3e 61 54 79 70 65 5b 70 32  and pC->aType[p2
14c20 5d 20 61 72 65 0a 20 20 2a 2a 20 61 6c 6c 20 76  ] are.  ** all v
14c30 61 6c 69 64 2e 0a 20 20 2a 2f 0a 20 20 61 73 73  alid..  */.  ass
14c40 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e 48 64 72  ert( p2<pC->nHdr
14c50 50 61 72 73 65 64 20 29 3b 0a 20 20 61 73 73 65  Parsed );.  asse
14c60 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
14c70 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73  K );.  assert( s
14c80 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d  qlite3VdbeCheckM
14c90 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 70 44 65  emInvariants(pDe
14ca0 73 74 29 20 29 3b 0a 20 20 69 66 28 20 56 64 62  st) );.  if( Vdb
14cb0 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 44 65 73  eMemDynamic(pDes
14cc0 74 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  t) ){.    sqlite
14cd0 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
14ce0 70 44 65 73 74 29 3b 0a 20 20 7d 0a 20 20 61 73  pDest);.  }.  as
14cf0 73 65 72 74 28 20 74 3d 3d 70 43 2d 3e 61 54 79  sert( t==pC->aTy
14d00 70 65 5b 70 32 5d 20 29 3b 0a 20 20 69 66 28 20  pe[p2] );.  if( 
14d10 70 43 2d 3e 73 7a 52 6f 77 3e 3d 61 4f 66 66 73  pC->szRow>=aOffs
14d20 65 74 5b 70 32 2b 31 5d 20 29 7b 0a 20 20 20 20  et[p2+1] ){.    
14d30 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 63  /* This is the c
14d40 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 68 65 72 65  ommon case where
14d50 20 74 68 65 20 64 65 73 69 72 65 64 20 63 6f 6e   the desired con
14d60 74 65 6e 74 20 66 69 74 73 20 6f 6e 20 74 68 65  tent fits on the
14d70 20 6f 72 69 67 69 6e 61 6c 0a 20 20 20 20 2a 2a   original.    **
14d80 20 70 61 67 65 20 2d 20 77 68 65 72 65 20 74 68   page - where th
14d90 65 20 63 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74  e content is not
14da0 20 6f 6e 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20   on an overflow 
14db0 70 61 67 65 20 2a 2f 0a 20 20 20 20 7a 44 61 74  page */.    zDat
14dc0 61 20 3d 20 70 43 2d 3e 61 52 6f 77 20 2b 20 61  a = pC->aRow + a
14dd0 4f 66 66 73 65 74 5b 70 32 5d 3b 0a 20 20 20 20  Offset[p2];.    
14de0 69 66 28 20 74 3c 31 32 20 29 7b 0a 20 20 20 20  if( t<12 ){.    
14df0 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72    sqlite3VdbeSer
14e00 69 61 6c 47 65 74 28 7a 44 61 74 61 2c 20 74 2c  ialGet(zData, t,
14e10 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c   pDest);.    }el
14e20 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20  se{.      /* If 
14e30 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65  the column value
14e40 20 69 73 20 61 20 73 74 72 69 6e 67 2c 20 77 65   is a string, we
14e50 20 6e 65 65 64 20 61 20 70 65 72 73 69 73 74 65   need a persiste
14e60 6e 74 20 76 61 6c 75 65 2c 20 6e 6f 74 0a 20 20  nt value, not.  
14e70 20 20 20 20 2a 2a 20 61 20 4d 45 4d 5f 45 70 68      ** a MEM_Eph
14e80 65 6d 20 76 61 6c 75 65 2e 20 20 54 68 69 73 20  em value.  This 
14e90 62 72 61 6e 63 68 20 69 73 20 61 20 66 61 73 74  branch is a fast
14ea0 20 73 68 6f 72 74 2d 63 75 74 20 74 68 61 74 20   short-cut that 
14eb0 69 73 20 65 71 75 69 76 61 6c 65 6e 74 0a 20 20  is equivalent.  
14ec0 20 20 20 20 2a 2a 20 74 6f 20 63 61 6c 6c 69 6e      ** to callin
14ed0 67 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  g sqlite3VdbeSer
14ee0 69 61 6c 47 65 74 28 29 20 61 6e 64 20 73 71 6c  ialGet() and sql
14ef0 69 74 65 33 56 64 62 65 44 65 65 70 68 65 6d 65  ite3VdbeDeepheme
14f00 72 61 6c 69 7a 65 28 29 2e 0a 20 20 20 20 20 20  ralize()..      
14f10 2a 2f 0a 20 20 20 20 20 20 73 74 61 74 69 63 20  */.      static 
14f20 63 6f 6e 73 74 20 75 31 36 20 61 46 6c 61 67 5b  const u16 aFlag[
14f30 5d 20 3d 20 7b 20 4d 45 4d 5f 42 6c 6f 62 2c 20  ] = { MEM_Blob, 
14f40 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 54 65 72 6d  MEM_Str|MEM_Term
14f50 20 7d 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d   };.      pDest-
14f60 3e 6e 20 3d 20 6c 65 6e 20 3d 20 28 74 2d 31 32  >n = len = (t-12
14f70 29 2f 32 3b 0a 20 20 20 20 20 20 70 44 65 73 74  )/2;.      pDest
14f80 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
14f90 3b 0a 20 20 20 20 20 20 69 66 28 20 70 44 65 73  ;.      if( pDes
14fa0 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3c 20 6c 65  t->szMalloc < le
14fb0 6e 2b 32 20 29 7b 0a 20 20 20 20 20 20 20 20 70  n+2 ){.        p
14fc0 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  Dest->flags = ME
14fd0 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  M_Null;.        
14fe0 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
14ff0 65 6d 47 72 6f 77 28 70 44 65 73 74 2c 20 6c 65  emGrow(pDest, le
15000 6e 2b 32 2c 20 30 29 20 29 20 67 6f 74 6f 20 6e  n+2, 0) ) goto n
15010 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65 6c  o_mem;.      }el
15020 73 65 7b 0a 20 20 20 20 20 20 20 20 70 44 65 73  se{.        pDes
15030 74 2d 3e 7a 20 3d 20 70 44 65 73 74 2d 3e 7a 4d  t->z = pDest->zM
15040 61 6c 6c 6f 63 3b 0a 20 20 20 20 20 20 7d 0a 20  alloc;.      }. 
15050 20 20 20 20 20 6d 65 6d 63 70 79 28 70 44 65 73       memcpy(pDes
15060 74 2d 3e 7a 2c 20 7a 44 61 74 61 2c 20 6c 65 6e  t->z, zData, len
15070 29 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e  );.      pDest->
15080 7a 5b 6c 65 6e 5d 20 3d 20 30 3b 0a 20 20 20 20  z[len] = 0;.    
15090 20 20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 2b 31    pDest->z[len+1
150a0 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 44 65  ] = 0;.      pDe
150b0 73 74 2d 3e 66 6c 61 67 73 20 3d 20 61 46 6c 61  st->flags = aFla
150c0 67 5b 74 26 31 5d 3b 0a 20 20 20 20 7d 0a 20 20  g[t&1];.    }.  
150d0 7d 65 6c 73 65 7b 0a 20 20 20 20 70 44 65 73 74  }else{.    pDest
150e0 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
150f0 3b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 62 72  ;.    /* This br
15100 61 6e 63 68 20 68 61 70 70 65 6e 73 20 6f 6e 6c  anch happens onl
15110 79 20 77 68 65 6e 20 63 6f 6e 74 65 6e 74 20 69  y when content i
15120 73 20 6f 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61  s on overflow pa
15130 67 65 73 20 2a 2f 0a 20 20 20 20 69 66 28 20 28  ges */.    if( (
15140 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c  (pOp->p5 & (OPFL
15150 41 47 5f 4c 45 4e 47 54 48 41 52 47 7c 4f 50 46  AG_LENGTHARG|OPF
15160 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29 29 21  LAG_TYPEOFARG))!
15170 3d 30 0a 20 20 20 20 20 20 20 20 20 20 26 26 20  =0.          && 
15180 28 28 74 3e 3d 31 32 20 26 26 20 28 74 26 31 29  ((t>=12 && (t&1)
15190 3d 3d 30 29 20 7c 7c 20 28 70 4f 70 2d 3e 70 35  ==0) || (pOp->p5
151a0 20 26 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46   & OPFLAG_TYPEOF
151b0 41 52 47 29 21 3d 30 29 29 0a 20 20 20 20 20 7c  ARG)!=0)).     |
151c0 7c 20 28 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33  | (len = sqlite3
151d0 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65  VdbeSerialTypeLe
151e0 6e 28 74 29 29 3d 3d 30 0a 20 20 20 20 29 7b 0a  n(t))==0.    ){.
151f0 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 6e 74        /* Content
15200 20 69 73 20 69 72 72 65 6c 65 76 61 6e 74 20 66   is irrelevant f
15210 6f 72 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 31  or.      **    1
15220 2e 20 74 68 65 20 74 79 70 65 6f 66 28 29 20 66  . the typeof() f
15230 75 6e 63 74 69 6f 6e 2c 0a 20 20 20 20 20 20 2a  unction,.      *
15240 2a 20 20 20 20 32 2e 20 74 68 65 20 6c 65 6e 67  *    2. the leng
15250 74 68 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69  th(X) function i
15260 66 20 58 20 69 73 20 61 20 62 6c 6f 62 2c 20 61  f X is a blob, a
15270 6e 64 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 33  nd.      **    3
15280 2e 20 69 66 20 74 68 65 20 63 6f 6e 74 65 6e 74  . if the content
15290 20 6c 65 6e 67 74 68 20 69 73 20 7a 65 72 6f 2e   length is zero.
152a0 0a 20 20 20 20 20 20 2a 2a 20 53 6f 20 77 65 20  .      ** So we 
152b0 6d 69 67 68 74 20 61 73 20 77 65 6c 6c 20 75 73  might as well us
152c0 65 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74 20  e bogus content 
152d0 72 61 74 68 65 72 20 74 68 61 6e 20 72 65 61 64  rather than read
152e0 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e  ing.      ** con
152f0 74 65 6e 74 20 66 72 6f 6d 20 64 69 73 6b 2e 20  tent from disk. 
15300 2a 2f 0a 20 20 20 20 20 20 73 74 61 74 69 63 20  */.      static 
15310 75 38 20 61 5a 65 72 6f 5b 38 5d 3b 20 20 2f 2a  u8 aZero[8];  /*
15320 20 54 68 69 73 20 69 73 20 74 68 65 20 62 6f 67   This is the bog
15330 75 73 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20  us content */.  
15340 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
15350 65 72 69 61 6c 47 65 74 28 61 5a 65 72 6f 2c 20  erialGet(aZero, 
15360 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d  t, pDest);.    }
15370 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d  else{.      rc =
15380 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46   sqlite3VdbeMemF
15390 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20  romBtree(pCrsr, 
153a0 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e  aOffset[p2], len
153b0 2c 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 2c 0a  , !pC->isTable,.
153c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153e0 20 20 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20     pDest);.     
153f0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
15400 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
15410 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
15420 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
15430 65 72 69 61 6c 47 65 74 28 28 63 6f 6e 73 74 20  erialGet((const 
15440 75 38 2a 29 70 44 65 73 74 2d 3e 7a 2c 20 74 2c  u8*)pDest->z, t,
15450 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 70   pDest);.      p
15460 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  Dest->flags &= ~
15470 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20 20 20 20 7d  MEM_Ephem;.    }
15480 0a 20 20 7d 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f  .  }..op_column_
15490 6f 75 74 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41  out:.  UPDATE_MA
154a0 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74  X_BLOBSIZE(pDest
154b0 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
154c0 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65  ACE(pOp->p3, pDe
154d0 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  st);.  break;.}.
154e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66 69  ./* Opcode: Affi
154f0 6e 69 74 79 20 50 31 20 50 32 20 2a 20 50 34 20  nity P1 P2 * P4 
15500 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61  *.** Synopsis: a
15510 66 66 69 6e 69 74 79 28 72 5b 50 31 40 50 32 5d  ffinity(r[P1@P2]
15520 29 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66  ).**.** Apply af
15530 66 69 6e 69 74 69 65 73 20 74 6f 20 61 20 72 61  finities to a ra
15540 6e 67 65 20 6f 66 20 50 32 20 72 65 67 69 73 74  nge of P2 regist
15550 65 72 73 20 73 74 61 72 74 69 6e 67 20 77 69 74  ers starting wit
15560 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  h P1..**.** P4 i
15570 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20  s a string that 
15580 69 73 20 50 32 20 63 68 61 72 61 63 74 65 72 73  is P2 characters
15590 20 6c 6f 6e 67 2e 20 54 68 65 20 6e 74 68 20 63   long. The nth c
155a0 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a  haracter of the.
155b0 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61  ** string indica
155c0 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61  tes the column a
155d0 66 66 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f  ffinity that sho
155e0 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72 20  uld be used for 
155f0 74 68 65 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72  the nth.** memor
15600 79 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 72 61  y cell in the ra
15610 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  nge..*/.case OP_
15620 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20 63 6f  Affinity: {.  co
15630 6e 73 74 20 63 68 61 72 20 2a 7a 41 66 66 69 6e  nst char *zAffin
15640 69 74 79 3b 20 20 20 2f 2a 20 54 68 65 20 61 66  ity;   /* The af
15650 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70  finity to be app
15660 6c 69 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 63  lied */.  char c
15670 41 66 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  Aff;            
15680 20 20 20 2f 2a 20 41 20 73 69 6e 67 6c 65 20 63     /* A single c
15690 68 61 72 61 63 74 65 72 20 6f 66 20 61 66 66 69  haracter of affi
156a0 6e 69 74 79 20 2a 2f 0a 0a 20 20 7a 41 66 66 69  nity */..  zAffi
156b0 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  nity = pOp->p4.z
156c0 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66  ;.  assert( zAff
156d0 69 6e 69 74 79 21 3d 30 20 29 3b 0a 20 20 61 73  inity!=0 );.  as
156e0 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79 5b  sert( zAffinity[
156f0 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29 3b 0a 20  pOp->p2]==0 );. 
15700 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
15710 70 2d 3e 70 31 5d 3b 0a 20 20 77 68 69 6c 65 28  p->p1];.  while(
15720 20 28 63 41 66 66 20 3d 20 2a 28 7a 41 66 66 69   (cAff = *(zAffi
15730 6e 69 74 79 2b 2b 29 29 21 3d 30 20 29 7b 0a 20  nity++))!=0 ){. 
15740 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 20     assert( pIn1 
15750 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b 28 70 2d 3e  <= &p->aMem[(p->
15760 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
15770 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73  sor)] );.    ass
15780 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
15790 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 61 70 70  pIn1) );.    app
157a0 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c  lyAffinity(pIn1,
157b0 20 63 41 66 66 2c 20 65 6e 63 6f 64 69 6e 67 29   cAff, encoding)
157c0 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20  ;.    pIn1++;.  
157d0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
157e0 20 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52 65 63   Opcode: MakeRec
157f0 6f 72 64 20 50 31 20 50 32 20 50 33 20 50 34 20  ord P1 P2 P3 P4 
15800 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
15810 5b 50 33 5d 3d 6d 6b 72 65 63 28 72 5b 50 31 40  [P3]=mkrec(r[P1@
15820 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76 65  P2]).**.** Conve
15830 72 74 20 50 32 20 72 65 67 69 73 74 65 72 73 20  rt P2 registers 
15840 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
15850 31 20 69 6e 74 6f 20 74 68 65 20 5b 72 65 63 6f  1 into the [reco
15860 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20 75 73  rd format].** us
15870 65 20 61 73 20 61 20 64 61 74 61 20 72 65 63 6f  e as a data reco
15880 72 64 20 69 6e 20 61 20 64 61 74 61 62 61 73 65  rd in a database
15890 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61 20 6b   table or as a k
158a0 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64 65  ey.** in an inde
158b0 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d  x.  The OP_Colum
158c0 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64 65 63  n opcode can dec
158d0 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64 20 6c  ode the record l
158e0 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d  ater..**.** P4 m
158f0 61 79 20 62 65 20 61 20 73 74 72 69 6e 67 20 74  ay be a string t
15900 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61 63  hat is P2 charac
15910 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20  ters long.  The 
15920 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f 66  nth character of
15930 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69   the.** string i
15940 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c  ndicates the col
15950 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61  umn affinity tha
15960 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64  t should be used
15970 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20   for the nth.** 
15980 66 69 65 6c 64 20 6f 66 20 74 68 65 20 69 6e 64  field of the ind
15990 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  ex key..**.** Th
159a0 65 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20 63  e mapping from c
159b0 68 61 72 61 63 74 65 72 20 74 6f 20 61 66 66 69  haracter to affi
159c0 6e 69 74 79 20 69 73 20 67 69 76 65 6e 20 62 79  nity is given by
159d0 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   the SQLITE_AFF_
159e0 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e  .** macros defin
159f0 65 64 20 69 6e 20 73 71 6c 69 74 65 49 6e 74 2e  ed in sqliteInt.
15a00 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69  h..**.** If P4 i
15a10 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c 6c 20  s NULL then all 
15a20 69 6e 64 65 78 20 66 69 65 6c 64 73 20 68 61 76  index fields hav
15a30 65 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 42  e the affinity B
15a40 4c 4f 42 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  LOB..*/.case OP_
15a50 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a 20 20  MakeRecord: {.  
15a60 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b 20  u8 *zNewRecord; 
15a70 20 20 20 20 20 20 20 2f 2a 20 41 20 62 75 66 66         /* A buff
15a80 65 72 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64  er to hold the d
15a90 61 74 61 20 66 6f 72 20 74 68 65 20 6e 65 77 20  ata for the new 
15aa0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20  record */.  Mem 
15ab0 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20 20 20  *pRec;          
15ac0 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 65     /* The new re
15ad0 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e 44  cord */.  u64 nD
15ae0 61 74 61 3b 20 20 20 20 20 20 20 20 20 20 20 20  ata;            
15af0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
15b00 74 65 73 20 6f 66 20 64 61 74 61 20 73 70 61 63  tes of data spac
15b10 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72 3b  e */.  int nHdr;
15b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
15b30 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
15b40 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63 65   of header space
15b50 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b   */.  i64 nByte;
15b60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15b70 44 61 74 61 20 73 70 61 63 65 20 72 65 71 75 69  Data space requi
15b80 72 65 64 20 66 6f 72 20 74 68 69 73 20 72 65 63  red for this rec
15b90 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20 6e 5a 65  ord */.  i64 nZe
15ba0 72 6f 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ro;             
15bb0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72  /* Number of zer
15bc0 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20 65  o bytes at the e
15bd0 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  nd of the record
15be0 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69 6e   */.  int nVarin
15bf0 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
15c00 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
15c10 69 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a 20  in a varint */. 
15c20 20 75 33 32 20 73 65 72 69 61 6c 5f 74 79 70 65   u32 serial_type
15c30 3b 20 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20  ;       /* Type 
15c40 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  field */.  Mem *
15c50 70 44 61 74 61 30 3b 20 20 20 20 20 20 20 20 20  pData0;         
15c60 20 20 2f 2a 20 46 69 72 73 74 20 66 69 65 6c 64    /* First field
15c70 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64 20   to be combined 
15c80 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20  into the record 
15c90 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74 3b  */.  Mem *pLast;
15ca0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
15cb0 61 73 74 20 66 69 65 6c 64 20 6f 66 20 74 68 65  ast field of the
15cc0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
15cd0 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20   nField;        
15ce0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
15cf0 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72   fields in the r
15d00 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72 20  ecord */.  char 
15d10 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 20 20  *zAffinity;     
15d20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
15d30 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65  y string for the
15d40 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
15d50 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20   file_format;   
15d60 20 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d      /* File form
15d70 61 74 20 74 6f 20 75 73 65 20 66 6f 72 20 65 6e  at to use for en
15d80 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  coding */.  int 
15d90 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
15da0 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64     /* Space used
15db0 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d   in zNewRecord[]
15dc0 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 69 6e 74   header */.  int
15dd0 20 6a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   j;             
15de0 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65      /* Space use
15df0 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b  d in zNewRecord[
15e00 5d 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 75  ] content */.  u
15e10 33 32 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20  32 len;         
15e20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20        /* Length 
15e30 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a 0a 20  of a field */.. 
15e40 20 2f 2a 20 41 73 73 75 6d 69 6e 67 20 74 68 65   /* Assuming the
15e50 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73   record contains
15e60 20 4e 20 66 69 65 6c 64 73 2c 20 74 68 65 20 72   N fields, the r
15e70 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 6c 6f 6f  ecord format loo
15e80 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65 20 74 68 69  ks.  ** like thi
15e90 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d  s:.  **.  ** ---
15ea0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15eb0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15ec0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15ed0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15ee0 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64 72  -----.  ** | hdr
15ef0 2d 73 69 7a 65 20 7c 20 74 79 70 65 20 30 20 7c  -size | type 0 |
15f00 20 74 79 70 65 20 31 20 7c 20 2e 2e 2e 20 7c 20   type 1 | ... | 
15f10 74 79 70 65 20 4e 2d 31 20 7c 20 64 61 74 61 30  type N-1 | data0
15f20 20 7c 20 2e 2e 2e 20 7c 20 64 61 74 61 20 4e 2d   | ... | data N-
15f30 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d  1 | .  ** ------
15f40 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15f50 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15f60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15f70 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15f80 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 61 74  --.  **.  ** Dat
15f90 61 28 30 29 20 69 73 20 74 61 6b 65 6e 20 66 72  a(0) is taken fr
15fa0 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  om register P1. 
15fb0 20 44 61 74 61 28 31 29 20 63 6f 6d 65 73 20 66   Data(1) comes f
15fc0 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2b  rom register P1+
15fd0 31 0a 20 20 2a 2a 20 61 6e 64 20 73 6f 20 66 6f  1.  ** and so fo
15fe0 72 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45  rth..  **.  ** E
15ff0 61 63 68 20 74 79 70 65 20 66 69 65 6c 64 20 69  ach type field i
16000 73 20 61 20 76 61 72 69 6e 74 20 72 65 70 72 65  s a varint repre
16010 73 65 6e 74 69 6e 67 20 74 68 65 20 73 65 72 69  senting the seri
16020 61 6c 20 74 79 70 65 20 6f 66 20 74 68 65 20 0a  al type of the .
16030 20 20 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69    ** correspondi
16040 6e 67 20 64 61 74 61 20 65 6c 65 6d 65 6e 74 20  ng data element 
16050 28 73 65 65 20 73 71 6c 69 74 65 33 56 64 62 65  (see sqlite3Vdbe
16060 53 65 72 69 61 6c 54 79 70 65 28 29 29 2e 20 54  SerialType()). T
16070 68 65 0a 20 20 2a 2a 20 68 64 72 2d 73 69 7a 65  he.  ** hdr-size
16080 20 66 69 65 6c 64 20 69 73 20 61 6c 73 6f 20 61   field is also a
16090 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69 73   varint which is
160a0 20 74 68 65 20 6f 66 66 73 65 74 20 66 72 6f 6d   the offset from
160b0 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20   the beginning. 
160c0 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72   ** of the recor
160d0 64 20 74 6f 20 64 61 74 61 30 2e 0a 20 20 2a 2f  d to data0..  */
160e0 0a 20 20 6e 44 61 74 61 20 3d 20 30 3b 20 20 20  .  nData = 0;   
160f0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
16100 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61  of bytes of data
16110 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 48 64 72   space */.  nHdr
16120 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f   = 0;          /
16130 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
16140 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63  s of header spac
16150 65 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20 30  e */.  nZero = 0
16160 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
16170 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65  ber of zero byte
16180 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  s at the end of 
16190 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
161a0 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 31  nField = pOp->p1
161b0 3b 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20  ;.  zAffinity = 
161c0 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73  pOp->p4.z;.  ass
161d0 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 26 26  ert( nField>0 &&
161e0 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f   pOp->p2>0 && pO
161f0 70 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d 28 70  p->p2+nField<=(p
16200 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
16210 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 70 44  ursor)+1 );.  pD
16220 61 74 61 30 20 3d 20 26 61 4d 65 6d 5b 6e 46 69  ata0 = &aMem[nFi
16230 65 6c 64 5d 3b 0a 20 20 6e 46 69 65 6c 64 20 3d  eld];.  nField =
16240 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 4c 61 73   pOp->p2;.  pLas
16250 74 20 3d 20 26 70 44 61 74 61 30 5b 6e 46 69 65  t = &pData0[nFie
16260 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c 65 5f 66 6f  ld-1];.  file_fo
16270 72 6d 61 74 20 3d 20 70 2d 3e 6d 69 6e 57 72 69  rmat = p->minWri
16280 74 65 46 69 6c 65 46 6f 72 6d 61 74 3b 0a 0a 20  teFileFormat;.. 
16290 20 2f 2a 20 49 64 65 6e 74 69 66 79 20 74 68 65   /* Identify the
162a0 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72   output register
162b0 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
162c0 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c  p->p3<pOp->p1 ||
162d0 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70   pOp->p3>=pOp->p
162e0 31 2b 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 70  1+pOp->p2 );.  p
162f0 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
16300 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p3];.  memAbout
16310 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
16320 29 3b 0a 0a 20 20 2f 2a 20 41 70 70 6c 79 20 74  );..  /* Apply t
16330 68 65 20 72 65 71 75 65 73 74 65 64 20 61 66 66  he requested aff
16340 69 6e 69 74 79 20 74 6f 20 61 6c 6c 20 69 6e 70  inity to all inp
16350 75 74 73 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  uts.  */.  asser
16360 74 28 20 70 44 61 74 61 30 3c 3d 70 4c 61 73 74  t( pData0<=pLast
16370 20 29 3b 0a 20 20 69 66 28 20 7a 41 66 66 69 6e   );.  if( zAffin
16380 69 74 79 20 29 7b 0a 20 20 20 20 70 52 65 63 20  ity ){.    pRec 
16390 3d 20 70 44 61 74 61 30 3b 0a 20 20 20 20 64 6f  = pData0;.    do
163a0 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66 66  {.      applyAff
163b0 69 6e 69 74 79 28 70 52 65 63 2b 2b 2c 20 2a 28  inity(pRec++, *(
163c0 7a 41 66 66 69 6e 69 74 79 2b 2b 29 2c 20 65 6e  zAffinity++), en
163d0 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20 20 61  coding);.      a
163e0 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79  ssert( zAffinity
163f0 5b 30 5d 3d 3d 30 20 7c 7c 20 70 52 65 63 3c 3d  [0]==0 || pRec<=
16400 70 4c 61 73 74 20 29 3b 0a 20 20 20 20 7d 77 68  pLast );.    }wh
16410 69 6c 65 28 20 7a 41 66 66 69 6e 69 74 79 5b 30  ile( zAffinity[0
16420 5d 20 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4c  ] );.  }..  /* L
16430 6f 6f 70 20 74 68 72 6f 75 67 68 20 74 68 65 20  oop through the 
16440 65 6c 65 6d 65 6e 74 73 20 74 68 61 74 20 77 69  elements that wi
16450 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68 65 20 72  ll make up the r
16460 65 63 6f 72 64 20 74 6f 20 66 69 67 75 72 65 0a  ecord to figure.
16470 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d 75 63    ** out how muc
16480 68 20 73 70 61 63 65 20 69 73 20 72 65 71 75 69  h space is requi
16490 72 65 64 20 66 6f 72 20 74 68 65 20 6e 65 77 20  red for the new 
164a0 72 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20 70  record..  */.  p
164b0 52 65 63 20 3d 20 70 4c 61 73 74 3b 0a 20 20 64  Rec = pLast;.  d
164c0 6f 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  o{.    assert( m
164d0 65 6d 49 73 56 61 6c 69 64 28 70 52 65 63 29 20  emIsValid(pRec) 
164e0 29 3b 0a 20 20 20 20 70 52 65 63 2d 3e 75 54 65  );.    pRec->uTe
164f0 6d 70 20 3d 20 73 65 72 69 61 6c 5f 74 79 70 65  mp = serial_type
16500 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65   = sqlite3VdbeSe
16510 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66  rialType(pRec, f
16520 69 6c 65 5f 66 6f 72 6d 61 74 2c 20 26 6c 65 6e  ile_format, &len
16530 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d  );.    if( pRec-
16540 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72  >flags & MEM_Zer
16550 6f 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e  o ){.      if( n
16560 44 61 74 61 20 29 7b 0a 20 20 20 20 20 20 20 20  Data ){.        
16570 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
16580 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 52 65  emExpandBlob(pRe
16590 63 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  c) ) goto no_mem
165a0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
165b0 20 20 20 20 20 20 20 6e 5a 65 72 6f 20 2b 3d 20         nZero += 
165c0 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20  pRec->u.nZero;. 
165d0 20 20 20 20 20 20 20 6c 65 6e 20 2d 3d 20 70 52         len -= pR
165e0 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20  ec->u.nZero;.   
165f0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 6e     }.    }.    n
16600 44 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20  Data += len;.   
16610 20 74 65 73 74 63 61 73 65 28 20 73 65 72 69 61   testcase( seria
16620 6c 5f 74 79 70 65 3d 3d 31 32 37 20 29 3b 0a 20  l_type==127 );. 
16630 20 20 20 74 65 73 74 63 61 73 65 28 20 73 65 72     testcase( ser
16640 69 61 6c 5f 74 79 70 65 3d 3d 31 32 38 20 29 3b  ial_type==128 );
16650 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 73 65 72  .    nHdr += ser
16660 69 61 6c 5f 74 79 70 65 3c 3d 31 32 37 20 3f 20  ial_type<=127 ? 
16670 31 20 3a 20 73 71 6c 69 74 65 33 56 61 72 69 6e  1 : sqlite3Varin
16680 74 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65  tLen(serial_type
16690 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63 3d  );.    if( pRec=
166a0 3d 70 44 61 74 61 30 20 29 20 62 72 65 61 6b 3b  =pData0 ) break;
166b0 0a 20 20 20 20 70 52 65 63 2d 2d 3b 0a 20 20 7d  .    pRec--;.  }
166c0 77 68 69 6c 65 28 31 29 3b 0a 0a 20 20 2f 2a 20  while(1);..  /* 
166d0 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32  EVIDENCE-OF: R-2
166e0 32 35 36 34 2d 31 31 36 34 37 20 54 68 65 20 68  2564-11647 The h
166f0 65 61 64 65 72 20 62 65 67 69 6e 73 20 77 69 74  eader begins wit
16700 68 20 61 20 73 69 6e 67 6c 65 20 76 61 72 69 6e  h a single varin
16710 74 0a 20 20 2a 2a 20 77 68 69 63 68 20 64 65 74  t.  ** which det
16720 65 72 6d 69 6e 65 73 20 74 68 65 20 74 6f 74 61  ermines the tota
16730 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  l number of byte
16740 73 20 69 6e 20 74 68 65 20 68 65 61 64 65 72 2e  s in the header.
16750 20 54 68 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a   The varint.  **
16760 20 76 61 6c 75 65 20 69 73 20 74 68 65 20 73 69   value is the si
16770 7a 65 20 6f 66 20 74 68 65 20 68 65 61 64 65 72  ze of the header
16780 20 69 6e 20 62 79 74 65 73 20 69 6e 63 6c 75 64   in bytes includ
16790 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76 61 72  ing the size var
167a0 69 6e 74 0a 20 20 2a 2a 20 69 74 73 65 6c 66 2e  int.  ** itself.
167b0 20 2a 2f 0a 20 20 74 65 73 74 63 61 73 65 28 20   */.  testcase( 
167c0 6e 48 64 72 3d 3d 31 32 36 20 29 3b 0a 20 20 74  nHdr==126 );.  t
167d0 65 73 74 63 61 73 65 28 20 6e 48 64 72 3d 3d 31  estcase( nHdr==1
167e0 32 37 20 29 3b 0a 20 20 69 66 28 20 6e 48 64 72  27 );.  if( nHdr
167f0 3c 3d 31 32 36 20 29 7b 0a 20 20 20 20 2f 2a 20  <=126 ){.    /* 
16800 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20  The common case 
16810 2a 2f 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 31  */.    nHdr += 1
16820 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  ;.  }else{.    /
16830 2a 20 52 61 72 65 20 63 61 73 65 20 6f 66 20 61  * Rare case of a
16840 20 72 65 61 6c 6c 79 20 6c 61 72 67 65 20 68 65   really large he
16850 61 64 65 72 20 2a 2f 0a 20 20 20 20 6e 56 61 72  ader */.    nVar
16860 69 6e 74 20 3d 20 73 71 6c 69 74 65 33 56 61 72  int = sqlite3Var
16870 69 6e 74 4c 65 6e 28 6e 48 64 72 29 3b 0a 20 20  intLen(nHdr);.  
16880 20 20 6e 48 64 72 20 2b 3d 20 6e 56 61 72 69 6e    nHdr += nVarin
16890 74 3b 0a 20 20 20 20 69 66 28 20 6e 56 61 72 69  t;.    if( nVari
168a0 6e 74 3c 73 71 6c 69 74 65 33 56 61 72 69 6e 74  nt<sqlite3Varint
168b0 4c 65 6e 28 6e 48 64 72 29 20 29 20 6e 48 64 72  Len(nHdr) ) nHdr
168c0 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79 74 65 20  ++;.  }.  nByte 
168d0 3d 20 6e 48 64 72 2b 6e 44 61 74 61 3b 0a 20 20  = nHdr+nData;.  
168e0 69 66 28 20 6e 42 79 74 65 2b 6e 5a 65 72 6f 3e  if( nByte+nZero>
168f0 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
16900 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
16910 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
16920 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d  big;.  }..  /* M
16930 61 6b 65 20 73 75 72 65 20 74 68 65 20 6f 75 74  ake sure the out
16940 70 75 74 20 72 65 67 69 73 74 65 72 20 68 61 73  put register has
16950 20 61 20 62 75 66 66 65 72 20 6c 61 72 67 65 20   a buffer large 
16960 65 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72 65 20  enough to store 
16970 0a 20 20 2a 2a 20 74 68 65 20 6e 65 77 20 72 65  .  ** the new re
16980 63 6f 72 64 2e 20 54 68 65 20 6f 75 74 70 75 74  cord. The output
16990 20 72 65 67 69 73 74 65 72 20 28 70 4f 70 2d 3e   register (pOp->
169a0 70 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77  p3) is not allow
169b0 65 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e  ed to.  ** be on
169c0 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74 20 72  e of the input r
169d0 65 67 69 73 74 65 72 73 20 28 62 65 63 61 75 73  egisters (becaus
169e0 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  e the following 
169f0 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c  call to.  ** sql
16a00 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72  ite3VdbeMemClear
16a10 41 6e 64 52 65 73 69 7a 65 28 29 20 63 6f 75 6c  AndResize() coul
16a20 64 20 63 6c 6f 62 62 65 72 20 74 68 65 20 76 61  d clobber the va
16a30 6c 75 65 20 62 65 66 6f 72 65 20 69 74 20 69 73  lue before it is
16a40 20 75 73 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 69   used)..  */.  i
16a50 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
16a60 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28  mClearAndResize(
16a70 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65  pOut, (int)nByte
16a80 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  ) ){.    goto no
16a90 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65 77  _mem;.  }.  zNew
16aa0 52 65 63 6f 72 64 20 3d 20 28 75 38 20 2a 29 70  Record = (u8 *)p
16ab0 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57 72  Out->z;..  /* Wr
16ac0 69 74 65 20 74 68 65 20 72 65 63 6f 72 64 20 2a  ite the record *
16ad0 2f 0a 20 20 69 20 3d 20 70 75 74 56 61 72 69 6e  /.  i = putVarin
16ae0 74 33 32 28 7a 4e 65 77 52 65 63 6f 72 64 2c 20  t32(zNewRecord, 
16af0 6e 48 64 72 29 3b 0a 20 20 6a 20 3d 20 6e 48 64  nHdr);.  j = nHd
16b00 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 61  r;.  assert( pDa
16b10 74 61 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20  ta0<=pLast );.  
16b20 70 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20  pRec = pData0;. 
16b30 20 64 6f 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f   do{.    serial_
16b40 74 79 70 65 20 3d 20 70 52 65 63 2d 3e 75 54 65  type = pRec->uTe
16b50 6d 70 3b 0a 20 20 20 20 2f 2a 20 45 56 49 44 45  mp;.    /* EVIDE
16b60 4e 43 45 2d 4f 46 3a 20 52 2d 30 36 35 32 39 2d  NCE-OF: R-06529-
16b70 34 37 33 36 32 20 46 6f 6c 6c 6f 77 69 6e 67 20  47362 Following 
16b80 74 68 65 20 73 69 7a 65 20 76 61 72 69 6e 74 20  the size varint 
16b90 61 72 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a  are one or more.
16ba0 20 20 20 20 2a 2a 20 61 64 64 69 74 69 6f 6e 61      ** additiona
16bb0 6c 20 76 61 72 69 6e 74 73 2c 20 6f 6e 65 20 70  l varints, one p
16bc0 65 72 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20  er column. */.  
16bd0 20 20 69 20 2b 3d 20 70 75 74 56 61 72 69 6e 74    i += putVarint
16be0 33 32 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69  32(&zNewRecord[i
16bf0 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b  ], serial_type);
16c00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
16c10 65 72 69 61 6c 20 74 79 70 65 20 2a 2f 0a 20 20  erial type */.  
16c20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46    /* EVIDENCE-OF
16c30 3a 20 52 2d 36 34 35 33 36 2d 35 31 37 32 38 20  : R-64536-51728 
16c40 54 68 65 20 76 61 6c 75 65 73 20 66 6f 72 20 65  The values for e
16c50 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  ach column in th
16c60 65 20 72 65 63 6f 72 64 0a 20 20 20 20 2a 2a 20  e record.    ** 
16c70 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c  immediately foll
16c80 6f 77 20 74 68 65 20 68 65 61 64 65 72 2e 20 2a  ow the header. *
16c90 2f 0a 20 20 20 20 6a 20 2b 3d 20 73 71 6c 69 74  /.    j += sqlit
16ca0 65 33 56 64 62 65 53 65 72 69 61 6c 50 75 74 28  e3VdbeSerialPut(
16cb0 26 7a 4e 65 77 52 65 63 6f 72 64 5b 6a 5d 2c 20  &zNewRecord[j], 
16cc0 70 52 65 63 2c 20 73 65 72 69 61 6c 5f 74 79 70  pRec, serial_typ
16cd0 65 29 3b 20 2f 2a 20 63 6f 6e 74 65 6e 74 20 2a  e); /* content *
16ce0 2f 0a 20 20 7d 77 68 69 6c 65 28 20 28 2b 2b 70  /.  }while( (++p
16cf0 52 65 63 29 3c 3d 70 4c 61 73 74 20 29 3b 0a 20  Rec)<=pLast );. 
16d00 20 61 73 73 65 72 74 28 20 69 3d 3d 6e 48 64 72   assert( i==nHdr
16d10 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6a 3d   );.  assert( j=
16d20 3d 6e 42 79 74 65 20 29 3b 0a 0a 20 20 61 73 73  =nByte );..  ass
16d30 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
16d40 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  & pOp->p3<=(p->n
16d50 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
16d60 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e  or) );.  pOut->n
16d70 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20   = (int)nByte;. 
16d80 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
16d90 45 4d 5f 42 6c 6f 62 3b 0a 20 20 69 66 28 20 6e  EM_Blob;.  if( n
16da0 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70 4f 75 74  Zero ){.    pOut
16db0 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a 65 72  ->u.nZero = nZer
16dc0 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  o;.    pOut->fla
16dd0 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b 0a  gs |= MEM_Zero;.
16de0 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20    }.  pOut->enc 
16df0 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 20 20  = SQLITE_UTF8;  
16e00 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65 20 62  /* In case the b
16e10 6c 6f 62 20 69 73 20 65 76 65 72 20 63 6f 6e 76  lob is ever conv
16e20 65 72 74 65 64 20 74 6f 20 74 65 78 74 20 2a 2f  erted to text */
16e30 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
16e40 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29  E(pOp->p3, pOut)
16e50 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
16e60 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
16e70 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
16e80 63 6f 64 65 3a 20 43 6f 75 6e 74 20 50 31 20 50  code: Count P1 P
16e90 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
16ea0 73 69 73 3a 20 72 5b 50 32 5d 3d 63 6f 75 6e 74  sis: r[P2]=count
16eb0 28 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74  ().**.** Store t
16ec0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74  he number of ent
16ed0 72 69 65 73 20 28 61 6e 20 69 6e 74 65 67 65 72  ries (an integer
16ee0 20 76 61 6c 75 65 29 20 69 6e 20 74 68 65 20 74   value) in the t
16ef0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 0a 2a  able or index .*
16f00 2a 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73  * opened by curs
16f10 6f 72 20 50 31 20 69 6e 20 72 65 67 69 73 74 65  or P1 in registe
16f20 72 20 50 32 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  r P2.*/.#ifndef 
16f30 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45  SQLITE_OMIT_BTRE
16f40 45 43 4f 55 4e 54 0a 63 61 73 65 20 4f 50 5f 43  ECOUNT.case OP_C
16f50 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ount: {         
16f60 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 36 34  /* out2 */.  i64
16f70 20 6e 45 6e 74 72 79 3b 0a 20 20 42 74 43 75 72   nEntry;.  BtCur
16f80 73 6f 72 20 2a 70 43 72 73 72 3b 0a 0a 20 20 61  sor *pCrsr;..  a
16f90 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b  ssert( p->apCsr[
16fa0 70 4f 70 2d 3e 70 31 5d 2d 3e 65 43 75 72 54 79  pOp->p1]->eCurTy
16fb0 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
16fc0 45 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  E );.  pCrsr = p
16fd0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
16fe0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20  ->uc.pCursor;.  
16ff0 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b  assert( pCrsr );
17000 0a 20 20 6e 45 6e 74 72 79 20 3d 20 30 3b 20 20  .  nEntry = 0;  
17010 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
17020 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c  Only used to sil
17030 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20  ence a warning. 
17040 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
17050 33 42 74 72 65 65 43 6f 75 6e 74 28 70 43 72 73  3BtreeCount(pCrs
17060 72 2c 20 26 6e 45 6e 74 72 79 29 3b 0a 20 20 69  r, &nEntry);.  i
17070 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
17080 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
17090 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
170a0 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
170b0 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
170c0 6e 45 6e 74 72 79 3b 0a 20 20 62 72 65 61 6b 3b  nEntry;.  break;
170d0 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70  .}.#endif../* Op
170e0 63 6f 64 65 3a 20 53 61 76 65 70 6f 69 6e 74 20  code: Savepoint 
170f0 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
17100 2a 20 4f 70 65 6e 2c 20 72 65 6c 65 61 73 65 20  * Open, release 
17110 6f 72 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20  or rollback the 
17120 73 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 64 20  savepoint named 
17130 62 79 20 70 61 72 61 6d 65 74 65 72 20 50 34 2c  by parameter P4,
17140 20 64 65 70 65 6e 64 69 6e 67 0a 2a 2a 20 6f 6e   depending.** on
17150 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50 31   the value of P1
17160 2e 20 54 6f 20 6f 70 65 6e 20 61 20 6e 65 77 20  . To open a new 
17170 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 30  savepoint, P1==0
17180 2e 20 54 6f 20 72 65 6c 65 61 73 65 20 28 63 6f  . To release (co
17190 6d 6d 69 74 29 20 61 6e 0a 2a 2a 20 65 78 69 73  mmit) an.** exis
171a0 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 2c 20  ting savepoint, 
171b0 50 31 3d 3d 31 2c 20 6f 72 20 74 6f 20 72 6f 6c  P1==1, or to rol
171c0 6c 62 61 63 6b 20 61 6e 20 65 78 69 73 74 69 6e  lback an existin
171d0 67 20 73 61 76 65 70 6f 69 6e 74 20 50 31 3d 3d  g savepoint P1==
171e0 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 61  2..*/.case OP_Sa
171f0 76 65 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74  vepoint: {.  int
17200 20 70 31 3b 20 20 20 20 20 20 20 20 20 20 20 20   p1;            
17210 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
17220 56 61 6c 75 65 20 6f 66 20 50 31 20 6f 70 65 72  Value of P1 oper
17230 61 6e 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  and */.  char *z
17240 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
17250 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
17260 20 6f 66 20 73 61 76 65 70 6f 69 6e 74 20 2a 2f   of savepoint */
17270 0a 20 20 69 6e 74 20 6e 4e 61 6d 65 3b 0a 20 20  .  int nName;.  
17280 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 77 3b  Savepoint *pNew;
17290 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 53  .  Savepoint *pS
172a0 61 76 65 70 6f 69 6e 74 3b 0a 20 20 53 61 76 65  avepoint;.  Save
172b0 70 6f 69 6e 74 20 2a 70 54 6d 70 3b 0a 20 20 69  point *pTmp;.  i
172c0 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 0a 20  nt iSavepoint;. 
172d0 20 69 6e 74 20 69 69 3b 0a 0a 20 20 70 31 20 3d   int ii;..  p1 =
172e0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 4e 61 6d   pOp->p1;.  zNam
172f0 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a  e = pOp->p4.z;..
17300 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
17310 20 74 68 65 20 70 31 20 70 61 72 61 6d 65 74 65   the p1 paramete
17320 72 20 69 73 20 76 61 6c 69 64 2e 20 41 6c 73 6f  r is valid. Also
17330 20 74 68 61 74 20 69 66 20 74 68 65 72 65 20 69   that if there i
17340 73 20 6e 6f 20 6f 70 65 6e 0a 20 20 2a 2a 20 74  s no open.  ** t
17350 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e  ransaction, then
17360 20 74 68 65 72 65 20 63 61 6e 6e 6f 74 20 62 65   there cannot be
17370 20 61 6e 79 20 73 61 76 65 70 6f 69 6e 74 73 2e   any savepoints.
17380 20 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28   .  */.  assert(
17390 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3d   db->pSavepoint=
173a0 3d 30 20 7c 7c 20 64 62 2d 3e 61 75 74 6f 43 6f  =0 || db->autoCo
173b0 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73  mmit==0 );.  ass
173c0 65 72 74 28 20 70 31 3d 3d 53 41 56 45 50 4f 49  ert( p1==SAVEPOI
173d0 4e 54 5f 42 45 47 49 4e 7c 7c 70 31 3d 3d 53 41  NT_BEGIN||p1==SA
173e0 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 7c  VEPOINT_RELEASE|
173f0 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52  |p1==SAVEPOINT_R
17400 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20 20 61 73 73  OLLBACK );.  ass
17410 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f  ert( db->pSavepo
17420 69 6e 74 20 7c 7c 20 64 62 2d 3e 69 73 54 72 61  int || db->isTra
17430 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
17440 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  t==0 );.  assert
17450 28 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74  ( checkSavepoint
17460 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a 20 20 61  Count(db) );.  a
17470 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
17480 64 65 72 20 29 3b 0a 0a 20 20 69 66 28 20 70 31  der );..  if( p1
17490 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49  ==SAVEPOINT_BEGI
174a0 4e 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d  N ){.    if( db-
174b0 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20 29 7b  >nVdbeWrite>0 ){
174c0 0a 20 20 20 20 20 20 2f 2a 20 41 20 6e 65 77 20  .      /* A new 
174d0 73 61 76 65 70 6f 69 6e 74 20 63 61 6e 6e 6f 74  savepoint cannot
174e0 20 62 65 20 63 72 65 61 74 65 64 20 69 66 20 74   be created if t
174f0 68 65 72 65 20 61 72 65 20 61 63 74 69 76 65 20  here are active 
17500 77 72 69 74 65 20 0a 20 20 20 20 20 20 2a 2a 20  write .      ** 
17510 73 74 61 74 65 6d 65 6e 74 73 20 28 69 2e 65 2e  statements (i.e.
17520 20 6f 70 65 6e 20 72 65 61 64 2f 77 72 69 74 65   open read/write
17530 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 62 6c 6f   incremental blo
17540 62 20 68 61 6e 64 6c 65 73 29 2e 0a 20 20 20 20  b handles)..    
17550 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74    */.      sqlit
17560 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22  e3VdbeError(p, "
17570 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 73 61 76 65  cannot open save
17580 70 6f 69 6e 74 20 2d 20 53 51 4c 20 73 74 61 74  point - SQL stat
17590 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65  ements in progre
175a0 73 73 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  ss");.      rc =
175b0 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
175c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e    }else{.      n
175d0 4e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 53 74  Name = sqlite3St
175e0 72 6c 65 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a 0a  rlen30(zName);..
175f0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
17600 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
17610 0a 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 63  .      /* This c
17620 61 6c 6c 20 69 73 20 4f 6b 20 65 76 65 6e 20 69  all is Ok even i
17630 66 20 74 68 69 73 20 73 61 76 65 70 6f 69 6e 74  f this savepoint
17640 20 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20 74   is actually a t
17650 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20 20 20 20  ransaction.     
17660 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 20 28 61   ** savepoint (a
17670 6e 64 20 74 68 65 72 65 66 6f 72 65 20 73 68 6f  nd therefore sho
17680 75 6c 64 20 6e 6f 74 20 70 72 6f 6d 70 74 20 78  uld not prompt x
17690 53 61 76 65 70 6f 69 6e 74 28 29 29 20 63 61 6c  Savepoint()) cal
176a0 6c 62 61 63 6b 73 2e 0a 20 20 20 20 20 20 2a 2a  lbacks..      **
176b0 20 49 66 20 74 68 69 73 20 69 73 20 61 20 74 72   If this is a tr
176c0 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f  ansaction savepo
176d0 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 6e 65 64  int being opened
176e0 2c 20 69 74 20 69 73 20 67 75 61 72 61 6e 74 65  , it is guarante
176f0 65 64 0a 20 20 20 20 20 20 2a 2a 20 74 68 61 74  ed.      ** that
17700 20 74 68 65 20 64 62 2d 3e 61 56 54 72 61 6e 73   the db->aVTrans
17710 5b 5d 20 61 72 72 61 79 20 69 73 20 65 6d 70 74  [] array is empt
17720 79 2e 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  y.  */.      ass
17730 65 72 74 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d  ert( db->autoCom
17740 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56  mit==0 || db->nV
17750 54 72 61 6e 73 3d 3d 30 20 29 3b 0a 20 20 20 20  Trans==0 );.    
17760 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
17770 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20  abSavepoint(db, 
17780 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c  SAVEPOINT_BEGIN,
17790 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
177a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177b0 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b   db->nStatement+
177c0 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 29 3b  db->nSavepoint);
177d0 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
177e0 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
177f0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
17800 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20  or;.#endif..    
17810 20 20 2f 2a 20 43 72 65 61 74 65 20 61 20 6e 65    /* Create a ne
17820 77 20 73 61 76 65 70 6f 69 6e 74 20 73 74 72 75  w savepoint stru
17830 63 74 75 72 65 2e 20 2a 2f 0a 20 20 20 20 20 20  cture. */.      
17840 70 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 44 62  pNew = sqlite3Db
17850 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 64 62 2c 20  MallocRawNN(db, 
17860 73 69 7a 65 6f 66 28 53 61 76 65 70 6f 69 6e 74  sizeof(Savepoint
17870 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20  )+nName+1);.    
17880 20 20 69 66 28 20 70 4e 65 77 20 29 7b 0a 20 20    if( pNew ){.  
17890 20 20 20 20 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d        pNew->zNam
178a0 65 20 3d 20 28 63 68 61 72 20 2a 29 26 70 4e 65  e = (char *)&pNe
178b0 77 5b 31 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65  w[1];.        me
178c0 6d 63 70 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65  mcpy(pNew->zName
178d0 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31  , zName, nName+1
178e0 29 3b 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20  );.    .        
178f0 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6e  /* If there is n
17900 6f 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69  o open transacti
17910 6f 6e 2c 20 74 68 65 6e 20 6d 61 72 6b 20 74 68  on, then mark th
17920 69 73 20 61 73 20 61 20 73 70 65 63 69 61 6c 0a  is as a special.
17930 20 20 20 20 20 20 20 20 2a 2a 20 22 74 72 61 6e          ** "tran
17940 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e  saction savepoin
17950 74 22 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  t". */.        i
17960 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  f( db->autoCommi
17970 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64  t ){.          d
17980 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
17990 30 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  0;.          db-
179a0 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
179b0 76 65 70 6f 69 6e 74 20 3d 20 31 3b 0a 20 20 20  vepoint = 1;.   
179c0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
179d0 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70        db->nSavep
179e0 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20  oint++;.        
179f0 7d 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  }..        /* Li
17a00 6e 6b 20 74 68 65 20 6e 65 77 20 73 61 76 65 70  nk the new savep
17a10 6f 69 6e 74 20 69 6e 74 6f 20 74 68 65 20 64 61  oint into the da
17a20 74 61 62 61 73 65 20 68 61 6e 64 6c 65 27 73 20  tabase handle's 
17a30 6c 69 73 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20  list. */.       
17a40 20 70 4e 65 77 2d 3e 70 4e 65 78 74 20 3d 20 64   pNew->pNext = d
17a50 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20  b->pSavepoint;. 
17a60 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65         db->pSave
17a70 70 6f 69 6e 74 20 3d 20 70 4e 65 77 3b 0a 20 20  point = pNew;.  
17a80 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66        pNew->nDef
17a90 65 72 72 65 64 43 6f 6e 73 20 3d 20 64 62 2d 3e  erredCons = db->
17aa0 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20  nDeferredCons;. 
17ab0 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65         pNew->nDe
17ac0 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20  ferredImmCons = 
17ad0 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
17ae0 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Cons;.      }.  
17af0 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
17b00 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b   iSavepoint = 0;
17b10 0a 0a 20 20 20 20 2f 2a 20 46 69 6e 64 20 74 68  ..    /* Find th
17b20 65 20 6e 61 6d 65 64 20 73 61 76 65 70 6f 69 6e  e named savepoin
17b30 74 2e 20 49 66 20 74 68 65 72 65 20 69 73 20 6e  t. If there is n
17b40 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74  o such savepoint
17b50 2c 20 74 68 65 6e 20 61 6e 0a 20 20 20 20 2a 2a  , then an.    **
17b60 20 61 6e 20 65 72 72 6f 72 20 69 73 20 72 65 74   an error is ret
17b70 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73 65  urned to the use
17b80 72 2e 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28 0a  r.  */.    for(.
17b90 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74        pSavepoint
17ba0 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e   = db->pSavepoin
17bb0 74 3b 20 0a 20 20 20 20 20 20 70 53 61 76 65 70  t; .      pSavep
17bc0 6f 69 6e 74 20 26 26 20 73 71 6c 69 74 65 33 53  oint && sqlite3S
17bd0 74 72 49 43 6d 70 28 70 53 61 76 65 70 6f 69 6e  trICmp(pSavepoin
17be0 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 29  t->zName, zName)
17bf0 3b 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69  ;.      pSavepoi
17c00 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d  nt = pSavepoint-
17c10 3e 70 4e 65 78 74 0a 20 20 20 20 29 7b 0a 20 20  >pNext.    ){.  
17c20 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 2b 2b      iSavepoint++
17c30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
17c40 21 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20  !pSavepoint ){. 
17c50 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
17c60 45 72 72 6f 72 28 70 2c 20 22 6e 6f 20 73 75 63  Error(p, "no suc
17c70 68 20 73 61 76 65 70 6f 69 6e 74 3a 20 25 73 22  h savepoint: %s"
17c80 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  , zName);.      
17c90 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
17ca0 52 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  R;.    }else if(
17cb0 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e   db->nVdbeWrite>
17cc0 30 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49  0 && p1==SAVEPOI
17cd0 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20  NT_RELEASE ){.  
17ce0 20 20 20 20 2f 2a 20 49 74 20 69 73 20 6e 6f 74      /* It is not
17cf0 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 72 65 6c   possible to rel
17d00 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 20  ease (commit) a 
17d10 73 61 76 65 70 6f 69 6e 74 20 69 66 20 74 68 65  savepoint if the
17d20 72 65 20 61 72 65 20 0a 20 20 20 20 20 20 2a 2a  re are .      **
17d30 20 61 63 74 69 76 65 20 77 72 69 74 65 20 73 74   active write st
17d40 61 74 65 6d 65 6e 74 73 2e 0a 20 20 20 20 20 20  atements..      
17d50 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  */.      sqlite3
17d60 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 63 61  VdbeError(p, "ca
17d70 6e 6e 6f 74 20 72 65 6c 65 61 73 65 20 73 61 76  nnot release sav
17d80 65 70 6f 69 6e 74 20 2d 20 22 0a 20 20 20 20 20  epoint - ".     
17d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17da0 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d       "SQL statem
17db0 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73  ents in progress
17dc0 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53  ");.      rc = S
17dd0 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
17de0 7d 65 6c 73 65 7b 0a 0a 20 20 20 20 20 20 2f 2a  }else{..      /*
17df0 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68   Determine wheth
17e00 65 72 20 6f 72 20 6e 6f 74 20 74 68 69 73 20 69  er or not this i
17e10 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  s a transaction 
17e20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 73 6f  savepoint. If so
17e30 2c 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 74  ,.      ** and t
17e40 68 69 73 20 69 73 20 61 20 52 45 4c 45 41 53 45  his is a RELEASE
17e50 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e 20 74   command, then t
17e60 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73  he current trans
17e70 61 63 74 69 6f 6e 20 0a 20 20 20 20 20 20 2a 2a  action .      **
17e80 20 69 73 20 63 6f 6d 6d 69 74 74 65 64 2e 20 0a   is committed. .
17e90 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
17ea0 6e 74 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  nt isTransaction
17eb0 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70   = pSavepoint->p
17ec0 4e 65 78 74 3d 3d 30 20 26 26 20 64 62 2d 3e 69  Next==0 && db->i
17ed0 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
17ee0 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 69 66 28  point;.      if(
17ef0 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 26   isTransaction &
17f00 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  & p1==SAVEPOINT_
17f10 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20  RELEASE ){.     
17f20 20 20 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c     if( (rc = sql
17f30 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28  ite3VdbeCheckFk(
17f40 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f  p, 1))!=SQLITE_O
17f50 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67  K ){.          g
17f60 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
17f70 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
17f80 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
17f90 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69  t = 1;.        i
17fa0 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 48 61  f( sqlite3VdbeHa
17fb0 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55  lt(p)==SQLITE_BU
17fc0 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  SY ){.          
17fd0 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f  p->pc = (int)(pO
17fe0 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20 20  p - aOp);.      
17ff0 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
18000 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  it = 0;.        
18010 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53    p->rc = rc = S
18020 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
18030 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
18040 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20  return;.        
18050 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73  }.        db->is
18060 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
18070 6f 69 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20  oint = 0;.      
18080 20 20 72 63 20 3d 20 70 2d 3e 72 63 3b 0a 20 20    rc = p->rc;.  
18090 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
180a0 20 20 20 69 6e 74 20 69 73 53 63 68 65 6d 61 43     int isSchemaC
180b0 68 61 6e 67 65 3b 0a 20 20 20 20 20 20 20 20 69  hange;.        i
180c0 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e  Savepoint = db->
180d0 6e 53 61 76 65 70 6f 69 6e 74 20 2d 20 69 53 61  nSavepoint - iSa
180e0 76 65 70 6f 69 6e 74 20 2d 20 31 3b 0a 20 20 20  vepoint - 1;.   
180f0 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56       if( p1==SAV
18100 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
18110 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 73 53  ){.          isS
18120 63 68 65 6d 61 43 68 61 6e 67 65 20 3d 20 28 64  chemaChange = (d
18130 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
18140 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29  E_InternChanges)
18150 21 3d 30 3b 0a 20 20 20 20 20 20 20 20 20 20 66  !=0;.          f
18160 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e  or(ii=0; ii<db->
18170 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20  nDb; ii++){.    
18180 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
18190 69 74 65 33 42 74 72 65 65 54 72 69 70 41 6c 6c  ite3BtreeTripAll
181a0 43 75 72 73 6f 72 73 28 64 62 2d 3e 61 44 62 5b  Cursors(db->aDb[
181b0 69 69 5d 2e 70 42 74 2c 0a 20 20 20 20 20 20 20  ii].pBt,.       
181c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181e0 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c  SQLITE_ABORT_ROL
181f0 4c 42 41 43 4b 2c 0a 20 20 20 20 20 20 20 20 20  LBACK,.         
18200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 73                is
18220 53 63 68 65 6d 61 43 68 61 6e 67 65 3d 3d 30 29  SchemaChange==0)
18230 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ;.            if
18240 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
18250 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
18260 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
18270 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
18280 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
18290 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 20 3d  isSchemaChange =
182a0 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   0;.        }.  
182b0 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20        for(ii=0; 
182c0 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b  ii<db->nDb; ii++
182d0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20  ){.          rc 
182e0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 61  = sqlite3BtreeSa
182f0 76 65 70 6f 69 6e 74 28 64 62 2d 3e 61 44 62 5b  vepoint(db->aDb[
18300 69 69 5d 2e 70 42 74 2c 20 70 31 2c 20 69 53 61  ii].pBt, p1, iSa
18310 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20  vepoint);.      
18320 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
18330 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
18340 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
18350 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
18360 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
18370 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20    }.        if( 
18380 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 20 29  isSchemaChange )
18390 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
183a0 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65  te3ExpirePrepare
183b0 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b  dStatements(db);
183c0 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
183d0 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61  e3ResetAllSchema
183e0 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62  sOfConnection(db
183f0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  );.          db-
18400 3e 66 6c 61 67 73 20 3d 20 28 64 62 2d 3e 66 6c  >flags = (db->fl
18410 61 67 73 20 7c 20 53 51 4c 49 54 45 5f 49 6e 74  ags | SQLITE_Int
18420 65 72 6e 43 68 61 6e 67 65 73 29 3b 0a 20 20 20  ernChanges);.   
18430 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
18440 20 0a 20 20 20 20 20 20 2f 2a 20 52 65 67 61 72   .      /* Regar
18450 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72  dless of whether
18460 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45 41   this is a RELEA
18470 53 45 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20  SE or ROLLBACK, 
18480 64 65 73 74 72 6f 79 20 61 6c 6c 20 0a 20 20 20  destroy all .   
18490 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 73     ** savepoints
184a0 20 6e 65 73 74 65 64 20 69 6e 73 69 64 65 20 6f   nested inside o
184b0 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  f the savepoint 
184c0 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f  being operated o
184d0 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 77 68 69 6c  n. */.      whil
184e0 65 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e  e( db->pSavepoin
184f0 74 21 3d 70 53 61 76 65 70 6f 69 6e 74 20 29 7b  t!=pSavepoint ){
18500 0a 20 20 20 20 20 20 20 20 70 54 6d 70 20 3d 20  .        pTmp = 
18510 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a  db->pSavepoint;.
18520 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76          db->pSav
18530 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70 2d 3e 70  epoint = pTmp->p
18540 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71  Next;.        sq
18550 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
18560 70 54 6d 70 29 3b 0a 20 20 20 20 20 20 20 20 64  pTmp);.        d
18570 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b  b->nSavepoint--;
18580 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
18590 2f 2a 20 49 66 20 69 74 20 69 73 20 61 20 52 45  /* If it is a RE
185a0 4c 45 41 53 45 2c 20 74 68 65 6e 20 64 65 73 74  LEASE, then dest
185b0 72 6f 79 20 74 68 65 20 73 61 76 65 70 6f 69 6e  roy the savepoin
185c0 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64  t being operated
185d0 20 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 74 6f   on .      ** to
185e0 6f 2e 20 49 66 20 69 74 20 69 73 20 61 20 52 4f  o. If it is a RO
185f0 4c 4c 42 41 43 4b 20 54 4f 2c 20 74 68 65 6e 20  LLBACK TO, then 
18600 73 65 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  set the number o
18610 66 20 64 65 66 65 72 72 65 64 20 0a 20 20 20 20  f deferred .    
18620 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20    ** constraint 
18630 76 69 6f 6c 61 74 69 6f 6e 73 20 70 72 65 73 65  violations prese
18640 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  nt in the databa
18650 73 65 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  se to the value 
18660 73 74 6f 72 65 64 0a 20 20 20 20 20 20 2a 2a 20  stored.      ** 
18670 77 68 65 6e 20 74 68 65 20 73 61 76 65 70 6f 69  when the savepoi
18680 6e 74 20 77 61 73 20 63 72 65 61 74 65 64 2e 20  nt was created. 
18690 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 31   */.      if( p1
186a0 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  ==SAVEPOINT_RELE
186b0 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20 61  ASE ){.        a
186c0 73 73 65 72 74 28 20 70 53 61 76 65 70 6f 69 6e  ssert( pSavepoin
186d0 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e  t==db->pSavepoin
186e0 74 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  t );.        db-
186f0 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53  >pSavepoint = pS
18700 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b  avepoint->pNext;
18710 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
18720 44 62 46 72 65 65 28 64 62 2c 20 70 53 61 76 65  DbFree(db, pSave
18730 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  point);.        
18740 69 66 28 20 21 69 73 54 72 61 6e 73 61 63 74 69  if( !isTransacti
18750 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  on ){.          
18760 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d  db->nSavepoint--
18770 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
18780 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
18790 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
187a0 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d  ns = pSavepoint-
187b0 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a  >nDeferredCons;.
187c0 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66          db->nDef
187d0 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 70  erredImmCons = p
187e0 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65  Savepoint->nDefe
187f0 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20  rredImmCons;.   
18800 20 20 20 7d 0a 0a 20 20 20 20 20 20 69 66 28 20     }..      if( 
18810 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 7c  !isTransaction |
18820 7c 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  | p1==SAVEPOINT_
18830 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20  ROLLBACK ){.    
18840 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
18850 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62  VtabSavepoint(db
18860 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74  , p1, iSavepoint
18870 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
18880 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
18890 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
188a0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
188b0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
188c0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
188d0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20  due_to_error;.. 
188e0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
188f0 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74  code: AutoCommit
18900 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
18910 2a 2a 20 53 65 74 20 74 68 65 20 64 61 74 61 62  ** Set the datab
18920 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20  ase auto-commit 
18930 66 6c 61 67 20 74 6f 20 50 31 20 28 31 20 6f 72  flag to P1 (1 or
18940 20 30 29 2e 20 49 66 20 50 32 20 69 73 20 74 72   0). If P2 is tr
18950 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b  ue, roll.** back
18960 20 61 6e 79 20 63 75 72 72 65 6e 74 6c 79 20 61   any currently a
18970 63 74 69 76 65 20 62 74 72 65 65 20 74 72 61 6e  ctive btree tran
18980 73 61 63 74 69 6f 6e 73 2e 20 49 66 20 74 68 65  sactions. If the
18990 72 65 20 61 72 65 20 61 6e 79 20 61 63 74 69 76  re are any activ
189a0 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72 74 20  e.** VMs (apart 
189b0 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20  from this one), 
189c0 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20  then a ROLLBACK 
189d0 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54  fails.  A COMMIT
189e0 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65   fails if.** the
189f0 72 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72  re are active wr
18a00 69 74 69 6e 67 20 56 4d 73 20 6f 72 20 61 63 74  iting VMs or act
18a10 69 76 65 20 56 4d 73 20 74 68 61 74 20 75 73 65  ive VMs that use
18a20 20 73 68 61 72 65 64 20 63 61 63 68 65 2e 0a 2a   shared cache..*
18a30 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
18a40 63 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65  ction causes the
18a50 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a   VM to halt..*/.
18a60 63 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d  case OP_AutoComm
18a70 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73 69  it: {.  int desi
18a80 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20  redAutoCommit;. 
18a90 20 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a   int iRollback;.
18aa0 0a 20 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  .  desiredAutoCo
18ab0 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  mmit = pOp->p1;.
18ac0 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f    iRollback = pO
18ad0 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
18ae0 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
18af0 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65 64  it==1 || desired
18b00 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b  AutoCommit==0 );
18b10 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72  .  assert( desir
18b20 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20  edAutoCommit==1 
18b30 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20  || iRollback==0 
18b40 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  );.  assert( db-
18b50 3e 6e 56 64 62 65 41 63 74 69 76 65 3e 30 20 29  >nVdbeActive>0 )
18b60 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73 74 20 74  ;  /* At least t
18b70 68 69 73 20 6f 6e 65 20 56 4d 20 69 73 20 61 63  his one VM is ac
18b80 74 69 76 65 20 2a 2f 0a 20 20 61 73 73 65 72 74  tive */.  assert
18b90 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
18ba0 3b 0a 0a 20 20 69 66 28 20 64 65 73 69 72 65 64  ;..  if( desired
18bb0 41 75 74 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e  AutoCommit!=db->
18bc0 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20  autoCommit ){.  
18bd0 20 20 69 66 28 20 69 52 6f 6c 6c 62 61 63 6b 20    if( iRollback 
18be0 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
18bf0 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
18c00 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 73  it==1 );.      s
18c10 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c  qlite3RollbackAl
18c20 6c 28 64 62 2c 20 53 51 4c 49 54 45 5f 41 42 4f  l(db, SQLITE_ABO
18c30 52 54 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20  RT_ROLLBACK);.  
18c40 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
18c50 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73  it = 1;.    }els
18c60 65 20 69 66 28 20 64 65 73 69 72 65 64 41 75 74  e if( desiredAut
18c70 6f 43 6f 6d 6d 69 74 20 26 26 20 64 62 2d 3e 6e  oCommit && db->n
18c80 56 64 62 65 57 72 69 74 65 3e 30 20 29 7b 0a 20  VdbeWrite>0 ){. 
18c90 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20       /* If this 
18ca0 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c  instruction impl
18cb0 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54 20  ements a COMMIT 
18cc0 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72  and other VMs ar
18cd0 65 20 77 72 69 74 69 6e 67 0a 20 20 20 20 20 20  e writing.      
18ce0 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72  ** return an err
18cf0 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68  or indicating th
18d00 61 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73  at the other VMs
18d10 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66   must complete f
18d20 69 72 73 74 2e 20 0a 20 20 20 20 20 20 2a 2f 0a  irst. .      */.
18d30 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
18d40 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f  eError(p, "canno
18d50 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63  t commit transac
18d60 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20 20  tion - ".       
18d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d80 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e     "SQL statemen
18d90 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29  ts in progress")
18da0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
18db0 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20  ITE_BUSY;.      
18dc0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
18dd0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c  o_error;.    }el
18de0 73 65 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c  se if( (rc = sql
18df0 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28  ite3VdbeCheckFk(
18e00 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f  p, 1))!=SQLITE_O
18e10 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  K ){.      goto 
18e20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
18e30 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62   }else{.      db
18e40 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28  ->autoCommit = (
18e50 75 38 29 64 65 73 69 72 65 64 41 75 74 6f 43 6f  u8)desiredAutoCo
18e60 6d 6d 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20  mmit;.    }.    
18e70 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 48  if( sqlite3VdbeH
18e80 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42  alt(p)==SQLITE_B
18e90 55 53 59 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e  USY ){.      p->
18ea0 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d  pc = (int)(pOp -
18eb0 20 61 4f 70 29 3b 0a 20 20 20 20 20 20 64 62 2d   aOp);.      db-
18ec0 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75  >autoCommit = (u
18ed0 38 29 28 31 2d 64 65 73 69 72 65 64 41 75 74 6f  8)(1-desiredAuto
18ee0 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20 20 70  Commit);.      p
18ef0 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49  ->rc = rc = SQLI
18f00 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67  TE_BUSY;.      g
18f10 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
18f20 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72  .    }.    asser
18f30 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e  t( db->nStatemen
18f40 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69  t==0 );.    sqli
18f50 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e  te3CloseSavepoin
18f60 74 73 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20  ts(db);.    if( 
18f70 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  p->rc==SQLITE_OK
18f80 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
18f90 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20  QLITE_DONE;.    
18fa0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20  }else{.      rc 
18fb0 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
18fc0 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76      }.    goto v
18fd0 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65  dbe_return;.  }e
18fe0 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
18ff0 56 64 62 65 45 72 72 6f 72 28 70 2c 0a 20 20 20  VdbeError(p,.   
19000 20 20 20 20 20 28 21 64 65 73 69 72 65 64 41 75       (!desiredAu
19010 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f  toCommit)?"canno
19020 74 20 73 74 61 72 74 20 61 20 74 72 61 6e 73 61  t start a transa
19030 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74  ction within a t
19040 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20  ransaction":(.  
19050 20 20 20 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b        (iRollback
19060 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61  )?"cannot rollba
19070 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74  ck - no transact
19080 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a  ion is active":.
19090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190a0 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69     "cannot commi
190b0 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69  t - no transacti
190c0 6f 6e 20 69 73 20 61 63 74 69 76 65 22 29 29 3b  on is active"));
190d0 0a 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 72  .         .    r
190e0 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
190f0 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  ;.    goto abort
19100 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
19110 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
19120 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e 73 61  * Opcode: Transa
19130 63 74 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50  ction P1 P2 P3 P
19140 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e  4 P5.**.** Begin
19150 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f   a transaction o
19160 6e 20 64 61 74 61 62 61 73 65 20 50 31 20 69 66  n database P1 if
19170 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69   a transaction i
19180 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 0a 2a 2a  s not already.**
19190 20 61 63 74 69 76 65 2e 0a 2a 2a 20 49 66 20 50   active..** If P
191a0 32 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  2 is non-zero, t
191b0 68 65 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e  hen a write-tran
191c0 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74  saction is start
191d0 65 64 2c 20 6f 72 20 69 66 20 61 20 0a 2a 2a 20  ed, or if a .** 
191e0 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e  read-transaction
191f0 20 69 73 20 61 6c 72 65 61 64 79 20 61 63 74 69   is already acti
19200 76 65 2c 20 69 74 20 69 73 20 75 70 67 72 61 64  ve, it is upgrad
19210 65 64 20 74 6f 20 61 20 77 72 69 74 65 2d 74 72  ed to a write-tr
19220 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2a 20 49 66  ansaction..** If
19230 20 50 32 20 69 73 20 7a 65 72 6f 2c 20 74 68 65   P2 is zero, the
19240 6e 20 61 20 72 65 61 64 2d 74 72 61 6e 73 61 63  n a read-transac
19250 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e  tion is started.
19260 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65  .**.** P1 is the
19270 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61   index of the da
19280 74 61 62 61 73 65 20 66 69 6c 65 20 6f 6e 20 77  tabase file on w
19290 68 69 63 68 20 74 68 65 20 74 72 61 6e 73 61 63  hich the transac
192a0 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74  tion is.** start
192b0 65 64 2e 20 20 49 6e 64 65 78 20 30 20 69 73 20  ed.  Index 0 is 
192c0 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
192d0 65 20 66 69 6c 65 20 61 6e 64 20 69 6e 64 65 78  e file and index
192e0 20 31 20 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c   1 is the.** fil
192f0 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f  e used for tempo
19300 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20 49 6e  rary tables.  In
19310 64 69 63 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f  dices of 2 or mo
19320 72 65 20 61 72 65 20 75 73 65 64 20 66 6f 72 0a  re are used for.
19330 2a 2a 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ** attached data
19340 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  bases..**.** If 
19350 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74  a write-transact
19360 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 20 61  ion is started a
19370 6e 64 20 74 68 65 20 56 64 62 65 2e 75 73 65 73  nd the Vdbe.uses
19380 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c 61 67  StmtJournal flag
19390 20 69 73 0a 2a 2a 20 74 72 75 65 20 28 74 68 69   is.** true (thi
193a0 73 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 66  s flag is set if
193b0 20 74 68 65 20 56 64 62 65 20 6d 61 79 20 6d 6f   the Vdbe may mo
193c0 64 69 66 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f  dify more than o
193d0 6e 65 20 72 6f 77 20 61 6e 64 20 6d 61 79 0a 2a  ne row and may.*
193e0 2a 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54  * throw an ABORT
193f0 20 65 78 63 65 70 74 69 6f 6e 29 2c 20 61 20 73   exception), a s
19400 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
19410 74 69 6f 6e 20 6d 61 79 20 61 6c 73 6f 20 62 65  tion may also be
19420 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65   opened..** More
19430 20 73 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 61   specifically, a
19440 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
19450 61 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64  action is opened
19460 20 69 66 66 20 74 68 65 20 64 61 74 61 62 61 73   iff the databas
19470 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  e.** connection 
19480 69 73 20 63 75 72 72 65 6e 74 6c 79 20 6e 6f 74  is currently not
19490 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d   in autocommit m
194a0 6f 64 65 2c 20 6f 72 20 69 66 20 74 68 65 72 65  ode, or if there
194b0 20 61 72 65 20 6f 74 68 65 72 0a 2a 2a 20 61 63   are other.** ac
194c0 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73 2e  tive statements.
194d0 20 41 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   A statement tra
194e0 6e 73 61 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20  nsaction allows 
194f0 74 68 65 20 63 68 61 6e 67 65 73 20 6d 61 64 65  the changes made
19500 20 62 79 20 74 68 69 73 0a 2a 2a 20 56 44 42 45   by this.** VDBE
19510 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
19520 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f  ck after an erro
19530 72 20 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67  r without having
19540 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68   to roll back th
19550 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74 72 61 6e  e.** entire tran
19560 73 61 63 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65  saction. If no e
19570 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65  rror is encounte
19580 72 65 64 2c 20 74 68 65 20 73 74 61 74 65 6d 65  red, the stateme
19590 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a  nt transaction.*
195a0 2a 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63  * will automatic
195b0 61 6c 6c 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e  ally commit when
195c0 20 74 68 65 20 56 44 42 45 20 68 61 6c 74 73 2e   the VDBE halts.
195d0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20  .**.** If P5!=0 
195e0 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  then this opcode
195f0 20 61 6c 73 6f 20 63 68 65 63 6b 73 20 74 68 65   also checks the
19600 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 61   schema cookie a
19610 67 61 69 6e 73 74 20 50 33 0a 2a 2a 20 61 6e 64  gainst P3.** and
19620 20 74 68 65 20 73 63 68 65 6d 61 20 67 65 6e 65   the schema gene
19630 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 61  ration counter a
19640 67 61 69 6e 73 74 20 50 34 2e 0a 2a 2a 20 54 68  gainst P4..** Th
19650 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73  e cookie changes
19660 20 69 74 73 20 76 61 6c 75 65 20 77 68 65 6e 65   its value whene
19670 76 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65  ver the database
19680 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2e   schema changes.
19690 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69  .** This operati
196a0 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 64 65  on is used to de
196b0 74 65 63 74 20 77 68 65 6e 20 74 68 61 74 20 74  tect when that t
196c0 68 65 20 63 6f 6f 6b 69 65 20 68 61 73 20 63 68  he cookie has ch
196d0 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74 68 61  anged.** and tha
196e0 74 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  t the current pr
196f0 6f 63 65 73 73 20 6e 65 65 64 73 20 74 6f 20 72  ocess needs to r
19700 65 72 65 61 64 20 74 68 65 20 73 63 68 65 6d 61  eread the schema
19710 2e 20 20 49 66 20 74 68 65 20 73 63 68 65 6d 61  .  If the schema
19720 0a 2a 2a 20 63 6f 6f 6b 69 65 20 69 6e 20 50 33  .** cookie in P3
19730 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20 74 68   differs from th
19740 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  e schema cookie 
19750 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
19760 68 65 61 64 65 72 20 6f 72 0a 2a 2a 20 69 66 20  header or.** if 
19770 74 68 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72  the schema gener
19780 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 69 6e  ation counter in
19790 20 50 34 20 64 69 66 66 65 72 73 20 66 72 6f 6d   P4 differs from
197a0 20 74 68 65 20 63 75 72 72 65 6e 74 0a 2a 2a 20   the current.** 
197b0 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74  generation count
197c0 65 72 2c 20 74 68 65 6e 20 61 6e 20 53 51 4c 49  er, then an SQLI
197d0 54 45 5f 53 43 48 45 4d 41 20 65 72 72 6f 72 20  TE_SCHEMA error 
197e0 69 73 20 72 61 69 73 65 64 20 61 6e 64 20 65 78  is raised and ex
197f0 65 63 75 74 69 6f 6e 0a 2a 2a 20 68 61 6c 74 73  ecution.** halts
19800 2e 20 20 54 68 65 20 73 71 6c 69 74 65 33 5f 73  .  The sqlite3_s
19810 74 65 70 28 29 20 77 72 61 70 70 65 72 20 66 75  tep() wrapper fu
19820 6e 63 74 69 6f 6e 20 6d 69 67 68 74 20 74 68 65  nction might the
19830 6e 20 72 65 70 72 65 70 61 72 65 20 74 68 65 0a  n reprepare the.
19840 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64  ** statement and
19850 20 72 65 72 75 6e 20 69 74 20 66 72 6f 6d 20 74   rerun it from t
19860 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 2a 2f  he beginning..*/
19870 0a 63 61 73 65 20 4f 50 5f 54 72 61 6e 73 61 63  .case OP_Transac
19880 74 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20  tion: {.  Btree 
19890 2a 70 42 74 3b 0a 20 20 69 6e 74 20 69 4d 65 74  *pBt;.  int iMet
198a0 61 3b 0a 20 20 69 6e 74 20 69 47 65 6e 3b 0a 0a  a;.  int iGen;..
198b0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
198c0 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73 65  Reader );.  asse
198d0 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
198e0 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 30  =0 || pOp->p2==0
198f0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
19900 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
19910 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
19920 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
19930 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
19940 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20  , pOp->p1) );.  
19950 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 28  if( pOp->p2 && (
19960 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
19970 54 45 5f 51 75 65 72 79 4f 6e 6c 79 29 21 3d 30  TE_QueryOnly)!=0
19980 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
19990 49 54 45 5f 52 45 41 44 4f 4e 4c 59 3b 0a 20 20  ITE_READONLY;.  
199a0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
199b0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20  _to_error;.  }. 
199c0 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
199d0 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20  Op->p1].pBt;..  
199e0 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20 72  if( pBt ){.    r
199f0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
19a00 42 65 67 69 6e 54 72 61 6e 73 28 70 42 74 2c 20  BeginTrans(pBt, 
19a10 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20 74 65  pOp->p2);.    te
19a20 73 74 63 61 73 65 28 20 72 63 3d 3d 53 51 4c 49  stcase( rc==SQLI
19a30 54 45 5f 42 55 53 59 5f 53 4e 41 50 53 48 4f 54  TE_BUSY_SNAPSHOT
19a40 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65   );.    testcase
19a50 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
19a60 59 5f 52 45 43 4f 56 45 52 59 20 29 3b 0a 20 20  Y_RECOVERY );.  
19a70 20 20 69 66 28 20 28 72 63 26 30 78 66 66 29 3d    if( (rc&0xff)=
19a80 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
19a90 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69        p->pc = (i
19aa0 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a  nt)(pOp - aOp);.
19ab0 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63        p->rc = rc
19ac0 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62  ;.      goto vdb
19ad0 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a  e_return;.    }.
19ae0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
19af0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67  TE_OK ){.      g
19b00 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
19b10 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20  _error;.    }.. 
19b20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26     if( pOp->p2 &
19b30 26 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75  & p->usesStmtJou
19b40 72 6e 61 6c 20 0a 20 20 20 20 20 26 26 20 28 64  rnal .     && (d
19b50 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  b->autoCommit==0
19b60 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65 61   || db->nVdbeRea
19b70 64 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20 20 20  d>1) .    ){.   
19b80 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
19b90 65 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73  e3BtreeIsInTrans
19ba0 28 70 42 74 29 20 29 3b 0a 20 20 20 20 20 20 69  (pBt) );.      i
19bb0 66 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74  f( p->iStatement
19bc0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  ==0 ){.        a
19bd0 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74  ssert( db->nStat
19be0 65 6d 65 6e 74 3e 3d 30 20 26 26 20 64 62 2d 3e  ement>=0 && db->
19bf0 6e 53 61 76 65 70 6f 69 6e 74 3e 3d 30 20 29 3b  nSavepoint>=0 );
19c00 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74  .        db->nSt
19c10 61 74 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20 20 20  atement++; .    
19c20 20 20 20 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e      p->iStatemen
19c30 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69  t = db->nSavepoi
19c40 6e 74 20 2b 20 64 62 2d 3e 6e 53 74 61 74 65 6d  nt + db->nStatem
19c50 65 6e 74 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  ent;.      }..  
19c60 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
19c70 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62  VtabSavepoint(db
19c80 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49  , SAVEPOINT_BEGI
19c90 4e 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74  N, p->iStatement
19ca0 2d 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  -1);.      if( r
19cb0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
19cc0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
19cd0 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 53 74  ite3BtreeBeginSt
19ce0 6d 74 28 70 42 74 2c 20 70 2d 3e 69 53 74 61 74  mt(pBt, p->iStat
19cf0 65 6d 65 6e 74 29 3b 0a 20 20 20 20 20 20 7d 0a  ement);.      }.
19d00 0a 20 20 20 20 20 20 2f 2a 20 53 74 6f 72 65 20  .      /* Store 
19d10 74 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75  the current valu
19d20 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
19d30 65 20 68 61 6e 64 6c 65 73 20 64 65 66 65 72 72  e handles deferr
19d40 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20  ed constraint.  
19d50 20 20 20 20 2a 2a 20 63 6f 75 6e 74 65 72 2e 20      ** counter. 
19d60 49 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  If the statement
19d70 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65   transaction nee
19d80 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20  ds to be rolled 
19d90 62 61 63 6b 2c 0a 20 20 20 20 20 20 2a 2a 20 74  back,.      ** t
19da0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73  he value of this
19db0 20 63 6f 75 6e 74 65 72 20 6e 65 65 64 73 20 74   counter needs t
19dc0 6f 20 62 65 20 72 65 73 74 6f 72 65 64 20 74 6f  o be restored to
19dd0 6f 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e  o.  */.      p->
19de0 6e 53 74 6d 74 44 65 66 43 6f 6e 73 20 3d 20 64  nStmtDefCons = d
19df0 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
19e00 3b 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74  ;.      p->nStmt
19e10 44 65 66 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d  DefImmCons = db-
19e20 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
19e30 73 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a  s;.    }..    /*
19e40 20 47 61 74 68 65 72 20 74 68 65 20 73 63 68 65   Gather the sche
19e50 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  ma version numbe
19e60 72 20 66 6f 72 20 63 68 65 63 6b 69 6e 67 3a 0a  r for checking:.
19e70 20 20 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54      ** IMPLEMENT
19e80 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 33 32 31 39  ATION-OF: R-3219
19e90 35 2d 31 39 34 36 35 20 54 68 65 20 73 63 68 65  5-19465 The sche
19ea0 6d 61 20 76 65 72 73 69 6f 6e 20 69 73 20 75 73  ma version is us
19eb0 65 64 20 62 79 20 53 51 4c 69 74 65 0a 20 20 20  ed by SQLite.   
19ec0 20 2a 2a 20 65 61 63 68 20 74 69 6d 65 20 61 20   ** each time a 
19ed0 71 75 65 72 79 20 69 73 20 65 78 65 63 75 74 65  query is execute
19ee0 64 20 74 6f 20 65 6e 73 75 72 65 20 74 68 61 74  d to ensure that
19ef0 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 63 61   the internal ca
19f00 63 68 65 20 6f 66 20 74 68 65 0a 20 20 20 20 2a  che of the.    *
19f10 2a 20 73 63 68 65 6d 61 20 75 73 65 64 20 77 68  * schema used wh
19f20 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 74 68 65  en compiling the
19f30 20 53 51 4c 20 71 75 65 72 79 20 6d 61 74 63 68   SQL query match
19f40 65 73 20 74 68 65 20 73 63 68 65 6d 61 20 6f 66  es the schema of
19f50 20 74 68 65 0a 20 20 20 20 2a 2a 20 64 61 74 61   the.    ** data
19f60 62 61 73 65 20 61 67 61 69 6e 73 74 20 77 68 69  base against whi
19f70 63 68 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20  ch the compiled 
19f80 71 75 65 72 79 20 69 73 20 61 63 74 75 61 6c 6c  query is actuall
19f90 79 20 65 78 65 63 75 74 65 64 2e 0a 20 20 20 20  y executed..    
19fa0 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74  */.    sqlite3Bt
19fb0 72 65 65 47 65 74 4d 65 74 61 28 70 42 74 2c 20  reeGetMeta(pBt, 
19fc0 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52  BTREE_SCHEMA_VER
19fd0 53 49 4f 4e 2c 20 28 75 33 32 20 2a 29 26 69 4d  SION, (u32 *)&iM
19fe0 65 74 61 29 3b 0a 20 20 20 20 69 47 65 6e 20 3d  eta);.    iGen =
19ff0 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
1a000 5d 2e 70 53 63 68 65 6d 61 2d 3e 69 47 65 6e 65  ].pSchema->iGene
1a010 72 61 74 69 6f 6e 3b 0a 20 20 7d 65 6c 73 65 7b  ration;.  }else{
1a020 0a 20 20 20 20 69 47 65 6e 20 3d 20 69 4d 65 74  .    iGen = iMet
1a030 61 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 61 73 73  a = 0;.  }.  ass
1a040 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  ert( pOp->p5==0 
1a050 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  || pOp->p4type==
1a060 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 69 66  P4_INT32 );.  if
1a070 28 20 70 4f 70 2d 3e 70 35 20 26 26 20 28 69 4d  ( pOp->p5 && (iM
1a080 65 74 61 21 3d 70 4f 70 2d 3e 70 33 20 7c 7c 20  eta!=pOp->p3 || 
1a090 69 47 65 6e 21 3d 70 4f 70 2d 3e 70 34 2e 69 29  iGen!=pOp->p4.i)
1a0a0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44   ){.    sqlite3D
1a0b0 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72  bFree(db, p->zEr
1a0c0 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45  rMsg);.    p->zE
1a0d0 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 44  rrMsg = sqlite3D
1a0e0 62 53 74 72 44 75 70 28 64 62 2c 20 22 64 61 74  bStrDup(db, "dat
1a0f0 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73  abase schema has
1a100 20 63 68 61 6e 67 65 64 22 29 3b 0a 20 20 20 20   changed");.    
1a110 2f 2a 20 49 66 20 74 68 65 20 73 63 68 65 6d 61  /* If the schema
1a120 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65  -cookie from the
1a130 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d   database file m
1a140 61 74 63 68 65 73 20 74 68 65 20 63 6f 6f 6b 69  atches the cooki
1a150 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f 72 65 64  e .    ** stored
1a160 20 77 69 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d   with the in-mem
1a170 6f 72 79 20 72 65 70 72 65 73 65 6e 74 61 74 69  ory representati
1a180 6f 6e 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61  on of the schema
1a190 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20  , do.    ** not 
1a1a0 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68 65 6d  reload the schem
1a1b0 61 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  a from the datab
1a1c0 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a  ase file..    **
1a1d0 0a 20 20 20 20 2a 2a 20 49 66 20 76 69 72 74 75  .    ** If virtu
1a1e0 61 6c 2d 74 61 62 6c 65 73 20 61 72 65 20 69 6e  al-tables are in
1a1f0 20 75 73 65 2c 20 74 68 69 73 20 69 73 20 6e 6f   use, this is no
1a200 74 20 6a 75 73 74 20 61 6e 20 6f 70 74 69 6d 69  t just an optimi
1a210 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f  zation..    ** O
1a220 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73  ften, v-tables s
1a230 74 6f 72 65 20 74 68 65 69 72 20 64 61 74 61 20  tore their data 
1a240 69 6e 20 6f 74 68 65 72 20 53 51 4c 69 74 65 20  in other SQLite 
1a250 74 61 62 6c 65 73 2c 20 77 68 69 63 68 0a 20 20  tables, which.  
1a260 20 20 2a 2a 20 61 72 65 20 71 75 65 72 69 65 64    ** are queried
1a270 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65   from within xNe
1a280 78 74 28 29 20 61 6e 64 20 6f 74 68 65 72 20 76  xt() and other v
1a290 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 20 75  -table methods u
1a2a0 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70 72 65 70  sing.    ** prep
1a2b0 61 72 65 64 20 71 75 65 72 69 65 73 2e 20 49 66  ared queries. If
1a2c0 20 73 75 63 68 20 61 20 71 75 65 72 79 20 69 73   such a query is
1a2d0 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65   out-of-date, we
1a2e0 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a   do not want to.
1a2f0 20 20 20 20 2a 2a 20 64 69 73 63 61 72 64 20 74      ** discard t
1a300 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
1a310 6d 61 2c 20 61 73 20 74 68 65 20 75 73 65 72 20  ma, as the user 
1a320 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e  code implementin
1a330 67 20 74 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74  g the.    ** v-t
1a340 61 62 6c 65 20 77 6f 75 6c 64 20 68 61 76 65 20  able would have 
1a350 74 6f 20 62 65 20 72 65 61 64 79 20 66 6f 72 20  to be ready for 
1a360 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
1a370 20 73 74 72 75 63 74 75 72 65 20 69 74 73 65 6c   structure itsel
1a380 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65 20 69  f.    ** to be i
1a390 6e 76 61 6c 69 64 61 74 65 64 20 77 68 65 6e 65  nvalidated whene
1a3a0 76 65 72 20 73 71 6c 69 74 65 33 5f 73 74 65 70  ver sqlite3_step
1a3b0 28 29 20 69 73 20 63 61 6c 6c 65 64 20 66 72 6f  () is called fro
1a3c0 6d 20 77 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a  m within .    **
1a3d0 20 61 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f   a v-table metho
1a3e0 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  d..    */.    if
1a3f0 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  ( db->aDb[pOp->p
1a400 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  1].pSchema->sche
1a410 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61  ma_cookie!=iMeta
1a420 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
1a430 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28  3ResetOneSchema(
1a440 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20  db, pOp->p1);.  
1a450 20 20 7d 0a 20 20 20 20 70 2d 3e 65 78 70 69 72    }.    p->expir
1a460 65 64 20 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d  ed = 1;.    rc =
1a470 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a   SQLITE_SCHEMA;.
1a480 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67    }.  if( rc ) g
1a490 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1a4a0 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
1a4b0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
1a4c0 65 61 64 43 6f 6f 6b 69 65 20 50 31 20 50 32 20  eadCookie P1 P2 
1a4d0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61  P3 * *.**.** Rea
1a4e0 64 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20  d cookie number 
1a4f0 50 33 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65  P3 from database
1a500 20 50 31 20 61 6e 64 20 77 72 69 74 65 20 69 74   P1 and write it
1a510 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
1a520 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69 73 20 74  2..** P3==1 is t
1a530 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  he schema versio
1a540 6e 2e 20 20 50 33 3d 3d 32 20 69 73 20 74 68 65  n.  P3==2 is the
1a550 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74   database format
1a560 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69 73 20 74 68  ..** P3==3 is th
1a570 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61  e recommended pa
1a580 67 65 72 20 63 61 63 68 65 20 73 69 7a 65 2c 20  ger cache size, 
1a590 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50  and so forth.  P
1a5a0 31 3d 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d  1==0 is.** the m
1a5b0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
1a5c0 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74  e and P1==1 is t
1a5d0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
1a5e0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a   used to store.*
1a5f0 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  * temporary tabl
1a600 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20  es..**.** There 
1a610 6d 75 73 74 20 62 65 20 61 20 72 65 61 64 2d 6c  must be a read-l
1a620 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ock on the datab
1a630 61 73 65 20 28 65 69 74 68 65 72 20 61 20 74 72  ase (either a tr
1a640 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73  ansaction.** mus
1a650 74 20 62 65 20 73 74 61 72 74 65 64 20 6f 72 20  t be started or 
1a660 74 68 65 72 65 20 6d 75 73 74 20 62 65 20 61 6e  there must be an
1a670 20 6f 70 65 6e 20 63 75 72 73 6f 72 29 20 62 65   open cursor) be
1a680 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e  fore.** executin
1a690 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  g this instructi
1a6a0 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  on..*/.case OP_R
1a6b0 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20  eadCookie: {    
1a6c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
1a6d0 74 32 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74  t2 */.  int iMet
1a6e0 61 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20  a;.  int iDb;.  
1a6f0 69 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20  int iCookie;..  
1a700 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
1a710 61 64 65 72 20 29 3b 0a 20 20 69 44 62 20 3d 20  ader );.  iDb = 
1a720 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b  pOp->p1;.  iCook
1a730 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  ie = pOp->p3;.  
1a740 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
1a750 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d  SQLITE_N_BTREE_M
1a760 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ETA );.  assert(
1a770 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64   iDb>=0 && iDb<d
1a780 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
1a790 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d  rt( db->aDb[iDb]
1a7a0 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73  .pBt!=0 );.  ass
1a7b0 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
1a7c0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44  p->btreeMask, iD
1a7d0 62 29 20 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33  b) );..  sqlite3
1a7e0 42 74 72 65 65 47 65 74 4d 65 74 61 28 64 62 2d  BtreeGetMeta(db-
1a7f0 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 69  >aDb[iDb].pBt, i
1a800 43 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a 29 26  Cookie, (u32 *)&
1a810 69 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74 20 3d  iMeta);.  pOut =
1a820 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
1a830 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d  p, pOp);.  pOut-
1a840 3e 75 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20 20  >u.i = iMeta;.  
1a850 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1a860 6f 64 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20 50  ode: SetCookie P
1a870 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
1a880 2a 20 57 72 69 74 65 20 74 68 65 20 69 6e 74 65  * Write the inte
1a890 67 65 72 20 76 61 6c 75 65 20 50 33 20 69 6e 74  ger value P3 int
1a8a0 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20  o cookie number 
1a8b0 50 32 20 6f 66 20 64 61 74 61 62 61 73 65 20 50  P2 of database P
1a8c0 31 2e 0a 2a 2a 20 50 32 3d 3d 31 20 69 73 20 74  1..** P2==1 is t
1a8d0 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  he schema versio
1a8e0 6e 2e 20 20 50 32 3d 3d 32 20 69 73 20 74 68 65  n.  P2==2 is the
1a8f0 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74   database format
1a900 2e 0a 2a 2a 20 50 32 3d 3d 33 20 69 73 20 74 68  ..** P2==3 is th
1a910 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61  e recommended pa
1a920 67 65 72 20 63 61 63 68 65 20 0a 2a 2a 20 73 69  ger cache .** si
1a930 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ze, and so forth
1a940 2e 20 20 50 31 3d 3d 30 20 69 73 20 74 68 65 20  .  P1==0 is the 
1a950 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
1a960 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20  le and P1==1 is 
1a970 74 68 65 20 0a 2a 2a 20 64 61 74 61 62 61 73 65  the .** database
1a980 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74   file used to st
1a990 6f 72 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61  ore temporary ta
1a9a0 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72  bles..**.** A tr
1a9b0 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62  ansaction must b
1a9c0 65 20 73 74 61 72 74 65 64 20 62 65 66 6f 72 65  e started before
1a9d0 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20   executing this 
1a9e0 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20  opcode..*/.case 
1a9f0 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 0a  OP_SetCookie: {.
1aa00 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 61 73 73    Db *pDb;.  ass
1aa10 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c  ert( pOp->p2<SQL
1aa20 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41  ITE_N_BTREE_META
1aa30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1aa40 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1aa50 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
1aa60 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
1aa70 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
1aa80 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20  , pOp->p1) );.  
1aa90 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
1aaa0 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20  nly==0 );.  pDb 
1aab0 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  = &db->aDb[pOp->
1aac0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1aad0 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20  Db->pBt!=0 );.  
1aae0 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53  assert( sqlite3S
1aaf0 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64  chemaMutexHeld(d
1ab00 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29  b, pOp->p1, 0) )
1ab10 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20  ;.  /* See note 
1ab20 61 62 6f 75 74 20 69 6e 64 65 78 20 73 68 69 66  about index shif
1ab30 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43  ting on OP_ReadC
1ab40 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20  ookie */.  rc = 
1ab50 73 71 6c 69 74 65 33 42 74 72 65 65 55 70 64 61  sqlite3BtreeUpda
1ab60 74 65 4d 65 74 61 28 70 44 62 2d 3e 70 42 74 2c  teMeta(pDb->pBt,
1ab70 20 70 4f 70 2d 3e 70 32 2c 20 70 4f 70 2d 3e 70   pOp->p2, pOp->p
1ab80 33 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  3);.  if( pOp->p
1ab90 32 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d 41 5f  2==BTREE_SCHEMA_
1aba0 56 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f  VERSION ){.    /
1abb0 2a 20 57 68 65 6e 20 74 68 65 20 73 63 68 65 6d  * When the schem
1abc0 61 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73  a cookie changes
1abd0 2c 20 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77  , record the new
1abe0 20 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c   cookie internal
1abf0 6c 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70  ly */.    pDb->p
1ac00 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63  Schema->schema_c
1ac10 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b  ookie = pOp->p3;
1ac20 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c  .    db->flags |
1ac30 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43  = SQLITE_InternC
1ac40 68 61 6e 67 65 73 3b 0a 20 20 7d 65 6c 73 65 20  hanges;.  }else 
1ac50 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52  if( pOp->p2==BTR
1ac60 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 29  EE_FILE_FORMAT )
1ac70 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72 64 20  {.    /* Record 
1ac80 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 66  changes in the f
1ac90 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20  ile format */.  
1aca0 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e    pDb->pSchema->
1acb0 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 4f  file_format = pO
1acc0 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 69 66 28  p->p3;.  }.  if(
1acd0 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20   pOp->p1==1 ){. 
1ace0 20 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65     /* Invalidate
1acf0 20 61 6c 6c 20 70 72 65 70 61 72 65 64 20 73 74   all prepared st
1ad00 61 74 65 6d 65 6e 74 73 20 77 68 65 6e 65 76 65  atements wheneve
1ad10 72 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62  r the TEMP datab
1ad20 61 73 65 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d  ase.    ** schem
1ad30 61 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20 54  a is changed.  T
1ad40 69 63 6b 65 74 20 23 31 36 34 34 20 2a 2f 0a 20  icket #1644 */. 
1ad50 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65     sqlite3Expire
1ad60 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
1ad70 74 73 28 64 62 29 3b 0a 20 20 20 20 70 2d 3e 65  ts(db);.    p->e
1ad80 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a  xpired = 0;.  }.
1ad90 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
1ada0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1adb0 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  or;.  break;.}..
1adc0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52  /* Opcode: OpenR
1add0 65 61 64 20 50 31 20 50 32 20 50 33 20 50 34 20  ead P1 P2 P3 P4 
1ade0 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
1adf0 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a  root=P2 iDb=P3.*
1ae00 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64  *.** Open a read
1ae10 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20 66 6f 72  -only cursor for
1ae20 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
1ae30 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f 74 20 70  ble whose root p
1ae40 61 67 65 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20  age is.** P2 in 
1ae50 61 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  a database file.
1ae60 20 20 54 68 65 20 64 61 74 61 62 61 73 65 20 66    The database f
1ae70 69 6c 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ile is determine
1ae80 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d  d by P3. .** P3=
1ae90 3d 30 20 6d 65 61 6e 73 20 74 68 65 20 6d 61 69  =0 means the mai
1aea0 6e 20 64 61 74 61 62 61 73 65 2c 20 50 33 3d 3d  n database, P3==
1aeb0 31 20 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61  1 means the data
1aec0 62 61 73 65 20 75 73 65 64 20 66 6f 72 20 0a 2a  base used for .*
1aed0 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  * temporary tabl
1aee0 65 73 2c 20 61 6e 64 20 50 33 3e 31 20 6d 65 61  es, and P3>1 mea
1aef0 6e 73 20 75 73 65 64 20 74 68 65 20 63 6f 72 72  ns used the corr
1af00 65 73 70 6f 6e 64 69 6e 67 20 61 74 74 61 63 68  esponding attach
1af10 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20  ed.** database. 
1af20 20 47 69 76 65 20 74 68 65 20 6e 65 77 20 63 75   Give the new cu
1af30 72 73 6f 72 20 61 6e 20 69 64 65 6e 74 69 66 69  rsor an identifi
1af40 65 72 20 6f 66 20 50 31 2e 20 20 54 68 65 20 50  er of P1.  The P
1af50 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e 65 65 64  1.** values need
1af60 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69 67 75 6f   not be contiguo
1af70 75 73 20 62 75 74 20 61 6c 6c 20 50 31 20 76 61  us but all P1 va
1af80 6c 75 65 73 20 73 68 6f 75 6c 64 20 62 65 20 73  lues should be s
1af90 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a  mall integers..*
1afa0 2a 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72  * It is an error
1afb0 20 66 6f 72 20 50 31 20 74 6f 20 62 65 20 6e 65   for P1 to be ne
1afc0 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  gative..**.** If
1afd0 20 50 35 21 3d 30 20 74 68 65 6e 20 75 73 65 20   P5!=0 then use 
1afe0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
1aff0 65 67 69 73 74 65 72 20 50 32 20 61 73 20 74 68  egister P2 as th
1b000 65 20 72 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74  e root page, not
1b010 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66  .** the value of
1b020 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a   P2 itself..**.*
1b030 2a 20 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20  * There will be 
1b040 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 74  a read lock on t
1b050 68 65 20 64 61 74 61 62 61 73 65 20 77 68 65 6e  he database when
1b060 65 76 65 72 20 74 68 65 72 65 20 69 73 20 61 6e  ever there is an
1b070 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73 6f 72 2e  .** open cursor.
1b080 20 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73    If the databas
1b090 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65 64 20 70  e was unlocked p
1b0a0 72 69 6f 72 20 74 6f 20 74 68 69 73 20 69 6e 73  rior to this ins
1b0b0 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e  truction.** then
1b0c0 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 20   a read lock is 
1b0d0 61 63 71 75 69 72 65 64 20 61 73 20 70 61 72 74  acquired as part
1b0e0 20 6f 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   of this instruc
1b0f0 74 69 6f 6e 2e 20 20 41 20 72 65 61 64 0a 2a 2a  tion.  A read.**
1b100 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20 6f 74 68   lock allows oth
1b110 65 72 20 70 72 6f 63 65 73 73 65 73 20 74 6f 20  er processes to 
1b120 72 65 61 64 20 74 68 65 20 64 61 74 61 62 61 73  read the databas
1b130 65 20 62 75 74 20 70 72 6f 68 69 62 69 74 73 0a  e but prohibits.
1b140 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20 70 72 6f  ** any other pro
1b150 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64 69 66 79  cess from modify
1b160 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73 65  ing the database
1b170 2e 20 20 54 68 65 20 72 65 61 64 20 6c 6f 63 6b  .  The read lock
1b180 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73 65 64 20   is.** released 
1b190 77 68 65 6e 20 61 6c 6c 20 63 75 72 73 6f 72 73  when all cursors
1b1a0 20 61 72 65 20 63 6c 6f 73 65 64 2e 20 20 49 66   are closed.  If
1b1b0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
1b1c0 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a 20 74 6f  n attempts.** to
1b1d0 20 67 65 74 20 61 20 72 65 61 64 20 6c 6f 63 6b   get a read lock
1b1e0 20 62 75 74 20 66 61 69 6c 73 2c 20 74 68 65 20   but fails, the 
1b1f0 73 63 72 69 70 74 20 74 65 72 6d 69 6e 61 74 65  script terminate
1b200 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20 53 51 4c  s with an.** SQL
1b210 49 54 45 5f 42 55 53 59 20 65 72 72 6f 72 20 63  ITE_BUSY error c
1b220 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ode..**.** The P
1b230 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65  4 value may be e
1b240 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72  ither an integer
1b250 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61   (P4_INT32) or a
1b260 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61   pointer to.** a
1b270 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75   KeyInfo structu
1b280 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e  re (P4_KEYINFO).
1b290 20 49 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e   If it is a poin
1b2a0 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f  ter to a KeyInfo
1b2b0 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20   .** structure, 
1b2c0 74 68 65 6e 20 73 61 69 64 20 73 74 72 75 63 74  then said struct
1b2d0 75 72 65 20 64 65 66 69 6e 65 73 20 74 68 65 20  ure defines the 
1b2e0 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c  content and coll
1b2f0 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e  ating .** sequen
1b300 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  ce of the index 
1b310 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74  being opened. Ot
1b320 68 65 72 77 69 73 65 2c 20 69 66 20 50 34 20 69  herwise, if P4 i
1b330 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a  s an integer .**
1b340 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65   value, it is se
1b350 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  t to the number 
1b360 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
1b370 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53  e table..**.** S
1b380 65 65 20 61 6c 73 6f 3a 20 4f 70 65 6e 57 72 69  ee also: OpenWri
1b390 74 65 2c 20 52 65 6f 70 65 6e 49 64 78 0a 2a 2f  te, ReopenIdx.*/
1b3a0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6f 70  ./* Opcode: Reop
1b3b0 65 6e 49 64 78 20 50 31 20 50 32 20 50 33 20 50  enIdx P1 P2 P3 P
1b3c0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
1b3d0 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33  : root=P2 iDb=P3
1b3e0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65  .**.** The Reope
1b3f0 6e 49 64 78 20 6f 70 63 6f 64 65 20 77 6f 72 6b  nIdx opcode work
1b400 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 52  s exactly like R
1b410 65 61 64 4f 70 65 6e 20 65 78 63 65 70 74 20 74  eadOpen except t
1b420 68 61 74 20 69 74 20 66 69 72 73 74 0a 2a 2a 20  hat it first.** 
1b430 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66  checks to see if
1b440 20 74 68 65 20 63 75 72 73 6f 72 20 6f 6e 20 50   the cursor on P
1b450 31 20 69 73 20 61 6c 72 65 61 64 79 20 6f 70 65  1 is already ope
1b460 6e 20 77 69 74 68 20 61 20 72 6f 6f 74 20 70 61  n with a root pa
1b470 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  ge.** number of 
1b480 50 32 20 61 6e 64 20 69 66 20 69 74 20 69 73 20  P2 and if it is 
1b490 74 68 69 73 20 6f 70 63 6f 64 65 20 62 65 63 6f  this opcode beco
1b4a0 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 49 6e  mes a no-op.  In
1b4b0 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 0a 2a 2a   other words,.**
1b4c0 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 69   if the cursor i
1b4d0 73 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 2c 20  s already open, 
1b4e0 64 6f 20 6e 6f 74 20 72 65 6f 70 65 6e 20 69 74  do not reopen it
1b4f0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70  ..**.** The Reop
1b500 65 6e 49 64 78 20 6f 70 63 6f 64 65 20 6d 61 79  enIdx opcode may
1b510 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 77 69   only be used wi
1b520 74 68 20 50 35 3d 3d 30 20 61 6e 64 20 77 69 74  th P5==0 and wit
1b530 68 20 50 34 20 62 65 69 6e 67 0a 2a 2a 20 61 20  h P4 being.** a 
1b540 50 34 5f 4b 45 59 49 4e 46 4f 20 6f 62 6a 65 63  P4_KEYINFO objec
1b550 74 2e 20 20 46 75 72 74 68 65 72 6d 6f 72 65 2c  t.  Furthermore,
1b560 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 6d 75   the P3 value mu
1b570 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 20 61  st be the same a
1b580 73 0a 2a 2a 20 65 76 65 72 79 20 6f 74 68 65 72  s.** every other
1b590 20 52 65 6f 70 65 6e 49 64 78 20 6f 72 20 4f 70   ReopenIdx or Op
1b5a0 65 6e 52 65 61 64 20 66 6f 72 20 74 68 65 20 73  enRead for the s
1b5b0 61 6d 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  ame cursor numbe
1b5c0 72 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 74 68 65  r..**.** See the
1b5d0 20 4f 70 65 6e 52 65 61 64 20 6f 70 63 6f 64 65   OpenRead opcode
1b5e0 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66   documentation f
1b5f0 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
1b600 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  formation..*/./*
1b610 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69   Opcode: OpenWri
1b620 74 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  te P1 P2 P3 P4 P
1b630 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  5.** Synopsis: r
1b640 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a  oot=P2 iDb=P3.**
1b650 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2f  .** Open a read/
1b660 77 72 69 74 65 20 63 75 72 73 6f 72 20 6e 61 6d  write cursor nam
1b670 65 64 20 50 31 20 6f 6e 20 74 68 65 20 74 61 62  ed P1 on the tab
1b680 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73  le or index whos
1b690 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 69  e root.** page i
1b6a0 73 20 50 32 2e 20 20 4f 72 20 69 66 20 50 35 21  s P2.  Or if P5!
1b6b0 3d 30 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65  =0 use the conte
1b6c0 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
1b6d0 32 20 74 6f 20 66 69 6e 64 20 74 68 65 0a 2a 2a  2 to find the.**
1b6e0 20 72 6f 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a   root page..**.*
1b6f0 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d  * The P4 value m
1b700 61 79 20 62 65 20 65 69 74 68 65 72 20 61 6e 20  ay be either an 
1b710 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33  integer (P4_INT3
1b720 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20  2) or a pointer 
1b730 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20  to.** a KeyInfo 
1b740 73 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45  structure (P4_KE
1b750 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73  YINFO). If it is
1b760 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
1b770 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75  KeyInfo .** stru
1b780 63 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64  cture, then said
1b790 20 73 74 72 75 63 74 75 72 65 20 64 65 66 69 6e   structure defin
1b7a0 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61  es the content a
1b7b0 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a  nd collating .**
1b7c0 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65   sequence of the
1b7d0 20 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65   index being ope
1b7e0 6e 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ned. Otherwise, 
1b7f0 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65  if P4 is an inte
1b800 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69  ger .** value, i
1b810 74 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  t is set to the 
1b820 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
1b830 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2c 20  s in the table, 
1b840 6f 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 61 72  or to the.** lar
1b850 67 65 73 74 20 69 6e 64 65 78 20 6f 66 20 61 6e  gest index of an
1b860 79 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  y column of the 
1b870 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 61 63  table that is ac
1b880 74 75 61 6c 6c 79 20 75 73 65 64 2e 0a 2a 2a 0a  tually used..**.
1b890 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
1b8a0 69 6f 6e 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  ion works just l
1b8b0 69 6b 65 20 4f 70 65 6e 52 65 61 64 20 65 78 63  ike OpenRead exc
1b8c0 65 70 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e  ept that it open
1b8d0 73 20 74 68 65 20 63 75 72 73 6f 72 0a 2a 2a 20  s the cursor.** 
1b8e0 69 6e 20 72 65 61 64 2f 77 72 69 74 65 20 6d 6f  in read/write mo
1b8f0 64 65 2e 20 20 46 6f 72 20 61 20 67 69 76 65 6e  de.  For a given
1b900 20 74 61 62 6c 65 2c 20 74 68 65 72 65 20 63 61   table, there ca
1b910 6e 20 62 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  n be one or more
1b920 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75   read-only.** cu
1b930 72 73 6f 72 73 20 6f 72 20 61 20 73 69 6e 67 6c  rsors or a singl
1b940 65 20 72 65 61 64 2f 77 72 69 74 65 20 63 75 72  e read/write cur
1b950 73 6f 72 20 62 75 74 20 6e 6f 74 20 62 6f 74 68  sor but not both
1b960 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1b970 20 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61   OpenRead..*/.ca
1b980 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78 3a  se OP_ReopenIdx:
1b990 20 7b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b   {.  int nField;
1b9a0 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  .  KeyInfo *pKey
1b9b0 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a  Info;.  int p2;.
1b9c0 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74    int iDb;.  int
1b9d0 20 77 72 46 6c 61 67 3b 0a 20 20 42 74 72 65 65   wrFlag;.  Btree
1b9e0 20 2a 70 58 3b 0a 20 20 56 64 62 65 43 75 72 73   *pX;.  VdbeCurs
1b9f0 6f 72 20 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a  or *pCur;.  Db *
1ba00 70 44 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pDb;..  assert( 
1ba10 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f  pOp->p5==0 || pO
1ba20 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45  p->p5==OPFLAG_SE
1ba30 45 4b 45 51 20 29 3b 0a 20 20 61 73 73 65 72 74  EKEQ );.  assert
1ba40 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
1ba50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 70  4_KEYINFO );.  p
1ba60 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
1ba70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70  Op->p1];.  if( p
1ba80 43 75 72 20 26 26 20 70 43 75 72 2d 3e 70 67 6e  Cur && pCur->pgn
1ba90 6f 52 6f 6f 74 3d 3d 28 75 33 32 29 70 4f 70 2d  oRoot==(u32)pOp-
1baa0 3e 70 32 20 29 7b 0a 20 20 20 20 61 73 73 65 72  >p2 ){.    asser
1bab0 74 28 20 70 43 75 72 2d 3e 69 44 62 3d 3d 70 4f  t( pCur->iDb==pO
1bac0 70 2d 3e 70 33 20 29 3b 20 20 20 20 20 20 2f 2a  p->p3 );      /*
1bad0 20 47 75 61 72 61 6e 74 65 65 64 20 62 79 20 74   Guaranteed by t
1bae0 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f  he code generato
1baf0 72 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6f 70  r */.    goto op
1bb00 65 6e 5f 63 75 72 73 6f 72 5f 73 65 74 5f 68 69  en_cursor_set_hi
1bb10 6e 74 73 3b 0a 20 20 7d 0a 20 20 2f 2a 20 49 66  nts;.  }.  /* If
1bb20 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 6e   the cursor is n
1bb30 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  ot currently ope
1bb40 6e 20 6f 72 20 69 73 20 6f 70 65 6e 20 6f 6e 20  n or is open on 
1bb50 61 20 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a  a different.  **
1bb60 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 66 61 6c   index, then fal
1bb70 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
1bb80 50 5f 4f 70 65 6e 52 65 61 64 20 74 6f 20 66 6f  P_OpenRead to fo
1bb90 72 63 65 20 61 20 72 65 6f 70 65 6e 20 2a 2f 0a  rce a reopen */.
1bba0 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64  case OP_OpenRead
1bbb0 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 57 72  :.case OP_OpenWr
1bbc0 69 74 65 3a 0a 0a 20 20 61 73 73 65 72 74 28 20  ite:..  assert( 
1bbd0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
1bbe0 4f 70 65 6e 57 72 69 74 65 20 7c 7c 20 70 4f 70  OpenWrite || pOp
1bbf0 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  ->p5==0 || pOp->
1bc00 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45  p5==OPFLAG_SEEKE
1bc10 51 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Q );.  assert( p
1bc20 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20  ->bIsReader );. 
1bc30 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
1bc40 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 52 65 61  code==OP_OpenRea
1bc50 64 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  d || pOp->opcode
1bc60 3d 3d 4f 50 5f 52 65 6f 70 65 6e 49 64 78 0a 20  ==OP_ReopenIdx. 
1bc70 20 20 20 20 20 20 20 20 20 7c 7c 20 70 2d 3e 72           || p->r
1bc80 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20  eadOnly==0 );.. 
1bc90 20 69 66 28 20 70 2d 3e 65 78 70 69 72 65 64 20   if( p->expired 
1bca0 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
1bcb0 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43  TE_ABORT_ROLLBAC
1bcc0 4b 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  K;.    goto abor
1bcd0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1bce0 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20    }..  nField = 
1bcf0 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20  0;.  pKeyInfo = 
1bd00 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70  0;.  p2 = pOp->p
1bd10 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  2;.  iDb = pOp->
1bd20 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44  p3;.  assert( iD
1bd30 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e  b>=0 && iDb<db->
1bd40 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
1bd50 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
1bd60 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29  treeMask, iDb) )
1bd70 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61  ;.  pDb = &db->a
1bd80 44 62 5b 69 44 62 5d 3b 0a 20 20 70 58 20 3d 20  Db[iDb];.  pX = 
1bd90 70 44 62 2d 3e 70 42 74 3b 0a 20 20 61 73 73 65  pDb->pBt;.  asse
1bda0 72 74 28 20 70 58 21 3d 30 20 29 3b 0a 20 20 69  rt( pX!=0 );.  i
1bdb0 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
1bdc0 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 29 7b 0a  OP_OpenWrite ){.
1bdd0 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c      assert( OPFL
1bde0 41 47 5f 46 4f 52 44 45 4c 45 54 45 3d 3d 42 54  AG_FORDELETE==BT
1bdf0 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 20 29 3b  REE_FORDELETE );
1be00 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 42 54  .    wrFlag = BT
1be10 52 45 45 5f 57 52 43 53 52 20 7c 20 28 70 4f 70  REE_WRCSR | (pOp
1be20 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 46 4f  ->p5 & OPFLAG_FO
1be30 52 44 45 4c 45 54 45 29 3b 0a 20 20 20 20 61 73  RDELETE);.    as
1be40 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
1be50 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
1be60 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20   iDb, 0) );.    
1be70 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65 6d 61  if( pDb->pSchema
1be80 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20  ->file_format < 
1be90 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46  p->minWriteFileF
1bea0 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20 20 70  ormat ){.      p
1beb0 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
1bec0 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53 63 68  rmat = pDb->pSch
1bed0 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74  ema->file_format
1bee0 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
1bef0 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 30 3b  .    wrFlag = 0;
1bf00 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
1bf10 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 32 49 53  p5 & OPFLAG_P2IS
1bf20 52 45 47 20 29 7b 0a 20 20 20 20 61 73 73 65 72  REG ){.    asser
1bf30 74 28 20 70 32 3e 30 20 29 3b 0a 20 20 20 20 61  t( p2>0 );.    a
1bf40 73 73 65 72 74 28 20 70 32 3c 3d 28 70 2d 3e 6e  ssert( p2<=(p->n
1bf50 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
1bf60 6f 72 29 20 29 3b 0a 20 20 20 20 70 49 6e 32 20  or) );.    pIn2 
1bf70 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20  = &aMem[p2];.   
1bf80 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
1bf90 6c 69 64 28 70 49 6e 32 29 20 29 3b 0a 20 20 20  lid(pIn2) );.   
1bfa0 20 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e   assert( (pIn2->
1bfb0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
1bfc0 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  !=0 );.    sqlit
1bfd0 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
1bfe0 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 20 20 70  ify(pIn2);.    p
1bff0 32 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75  2 = (int)pIn2->u
1c000 2e 69 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20 70  .i;.    /* The p
1c010 32 20 76 61 6c 75 65 20 61 6c 77 61 79 73 20 63  2 value always c
1c020 6f 6d 65 73 20 66 72 6f 6d 20 61 20 70 72 69 6f  omes from a prio
1c030 72 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65  r OP_CreateTable
1c040 20 6f 70 63 6f 64 65 20 61 6e 64 0a 20 20 20 20   opcode and.    
1c050 2a 2a 20 74 68 61 74 20 6f 70 63 6f 64 65 20 77  ** that opcode w
1c060 69 6c 6c 20 61 6c 77 61 79 73 20 73 65 74 20 74  ill always set t
1c070 68 65 20 70 32 20 76 61 6c 75 65 20 74 6f 20 32  he p2 value to 2
1c080 20 6f 72 20 6d 6f 72 65 20 6f 72 20 65 6c 73 65   or more or else
1c090 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 20 49 66   fail..    ** If
1c0a0 20 74 68 65 72 65 20 77 65 72 65 20 61 20 66 61   there were a fa
1c0b0 69 6c 75 72 65 2c 20 74 68 65 20 70 72 65 70 61  ilure, the prepa
1c0c0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 77 6f  red statement wo
1c0d0 75 6c 64 20 68 61 76 65 20 68 61 6c 74 65 64 0a  uld have halted.
1c0e0 20 20 20 20 2a 2a 20 62 65 66 6f 72 65 20 72 65      ** before re
1c0f0 61 63 68 69 6e 67 20 74 68 69 73 20 69 6e 73 74  aching this inst
1c100 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20  ruction. */.    
1c110 61 73 73 65 72 74 28 20 70 32 3e 3d 32 20 29 3b  assert( p2>=2 );
1c120 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
1c130 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e  p4type==P4_KEYIN
1c140 46 4f 20 29 7b 0a 20 20 20 20 70 4b 65 79 49 6e  FO ){.    pKeyIn
1c150 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65  fo = pOp->p4.pKe
1c160 79 49 6e 66 6f 3b 0a 20 20 20 20 61 73 73 65 72  yInfo;.    asser
1c170 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63  t( pKeyInfo->enc
1c180 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 20  ==ENC(db) );.   
1c190 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66   assert( pKeyInf
1c1a0 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20  o->db==db );.   
1c1b0 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65 79 49 6e   nField = pKeyIn
1c1c0 66 6f 2d 3e 6e 46 69 65 6c 64 2b 70 4b 65 79 49  fo->nField+pKeyI
1c1d0 6e 66 6f 2d 3e 6e 58 46 69 65 6c 64 3b 0a 20 20  nfo->nXField;.  
1c1e0 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70  }else if( pOp->p
1c1f0 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
1c200 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20  ){.    nField = 
1c210 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a 20  pOp->p4.i;.  }. 
1c220 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1c230 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  >=0 );.  assert(
1c240 20 6e 46 69 65 6c 64 3e 3d 30 20 29 3b 0a 20 20   nField>=0 );.  
1c250 74 65 73 74 63 61 73 65 28 20 6e 46 69 65 6c 64  testcase( nField
1c260 3d 3d 30 20 29 3b 20 20 2f 2a 20 54 61 62 6c 65  ==0 );  /* Table
1c270 20 77 69 74 68 20 49 4e 54 45 47 45 52 20 50 52   with INTEGER PR
1c280 49 4d 41 52 59 20 4b 45 59 20 61 6e 64 20 6e 6f  IMARY KEY and no
1c290 74 68 69 6e 67 20 65 6c 73 65 20 2a 2f 0a 20 20  thing else */.  
1c2a0 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43  pCur = allocateC
1c2b0 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
1c2c0 2c 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c 20 43  , nField, iDb, C
1c2d0 55 52 54 59 50 45 5f 42 54 52 45 45 29 3b 0a 20  URTYPE_BTREE);. 
1c2e0 20 69 66 28 20 70 43 75 72 3d 3d 30 20 29 20 67   if( pCur==0 ) g
1c2f0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
1c300 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  ur->nullRow = 1;
1c310 0a 20 20 70 43 75 72 2d 3e 69 73 4f 72 64 65 72  .  pCur->isOrder
1c320 65 64 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e  ed = 1;.  pCur->
1c330 70 67 6e 6f 52 6f 6f 74 20 3d 20 70 32 3b 0a 23  pgnoRoot = p2;.#
1c340 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
1c350 55 47 0a 20 20 70 43 75 72 2d 3e 77 72 46 6c 61  UG.  pCur->wrFla
1c360 67 20 3d 20 77 72 46 6c 61 67 3b 0a 23 65 6e 64  g = wrFlag;.#end
1c370 69 66 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  if.  rc = sqlite
1c380 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 58 2c  3BtreeCursor(pX,
1c390 20 70 32 2c 20 77 72 46 6c 61 67 2c 20 70 4b 65   p2, wrFlag, pKe
1c3a0 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e 75 63 2e  yInfo, pCur->uc.
1c3b0 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 75 72  pCursor);.  pCur
1c3c0 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65  ->pKeyInfo = pKe
1c3d0 79 49 6e 66 6f 3b 0a 20 20 2f 2a 20 53 65 74 20  yInfo;.  /* Set 
1c3e0 74 68 65 20 56 64 62 65 43 75 72 73 6f 72 2e 69  the VdbeCursor.i
1c3f0 73 54 61 62 6c 65 20 76 61 72 69 61 62 6c 65 2e  sTable variable.
1c400 20 50 72 65 76 69 6f 75 73 20 76 65 72 73 69 6f   Previous versio
1c410 6e 73 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69 74  ns of.  ** SQLit
1c420 65 20 75 73 65 64 20 74 6f 20 63 68 65 63 6b 20  e used to check 
1c430 69 66 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65  if the root-page
1c440 20 66 6c 61 67 73 20 77 65 72 65 20 73 61 6e 65   flags were sane
1c450 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74 0a 20   at this point. 
1c460 20 2a 2a 20 61 6e 64 20 72 65 70 6f 72 74 20 64   ** and report d
1c470 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74 69  atabase corrupti
1c480 6f 6e 20 69 66 20 74 68 65 79 20 77 65 72 65 20  on if they were 
1c490 6e 6f 74 2c 20 62 75 74 20 74 68 69 73 20 63 68  not, but this ch
1c4a0 65 63 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69 6e  eck has.  ** sin
1c4b0 63 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68  ce moved into th
1c4c0 65 20 62 74 72 65 65 20 6c 61 79 65 72 2e 20 20  e btree layer.  
1c4d0 2a 2f 20 20 0a 20 20 70 43 75 72 2d 3e 69 73 54  */  .  pCur->isT
1c4e0 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74 79  able = pOp->p4ty
1c4f0 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a  pe!=P4_KEYINFO;.
1c500 0a 6f 70 65 6e 5f 63 75 72 73 6f 72 5f 73 65 74  .open_cursor_set
1c510 5f 68 69 6e 74 73 3a 0a 20 20 61 73 73 65 72 74  _hints:.  assert
1c520 28 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52  ( OPFLAG_BULKCSR
1c530 3d 3d 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44  ==BTREE_BULKLOAD
1c540 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50   );.  assert( OP
1c550 46 4c 41 47 5f 53 45 45 4b 45 51 3d 3d 42 54 52  FLAG_SEEKEQ==BTR
1c560 45 45 5f 53 45 45 4b 5f 45 51 20 29 3b 0a 20 20  EE_SEEK_EQ );.  
1c570 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
1c580 35 20 26 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43  5 & OPFLAG_BULKC
1c590 53 52 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  SR );.#ifdef SQL
1c5a0 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f  ITE_ENABLE_CURSO
1c5b0 52 5f 48 49 4e 54 53 0a 20 20 74 65 73 74 63 61  R_HINTS.  testca
1c5c0 73 65 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50  se( pOp->p2 & OP
1c5d0 46 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a 23  FLAG_SEEKEQ );.#
1c5e0 65 6e 64 69 66 0a 20 20 73 71 6c 69 74 65 33 42  endif.  sqlite3B
1c5f0 74 72 65 65 43 75 72 73 6f 72 48 69 6e 74 46 6c  treeCursorHintFl
1c600 61 67 73 28 70 43 75 72 2d 3e 75 63 2e 70 43 75  ags(pCur->uc.pCu
1c610 72 73 6f 72 2c 0a 20 20 20 20 20 20 20 20 20 20  rsor,.          
1c620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c630 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26 20       (pOp->p5 & 
1c640 28 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 7c  (OPFLAG_BULKCSR|
1c650 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 29 29 29  OPFLAG_SEEKEQ)))
1c660 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
1c670 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1c680 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
1c690 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  ../* Opcode: Ope
1c6a0 6e 45 70 68 65 6d 65 72 61 6c 20 50 31 20 50 32  nEphemeral P1 P2
1c6b0 20 2a 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f   * P4 P5.** Syno
1c6c0 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32  psis: nColumn=P2
1c6d0 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65  .**.** Open a ne
1c6e0 77 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61  w cursor P1 to a
1c6f0 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65   transient table
1c700 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20  ..** The cursor 
1c710 69 73 20 61 6c 77 61 79 73 20 6f 70 65 6e 65 64  is always opened
1c720 20 72 65 61 64 2f 77 72 69 74 65 20 65 76 65 6e   read/write even
1c730 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e   if .** the main
1c740 20 64 61 74 61 62 61 73 65 20 69 73 20 72 65 61   database is rea
1c750 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 65 70 68  d-only.  The eph
1c760 65 6d 65 72 61 6c 0a 2a 2a 20 74 61 62 6c 65 20  emeral.** table 
1c770 69 73 20 64 65 6c 65 74 65 64 20 61 75 74 6f 6d  is deleted autom
1c780 61 74 69 63 61 6c 6c 79 20 77 68 65 6e 20 74 68  atically when th
1c790 65 20 63 75 72 73 6f 72 20 69 73 20 63 6c 6f 73  e cursor is clos
1c7a0 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20  ed..**.** P2 is 
1c7b0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
1c7c0 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 65 70 68  lumns in the eph
1c7d0 65 6d 65 72 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a  emeral table..**
1c7e0 20 54 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e   The cursor poin
1c7f0 74 73 20 74 6f 20 61 20 42 54 72 65 65 20 74 61  ts to a BTree ta
1c800 62 6c 65 20 69 66 20 50 34 3d 3d 30 20 61 6e 64  ble if P4==0 and
1c810 20 74 6f 20 61 20 42 54 72 65 65 20 69 6e 64 65   to a BTree inde
1c820 78 0a 2a 2a 20 69 66 20 50 34 20 69 73 20 6e 6f  x.** if P4 is no
1c830 74 20 30 2e 20 20 49 66 20 50 34 20 69 73 20 6e  t 0.  If P4 is n
1c840 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f 69 6e  ot NULL, it poin
1c850 74 73 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20  ts to a KeyInfo 
1c860 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 74 68 61  structure.** tha
1c870 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 66 6f  t defines the fo
1c880 72 6d 61 74 20 6f 66 20 6b 65 79 73 20 69 6e 20  rmat of keys in 
1c890 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a  the index..**.**
1c8a0 20 54 68 65 20 50 35 20 70 61 72 61 6d 65 74 65   The P5 paramete
1c8b0 72 20 63 61 6e 20 62 65 20 61 20 6d 61 73 6b 20  r can be a mask 
1c8c0 6f 66 20 74 68 65 20 42 54 52 45 45 5f 2a 20 66  of the BTREE_* f
1c8d0 6c 61 67 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20  lags defined.** 
1c8e0 69 6e 20 62 74 72 65 65 2e 68 2e 20 20 54 68 65  in btree.h.  The
1c8f0 73 65 20 66 6c 61 67 73 20 63 6f 6e 74 72 6f 6c  se flags control
1c900 20 61 73 70 65 63 74 73 20 6f 66 20 74 68 65 20   aspects of the 
1c910 6f 70 65 72 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20  operation of.** 
1c920 74 68 65 20 62 74 72 65 65 2e 20 20 54 68 65 20  the btree.  The 
1c930 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e  BTREE_OMIT_JOURN
1c940 41 4c 20 61 6e 64 20 42 54 52 45 45 5f 53 49 4e  AL and BTREE_SIN
1c950 47 4c 45 20 66 6c 61 67 73 20 61 72 65 0a 2a 2a  GLE flags are.**
1c960 20 61 64 64 65 64 20 61 75 74 6f 6d 61 74 69 63   added automatic
1c970 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  ally..*/./* Opco
1c980 64 65 3a 20 4f 70 65 6e 41 75 74 6f 69 6e 64 65  de: OpenAutoinde
1c990 78 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  x P1 P2 * P4 *.*
1c9a0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c  * Synopsis: nCol
1c9b0 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69  umn=P2.**.** Thi
1c9c0 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 74  s opcode works t
1c9d0 68 65 20 73 61 6d 65 20 61 73 20 4f 50 5f 4f 70  he same as OP_Op
1c9e0 65 6e 45 70 68 65 6d 65 72 61 6c 2e 20 20 49 74  enEphemeral.  It
1c9f0 20 68 61 73 20 61 0a 2a 2a 20 64 69 66 66 65 72   has a.** differ
1ca00 65 6e 74 20 6e 61 6d 65 20 74 6f 20 64 69 73 74  ent name to dist
1ca10 69 6e 67 75 69 73 68 20 69 74 73 20 75 73 65 2e  inguish its use.
1ca20 20 20 54 61 62 6c 65 73 20 63 72 65 61 74 65 64    Tables created
1ca30 20 75 73 69 6e 67 0a 2a 2a 20 62 79 20 74 68 69   using.** by thi
1ca40 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65  s opcode will be
1ca50 20 75 73 65 64 20 66 6f 72 20 61 75 74 6f 6d 61   used for automa
1ca60 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20  tically created 
1ca70 74 72 61 6e 73 69 65 6e 74 0a 2a 2a 20 69 6e 64  transient.** ind
1ca80 69 63 65 73 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a  ices in joins..*
1ca90 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 41 75  /.case OP_OpenAu
1caa0 74 6f 69 6e 64 65 78 3a 20 0a 63 61 73 65 20 4f  toindex: .case O
1cab0 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a  P_OpenEphemeral:
1cac0 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
1cad0 2a 70 43 78 3b 0a 20 20 4b 65 79 49 6e 66 6f 20  *pCx;.  KeyInfo 
1cae0 2a 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20 73 74  *pKeyInfo;..  st
1caf0 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 76  atic const int v
1cb00 66 73 46 6c 61 67 73 20 3d 20 0a 20 20 20 20 20  fsFlags = .     
1cb10 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41   SQLITE_OPEN_REA
1cb20 44 57 52 49 54 45 20 7c 0a 20 20 20 20 20 20 53  DWRITE |.      S
1cb30 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54  QLITE_OPEN_CREAT
1cb40 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
1cb50 5f 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56 45 20  _OPEN_EXCLUSIVE 
1cb60 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
1cb70 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53  PEN_DELETEONCLOS
1cb80 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
1cb90 5f 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f  _OPEN_TRANSIENT_
1cba0 44 42 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  DB;.  assert( pO
1cbb0 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73  p->p1>=0 );.  as
1cbc0 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30  sert( pOp->p2>=0
1cbd0 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f   );.  pCx = allo
1cbe0 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
1cbf0 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20  p->p1, pOp->p2, 
1cc00 2d 31 2c 20 43 55 52 54 59 50 45 5f 42 54 52 45  -1, CURTYPE_BTRE
1cc10 45 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30  E);.  if( pCx==0
1cc20 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
1cc30 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d    pCx->nullRow =
1cc40 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73 45 70 68   1;.  pCx->isEph
1cc50 65 6d 65 72 61 6c 20 3d 20 31 3b 0a 20 20 72 63  emeral = 1;.  rc
1cc60 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4f   = sqlite3BtreeO
1cc70 70 65 6e 28 64 62 2d 3e 70 56 66 73 2c 20 30 2c  pen(db->pVfs, 0,
1cc80 20 64 62 2c 20 26 70 43 78 2d 3e 70 42 74 2c 20   db, &pCx->pBt, 
1cc90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cca0 20 20 20 20 20 20 20 20 20 42 54 52 45 45 5f 4f           BTREE_O
1ccb0 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20 42 54  MIT_JOURNAL | BT
1ccc0 52 45 45 5f 53 49 4e 47 4c 45 20 7c 20 70 4f 70  REE_SINGLE | pOp
1ccd0 2d 3e 70 35 2c 20 76 66 73 46 6c 61 67 73 29 3b  ->p5, vfsFlags);
1cce0 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
1ccf0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d  E_OK ){.    rc =
1cd00 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67   sqlite3BtreeBeg
1cd10 69 6e 54 72 61 6e 73 28 70 43 78 2d 3e 70 42 74  inTrans(pCx->pBt
1cd20 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  , 1);.  }.  if( 
1cd30 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
1cd40 0a 20 20 20 20 2f 2a 20 49 66 20 61 20 74 72 61  .    /* If a tra
1cd50 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 69 73 20  nsient index is 
1cd60 72 65 71 75 69 72 65 64 2c 20 63 72 65 61 74 65  required, create
1cd70 20 69 74 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20   it by calling. 
1cd80 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72     ** sqlite3Btr
1cd90 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 29 20  eeCreateTable() 
1cda0 77 69 74 68 20 74 68 65 20 42 54 52 45 45 5f 42  with the BTREE_B
1cdb0 4c 4f 42 4b 45 59 20 66 6c 61 67 20 62 65 66 6f  LOBKEY flag befo
1cdc0 72 65 0a 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e  re.    ** openin
1cdd0 67 20 69 74 2e 20 49 66 20 61 20 74 72 61 6e 73  g it. If a trans
1cde0 69 65 6e 74 20 74 61 62 6c 65 20 69 73 20 72 65  ient table is re
1cdf0 71 75 69 72 65 64 2c 20 6a 75 73 74 20 75 73 65  quired, just use
1ce00 20 74 68 65 0a 20 20 20 20 2a 2a 20 61 75 74 6f   the.    ** auto
1ce10 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65  matically create
1ce20 64 20 74 61 62 6c 65 20 77 69 74 68 20 72 6f 6f  d table with roo
1ce30 74 2d 70 61 67 65 20 31 20 28 61 6e 20 42 4c 4f  t-page 1 (an BLO
1ce40 42 5f 49 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e  B_INTKEY table).
1ce50 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
1ce60 28 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d  (pKeyInfo = pOp-
1ce70 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 29 21 3d 30  >p4.pKeyInfo)!=0
1ce80 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 70 67   ){.      int pg
1ce90 6e 6f 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  no;.      assert
1cea0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
1ceb0 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20  4_KEYINFO );.   
1cec0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1ced0 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28  treeCreateTable(
1cee0 70 43 78 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c  pCx->pBt, &pgno,
1cef0 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 7c   BTREE_BLOBKEY |
1cf00 20 70 4f 70 2d 3e 70 35 29 3b 20 0a 20 20 20 20   pOp->p5); .    
1cf10 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1cf20 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 61  _OK ){.        a
1cf30 73 73 65 72 74 28 20 70 67 6e 6f 3d 3d 4d 41 53  ssert( pgno==MAS
1cf40 54 45 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20  TER_ROOT+1 );.  
1cf50 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4b        assert( pK
1cf60 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29  eyInfo->db==db )
1cf70 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
1cf80 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d  ( pKeyInfo->enc=
1cf90 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 20 20  =ENC(db) );.    
1cfa0 20 20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66      pCx->pKeyInf
1cfb0 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  o = pKeyInfo;.  
1cfc0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1cfd0 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43  e3BtreeCursor(pC
1cfe0 78 2d 3e 70 42 74 2c 20 70 67 6e 6f 2c 20 42 54  x->pBt, pgno, BT
1cff0 52 45 45 5f 57 52 43 53 52 2c 0a 20 20 20 20 20  REE_WRCSR,.     
1d000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d010 20 20 20 20 20 20 20 20 20 20 20 70 4b 65 79 49             pKeyI
1d020 6e 66 6f 2c 20 70 43 78 2d 3e 75 63 2e 70 43 75  nfo, pCx->uc.pCu
1d030 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20  rsor);.      }. 
1d040 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c       pCx->isTabl
1d050 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65  e = 0;.    }else
1d060 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
1d070 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28  ite3BtreeCursor(
1d080 70 43 78 2d 3e 70 42 74 2c 20 4d 41 53 54 45 52  pCx->pBt, MASTER
1d090 5f 52 4f 4f 54 2c 20 42 54 52 45 45 5f 57 52 43  _ROOT, BTREE_WRC
1d0a0 53 52 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  SR,.            
1d0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d0c0 20 20 30 2c 20 70 43 78 2d 3e 75 63 2e 70 43 75    0, pCx->uc.pCu
1d0d0 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 70 43 78  rsor);.      pCx
1d0e0 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20  ->isTable = 1;. 
1d0f0 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72     }.  }.  if( r
1d100 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
1d110 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70  ue_to_error;.  p
1d120 43 78 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20  Cx->isOrdered = 
1d130 28 70 4f 70 2d 3e 70 35 21 3d 42 54 52 45 45 5f  (pOp->p5!=BTREE_
1d140 55 4e 4f 52 44 45 52 45 44 29 3b 0a 20 20 62 72  UNORDERED);.  br
1d150 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1d160 65 3a 20 53 6f 72 74 65 72 4f 70 65 6e 20 50 31  e: SorterOpen P1
1d170 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
1d180 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f  * This opcode wo
1d190 72 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e  rks like OP_Open
1d1a0 45 70 68 65 6d 65 72 61 6c 20 65 78 63 65 70 74  Ephemeral except
1d1b0 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73 0a 2a   that it opens.*
1d1c0 2a 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e  * a transient in
1d1d0 64 65 78 20 74 68 61 74 20 69 73 20 73 70 65 63  dex that is spec
1d1e0 69 66 69 63 61 6c 6c 79 20 64 65 73 69 67 6e 65  ifically designe
1d1f0 64 20 74 6f 20 73 6f 72 74 20 6c 61 72 67 65 0a  d to sort large.
1d200 2a 2a 20 74 61 62 6c 65 73 20 75 73 69 6e 67 20  ** tables using 
1d210 61 6e 20 65 78 74 65 72 6e 61 6c 20 6d 65 72 67  an external merg
1d220 65 2d 73 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d  e-sort algorithm
1d230 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 72 67 75 6d  ..**.** If argum
1d240 65 6e 74 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65  ent P3 is non-ze
1d250 72 6f 2c 20 74 68 65 6e 20 69 74 20 69 6e 64 69  ro, then it indi
1d260 63 61 74 65 73 20 74 68 61 74 20 74 68 65 20 73  cates that the s
1d270 6f 72 74 65 72 20 6d 61 79 0a 2a 2a 20 61 73 73  orter may.** ass
1d280 75 6d 65 20 74 68 61 74 20 61 20 73 74 61 62 6c  ume that a stabl
1d290 65 20 73 6f 72 74 20 63 6f 6e 73 69 64 65 72 69  e sort consideri
1d2a0 6e 67 20 74 68 65 20 66 69 72 73 74 20 50 33 20  ng the first P3 
1d2b0 66 69 65 6c 64 73 20 6f 66 20 65 61 63 68 0a 2a  fields of each.*
1d2c0 2a 20 6b 65 79 20 69 73 20 73 75 66 66 69 63 69  * key is suffici
1d2d0 65 6e 74 20 74 6f 20 70 72 6f 64 75 63 65 20 74  ent to produce t
1d2e0 68 65 20 72 65 71 75 69 72 65 64 20 72 65 73 75  he required resu
1d2f0 6c 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lts..*/.case OP_
1d300 53 6f 72 74 65 72 4f 70 65 6e 3a 20 7b 0a 20 20  SorterOpen: {.  
1d310 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b  VdbeCursor *pCx;
1d320 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
1d330 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p1>=0 );.  asse
1d340 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29  rt( pOp->p2>=0 )
1d350 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61  ;.  pCx = alloca
1d360 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
1d370 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31  >p1, pOp->p2, -1
1d380 2c 20 43 55 52 54 59 50 45 5f 53 4f 52 54 45 52  , CURTYPE_SORTER
1d390 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20  );.  if( pCx==0 
1d3a0 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
1d3b0 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d   pCx->pKeyInfo =
1d3c0 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66   pOp->p4.pKeyInf
1d3d0 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 78  o;.  assert( pCx
1d3e0 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d  ->pKeyInfo->db==
1d3f0 64 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  db );.  assert( 
1d400 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65  pCx->pKeyInfo->e
1d410 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20  nc==ENC(db) );. 
1d420 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
1d430 65 53 6f 72 74 65 72 49 6e 69 74 28 64 62 2c 20  eSorterInit(db, 
1d440 70 4f 70 2d 3e 70 33 2c 20 70 43 78 29 3b 0a 20  pOp->p3, pCx);. 
1d450 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
1d460 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1d470 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  r;.  break;.}../
1d480 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e  * Opcode: Sequen
1d490 63 65 54 65 73 74 20 50 31 20 50 32 20 2a 20 2a  ceTest P1 P2 * *
1d4a0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1d4b0 69 66 28 20 63 75 72 73 6f 72 5b 50 31 5d 2e 63  if( cursor[P1].c
1d4c0 74 72 2b 2b 20 29 20 70 63 20 3d 20 50 32 0a 2a  tr++ ) pc = P2.*
1d4d0 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72  *.** P1 is a sor
1d4e0 74 65 72 20 63 75 72 73 6f 72 2e 20 49 66 20 74  ter cursor. If t
1d4f0 68 65 20 73 65 71 75 65 6e 63 65 20 63 6f 75 6e  he sequence coun
1d500 74 65 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79  ter is currently
1d510 20 7a 65 72 6f 2c 20 6a 75 6d 70 0a 2a 2a 20 74   zero, jump.** t
1d520 6f 20 50 32 2e 20 52 65 67 61 72 64 6c 65 73 73  o P2. Regardless
1d530 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e   of whether or n
1d540 6f 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  ot the jump is t
1d550 61 6b 65 6e 2c 20 69 6e 63 72 65 6d 65 6e 74 20  aken, increment 
1d560 74 68 65 0a 2a 2a 20 74 68 65 20 73 65 71 75 65  the.** the seque
1d570 6e 63 65 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61  nce value..*/.ca
1d580 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 54 65  se OP_SequenceTe
1d590 73 74 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  st: {.  VdbeCurs
1d5a0 6f 72 20 2a 70 43 3b 0a 20 20 61 73 73 65 72 74  or *pC;.  assert
1d5b0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1d5c0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1d5d0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
1d5e0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1d5f0 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74    assert( isSort
1d600 65 72 28 70 43 29 20 29 3b 0a 20 20 69 66 28 20  er(pC) );.  if( 
1d610 28 70 43 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 29  (pC->seqCount++)
1d620 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ==0 ){.    goto 
1d630 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
1d640 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1d650 70 63 6f 64 65 3a 20 4f 70 65 6e 50 73 65 75 64  pcode: OpenPseud
1d660 6f 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  o P1 P2 P3 * *.*
1d670 2a 20 53 79 6e 6f 70 73 69 73 3a 20 50 33 20 63  * Synopsis: P3 c
1d680 6f 6c 75 6d 6e 73 20 69 6e 20 72 5b 50 32 5d 0a  olumns in r[P2].
1d690 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77  **.** Open a new
1d6a0 20 63 75 72 73 6f 72 20 74 68 61 74 20 70 6f 69   cursor that poi
1d6b0 6e 74 73 20 74 6f 20 61 20 66 61 6b 65 20 74 61  nts to a fake ta
1d6c0 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ble that contain
1d6d0 73 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f  s a single.** ro
1d6e0 77 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20  w of data.  The 
1d6f0 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 61 74 20  content of that 
1d700 6f 6e 65 20 72 6f 77 20 69 73 20 74 68 65 20 63  one row is the c
1d710 6f 6e 74 65 6e 74 20 6f 66 20 6d 65 6d 6f 72 79  ontent of memory
1d720 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e  .** register P2.
1d730 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
1d740 2c 20 63 75 72 73 6f 72 20 50 31 20 62 65 63 6f  , cursor P1 beco
1d750 6d 65 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72  mes an alias for
1d760 20 74 68 65 20 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f   the .** MEM_Blo
1d770 62 20 63 6f 6e 74 65 6e 74 20 63 6f 6e 74 61 69  b content contai
1d780 6e 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  ned in register 
1d790 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73 65 75  P2..**.** A pseu
1d7a0 64 6f 2d 74 61 62 6c 65 20 63 72 65 61 74 65 64  do-table created
1d7b0 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20   by this opcode 
1d7c0 69 73 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20  is used to hold 
1d7d0 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20  a single.** row 
1d7e0 6f 75 74 70 75 74 20 66 72 6f 6d 20 74 68 65 20  output from the 
1d7f0 73 6f 72 74 65 72 20 73 6f 20 74 68 61 74 20 74  sorter so that t
1d800 68 65 20 72 6f 77 20 63 61 6e 20 62 65 20 64 65  he row can be de
1d810 63 6f 6d 70 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a  composed into.**
1d820 20 69 6e 64 69 76 69 64 75 61 6c 20 63 6f 6c 75   individual colu
1d830 6d 6e 73 20 75 73 69 6e 67 20 74 68 65 20 4f 50  mns using the OP
1d840 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 20  _Column opcode. 
1d850 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f   The OP_Column o
1d860 70 63 6f 64 65 0a 2a 2a 20 69 73 20 74 68 65 20  pcode.** is the 
1d870 6f 6e 6c 79 20 63 75 72 73 6f 72 20 6f 70 63 6f  only cursor opco
1d880 64 65 20 74 68 61 74 20 77 6f 72 6b 73 20 77 69  de that works wi
1d890 74 68 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  th a pseudo-tabl
1d8a0 65 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 74  e..**.** P3 is t
1d8b0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65  he number of fie
1d8c0 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  lds in the recor
1d8d0 64 73 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20  ds that will be 
1d8e0 73 74 6f 72 65 64 20 62 79 0a 2a 2a 20 74 68 65  stored by.** the
1d8f0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a   pseudo-table..*
1d900 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 50 73  /.case OP_OpenPs
1d910 65 75 64 6f 3a 20 7b 0a 20 20 56 64 62 65 43 75  eudo: {.  VdbeCu
1d920 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73  rsor *pCx;..  as
1d930 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1d940 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1d950 70 2d 3e 70 33 3e 3d 30 20 29 3b 0a 20 20 70 43  p->p3>=0 );.  pC
1d960 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  x = allocateCurs
1d970 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  or(p, pOp->p1, p
1d980 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20 43 55 52 54  Op->p3, -1, CURT
1d990 59 50 45 5f 50 53 45 55 44 4f 29 3b 0a 20 20 69  YPE_PSEUDO);.  i
1d9a0 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f  f( pCx==0 ) goto
1d9b0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e   no_mem;.  pCx->
1d9c0 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70  nullRow = 1;.  p
1d9d0 43 78 2d 3e 75 63 2e 70 73 65 75 64 6f 54 61 62  Cx->uc.pseudoTab
1d9e0 6c 65 52 65 67 20 3d 20 70 4f 70 2d 3e 70 32 3b  leReg = pOp->p2;
1d9f0 0a 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20  .  pCx->isTable 
1da00 3d 20 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 1;.  assert( p
1da10 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 62  Op->p5==0 );.  b
1da20 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1da30 64 65 3a 20 43 6c 6f 73 65 20 50 31 20 2a 20 2a  de: Close P1 * *
1da40 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65   * *.**.** Close
1da50 20 61 20 63 75 72 73 6f 72 20 70 72 65 76 69 6f   a cursor previo
1da60 75 73 6c 79 20 6f 70 65 6e 65 64 20 61 73 20 50  usly opened as P
1da70 31 2e 20 20 49 66 20 50 31 20 69 73 20 6e 6f 74  1.  If P1 is not
1da80 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 6f 70  .** currently op
1da90 65 6e 2c 20 74 68 69 73 20 69 6e 73 74 72 75 63  en, this instruc
1daa0 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 2e  tion is a no-op.
1dab0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 6f 73  .*/.case OP_Clos
1dac0 65 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  e: {.  assert( p
1dad0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1dae0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1daf0 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
1db00 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d  FreeCursor(p, p-
1db10 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 29  >apCsr[pOp->p1])
1db20 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  ;.  p->apCsr[pOp
1db30 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20 20 62 72 65  ->p1] = 0;.  bre
1db40 61 6b 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51  ak;.}..#ifdef SQ
1db50 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55  LITE_ENABLE_COLU
1db60 4d 4e 5f 55 53 45 44 5f 4d 41 53 4b 0a 2f 2a 20  MN_USED_MASK./* 
1db70 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 73 55  Opcode: ColumnsU
1db80 73 65 64 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  sed P1 * * P4 *.
1db90 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
1dba0 65 20 28 77 68 69 63 68 20 6f 6e 6c 79 20 65 78  e (which only ex
1dbb0 69 73 74 73 20 69 66 20 53 51 4c 69 74 65 20 77  ists if SQLite w
1dbc0 61 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68  as compiled with
1dbd0 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  .** SQLITE_ENABL
1dbe0 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f 4d 41  E_COLUMN_USED_MA
1dbf0 53 4b 29 20 69 64 65 6e 74 69 66 69 65 73 20 77  SK) identifies w
1dc00 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  hich columns of 
1dc10 74 68 65 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  the.** table or 
1dc20 69 6e 64 65 78 20 66 6f 72 20 63 75 72 73 6f 72  index for cursor
1dc30 20 50 31 20 61 72 65 20 75 73 65 64 2e 20 20 50   P1 are used.  P
1dc40 34 20 69 73 20 61 20 36 34 2d 62 69 74 20 69 6e  4 is a 64-bit in
1dc50 74 65 67 65 72 0a 2a 2a 20 28 50 34 5f 49 4e 54  teger.** (P4_INT
1dc60 36 34 29 20 69 6e 20 77 68 69 63 68 20 74 68 65  64) in which the
1dc70 20 66 69 72 73 74 20 36 33 20 62 69 74 73 20 61   first 63 bits a
1dc80 72 65 20 6f 6e 65 20 66 6f 72 20 65 61 63 68 20  re one for each 
1dc90 6f 66 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20  of the.** first 
1dca0 36 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  63 columns of th
1dcb0 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
1dcc0 20 74 68 61 74 20 61 72 65 20 61 63 74 75 61 6c   that are actual
1dcd0 6c 79 20 75 73 65 64 0a 2a 2a 20 62 79 20 74 68  ly used.** by th
1dce0 65 20 63 75 72 73 6f 72 2e 20 20 54 68 65 20 68  e cursor.  The h
1dcf0 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 69 73  igh-order bit is
1dd00 20 73 65 74 20 69 66 20 61 6e 79 20 63 6f 6c 75   set if any colu
1dd10 6d 6e 20 61 66 74 65 72 0a 2a 2a 20 74 68 65 20  mn after.** the 
1dd20 36 34 74 68 20 69 73 20 75 73 65 64 2e 0a 2a 2f  64th is used..*/
1dd30 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 73  .case OP_Columns
1dd40 55 73 65 64 3a 20 7b 0a 20 20 56 64 62 65 43 75  Used: {.  VdbeCu
1dd50 72 73 6f 72 20 2a 70 43 3b 0a 20 20 70 43 20 3d  rsor *pC;.  pC =
1dd60 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1dd70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
1dd80 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
1dd90 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70  YPE_BTREE );.  p
1dda0 43 2d 3e 6d 61 73 6b 55 73 65 64 20 3d 20 2a 28  C->maskUsed = *(
1ddb0 75 36 34 2a 29 70 4f 70 2d 3e 70 34 2e 70 49 36  u64*)pOp->p4.pI6
1ddc0 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  4;.  break;.}.#e
1ddd0 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ndif../* Opcode:
1dde0 20 53 65 65 6b 47 45 20 50 31 20 50 32 20 50 33   SeekGE P1 P2 P3
1ddf0 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
1de00 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
1de10 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
1de20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
1de30 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
1de40 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
1de50 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
1de60 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  se the value in 
1de70 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 74  register P3 as t
1de80 68 65 20 6b 65 79 2e 20 20 49 66 20 63 75 72 73  he key.  If curs
1de90 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
1dea0 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
1deb0 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
1dec0 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
1ded0 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
1dee0 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
1def0 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
1df00 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
1df10 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
1df20 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
1df30 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  at  it points to
1df40 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e   the smallest en
1df50 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
1df60 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
1df70 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
1df80 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65   value. If there
1df90 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
1dfa0 0a 2a 2a 20 67 72 65 61 74 65 72 20 74 68 61 6e  .** greater than
1dfb0 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
1dfc0 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
1dfd0 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
1dfe0 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
1dff0 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 50 31  If the cursor P1
1e000 20 77 61 73 20 6f 70 65 6e 65 64 20 75 73 69 6e   was opened usin
1e010 67 20 74 68 65 20 4f 50 46 4c 41 47 5f 53 45 45  g the OPFLAG_SEE
1e020 4b 45 51 20 66 6c 61 67 2c 20 74 68 65 6e 20 74  KEQ flag, then t
1e030 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 77 69  his.** opcode wi
1e040 6c 6c 20 61 6c 77 61 79 73 20 6c 61 6e 64 20 6f  ll always land o
1e050 6e 20 61 20 72 65 63 6f 72 64 20 74 68 61 74 20  n a record that 
1e060 65 71 75 61 6c 6c 79 20 65 71 75 61 6c 73 20 74  equally equals t
1e070 68 65 20 6b 65 79 2c 20 6f 72 0a 2a 2a 20 65 6c  he key, or.** el
1e080 73 65 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  se jump immediat
1e090 65 6c 79 20 74 6f 20 50 32 2e 20 20 57 68 65 6e  ely to P2.  When
1e0a0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 4f   the cursor is O
1e0b0 50 46 4c 41 47 5f 53 45 45 4b 45 51 2c 20 74 68  PFLAG_SEEKEQ, th
1e0c0 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 6d 75 73  is.** opcode mus
1e0d0 74 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79  t be followed by
1e0e0 20 61 6e 20 49 64 78 4c 45 20 6f 70 63 6f 64 65   an IdxLE opcode
1e0f0 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 61   with the same a
1e100 72 67 75 6d 65 6e 74 73 2e 0a 2a 2a 20 54 68 65  rguments..** The
1e110 20 49 64 78 4c 45 20 6f 70 63 6f 64 65 20 77 69   IdxLE opcode wi
1e120 6c 6c 20 62 65 20 73 6b 69 70 70 65 64 20 69 66  ll be skipped if
1e130 20 74 68 69 73 20 6f 70 63 6f 64 65 20 73 75 63   this opcode suc
1e140 63 65 65 64 73 2c 20 62 75 74 20 74 68 65 0a 2a  ceeds, but the.*
1e150 2a 20 49 64 78 4c 45 20 6f 70 63 6f 64 65 20 77  * IdxLE opcode w
1e160 69 6c 6c 20 62 65 20 75 73 65 64 20 6f 6e 20 73  ill be used on s
1e170 75 62 73 65 71 75 65 6e 74 20 6c 6f 6f 70 20 69  ubsequent loop i
1e180 74 65 72 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  terations..**.**
1e190 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
1e1a0 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63  ves the cursor c
1e1b0 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76  onfigured to mov
1e1c0 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64  e in forward ord
1e1d0 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  er,.** from the 
1e1e0 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64  beginning toward
1e1f0 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74   the end.  In ot
1e200 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63  her words, the c
1e210 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66  ursor is.** conf
1e220 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65  igured to use Ne
1e230 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a  xt, not Prev..**
1e240 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1e250 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53  und, NotFound, S
1e260 65 65 6b 4c 74 2c 20 53 65 65 6b 47 74 2c 20 53  eekLt, SeekGt, S
1e270 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  eekLe.*/./* Opco
1e280 64 65 3a 20 53 65 65 6b 47 54 20 50 31 20 50 32  de: SeekGT P1 P2
1e290 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
1e2a0 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
1e2b0 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73  4].**.** If curs
1e2c0 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
1e2d0 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
1e2e0 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
1e2f0 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
1e300 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
1e310 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
1e320 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73  s a key. If curs
1e330 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
1e340 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
1e350 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
1e360 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
1e370 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
1e380 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
1e390 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
1e3a0 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
1e3b0 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
1e3c0 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
1e3d0 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  at  it points to
1e3e0 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e   the smallest en
1e3f0 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
1e400 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
1e410 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74   key value. If t
1e420 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
1e430 72 64 73 20 67 72 65 61 74 65 72 20 74 68 61 6e  rds greater than
1e440 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64   .** the key and
1e450 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
1e460 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
1e470 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
1e480 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
1e490 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64  ursor configured
1e4a0 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77   to move in forw
1e4b0 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72  ard order,.** fr
1e4c0 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
1e4d0 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e   toward the end.
1e4e0 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
1e4f0 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  , the cursor is.
1e500 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  ** configured to
1e510 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50   use Next, not P
1e520 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  rev..**.** See a
1e530 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
1e540 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65  ound, SeekLt, Se
1e550 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a  ekGe, SeekLe.*/.
1e560 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c  /* Opcode: SeekL
1e570 54 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 20  T P1 P2 P3 P4 * 
1e580 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
1e590 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
1e5a0 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1e5b0 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74  fers to an SQL t
1e5c0 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61  able (B-Tree tha
1e5d0 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b  t uses integer k
1e5e0 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68  eys), .** use th
1e5f0 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
1e600 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e  ter P3 as a key.
1e610 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1e620 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
1e630 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
1e640 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
1e650 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
1e660 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
1e670 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
1e680 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
1e690 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
1e6a0 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
1e6b0 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70  P1 so that  it p
1e6c0 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72  oints to the lar
1e6d0 67 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  gest entry that 
1e6e0 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e  .** is less than
1e6f0 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
1e700 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
1e710 72 65 63 6f 72 64 73 20 6c 65 73 73 20 74 68 61  records less tha
1e720 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e  n .** the key an
1e730 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
1e740 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
1e750 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  2..**.** This op
1e760 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20  code leaves the 
1e770 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65  cursor configure
1e780 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76  d to move in rev
1e790 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66  erse order,.** f
1e7a0 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61  rom the end towa
1e7b0 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  rd the beginning
1e7c0 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
1e7d0 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  s, the cursor is
1e7e0 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74  .** configured t
1e7f0 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20  o use Prev, not 
1e800 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  Next..**.** See 
1e810 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
1e820 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53  Found, SeekGt, S
1e830 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f  eekGe, SeekLe.*/
1e840 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
1e850 4c 45 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  LE P1 P2 P3 P4 *
1e860 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
1e870 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
1e880 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1e890 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74  fers to an SQL t
1e8a0 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61  able (B-Tree tha
1e8b0 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b  t uses integer k
1e8c0 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68  eys), .** use th
1e8d0 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
1e8e0 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e  ter P3 as a key.
1e8f0 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1e900 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
1e910 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
1e920 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
1e930 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
1e940 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
1e950 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
1e960 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
1e970 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
1e980 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
1e990 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f  P1 so that it po
1e9a0 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67  ints to the larg
1e9b0 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a  est entry that .
1e9c0 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ** is less than 
1e9d0 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
1e9e0 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68  key value. If th
1e9f0 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
1ea00 64 73 20 0a 2a 2a 20 6c 65 73 73 20 74 68 61 6e  ds .** less than
1ea10 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
1ea20 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
1ea30 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
1ea40 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
1ea50 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76  This opcode leav
1ea60 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  es the cursor co
1ea70 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65  nfigured to move
1ea80 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65   in reverse orde
1ea90 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65  r,.** from the e
1eaa0 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20 62 65  nd toward the be
1eab0 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68  ginning.  In oth
1eac0 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75  er words, the cu
1ead0 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69  rsor is.** confi
1eae0 67 75 72 65 64 20 74 6f 20 75 73 65 20 50 72 65  gured to use Pre
1eaf0 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a  v, not Next..**.
1eb00 2a 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f 72  ** If the cursor
1eb10 20 50 31 20 77 61 73 20 6f 70 65 6e 65 64 20 75   P1 was opened u
1eb20 73 69 6e 67 20 74 68 65 20 4f 50 46 4c 41 47 5f  sing the OPFLAG_
1eb30 53 45 45 4b 45 51 20 66 6c 61 67 2c 20 74 68 65  SEEKEQ flag, the
1eb40 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65  n this.** opcode
1eb50 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 6c 61 6e   will always lan
1eb60 64 20 6f 6e 20 61 20 72 65 63 6f 72 64 20 74 68  d on a record th
1eb70 61 74 20 65 71 75 61 6c 6c 79 20 65 71 75 61 6c  at equally equal
1eb80 73 20 74 68 65 20 6b 65 79 2c 20 6f 72 0a 2a 2a  s the key, or.**
1eb90 20 65 6c 73 65 20 6a 75 6d 70 20 69 6d 6d 65 64   else jump immed
1eba0 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 57  iately to P2.  W
1ebb0 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69  hen the cursor i
1ebc0 73 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 2c  s OPFLAG_SEEKEQ,
1ebd0 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20   this.** opcode 
1ebe0 6d 75 73 74 20 62 65 20 66 6f 6c 6c 6f 77 65 64  must be followed
1ebf0 20 62 79 20 61 6e 20 49 64 78 47 45 20 6f 70 63   by an IdxGE opc
1ec00 6f 64 65 20 77 69 74 68 20 74 68 65 20 73 61 6d  ode with the sam
1ec10 65 20 61 72 67 75 6d 65 6e 74 73 2e 0a 2a 2a 20  e arguments..** 
1ec20 54 68 65 20 49 64 78 47 45 20 6f 70 63 6f 64 65  The IdxGE opcode
1ec30 20 77 69 6c 6c 20 62 65 20 73 6b 69 70 70 65 64   will be skipped
1ec40 20 69 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20   if this opcode 
1ec50 73 75 63 63 65 65 64 73 2c 20 62 75 74 20 74 68  succeeds, but th
1ec60 65 0a 2a 2a 20 49 64 78 47 45 20 6f 70 63 6f 64  e.** IdxGE opcod
1ec70 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 6f  e will be used o
1ec80 6e 20 73 75 62 73 65 71 75 65 6e 74 20 6c 6f 6f  n subsequent loo
1ec90 70 20 69 74 65 72 61 74 69 6f 6e 73 2e 0a 2a 2a  p iterations..**
1eca0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1ecb0 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53  und, NotFound, S
1ecc0 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53  eekGt, SeekGe, S
1ecd0 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f 50  eekLt.*/.case OP
1ece0 5f 53 65 65 6b 4c 54 3a 20 20 20 20 20 20 20 20  _SeekLT:        
1ecf0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1ed00 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 45 3a  .case OP_SeekLE:
1ed10 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
1ed20 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
1ed30 5f 53 65 65 6b 47 45 3a 20 20 20 20 20 20 20 20  _SeekGE:        
1ed40 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1ed50 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 54 3a  .case OP_SeekGT:
1ed60 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70   {       /* jump
1ed70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72  , in3 */.  int r
1ed80 65 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  es;           /*
1ed90 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73 75   Comparison resu
1eda0 6c 74 20 2a 2f 0a 20 20 69 6e 74 20 6f 63 3b 20  lt */.  int oc; 
1edb0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70             /* Op
1edc0 63 6f 64 65 20 2a 2f 0a 20 20 56 64 62 65 43 75  code */.  VdbeCu
1edd0 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20  rsor *pC;    /* 
1ede0 54 68 65 20 63 75 72 73 6f 72 20 74 6f 20 73 65  The cursor to se
1edf0 65 6b 20 2a 2f 0a 20 20 55 6e 70 61 63 6b 65 64  ek */.  Unpacked
1ee00 52 65 63 6f 72 64 20 72 3b 20 20 2f 2a 20 54 68  Record r;  /* Th
1ee10 65 20 6b 65 79 20 74 6f 20 73 65 65 6b 20 66 6f  e key to seek fo
1ee20 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c  r */.  int nFiel
1ee30 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  d;        /* Num
1ee40 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 6f  ber of columns o
1ee50 72 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  r fields in the 
1ee60 6b 65 79 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65  key */.  i64 iKe
1ee70 79 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  y;          /* T
1ee80 68 65 20 72 6f 77 69 64 20 77 65 20 61 72 65 20  he rowid we are 
1ee90 74 6f 20 73 65 65 6b 20 74 6f 20 2a 2f 0a 20 20  to seek to */.  
1eea0 69 6e 74 20 65 71 4f 6e 6c 79 3b 20 20 20 20 20  int eqOnly;     
1eeb0 20 20 20 2f 2a 20 4f 6e 6c 79 20 69 6e 74 65 72     /* Only inter
1eec0 65 73 74 65 64 20 69 6e 20 3d 3d 20 72 65 73 75  ested in == resu
1eed0 6c 74 73 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74  lts */..  assert
1eee0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1eef0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1ef00 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
1ef10 70 4f 70 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20  pOp->p2!=0 );.  
1ef20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1ef30 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1ef40 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
1ef50 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
1ef60 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
1ef70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50   );.  assert( OP
1ef80 5f 53 65 65 6b 4c 45 20 3d 3d 20 4f 50 5f 53 65  _SeekLE == OP_Se
1ef90 65 6b 4c 54 2b 31 20 29 3b 0a 20 20 61 73 73 65  ekLT+1 );.  asse
1efa0 72 74 28 20 4f 50 5f 53 65 65 6b 47 45 20 3d 3d  rt( OP_SeekGE ==
1efb0 20 4f 50 5f 53 65 65 6b 4c 54 2b 32 20 29 3b 0a   OP_SeekLT+2 );.
1efc0 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
1efd0 6b 47 54 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54  kGT == OP_SeekLT
1efe0 2b 33 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  +3 );.  assert( 
1eff0 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b  pC->isOrdered );
1f000 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75  .  assert( pC->u
1f010 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  c.pCursor!=0 );.
1f020 20 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f    oc = pOp->opco
1f030 64 65 3b 0a 20 20 65 71 4f 6e 6c 79 20 3d 20 30  de;.  eqOnly = 0
1f040 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
1f050 3d 20 30 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  = 0;.#ifdef SQLI
1f060 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73  TE_DEBUG.  pC->s
1f070 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63  eekOp = pOp->opc
1f080 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 69  ode;.#endif..  i
1f090 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  f( pC->isTable )
1f0a0 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 42 54 52  {.    /* The BTR
1f0b0 45 45 5f 53 45 45 4b 5f 45 51 20 66 6c 61 67 20  EE_SEEK_EQ flag 
1f0c0 69 73 20 6f 6e 6c 79 20 73 65 74 20 6f 6e 20 69  is only set on i
1f0d0 6e 64 65 78 20 63 75 72 73 6f 72 73 20 2a 2f 0a  ndex cursors */.
1f0e0 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
1f0f0 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 48 61  te3BtreeCursorHa
1f100 73 48 69 6e 74 28 70 43 2d 3e 75 63 2e 70 43 75  sHint(pC->uc.pCu
1f110 72 73 6f 72 2c 20 42 54 52 45 45 5f 53 45 45 4b  rsor, BTREE_SEEK
1f120 5f 45 51 29 3d 3d 30 20 29 3b 0a 0a 20 20 20 20  _EQ)==0 );..    
1f130 2f 2a 20 54 68 65 20 69 6e 70 75 74 20 76 61 6c  /* The input val
1f140 75 65 20 69 6e 20 50 33 20 6d 69 67 68 74 20 62  ue in P3 might b
1f150 65 20 6f 66 20 61 6e 79 20 74 79 70 65 3a 20 69  e of any type: i
1f160 6e 74 65 67 65 72 2c 20 72 65 61 6c 2c 20 73 74  nteger, real, st
1f170 72 69 6e 67 2c 0a 20 20 20 20 2a 2a 20 62 6c 6f  ring,.    ** blo
1f180 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74  b, or NULL.  But
1f190 20 69 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20   it needs to be 
1f1a0 61 6e 20 69 6e 74 65 67 65 72 20 62 65 66 6f 72  an integer befor
1f1b0 65 20 77 65 20 63 61 6e 20 64 6f 0a 20 20 20 20  e we can do.    
1f1c0 2a 2a 20 74 68 65 20 73 65 65 6b 2c 20 73 6f 20  ** the seek, so 
1f1d0 63 6f 6e 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20  convert it. */. 
1f1e0 20 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b     pIn3 = &aMem[
1f1f0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 69 66  pOp->p3];.    if
1f200 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
1f210 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65   (MEM_Int|MEM_Re
1f220 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45  al|MEM_Str))==ME
1f230 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20 61  M_Str ){.      a
1f240 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
1f250 69 74 79 28 70 49 6e 33 2c 20 30 29 3b 0a 20 20  ity(pIn3, 0);.  
1f260 20 20 7d 0a 20 20 20 20 69 4b 65 79 20 3d 20 73    }.    iKey = s
1f270 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
1f280 75 65 28 70 49 6e 33 29 3b 0a 0a 20 20 20 20 2f  ue(pIn3);..    /
1f290 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75  * If the P3 valu
1f2a0 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 63  e could not be c
1f2b0 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e  onverted into an
1f2c0 20 69 6e 74 65 67 65 72 20 77 69 74 68 6f 75 74   integer without
1f2d0 0a 20 20 20 20 2a 2a 20 6c 6f 73 73 20 6f 66 20  .    ** loss of 
1f2e0 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65  information, the
1f2f0 6e 20 73 70 65 63 69 61 6c 20 70 72 6f 63 65 73  n special proces
1f300 73 69 6e 67 20 69 73 20 72 65 71 75 69 72 65 64  sing is required
1f310 2e 2e 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 28  ... */.    if( (
1f320 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
1f330 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20  M_Int)==0 ){.   
1f340 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c     if( (pIn3->fl
1f350 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d  ags & MEM_Real)=
1f360 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  =0 ){.        /*
1f370 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65   If the P3 value
1f380 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65   cannot be conve
1f390 72 74 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b 69  rted into any ki
1f3a0 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c 0a  nd of a number,.
1f3b0 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20          ** then 
1f3c0 74 68 65 20 73 65 65 6b 20 69 73 20 6e 6f 74 20  the seek is not 
1f3d0 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75 6d  possible, so jum
1f3e0 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 20  p to P2 */.     
1f3f0 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
1f400 65 6e 28 31 2c 32 29 3b 20 67 6f 74 6f 20 6a 75  en(1,2); goto ju
1f410 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20  mp_to_p2;.      
1f420 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
1f430 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  ..      /* If th
1f440 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20  e approximation 
1f450 69 4b 65 79 20 69 73 20 6c 61 72 67 65 72 20 74  iKey is larger t
1f460 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72  han the actual r
1f470 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20  eal search.     
1f480 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69   ** term, substi
1f490 74 75 74 65 20 3e 3d 20 66 6f 72 20 3e 20 61 6e  tute >= for > an
1f4a0 64 20 3c 20 66 6f 72 20 3c 3d 2e 20 65 2e 67 2e  d < for <=. e.g.
1f4b0 20 69 66 20 74 68 65 20 73 65 61 72 63 68 20 74   if the search t
1f4c0 65 72 6d 0a 20 20 20 20 20 20 2a 2a 20 69 73 20  erm.      ** is 
1f4d0 34 2e 39 20 61 6e 64 20 74 68 65 20 69 6e 74 65  4.9 and the inte
1f4e0 67 65 72 20 61 70 70 72 6f 78 69 6d 61 74 69 6f  ger approximatio
1f4f0 6e 20 35 3a 0a 20 20 20 20 20 20 2a 2a 0a 20 20  n 5:.      **.  
1f500 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78      **        (x
1f510 20 3e 20 20 34 2e 39 29 20 20 20 20 2d 3e 20 20   >  4.9)    ->  
1f520 20 20 20 28 78 20 3e 3d 20 35 29 0a 20 20 20 20     (x >= 5).    
1f530 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78 20 3c    **        (x <
1f540 3d 20 34 2e 39 29 20 20 20 20 2d 3e 20 20 20 20  = 4.9)    ->    
1f550 20 28 78 20 3c 20 20 35 29 0a 20 20 20 20 20 20   (x <  5).      
1f560 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 49 6e  */.      if( pIn
1f570 33 2d 3e 75 2e 72 3c 28 64 6f 75 62 6c 65 29 69  3->u.r<(double)i
1f580 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61  Key ){.        a
1f590 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 45  ssert( OP_SeekGE
1f5a0 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 2d 31 29 20  ==(OP_SeekGT-1) 
1f5b0 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
1f5c0 74 28 20 4f 50 5f 53 65 65 6b 4c 54 3d 3d 28 4f  t( OP_SeekLT==(O
1f5d0 50 5f 53 65 65 6b 4c 45 2d 31 29 20 29 3b 0a 20  P_SeekLE-1) );. 
1f5e0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28         assert( (
1f5f0 4f 50 5f 53 65 65 6b 4c 45 20 26 20 30 78 30 30  OP_SeekLE & 0x00
1f600 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20  01)==(OP_SeekGT 
1f610 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20  & 0x0001) );.   
1f620 20 20 20 20 20 69 66 28 20 28 6f 63 20 26 20 30       if( (oc & 0
1f630 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b  x0001)==(OP_Seek
1f640 47 54 20 26 20 30 78 30 30 30 31 29 20 29 20 6f  GT & 0x0001) ) o
1f650 63 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  c--;.      }..  
1f660 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 61 70      /* If the ap
1f670 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79  proximation iKey
1f680 20 69 73 20 73 6d 61 6c 6c 65 72 20 74 68 61 6e   is smaller than
1f690 20 74 68 65 20 61 63 74 75 61 6c 20 72 65 61 6c   the actual real
1f6a0 20 73 65 61 72 63 68 0a 20 20 20 20 20 20 2a 2a   search.      **
1f6b0 20 74 65 72 6d 2c 20 73 75 62 73 74 69 74 75 74   term, substitut
1f6c0 65 20 3c 3d 20 66 6f 72 20 3c 20 61 6e 64 20 3e  e <= for < and >
1f6d0 20 66 6f 72 20 3e 3d 2e 20 20 2a 2f 0a 20 20 20   for >=.  */.   
1f6e0 20 20 20 65 6c 73 65 20 69 66 28 20 70 49 6e 33     else if( pIn3
1f6f0 2d 3e 75 2e 72 3e 28 64 6f 75 62 6c 65 29 69 4b  ->u.r>(double)iK
1f700 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  ey ){.        as
1f710 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 3d  sert( OP_SeekLE=
1f720 3d 28 4f 50 5f 53 65 65 6b 4c 54 2b 31 29 20 29  =(OP_SeekLT+1) )
1f730 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
1f740 28 20 4f 50 5f 53 65 65 6b 47 54 3d 3d 28 4f 50  ( OP_SeekGT==(OP
1f750 5f 53 65 65 6b 47 45 2b 31 29 20 29 3b 0a 20 20  _SeekGE+1) );.  
1f760 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 4f        assert( (O
1f770 50 5f 53 65 65 6b 4c 54 20 26 20 30 78 30 30 30  P_SeekLT & 0x000
1f780 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 20 26  1)==(OP_SeekGE &
1f790 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20 20   0x0001) );.    
1f7a0 20 20 20 20 69 66 28 20 28 6f 63 20 26 20 30 78      if( (oc & 0x
1f7b0 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 4c  0001)==(OP_SeekL
1f7c0 54 20 26 20 30 78 30 30 30 31 29 20 29 20 6f 63  T & 0x0001) ) oc
1f7d0 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ++;.      }.    
1f7e0 7d 20 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  } .    rc = sqli
1f7f0 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
1f800 70 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43  packed(pC->uc.pC
1f810 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 69  ursor, 0, (u64)i
1f820 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  Key, 0, &res);. 
1f830 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72     pC->movetoTar
1f840 67 65 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20  get = iKey;  /* 
1f850 55 73 65 64 20 62 79 20 4f 50 5f 44 65 6c 65 74  Used by OP_Delet
1f860 65 20 2a 2f 0a 20 20 20 20 69 66 28 20 72 63 21  e */.    if( rc!
1f870 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1f880 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1f890 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1f8a0 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
1f8b0 2f 2a 20 46 6f 72 20 61 20 63 75 72 73 6f 72 20  /* For a cursor 
1f8c0 77 69 74 68 20 74 68 65 20 42 54 52 45 45 5f 53  with the BTREE_S
1f8d0 45 45 4b 5f 45 51 20 68 69 6e 74 2c 20 6f 6e 6c  EEK_EQ hint, onl
1f8e0 79 20 74 68 65 20 4f 50 5f 53 65 65 6b 47 45 20  y the OP_SeekGE 
1f8f0 61 6e 64 0a 20 20 20 20 2a 2a 20 4f 50 5f 53 65  and.    ** OP_Se
1f900 65 6b 4c 45 20 6f 70 63 6f 64 65 73 20 61 72 65  ekLE opcodes are
1f910 20 61 6c 6c 6f 77 65 64 2c 20 61 6e 64 20 74 68   allowed, and th
1f920 65 73 65 20 6d 75 73 74 20 62 65 20 69 6d 6d 65  ese must be imme
1f930 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 65 64  diately followed
1f940 0a 20 20 20 20 2a 2a 20 62 79 20 61 6e 20 4f 50  .    ** by an OP
1f950 5f 49 64 78 47 54 20 6f 72 20 4f 50 5f 49 64 78  _IdxGT or OP_Idx
1f960 4c 54 20 6f 70 63 6f 64 65 2c 20 72 65 73 70 65  LT opcode, respe
1f970 63 74 69 76 65 6c 79 2c 20 77 69 74 68 20 74 68  ctively, with th
1f980 65 20 73 61 6d 65 20 6b 65 79 2e 0a 20 20 20 20  e same key..    
1f990 2a 2f 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  */.    if( sqlit
1f9a0 65 33 42 74 72 65 65 43 75 72 73 6f 72 48 61 73  e3BtreeCursorHas
1f9b0 48 69 6e 74 28 70 43 2d 3e 75 63 2e 70 43 75 72  Hint(pC->uc.pCur
1f9c0 73 6f 72 2c 20 42 54 52 45 45 5f 53 45 45 4b 5f  sor, BTREE_SEEK_
1f9d0 45 51 29 20 29 7b 0a 20 20 20 20 20 20 65 71 4f  EQ) ){.      eqO
1f9e0 6e 6c 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 61  nly = 1;.      a
1f9f0 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
1fa00 64 65 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c  de==OP_SeekGE ||
1fa10 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1fa20 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20 20  _SeekLE );.     
1fa30 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e   assert( pOp[1].
1fa40 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54  opcode==OP_IdxLT
1fa50 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64   || pOp[1].opcod
1fa60 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20  e==OP_IdxGT );. 
1fa70 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
1fa80 5b 31 5d 2e 70 31 3d 3d 70 4f 70 5b 30 5d 2e 70  [1].p1==pOp[0].p
1fa90 31 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  1 );.      asser
1faa0 74 28 20 70 4f 70 5b 31 5d 2e 70 32 3d 3d 70 4f  t( pOp[1].p2==pO
1fab0 70 5b 30 5d 2e 70 32 20 29 3b 0a 20 20 20 20 20  p[0].p2 );.     
1fac0 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e   assert( pOp[1].
1fad0 70 33 3d 3d 70 4f 70 5b 30 5d 2e 70 33 20 29 3b  p3==pOp[0].p3 );
1fae0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
1faf0 4f 70 5b 31 5d 2e 70 34 2e 69 3d 3d 70 4f 70 5b  Op[1].p4.i==pOp[
1fb00 30 5d 2e 70 34 2e 69 20 29 3b 0a 20 20 20 20 7d  0].p4.i );.    }
1fb10 0a 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70  ..    nField = p
1fb20 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 61 73  Op->p4.i;.    as
1fb30 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
1fb40 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
1fb50 20 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c     assert( nFiel
1fb60 64 3e 30 20 29 3b 0a 20 20 20 20 72 2e 70 4b 65  d>0 );.    r.pKe
1fb70 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79  yInfo = pC->pKey
1fb80 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65  Info;.    r.nFie
1fb90 6c 64 20 3d 20 28 75 31 36 29 6e 46 69 65 6c 64  ld = (u16)nField
1fba0 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65  ;..    /* The ne
1fbb0 78 74 20 6c 69 6e 65 20 6f 66 20 63 6f 64 65 20  xt line of code 
1fbc0 63 6f 6d 70 75 74 65 73 20 61 73 20 66 6f 6c 6c  computes as foll
1fbd0 6f 77 73 2c 20 6f 6e 6c 79 20 66 61 73 74 65 72  ows, only faster
1fbe0 3a 0a 20 20 20 20 2a 2a 20 20 20 69 66 28 20 6f  :.    **   if( o
1fbf0 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20  c==OP_SeekGT || 
1fc00 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 7b  oc==OP_SeekLE ){
1fc10 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65  .    **     r.de
1fc20 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20  fault_rc = -1;. 
1fc30 20 20 20 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a 20     **   }else{. 
1fc40 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65 66 61     **     r.defa
1fc50 75 6c 74 5f 72 63 20 3d 20 2b 31 3b 0a 20 20 20  ult_rc = +1;.   
1fc60 20 2a 2a 20 20 20 7d 0a 20 20 20 20 2a 2f 0a 20   **   }.    */. 
1fc70 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20     r.default_rc 
1fc80 3d 20 28 28 31 20 26 20 28 6f 63 20 2d 20 4f 50  = ((1 & (oc - OP
1fc90 5f 53 65 65 6b 4c 54 29 29 20 3f 20 2d 31 20 3a  _SeekLT)) ? -1 :
1fca0 20 2b 31 29 3b 0a 20 20 20 20 61 73 73 65 72 74   +1);.    assert
1fcb0 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 54 20  ( oc!=OP_SeekGT 
1fcc0 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d  || r.default_rc=
1fcd0 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  =-1 );.    asser
1fce0 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 45  t( oc!=OP_SeekLE
1fcf0 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63   || r.default_rc
1fd00 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65  ==-1 );.    asse
1fd10 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47  rt( oc!=OP_SeekG
1fd20 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72  E || r.default_r
1fd30 63 3d 3d 2b 31 20 29 3b 0a 20 20 20 20 61 73 73  c==+1 );.    ass
1fd40 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b  ert( oc!=OP_Seek
1fd50 4c 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f  LT || r.default_
1fd60 72 63 3d 3d 2b 31 20 29 3b 0a 0a 20 20 20 20 72  rc==+1 );..    r
1fd70 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f  .aMem = &aMem[pO
1fd80 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53  p->p3];.#ifdef S
1fd90 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
1fda0 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30  { int i; for(i=0
1fdb0 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b  ; i<r.nField; i+
1fdc0 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  +) assert( memIs
1fdd0 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d  Valid(&r.aMem[i]
1fde0 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20  ) ); }.#endif.  
1fdf0 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 72 2e 61    ExpandBlob(r.a
1fe00 4d 65 6d 29 3b 0a 20 20 20 20 72 2e 65 71 53 65  Mem);.    r.eqSe
1fe10 65 6e 20 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d  en = 0;.    rc =
1fe20 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
1fe30 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e  etoUnpacked(pC->
1fe40 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 2c 20  uc.pCursor, &r, 
1fe50 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20  0, 0, &res);.   
1fe60 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1fe70 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  OK ){.      goto
1fe80 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1fe90 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  ror;.    }.    i
1fea0 66 28 20 65 71 4f 6e 6c 79 20 26 26 20 72 2e 65  f( eqOnly && r.e
1feb0 71 53 65 65 6e 3d 3d 30 20 29 7b 0a 20 20 20 20  qSeen==0 ){.    
1fec0 20 20 61 73 73 65 72 74 28 20 72 65 73 21 3d 30    assert( res!=0
1fed0 20 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 73   );.      goto s
1fee0 65 65 6b 5f 6e 6f 74 5f 66 6f 75 6e 64 3b 0a 20  eek_not_found;. 
1fef0 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 2d 3e 64     }.  }.  pC->d
1ff00 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
1ff10 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  0;.  pC->cacheSt
1ff20 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
1ff30 4c 45 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  LE;.#ifdef SQLIT
1ff40 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33  E_TEST.  sqlite3
1ff50 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b  _search_count++;
1ff60 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 6f 63  .#endif.  if( oc
1ff70 3e 3d 4f 50 5f 53 65 65 6b 47 45 20 29 7b 20 20  >=OP_SeekGE ){  
1ff80 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53  assert( oc==OP_S
1ff90 65 65 6b 47 45 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekGE || oc==OP_
1ffa0 53 65 65 6b 47 54 20 29 3b 0a 20 20 20 20 69 66  SeekGT );.    if
1ffb0 28 20 72 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d  ( res<0 || (res=
1ffc0 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65  =0 && oc==OP_See
1ffd0 6b 47 54 29 20 29 7b 0a 20 20 20 20 20 20 72 65  kGT) ){.      re
1ffe0 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20  s = 0;.      rc 
1fff0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65  = sqlite3BtreeNe
20000 78 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  xt(pC->uc.pCurso
20010 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  r, &res);.      
20020 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
20030 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
20040 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
20050 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 65   }else{.      re
20060 73 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d  s = 0;.    }.  }
20070 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
20080 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20  ( oc==OP_SeekLT 
20090 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45  || oc==OP_SeekLE
200a0 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 3e   );.    if( res>
200b0 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20  0 || (res==0 && 
200c0 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 29 20 29  oc==OP_SeekLT) )
200d0 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b  {.      res = 0;
200e0 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
200f0 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73  te3BtreePrevious
20100 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
20110 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66   &res);.      if
20120 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
20130 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
20140 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
20150 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 72  else{.      /* r
20160 65 73 20 6d 69 67 68 74 20 62 65 20 6e 65 67 61  es might be nega
20170 74 69 76 65 20 62 65 63 61 75 73 65 20 74 68 65  tive because the
20180 20 74 61 62 6c 65 20 69 73 20 65 6d 70 74 79 2e   table is empty.
20190 20 20 43 68 65 63 6b 20 74 6f 0a 20 20 20 20 20    Check to.     
201a0 20 2a 2a 20 73 65 65 20 69 66 20 74 68 69 73 20   ** see if this 
201b0 69 73 20 74 68 65 20 63 61 73 65 2e 0a 20 20 20  is the case..   
201c0 20 20 20 2a 2f 0a 20 20 20 20 20 20 72 65 73 20     */.      res 
201d0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 45 6f  = sqlite3BtreeEo
201e0 66 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  f(pC->uc.pCursor
201f0 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 73 65 65  );.    }.  }.see
20200 6b 5f 6e 6f 74 5f 66 6f 75 6e 64 3a 0a 20 20 61  k_not_found:.  a
20210 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
20220 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68   );.  VdbeBranch
20230 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b  Taken(res!=0,2);
20240 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20  .  if( res ){.  
20250 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
20260 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 65  2;.  }else if( e
20270 71 4f 6e 6c 79 20 29 7b 0a 20 20 20 20 61 73 73  qOnly ){.    ass
20280 65 72 74 28 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f  ert( pOp[1].opco
20290 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 7c 7c 20  de==OP_IdxLT || 
202a0 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  pOp[1].opcode==O
202b0 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20 70  P_IdxGT );.    p
202c0 4f 70 2b 2b 3b 20 2f 2a 20 53 6b 69 70 20 74 68  Op++; /* Skip th
202d0 65 20 4f 50 5f 49 64 78 4c 74 20 6f 72 20 4f 50  e OP_IdxLt or OP
202e0 5f 49 64 78 47 54 20 74 68 61 74 20 66 6f 6c 6c  _IdxGT that foll
202f0 6f 77 73 20 2a 2f 0a 20 20 7d 0a 20 20 62 72 65  ows */.  }.  bre
20300 61 6b 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f 70 63  ak;.}.  ../* Opc
20310 6f 64 65 3a 20 46 6f 75 6e 64 20 50 31 20 50 32  ode: Found P1 P2
20320 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
20330 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
20340 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d  4].**.** If P4==
20350 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
20360 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20  P3 holds a blob 
20370 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d  constructed by M
20380 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a  akeRecord.  If.*
20390 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69  * P4>0 then regi
203a0 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66  ster P3 is the f
203b0 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73  irst of P4 regis
203c0 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61  ters that form a
203d0 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65  n unpacked.** re
203e0 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73  cord..**.** Curs
203f0 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69  or P1 is on an i
20400 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20  ndex btree.  If 
20410 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74  the record ident
20420 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20  ified by P3 and 
20430 50 34 0a 2a 2a 20 69 73 20 61 20 70 72 65 66 69  P4.** is a prefi
20440 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69  x of any entry i
20450 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70  n P1 then a jump
20460 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20 61   is made to P2 a
20470 6e 64 0a 2a 2a 20 50 31 20 69 73 20 6c 65 66 74  nd.** P1 is left
20480 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65   pointing at the
20490 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e   matching entry.
204a0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72  .**.** This oper
204b0 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65  ation leaves the
204c0 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61   cursor in a sta
204d0 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 20  te where it can 
204e0 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69  be.** advanced i
204f0 6e 20 74 68 65 20 66 6f 72 77 61 72 64 20 64 69  n the forward di
20500 72 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 4e 65  rection.  The Ne
20510 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77  xt instruction w
20520 69 6c 6c 20 77 6f 72 6b 2c 0a 2a 2a 20 62 75 74  ill work,.** but
20530 20 6e 6f 74 20 74 68 65 20 50 72 65 76 20 69 6e   not the Prev in
20540 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
20550 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f   See also: NotFo
20560 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c  und, NoConflict,
20570 20 4e 6f 74 45 78 69 73 74 73 2e 20 53 65 65 6b   NotExists. Seek
20580 47 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  Ge.*/./* Opcode:
20590 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20 50 32 20   NotFound P1 P2 
205a0 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
205b0 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
205c0 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30  ].**.** If P4==0
205d0 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
205e0 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63  3 holds a blob c
205f0 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61  onstructed by Ma
20600 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a  keRecord.  If.**
20610 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73   P4>0 then regis
20620 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69  ter P3 is the fi
20630 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74  rst of P4 regist
20640 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e  ers that form an
20650 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63   unpacked.** rec
20660 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73  ord..** .** Curs
20670 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69  or P1 is on an i
20680 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20  ndex btree.  If 
20690 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74  the record ident
206a0 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20  ified by P3 and 
206b0 50 34 0a 2a 2a 20 69 73 20 6e 6f 74 20 74 68 65  P4.** is not the
206c0 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65   prefix of any e
206d0 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20  ntry in P1 then 
206e0 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74  a jump is made t
206f0 6f 20 50 32 2e 20 20 49 66 20 50 31 20 0a 2a 2a  o P2.  If P1 .**
20700 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 6e   does contain an
20710 20 65 6e 74 72 79 20 77 68 6f 73 65 20 70 72 65   entry whose pre
20720 66 69 78 20 6d 61 74 63 68 65 73 20 74 68 65 20  fix matches the 
20730 50 33 2f 50 34 20 72 65 63 6f 72 64 20 74 68 65  P3/P4 record the
20740 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c  n control.** fal
20750 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ls through to th
20760 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
20770 6f 6e 20 61 6e 64 20 50 31 20 69 73 20 6c 65 66  on and P1 is lef
20780 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68  t pointing at th
20790 65 0a 2a 2a 20 6d 61 74 63 68 69 6e 67 20 65 6e  e.** matching en
207a0 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  try..**.** This 
207b0 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73  operation leaves
207c0 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61   the cursor in a
207d0 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20   state where it 
207e0 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76  cannot be.** adv
207f0 61 6e 63 65 64 20 69 6e 20 65 69 74 68 65 72 20  anced in either 
20800 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f  direction.  In o
20810 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
20820 4e 65 78 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a  Next and Prev.**
20830 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20   opcodes do not 
20840 77 6f 72 6b 20 61 66 74 65 72 20 74 68 69 73 20  work after this 
20850 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  operation..**.**
20860 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
20870 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20 4e 6f 43  , NotExists, NoC
20880 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 2f 2a 20 4f 70  onflict.*/./* Op
20890 63 6f 64 65 3a 20 4e 6f 43 6f 6e 66 6c 69 63 74  code: NoConflict
208a0 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
208b0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
208c0 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49  r[P3@P4].**.** I
208d0 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67  f P4==0 then reg
208e0 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61  ister P3 holds a
208f0 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65   blob constructe
20900 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e  d by MakeRecord.
20910 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65    If.** P4>0 the
20920 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  n register P3 is
20930 20 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34   the first of P4
20940 20 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20   registers that 
20950 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
20960 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a  .** record..** .
20970 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20  ** Cursor P1 is 
20980 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65  on an index btre
20990 65 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f 72  e.  If the recor
209a0 64 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  d identified by 
209b0 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 63 6f 6e  P3 and P4.** con
209c0 74 61 69 6e 73 20 61 6e 79 20 4e 55 4c 4c 20 76  tains any NULL v
209d0 61 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64  alue, jump immed
209e0 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49  iately to P2.  I
209f0 66 20 61 6c 6c 20 74 65 72 6d 73 20 6f 66 20 74  f all terms of t
20a00 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20 61 72 65  he.** record are
20a10 20 6e 6f 74 2d 4e 55 4c 4c 20 74 68 65 6e 20 61   not-NULL then a
20a20 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 74   check is done t
20a30 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61  o determine if a
20a40 6e 79 20 72 6f 77 20 69 6e 20 74 68 65 0a 2a 2a  ny row in the.**
20a50 20 50 31 20 69 6e 64 65 78 20 62 74 72 65 65 20   P1 index btree 
20a60 68 61 73 20 61 20 6d 61 74 63 68 69 6e 67 20 6b  has a matching k
20a70 65 79 20 70 72 65 66 69 78 2e 20 20 49 66 20 74  ey prefix.  If t
20a80 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 61 74 63  here are no matc
20a90 68 65 73 2c 20 6a 75 6d 70 0a 2a 2a 20 69 6d 6d  hes, jump.** imm
20aa0 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20  ediately to P2. 
20ab0 20 49 66 20 74 68 65 72 65 20 69 73 20 61 20 6d   If there is a m
20ac0 61 74 63 68 2c 20 66 61 6c 6c 20 74 68 72 6f 75  atch, fall throu
20ad0 67 68 20 61 6e 64 20 6c 65 61 76 65 20 74 68 65  gh and leave the
20ae0 20 50 31 0a 2a 2a 20 63 75 72 73 6f 72 20 70 6f   P1.** cursor po
20af0 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 6d 61  inting to the ma
20b00 74 63 68 69 6e 67 20 72 6f 77 2e 0a 2a 2a 0a 2a  tching row..**.*
20b10 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  * This opcode is
20b20 20 73 69 6d 69 6c 61 72 20 74 6f 20 4f 50 5f 4e   similar to OP_N
20b30 6f 74 46 6f 75 6e 64 20 77 69 74 68 20 74 68 65  otFound with the
20b40 20 65 78 63 65 70 74 69 6f 6e 73 20 74 68 61 74   exceptions that
20b50 20 74 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 69   the.** branch i
20b60 73 20 61 6c 77 61 79 73 20 74 61 6b 65 6e 20 69  s always taken i
20b70 66 20 61 6e 79 20 70 61 72 74 20 6f 66 20 74 68  f any part of th
20b80 65 20 73 65 61 72 63 68 20 6b 65 79 20 69 6e 70  e search key inp
20b90 75 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  ut is NULL..**.*
20ba0 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e  * This operation
20bb0 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
20bc0 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68  or in a state wh
20bd0 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65  ere it cannot be
20be0 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20  .** advanced in 
20bf0 65 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e  either direction
20c00 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
20c10 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20  s, the Next and 
20c20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20  Prev.** opcodes 
20c30 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65  do not work afte
20c40 72 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e  r this operation
20c50 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
20c60 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 46 6f 75 6e  : NotFound, Foun
20c70 64 2c 20 4e 6f 74 45 78 69 73 74 73 0a 2a 2f 0a  d, NotExists.*/.
20c80 63 61 73 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69  case OP_NoConfli
20c90 63 74 3a 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c  ct:     /* jump,
20ca0 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
20cb0 4e 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20 20 20  NotFound:       
20cc0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
20cd0 63 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b  case OP_Found: {
20ce0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
20cf0 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c   in3 */.  int al
20d00 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20 69  readyExists;.  i
20d10 6e 74 20 74 61 6b 65 4a 75 6d 70 3b 0a 20 20 69  nt takeJump;.  i
20d20 6e 74 20 69 69 3b 0a 20 20 56 64 62 65 43 75 72  nt ii;.  VdbeCur
20d30 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72  sor *pC;.  int r
20d40 65 73 3b 0a 20 20 63 68 61 72 20 2a 70 46 72 65  es;.  char *pFre
20d50 65 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  e;.  UnpackedRec
20d60 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b 0a 20 20  ord *pIdxKey;.  
20d70 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
20d80 3b 0a 20 20 63 68 61 72 20 61 54 65 6d 70 52 65  ;.  char aTempRe
20d90 63 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28  c[ROUND8(sizeof(
20da0 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 29 29  UnpackedRecord))
20db0 20 2b 20 73 69 7a 65 6f 66 28 4d 65 6d 29 2a 34   + sizeof(Mem)*4
20dc0 20 2b 20 37 5d 3b 0a 0a 23 69 66 64 65 66 20 53   + 7];..#ifdef S
20dd0 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 66 28  QLITE_TEST.  if(
20de0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
20df0 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 20 73 71  _NoConflict ) sq
20e00 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e  lite3_found_coun
20e10 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 61  t++;.#endif..  a
20e20 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
20e30 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
20e40 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
20e50 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
20e60 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
20e70 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
20e80 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
20e90 28 20 70 43 21 3d 30 20 29 3b 0a 23 69 66 64 65  ( pC!=0 );.#ifde
20ea0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
20eb0 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f   pC->seekOp = pO
20ec0 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69  p->opcode;.#endi
20ed0 66 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  f.  pIn3 = &aMem
20ee0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
20ef0 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
20f00 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
20f10 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
20f20 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20  ->uc.pCursor!=0 
20f30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
20f40 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20  >isTable==0 );. 
20f50 20 70 46 72 65 65 20 3d 20 30 3b 0a 20 20 69 66   pFree = 0;.  if
20f60 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 29 7b  ( pOp->p4.i>0 ){
20f70 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20  .    r.pKeyInfo 
20f80 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  = pC->pKeyInfo;.
20f90 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28      r.nField = (
20fa0 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  u16)pOp->p4.i;. 
20fb0 20 20 20 72 2e 61 4d 65 6d 20 3d 20 70 49 6e 33     r.aMem = pIn3
20fc0 3b 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20  ;.    for(ii=0; 
20fd0 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 69 2b  ii<r.nField; ii+
20fe0 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  +){.      assert
20ff0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e  ( memIsValid(&r.
21000 61 4d 65 6d 5b 69 69 5d 29 20 29 3b 0a 20 20 20  aMem[ii]) );.   
21010 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 26 72     ExpandBlob(&r
21020 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 23 69 66 64  .aMem[ii]);.#ifd
21030 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
21040 20 20 20 20 20 20 69 66 28 20 69 69 20 29 20 52        if( ii ) R
21050 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
21060 70 2d 3e 70 33 2b 69 69 2c 20 26 72 2e 61 4d 65  p->p3+ii, &r.aMe
21070 6d 5b 69 69 5d 29 3b 0a 23 65 6e 64 69 66 0a 20  m[ii]);.#endif. 
21080 20 20 20 7d 0a 20 20 20 20 70 49 64 78 4b 65 79     }.    pIdxKey
21090 20 3d 20 26 72 3b 0a 20 20 7d 65 6c 73 65 7b 0a   = &r;.  }else{.
210a0 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20 73 71      pIdxKey = sq
210b0 6c 69 74 65 33 56 64 62 65 41 6c 6c 6f 63 55 6e  lite3VdbeAllocUn
210c0 70 61 63 6b 65 64 52 65 63 6f 72 64 28 0a 20 20  packedRecord(.  
210d0 20 20 20 20 20 20 70 43 2d 3e 70 4b 65 79 49 6e        pC->pKeyIn
210e0 66 6f 2c 20 61 54 65 6d 70 52 65 63 2c 20 73 69  fo, aTempRec, si
210f0 7a 65 6f 66 28 61 54 65 6d 70 52 65 63 29 2c 20  zeof(aTempRec), 
21100 26 70 46 72 65 65 0a 20 20 20 20 29 3b 0a 20 20  &pFree.    );.  
21110 20 20 69 66 28 20 70 49 64 78 4b 65 79 3d 3d 30    if( pIdxKey==0
21120 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
21130 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 33      assert( pIn3
21140 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
21150 6f 62 20 29 3b 0a 20 20 20 20 45 78 70 61 6e 64  ob );.    Expand
21160 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20 20  Blob(pIn3);.    
21170 73 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f 72  sqlite3VdbeRecor
21180 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65 79  dUnpack(pC->pKey
21190 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70  Info, pIn3->n, p
211a0 49 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b 65 79 29  In3->z, pIdxKey)
211b0 3b 0a 20 20 7d 0a 20 20 70 49 64 78 4b 65 79 2d  ;.  }.  pIdxKey-
211c0 3e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b  >default_rc = 0;
211d0 0a 20 20 74 61 6b 65 4a 75 6d 70 20 3d 20 30 3b  .  takeJump = 0;
211e0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
211f0 64 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63  de==OP_NoConflic
21200 74 20 29 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20  t ){.    /* For 
21210 74 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63  the OP_NoConflic
21220 74 20 6f 70 63 6f 64 65 2c 20 74 61 6b 65 20 74  t opcode, take t
21230 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 79 20 6f  he jump if any o
21240 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 69 6e 70  f the.    ** inp
21250 75 74 20 66 69 65 6c 64 73 20 61 72 65 20 4e 55  ut fields are NU
21260 4c 4c 2c 20 73 69 6e 63 65 20 61 6e 79 20 6b 65  LL, since any ke
21270 79 20 77 69 74 68 20 61 20 4e 55 4c 4c 20 77 69  y with a NULL wi
21280 6c 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a 20 63 6f  ll not.    ** co
21290 6e 66 6c 69 63 74 20 2a 2f 0a 20 20 20 20 66 6f  nflict */.    fo
212a0 72 28 69 69 3d 30 3b 20 69 69 3c 70 49 64 78 4b  r(ii=0; ii<pIdxK
212b0 65 79 2d 3e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b  ey->nField; ii++
212c0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 49 64  ){.      if( pId
212d0 78 4b 65 79 2d 3e 61 4d 65 6d 5b 69 69 5d 2e 66  xKey->aMem[ii].f
212e0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
212f0 29 7b 0a 20 20 20 20 20 20 20 20 74 61 6b 65 4a  ){.        takeJ
21300 75 6d 70 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  ump = 1;.       
21310 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
21320 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 63 20 3d      }.  }.  rc =
21330 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
21340 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e  etoUnpacked(pC->
21350 75 63 2e 70 43 75 72 73 6f 72 2c 20 70 49 64 78  uc.pCursor, pIdx
21360 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72 65 73 29  Key, 0, 0, &res)
21370 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65  ;.  sqlite3DbFre
21380 65 28 64 62 2c 20 70 46 72 65 65 29 3b 0a 20 20  e(db, pFree);.  
21390 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
213a0 4b 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 61 62  K ){.    goto ab
213b0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
213c0 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b  ;.  }.  pC->seek
213d0 52 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20  Result = res;.  
213e0 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d 20  alreadyExists = 
213f0 28 72 65 73 3d 3d 30 29 3b 0a 20 20 70 43 2d 3e  (res==0);.  pC->
21400 6e 75 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c 72 65  nullRow = 1-alre
21410 61 64 79 45 78 69 73 74 73 3b 0a 20 20 70 43 2d  adyExists;.  pC-
21420 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
21430 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 0;.  pC->cache
21440 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
21450 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d  TALE;.  if( pOp-
21460 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e  >opcode==OP_Foun
21470 64 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61  d ){.    VdbeBra
21480 6e 63 68 54 61 6b 65 6e 28 61 6c 72 65 61 64 79  nchTaken(already
21490 45 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20  Exists!=0,2);.  
214a0 20 20 69 66 28 20 61 6c 72 65 61 64 79 45 78 69    if( alreadyExi
214b0 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  sts ) goto jump_
214c0 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a  to_p2;.  }else{.
214d0 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
214e0 6b 65 6e 28 74 61 6b 65 4a 75 6d 70 7c 7c 61 6c  ken(takeJump||al
214f0 72 65 61 64 79 45 78 69 73 74 73 3d 3d 30 2c 32  readyExists==0,2
21500 29 3b 0a 20 20 20 20 69 66 28 20 74 61 6b 65 4a  );.    if( takeJ
21510 75 6d 70 20 7c 7c 20 21 61 6c 72 65 61 64 79 45  ump || !alreadyE
21520 78 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d  xists ) goto jum
21530 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62  p_to_p2;.  }.  b
21540 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
21550 64 65 3a 20 4e 6f 74 45 78 69 73 74 73 20 50 31  de: NotExists P1
21560 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
21570 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72  nopsis: intkey=r
21580 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  [P3].**.** P1 is
21590 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20   the index of a 
215a0 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61  cursor open on a
215b0 6e 20 53 51 4c 20 74 61 62 6c 65 20 62 74 72 65  n SQL table btre
215c0 65 20 28 77 69 74 68 20 69 6e 74 65 67 65 72 0a  e (with integer.
215d0 2a 2a 20 6b 65 79 73 29 2e 20 20 50 33 20 69 73  ** keys).  P3 is
215e0 20 61 6e 20 69 6e 74 65 67 65 72 20 72 6f 77 69   an integer rowi
215f0 64 2e 20 20 49 66 20 50 31 20 64 6f 65 73 20 6e  d.  If P1 does n
21600 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63  ot contain a rec
21610 6f 72 64 20 77 69 74 68 0a 2a 2a 20 72 6f 77 69  ord with.** rowi
21620 64 20 50 33 20 74 68 65 6e 20 6a 75 6d 70 20 69  d P3 then jump i
21630 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
21640 2e 20 20 4f 72 2c 20 69 66 20 50 32 20 69 73 20  .  Or, if P2 is 
21650 30 2c 20 72 61 69 73 65 20 61 6e 0a 2a 2a 20 53  0, raise an.** S
21660 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 65 72  QLITE_CORRUPT er
21670 72 6f 72 2e 20 49 66 20 50 31 20 64 6f 65 73 20  ror. If P1 does 
21680 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64  contain a record
21690 20 77 69 74 68 20 72 6f 77 69 64 20 50 33 20 74   with rowid P3 t
216a0 68 65 6e 20 0a 2a 2a 20 6c 65 61 76 65 20 74 68  hen .** leave th
216b0 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e  e cursor pointin
216c0 67 20 61 74 20 74 68 61 74 20 72 65 63 6f 72 64  g at that record
216d0 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67   and fall throug
216e0 68 20 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a 2a  h to the next.**
216f0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
21700 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 46 6f  .** The OP_NotFo
21710 75 6e 64 20 6f 70 63 6f 64 65 20 70 65 72 66 6f  und opcode perfo
21720 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70 65  rms the same ope
21730 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64 65 78 20  ration on index 
21740 62 74 72 65 65 73 0a 2a 2a 20 28 77 69 74 68 20  btrees.** (with 
21750 61 72 62 69 74 72 61 72 79 20 6d 75 6c 74 69 2d  arbitrary multi-
21760 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a  value keys)..**.
21770 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
21780 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
21790 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72   in a state wher
217a0 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 61  e it cannot be a
217b0 64 76 61 6e 63 65 64 0a 2a 2a 20 69 6e 20 65 69  dvanced.** in ei
217c0 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20  ther direction. 
217d0 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
217e0 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72   the Next and Pr
217f0 65 76 20 6f 70 63 6f 64 65 73 20 77 69 6c 6c 0a  ev opcodes will.
21800 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c  ** not work foll
21810 6f 77 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64  owing this opcod
21820 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  e..**.** See als
21830 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
21840 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a  nd, NoConflict.*
21850 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69  /.case OP_NotExi
21860 73 74 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  sts: {        /*
21870 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
21880 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
21890 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
218a0 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  r;.  int res;.  
218b0 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20 70 49 6e  u64 iKey;..  pIn
218c0 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
218d0 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  3];.  assert( pI
218e0 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
218f0 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Int );.  assert(
21900 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
21910 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
21920 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
21930 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
21940 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
21950 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
21960 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b  DEBUG.  pC->seek
21970 4f 70 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20  Op = 0;.#endif. 
21980 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
21990 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74  able );.  assert
219a0 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
219b0 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
219c0 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75  .  pCrsr = pC->u
219d0 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73  c.pCursor;.  ass
219e0 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b  ert( pCrsr!=0 );
219f0 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 69 4b  .  res = 0;.  iK
21a00 65 79 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a  ey = pIn3->u.i;.
21a10 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
21a20 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
21a30 64 28 70 43 72 73 72 2c 20 30 2c 20 69 4b 65 79  d(pCrsr, 0, iKey
21a40 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 61 73  , 0, &res);.  as
21a50 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
21a60 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29 3b  _OK || res==0 );
21a70 0a 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72  .  pC->movetoTar
21a80 67 65 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20  get = iKey;  /* 
21a90 55 73 65 64 20 62 79 20 4f 50 5f 44 65 6c 65 74  Used by OP_Delet
21aa0 65 20 2a 2f 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  e */.  pC->nullR
21ab0 6f 77 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  ow = 0;.  pC->ca
21ac0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
21ad0 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 64  E_STALE;.  pC->d
21ae0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
21af0 30 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  0;.  VdbeBranchT
21b00 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a  aken(res!=0,2);.
21b10 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74    pC->seekResult
21b20 20 3d 20 72 65 73 3b 0a 20 20 69 66 28 20 72 65   = res;.  if( re
21b30 73 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65  s!=0 ){.    asse
21b40 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
21b50 4b 20 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  K );.    if( pOp
21b60 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ->p2==0 ){.     
21b70 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52   rc = SQLITE_COR
21b80 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 7d  RUPT_BKPT;.    }
21b90 65 6c 73 65 7b 0a 20 20 20 20 20 20 67 6f 74 6f  else{.      goto
21ba0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20   jump_to_p2;.   
21bb0 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20   }.  }.  if( rc 
21bc0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
21bd0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
21be0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
21bf0 3a 20 53 65 71 75 65 6e 63 65 20 50 31 20 50 32  : Sequence P1 P2
21c00 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
21c10 69 73 3a 20 72 5b 50 32 5d 3d 63 75 72 73 6f 72  is: r[P2]=cursor
21c20 5b 50 31 5d 2e 63 74 72 2b 2b 0a 2a 2a 0a 2a 2a  [P1].ctr++.**.**
21c30 20 46 69 6e 64 20 74 68 65 20 6e 65 78 74 20 61   Find the next a
21c40 76 61 69 6c 61 62 6c 65 20 73 65 71 75 65 6e 63  vailable sequenc
21c50 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 75 72  e number for cur
21c60 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74 65  sor P1..** Write
21c70 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75   the sequence nu
21c80 6d 62 65 72 20 69 6e 74 6f 20 72 65 67 69 73 74  mber into regist
21c90 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65  er P2..** The se
21ca0 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f 6e  quence number on
21cb0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 69   the cursor is i
21cc0 6e 63 72 65 6d 65 6e 74 65 64 20 61 66 74 65 72  ncremented after
21cd0 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75 63   this.** instruc
21ce0 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65 20  tion.  .*/.case 
21cf0 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20 20  OP_Sequence: {  
21d00 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
21d10 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
21d20 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
21d30 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
21d40 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61  ;.  assert( p->a
21d50 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30  pCsr[pOp->p1]!=0
21d60 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
21d70 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d  >apCsr[pOp->p1]-
21d80 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59  >eCurType!=CURTY
21d90 50 45 5f 56 54 41 42 20 29 3b 0a 20 20 70 4f 75  PE_VTAB );.  pOu
21da0 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
21db0 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f  se(p, pOp);.  pO
21dc0 75 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61 70 43  ut->u.i = p->apC
21dd0 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71  sr[pOp->p1]->seq
21de0 43 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72 65 61 6b  Count++;.  break
21df0 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ;.}.../* Opcode:
21e00 20 4e 65 77 52 6f 77 69 64 20 50 31 20 50 32 20   NewRowid P1 P2 
21e10 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
21e20 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a  is: r[P2]=rowid.
21e30 2a 2a 0a 2a 2a 20 47 65 74 20 61 20 6e 65 77 20  **.** Get a new 
21e40 69 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20 6e  integer record n
21e50 75 6d 62 65 72 20 28 61 2e 6b 2e 61 20 22 72 6f  umber (a.k.a "ro
21e60 77 69 64 22 29 20 75 73 65 64 20 61 73 20 74 68  wid") used as th
21e70 65 20 6b 65 79 20 74 6f 20 61 20 74 61 62 6c 65  e key to a table
21e80 2e 0a 2a 2a 20 54 68 65 20 72 65 63 6f 72 64 20  ..** The record 
21e90 6e 75 6d 62 65 72 20 69 73 20 6e 6f 74 20 70 72  number is not pr
21ea0 65 76 69 6f 75 73 6c 79 20 75 73 65 64 20 61 73  eviously used as
21eb0 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20 64 61   a key in the da
21ec0 74 61 62 61 73 65 0a 2a 2a 20 74 61 62 6c 65 20  tabase.** table 
21ed0 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 70  that cursor P1 p
21ee0 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68 65 20 6e  oints to.  The n
21ef0 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  ew record number
21f00 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 77   is written.** w
21f10 72 69 74 74 65 6e 20 74 6f 20 72 65 67 69 73 74  ritten to regist
21f20 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P2..**.** If 
21f30 50 33 3e 30 20 74 68 65 6e 20 50 33 20 69 73 20  P3>0 then P3 is 
21f40 61 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 68  a register in th
21f50 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20  e root frame of 
21f60 74 68 69 73 20 56 44 42 45 20 74 68 61 74 20 68  this VDBE that h
21f70 6f 6c 64 73 20 0a 2a 2a 20 74 68 65 20 6c 61 72  olds .** the lar
21f80 67 65 73 74 20 70 72 65 76 69 6f 75 73 6c 79 20  gest previously 
21f90 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64  generated record
21fa0 20 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e 65 77 20   number. No new 
21fb0 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 73 20 61  record numbers a
21fc0 72 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20 74 6f  re.** allowed to
21fd0 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20 74 68   be less than th
21fe0 69 73 20 76 61 6c 75 65 2e 20 57 68 65 6e 20 74  is value. When t
21ff0 68 69 73 20 76 61 6c 75 65 20 72 65 61 63 68 65  his value reache
22000 73 20 69 74 73 20 6d 61 78 69 6d 75 6d 2c 20 0a  s its maximum, .
22010 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f 46 55 4c  ** an SQLITE_FUL
22020 4c 20 65 72 72 6f 72 20 69 73 20 67 65 6e 65 72  L error is gener
22030 61 74 65 64 2e 20 54 68 65 20 50 33 20 72 65 67  ated. The P3 reg
22040 69 73 74 65 72 20 69 73 20 75 70 64 61 74 65 64  ister is updated
22050 20 77 69 74 68 20 74 68 65 20 27 0a 2a 2a 20 67   with the '.** g
22060 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64 20  enerated record 
22070 6e 75 6d 62 65 72 2e 20 54 68 69 73 20 50 33 20  number. This P3 
22080 6d 65 63 68 61 6e 69 73 6d 20 69 73 20 75 73 65  mechanism is use
22090 64 20 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65 6d  d to help implem
220a0 65 6e 74 20 74 68 65 0a 2a 2a 20 41 55 54 4f 49  ent the.** AUTOI
220b0 4e 43 52 45 4d 45 4e 54 20 66 65 61 74 75 72 65  NCREMENT feature
220c0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 77  ..*/.case OP_New
220d0 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20  Rowid: {        
220e0 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
220f0 69 36 34 20 76 3b 20 20 20 20 20 20 20 20 20 20  i64 v;          
22100 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
22110 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62  w rowid */.  Vdb
22120 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20  eCursor *pC;    
22130 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66      /* Cursor of
22140 20 74 61 62 6c 65 20 74 6f 20 67 65 74 20 74 68   table to get th
22150 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20  e new rowid */. 
22160 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20   int res;       
22170 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c          /* Resul
22180 74 20 6f 66 20 61 6e 20 73 71 6c 69 74 65 33 42  t of an sqlite3B
22190 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20  treeLast() */.  
221a0 69 6e 74 20 63 6e 74 3b 20 20 20 20 20 20 20 20  int cnt;        
221b0 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65         /* Counte
221c0 72 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e  r to limit the n
221d0 75 6d 62 65 72 20 6f 66 20 73 65 61 72 63 68 65  umber of searche
221e0 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  s */.  Mem *pMem
221f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
22200 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
22210 67 20 6c 61 72 67 65 73 74 20 72 6f 77 69 64 20  g largest rowid 
22220 66 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  for AUTOINCREMEN
22230 54 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65  T */.  VdbeFrame
22240 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 2f 2a   *pFrame;     /*
22250 20 52 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 56   Root frame of V
22260 44 42 45 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b  DBE */..  v = 0;
22270 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 70 4f  .  res = 0;.  pO
22280 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
22290 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61  ase(p, pOp);.  a
222a0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
222b0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
222c0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
222d0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
222e0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
222f0 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
22300 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
22310 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
22320 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75  .  assert( pC->u
22330 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  c.pCursor!=0 );.
22340 20 20 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e    {.    /* The n
22350 65 78 74 20 72 6f 77 69 64 20 6f 72 20 72 65 63  ext rowid or rec
22360 6f 72 64 20 6e 75 6d 62 65 72 20 28 64 69 66 66  ord number (diff
22370 65 72 65 6e 74 20 74 65 72 6d 73 20 66 6f 72 20  erent terms for 
22380 74 68 65 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20  the same.    ** 
22390 74 68 69 6e 67 29 20 69 73 20 6f 62 74 61 69 6e  thing) is obtain
223a0 65 64 20 69 6e 20 61 20 74 77 6f 2d 73 74 65 70  ed in a two-step
223b0 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20   algorithm..    
223c0 2a 2a 0a 20 20 20 20 2a 2a 20 46 69 72 73 74 20  **.    ** First 
223d0 77 65 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69  we attempt to fi
223e0 6e 64 20 74 68 65 20 6c 61 72 67 65 73 74 20 65  nd the largest e
223f0 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20 61 6e  xisting rowid an
22400 64 20 61 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a  d add one.    **
22410 20 74 6f 20 74 68 61 74 2e 20 20 42 75 74 20 69   to that.  But i
22420 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78  f the largest ex
22430 69 73 74 69 6e 67 20 72 6f 77 69 64 20 69 73 20  isting rowid is 
22440 61 6c 72 65 61 64 79 20 74 68 65 20 6d 61 78 69  already the maxi
22450 6d 75 6d 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74  mum.    ** posit
22460 69 76 65 20 69 6e 74 65 67 65 72 2c 20 77 65 20  ive integer, we 
22470 68 61 76 65 20 74 6f 20 66 61 6c 6c 20 74 68 72  have to fall thr
22480 6f 75 67 68 20 74 6f 20 74 68 65 20 73 65 63 6f  ough to the seco
22490 6e 64 0a 20 20 20 20 2a 2a 20 70 72 6f 62 61 62  nd.    ** probab
224a0 69 6c 69 73 74 69 63 20 61 6c 67 6f 72 69 74 68  ilistic algorith
224b0 6d 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  m.    **.    ** 
224c0 54 68 65 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72  The second algor
224d0 69 74 68 6d 20 69 73 20 74 6f 20 73 65 6c 65 63  ithm is to selec
224e0 74 20 61 20 72 6f 77 69 64 20 61 74 20 72 61 6e  t a rowid at ran
224f0 64 6f 6d 20 61 6e 64 20 73 65 65 20 69 66 0a 20  dom and see if. 
22500 20 20 20 2a 2a 20 69 74 20 61 6c 72 65 61 64 79     ** it already
22510 20 65 78 69 73 74 73 20 69 6e 20 74 68 65 20 74   exists in the t
22520 61 62 6c 65 2e 20 20 49 66 20 69 74 20 64 6f 65  able.  If it doe
22530 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 77 65 20  s not exist, we 
22540 68 61 76 65 0a 20 20 20 20 2a 2a 20 73 75 63 63  have.    ** succ
22550 65 65 64 65 64 2e 20 20 49 66 20 74 68 65 20 72  eeded.  If the r
22560 61 6e 64 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73  andom rowid does
22570 20 65 78 69 73 74 2c 20 77 65 20 73 65 6c 65 63   exist, we selec
22580 74 20 61 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20  t a new one.    
22590 2a 2a 20 61 6e 64 20 74 72 79 20 61 67 61 69 6e  ** and try again
225a0 2c 20 75 70 20 74 6f 20 31 30 30 20 74 69 6d 65  , up to 100 time
225b0 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73  s..    */.    as
225c0 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
225d0 65 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  e );..#ifdef SQL
225e0 49 54 45 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a  ITE_32BIT_ROWID.
225f0 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52  #   define MAX_R
22600 4f 57 49 44 20 30 78 37 66 66 66 66 66 66 66 0a  OWID 0x7fffffff.
22610 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d  #else.    /* Som
22620 65 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70  e compilers comp
22630 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74  lain about const
22640 61 6e 74 73 20 6f 66 20 74 68 65 20 66 6f 72 6d  ants of the form
22650 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66   0x7ffffffffffff
22660 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65  fff..    ** Othe
22670 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75  rs complain abou
22680 74 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66  t 0x7fffffffffff
22690 66 66 66 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f  fffffLL.  The fo
226a0 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 73 65  llowing macro se
226b0 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72  ems.    ** to pr
226c0 6f 76 69 64 65 20 74 68 65 20 63 6f 6e 73 74 61  ovide the consta
226d0 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20  nt while making 
226e0 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20 68 61  all compilers ha
226f0 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20  ppy..    */.#   
22700 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44  define MAX_ROWID
22710 20 20 28 69 36 34 29 28 20 28 28 28 75 36 34 29    (i64)( (((u64)
22720 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29  0x7fffffff)<<32)
22730 20 7c 20 28 75 36 34 29 30 78 66 66 66 66 66 66   | (u64)0xffffff
22740 66 66 20 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20  ff ).#endif..   
22750 20 69 66 28 20 21 70 43 2d 3e 75 73 65 52 61 6e   if( !pC->useRan
22760 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20  domRowid ){.    
22770 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
22780 72 65 65 4c 61 73 74 28 70 43 2d 3e 75 63 2e 70  reeLast(pC->uc.p
22790 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20  Cursor, &res);. 
227a0 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
227b0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
227c0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
227d0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
227e0 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72 65 73   }.      if( res
227f0 20 29 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20   ){.        v = 
22800 31 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 36  1;   /* IMP: R-6
22810 31 39 31 34 2d 34 38 30 37 34 20 2a 2f 0a 20 20  1914-48074 */.  
22820 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
22830 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
22840 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56  e3BtreeCursorIsV
22850 61 6c 69 64 28 70 43 2d 3e 75 63 2e 70 43 75 72  alid(pC->uc.pCur
22860 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20  sor) );.        
22870 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
22880 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 75 63 2e  eKeySize(pC->uc.
22890 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20  pCursor, &v);.  
228a0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72 63        assert( rc
228b0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20  ==SQLITE_OK );  
228c0 20 2f 2a 20 43 61 6e 6e 6f 74 20 66 61 69 6c 20   /* Cannot fail 
228d0 66 6f 6c 6c 6f 77 69 6e 67 20 42 74 72 65 65 4c  following BtreeL
228e0 61 73 74 28 29 20 2a 2f 0a 20 20 20 20 20 20 20  ast() */.       
228f0 20 69 66 28 20 76 3e 3d 4d 41 58 5f 52 4f 57 49   if( v>=MAX_ROWI
22900 44 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70  D ){.          p
22910 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
22920 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d  d = 1;.        }
22930 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
22940 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52  v++;   /* IMP: R
22950 2d 32 39 35 33 38 2d 33 34 39 38 37 20 2a 2f 0a  -29538-34987 */.
22960 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
22970 7d 0a 20 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66  }.    }..#ifndef
22980 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
22990 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20 20 69  OINCREMENT.    i
229a0 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  f( pOp->p3 ){.  
229b0 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68      /* Assert th
229c0 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64  at P3 is a valid
229d0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f   memory cell. */
229e0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
229f0 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20  Op->p3>0 );.    
22a00 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20    if( p->pFrame 
22a10 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 70  ){.        for(p
22a20 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b  Frame=p->pFrame;
22a30 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74   pFrame->pParent
22a40 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d  ; pFrame=pFrame-
22a50 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 20  >pParent);.     
22a60 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61     /* Assert tha
22a70 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20  t P3 is a valid 
22a80 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a  memory cell. */.
22a90 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
22aa0 70 4f 70 2d 3e 70 33 3c 3d 70 46 72 61 6d 65 2d  pOp->p3<=pFrame-
22ab0 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20  >nMem );.       
22ac0 20 70 4d 65 6d 20 3d 20 26 70 46 72 61 6d 65 2d   pMem = &pFrame-
22ad0 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  >aMem[pOp->p3];.
22ae0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
22af0 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74       /* Assert t
22b00 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69  hat P3 is a vali
22b10 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a  d memory cell. *
22b20 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  /.        assert
22b30 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  ( pOp->p3<=(p->n
22b40 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
22b50 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70  or) );.        p
22b60 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
22b70 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65  >p3];.        me
22b80 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
22b90 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 7d  , pMem);.      }
22ba0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
22bb0 65 6d 49 73 56 61 6c 69 64 28 70 4d 65 6d 29 20  emIsValid(pMem) 
22bc0 29 3b 0a 0a 20 20 20 20 20 20 52 45 47 49 53 54  );..      REGIST
22bd0 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
22be0 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 73  , pMem);.      s
22bf0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
22c00 65 67 65 72 69 66 79 28 70 4d 65 6d 29 3b 0a 20  egerify(pMem);. 
22c10 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4d       assert( (pM
22c20 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  em->flags & MEM_
22c30 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f 2a 20 6d  Int)!=0 );  /* m
22c40 65 6d 28 50 33 29 20 68 6f 6c 64 73 20 61 6e 20  em(P3) holds an 
22c50 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20 20 20 20  integer */.     
22c60 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d   if( pMem->u.i==
22c70 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20 70 43 2d  MAX_ROWID || pC-
22c80 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
22c90 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
22ca0 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f  SQLITE_FULL;   /
22cb0 2a 20 49 4d 50 3a 20 52 2d 31 32 32 37 35 2d 36  * IMP: R-12275-6
22cc0 31 33 33 38 20 2a 2f 0a 20 20 20 20 20 20 20 20  1338 */.        
22cd0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
22ce0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
22cf0 0a 20 20 20 20 20 20 69 66 28 20 76 3c 70 4d 65  .      if( v<pMe
22d00 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20  m->u.i+1 ){.    
22d10 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e      v = pMem->u.
22d20 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20  i + 1;.      }. 
22d30 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d       pMem->u.i =
22d40 20 76 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66   v;.    }.#endif
22d50 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 75 73 65  .    if( pC->use
22d60 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20  RandomRowid ){. 
22d70 20 20 20 20 20 2f 2a 20 49 4d 50 4c 45 4d 45 4e       /* IMPLEMEN
22d80 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30 37 36  TATION-OF: R-076
22d90 37 37 2d 34 31 38 38 31 20 49 66 20 74 68 65 20  77-41881 If the 
22da0 6c 61 72 67 65 73 74 20 52 4f 57 49 44 20 69 73  largest ROWID is
22db0 20 65 71 75 61 6c 20 74 6f 20 74 68 65 0a 20 20   equal to the.  
22dc0 20 20 20 20 2a 2a 20 6c 61 72 67 65 73 74 20 70      ** largest p
22dd0 6f 73 73 69 62 6c 65 20 69 6e 74 65 67 65 72 20  ossible integer 
22de0 28 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  (922337203685477
22df0 35 38 30 37 29 20 74 68 65 6e 20 74 68 65 20 64  5807) then the d
22e00 61 74 61 62 61 73 65 0a 20 20 20 20 20 20 2a 2a  atabase.      **
22e10 20 65 6e 67 69 6e 65 20 73 74 61 72 74 73 20 70   engine starts p
22e20 69 63 6b 69 6e 67 20 70 6f 73 69 74 69 76 65 20  icking positive 
22e30 63 61 6e 64 69 64 61 74 65 20 52 4f 57 49 44 73  candidate ROWIDs
22e40 20 61 74 20 72 61 6e 64 6f 6d 20 75 6e 74 69 6c   at random until
22e50 0a 20 20 20 20 20 20 2a 2a 20 69 74 20 66 69 6e  .      ** it fin
22e60 64 73 20 6f 6e 65 20 74 68 61 74 20 69 73 20 6e  ds one that is n
22e70 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73  ot previously us
22e80 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  ed. */.      ass
22e90 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20  ert( pOp->p3==0 
22ea0 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e 6e 6f 74  );  /* We cannot
22eb0 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d 20 72 6f   be in random ro
22ec0 77 69 64 20 6d 6f 64 65 20 69 66 20 74 68 69 73  wid mode if this
22ed0 20 69 73 0a 20 20 20 20 20 20 20 20 20 20 20 20   is.            
22ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ef0 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e 43 52 45   ** an AUTOINCRE
22f00 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a 2f 0a 20  MENT table. */. 
22f10 20 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20 20       cnt = 0;.  
22f20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20      do{.        
22f30 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d 6e 65  sqlite3_randomne
22f40 73 73 28 73 69 7a 65 6f 66 28 76 29 2c 20 26 76  ss(sizeof(v), &v
22f50 29 3b 0a 20 20 20 20 20 20 20 20 76 20 26 3d 20  );.        v &= 
22f60 28 4d 41 58 5f 52 4f 57 49 44 3e 3e 31 29 3b 20  (MAX_ROWID>>1); 
22f70 76 2b 2b 3b 20 20 2f 2a 20 45 6e 73 75 72 65 20  v++;  /* Ensure 
22f80 74 68 61 74 20 76 20 69 73 20 67 72 65 61 74 65  that v is greate
22f90 72 20 74 68 61 6e 20 7a 65 72 6f 20 2a 2f 0a 20  r than zero */. 
22fa0 20 20 20 20 20 7d 77 68 69 6c 65 28 20 20 28 28       }while(  ((
22fb0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
22fc0 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
22fd0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
22fe0 30 2c 20 28 75 36 34 29 76 2c 0a 20 20 20 20 20  0, (u64)v,.     
22ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23010 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 26              0, &
23020 72 65 73 29 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b  res))==SQLITE_OK
23030 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26  ).            &&
23040 20 28 72 65 73 3d 3d 30 29 0a 20 20 20 20 20 20   (res==0).      
23050 20 20 20 20 20 20 26 26 20 28 2b 2b 63 6e 74 3c        && (++cnt<
23060 31 30 30 29 29 3b 0a 20 20 20 20 20 20 69 66 28  100));.      if(
23070 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
23080 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
23090 20 20 20 20 20 69 66 28 20 72 65 73 3d 3d 30 20       if( res==0 
230a0 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
230b0 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f  SQLITE_FULL;   /
230c0 2a 20 49 4d 50 3a 20 52 2d 33 38 32 31 39 2d 35  * IMP: R-38219-5
230d0 33 30 30 32 20 2a 2f 0a 20 20 20 20 20 20 20 20  3002 */.        
230e0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
230f0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
23100 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 76  .      assert( v
23110 3e 30 20 29 3b 20 20 2f 2a 20 45 56 3a 20 52 2d  >0 );  /* EV: R-
23120 34 30 38 31 32 2d 30 33 35 37 30 20 2a 2f 0a 20  40812-03570 */. 
23130 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64 65 66     }.    pC->def
23140 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
23150 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
23160 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
23170 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  LE;.  }.  pOut->
23180 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b  u.i = v;.  break
23190 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
231a0 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33 20  Insert P1 P2 P3 
231b0 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
231c0 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 20  s: intkey=r[P3] 
231d0 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  data=r[P2].**.**
231e0 20 57 72 69 74 65 20 61 6e 20 65 6e 74 72 79 20   Write an entry 
231f0 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 6f  into the table o
23200 66 20 63 75 72 73 6f 72 20 50 31 2e 20 20 41 20  f cursor P1.  A 
23210 6e 65 77 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20  new entry is.** 
23220 63 72 65 61 74 65 64 20 69 66 20 69 74 20 64 6f  created if it do
23230 65 73 6e 27 74 20 61 6c 72 65 61 64 79 20 65 78  esn't already ex
23240 69 73 74 20 6f 72 20 74 68 65 20 64 61 74 61 20  ist or the data 
23250 66 6f 72 20 61 6e 20 65 78 69 73 74 69 6e 67 0a  for an existing.
23260 2a 2a 20 65 6e 74 72 79 20 69 73 20 6f 76 65 72  ** entry is over
23270 77 72 69 74 74 65 6e 2e 20 20 54 68 65 20 64 61  written.  The da
23280 74 61 20 69 73 20 74 68 65 20 76 61 6c 75 65 20  ta is the value 
23290 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20  MEM_Blob stored 
232a0 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e  in register.** n
232b0 75 6d 62 65 72 20 50 32 2e 20 54 68 65 20 6b 65  umber P2. The ke
232c0 79 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  y is stored in r
232d0 65 67 69 73 74 65 72 20 50 33 2e 20 54 68 65 20  egister P3. The 
232e0 6b 65 79 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61  key must.** be a
232f0 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20   MEM_Int..**.** 
23300 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  If the OPFLAG_NC
23310 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 35  HANGE flag of P5
23320 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68   is set, then th
23330 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75  e row change cou
23340 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65  nt is.** increme
23350 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20  nted (otherwise 
23360 6e 6f 74 29 2e 20 20 49 66 20 74 68 65 20 4f 50  not).  If the OP
23370 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 66  FLAG_LASTROWID f
23380 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
23390 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64 20  ,.** then rowid 
233a0 69 73 20 73 74 6f 72 65 64 20 66 6f 72 20 73 75  is stored for su
233b0 62 73 65 71 75 65 6e 74 20 72 65 74 75 72 6e 20  bsequent return 
233c0 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  by the.** sqlite
233d0 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  3_last_insert_ro
233e0 77 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 28  wid() function (
233f0 6f 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20  otherwise it is 
23400 75 6e 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a  unmodified)..**.
23410 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
23420 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66  _USESEEKRESULT f
23430 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
23440 20 61 6e 64 20 69 66 20 74 68 65 20 72 65 73 75   and if the resu
23450 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 6c 61 73  lt of.** the las
23460 74 20 73 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e  t seek operation
23470 20 28 4f 50 5f 4e 6f 74 45 78 69 73 74 73 29 20   (OP_NotExists) 
23480 77 61 73 20 61 20 73 75 63 63 65 73 73 2c 20 74  was a success, t
23490 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72  hen this.** oper
234a0 61 74 69 6f 6e 20 77 69 6c 6c 20 6e 6f 74 20 61  ation will not a
234b0 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74  ttempt to find t
234c0 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 72  he appropriate r
234d0 6f 77 20 62 65 66 6f 72 65 20 64 6f 69 6e 67 0a  ow before doing.
234e0 2a 2a 20 74 68 65 20 69 6e 73 65 72 74 20 62 75  ** the insert bu
234f0 74 20 77 69 6c 6c 20 69 6e 73 74 65 61 64 20 6f  t will instead o
23500 76 65 72 77 72 69 74 65 20 74 68 65 20 72 6f 77  verwrite the row
23510 20 74 68 61 74 20 74 68 65 20 63 75 72 73 6f 72   that the cursor
23520 20 69 73 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79   is.** currently
23530 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 50   pointing to.  P
23540 72 65 73 75 6d 61 62 6c 79 2c 20 74 68 65 20 70  resumably, the p
23550 72 69 6f 72 20 4f 50 5f 4e 6f 74 45 78 69 73 74  rior OP_NotExist
23560 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 68 61 73 20  s opcode.** has 
23570 61 6c 72 65 61 64 79 20 70 6f 73 69 74 69 6f 6e  already position
23580 65 64 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  ed the cursor co
23590 72 72 65 63 74 6c 79 2e 20 20 54 68 69 73 20 69  rrectly.  This i
235a0 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f  s an optimizatio
235b0 6e 0a 2a 2a 20 74 68 61 74 20 62 6f 6f 73 74 73  n.** that boosts
235c0 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 62 79 20   performance by 
235d0 61 76 6f 69 64 69 6e 67 20 72 65 64 75 6e 64 61  avoiding redunda
235e0 6e 74 20 73 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20  nt seeks..**.** 
235f0 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53  If the OPFLAG_IS
23600 55 50 44 41 54 45 20 66 6c 61 67 20 69 73 20 73  UPDATE flag is s
23610 65 74 2c 20 74 68 65 6e 20 74 68 69 73 20 6f 70  et, then this op
23620 63 6f 64 65 20 69 73 20 70 61 72 74 20 6f 66 20  code is part of 
23630 61 6e 0a 2a 2a 20 55 50 44 41 54 45 20 6f 70 65  an.** UPDATE ope
23640 72 61 74 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69  ration.  Otherwi
23650 73 65 20 28 69 66 20 74 68 65 20 66 6c 61 67 20  se (if the flag 
23660 69 73 20 63 6c 65 61 72 29 20 74 68 65 6e 20 74  is clear) then t
23670 68 69 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73  his opcode.** is
23680 20 70 61 72 74 20 6f 66 20 61 6e 20 49 4e 53 45   part of an INSE
23690 52 54 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54  RT operation.  T
236a0 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 69 73  he difference is
236b0 20 6f 6e 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20   only important 
236c0 74 6f 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65  to.** the update
236d0 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72   hook..**.** Par
236e0 61 6d 65 74 65 72 20 50 34 20 6d 61 79 20 70 6f  ameter P4 may po
236f0 69 6e 74 20 74 6f 20 61 20 54 61 62 6c 65 20 73  int to a Table s
23700 74 72 75 63 74 75 72 65 2c 20 6f 72 20 6d 61 79  tructure, or may
23710 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20   be NULL. If it 
23720 69 73 20 0a 2a 2a 20 6e 6f 74 20 4e 55 4c 4c 2c  is .** not NULL,
23730 20 74 68 65 6e 20 74 68 65 20 75 70 64 61 74 65   then the update
23740 2d 68 6f 6f 6b 20 28 73 71 6c 69 74 65 33 2e 78  -hook (sqlite3.x
23750 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 20  UpdateCallback) 
23760 69 73 20 69 6e 76 6f 6b 65 64 20 0a 2a 2a 20 66  is invoked .** f
23770 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63 63 65  ollowing a succe
23780 73 73 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a  ssful insert..**
23790 0a 2a 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44  .** (WARNING/TOD
237a0 4f 3a 20 49 66 20 50 31 20 69 73 20 61 20 70 73  O: If P1 is a ps
237b0 65 75 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20  eudo-cursor and 
237c0 50 32 20 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c  P2 is dynamicall
237d0 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20  y.** allocated, 
237e0 74 68 65 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f  then ownership o
237f0 66 20 50 32 20 69 73 20 74 72 61 6e 73 66 65 72  f P2 is transfer
23800 72 65 64 20 74 6f 20 74 68 65 20 70 73 65 75 64  red to the pseud
23810 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20  o-cursor.** and 
23820 72 65 67 69 73 74 65 72 20 50 32 20 62 65 63 6f  register P2 beco
23830 6d 65 73 20 65 70 68 65 6d 65 72 61 6c 2e 20 20  mes ephemeral.  
23840 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  If the cursor is
23850 20 63 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a   changed, the.**
23860 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
23870 65 72 20 50 32 20 77 69 6c 6c 20 74 68 65 6e 20  er P2 will then 
23880 63 68 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75  change.  Make su
23890 72 65 20 74 68 69 73 20 64 6f 65 73 20 6e 6f 74  re this does not
238a0 0a 2a 2a 20 63 61 75 73 65 20 61 6e 79 20 70 72  .** cause any pr
238b0 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54  oblems.).**.** T
238c0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
238d0 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61  only works on ta
238e0 62 6c 65 73 2e 20 20 54 68 65 20 65 71 75 69 76  bles.  The equiv
238f0 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  alent instructio
23900 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65 73  n.** for indices
23910 20 69 73 20 4f 50 5f 49 64 78 49 6e 73 65 72 74   is OP_IdxInsert
23920 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
23930 49 6e 73 65 72 74 49 6e 74 20 50 31 20 50 32 20  InsertInt P1 P2 
23940 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
23950 70 73 69 73 3a 20 20 69 6e 74 6b 65 79 3d 50 33  psis:  intkey=P3
23960 20 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a   data=r[P2].**.*
23970 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 65 78 61  * This works exa
23980 63 74 6c 79 20 6c 69 6b 65 20 4f 50 5f 49 6e 73  ctly like OP_Ins
23990 65 72 74 20 65 78 63 65 70 74 20 74 68 61 74 20  ert except that 
239a0 74 68 65 20 6b 65 79 20 69 73 20 74 68 65 0a 2a  the key is the.*
239b0 2a 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * integer value 
239c0 50 33 2c 20 6e 6f 74 20 74 68 65 20 76 61 6c 75  P3, not the valu
239d0 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72  e of the integer
239e0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
239f0 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20  ter P3..*/.case 
23a00 4f 50 5f 49 6e 73 65 72 74 3a 20 0a 63 61 73 65  OP_Insert: .case
23a10 20 4f 50 5f 49 6e 73 65 72 74 49 6e 74 3a 20 7b   OP_InsertInt: {
23a20 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 3b 20 20  .  Mem *pData;  
23a30 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c       /* MEM cell
23a40 20 68 6f 6c 64 69 6e 67 20 64 61 74 61 20 66 6f   holding data fo
23a50 72 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  r the record to 
23a60 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20  be inserted */. 
23a70 20 4d 65 6d 20 2a 70 4b 65 79 3b 20 20 20 20 20   Mem *pKey;     
23a80 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68     /* MEM cell h
23a90 6f 6c 64 69 6e 67 20 6b 65 79 20 20 66 6f 72 20  olding key  for 
23aa0 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
23ab0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
23ac0 20 20 2f 2a 20 43 75 72 73 6f 72 20 74 6f 20 74    /* Cursor to t
23ad0 61 62 6c 65 20 69 6e 74 6f 20 77 68 69 63 68 20  able into which 
23ae0 69 6e 73 65 72 74 20 69 73 20 77 72 69 74 74 65  insert is writte
23af0 6e 20 2a 2f 0a 20 20 69 6e 74 20 73 65 65 6b 52  n */.  int seekR
23b00 65 73 75 6c 74 3b 20 20 20 2f 2a 20 52 65 73 75  esult;   /* Resu
23b10 6c 74 20 6f 66 20 70 72 69 6f 72 20 73 65 65 6b  lt of prior seek
23b20 20 6f 72 20 30 20 69 66 20 6e 6f 20 55 53 45 53   or 0 if no USES
23b30 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 2a  EEKRESULT flag *
23b40 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
23b50 7a 44 62 3b 20 20 2f 2a 20 64 61 74 61 62 61 73  zDb;  /* databas
23b60 65 20 6e 61 6d 65 20 2d 20 75 73 65 64 20 62 79  e name - used by
23b70 20 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b   the update hook
23b80 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61   */.  Table *pTa
23b90 62 3b 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65  b;      /* Table
23ba0 20 73 74 72 75 63 74 75 72 65 20 2d 20 75 73 65   structure - use
23bb0 64 20 62 79 20 75 70 64 61 74 65 20 61 6e 64 20  d by update and 
23bc0 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 73  pre-update hooks
23bd0 20 2a 2f 0a 20 20 69 6e 74 20 6f 70 3b 20 20 20   */.  int op;   
23be0 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64          /* Opcod
23bf0 65 20 66 6f 72 20 75 70 64 61 74 65 20 68 6f 6f  e for update hoo
23c00 6b 3a 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45  k: SQLITE_UPDATE
23c10 20 6f 72 20 53 51 4c 49 54 45 5f 49 4e 53 45 52   or SQLITE_INSER
23c20 54 20 2a 2f 0a 20 20 42 74 72 65 65 50 61 79 6c  T */.  BtreePayl
23c30 6f 61 64 20 78 3b 20 20 20 2f 2a 20 50 61 79 6c  oad x;   /* Payl
23c40 6f 61 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74  oad to be insert
23c50 65 64 20 2a 2f 0a 0a 20 20 6f 70 20 3d 20 30 3b  ed */..  op = 0;
23c60 0a 20 20 70 44 61 74 61 20 3d 20 26 61 4d 65 6d  .  pData = &aMem
23c70 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
23c80 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
23c90 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
23ca0 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
23cb0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 44  t( memIsValid(pD
23cc0 61 74 61 29 20 29 3b 0a 20 20 70 43 20 3d 20 70  ata) );.  pC = p
23cd0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
23ce0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
23cf0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
23d00 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
23d10 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
23d20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
23d30 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61  Cursor!=0 );.  a
23d40 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
23d50 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  le );.  assert( 
23d60 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
23d70 54 41 42 4c 45 20 7c 7c 20 70 4f 70 2d 3e 70 34  TABLE || pOp->p4
23d80 74 79 70 65 3e 3d 50 34 5f 53 54 41 54 49 43 20  type>=P4_STATIC 
23d90 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
23da0 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61  ACE(pOp->p2, pDa
23db0 74 61 29 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d  ta);..  if( pOp-
23dc0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65  >opcode==OP_Inse
23dd0 72 74 20 29 7b 0a 20 20 20 20 70 4b 65 79 20 3d  rt ){.    pKey =
23de0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
23df0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65  .    assert( pKe
23e00 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  y->flags & MEM_I
23e10 6e 74 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  nt );.    assert
23e20 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4b 65  ( memIsValid(pKe
23e30 79 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54  y) );.    REGIST
23e40 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
23e50 2c 20 70 4b 65 79 29 3b 0a 20 20 20 20 78 2e 6e  , pKey);.    x.n
23e60 4b 65 79 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b  Key = pKey->u.i;
23e70 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
23e80 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
23e90 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 49 6e 74 20  e==OP_InsertInt 
23ea0 29 3b 0a 20 20 20 20 78 2e 6e 4b 65 79 20 3d 20  );.    x.nKey = 
23eb0 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20  pOp->p3;.  }..  
23ec0 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
23ed0 3d 50 34 5f 54 41 42 4c 45 20 26 26 20 48 41 53  =P4_TABLE && HAS
23ee0 5f 55 50 44 41 54 45 5f 48 4f 4f 4b 28 64 62 29  _UPDATE_HOOK(db)
23ef0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
23f00 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  pC->isTable );. 
23f10 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
23f20 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20 7a 44 62  Db>=0 );.    zDb
23f30 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69   = db->aDb[pC->i
23f40 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 70  Db].zName;.    p
23f50 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 54  Tab = pOp->p4.pT
23f60 61 62 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  ab;.    assert( 
23f70 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20 29  HasRowid(pTab) )
23f80 3b 0a 20 20 20 20 6f 70 20 3d 20 28 28 70 4f 70  ;.    op = ((pOp
23f90 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53  ->p5 & OPFLAG_IS
23fa0 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45  UPDATE) ? SQLITE
23fb0 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45  _UPDATE : SQLITE
23fc0 5f 49 4e 53 45 52 54 29 3b 0a 20 20 7d 65 6c 73  _INSERT);.  }els
23fd0 65 7b 0a 20 20 20 20 70 54 61 62 20 3d 20 30 3b  e{.    pTab = 0;
23fe0 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20   /* Not needed. 
23ff0 20 53 69 6c 65 6e 63 65 20 61 20 63 6f 6d 69 6c   Silence a comil
24000 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20  er warning. */. 
24010 20 20 20 7a 44 62 20 3d 20 30 3b 20 20 2f 2a 20     zDb = 0;  /* 
24020 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69 6c  Not needed.  Sil
24030 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65 72 20  ence a compiler 
24040 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 7d 0a  warning. */.  }.
24050 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
24060 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f  NABLE_PREUPDATE_
24070 48 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65  HOOK.  /* Invoke
24080 20 74 68 65 20 70 72 65 2d 75 70 64 61 74 65 20   the pre-update 
24090 68 6f 6f 6b 2c 20 69 66 20 61 6e 79 20 2a 2f 0a  hook, if any */.
240a0 20 20 69 66 28 20 64 62 2d 3e 78 50 72 65 55 70    if( db->xPreUp
240b0 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 0a 20 20  dateCallback .  
240c0 20 26 26 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d   && pOp->p4type=
240d0 3d 50 34 5f 54 41 42 4c 45 0a 20 20 20 26 26 20  =P4_TABLE.   && 
240e0 21 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  !(pOp->p5 & OPFL
240f0 41 47 5f 49 53 55 50 44 41 54 45 29 0a 20 20 29  AG_ISUPDATE).  )
24100 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
24110 65 50 72 65 55 70 64 61 74 65 48 6f 6f 6b 28 70  ePreUpdateHook(p
24120 2c 20 70 43 2c 20 53 51 4c 49 54 45 5f 49 4e 53  , pC, SQLITE_INS
24130 45 52 54 2c 20 7a 44 62 2c 20 70 54 61 62 2c 20  ERT, zDb, pTab, 
24140 78 2e 6e 4b 65 79 2c 20 70 4f 70 2d 3e 70 32 29  x.nKey, pOp->p2)
24150 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  ;.  }.#endif..  
24160 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  if( pOp->p5 & OP
24170 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70  FLAG_NCHANGE ) p
24180 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69  ->nChange++;.  i
24190 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  f( pOp->p5 & OPF
241a0 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 29 20  LAG_LASTROWID ) 
241b0 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  db->lastRowid = 
241c0 6c 61 73 74 52 6f 77 69 64 20 3d 20 78 2e 6e 4b  lastRowid = x.nK
241d0 65 79 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d  ey;.  if( pData-
241e0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
241f0 6c 20 29 7b 0a 20 20 20 20 78 2e 70 44 61 74 61  l ){.    x.pData
24200 20 3d 20 30 3b 0a 20 20 20 20 78 2e 6e 44 61 74   = 0;.    x.nDat
24210 61 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a  a = 0;.  }else{.
24220 20 20 20 20 61 73 73 65 72 74 28 20 70 44 61 74      assert( pDat
24230 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  a->flags & (MEM_
24240 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b  Blob|MEM_Str) );
24250 0a 20 20 20 20 78 2e 70 44 61 74 61 20 3d 20 70  .    x.pData = p
24260 44 61 74 61 2d 3e 7a 3b 0a 20 20 20 20 78 2e 6e  Data->z;.    x.n
24270 44 61 74 61 20 3d 20 70 44 61 74 61 2d 3e 6e 3b  Data = pData->n;
24280 0a 20 20 7d 0a 20 20 73 65 65 6b 52 65 73 75 6c  .  }.  seekResul
24290 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20  t = ((pOp->p5 & 
242a0 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
242b0 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b  SULT) ? pC->seek
242c0 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20 69  Result : 0);.  i
242d0 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20  f( pData->flags 
242e0 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20  & MEM_Zero ){.  
242f0 20 20 78 2e 6e 5a 65 72 6f 20 3d 20 70 44 61 74    x.nZero = pDat
24300 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65  a->u.nZero;.  }e
24310 6c 73 65 7b 0a 20 20 20 20 78 2e 6e 5a 65 72 6f  lse{.    x.nZero
24320 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 78 2e 70 4b   = 0;.  }.  x.pK
24330 65 79 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73  ey = 0;.  rc = s
24340 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65 72  qlite3BtreeInser
24350 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  t(pC->uc.pCursor
24360 2c 20 26 78 2c 0a 20 20 20 20 20 20 20 20 20 20  , &x,.          
24370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24380 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
24390 47 5f 41 50 50 45 4e 44 29 21 3d 30 2c 20 73 65  G_APPEND)!=0, se
243a0 65 6b 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20 20  ekResult.  );.  
243b0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
243c0 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  to = 0;.  pC->ca
243d0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
243e0 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49  E_STALE;..  /* I
243f0 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65  nvoke the update
24400 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65  -hook if require
24410 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 20 29  d. */.  if( rc )
24420 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
24430 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20  to_error;.  if( 
24440 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
24450 61 63 6b 20 26 26 20 6f 70 20 29 7b 0a 20 20 20  ack && op ){.   
24460 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
24470 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65  back(db->pUpdate
24480 41 72 67 2c 20 6f 70 2c 20 7a 44 62 2c 20 70 54  Arg, op, zDb, pT
24490 61 62 2d 3e 7a 4e 61 6d 65 2c 20 78 2e 6e 4b 65  ab->zName, x.nKe
244a0 79 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  y);.  }.  break;
244b0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
244c0 65 6c 65 74 65 20 50 31 20 50 32 20 50 33 20 50  elete P1 P2 P3 P
244d0 34 20 50 35 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74  4 P5.**.** Delet
244e0 65 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 20  e the record at 
244f0 77 68 69 63 68 20 74 68 65 20 50 31 20 63 75 72  which the P1 cur
24500 73 6f 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79  sor is currently
24510 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a   pointing..**.**
24520 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 53   If the OPFLAG_S
24530 41 56 45 50 4f 53 49 54 49 4f 4e 20 62 69 74 20  AVEPOSITION bit 
24540 6f 66 20 74 68 65 20 50 35 20 70 61 72 61 6d 65  of the P5 parame
24550 74 65 72 20 69 73 20 73 65 74 2c 20 74 68 65 6e  ter is set, then
24560 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20 77  .** the cursor w
24570 69 6c 6c 20 62 65 20 6c 65 66 74 20 70 6f 69 6e  ill be left poin
24580 74 69 6e 67 20 61 74 20 20 65 69 74 68 65 72 20  ting at  either 
24590 74 68 65 20 6e 65 78 74 20 6f 72 20 74 68 65 20  the next or the 
245a0 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65 63 6f  previous.** reco
245b0 72 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  rd in the table.
245c0 20 49 66 20 69 74 20 69 73 20 6c 65 66 74 20 70   If it is left p
245d0 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6e  ointing at the n
245e0 65 78 74 20 72 65 63 6f 72 64 2c 20 74 68 65 6e  ext record, then
245f0 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e 65 78  .** the next Nex
24600 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69  t instruction wi
24610 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e 20 41  ll be a no-op. A
24620 73 20 61 20 72 65 73 75 6c 74 2c 20 69 6e 20 74  s a result, in t
24630 68 69 73 20 63 61 73 65 0a 2a 2a 20 69 74 20 69  his case.** it i
24640 73 20 6f 6b 20 74 6f 20 64 65 6c 65 74 65 20 61  s ok to delete a
24650 20 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 69 74   record from wit
24660 68 69 6e 20 61 20 4e 65 78 74 20 6c 6f 6f 70 2e  hin a Next loop.
24670 20 49 66 20 0a 2a 2a 20 4f 50 46 4c 41 47 5f 53   If .** OPFLAG_S
24680 41 56 45 50 4f 53 49 54 49 4f 4e 20 62 69 74 20  AVEPOSITION bit 
24690 6f 66 20 50 35 20 69 73 20 63 6c 65 61 72 2c 20  of P5 is clear, 
246a0 74 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20  then the cursor 
246b0 77 69 6c 6c 20 62 65 0a 2a 2a 20 6c 65 66 74 20  will be.** left 
246c0 69 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 20  in an undefined 
246d0 73 74 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  state..**.** If 
246e0 74 68 65 20 4f 50 46 4c 41 47 5f 41 55 58 44 45  the OPFLAG_AUXDE
246f0 4c 45 54 45 20 62 69 74 20 69 73 20 73 65 74 20  LETE bit is set 
24700 6f 6e 20 50 35 2c 20 74 68 61 74 20 69 6e 64 69  on P5, that indi
24710 63 61 74 65 73 20 74 68 61 74 20 74 68 69 73 0a  cates that this.
24720 2a 2a 20 64 65 6c 65 74 65 20 6f 6e 65 20 6f 66  ** delete one of
24730 20 73 65 76 65 72 61 6c 20 61 73 73 6f 63 69 61   several associa
24740 74 65 64 20 77 69 74 68 20 64 65 6c 65 74 69 6e  ted with deletin
24750 67 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e  g a table row an
24760 64 20 61 6c 6c 20 69 74 73 0a 2a 2a 20 61 73 73  d all its.** ass
24770 6f 63 69 61 74 65 64 20 69 6e 64 65 78 20 65 6e  ociated index en
24780 74 72 69 65 73 2e 20 20 45 78 61 63 74 6c 79 20  tries.  Exactly 
24790 6f 6e 65 20 6f 66 20 74 68 6f 73 65 20 64 65 6c  one of those del
247a0 65 74 65 73 20 69 73 20 74 68 65 20 22 70 72 69  etes is the "pri
247b0 6d 61 72 79 22 0a 2a 2a 20 64 65 6c 65 74 65 2e  mary".** delete.
247c0 20 20 54 68 65 20 6f 74 68 65 72 73 20 61 72 65    The others are
247d0 20 61 6c 6c 20 6f 6e 20 4f 50 46 4c 41 47 5f 46   all on OPFLAG_F
247e0 4f 52 44 45 4c 45 54 45 20 63 75 72 73 6f 72 73  ORDELETE cursors
247f0 20 6f 72 20 65 6c 73 65 20 61 72 65 0a 2a 2a 20   or else are.** 
24800 6d 61 72 6b 65 64 20 77 69 74 68 20 74 68 65 20  marked with the 
24810 41 55 58 44 45 4c 45 54 45 20 66 6c 61 67 2e 0a  AUXDELETE flag..
24820 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
24830 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67  LAG_NCHANGE flag
24840 20 6f 66 20 50 32 20 28 4e 42 3a 20 50 32 20 6e   of P2 (NB: P2 n
24850 6f 74 20 50 35 29 20 69 73 20 73 65 74 2c 20 74  ot P5) is set, t
24860 68 65 6e 20 74 68 65 20 72 6f 77 0a 2a 2a 20 63  hen the row.** c
24870 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 20 69  hange count is i
24880 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65  ncremented (othe
24890 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a  rwise not)..**.*
248a0 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74 20 62 65  * P1 must not be
248b0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20   pseudo-table.  
248c0 49 74 20 68 61 73 20 74 6f 20 62 65 20 61 20 72  It has to be a r
248d0 65 61 6c 20 74 61 62 6c 65 20 77 69 74 68 0a 2a  eal table with.*
248e0 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 2e  * multiple rows.
248f0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20  .**.** If P4 is 
24900 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20 69 74  not NULL then it
24910 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 54 61 62   points to a Tab
24920 6c 65 20 73 74 72 75 74 75 72 65 2e 20 49 6e 20  le struture. In 
24930 74 68 69 73 20 63 61 73 65 20 65 69 74 68 65 72  this case either
24940 20 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20   .** the update 
24950 6f 72 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f  or pre-update ho
24960 6f 6b 2c 20 6f 72 20 62 6f 74 68 2c 20 6d 61 79  ok, or both, may
24970 20 62 65 20 69 6e 76 6f 6b 65 64 2e 20 54 68 65   be invoked. The
24980 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 0a   P1 cursor must.
24990 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 70 6f 73  ** have been pos
249a0 69 74 69 6f 6e 65 64 20 75 73 69 6e 67 20 4f 50  itioned using OP
249b0 5f 4e 6f 74 46 6f 75 6e 64 20 70 72 69 6f 72 20  _NotFound prior 
249c0 74 6f 20 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73  to invoking this
249d0 20 6f 70 63 6f 64 65 20 69 6e 20 0a 2a 2a 20 74   opcode in .** t
249e0 68 69 73 20 63 61 73 65 2e 20 53 70 65 63 69 66  his case. Specif
249f0 69 63 61 6c 6c 79 2c 20 69 66 20 6f 6e 65 20 69  ically, if one i
24a00 73 20 63 6f 6e 66 69 67 75 72 65 64 2c 20 74 68  s configured, th
24a10 65 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f  e pre-update hoo
24a20 6b 20 69 73 20 0a 2a 2a 20 69 6e 76 6f 6b 65 64  k is .** invoked
24a30 20 69 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55   if P4 is not NU
24a40 4c 4c 2e 20 54 68 65 20 75 70 64 61 74 65 2d 68  LL. The update-h
24a50 6f 6f 6b 20 69 73 20 69 6e 76 6f 6b 65 64 20 69  ook is invoked i
24a60 66 20 6f 6e 65 20 69 73 20 63 6f 6e 66 69 67 75  f one is configu
24a70 72 65 64 2c 20 0a 2a 2a 20 50 34 20 69 73 20 6e  red, .** P4 is n
24a80 6f 74 20 4e 55 4c 4c 2c 20 61 6e 64 20 74 68 65  ot NULL, and the
24a90 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
24aa0 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 50  flag is set in P
24ab0 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  2..**.** If the 
24ac0 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20  OPFLAG_ISUPDATE 
24ad0 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 50  flag is set in P
24ae0 32 2c 20 74 68 65 6e 20 50 33 20 63 6f 6e 74 61  2, then P3 conta
24af0 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 0a  ins the address.
24b00 2a 2a 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79  ** of the memory
24b10 20 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61   cell that conta
24b20 69 6e 73 20 74 68 65 20 76 61 6c 75 65 20 74 68  ins the value th
24b30 61 74 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  at the rowid of 
24b40 74 68 65 20 72 6f 77 20 77 69 6c 6c 0a 2a 2a 20  the row will.** 
24b50 62 65 20 73 65 74 20 74 6f 20 62 79 20 74 68 65  be set to by the
24b60 20 75 70 64 61 74 65 2e 0a 2a 2f 0a 63 61 73 65   update..*/.case
24b70 20 4f 50 5f 44 65 6c 65 74 65 3a 20 7b 0a 20 20   OP_Delete: {.  
24b80 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
24b90 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
24ba0 62 3b 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  b;.  Table *pTab
24bb0 3b 0a 20 20 69 6e 74 20 6f 70 66 6c 61 67 73 3b  ;.  int opflags;
24bc0 0a 0a 20 20 6f 70 66 6c 61 67 73 20 3d 20 70 4f  ..  opflags = pO
24bd0 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
24be0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
24bf0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
24c00 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
24c10 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
24c20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
24c30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
24c40 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
24c50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
24c60 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72  ert( pC->uc.pCur
24c70 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  sor!=0 );.  asse
24c80 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
24c90 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 0a 23 69  Moveto==0 );..#i
24ca0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
24cb0 47 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74  G.  if( pOp->p4t
24cc0 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26  ype==P4_TABLE &&
24cd0 20 48 61 73 52 6f 77 69 64 28 70 4f 70 2d 3e 70   HasRowid(pOp->p
24ce0 34 2e 70 54 61 62 29 20 26 26 20 70 4f 70 2d 3e  4.pTab) && pOp->
24cf0 70 35 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20  p5==0 ){.    /* 
24d00 49 66 20 70 35 20 69 73 20 7a 65 72 6f 2c 20 74  If p5 is zero, t
24d10 68 65 20 73 65 65 6b 20 6f 70 65 72 61 74 69 6f  he seek operatio
24d20 6e 20 74 68 61 74 20 70 6f 73 69 74 69 6f 6e 65  n that positione
24d30 64 20 74 68 65 20 63 75 72 73 6f 72 20 70 72 69  d the cursor pri
24d40 6f 72 20 74 6f 0a 20 20 20 20 2a 2a 20 4f 50 5f  or to.    ** OP_
24d50 44 65 6c 65 74 65 20 77 69 6c 6c 20 68 61 76 65  Delete will have
24d60 20 61 6c 73 6f 20 73 65 74 20 74 68 65 20 70 43   also set the pC
24d70 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 66  ->movetoTarget f
24d80 69 65 6c 64 20 74 6f 20 74 68 65 20 72 6f 77 69  ield to the rowi
24d90 64 20 6f 66 0a 20 20 20 20 2a 2a 20 74 68 65 20  d of.    ** the 
24da0 72 6f 77 20 74 68 61 74 20 69 73 20 62 65 69 6e  row that is bein
24db0 67 20 64 65 6c 65 74 65 64 20 2a 2f 0a 20 20 20  g deleted */.   
24dc0 20 69 36 34 20 69 4b 65 79 20 3d 20 30 3b 0a 20   i64 iKey = 0;. 
24dd0 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b     sqlite3BtreeK
24de0 65 79 53 69 7a 65 28 70 43 2d 3e 75 63 2e 70 43  eySize(pC->uc.pC
24df0 75 72 73 6f 72 2c 20 26 69 4b 65 79 29 3b 0a 20  ursor, &iKey);. 
24e00 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6d     assert( pC->m
24e10 6f 76 65 74 6f 54 61 72 67 65 74 3d 3d 69 4b 65  ovetoTarget==iKe
24e20 79 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  y );.  }.#endif.
24e30 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 75 70 64  .  /* If the upd
24e40 61 74 65 2d 68 6f 6f 6b 20 6f 72 20 70 72 65 2d  ate-hook or pre-
24e50 75 70 64 61 74 65 2d 68 6f 6f 6b 20 77 69 6c 6c  update-hook will
24e60 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 73 65 74   be invoked, set
24e70 20 7a 44 62 20 74 6f 0a 20 20 2a 2a 20 74 68 65   zDb to.  ** the
24e80 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 62 20   name of the db 
24e90 74 6f 20 70 61 73 73 20 61 73 20 74 6f 20 69 74  to pass as to it
24ea0 2e 20 41 6c 73 6f 20 73 65 74 20 6c 6f 63 61 6c  . Also set local
24eb0 20 70 54 61 62 20 74 6f 20 61 20 63 6f 70 79 0a   pTab to a copy.
24ec0 20 20 2a 2a 20 6f 66 20 70 34 2e 70 54 61 62 2e    ** of p4.pTab.
24ed0 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 70 35 20   Finally, if p5 
24ee0 69 73 20 74 72 75 65 2c 20 69 6e 64 69 63 61 74  is true, indicat
24ef0 69 6e 67 20 74 68 61 74 20 74 68 69 73 20 63 75  ing that this cu
24f00 72 73 6f 72 20 77 61 73 0a 20 20 2a 2a 20 6c 61  rsor was.  ** la
24f10 73 74 20 6d 6f 76 65 64 20 77 69 74 68 20 4f 50  st moved with OP
24f20 5f 4e 65 78 74 20 6f 72 20 4f 50 5f 50 72 65 76  _Next or OP_Prev
24f30 2c 20 6e 6f 74 20 53 65 65 6b 20 6f 72 20 4e 6f  , not Seek or No
24f40 74 46 6f 75 6e 64 2c 20 73 65 74 20 0a 20 20 2a  tFound, set .  *
24f50 2a 20 56 64 62 65 43 75 72 73 6f 72 2e 6d 6f 76  * VdbeCursor.mov
24f60 65 74 6f 54 61 72 67 65 74 20 74 6f 20 74 68 65  etoTarget to the
24f70 20 63 75 72 72 65 6e 74 20 72 6f 77 69 64 2e 20   current rowid. 
24f80 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   */.  if( pOp->p
24f90 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20  4type==P4_TABLE 
24fa0 26 26 20 48 41 53 5f 55 50 44 41 54 45 5f 48 4f  && HAS_UPDATE_HO
24fb0 4f 4b 28 64 62 29 20 29 7b 0a 20 20 20 20 61 73  OK(db) ){.    as
24fc0 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30  sert( pC->iDb>=0
24fd0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
24fe0 70 4f 70 2d 3e 70 34 2e 70 54 61 62 21 3d 30 20  pOp->p4.pTab!=0 
24ff0 29 3b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d  );.    zDb = db-
25000 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e  >aDb[pC->iDb].zN
25010 61 6d 65 3b 0a 20 20 20 20 70 54 61 62 20 3d 20  ame;.    pTab = 
25020 70 4f 70 2d 3e 70 34 2e 70 54 61 62 3b 0a 20 20  pOp->p4.pTab;.  
25030 20 20 69 66 28 20 28 70 4f 70 2d 3e 70 35 20 26    if( (pOp->p5 &
25040 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49   OPFLAG_SAVEPOSI
25050 54 49 4f 4e 29 21 3d 30 20 26 26 20 70 43 2d 3e  TION)!=0 && pC->
25060 69 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 20  isTable ){.     
25070 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
25080 53 69 7a 65 28 70 43 2d 3e 75 63 2e 70 43 75 72  Size(pC->uc.pCur
25090 73 6f 72 2c 20 26 70 43 2d 3e 6d 6f 76 65 74 6f  sor, &pC->moveto
250a0 54 61 72 67 65 74 29 3b 0a 20 20 20 20 7d 0a 20  Target);.    }. 
250b0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 7a 44 62 20   }else{.    zDb 
250c0 3d 20 30 3b 20 20 20 2f 2a 20 4e 6f 74 20 6e 65  = 0;   /* Not ne
250d0 65 64 65 64 2e 20 20 53 69 6c 65 6e 63 65 20 61  eded.  Silence a
250e0 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e   compiler warnin
250f0 67 2e 20 2a 2f 0a 20 20 20 20 70 54 61 62 20 3d  g. */.    pTab =
25100 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64   0;  /* Not need
25110 65 64 2e 20 20 53 69 6c 65 6e 63 65 20 61 20 63  ed.  Silence a c
25120 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e  ompiler warning.
25130 20 2a 2f 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20   */.  }..#ifdef 
25140 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52  SQLITE_ENABLE_PR
25150 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 2f  EUPDATE_HOOK.  /
25160 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 70 72 65  * Invoke the pre
25170 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20  -update-hook if 
25180 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69  required. */.  i
25190 66 28 20 64 62 2d 3e 78 50 72 65 55 70 64 61 74  f( db->xPreUpdat
251a0 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70  eCallback && pOp
251b0 2d 3e 70 34 2e 70 54 61 62 20 26 26 20 48 61 73  ->p4.pTab && Has
251c0 52 6f 77 69 64 28 70 54 61 62 29 20 29 7b 0a 20  Rowid(pTab) ){. 
251d0 20 20 20 61 73 73 65 72 74 28 20 21 28 6f 70 66     assert( !(opf
251e0 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 49 53  lags & OPFLAG_IS
251f0 55 50 44 41 54 45 29 20 7c 7c 20 28 61 4d 65 6d  UPDATE) || (aMem
25200 5b 70 4f 70 2d 3e 70 33 5d 2e 66 6c 61 67 73 20  [pOp->p3].flags 
25210 26 20 4d 45 4d 5f 49 6e 74 29 20 29 3b 0a 20 20  & MEM_Int) );.  
25220 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 65    sqlite3VdbePre
25230 55 70 64 61 74 65 48 6f 6f 6b 28 70 2c 20 70 43  UpdateHook(p, pC
25240 2c 0a 20 20 20 20 20 20 20 20 28 6f 70 66 6c 61  ,.        (opfla
25250 67 73 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50  gs & OPFLAG_ISUP
25260 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45 5f 55  DATE) ? SQLITE_U
25270 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45 5f 44  PDATE : SQLITE_D
25280 45 4c 45 54 45 2c 20 0a 20 20 20 20 20 20 20 20  ELETE, .        
25290 7a 44 62 2c 20 70 54 61 62 2c 20 70 43 2d 3e 6d  zDb, pTab, pC->m
252a0 6f 76 65 74 6f 54 61 72 67 65 74 2c 0a 20 20 20  ovetoTarget,.   
252b0 20 20 20 20 20 70 4f 70 2d 3e 70 33 0a 20 20 20       pOp->p3.   
252c0 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 6f 70   );.  }.  if( op
252d0 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 49  flags & OPFLAG_I
252e0 53 4e 4f 4f 50 20 29 20 62 72 65 61 6b 3b 0a 23  SNOOP ) break;.#
252f0 65 6e 64 69 66 0a 20 0a 20 20 2f 2a 20 4f 6e 6c  endif. .  /* Onl
25300 79 20 66 6c 61 67 73 20 74 68 61 74 20 63 61 6e  y flags that can
25310 20 62 65 20 73 65 74 20 61 72 65 20 53 41 56 45   be set are SAVE
25320 50 4f 49 53 54 49 4f 4e 20 61 6e 64 20 41 55 58  POISTION and AUX
25330 44 45 4c 45 54 45 20 2a 2f 20 0a 20 20 61 73 73  DELETE */ .  ass
25340 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26 20  ert( (pOp->p5 & 
25350 7e 28 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53  ~(OPFLAG_SAVEPOS
25360 49 54 49 4f 4e 7c 4f 50 46 4c 41 47 5f 41 55 58  ITION|OPFLAG_AUX
25370 44 45 4c 45 54 45 29 29 3d 3d 30 20 29 3b 0a 20  DELETE))==0 );. 
25380 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f   assert( OPFLAG_
25390 53 41 56 45 50 4f 53 49 54 49 4f 4e 3d 3d 42 54  SAVEPOSITION==BT
253a0 52 45 45 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  REE_SAVEPOSITION
253b0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50   );.  assert( OP
253c0 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 3d 3d  FLAG_AUXDELETE==
253d0 42 54 52 45 45 5f 41 55 58 44 45 4c 45 54 45 20  BTREE_AUXDELETE 
253e0 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
253f0 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70 2d  E_DEBUG.  if( p-
25400 3e 70 46 72 61 6d 65 3d 3d 30 20 29 7b 0a 20 20  >pFrame==0 ){.  
25410 20 20 69 66 28 20 70 43 2d 3e 69 73 45 70 68 65    if( pC->isEphe
25420 6d 65 72 61 6c 3d 3d 30 0a 20 20 20 20 20 20 20  meral==0.       
25430 20 26 26 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f   && (pOp->p5 & O
25440 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 29  PFLAG_AUXDELETE)
25450 3d 3d 30 0a 20 20 20 20 20 20 20 20 26 26 20 28  ==0.        && (
25460 70 43 2d 3e 77 72 46 6c 61 67 20 26 20 4f 50 46  pC->wrFlag & OPF
25470 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 29 3d 3d  LAG_FORDELETE)==
25480 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20  0.      ){.     
25490 20 6e 45 78 74 72 61 44 65 6c 65 74 65 2b 2b 3b   nExtraDelete++;
254a0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70  .    }.    if( p
254b0 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f  Op->p2 & OPFLAG_
254c0 4e 43 48 41 4e 47 45 20 29 7b 0a 20 20 20 20 20  NCHANGE ){.     
254d0 20 6e 45 78 74 72 61 44 65 6c 65 74 65 2d 2d 3b   nExtraDelete--;
254e0 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69  .    }.  }.#endi
254f0 66 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  f..  rc = sqlite
25500 33 42 74 72 65 65 44 65 6c 65 74 65 28 70 43 2d  3BtreeDelete(pC-
25510 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 70 4f 70  >uc.pCursor, pOp
25520 2d 3e 70 35 29 3b 0a 20 20 70 43 2d 3e 63 61 63  ->p5);.  pC->cac
25530 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
25540 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 72 63  _STALE;.  if( rc
25550 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
25560 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 2f  e_to_error;..  /
25570 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64  * Invoke the upd
25580 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75  ate-hook if requ
25590 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 6f  ired. */.  if( o
255a0 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f  pflags & OPFLAG_
255b0 4e 43 48 41 4e 47 45 20 29 7b 0a 20 20 20 20 70  NCHANGE ){.    p
255c0 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 20  ->nChange++;.   
255d0 20 69 66 28 20 64 62 2d 3e 78 55 70 64 61 74 65   if( db->xUpdate
255e0 43 61 6c 6c 62 61 63 6b 20 26 26 20 48 61 73 52  Callback && HasR
255f0 6f 77 69 64 28 70 54 61 62 29 20 29 7b 0a 20 20  owid(pTab) ){.  
25600 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43      db->xUpdateC
25610 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64  allback(db->pUpd
25620 61 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f 44  ateArg, SQLITE_D
25630 45 4c 45 54 45 2c 20 7a 44 62 2c 20 70 54 61 62  ELETE, zDb, pTab
25640 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20  ->zName,.       
25650 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72     pC->movetoTar
25660 67 65 74 29 3b 0a 20 20 20 20 20 20 61 73 73 65  get);.      asse
25670 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29  rt( pC->iDb>=0 )
25680 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 62  ;.    }.  }..  b
25690 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64  reak;.}./* Opcod
256a0 65 3a 20 52 65 73 65 74 43 6f 75 6e 74 20 2a 20  e: ResetCount * 
256b0 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  * * * *.**.** Th
256c0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63  e value of the c
256d0 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73  hange counter is
256e0 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65 20 64   copied to the d
256f0 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a  atabase handle.*
25700 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  * change counter
25710 20 28 72 65 74 75 72 6e 65 64 20 62 79 20 73 75   (returned by su
25720 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20 74  bsequent calls t
25730 6f 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65  o sqlite3_change
25740 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74 68  s())..** Then th
25750 65 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20 63  e VMs internal c
25760 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 72 65  hange counter re
25770 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54 68  sets to 0..** Th
25780 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72  is is used by tr
25790 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a  igger programs..
257a0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74  */.case OP_Reset
257b0 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69 74  Count: {.  sqlit
257c0 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73  e3VdbeSetChanges
257d0 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29  (db, p->nChange)
257e0 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d  ;.  p->nChange =
257f0 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
25800 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65  /* Opcode: Sorte
25810 72 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50  rCompare P1 P2 P
25820 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  3 P4.** Synopsis
25830 3a 20 20 69 66 20 6b 65 79 28 50 31 29 21 3d 74  :  if key(P1)!=t
25840 72 69 6d 28 72 5b 50 33 5d 2c 50 34 29 20 67 6f  rim(r[P3],P4) go
25850 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69  to P2.**.** P1 i
25860 73 20 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f  s a sorter curso
25870 72 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  r. This instruct
25880 69 6f 6e 20 63 6f 6d 70 61 72 65 73 20 61 20 70  ion compares a p
25890 72 65 66 69 78 20 6f 66 20 74 68 65 0a 2a 2a 20  refix of the.** 
258a0 72 65 63 6f 72 64 20 62 6c 6f 62 20 69 6e 20 72  record blob in r
258b0 65 67 69 73 74 65 72 20 50 33 20 61 67 61 69 6e  egister P3 again
258c0 73 74 20 61 20 70 72 65 66 69 78 20 6f 66 20 74  st a prefix of t
258d0 68 65 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  he entry that .*
258e0 2a 20 74 68 65 20 73 6f 72 74 65 72 20 63 75 72  * the sorter cur
258f0 73 6f 72 20 63 75 72 72 65 6e 74 6c 79 20 70 6f  sor currently po
25900 69 6e 74 73 20 74 6f 2e 20 20 4f 6e 6c 79 20 74  ints to.  Only t
25910 68 65 20 66 69 72 73 74 20 50 34 20 66 69 65 6c  he first P4 fiel
25920 64 73 0a 2a 2a 20 6f 66 20 72 5b 50 33 5d 20 61  ds.** of r[P3] a
25930 6e 64 20 74 68 65 20 73 6f 72 74 65 72 20 72 65  nd the sorter re
25940 63 6f 72 64 20 61 72 65 20 63 6f 6d 70 61 72 65  cord are compare
25950 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68  d..**.** If eith
25960 65 72 20 50 33 20 6f 72 20 74 68 65 20 73 6f 72  er P3 or the sor
25970 74 65 72 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e  ter contains a N
25980 55 4c 4c 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68  ULL in one of th
25990 65 69 72 20 73 69 67 6e 69 66 69 63 61 6e 74 0a  eir significant.
259a0 2a 2a 20 66 69 65 6c 64 73 20 28 6e 6f 74 20 63  ** fields (not c
259b0 6f 75 6e 74 69 6e 67 20 74 68 65 20 50 34 20 66  ounting the P4 f
259c0 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64  ields at the end
259d0 20 77 68 69 63 68 20 61 72 65 20 69 67 6e 6f 72   which are ignor
259e0 65 64 29 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20  ed) then.** the 
259f0 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 73  comparison is as
25a00 73 75 6d 65 64 20 74 6f 20 62 65 20 65 71 75 61  sumed to be equa
25a10 6c 2e 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68  l..**.** Fall th
25a20 72 6f 75 67 68 20 74 6f 20 6e 65 78 74 20 69 6e  rough to next in
25a30 73 74 72 75 63 74 69 6f 6e 20 69 66 20 74 68 65  struction if the
25a40 20 74 77 6f 20 72 65 63 6f 72 64 73 20 63 6f 6d   two records com
25a50 70 61 72 65 20 65 71 75 61 6c 20 74 6f 0a 2a 2a  pare equal to.**
25a60 20 65 61 63 68 20 6f 74 68 65 72 2e 20 20 4a 75   each other.  Ju
25a70 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 79  mp to P2 if they
25a80 20 61 72 65 20 64 69 66 66 65 72 65 6e 74 2e 0a   are different..
25a90 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
25aa0 72 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 56 64  rCompare: {.  Vd
25ab0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
25ac0 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6e  int res;.  int n
25ad0 4b 65 79 43 6f 6c 3b 0a 0a 20 20 70 43 20 3d 20  KeyCol;..  pC = 
25ae0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
25af0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  ];.  assert( isS
25b00 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 61  orter(pC) );.  a
25b10 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
25b20 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
25b30 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
25b40 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6e 4b 65 79 43  Op->p3];.  nKeyC
25b50 6f 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a  ol = pOp->p4.i;.
25b60 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 72 63 20    res = 0;.  rc 
25b70 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
25b80 74 65 72 43 6f 6d 70 61 72 65 28 70 43 2c 20 70  terCompare(pC, p
25b90 49 6e 33 2c 20 6e 4b 65 79 43 6f 6c 2c 20 26 72  In3, nKeyCol, &r
25ba0 65 73 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  es);.  VdbeBranc
25bb0 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29  hTaken(res!=0,2)
25bc0 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
25bd0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
25be0 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 20  rror;.  if( res 
25bf0 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
25c00 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 0a  2;.  break;.};..
25c10 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65  /* Opcode: Sorte
25c20 72 44 61 74 61 20 50 31 20 50 32 20 50 33 20 2a  rData P1 P2 P3 *
25c30 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
25c40 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a  r[P2]=data.**.**
25c50 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69   Write into regi
25c60 73 74 65 72 20 50 32 20 74 68 65 20 63 75 72 72  ster P2 the curr
25c70 65 6e 74 20 73 6f 72 74 65 72 20 64 61 74 61 20  ent sorter data 
25c80 66 6f 72 20 73 6f 72 74 65 72 20 63 75 72 73 6f  for sorter curso
25c90 72 20 50 31 2e 0a 2a 2a 20 54 68 65 6e 20 63 6c  r P1..** Then cl
25ca0 65 61 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 68  ear the column h
25cb0 65 61 64 65 72 20 63 61 63 68 65 20 6f 6e 20 63  eader cache on c
25cc0 75 72 73 6f 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  ursor P3..**.** 
25cd0 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e  This opcode is n
25ce0 6f 72 6d 61 6c 6c 79 20 75 73 65 20 74 6f 20 6d  ormally use to m
25cf0 6f 76 65 20 61 20 72 65 63 6f 72 64 20 6f 75 74  ove a record out
25d00 20 6f 66 20 74 68 65 20 73 6f 72 74 65 72 20 61   of the sorter a
25d10 6e 64 20 69 6e 74 6f 0a 2a 2a 20 61 20 72 65 67  nd into.** a reg
25d20 69 73 74 65 72 20 74 68 61 74 20 69 73 20 74 68  ister that is th
25d30 65 20 73 6f 75 72 63 65 20 66 6f 72 20 61 20 70  e source for a p
25d40 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73  seudo-table curs
25d50 6f 72 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  or created using
25d60 0a 2a 2a 20 4f 70 65 6e 50 73 65 75 64 6f 2e 20  .** OpenPseudo. 
25d70 20 54 68 61 74 20 70 73 65 75 64 6f 2d 74 61 62   That pseudo-tab
25d80 6c 65 20 63 75 72 73 6f 72 20 69 73 20 74 68 65  le cursor is the
25d90 20 6f 6e 65 20 74 68 61 74 20 69 73 20 69 64 65   one that is ide
25da0 6e 74 69 66 69 65 64 20 62 79 0a 2a 2a 20 70 61  ntified by.** pa
25db0 72 61 6d 65 74 65 72 20 50 33 2e 20 20 43 6c 65  rameter P3.  Cle
25dc0 61 72 69 6e 67 20 74 68 65 20 50 33 20 63 6f 6c  aring the P3 col
25dd0 75 6d 6e 20 63 61 63 68 65 20 61 73 20 70 61 72  umn cache as par
25de0 74 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65  t of this opcode
25df0 20 73 61 76 65 73 0a 2a 2a 20 75 73 20 66 72 6f   saves.** us fro
25e00 6d 20 68 61 76 69 6e 67 20 74 6f 20 69 73 73 75  m having to issu
25e10 65 20 61 20 73 65 70 61 72 61 74 65 20 4e 75 6c  e a separate Nul
25e20 6c 52 6f 77 20 69 6e 73 74 72 75 63 74 69 6f 6e  lRow instruction
25e30 20 74 6f 20 63 6c 65 61 72 20 74 68 61 74 20 63   to clear that c
25e40 61 63 68 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ache..*/.case OP
25e50 5f 53 6f 72 74 65 72 44 61 74 61 3a 20 7b 0a 20  _SorterData: {. 
25e60 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
25e70 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ..  pOut = &aMem
25e80 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43 20  [pOp->p2];.  pC 
25e90 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
25ea0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69  p1];.  assert( i
25eb0 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20  sSorter(pC) );. 
25ec0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
25ed0 65 53 6f 72 74 65 72 52 6f 77 6b 65 79 28 70 43  eSorterRowkey(pC
25ee0 2c 20 70 4f 75 74 29 3b 0a 20 20 61 73 73 65 72  , pOut);.  asser
25ef0 74 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc!=SQLITE_OK
25f00 20 7c 7c 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73   || (pOut->flags
25f10 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 20 29 3b 0a   & MEM_Blob) );.
25f20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
25f30 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
25f40 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
25f50 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
25f60 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
25f70 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  ;.  p->apCsr[pOp
25f80 2d 3e 70 33 5d 2d 3e 63 61 63 68 65 53 74 61 74  ->p3]->cacheStat
25f90 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
25fa0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
25fb0 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61   Opcode: RowData
25fc0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
25fd0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
25fe0 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  data.**.** Write
25ff0 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
26000 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72  2 the complete r
26010 6f 77 20 64 61 74 61 20 66 6f 72 20 63 75 72 73  ow data for curs
26020 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20  or P1..** There 
26030 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61  is no interpreta
26040 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61  tion of the data
26050 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73  .  .** It is jus
26060 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68  t copied onto th
26070 65 20 50 32 20 72 65 67 69 73 74 65 72 20 65 78  e P2 register ex
26080 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20  actly as .** it 
26090 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20  is found in the 
260a0 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
260b0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63  *.** If the P1 c
260c0 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f  ursor must be po
260d0 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69  inting to a vali
260e0 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c  d row (not a NUL
260f0 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72  L row).** of a r
26100 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  eal table, not a
26110 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a   pseudo-table..*
26120 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  /./* Opcode: Row
26130 4b 65 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Key P1 P2 * * *.
26140 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
26150 32 5d 3d 6b 65 79 0a 2a 2a 0a 2a 2a 20 57 72 69  2]=key.**.** Wri
26160 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  te into register
26170 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65   P2 the complete
26180 20 72 6f 77 20 6b 65 79 20 66 6f 72 20 63 75 72   row key for cur
26190 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65  sor P1..** There
261a0 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74   is no interpret
261b0 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74  ation of the dat
261c0 61 2e 20 20 0a 2a 2a 20 54 68 65 20 6b 65 79 20  a.  .** The key 
261d0 69 73 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74  is copied onto t
261e0 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20 65  he P2 register e
261f0 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74  xactly as .** it
26200 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65   is found in the
26210 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
26220 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
26230 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70  cursor must be p
26240 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c  ointing to a val
26250 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55  id row (not a NU
26260 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20  LL row).** of a 
26270 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
26280 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  a pseudo-table..
26290 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 4b 65  */.case OP_RowKe
262a0 79 3a 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44 61  y:.case OP_RowDa
262b0 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  ta: {.  VdbeCurs
262c0 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
262d0 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 75 33 32  or *pCrsr;.  u32
262e0 20 6e 3b 0a 20 20 69 36 34 20 6e 36 34 3b 0a 0a   n;.  i64 n64;..
262f0 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
26300 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p2];.  memAb
26310 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
26320 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 4e 6f 74 65  Out);..  /* Note
26330 20 74 68 61 74 20 52 6f 77 4b 65 79 20 61 6e 64   that RowKey and
26340 20 52 6f 77 44 61 74 61 20 61 72 65 20 72 65 61   RowData are rea
26350 6c 6c 79 20 65 78 61 63 74 6c 79 20 74 68 65 20  lly exactly the 
26360 73 61 6d 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  same instruction
26370 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
26380 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
26390 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
263a0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
263b0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
263c0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
263d0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
263e0 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
263f0 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74  TREE );.  assert
26400 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d  ( isSorter(pC)==
26410 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
26420 43 2d 3e 69 73 54 61 62 6c 65 20 7c 7c 20 70 4f  C->isTable || pO
26430 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 52 6f  p->opcode!=OP_Ro
26440 77 44 61 74 61 20 29 3b 0a 20 20 61 73 73 65 72  wData );.  asser
26450 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  t( pC->isTable==
26460 30 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  0 || pOp->opcode
26470 3d 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a  ==OP_RowData );.
26480 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 75    assert( pC->nu
26490 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20 20 61 73  llRow==0 );.  as
264a0 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75  sert( pC->uc.pCu
264b0 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 70 43 72  rsor!=0 );.  pCr
264c0 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72  sr = pC->uc.pCur
264d0 73 6f 72 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4f  sor;..  /* The O
264e0 50 5f 52 6f 77 4b 65 79 20 61 6e 64 20 4f 50 5f  P_RowKey and OP_
264f0 52 6f 77 44 61 74 61 20 6f 70 63 6f 64 65 73 20  RowData opcodes 
26500 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20 4f 50  always follow OP
26510 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a 20 20  _NotExists or.  
26520 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 2f 4f 70 5f  ** OP_Rewind/Op_
26530 4e 65 78 74 20 77 69 74 68 20 6e 6f 20 69 6e 74  Next with no int
26540 65 72 76 65 6e 69 6e 67 20 69 6e 73 74 72 75 63  ervening instruc
26550 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74  tions that might
26560 20 69 6e 76 61 6c 69 64 61 74 65 0a 20 20 2a 2a   invalidate.  **
26570 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 49 66   the cursor.  If
26580 20 74 68 69 73 20 77 68 65 72 65 20 6e 6f 74 20   this where not 
26590 74 68 65 20 63 61 73 65 2c 20 6f 6e 20 6f 66 20  the case, on of 
265a0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 73  the following as
265b0 73 65 72 74 28 29 73 0a 20 20 2a 2a 20 77 6f 75  sert()s.  ** wou
265c0 6c 64 20 66 61 69 6c 2e 20 20 53 68 6f 75 6c 64  ld fail.  Should
265d0 20 74 68 69 73 20 65 76 65 72 20 63 68 61 6e 67   this ever chang
265e0 65 20 28 62 65 63 61 75 73 65 20 6f 66 20 63 68  e (because of ch
265f0 61 6e 67 65 73 20 69 6e 20 74 68 65 20 63 6f 64  anges in the cod
26600 65 0a 20 20 2a 2a 20 67 65 6e 65 72 61 74 6f 72  e.  ** generator
26610 29 20 74 68 65 6e 20 74 68 65 20 66 69 78 20 77  ) then the fix w
26620 6f 75 6c 64 20 62 65 20 74 6f 20 69 6e 73 65 72  ould be to inser
26630 74 20 61 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a  t a call to.  **
26640 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
26650 6f 72 4d 6f 76 65 74 6f 28 29 2e 0a 20 20 2a 2f  orMoveto()..  */
26660 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64  .  assert( pC->d
26670 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
26680 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71   );.  assert( sq
26690 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
266a0 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29  IsValid(pCrsr) )
266b0 3b 0a 23 69 66 20 30 20 20 2f 2a 20 4e 6f 74 20  ;.#if 0  /* Not 
266c0 72 65 71 75 69 72 65 64 20 64 75 65 20 74 6f 20  required due to 
266d0 74 68 65 20 70 72 65 76 69 6f 75 73 20 74 6f 20  the previous to 
266e0 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
266f0 6e 74 73 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  nts */.  rc = sq
26700 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
26710 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28  oveto(pC);.  if(
26720 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
26730 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
26740 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66  to_error;.#endif
26750 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61  ..  if( pC->isTa
26760 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73  ble==0 ){.    as
26770 73 65 72 74 28 20 21 70 43 2d 3e 69 73 54 61 62  sert( !pC->isTab
26780 6c 65 20 29 3b 0a 20 20 20 20 56 56 41 5f 4f 4e  le );.    VVA_ON
26790 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33  LY(rc =) sqlite3
267a0 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72  BtreeKeySize(pCr
267b0 73 72 2c 20 26 6e 36 34 29 3b 0a 20 20 20 20 61  sr, &n64);.    a
267c0 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
267d0 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 54 72  E_OK );    /* Tr
267e0 75 65 20 62 65 63 61 75 73 65 20 6f 66 20 43 75  ue because of Cu
267f0 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c  rsorMoveto() cal
26800 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20 69  l above */.    i
26810 66 28 20 6e 36 34 3e 64 62 2d 3e 61 4c 69 6d 69  f( n64>db->aLimi
26820 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
26830 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20  ENGTH] ){.      
26840 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
26850 20 20 7d 0a 20 20 20 20 6e 20 3d 20 28 75 33 32    }.    n = (u32
26860 29 6e 36 34 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  )n64;.  }else{. 
26870 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d     VVA_ONLY(rc =
26880 29 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61  ) sqlite3BtreeDa
26890 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20 26 6e  taSize(pCrsr, &n
268a0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  );.    assert( r
268b0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
268c0 20 20 20 2f 2a 20 44 61 74 61 53 69 7a 65 28 29     /* DataSize()
268d0 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a   cannot fail */.
268e0 20 20 20 20 69 66 28 20 6e 3e 28 75 33 32 29 64      if( n>(u32)d
268f0 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
26900 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
26910 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f  {.      goto too
26920 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  _big;.    }.  }.
26930 20 20 74 65 73 74 63 61 73 65 28 20 6e 3d 3d 30    testcase( n==0
26940 20 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65   );.  if( sqlite
26950 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64  3VdbeMemClearAnd
26960 52 65 73 69 7a 65 28 70 4f 75 74 2c 20 4d 41 58  Resize(pOut, MAX
26970 28 6e 2c 33 32 29 29 20 29 7b 0a 20 20 20 20 67  (n,32)) ){.    g
26980 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
26990 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e 3b 0a 20    pOut->n = n;. 
269a0 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
269b0 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b  pOut, MEM_Blob);
269c0 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62  .  if( pC->isTab
269d0 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20  le==0 ){.    rc 
269e0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65  = sqlite3BtreeKe
269f0 79 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70  y(pCrsr, 0, n, p
26a00 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c 73 65  Out->z);.  }else
26a10 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
26a20 65 33 42 74 72 65 65 44 61 74 61 28 70 43 72 73  e3BtreeData(pCrs
26a30 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a  r, 0, n, pOut->z
26a40 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20  );.  }.  if( rc 
26a50 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
26a60 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 4f 75  _to_error;.  pOu
26a70 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f  t->enc = SQLITE_
26a80 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73  UTF8;  /* In cas
26a90 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76  e the blob is ev
26aa0 65 72 20 63 61 73 74 20 74 6f 20 74 65 78 74 20  er cast to text 
26ab0 2a 2f 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  */.  UPDATE_MAX_
26ac0 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
26ad0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
26ae0 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
26af0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
26b00 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64 20 50 31  Opcode: Rowid P1
26b10 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
26b20 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77  opsis: r[P2]=row
26b30 69 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69  id.**.** Store i
26b40 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  n register P2 an
26b50 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69   integer which i
26b60 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65  s the key of the
26b70 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 68 61   table entry tha
26b80 74 0a 2a 2a 20 50 31 20 69 73 20 63 75 72 72 65  t.** P1 is curre
26b90 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a  ntly point to..*
26ba0 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65 20 65  *.** P1 can be e
26bb0 69 74 68 65 72 20 61 6e 20 6f 72 64 69 6e 61 72  ither an ordinar
26bc0 79 20 74 61 62 6c 65 20 6f 72 20 61 20 76 69 72  y table or a vir
26bd0 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65  tual table.  The
26be0 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65  re used to.** be
26bf0 20 61 20 73 65 70 61 72 61 74 65 20 4f 50 5f 56   a separate OP_V
26c00 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 66 6f 72  Rowid opcode for
26c10 20 75 73 65 20 77 69 74 68 20 76 69 72 74 75 61   use with virtua
26c20 6c 20 74 61 62 6c 65 73 2c 20 62 75 74 20 74 68  l tables, but th
26c30 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65  is.** one opcode
26c40 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20 62   now works for b
26c50 6f 74 68 20 74 61 62 6c 65 20 74 79 70 65 73 2e  oth table types.
26c60 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69  .*/.case OP_Rowi
26c70 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  d: {            
26c80 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
26c90 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
26ca0 3b 0a 20 20 69 36 34 20 76 3b 0a 20 20 73 71 6c  ;.  i64 v;.  sql
26cb0 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
26cc0 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  ;.  const sqlite
26cd0 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
26ce0 65 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74  e;..  pOut = out
26cf0 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
26d00 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Op);.  assert( p
26d10 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
26d20 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
26d30 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
26d40 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
26d50 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
26d60 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
26d70 75 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f  urType!=CURTYPE_
26d80 50 53 45 55 44 4f 20 7c 7c 20 70 43 2d 3e 6e 75  PSEUDO || pC->nu
26d90 6c 6c 52 6f 77 20 29 3b 0a 20 20 69 66 28 20 70  llRow );.  if( p
26da0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  C->nullRow ){.  
26db0 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
26dc0 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62 72  MEM_Null;.    br
26dd0 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  eak;.  }else if(
26de0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
26df0 65 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d 20 70  eto ){.    v = p
26e00 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b  C->movetoTarget;
26e10 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
26e20 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
26e30 45 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43  E.  }else if( pC
26e40 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
26e50 59 50 45 5f 56 54 41 42 20 29 7b 0a 20 20 20 20  YPE_VTAB ){.    
26e60 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
26e70 56 43 75 72 21 3d 30 20 29 3b 0a 20 20 20 20 70  VCur!=0 );.    p
26e80 56 74 61 62 20 3d 20 70 43 2d 3e 75 63 2e 70 56  Vtab = pC->uc.pV
26e90 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20  Cur->pVtab;.    
26ea0 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
26eb0 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73  >pModule;.    as
26ec0 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78  sert( pModule->x
26ed0 52 6f 77 69 64 20 29 3b 0a 20 20 20 20 72 63 20  Rowid );.    rc 
26ee0 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69  = pModule->xRowi
26ef0 64 28 70 43 2d 3e 75 63 2e 70 56 43 75 72 2c 20  d(pC->uc.pVCur, 
26f00 26 76 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  &v);.    sqlite3
26f10 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
26f20 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20  (p, pVtab);.    
26f30 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
26f40 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
26f50 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
26f60 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
26f70 41 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b  ABLE */.  }else{
26f80 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
26f90 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
26fa0 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20  PE_BTREE );.    
26fb0 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
26fc0 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20  Cursor!=0 );.   
26fd0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
26fe0 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 70  eCursorRestore(p
26ff0 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29  C);.    if( rc )
27000 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
27010 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69 66  to_error;.    if
27020 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  ( pC->nullRow ){
27030 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  .      pOut->fla
27040 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
27050 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
27060 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  }.    rc = sqlit
27070 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
27080 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26  C->uc.pCursor, &
27090 76 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  v);.    assert( 
270a0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
270b0 20 20 2f 2a 20 41 6c 77 61 79 73 20 73 6f 20 62    /* Always so b
270c0 65 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72  ecause of Cursor
270d0 52 65 73 74 6f 72 65 28 29 20 61 62 6f 76 65 20  Restore() above 
270e0 2a 2f 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75  */.  }.  pOut->u
270f0 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b  .i = v;.  break;
27100 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
27110 75 6c 6c 52 6f 77 20 50 31 20 2a 20 2a 20 2a 20  ullRow P1 * * * 
27120 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65  *.**.** Move the
27130 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20   cursor P1 to a 
27140 6e 75 6c 6c 20 72 6f 77 2e 20 20 41 6e 79 20 4f  null row.  Any O
27150 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72 61 74 69  P_Column operati
27160 6f 6e 73 0a 2a 2a 20 74 68 61 74 20 6f 63 63 75  ons.** that occu
27170 72 20 77 68 69 6c 65 20 74 68 65 20 63 75 72 73  r while the curs
27180 6f 72 20 69 73 20 6f 6e 20 74 68 65 20 6e 75 6c  or is on the nul
27190 6c 20 72 6f 77 20 77 69 6c 6c 20 61 6c 77 61 79  l row will alway
271a0 73 0a 2a 2a 20 77 72 69 74 65 20 61 20 4e 55 4c  s.** write a NUL
271b0 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75  L..*/.case OP_Nu
271c0 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56 64 62 65 43  llRow: {.  VdbeC
271d0 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73  ursor *pC;..  as
271e0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
271f0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
27200 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
27210 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
27220 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
27230 21 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c  !=0 );.  pC->nul
27240 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 2d 3e  lRow = 1;.  pC->
27250 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
27260 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28  CHE_STALE;.  if(
27270 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
27280 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 7b 0a  URTYPE_BTREE ){.
27290 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
272a0 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  uc.pCursor!=0 );
272b0 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
272c0 65 43 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d  eClearCursor(pC-
272d0 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20  >uc.pCursor);.  
272e0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
272f0 20 4f 70 63 6f 64 65 3a 20 4c 61 73 74 20 50 31   Opcode: Last P1
27300 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
27310 20 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66   The next use of
27320 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f   the Rowid or Co
27330 6c 75 6d 6e 20 6f 72 20 50 72 65 76 20 69 6e 73  lumn or Prev ins
27340 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20  truction for P1 
27350 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74  .** will refer t
27360 6f 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79  o the last entry
27370 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
27380 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
27390 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65  .** If the table
273a0 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70   or index is emp
273b0 74 79 20 61 6e 64 20 50 32 3e 30 2c 20 74 68 65  ty and P2>0, the
273c0 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  n jump immediate
273d0 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20  ly to P2..** If 
273e0 50 32 20 69 73 20 30 20 6f 72 20 69 66 20 74 68  P2 is 0 or if th
273f0 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
27400 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66   is not empty, f
27410 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  all through.** t
27420 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
27430 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
27440 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
27450 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
27460 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d   configured to m
27470 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f  ove in reverse o
27480 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68  rder,.** from th
27490 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65  e end toward the
274a0 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20   beginning.  In 
274b0 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
274c0 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f   cursor is.** co
274d0 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20  nfigured to use 
274e0 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a  Prev, not Next..
274f0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 61 73 74 3a  */.case OP_Last:
27500 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
27510 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  p */.  VdbeCurso
27520 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
27530 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
27540 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  res;..  assert( 
27550 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
27560 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
27570 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
27580 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
27590 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
275a0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
275b0 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
275c0 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43 72 73  _BTREE );.  pCrs
275d0 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  r = pC->uc.pCurs
275e0 6f 72 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20  or;.  res = 0;. 
275f0 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d   assert( pCrsr!=
27600 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  0 );.  rc = sqli
27610 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 72  te3BtreeLast(pCr
27620 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 70 43 2d  sr, &res);.  pC-
27630 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72  >nullRow = (u8)r
27640 65 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72  es;.  pC->deferr
27650 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
27660 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
27670 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
27680 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
27690 3d 20 70 4f 70 2d 3e 70 33 3b 0a 23 69 66 64 65  = pOp->p3;.#ifde
276a0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
276b0 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50   pC->seekOp = OP
276c0 5f 4c 61 73 74 3b 0a 23 65 6e 64 69 66 0a 20 20  _Last;.#endif.  
276d0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
276e0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
276f0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3e  ;.  if( pOp->p2>
27700 30 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61  0 ){.    VdbeBra
27710 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c  nchTaken(res!=0,
27720 32 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 20  2);.    if( res 
27730 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
27740 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
27750 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  }.../* Opcode: S
27760 6f 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ort P1 P2 * * *.
27770 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
27780 65 20 64 6f 65 73 20 65 78 61 63 74 6c 79 20 74  e does exactly t
27790 68 65 20 73 61 6d 65 20 74 68 69 6e 67 20 61 73  he same thing as
277a0 20 4f 50 5f 52 65 77 69 6e 64 20 65 78 63 65 70   OP_Rewind excep
277b0 74 20 74 68 61 74 0a 2a 2a 20 69 74 20 69 6e 63  t that.** it inc
277c0 72 65 6d 65 6e 74 73 20 61 6e 20 75 6e 64 6f 63  rements an undoc
277d0 75 6d 65 6e 74 65 64 20 67 6c 6f 62 61 6c 20 76  umented global v
277e0 61 72 69 61 62 6c 65 20 75 73 65 64 20 66 6f 72  ariable used for
277f0 20 74 65 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20   testing..**.** 
27800 53 6f 72 74 69 6e 67 20 69 73 20 61 63 63 6f 6d  Sorting is accom
27810 70 6c 69 73 68 65 64 20 62 79 20 77 72 69 74 69  plished by writi
27820 6e 67 20 72 65 63 6f 72 64 73 20 69 6e 74 6f 20  ng records into 
27830 61 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 2c  a sorting index,
27840 0a 2a 2a 20 74 68 65 6e 20 72 65 77 69 6e 64 69  .** then rewindi
27850 6e 67 20 74 68 61 74 20 69 6e 64 65 78 20 61 6e  ng that index an
27860 64 20 70 6c 61 79 69 6e 67 20 69 74 20 62 61 63  d playing it bac
27870 6b 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67  k from beginning
27880 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20 20 57 65 20   to.** end.  We 
27890 75 73 65 20 74 68 65 20 4f 50 5f 53 6f 72 74 20  use the OP_Sort 
278a0 6f 70 63 6f 64 65 20 69 6e 73 74 65 61 64 20 6f  opcode instead o
278b0 66 20 4f 50 5f 52 65 77 69 6e 64 20 74 6f 20 64  f OP_Rewind to d
278c0 6f 20 74 68 65 0a 2a 2a 20 72 65 77 69 6e 64 69  o the.** rewindi
278d0 6e 67 20 73 6f 20 74 68 61 74 20 74 68 65 20 67  ng so that the g
278e0 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 77  lobal variable w
278f0 69 6c 6c 20 62 65 20 69 6e 63 72 65 6d 65 6e 74  ill be increment
27900 65 64 20 61 6e 64 0a 2a 2a 20 72 65 67 72 65 73  ed and.** regres
27910 73 69 6f 6e 20 74 65 73 74 73 20 63 61 6e 20 64  sion tests can d
27920 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
27930 20 6f 72 20 6e 6f 74 20 74 68 65 20 6f 70 74 69   or not the opti
27940 6d 69 7a 65 72 20 69 73 0a 2a 2a 20 63 6f 72 72  mizer is.** corr
27950 65 63 74 6c 79 20 6f 70 74 69 6d 69 7a 69 6e 67  ectly optimizing
27960 20 6f 75 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63   out sorts..*/.c
27970 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 53 6f 72  ase OP_SorterSor
27980 74 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f  t:    /* jump */
27990 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 3a 20 7b  .case OP_Sort: {
279a0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
279b0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
279c0 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f  _TEST.  sqlite3_
279d0 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b 3b 0a 20 20  sort_count++;.  
279e0 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
279f0 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20  ount--;.#endif. 
27a00 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c   p->aCounter[SQL
27a10 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53  ITE_STMTSTATUS_S
27a20 4f 52 54 5d 2b 2b 3b 0a 20 20 2f 2a 20 46 61 6c  ORT]++;.  /* Fal
27a30 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
27a40 50 5f 52 65 77 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a  P_Rewind */.}./*
27a50 20 4f 70 63 6f 64 65 3a 20 52 65 77 69 6e 64 20   Opcode: Rewind 
27a60 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
27a70 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f  * The next use o
27a80 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43  f the Rowid or C
27a90 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e  olumn or Next in
27aa0 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31  struction for P1
27ab0 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20   .** will refer 
27ac0 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6e 74  to the first ent
27ad0 72 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ry in the databa
27ae0 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  se table or inde
27af0 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62  x..** If the tab
27b00 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65  le or index is e
27b10 6d 70 74 79 2c 20 6a 75 6d 70 20 69 6d 6d 65 64  mpty, jump immed
27b20 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a  iately to P2..**
27b30 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   If the table or
27b40 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d   index is not em
27b50 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  pty, fall throug
27b60 68 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  h to the followi
27b70 6e 67 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69  ng .** instructi
27b80 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  on..**.** This o
27b90 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65  pcode leaves the
27ba0 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72   cursor configur
27bb0 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f  ed to move in fo
27bc0 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20  rward order,.** 
27bd0 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
27be0 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e  ng toward the en
27bf0 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  d.  In other wor
27c00 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69  ds, the cursor i
27c10 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20  s.** configured 
27c20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74  to use Next, not
27c30 20 50 72 65 76 2e 0a 2a 2f 0a 63 61 73 65 20 4f   Prev..*/.case O
27c40 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20 20 20 20  P_Rewind: {     
27c50 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
27c60 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
27c70 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
27c80 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20  r;.  int res;.. 
27c90 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
27ca0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
27cb0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
27cc0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
27cd0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
27ce0 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
27cf0 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
27d00 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  ==(pOp->opcode==
27d10 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 29 20 29  OP_SorterSort) )
27d20 3b 0a 20 20 72 65 73 20 3d 20 31 3b 0a 23 69 66  ;.  res = 1;.#if
27d30 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
27d40 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20  .  pC->seekOp = 
27d50 4f 50 5f 52 65 77 69 6e 64 3b 0a 23 65 6e 64 69  OP_Rewind;.#endi
27d60 66 0a 20 20 69 66 28 20 69 73 53 6f 72 74 65 72  f.  if( isSorter
27d70 28 70 43 29 20 29 7b 0a 20 20 20 20 72 63 20 3d  (pC) ){.    rc =
27d80 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
27d90 65 72 52 65 77 69 6e 64 28 70 43 2c 20 26 72 65  erRewind(pC, &re
27da0 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  s);.  }else{.   
27db0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
27dc0 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
27dd0 54 52 45 45 20 29 3b 0a 20 20 20 20 70 43 72 73  TREE );.    pCrs
27de0 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  r = pC->uc.pCurs
27df0 6f 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  or;.    assert( 
27e00 70 43 72 73 72 20 29 3b 0a 20 20 20 20 72 63 20  pCrsr );.    rc 
27e10 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 69  = sqlite3BtreeFi
27e20 72 73 74 28 70 43 72 73 72 2c 20 26 72 65 73 29  rst(pCrsr, &res)
27e30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  ;.    pC->deferr
27e40 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
27e50 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
27e60 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
27e70 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20  .  }.  if( rc ) 
27e80 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
27e90 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 43 2d 3e 6e  o_error;.  pC->n
27ea0 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73  ullRow = (u8)res
27eb0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
27ec0 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  >p2>0 && pOp->p2
27ed0 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 56 64 62  <p->nOp );.  Vdb
27ee0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
27ef0 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65  !=0,2);.  if( re
27f00 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  s ) goto jump_to
27f10 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  _p2;.  break;.}.
27f20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74  ./* Opcode: Next
27f30 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
27f40 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 63 75  **.** Advance cu
27f50 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
27f60 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
27f70 20 6e 65 78 74 20 6b 65 79 2f 64 61 74 61 20 70   next key/data p
27f80 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61  air in its.** ta
27f90 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49  ble or index.  I
27fa0 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d  f there are no m
27fb0 6f 72 65 20 6b 65 79 2f 76 61 6c 75 65 20 70 61  ore key/value pa
27fc0 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  irs then fall th
27fd0 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
27fe0 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
27ff0 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74  ction.  But if t
28000 68 65 20 63 75 72 73 6f 72 20 61 64 76 61 6e 63  he cursor advanc
28010 65 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c  e was successful
28020 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69  ,.** jump immedi
28030 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a  ately to P2..**.
28040 2a 2a 20 54 68 65 20 4e 65 78 74 20 6f 70 63 6f  ** The Next opco
28050 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  de is only valid
28060 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53 65   following an Se
28070 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 6f 72  ekGT, SeekGE, or
28080 0a 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 20 6f 70  .** OP_Rewind op
28090 63 6f 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73  code used to pos
280a0 69 74 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72  ition the cursor
280b0 2e 20 20 4e 65 78 74 20 69 73 20 6e 6f 74 20 61  .  Next is not a
280c0 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c  llowed.** to fol
280d0 6c 6f 77 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b  low SeekLT, Seek
280e0 4c 45 2c 20 6f 72 20 4f 50 5f 4c 61 73 74 2e 0a  LE, or OP_Last..
280f0 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72  **.** The P1 cur
28100 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20  sor must be for 
28110 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
28120 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
28130 2e 20 20 50 31 20 6d 75 73 74 20 68 61 76 65 0a  .  P1 must have.
28140 2a 2a 20 62 65 65 6e 20 6f 70 65 6e 65 64 20 70  ** been opened p
28150 72 69 6f 72 20 74 6f 20 74 68 69 73 20 6f 70 63  rior to this opc
28160 6f 64 65 20 6f 72 20 74 68 65 20 70 72 6f 67 72  ode or the progr
28170 61 6d 20 77 69 6c 6c 20 73 65 67 66 61 75 6c 74  am will segfault
28180 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20 76  ..**.** The P3 v
28190 61 6c 75 65 20 69 73 20 61 20 68 69 6e 74 20 74  alue is a hint t
281a0 6f 20 74 68 65 20 62 74 72 65 65 20 69 6d 70 6c  o the btree impl
281b0 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49 66 20 50  ementation. If P
281c0 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a 20 6d 65  3==1, that.** me
281d0 61 6e 73 20 50 31 20 69 73 20 61 6e 20 53 51 4c  ans P1 is an SQL
281e0 20 69 6e 64 65 78 20 61 6e 64 20 74 68 61 74 20   index and that 
281f0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
28200 20 63 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e   could have been
28210 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69 66 20 74  .** omitted if t
28220 68 61 74 20 69 6e 64 65 78 20 68 61 64 20 62 65  hat index had be
28230 65 6e 20 75 6e 69 71 75 65 2e 20 20 50 33 20 69  en unique.  P3 i
28240 73 20 75 73 75 61 6c 6c 79 20 30 2e 20 20 50 33  s usually 0.  P3
28250 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 65 69   is.** always ei
28260 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a  ther 0 or 1..**.
28270 2a 2a 20 50 34 20 69 73 20 61 6c 77 61 79 73 20  ** P4 is always 
28280 6f 66 20 74 79 70 65 20 50 34 5f 41 44 56 41 4e  of type P4_ADVAN
28290 43 45 2e 20 54 68 65 20 66 75 6e 63 74 69 6f 6e  CE. The function
282a0 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74 73 20   pointer points 
282b0 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42 74 72  to.** sqlite3Btr
282c0 65 65 4e 65 78 74 28 29 2e 0a 2a 2a 0a 2a 2a 20  eeNext()..**.** 
282d0 49 66 20 50 35 20 69 73 20 70 6f 73 69 74 69 76  If P5 is positiv
282e0 65 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69  e and the jump i
282f0 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76  s taken, then ev
28300 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e  ent counter.** n
28310 75 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68  umber P5-1 in th
28320 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
28330 6d 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e  ment is incremen
28340 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ted..**.** See a
28350 6c 73 6f 3a 20 50 72 65 76 2c 20 4e 65 78 74 49  lso: Prev, NextI
28360 66 4f 70 65 6e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  fOpen.*/./* Opco
28370 64 65 3a 20 4e 65 78 74 49 66 4f 70 65 6e 20 50  de: NextIfOpen P
28380 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
28390 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
283a0 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
283b0 4e 65 78 74 20 65 78 63 65 70 74 20 74 68 61 74  Next except that
283c0 20 69 66 20 63 75 72 73 6f 72 20 50 31 20 69 73   if cursor P1 is
283d0 20 6e 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69 74 20   not.** open it 
283e0 62 65 68 61 76 65 73 20 61 20 6e 6f 2d 6f 70 2e  behaves a no-op.
283f0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .*/./* Opcode: P
28400 72 65 76 20 50 31 20 50 32 20 50 33 20 50 34 20  rev P1 P2 P3 P4 
28410 50 35 0a 2a 2a 0a 2a 2a 20 42 61 63 6b 20 75 70  P5.**.** Back up
28420 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
28430 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  at it points to 
28440 74 68 65 20 70 72 65 76 69 6f 75 73 20 6b 65 79  the previous key
28450 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20 69 74  /data pair in it
28460 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e  s.** table or in
28470 64 65 78 2e 20 20 49 66 20 74 68 65 72 65 20 69  dex.  If there i
28480 73 20 6e 6f 20 70 72 65 76 69 6f 75 73 20 6b 65  s no previous ke
28490 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74 68  y/value pairs th
284a0 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a  en fall through.
284b0 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ** to the follow
284c0 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ing instruction.
284d0 20 20 42 75 74 20 69 66 20 74 68 65 20 63 75 72    But if the cur
284e0 73 6f 72 20 62 61 63 6b 75 70 20 77 61 73 20 73  sor backup was s
284f0 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75  uccessful,.** ju
28500 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
28510 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 54  o P2..**.**.** T
28520 68 65 20 50 72 65 76 20 6f 70 63 6f 64 65 20 69  he Prev opcode i
28530 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 6c  s only valid fol
28540 6c 6f 77 69 6e 67 20 61 6e 20 53 65 65 6b 4c 54  lowing an SeekLT
28550 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 0a 2a 2a 20  , SeekLE, or.** 
28560 4f 50 5f 4c 61 73 74 20 6f 70 63 6f 64 65 20 75  OP_Last opcode u
28570 73 65 64 20 74 6f 20 70 6f 73 69 74 69 6f 6e 20  sed to position 
28580 74 68 65 20 63 75 72 73 6f 72 2e 20 20 50 72 65  the cursor.  Pre
28590 76 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  v is not allowed
285a0 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20 53 65  .** to follow Se
285b0 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 6f 72  ekGT, SeekGE, or
285c0 20 4f 50 5f 52 65 77 69 6e 64 2e 0a 2a 2a 0a 2a   OP_Rewind..**.*
285d0 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20  * The P1 cursor 
285e0 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65  must be for a re
285f0 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
28600 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49  pseudo-table.  I
28610 66 20 50 31 20 69 73 0a 2a 2a 20 6e 6f 74 20 6f  f P1 is.** not o
28620 70 65 6e 20 74 68 65 6e 20 74 68 65 20 62 65 68  pen then the beh
28630 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66 69 6e  avior is undefin
28640 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33  ed..**.** The P3
28650 20 76 61 6c 75 65 20 69 73 20 61 20 68 69 6e 74   value is a hint
28660 20 74 6f 20 74 68 65 20 62 74 72 65 65 20 69 6d   to the btree im
28670 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49 66  plementation. If
28680 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a 20   P3==1, that.** 
28690 6d 65 61 6e 73 20 50 31 20 69 73 20 61 6e 20 53  means P1 is an S
286a0 51 4c 20 69 6e 64 65 78 20 61 6e 64 20 74 68 61  QL index and tha
286b0 74 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  t this instructi
286c0 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65 20 62 65  on could have be
286d0 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69 66  en.** omitted if
286e0 20 74 68 61 74 20 69 6e 64 65 78 20 68 61 64 20   that index had 
286f0 62 65 65 6e 20 75 6e 69 71 75 65 2e 20 20 50 33  been unique.  P3
28700 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e 20 20   is usually 0.  
28710 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20  P3 is.** always 
28720 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a  either 0 or 1..*
28730 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77 61 79  *.** P4 is alway
28740 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41 44 56  s of type P4_ADV
28750 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63 74 69  ANCE. The functi
28760 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74  on pointer point
28770 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42  s to.** sqlite3B
28780 74 72 65 65 50 72 65 76 69 6f 75 73 28 29 2e 0a  treePrevious()..
28790 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70  **.** If P5 is p
287a0 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68 65 20  ositive and the 
287b0 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74  jump is taken, t
287c0 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65  hen event counte
287d0 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31  r.** number P5-1
287e0 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
287f0 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e   statement is in
28800 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2f 0a 2f 2a  cremented..*/./*
28810 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 49 66 4f   Opcode: PrevIfO
28820 70 65 6e 20 50 31 20 50 32 20 50 33 20 50 34 20  pen P1 P2 P3 P4 
28830 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  P5.**.** This op
28840 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73 74 20  code works just 
28850 6c 69 6b 65 20 50 72 65 76 20 65 78 63 65 70 74  like Prev except
28860 20 74 68 61 74 20 69 66 20 63 75 72 73 6f 72 20   that if cursor 
28870 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70 65  P1 is not.** ope
28880 6e 20 69 74 20 62 65 68 61 76 65 73 20 61 20 6e  n it behaves a n
28890 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  o-op..*/.case OP
288a0 5f 53 6f 72 74 65 72 4e 65 78 74 3a 20 7b 20 20  _SorterNext: {  
288b0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62  /* jump */.  Vdb
288c0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
288d0 6e 74 20 72 65 73 3b 0a 0a 20 20 70 43 20 3d 20  nt res;..  pC = 
288e0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
288f0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  ];.  assert( isS
28900 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 72  orter(pC) );.  r
28910 65 73 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73  es = 0;.  rc = s
28920 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
28930 4e 65 78 74 28 64 62 2c 20 70 43 2c 20 26 72 65  Next(db, pC, &re
28940 73 29 3b 0a 20 20 67 6f 74 6f 20 6e 65 78 74 5f  s);.  goto next_
28950 74 61 69 6c 3b 0a 63 61 73 65 20 4f 50 5f 50 72  tail;.case OP_Pr
28960 65 76 49 66 4f 70 65 6e 3a 20 20 20 20 2f 2a 20  evIfOpen:    /* 
28970 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
28980 4e 65 78 74 49 66 4f 70 65 6e 3a 20 20 20 20 2f  NextIfOpen:    /
28990 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20  * jump */.  if( 
289a0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
289b0 5d 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20  ]==0 ) break;.  
289c0 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
289d0 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 3a  */.case OP_Prev:
289e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
289f0 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78  p */.case OP_Nex
28a00 74 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  t:          /* j
28a10 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ump */.  assert(
28a20 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
28a30 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
28a40 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
28a50 4f 70 2d 3e 70 35 3c 41 72 72 61 79 53 69 7a 65  Op->p5<ArraySize
28a60 28 70 2d 3e 61 43 6f 75 6e 74 65 72 29 20 29 3b  (p->aCounter) );
28a70 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
28a80 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 72 65 73  [pOp->p1];.  res
28a90 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73   = pOp->p3;.  as
28aa0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
28ab0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
28ac0 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
28ad0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
28ae0 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
28af0 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
28b00 65 72 74 28 20 72 65 73 3d 3d 30 20 7c 7c 20 28  ert( res==0 || (
28b10 72 65 73 3d 3d 31 20 26 26 20 70 43 2d 3e 69 73  res==1 && pC->is
28b20 54 61 62 6c 65 3d 3d 30 29 20 29 3b 0a 20 20 74  Table==0) );.  t
28b30 65 73 74 63 61 73 65 28 20 72 65 73 3d 3d 31 20  estcase( res==1 
28b40 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
28b50 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78  ->opcode!=OP_Nex
28b60 74 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64  t || pOp->p4.xAd
28b70 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74  vance==sqlite3Bt
28b80 72 65 65 4e 65 78 74 20 29 3b 0a 20 20 61 73 73  reeNext );.  ass
28b90 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
28ba0 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70  !=OP_Prev || pOp
28bb0 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73  ->p4.xAdvance==s
28bc0 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69  qlite3BtreePrevi
28bd0 6f 75 73 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ous );.  assert(
28be0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
28bf0 5f 4e 65 78 74 49 66 4f 70 65 6e 20 7c 7c 20 70  _NextIfOpen || p
28c00 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d  Op->p4.xAdvance=
28c10 3d 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78  =sqlite3BtreeNex
28c20 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t );.  assert( p
28c30 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50  Op->opcode!=OP_P
28c40 72 65 76 49 66 4f 70 65 6e 20 7c 7c 20 70 4f 70  revIfOpen || pOp
28c50 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73  ->p4.xAdvance==s
28c60 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69  qlite3BtreePrevi
28c70 6f 75 73 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20  ous);..  /* The 
28c80 4e 65 78 74 20 6f 70 63 6f 64 65 20 69 73 20 6f  Next opcode is o
28c90 6e 6c 79 20 75 73 65 64 20 61 66 74 65 72 20 53  nly used after S
28ca0 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 61  eekGT, SeekGE, a
28cb0 6e 64 20 52 65 77 69 6e 64 2e 0a 20 20 2a 2a 20  nd Rewind..  ** 
28cc0 54 68 65 20 50 72 65 76 20 6f 70 63 6f 64 65 20  The Prev opcode 
28cd0 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 61 66 74  is only used aft
28ce0 65 72 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c  er SeekLT, SeekL
28cf0 45 2c 20 61 6e 64 20 4c 61 73 74 2e 20 2a 2f 0a  E, and Last. */.
28d00 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
28d10 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 20 7c  pcode!=OP_Next |
28d20 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  | pOp->opcode!=O
28d30 50 5f 4e 65 78 74 49 66 4f 70 65 6e 0a 20 20 20  P_NextIfOpen.   
28d40 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f      || pC->seekO
28d50 70 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20  p==OP_SeekGT || 
28d60 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53  pC->seekOp==OP_S
28d70 65 65 6b 47 45 0a 20 20 20 20 20 20 20 7c 7c 20  eekGE.       || 
28d80 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 52  pC->seekOp==OP_R
28d90 65 77 69 6e 64 20 7c 7c 20 70 43 2d 3e 73 65 65  ewind || pC->see
28da0 6b 4f 70 3d 3d 4f 50 5f 46 6f 75 6e 64 29 3b 0a  kOp==OP_Found);.
28db0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
28dc0 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c  pcode!=OP_Prev |
28dd0 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  | pOp->opcode!=O
28de0 50 5f 50 72 65 76 49 66 4f 70 65 6e 0a 20 20 20  P_PrevIfOpen.   
28df0 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f      || pC->seekO
28e00 70 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20  p==OP_SeekLT || 
28e10 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53  pC->seekOp==OP_S
28e20 65 65 6b 4c 45 0a 20 20 20 20 20 20 20 7c 7c 20  eekLE.       || 
28e30 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 4c  pC->seekOp==OP_L
28e40 61 73 74 20 29 3b 0a 0a 20 20 72 63 20 3d 20 70  ast );..  rc = p
28e50 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 28  Op->p4.xAdvance(
28e60 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
28e70 26 72 65 73 29 3b 0a 6e 65 78 74 5f 74 61 69 6c  &res);.next_tail
28e80 3a 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  :.  pC->cacheSta
28e90 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
28ea0 45 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  E;.  VdbeBranchT
28eb0 61 6b 65 6e 28 72 65 73 3d 3d 30 2c 32 29 3b 0a  aken(res==0,2);.
28ec0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
28ed0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
28ee0 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d 30  or;.  if( res==0
28ef0 20 29 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c   ){.    pC->null
28f00 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70 2d 3e  Row = 0;.    p->
28f10 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e 70 35  aCounter[pOp->p5
28f20 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  ]++;.#ifdef SQLI
28f30 54 45 5f 54 45 53 54 0a 20 20 20 20 73 71 6c 69  TE_TEST.    sqli
28f40 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74  te3_search_count
28f50 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 67  ++;.#endif.    g
28f60 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61  oto jump_to_p2_a
28f70 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  nd_check_for_int
28f80 65 72 72 75 70 74 3b 0a 20 20 7d 65 6c 73 65 7b  errupt;.  }else{
28f90 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  .    pC->nullRow
28fa0 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f   = 1;.  }.  goto
28fb0 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72   check_for_inter
28fc0 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  rupt;.}../* Opco
28fd0 64 65 3a 20 49 64 78 49 6e 73 65 72 74 20 50 31  de: IdxInsert P1
28fe0 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 20 53   P2 P3 * P5.** S
28ff0 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
29000 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  2].**.** Registe
29010 72 20 50 32 20 68 6f 6c 64 73 20 61 6e 20 53 51  r P2 holds an SQ
29020 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d 61 64 65  L index key made
29030 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61   using the.** Ma
29040 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63  keRecord instruc
29050 74 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70 63  tions.  This opc
29060 6f 64 65 20 77 72 69 74 65 73 20 74 68 61 74 20  ode writes that 
29070 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20  key.** into the 
29080 69 6e 64 65 78 20 50 31 2e 20 20 44 61 74 61 20  index P1.  Data 
29090 66 6f 72 20 74 68 65 20 65 6e 74 72 79 20 69 73  for the entry is
290a0 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69   nil..**.** P3 i
290b0 73 20 61 20 66 6c 61 67 20 74 68 61 74 20 70 72  s a flag that pr
290c0 6f 76 69 64 65 73 20 61 20 68 69 6e 74 20 74 6f  ovides a hint to
290d0 20 74 68 65 20 62 2d 74 72 65 65 20 6c 61 79 65   the b-tree laye
290e0 72 20 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 69  r that this.** i
290f0 6e 73 65 72 74 20 69 73 20 6c 69 6b 65 6c 79 20  nsert is likely 
29100 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 2e  to be an append.
29110 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73  .**.** If P5 has
29120 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41   the OPFLAG_NCHA
29130 4e 47 45 20 62 69 74 20 73 65 74 2c 20 74 68 65  NGE bit set, the
29140 6e 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75  n the change cou
29150 6e 74 65 72 20 69 73 0a 2a 2a 20 69 6e 63 72 65  nter is.** incre
29160 6d 65 6e 74 65 64 20 62 79 20 74 68 69 73 20 69  mented by this i
29170 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66 20  nstruction.  If 
29180 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
29190 47 45 20 62 69 74 20 69 73 20 63 6c 65 61 72 2c  GE bit is clear,
291a0 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 68 61  .** then the cha
291b0 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20 75  nge counter is u
291c0 6e 63 68 61 6e 67 65 64 2e 0a 2a 2a 0a 2a 2a 20  nchanged..**.** 
291d0 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f 50  If P5 has the OP
291e0 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
291f0 4c 54 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e  LT bit set, then
29200 20 74 68 65 20 63 75 72 73 6f 72 20 6d 75 73 74   the cursor must
29210 20 68 61 76 65 0a 2a 2a 20 6a 75 73 74 20 64 6f   have.** just do
29220 6e 65 20 61 20 73 65 65 6b 20 74 6f 20 74 68 65  ne a seek to the
29230 20 73 70 6f 74 20 77 68 65 72 65 20 74 68 65 20   spot where the 
29240 6e 65 77 20 65 6e 74 72 79 20 69 73 20 74 6f 20  new entry is to 
29250 62 65 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2a 20  be inserted..** 
29260 54 68 69 73 20 66 6c 61 67 20 61 76 6f 69 64 73  This flag avoids
29270 20 64 6f 69 6e 67 20 61 6e 20 65 78 74 72 61 20   doing an extra 
29280 73 65 65 6b 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  seek..**.** This
29290 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c   instruction onl
292a0 79 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e 64 69  y works for indi
292b0 63 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61  ces.  The equiva
292c0 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  lent instruction
292d0 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73 20 69  .** for tables i
292e0 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a  s OP_Insert..*/.
292f0 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 49 6e  case OP_SorterIn
29300 73 65 72 74 3a 20 20 20 20 20 20 20 2f 2a 20 69  sert:       /* i
29310 6e 32 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  n2 */.case OP_Id
29320 78 49 6e 73 65 72 74 3a 20 7b 20 20 20 20 20 20  xInsert: {      
29330 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64    /* in2 */.  Vd
29340 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
29350 42 74 72 65 65 50 61 79 6c 6f 61 64 20 78 3b 0a  BtreePayload x;.
29360 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
29370 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
29380 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
29390 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
293a0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
293b0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
293c0 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
293d0 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65  C)==(pOp->opcode
293e0 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72  ==OP_SorterInser
293f0 74 29 20 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26  t) );.  pIn2 = &
29400 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
29410 20 61 73 73 65 72 74 28 20 70 49 6e 32 2d 3e 66   assert( pIn2->f
29420 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20  lags & MEM_Blob 
29430 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  );.  if( pOp->p5
29440 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47   & OPFLAG_NCHANG
29450 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b  E ) p->nChange++
29460 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
29470 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
29480 45 5f 42 54 52 45 45 20 7c 7c 20 70 4f 70 2d 3e  E_BTREE || pOp->
29490 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65  opcode==OP_Sorte
294a0 72 49 6e 73 65 72 74 20 29 3b 0a 20 20 61 73 73  rInsert );.  ass
294b0 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
294c0 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 45 78  ==0 );.  rc = Ex
294d0 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a  pandBlob(pIn2);.
294e0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
294f0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
29500 6f 72 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f  or;.  if( pOp->o
29510 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72  pcode==OP_Sorter
29520 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 72 63  Insert ){.    rc
29530 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f   = sqlite3VdbeSo
29540 72 74 65 72 57 72 69 74 65 28 70 43 2c 20 70 49  rterWrite(pC, pI
29550 6e 32 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  n2);.  }else{.  
29560 20 20 78 2e 6e 4b 65 79 20 3d 20 70 49 6e 32 2d    x.nKey = pIn2-
29570 3e 6e 3b 0a 20 20 20 20 78 2e 70 4b 65 79 20 3d  >n;.    x.pKey =
29580 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 78 2e   pIn2->z;.    x.
29590 6e 44 61 74 61 20 3d 20 30 3b 0a 20 20 20 20 78  nData = 0;.    x
295a0 2e 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 20 20  .nZero = 0;.    
295b0 78 2e 70 44 61 74 61 20 3d 20 30 3b 0a 20 20 20  x.pData = 0;.   
295c0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
295d0 65 65 49 6e 73 65 72 74 28 70 43 2d 3e 75 63 2e  eeInsert(pC->uc.
295e0 70 43 75 72 73 6f 72 2c 20 26 78 2c 20 70 4f 70  pCursor, &x, pOp
295f0 2d 3e 70 33 2c 20 0a 20 20 20 20 20 20 20 20 28  ->p3, .        (
29600 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
29610 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29  G_USESEEKRESULT)
29620 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c   ? pC->seekResul
29630 74 20 3a 20 30 29 0a 20 20 20 20 20 20 20 20 29  t : 0).        )
29640 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
29650 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
29660 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e 63  ==0 );.    pC->c
29670 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
29680 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20  HE_STALE;.  }.  
29690 69 66 28 20 72 63 29 20 67 6f 74 6f 20 61 62 6f  if( rc) goto abo
296a0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
296b0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
296c0 4f 70 63 6f 64 65 3a 20 49 64 78 44 65 6c 65 74  Opcode: IdxDelet
296d0 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
296e0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
296f0 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 54  r[P2@P3].**.** T
29700 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50 33  he content of P3
29710 20 72 65 67 69 73 74 65 72 73 20 73 74 61 72 74   registers start
29720 69 6e 67 20 61 74 20 72 65 67 69 73 74 65 72 20  ing at register 
29730 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e  P2 form.** an un
29740 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
29750 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65  . This opcode re
29760 6d 6f 76 65 73 20 74 68 61 74 20 65 6e 74 72 79  moves that entry
29770 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69 6e   from the .** in
29780 64 65 78 20 6f 70 65 6e 65 64 20 62 79 20 63 75  dex opened by cu
29790 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65  rsor P1..*/.case
297a0 20 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a 20 7b   OP_IdxDelete: {
297b0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
297c0 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
297d0 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
297e0 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
297f0 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  d r;..  assert( 
29800 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 61  pOp->p3>0 );.  a
29810 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
29820 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d   && pOp->p2+pOp-
29830 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p3<=(p->nMem+1 
29840 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  - p->nCursor)+1 
29850 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
29860 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
29870 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
29880 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
29890 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
298a0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
298b0 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
298c0 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
298d0 52 45 45 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  REE );.  pCrsr =
298e0 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b   pC->uc.pCursor;
298f0 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72  .  assert( pCrsr
29900 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
29910 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20   pOp->p5==0 );. 
29920 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
29930 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72 2e  ->pKeyInfo;.  r.
29940 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f  nField = (u16)pO
29950 70 2d 3e 70 33 3b 0a 20 20 72 2e 64 65 66 61 75  p->p3;.  r.defau
29960 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 72 2e 61  lt_rc = 0;.  r.a
29970 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
29980 3e 70 32 5d 3b 0a 20 20 72 63 20 3d 20 73 71 6c  >p2];.  rc = sql
29990 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
299a0 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 26  npacked(pCrsr, &
299b0 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a  r, 0, 0, &res);.
299c0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
299d0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
299e0 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d 30  or;.  if( res==0
299f0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
29a00 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28  ite3BtreeDelete(
29a10 70 43 72 73 72 2c 20 42 54 52 45 45 5f 41 55 58  pCrsr, BTREE_AUX
29a20 44 45 4c 45 54 45 29 3b 0a 20 20 20 20 69 66 28  DELETE);.    if(
29a30 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
29a40 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
29a50 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d   }.  assert( pC-
29a60 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
29a70 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68  =0 );.  pC->cach
29a80 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
29a90 53 54 41 4c 45 3b 0a 20 20 62 72 65 61 6b 3b 0a  STALE;.  break;.
29aa0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
29ab0 65 6b 20 50 31 20 2a 20 50 33 20 50 34 20 2a 0a  ek P1 * P3 P4 *.
29ac0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 4d 6f  ** Synopsis:  Mo
29ad0 76 65 20 50 33 20 74 6f 20 50 31 2e 72 6f 77 69  ve P3 to P1.rowi
29ae0 64 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e  d.**.** P1 is an
29af0 20 6f 70 65 6e 20 69 6e 64 65 78 20 63 75 72 73   open index curs
29b00 6f 72 20 61 6e 64 20 50 33 20 69 73 20 61 20 63  or and P3 is a c
29b10 75 72 73 6f 72 20 6f 6e 20 74 68 65 20 63 6f 72  ursor on the cor
29b20 72 65 73 70 6f 6e 64 69 6e 67 0a 2a 2a 20 74 61  responding.** ta
29b30 62 6c 65 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ble.  This opcod
29b40 65 20 64 6f 65 73 20 61 20 64 65 66 65 72 72 65  e does a deferre
29b50 64 20 73 65 65 6b 20 6f 66 20 74 68 65 20 50 33  d seek of the P3
29b60 20 74 61 62 6c 65 20 63 75 72 73 6f 72 0a 2a 2a   table cursor.**
29b70 20 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74   to the row that
29b80 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
29b90 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
29ba0 6f 66 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  of P1..**.** Thi
29bb0 73 20 69 73 20 61 20 64 65 66 65 72 72 65 64 20  s is a deferred 
29bc0 73 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61  seek.  Nothing a
29bd0 63 74 75 61 6c 6c 79 20 68 61 70 70 65 6e 73 20  ctually happens 
29be0 75 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72  until.** the cur
29bf0 73 6f 72 20 69 73 20 75 73 65 64 20 74 6f 20 72  sor is used to r
29c00 65 61 64 20 61 20 72 65 63 6f 72 64 2e 20 20 54  ead a record.  T
29c10 68 61 74 20 77 61 79 2c 20 69 66 20 6e 6f 20 72  hat way, if no r
29c20 65 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e  eads.** occur, n
29c30 6f 20 75 6e 6e 65 63 65 73 73 61 72 79 20 49 2f  o unnecessary I/
29c40 4f 20 68 61 70 70 65 6e 73 2e 0a 2a 2a 0a 2a 2a  O happens..**.**
29c50 20 50 34 20 6d 61 79 20 62 65 20 61 6e 20 61 72   P4 may be an ar
29c60 72 61 79 20 6f 66 20 69 6e 74 65 67 65 72 73 20  ray of integers 
29c70 28 74 79 70 65 20 50 34 5f 49 4e 54 41 52 52 41  (type P4_INTARRA
29c80 59 29 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 2a 2a  Y) containing.**
29c90 20 6f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65   one entry for e
29ca0 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  ach column in th
29cb0 65 20 50 33 20 74 61 62 6c 65 2e 20 20 49 66 20  e P3 table.  If 
29cc0 61 72 72 61 79 20 65 6e 74 72 79 20 61 28 69 29  array entry a(i)
29cd0 0a 2a 2a 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  .** is non-zero,
29ce0 20 74 68 65 6e 20 72 65 61 64 69 6e 67 20 63 6f   then reading co
29cf0 6c 75 6d 6e 20 61 28 69 29 2d 31 20 66 72 6f 6d  lumn a(i)-1 from
29d00 20 63 75 72 73 6f 72 20 50 33 20 69 73 20 0a 2a   cursor P3 is .*
29d10 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20  * equivalent to 
29d20 70 65 72 66 6f 72 6d 69 6e 67 20 74 68 65 20 64  performing the d
29d30 65 66 65 72 72 65 64 20 73 65 65 6b 20 61 6e 64  eferred seek and
29d40 20 74 68 65 6e 20 72 65 61 64 69 6e 67 20 63 6f   then reading co
29d50 6c 75 6d 6e 20 69 20 0a 2a 2a 20 66 72 6f 6d 20  lumn i .** from 
29d60 50 31 2e 20 20 54 68 69 73 20 69 6e 66 6f 72 6d  P1.  This inform
29d70 61 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20  ation is stored 
29d80 69 6e 20 50 33 20 61 6e 64 20 75 73 65 64 20 74  in P3 and used t
29d90 6f 20 72 65 64 69 72 65 63 74 0a 2a 2a 20 72 65  o redirect.** re
29da0 61 64 73 20 61 67 61 69 6e 73 74 20 50 33 20 6f  ads against P3 o
29db0 76 65 72 20 74 6f 20 50 31 2c 20 74 68 75 73 20  ver to P1, thus 
29dc0 70 6f 73 73 69 62 6c 79 20 61 76 6f 69 64 69 6e  possibly avoidin
29dd0 67 20 74 68 65 20 6e 65 65 64 20 74 6f 0a 2a 2a  g the need to.**
29de0 20 73 65 65 6b 20 61 6e 64 20 72 65 61 64 20 63   seek and read c
29df0 75 72 73 6f 72 20 50 33 2e 0a 2a 2f 0a 2f 2a 20  ursor P3..*/./* 
29e00 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64  Opcode: IdxRowid
29e10 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
29e20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
29e30 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74  rowid.**.** Writ
29e40 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
29e50 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68  P2 an integer wh
29e60 69 63 68 20 69 73 20 74 68 65 20 6c 61 73 74 20  ich is the last 
29e70 65 6e 74 72 79 20 69 6e 20 74 68 65 20 72 65 63  entry in the rec
29e80 6f 72 64 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e  ord at.** the en
29e90 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b  d of the index k
29ea0 65 79 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79  ey pointed to by
29eb0 20 63 75 72 73 6f 72 20 50 31 2e 20 20 54 68 69   cursor P1.  Thi
29ec0 73 20 69 6e 74 65 67 65 72 20 73 68 6f 75 6c 64  s integer should
29ed0 20 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64   be.** the rowid
29ee0 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e   of the table en
29ef0 74 72 79 20 74 6f 20 77 68 69 63 68 20 74 68 69  try to which thi
29f00 73 20 69 6e 64 65 78 20 65 6e 74 72 79 20 70 6f  s index entry po
29f10 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  ints..**.** See 
29f20 61 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b  also: Rowid, Mak
29f30 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65  eRecord..*/.case
29f40 20 4f 50 5f 53 65 65 6b 3a 0a 63 61 73 65 20 4f   OP_Seek:.case O
29f50 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b 20 20 20  P_IdxRowid: {   
29f60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
29f70 74 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  t2 */.  VdbeCurs
29f80 6f 72 20 2a 70 43 3b 20 20 20 20 20 20 20 20 20  or *pC;         
29f90 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 31         /* The P1
29fa0 20 69 6e 64 65 78 20 63 75 72 73 6f 72 20 2a 2f   index cursor */
29fb0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
29fc0 54 61 62 43 75 72 3b 20 20 20 20 20 20 20 20 20  TabCur;         
29fd0 20 20 2f 2a 20 54 68 65 20 50 32 20 74 61 62 6c    /* The P2 tabl
29fe0 65 20 63 75 72 73 6f 72 20 28 4f 50 5f 53 65 65  e cursor (OP_See
29ff0 6b 20 6f 6e 6c 79 29 20 2a 2f 0a 20 20 69 36 34  k only) */.  i64
2a000 20 72 6f 77 69 64 3b 20 20 20 20 20 20 20 20 20   rowid;         
2a010 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
2a020 6f 77 69 64 20 74 68 61 74 20 50 31 20 63 75 72  owid that P1 cur
2a030 72 65 6e 74 20 70 6f 69 6e 74 73 20 74 6f 20 2a  rent points to *
2a040 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  /..  assert( pOp
2a050 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
2a060 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
2a070 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
2a080 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2a090 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
2a0a0 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
2a0b0 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
2a0c0 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28  REE );.  assert(
2a0d0 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21   pC->uc.pCursor!
2a0e0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2a0f0 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29  pC->isTable==0 )
2a100 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2a110 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
2a120 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 21  0 );.  assert( !
2a130 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 7c 7c 20 70  pC->nullRow || p
2a140 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
2a150 64 78 52 6f 77 69 64 20 29 3b 0a 0a 20 20 2f 2a  dxRowid );..  /*
2a160 20 54 68 65 20 49 64 78 52 6f 77 69 64 20 61 6e   The IdxRowid an
2a170 64 20 53 65 65 6b 20 6f 70 63 6f 64 65 73 20 61  d Seek opcodes a
2a180 72 65 20 63 6f 6d 62 69 6e 65 64 20 62 65 63 61  re combined beca
2a190 75 73 65 20 6f 66 20 74 68 65 20 63 6f 6d 6d 6f  use of the commo
2a1a0 6e 61 6c 69 74 79 0a 20 20 2a 2a 20 6f 66 20 73  nality.  ** of s
2a1b0 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
2a1c0 52 65 73 74 6f 72 65 28 29 20 61 6e 64 20 73 71  Restore() and sq
2a1d0 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f 77 69  lite3VdbeIdxRowi
2a1e0 64 28 29 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73  d(). */.  rc = s
2a1f0 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
2a200 52 65 73 74 6f 72 65 28 70 43 29 3b 0a 0a 20 20  Restore(pC);..  
2a210 2f 2a 20 73 71 6c 69 74 65 33 56 62 65 43 75 72  /* sqlite3VbeCur
2a220 73 6f 72 52 65 73 74 6f 72 65 28 29 20 63 61 6e  sorRestore() can
2a230 20 6f 6e 6c 79 20 66 61 69 6c 20 69 66 20 74 68   only fail if th
2a240 65 20 72 65 63 6f 72 64 20 68 61 73 20 62 65 65  e record has bee
2a250 6e 20 64 65 6c 65 74 65 64 0a 20 20 2a 2a 20 6f  n deleted.  ** o
2a260 75 74 20 66 72 6f 6d 20 75 6e 64 65 72 20 74 68  ut from under th
2a270 65 20 63 75 72 73 6f 72 2e 20 20 54 68 61 74 20  e cursor.  That 
2a280 77 69 6c 6c 20 6e 65 76 65 72 20 68 61 70 70 65  will never happe
2a290 6e 73 20 66 6f 72 20 61 6e 20 49 64 78 52 6f 77  ns for an IdxRow
2a2a0 69 64 0a 20 20 2a 2a 20 6f 72 20 53 65 65 6b 20  id.  ** or Seek 
2a2b0 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69 66 28 20  opcode */.  if( 
2a2c0 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45  NEVER(rc!=SQLITE
2a2d0 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  _OK) ) goto abor
2a2e0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2a2f0 0a 20 20 69 66 28 20 21 70 43 2d 3e 6e 75 6c 6c  .  if( !pC->null
2a300 52 6f 77 20 29 7b 0a 20 20 20 20 72 6f 77 69 64  Row ){.    rowid
2a310 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65   = 0;  /* Not ne
2a320 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64  eded.  Only used
2a330 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61   to silence a wa
2a340 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63  rning. */.    rc
2a350 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64   = sqlite3VdbeId
2a360 78 52 6f 77 69 64 28 64 62 2c 20 70 43 2d 3e 75  xRowid(db, pC->u
2a370 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 6f 77 69  c.pCursor, &rowi
2a380 64 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d  d);.    if( rc!=
2a390 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
2a3a0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
2a3b0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
2a3c0 7d 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f  }.    if( pOp->o
2a3d0 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 20 29  pcode==OP_Seek )
2a3e0 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
2a3f0 70 4f 70 2d 3e 70 33 3e 3d 30 20 26 26 20 70 4f  pOp->p3>=0 && pO
2a400 70 2d 3e 70 33 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p3<p->nCursor
2a410 20 29 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75   );.      pTabCu
2a420 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
2a430 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 61 73 73  ->p3];.      ass
2a440 65 72 74 28 20 70 54 61 62 43 75 72 21 3d 30 20  ert( pTabCur!=0 
2a450 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
2a460 20 70 54 61 62 43 75 72 2d 3e 65 43 75 72 54 79   pTabCur->eCurTy
2a470 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
2a480 45 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  E );.      asser
2a490 74 28 20 70 54 61 62 43 75 72 2d 3e 75 63 2e 70  t( pTabCur->uc.p
2a4a0 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20  Cursor!=0 );.   
2a4b0 20 20 20 61 73 73 65 72 74 28 20 70 54 61 62 43     assert( pTabC
2a4c0 75 72 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  ur->isTable );. 
2a4d0 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e 6e 75       pTabCur->nu
2a4e0 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20  llRow = 0;.     
2a4f0 20 70 54 61 62 43 75 72 2d 3e 6d 6f 76 65 74 6f   pTabCur->moveto
2a500 54 61 72 67 65 74 20 3d 20 72 6f 77 69 64 3b 0a  Target = rowid;.
2a510 20 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e 64        pTabCur->d
2a520 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
2a530 31 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  1;.      assert(
2a540 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
2a550 5f 49 4e 54 41 52 52 41 59 20 7c 7c 20 70 4f 70  _INTARRAY || pOp
2a560 2d 3e 70 34 2e 61 69 3d 3d 30 20 29 3b 0a 20 20  ->p4.ai==0 );.  
2a570 20 20 20 20 70 54 61 62 43 75 72 2d 3e 61 41 6c      pTabCur->aAl
2a580 74 4d 61 70 20 3d 20 70 4f 70 2d 3e 70 34 2e 61  tMap = pOp->p4.a
2a590 69 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75 72  i;.      pTabCur
2a5a0 2d 3e 70 41 6c 74 43 75 72 73 6f 72 20 3d 20 70  ->pAltCursor = p
2a5b0 43 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  C;.    }else{.  
2a5c0 20 20 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50      pOut = out2P
2a5d0 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
2a5e0 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 75  );.      pOut->u
2a5f0 2e 69 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20  .i = rowid;.    
2a600 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
2a610 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 0a 20  MEM_Int;.    }. 
2a620 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
2a630 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
2a640 3d 4f 50 5f 49 64 78 52 6f 77 69 64 20 29 3b 0a  =OP_IdxRowid );.
2a650 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2a660 65 6d 53 65 74 4e 75 6c 6c 28 26 61 4d 65 6d 5b  emSetNull(&aMem[
2a670 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 7d 0a 20  pOp->p2]);.  }. 
2a680 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2a690 63 6f 64 65 3a 20 49 64 78 47 45 20 50 31 20 50  code: IdxGE P1 P
2a6a0 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
2a6b0 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
2a6c0 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  @P4].**.** The P
2a6d0 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65  4 register value
2a6e0 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
2a6f0 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61   P3 form an unpa
2a700 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b  cked index .** k
2a710 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68  ey that omits th
2a720 65 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20  e PRIMARY KEY.  
2a730 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79  Compare this key
2a740 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74   value against t
2a750 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61  he index .** tha
2a760 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c  t P1 is currentl
2a770 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69  y pointing to, i
2a780 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d  gnoring the PRIM
2a790 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44  ARY KEY or ROWID
2a7a0 20 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74 20 74   .** fields at t
2a7b0 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  he end..**.** If
2a7c0 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e   the P1 index en
2a7d0 74 72 79 20 69 73 20 67 72 65 61 74 65 72 20 74  try is greater t
2a7e0 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
2a7f0 74 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a  the key value.**
2a800 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
2a810 2e 20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c  .  Otherwise fal
2a820 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
2a830 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
2a840 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n..*/./* Opcode:
2a850 20 49 64 78 47 54 20 50 31 20 50 32 20 50 33 20   IdxGT P1 P2 P3 
2a860 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
2a870 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
2a880 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67  **.** The P4 reg
2a890 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67  ister values beg
2a8a0 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66  inning with P3 f
2a8b0 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20  orm an unpacked 
2a8c0 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68  index .** key th
2a8d0 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49  at omits the PRI
2a8e0 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61  MARY KEY.  Compa
2a8f0 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75  re this key valu
2a900 65 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e  e against the in
2a910 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20  dex .** that P1 
2a920 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
2a930 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69  nting to, ignori
2a940 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ng the PRIMARY K
2a950 45 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20  EY or ROWID .** 
2a960 66 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e  fields at the en
2a970 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  d..**.** If the 
2a980 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69  P1 index entry i
2a990 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  s greater than t
2a9a0 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20  he key value.** 
2a9b0 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
2a9c0 20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c    Otherwise fall
2a9d0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
2a9e0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
2a9f0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
2aa00 49 64 78 4c 54 20 50 31 20 50 32 20 50 33 20 50  IdxLT P1 P2 P3 P
2aa10 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
2aa20 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
2aa30 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69  *.** The P4 regi
2aa40 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69  ster values begi
2aa50 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f  nning with P3 fo
2aa60 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  rm an unpacked i
2aa70 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61  ndex .** key tha
2aa80 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d  t omits the PRIM
2aa90 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44  ARY KEY or ROWID
2aaa0 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20  .  Compare this 
2aab0 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73  key value agains
2aac0 74 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 74  t.** the index t
2aad0 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e  hat P1 is curren
2aae0 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c  tly pointing to,
2aaf0 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52   ignoring the PR
2ab00 49 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20  IMARY KEY or.** 
2ab10 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20  ROWID on the P1 
2ab20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  index..**.** If 
2ab30 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74  the P1 index ent
2ab40 72 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ry is less than 
2ab50 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68  the key value th
2ab60 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
2ab70 2a 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c  * Otherwise fall
2ab80 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
2ab90 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
2aba0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
2abb0 49 64 78 4c 45 20 50 31 20 50 32 20 50 33 20 50  IdxLE P1 P2 P3 P
2abc0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
2abd0 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
2abe0 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69  *.** The P4 regi
2abf0 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69  ster values begi
2ac00 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f  nning with P3 fo
2ac10 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  rm an unpacked i
2ac20 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61  ndex .** key tha
2ac30 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d  t omits the PRIM
2ac40 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44  ARY KEY or ROWID
2ac50 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20  .  Compare this 
2ac60 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73  key value agains
2ac70 74 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 74  t.** the index t
2ac80 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e  hat P1 is curren
2ac90 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c  tly pointing to,
2aca0 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52   ignoring the PR
2acb0 49 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20  IMARY KEY or.** 
2acc0 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20  ROWID on the P1 
2acd0 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  index..**.** If 
2ace0 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74  the P1 index ent
2acf0 72 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ry is less than 
2ad00 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
2ad10 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a  key value then j
2ad20 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 4f 74  ump.** to P2. Ot
2ad30 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72  herwise fall thr
2ad40 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
2ad50 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
2ad60 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 45 3a 20  .case OP_IdxLE: 
2ad70 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
2ad80 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47   */.case OP_IdxG
2ad90 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  T:          /* j
2ada0 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ump */.case OP_I
2adb0 64 78 4c 54 3a 20 20 20 20 20 20 20 20 20 20 2f  dxLT:          /
2adc0 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f  * jump */.case O
2add0 50 5f 49 64 78 47 45 3a 20 20 7b 20 20 20 20 20  P_IdxGE:  {     
2ade0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56    /* jump */.  V
2adf0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
2ae00 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61   int res;.  Unpa
2ae10 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20  ckedRecord r;.. 
2ae20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
2ae30 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
2ae40 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
2ae50 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
2ae60 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2ae70 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
2ae80 72 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65  rt( pC->isOrdere
2ae90 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  d );.  assert( p
2aea0 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
2aeb0 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
2aec0 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
2aed0 43 75 72 73 6f 72 21 3d 30 29 3b 0a 20 20 61 73  Cursor!=0);.  as
2aee0 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
2aef0 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
2af00 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
2af10 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d  ==0 || pOp->p5==
2af20 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  1 );.  assert( p
2af30 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
2af40 4e 54 33 32 20 29 3b 0a 20 20 72 2e 70 4b 65 79  NT32 );.  r.pKey
2af50 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49  Info = pC->pKeyI
2af60 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20  nfo;.  r.nField 
2af70 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69  = (u16)pOp->p4.i
2af80 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
2af90 6f 64 65 3c 4f 50 5f 49 64 78 4c 54 20 29 7b 0a  ode<OP_IdxLT ){.
2afa0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
2afb0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c  >opcode==OP_IdxL
2afc0 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  E || pOp->opcode
2afd0 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20  ==OP_IdxGT );.  
2afe0 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d    r.default_rc =
2aff0 20 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20   -1;.  }else{.  
2b000 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
2b010 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20  pcode==OP_IdxGE 
2b020 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
2b030 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20  OP_IdxLT );.    
2b040 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30  r.default_rc = 0
2b050 3b 0a 20 20 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d  ;.  }.  r.aMem =
2b060 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
2b070 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
2b080 45 42 55 47 0a 20 20 7b 20 69 6e 74 20 69 3b 20  EBUG.  { int i; 
2b090 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69  for(i=0; i<r.nFi
2b0a0 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74  eld; i++) assert
2b0b0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e  ( memIsValid(&r.
2b0c0 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65  aMem[i]) ); }.#e
2b0d0 6e 64 69 66 0a 20 20 72 65 73 20 3d 20 30 3b 20  ndif.  res = 0; 
2b0e0 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20   /* Not needed. 
2b0f0 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69   Only used to si
2b100 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e  lence a warning.
2b110 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   */.  rc = sqlit
2b120 65 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d 70  e3VdbeIdxKeyComp
2b130 61 72 65 28 64 62 2c 20 70 43 2c 20 26 72 2c 20  are(db, pC, &r, 
2b140 26 72 65 73 29 3b 0a 20 20 61 73 73 65 72 74 28  &res);.  assert(
2b150 20 28 4f 50 5f 49 64 78 4c 45 26 31 29 3d 3d 28   (OP_IdxLE&1)==(
2b160 4f 50 5f 49 64 78 4c 54 26 31 29 20 26 26 20 28  OP_IdxLT&1) && (
2b170 4f 50 5f 49 64 78 47 45 26 31 29 3d 3d 28 4f 50  OP_IdxGE&1)==(OP
2b180 5f 49 64 78 47 54 26 31 29 20 29 3b 0a 20 20 69  _IdxGT&1) );.  i
2b190 66 28 20 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 26  f( (pOp->opcode&
2b1a0 31 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29  1)==(OP_IdxLT&1)
2b1b0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
2b1c0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2b1d0 49 64 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70  IdxLE || pOp->op
2b1e0 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29  code==OP_IdxLT )
2b1f0 3b 0a 20 20 20 20 72 65 73 20 3d 20 2d 72 65 73  ;.    res = -res
2b200 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
2b210 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
2b220 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20  de==OP_IdxGE || 
2b230 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2b240 49 64 78 47 54 20 29 3b 0a 20 20 20 20 72 65 73  IdxGT );.    res
2b250 2b 2b 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72  ++;.  }.  VdbeBr
2b260 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 3e 30 2c  anchTaken(res>0,
2b270 32 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  2);.  if( rc ) g
2b280 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2b290 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65  _error;.  if( re
2b2a0 73 3e 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  s>0 ) goto jump_
2b2b0 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a  to_p2;.  break;.
2b2c0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65  }../* Opcode: De
2b2d0 73 74 72 6f 79 20 50 31 20 50 32 20 50 33 20 2a  stroy P1 P2 P3 *
2b2e0 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20   *.**.** Delete 
2b2f0 61 6e 20 65 6e 74 69 72 65 20 64 61 74 61 62 61  an entire databa
2b300 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  se table or inde
2b310 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67  x whose root pag
2b320 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
2b330 65 0a 2a 2a 20 66 69 6c 65 20 69 73 20 67 69 76  e.** file is giv
2b340 65 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20  en by P1..**.** 
2b350 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  The table being 
2b360 64 65 73 74 72 6f 79 65 64 20 69 73 20 69 6e 20  destroyed is in 
2b370 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
2b380 65 20 66 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e  e file if P3==0.
2b390 20 20 49 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68    If.** P3==1 th
2b3a0 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  en the table to 
2b3b0 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74  be clear is in t
2b3c0 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  he auxiliary dat
2b3d0 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68  abase file.** th
2b3e0 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  at is used to st
2b3f0 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65 61 74  ore tables creat
2b400 65 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54  e using CREATE T
2b410 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a  EMPORARY TABLE..
2b420 2a 2a 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43  **.** If AUTOVAC
2b430 55 55 4d 20 69 73 20 65 6e 61 62 6c 65 64 20 74  UUM is enabled t
2b440 68 65 6e 20 69 74 20 69 73 20 70 6f 73 73 69 62  hen it is possib
2b450 6c 65 20 74 68 61 74 20 61 6e 6f 74 68 65 72 20  le that another 
2b460 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67  root page.** mig
2b470 68 74 20 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f  ht be moved into
2b480 20 74 68 65 20 6e 65 77 6c 79 20 64 65 6c 65 74   the newly delet
2b490 65 64 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20  ed root page in 
2b4a0 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 61 6c  order to keep al
2b4b0 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 73 20  l.** root pages 
2b4c0 63 6f 6e 74 69 67 75 6f 75 73 20 61 74 20 74 68  contiguous at th
2b4d0 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74  e beginning of t
2b4e0 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68  he database.  Th
2b4f0 65 20 66 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75  e former.** valu
2b500 65 20 6f 66 20 74 68 65 20 72 6f 6f 74 20 70 61  e of the root pa
2b510 67 65 20 74 68 61 74 20 6d 6f 76 65 64 20 2d 20  ge that moved - 
2b520 69 74 73 20 76 61 6c 75 65 20 62 65 66 6f 72 65  its value before
2b530 20 74 68 65 20 6d 6f 76 65 20 6f 63 63 75 72 72   the move occurr
2b540 65 64 20 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65  ed -.** is store
2b550 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  d in register P2
2b560 2e 20 20 49 66 20 6e 6f 20 70 61 67 65 20 0a 2a  .  If no page .*
2b570 2a 20 6d 6f 76 65 6d 65 6e 74 20 77 61 73 20 72  * movement was r
2b580 65 71 75 69 72 65 64 20 28 62 65 63 61 75 73 65  equired (because
2b590 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
2b5a0 20 64 72 6f 70 70 65 64 20 77 61 73 20 61 6c 72   dropped was alr
2b5b0 65 61 64 79 20 0a 2a 2a 20 74 68 65 20 6c 61 73  eady .** the las
2b5c0 74 20 6f 6e 65 20 69 6e 20 74 68 65 20 64 61 74  t one in the dat
2b5d0 61 62 61 73 65 29 20 74 68 65 6e 20 61 20 7a 65  abase) then a ze
2b5e0 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ro is stored in 
2b5f0 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20  register P2..** 
2b600 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73  If AUTOVACUUM is
2b610 20 64 69 73 61 62 6c 65 64 20 74 68 65 6e 20 61   disabled then a
2b620 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20   zero is stored 
2b630 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
2b640 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
2b650 43 6c 65 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50  Clear.*/.case OP
2b660 5f 44 65 73 74 72 6f 79 3a 20 7b 20 20 20 20 20  _Destroy: {     
2b670 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74  /* out2 */.  int
2b680 20 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69   iMoved;.  int i
2b690 44 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Db;..  assert( p
2b6a0 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
2b6b0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2b6c0 70 31 3e 31 20 29 3b 0a 20 20 70 4f 75 74 20 3d  p1>1 );.  pOut =
2b6d0 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
2b6e0 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d  p, pOp);.  pOut-
2b6f0 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  >flags = MEM_Nul
2b700 6c 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6e 56 64  l;.  if( db->nVd
2b710 62 65 52 65 61 64 20 3e 20 64 62 2d 3e 6e 56 44  beRead > db->nVD
2b720 65 73 74 72 6f 79 2b 31 20 29 7b 0a 20 20 20 20  estroy+1 ){.    
2b730 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  rc = SQLITE_LOCK
2b740 45 44 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72  ED;.    p->error
2b750 41 63 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72  Action = OE_Abor
2b760 74 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  t;.    goto abor
2b770 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2b780 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 44 62    }else{.    iDb
2b790 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20   = pOp->p3;.    
2b7a0 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
2b7b0 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
2b7c0 20 69 44 62 29 20 29 3b 0a 20 20 20 20 69 4d 6f   iDb) );.    iMo
2b7d0 76 65 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74  ved = 0;  /* Not
2b7e0 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 74   needed.  Only t
2b7f0 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e  o silence a warn
2b800 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d  ing. */.    rc =
2b810 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 72 6f   sqlite3BtreeDro
2b820 70 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69  pTable(db->aDb[i
2b830 44 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31  Db].pBt, pOp->p1
2b840 2c 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20  , &iMoved);.    
2b850 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
2b860 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d  M_Int;.    pOut-
2b870 3e 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 20  >u.i = iMoved;. 
2b880 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
2b890 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2b8a0 72 6f 72 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  ror;.#ifndef SQL
2b8b0 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43  ITE_OMIT_AUTOVAC
2b8c0 55 55 4d 0a 20 20 20 20 69 66 28 20 69 4d 6f 76  UUM.    if( iMov
2b8d0 65 64 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 73  ed!=0 ){.      s
2b8e0 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f  qlite3RootPageMo
2b8f0 76 65 64 28 64 62 2c 20 69 44 62 2c 20 69 4d 6f  ved(db, iDb, iMo
2b900 76 65 64 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20  ved, pOp->p1);. 
2b910 20 20 20 20 20 2f 2a 20 41 6c 6c 20 4f 50 5f 44       /* All OP_D
2b920 65 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e  estroy operation
2b930 73 20 6f 63 63 75 72 20 6f 6e 20 74 68 65 20 73  s occur on the s
2b940 61 6d 65 20 62 74 72 65 65 20 2a 2f 0a 20 20 20  ame btree */.   
2b950 20 20 20 61 73 73 65 72 74 28 20 72 65 73 65 74     assert( reset
2b960 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 30  SchemaOnFault==0
2b970 20 7c 7c 20 72 65 73 65 74 53 63 68 65 6d 61 4f   || resetSchemaO
2b980 6e 46 61 75 6c 74 3d 3d 69 44 62 2b 31 20 29 3b  nFault==iDb+1 );
2b990 0a 20 20 20 20 20 20 72 65 73 65 74 53 63 68 65  .      resetSche
2b9a0 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 69 44 62 2b  maOnFault = iDb+
2b9b0 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  1;.    }.#endif.
2b9c0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2b9d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72  /* Opcode: Clear
2b9e0 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20   P1 P2 P3.**.** 
2b9f0 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65  Delete all conte
2ba00 6e 74 73 20 6f 66 20 74 68 65 20 64 61 74 61 62  nts of the datab
2ba10 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  ase table or ind
2ba20 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61  ex whose root pa
2ba30 67 65 0a 2a 2a 20 69 6e 20 74 68 65 20 64 61 74  ge.** in the dat
2ba40 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 67 69  abase file is gi
2ba50 76 65 6e 20 62 79 20 50 31 2e 20 20 42 75 74 2c  ven by P1.  But,
2ba60 20 75 6e 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c   unlike Destroy,
2ba70 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76   do not.** remov
2ba80 65 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  e the table or i
2ba90 6e 64 65 78 20 66 72 6f 6d 20 74 68 65 20 64 61  ndex from the da
2baa0 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a  tabase file..**.
2bab0 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65 69  ** The table bei
2bac0 6e 67 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74  ng clear is in t
2bad0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
2bae0 20 66 69 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20   file if P2==0. 
2baf0 20 49 66 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65   If.** P2==1 the
2bb00 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62  n the table to b
2bb10 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68  e clear is in th
2bb20 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  e auxiliary data
2bb30 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61  base file.** tha
2bb40 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  t is used to sto
2bb50 72 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65  re tables create
2bb60 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45   using CREATE TE
2bb70 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a  MPORARY TABLE..*
2bb80 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 33 20 76  *.** If the P3 v
2bb90 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  alue is non-zero
2bba0 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  , then the table
2bbb0 20 72 65 66 65 72 72 65 64 20 74 6f 20 6d 75 73   referred to mus
2bbc0 74 20 62 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65  t be an.** intke
2bbd0 79 20 74 61 62 6c 65 20 28 61 6e 20 53 51 4c 20  y table (an SQL 
2bbe0 74 61 62 6c 65 2c 20 6e 6f 74 20 61 6e 20 69 6e  table, not an in
2bbf0 64 65 78 29 2e 20 49 6e 20 74 68 69 73 20 63 61  dex). In this ca
2bc00 73 65 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67  se the row chang
2bc10 65 20 0a 2a 2a 20 63 6f 75 6e 74 20 69 73 20 69  e .** count is i
2bc20 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68  ncremented by th
2bc30 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
2bc40 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65   in the table be
2bc50 69 6e 67 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a  ing cleared. .**
2bc60 20 49 66 20 50 33 20 69 73 20 67 72 65 61 74 65   If P3 is greate
2bc70 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65  r than zero, the
2bc80 6e 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72  n the value stor
2bc90 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
2bca0 33 20 69 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63  3 is.** also inc
2bcb0 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20  remented by the 
2bcc0 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
2bcd0 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  n the table bein
2bce0 67 20 63 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a  g cleared..**.**
2bcf0 20 53 65 65 20 61 6c 73 6f 3a 20 44 65 73 74 72   See also: Destr
2bd00 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c  oy.*/.case OP_Cl
2bd10 65 61 72 3a 20 7b 0a 20 20 69 6e 74 20 6e 43 68  ear: {.  int nCh
2bd20 61 6e 67 65 3b 0a 20 0a 20 20 6e 43 68 61 6e 67  ange;. .  nChang
2bd30 65 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  e = 0;.  assert(
2bd40 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
2bd50 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
2bd60 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
2bd70 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 32 29 20 29  Mask, pOp->p2) )
2bd80 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2bd90 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65 28  BtreeClearTable(
2bda0 0a 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 70  .      db->aDb[p
2bdb0 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70  Op->p2].pBt, pOp
2bdc0 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e 70 33 20 3f  ->p1, (pOp->p3 ?
2bdd0 20 26 6e 43 68 61 6e 67 65 20 3a 20 30 29 0a 20   &nChange : 0). 
2bde0 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   );.  if( pOp->p
2bdf0 33 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61  3 ){.    p->nCha
2be00 6e 67 65 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a  nge += nChange;.
2be10 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e      if( pOp->p3>
2be20 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
2be30 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61  t( memIsValid(&a
2be40 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b  Mem[pOp->p3]) );
2be50 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  .      memAboutT
2be60 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d  oChange(p, &aMem
2be70 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20  [pOp->p3]);.    
2be80 20 20 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e    aMem[pOp->p3].
2be90 75 2e 69 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a  u.i += nChange;.
2bea0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
2beb0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
2bec0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2bed0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2bee0 6f 64 65 3a 20 52 65 73 65 74 53 6f 72 74 65 72  ode: ResetSorter
2bef0 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
2bf00 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e  * Delete all con
2bf10 74 65 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 65  tents from the e
2bf20 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 6f  phemeral table o
2bf30 72 20 73 6f 72 74 65 72 0a 2a 2a 20 74 68 61 74  r sorter.** that
2bf40 20 69 73 20 6f 70 65 6e 20 6f 6e 20 63 75 72 73   is open on curs
2bf50 6f 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  or P1..**.** Thi
2bf60 73 20 6f 70 63 6f 64 65 20 6f 6e 6c 79 20 77 6f  s opcode only wo
2bf70 72 6b 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20  rks for cursors 
2bf80 75 73 65 64 20 66 6f 72 20 73 6f 72 74 69 6e 67  used for sorting
2bf90 20 61 6e 64 0a 2a 2a 20 6f 70 65 6e 65 64 20 77   and.** opened w
2bfa0 69 74 68 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d  ith OP_OpenEphem
2bfb0 65 72 61 6c 20 6f 72 20 4f 50 5f 53 6f 72 74 65  eral or OP_Sorte
2bfc0 72 4f 70 65 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  rOpen..*/.case O
2bfd0 50 5f 52 65 73 65 74 53 6f 72 74 65 72 3a 20 7b  P_ResetSorter: {
2bfe0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
2bff0 43 3b 0a 20 0a 20 20 61 73 73 65 72 74 28 20 70  C;. .  assert( p
2c000 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
2c010 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
2c020 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
2c030 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
2c040 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
2c050 20 20 69 66 28 20 69 73 53 6f 72 74 65 72 28 70    if( isSorter(p
2c060 43 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  C) ){.    sqlite
2c070 33 56 64 62 65 53 6f 72 74 65 72 52 65 73 65 74  3VdbeSorterReset
2c080 28 64 62 2c 20 70 43 2d 3e 75 63 2e 70 53 6f 72  (db, pC->uc.pSor
2c090 74 65 72 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ter);.  }else{. 
2c0a0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65     assert( pC->e
2c0b0 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
2c0c0 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20 61 73  _BTREE );.    as
2c0d0 73 65 72 74 28 20 70 43 2d 3e 69 73 45 70 68 65  sert( pC->isEphe
2c0e0 6d 65 72 61 6c 20 29 3b 0a 20 20 20 20 72 63 20  meral );.    rc 
2c0f0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c  = sqlite3BtreeCl
2c100 65 61 72 54 61 62 6c 65 4f 66 43 75 72 73 6f 72  earTableOfCursor
2c110 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  (pC->uc.pCursor)
2c120 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67  ;.    if( rc ) g
2c130 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2c140 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72  _error;.  }.  br
2c150 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2c160 65 3a 20 43 72 65 61 74 65 54 61 62 6c 65 20 50  e: CreateTable P
2c170 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
2c180 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f  nopsis: r[P2]=ro
2c190 6f 74 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20  ot iDb=P1.**.** 
2c1a0 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 74  Allocate a new t
2c1b0 61 62 6c 65 20 69 6e 20 74 68 65 20 6d 61 69 6e  able in the main
2c1c0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
2c1d0 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68  f P1==0 or in th
2c1e0 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64  e.** auxiliary d
2c1f0 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
2c200 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61  P1==1 or in an a
2c210 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
2c220 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72   if.** P1>1.  Wr
2c230 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67  ite the root pag
2c240 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  e number of the 
2c250 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a  new table into.*
2c260 2a 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  * register P2.**
2c270 0a 2a 2a 20 54 68 65 20 64 69 66 66 65 72 65 6e  .** The differen
2c280 63 65 20 62 65 74 77 65 65 6e 20 61 20 74 61 62  ce between a tab
2c290 6c 65 20 61 6e 64 20 61 6e 20 69 6e 64 65 78 20  le and an index 
2c2a0 69 73 20 74 68 69 73 3a 20 20 41 20 74 61 62 6c  is this:  A tabl
2c2b0 65 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20 61  e must.** have a
2c2c0 20 34 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20   4-byte integer 
2c2d0 6b 65 79 20 61 6e 64 20 63 61 6e 20 68 61 76 65  key and can have
2c2e0 20 61 72 62 69 74 72 61 72 79 20 64 61 74 61 2e   arbitrary data.
2c2f0 20 20 41 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 61    An index.** ha
2c300 73 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 6b  s an arbitrary k
2c310 65 79 20 62 75 74 20 6e 6f 20 64 61 74 61 2e 0a  ey but no data..
2c320 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
2c330 43 72 65 61 74 65 49 6e 64 65 78 0a 2a 2f 0a 2f  CreateIndex.*/./
2c340 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65  * Opcode: Create
2c350 49 6e 64 65 78 20 50 31 20 50 32 20 2a 20 2a 20  Index P1 P2 * * 
2c360 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
2c370 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31  [P2]=root iDb=P1
2c380 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20  .**.** Allocate 
2c390 61 20 6e 65 77 20 69 6e 64 65 78 20 69 6e 20 74  a new index in t
2c3a0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
2c3b0 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f   file if P1==0 o
2c3c0 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69  r in the.** auxi
2c3d0 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66  liary database f
2c3e0 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20  ile if P1==1 or 
2c3f0 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64  in an attached d
2c400 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31  atabase if.** P1
2c410 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65 20 72  >1.  Write the r
2c420 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20  oot page number 
2c430 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65  of the new table
2c440 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65   into.** registe
2c450 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  r P2..**.** See 
2c460 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e  documentation on
2c470 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20   OP_CreateTable 
2c480 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
2c490 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63  nformation..*/.c
2c4a0 61 73 65 20 4f 50 5f 43 72 65 61 74 65 49 6e 64  ase OP_CreateInd
2c4b0 65 78 3a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ex:            /
2c4c0 2a 20 6f 75 74 32 20 2a 2f 0a 63 61 73 65 20 4f  * out2 */.case O
2c4d0 50 5f 43 72 65 61 74 65 54 61 62 6c 65 3a 20 7b  P_CreateTable: {
2c4e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
2c4f0 32 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b  2 */.  int pgno;
2c500 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20  .  int flags;.  
2c510 44 62 20 2a 70 44 62 3b 0a 0a 20 20 70 4f 75 74  Db *pDb;..  pOut
2c520 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
2c530 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 67 6e  e(p, pOp);.  pgn
2c540 6f 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  o = 0;.  assert(
2c550 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
2c560 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
2c570 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61  ;.  assert( DbMa
2c580 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
2c590 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b  ask, pOp->p1) );
2c5a0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
2c5b0 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70  adOnly==0 );.  p
2c5c0 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f  Db = &db->aDb[pO
2c5d0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2c5e0 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b  ( pDb->pBt!=0 );
2c5f0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
2c600 64 65 3d 3d 4f 50 5f 43 72 65 61 74 65 54 61 62  de==OP_CreateTab
2c610 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61  le ){.    /* fla
2c620 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45  gs = BTREE_INTKE
2c630 59 3b 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20  Y; */.    flags 
2c640 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a  = BTREE_INTKEY;.
2c650 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61    }else{.    fla
2c660 67 73 20 3d 20 42 54 52 45 45 5f 42 4c 4f 42 4b  gs = BTREE_BLOBK
2c670 45 59 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73  EY;.  }.  rc = s
2c680 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74  qlite3BtreeCreat
2c690 65 54 61 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c  eTable(pDb->pBt,
2c6a0 20 26 70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a   &pgno, flags);.
2c6b0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
2c6c0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2c6d0 6f 72 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  or;.  pOut->u.i 
2c6e0 3d 20 70 67 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b  = pgno;.  break;
2c6f0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .}../* Opcode: P
2c700 61 72 73 65 53 63 68 65 6d 61 20 50 31 20 2a 20  arseSchema P1 * 
2c710 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61  * P4 *.**.** Rea
2c720 64 20 61 6e 64 20 70 61 72 73 65 20 61 6c 6c 20  d and parse all 
2c730 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65  entries from the
2c740 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 74   SQLITE_MASTER t
2c750 61 62 6c 65 20 6f 66 20 64 61 74 61 62 61 73 65  able of database
2c760 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63   P1.** that matc
2c770 68 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  h the WHERE clau
2c780 73 65 20 50 34 2e 20 0a 2a 2a 0a 2a 2a 20 54 68  se P4. .**.** Th
2c790 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
2c7a0 73 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20  s the parser to 
2c7b0 63 72 65 61 74 65 20 61 20 6e 65 77 20 76 69 72  create a new vir
2c7c0 74 75 61 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a  tual machine,.**
2c7d0 20 74 68 65 6e 20 72 75 6e 73 20 74 68 65 20 6e   then runs the n
2c7e0 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ew virtual machi
2c7f0 6e 65 2e 20 20 49 74 20 69 73 20 74 68 75 73 20  ne.  It is thus 
2c800 61 20 72 65 2d 65 6e 74 72 61 6e 74 20 6f 70 63  a re-entrant opc
2c810 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ode..*/.case OP_
2c820 50 61 72 73 65 53 63 68 65 6d 61 3a 20 7b 0a 20  ParseSchema: {. 
2c830 20 69 6e 74 20 69 44 62 3b 0a 20 20 63 6f 6e 73   int iDb;.  cons
2c840 74 20 63 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b  t char *zMaster;
2c850 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20  .  char *zSql;. 
2c860 20 49 6e 69 74 44 61 74 61 20 69 6e 69 74 44 61   InitData initDa
2c870 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20 70 72  ta;..  /* Any pr
2c880 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
2c890 20 74 68 61 74 20 69 6e 76 6f 6b 65 73 20 74 68   that invokes th
2c8a0 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 68  is opcode will h
2c8b0 6f 6c 64 20 6d 75 74 65 78 65 73 0a 20 20 2a 2a  old mutexes.  **
2c8c0 20 6f 6e 20 65 76 65 72 79 20 62 74 72 65 65 2e   on every btree.
2c8d0 20 20 54 68 69 73 20 69 73 20 61 20 70 72 65 72    This is a prer
2c8e0 65 71 75 69 73 69 74 65 20 66 6f 72 20 69 6e 76  equisite for inv
2c8f0 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20 73 71 6c 69  oking .  ** sqli
2c900 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28  te3InitCallback(
2c910 29 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20 53  )..  */.#ifdef S
2c920 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f  QLITE_DEBUG.  fo
2c930 72 28 69 44 62 3d 30 3b 20 69 44 62 3c 64 62 2d  r(iDb=0; iDb<db-
2c940 3e 6e 44 62 3b 20 69 44 62 2b 2b 29 7b 0a 20 20  >nDb; iDb++){.  
2c950 20 20 61 73 73 65 72 74 28 20 69 44 62 3d 3d 31    assert( iDb==1
2c960 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65   || sqlite3Btree
2c970 48 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d 3e 61  HoldsMutex(db->a
2c980 44 62 5b 69 44 62 5d 2e 70 42 74 29 20 29 3b 0a  Db[iDb].pBt) );.
2c990 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69 44    }.#endif..  iD
2c9a0 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61  b = pOp->p1;.  a
2c9b0 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26  ssert( iDb>=0 &&
2c9c0 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a   iDb<db->nDb );.
2c9d0 20 20 61 73 73 65 72 74 28 20 44 62 48 61 73 50    assert( DbHasP
2c9e0 72 6f 70 65 72 74 79 28 64 62 2c 20 69 44 62 2c  roperty(db, iDb,
2c9f0 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64   DB_SchemaLoaded
2ca00 29 20 29 3b 0a 20 20 2f 2a 20 55 73 65 64 20 74  ) );.  /* Used t
2ca10 6f 20 62 65 20 61 20 63 6f 6e 64 69 74 69 6f 6e  o be a condition
2ca20 61 6c 20 2a 2f 20 7b 0a 20 20 20 20 7a 4d 61 73  al */ {.    zMas
2ca30 74 65 72 20 3d 20 53 43 48 45 4d 41 5f 54 41 42  ter = SCHEMA_TAB
2ca40 4c 45 28 69 44 62 29 3b 0a 20 20 20 20 69 6e 69  LE(iDb);.    ini
2ca50 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20  tData.db = db;. 
2ca60 20 20 20 69 6e 69 74 44 61 74 61 2e 69 44 62 20     initData.iDb 
2ca70 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20 20 69  = pOp->p1;.    i
2ca80 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d 73 67  nitData.pzErrMsg
2ca90 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a   = &p->zErrMsg;.
2caa0 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74      zSql = sqlit
2cab0 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20 20  e3MPrintf(db,.  
2cac0 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d       "SELECT nam
2cad0 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c  e, rootpage, sql
2cae0 20 46 52 4f 4d 20 27 25 71 27 2e 25 73 20 57 48   FROM '%q'.%s WH
2caf0 45 52 45 20 25 73 20 4f 52 44 45 52 20 42 59 20  ERE %s ORDER BY 
2cb00 72 6f 77 69 64 22 2c 0a 20 20 20 20 20 20 20 64  rowid",.       d
2cb10 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d  b->aDb[iDb].zNam
2cb20 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f 70 2d  e, zMaster, pOp-
2cb30 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66 28 20  >p4.z);.    if( 
2cb40 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20  zSql==0 ){.     
2cb50 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d   rc = SQLITE_NOM
2cb60 45 4d 5f 42 4b 50 54 3b 0a 20 20 20 20 7d 65 6c  EM_BKPT;.    }el
2cb70 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  se{.      assert
2cb80 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d  ( db->init.busy=
2cb90 3d 30 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  =0 );.      db->
2cba0 69 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20  init.busy = 1;. 
2cbb0 20 20 20 20 20 69 6e 69 74 44 61 74 61 2e 72 63       initData.rc
2cbc0 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
2cbd0 20 20 20 20 61 73 73 65 72 74 28 20 21 64 62 2d      assert( !db-
2cbe0 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b  >mallocFailed );
2cbf0 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
2cc00 74 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71  te3_exec(db, zSq
2cc10 6c 2c 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61  l, sqlite3InitCa
2cc20 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44 61 74  llback, &initDat
2cc30 61 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28  a, 0);.      if(
2cc40 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
2cc50 20 72 63 20 3d 20 69 6e 69 74 44 61 74 61 2e 72   rc = initData.r
2cc60 63 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  c;.      sqlite3
2cc70 44 62 46 72 65 65 28 64 62 2c 20 7a 53 71 6c 29  DbFree(db, zSql)
2cc80 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74  ;.      db->init
2cc90 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20 20 20 7d  .busy = 0;.    }
2cca0 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 7b  .  }.  if( rc ){
2ccb0 0a 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65  .    sqlite3Rese
2ccc0 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e  tAllSchemasOfCon
2ccd0 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 20  nection(db);.   
2cce0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
2ccf0 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 67  NOMEM ){.      g
2cd00 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
2cd10 7d 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  }.    goto abort
2cd20 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
2cd30 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a   }.  break;  .}.
2cd40 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
2cd50 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a  LITE_OMIT_ANALYZ
2cd60 45 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f  E)./* Opcode: Lo
2cd70 61 64 41 6e 61 6c 79 73 69 73 20 50 31 20 2a 20  adAnalysis P1 * 
2cd80 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64  * * *.**.** Read
2cd90 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
2cda0 31 20 74 61 62 6c 65 20 66 6f 72 20 64 61 74 61  1 table for data
2cdb0 62 61 73 65 20 50 31 20 61 6e 64 20 6c 6f 61 64  base P1 and load
2cdc0 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20   the content.** 
2cdd0 6f 66 20 74 68 61 74 20 74 61 62 6c 65 20 69 6e  of that table in
2cde0 74 6f 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  to the internal 
2cdf0 69 6e 64 65 78 20 68 61 73 68 20 74 61 62 6c 65  index hash table
2ce00 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75  .  This will cau
2ce10 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c 79 73  se.** the analys
2ce20 69 73 20 74 6f 20 62 65 20 75 73 65 64 20 77 68  is to be used wh
2ce30 65 6e 20 70 72 65 70 61 72 69 6e 67 20 61 6c 6c  en preparing all
2ce40 20 73 75 62 73 65 71 75 65 6e 74 20 71 75 65 72   subsequent quer
2ce50 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ies..*/.case OP_
2ce60 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20 7b 0a  LoadAnalysis: {.
2ce70 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2ce80 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
2ce90 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72 63 20  db->nDb );.  rc 
2cea0 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69  = sqlite3Analysi
2ceb0 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70 2d 3e 70  sLoad(db, pOp->p
2cec0 31 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  1);.  if( rc ) g
2ced0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2cee0 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
2cef0 20 20 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21    .}.#endif /* !
2cf00 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2cf10 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a  MIT_ANALYZE) */.
2cf20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70  ./* Opcode: Drop
2cf30 54 61 62 6c 65 20 50 31 20 2a 20 2a 20 50 34 20  Table P1 * * P4 
2cf40 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74  *.**.** Remove t
2cf50 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d  he internal (in-
2cf60 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72  memory) data str
2cf70 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
2cf80 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 61 62  cribe.** the tab
2cf90 6c 65 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64  le named P4 in d
2cfa0 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69  atabase P1.  Thi
2cfb0 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65  s is called afte
2cfc0 72 20 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20  r a table.** is 
2cfd0 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73  dropped from dis
2cfe0 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44 65 73  k (using the Des
2cff0 74 72 6f 79 20 6f 70 63 6f 64 65 29 20 69 6e 20  troy opcode) in 
2d000 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a  order to keep .*
2d010 2a 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72  * the internal r
2d020 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
2d030 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63   the.** schema c
2d040 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77  onsistent with w
2d050 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a  hat is on disk..
2d060 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54  */.case OP_DropT
2d070 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65  able: {.  sqlite
2d080 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
2d090 54 61 62 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70  Table(db, pOp->p
2d0a0 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  1, pOp->p4.z);. 
2d0b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2d0c0 63 6f 64 65 3a 20 44 72 6f 70 49 6e 64 65 78 20  code: DropIndex 
2d0d0 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
2d0e0 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74  * Remove the int
2d0f0 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79  ernal (in-memory
2d100 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  ) data structure
2d110 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a  s that describe.
2d120 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 6e 61 6d  ** the index nam
2d130 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73  ed P4 in databas
2d140 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63  e P1.  This is c
2d150 61 6c 6c 65 64 20 61 66 74 65 72 20 61 6e 20 69  alled after an i
2d160 6e 64 65 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70  ndex.** is dropp
2d170 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73  ed from disk (us
2d180 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79 20  ing the Destroy 
2d190 6f 70 63 6f 64 65 29 0a 2a 2a 20 69 6e 20 6f 72  opcode).** in or
2d1a0 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20  der to keep the 
2d1b0 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65  internal represe
2d1c0 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ntation of the.*
2d1d0 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74  * schema consist
2d1e0 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73  ent with what is
2d1f0 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73   on disk..*/.cas
2d200 65 20 4f 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20  e OP_DropIndex: 
2d210 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  {.  sqlite3Unlin
2d220 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28  kAndDeleteIndex(
2d230 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
2d240 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b  ->p4.z);.  break
2d250 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2d260 44 72 6f 70 54 72 69 67 67 65 72 20 50 31 20 2a  DropTrigger P1 *
2d270 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
2d280 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61  move the interna
2d290 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61  l (in-memory) da
2d2a0 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68  ta structures th
2d2b0 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74  at describe.** t
2d2c0 68 65 20 74 72 69 67 67 65 72 20 6e 61 6d 65 64  he trigger named
2d2d0 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20   P4 in database 
2d2e0 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c  P1.  This is cal
2d2f0 6c 65 64 20 61 66 74 65 72 20 61 20 74 72 69 67  led after a trig
2d300 67 65 72 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65  ger.** is droppe
2d310 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69  d from disk (usi
2d320 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f  ng the Destroy o
2d330 70 63 6f 64 65 29 20 69 6e 20 6f 72 64 65 72 20  pcode) in order 
2d340 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20  to keep .** the 
2d350 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65  internal represe
2d360 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ntation of the.*
2d370 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74  * schema consist
2d380 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73  ent with what is
2d390 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73   on disk..*/.cas
2d3a0 65 20 4f 50 5f 44 72 6f 70 54 72 69 67 67 65 72  e OP_DropTrigger
2d3b0 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c  : {.  sqlite3Unl
2d3c0 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67  inkAndDeleteTrig
2d3d0 67 65 72 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  ger(db, pOp->p1,
2d3e0 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62   pOp->p4.z);.  b
2d3f0 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65  reak;.}...#ifnde
2d400 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e  f SQLITE_OMIT_IN
2d410 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a  TEGRITY_CHECK./*
2d420 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 72 69   Opcode: Integri
2d430 74 79 43 6b 20 50 31 20 50 32 20 50 33 20 50 34  tyCk P1 P2 P3 P4
2d440 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20   P5.**.** Do an 
2d450 61 6e 61 6c 79 73 69 73 20 6f 66 20 74 68 65 20  analysis of the 
2d460 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64  currently open d
2d470 61 74 61 62 61 73 65 2e 20 20 53 74 6f 72 65 20  atabase.  Store 
2d480 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  in.** register P
2d490 31 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 6e  1 the text of an
2d4a0 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 64   error message d
2d4b0 65 73 63 72 69 62 69 6e 67 20 61 6e 79 20 70 72  escribing any pr
2d4c0 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f  oblems..** If no
2d4d0 20 70 72 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f   problems are fo
2d4e0 75 6e 64 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c  und, store a NUL
2d4f0 4c 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  L in register P1
2d500 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69  ..**.** The regi
2d510 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73  ster P3 contains
2d520 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d   the maximum num
2d530 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65  ber of allowed e
2d540 72 72 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73  rrors..** At mos
2d550 74 20 72 65 67 28 50 33 29 20 65 72 72 6f 72 73  t reg(P3) errors
2d560 20 77 69 6c 6c 20 62 65 20 72 65 70 6f 72 74 65   will be reporte
2d570 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  d..** In other w
2d580 6f 72 64 73 2c 20 74 68 65 20 61 6e 61 6c 79 73  ords, the analys
2d590 69 73 20 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e  is stops as soon
2d5a0 20 61 73 20 72 65 67 28 50 31 29 20 65 72 72 6f   as reg(P1) erro
2d5b0 72 73 20 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e  rs are .** seen.
2d5c0 20 20 52 65 67 28 50 31 29 20 69 73 20 75 70 64    Reg(P1) is upd
2d5d0 61 74 65 64 20 77 69 74 68 20 74 68 65 20 6e 75  ated with the nu
2d5e0 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72  mber of errors r
2d5f0 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20  emaining..**.** 
2d600 54 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  The root page nu
2d610 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20 74 61 62  mbers of all tab
2d620 6c 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62  les in the datab
2d630 61 73 65 20 61 72 65 20 69 6e 74 65 67 65 72 73  ase are integers
2d640 0a 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 50 34  .** stored in P4
2d650 5f 49 4e 54 41 52 52 41 59 20 61 72 67 75 6d 65  _INTARRAY argume
2d660 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  nt..**.** If P5 
2d670 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
2d680 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 6f   check is done o
2d690 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20  n the auxiliary 
2d6a0 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65  database.** file
2d6b0 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20 64  , not the main d
2d6c0 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a  atabase file..**
2d6d0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
2d6e0 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65  is used to imple
2d6f0 6d 65 6e 74 20 74 68 65 20 69 6e 74 65 67 72 69  ment the integri
2d700 74 79 5f 63 68 65 63 6b 20 70 72 61 67 6d 61 2e  ty_check pragma.
2d710 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65  .*/.case OP_Inte
2d720 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e 74  grityCk: {.  int
2d730 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20   nRoot;      /* 
2d740 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73  Number of tables
2d750 20 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75 6d   to check.  (Num
2d760 62 65 72 20 6f 66 20 72 6f 6f 74 20 70 61 67 65  ber of root page
2d770 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 52  s.) */.  int *aR
2d780 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72 72 61  oot;     /* Arra
2d790 79 20 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e 75  y of rootpage nu
2d7a0 6d 62 65 72 73 20 66 6f 72 20 74 61 62 6c 65 73  mbers for tables
2d7b0 20 74 6f 20 62 65 20 63 68 65 63 6b 65 64 20 2a   to be checked *
2d7c0 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20  /.  int nErr;   
2d7d0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
2d7e0 20 65 72 72 6f 72 73 20 72 65 70 6f 72 74 65 64   errors reported
2d7f0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20   */.  char *z;  
2d800 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66        /* Text of
2d810 20 74 68 65 20 65 72 72 6f 72 20 72 65 70 6f 72   the error repor
2d820 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72  t */.  Mem *pnEr
2d830 72 3b 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74  r;     /* Regist
2d840 65 72 20 6b 65 65 70 69 6e 67 20 74 72 61 63 6b  er keeping track
2d850 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69   of errors remai
2d860 6e 69 6e 67 20 2a 2f 0a 0a 20 20 61 73 73 65 72  ning */..  asser
2d870 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
2d880 29 3b 0a 20 20 6e 52 6f 6f 74 20 3d 20 70 4f 70  );.  nRoot = pOp
2d890 2d 3e 70 32 3b 0a 20 20 61 52 6f 6f 74 20 3d 20  ->p2;.  aRoot = 
2d8a0 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 61 73  pOp->p4.ai;.  as
2d8b0 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b  sert( nRoot>0 );
2d8c0 0a 20 20 61 73 73 65 72 74 28 20 61 52 6f 6f 74  .  assert( aRoot
2d8d0 5b 6e 52 6f 6f 74 5d 3d 3d 30 20 29 3b 0a 20 20  [nRoot]==0 );.  
2d8e0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
2d8f0 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
2d900 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
2d910 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 6e 45 72  ursor) );.  pnEr
2d920 72 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  r = &aMem[pOp->p
2d930 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  3];.  assert( (p
2d940 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45  nErr->flags & ME
2d950 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61  M_Int)!=0 );.  a
2d960 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66  ssert( (pnErr->f
2d970 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c  lags & (MEM_Str|
2d980 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b  MEM_Blob))==0 );
2d990 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
2d9a0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2d9b0 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e  rt( pOp->p5<db->
2d9c0 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
2d9d0 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
2d9e0 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70  treeMask, pOp->p
2d9f0 35 29 20 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69  5) );.  z = sqli
2da00 74 65 33 42 74 72 65 65 49 6e 74 65 67 72 69 74  te3BtreeIntegrit
2da10 79 43 68 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70  yCheck(db->aDb[p
2da20 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c 20 61 52 6f  Op->p5].pBt, aRo
2da30 6f 74 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20 20 20  ot, nRoot,.     
2da40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2da50 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74              (int
2da60 29 70 6e 45 72 72 2d 3e 75 2e 69 2c 20 26 6e 45  )pnErr->u.i, &nE
2da70 72 72 29 3b 0a 20 20 70 6e 45 72 72 2d 3e 75 2e  rr);.  pnErr->u.
2da80 69 20 2d 3d 20 6e 45 72 72 3b 0a 20 20 73 71 6c  i -= nErr;.  sql
2da90 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
2daa0 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 69 66 28 20  ll(pIn1);.  if( 
2dab0 6e 45 72 72 3d 3d 30 20 29 7b 0a 20 20 20 20 61  nErr==0 ){.    a
2dac0 73 73 65 72 74 28 20 7a 3d 3d 30 20 29 3b 0a 20  ssert( z==0 );. 
2dad0 20 7d 65 6c 73 65 20 69 66 28 20 7a 3d 3d 30 20   }else if( z==0 
2dae0 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  ){.    goto no_m
2daf0 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  em;.  }else{.   
2db00 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2db10 65 74 53 74 72 28 70 49 6e 31 2c 20 7a 2c 20 2d  etStr(pIn1, z, -
2db20 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  1, SQLITE_UTF8, 
2db30 73 71 6c 69 74 65 33 5f 66 72 65 65 29 3b 0a 20  sqlite3_free);. 
2db40 20 7d 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f   }.  UPDATE_MAX_
2db50 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a  BLOBSIZE(pIn1);.
2db60 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
2db70 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 49 6e 31  ngeEncoding(pIn1
2db80 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62  , encoding);.  b
2db90 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
2dba0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e  * SQLITE_OMIT_IN
2dbb0 54 45 47 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f  TEGRITY_CHECK */
2dbc0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
2dbd0 53 65 74 41 64 64 20 50 31 20 50 32 20 2a 20 2a  SetAdd P1 P2 * *
2dbe0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2dbf0 20 72 6f 77 73 65 74 28 50 31 29 3d 72 5b 50 32   rowset(P1)=r[P2
2dc00 5d 0a 2a 2a 0a 2a 2a 20 49 6e 73 65 72 74 20 74  ].**.** Insert t
2dc10 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  he integer value
2dc20 20 68 65 6c 64 20 62 79 20 72 65 67 69 73 74 65   held by registe
2dc30 72 20 50 32 20 69 6e 74 6f 20 61 20 62 6f 6f 6c  r P2 into a bool
2dc40 65 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 65 6c  ean index.** hel
2dc50 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  d in register P1
2dc60 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 61 73 73 65 72  ..**.** An asser
2dc70 74 69 6f 6e 20 66 61 69 6c 73 20 69 66 20 50 32  tion fails if P2
2dc80 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67   is not an integ
2dc90 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  er..*/.case OP_R
2dca0 6f 77 53 65 74 41 64 64 3a 20 7b 20 20 20 20 20  owSetAdd: {     
2dcb0 20 20 2f 2a 20 69 6e 31 2c 20 69 6e 32 20 2a 2f    /* in1, in2 */
2dcc0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
2dcd0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32  pOp->p1];.  pIn2
2dce0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
2dcf0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 49  ];.  assert( (pI
2dd00 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n2->flags & MEM_
2dd10 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 69 66 28  Int)!=0 );.  if(
2dd20 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
2dd30 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
2dd40 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
2dd50 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49  eMemSetRowSet(pI
2dd60 6e 31 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49  n1);.    if( (pI
2dd70 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
2dd80 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74  RowSet)==0 ) got
2dd90 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
2dda0 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73  sqlite3RowSetIns
2ddb0 65 72 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77  ert(pIn1->u.pRow
2ddc0 53 65 74 2c 20 70 49 6e 32 2d 3e 75 2e 69 29 3b  Set, pIn2->u.i);
2ddd0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2dde0 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 52 65  Opcode: RowSetRe
2ddf0 61 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ad P1 P2 P3 * *.
2de00 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
2de10 50 33 5d 3d 72 6f 77 73 65 74 28 50 31 29 0a 2a  P3]=rowset(P1).*
2de20 2a 0a 2a 2a 20 45 78 74 72 61 63 74 20 74 68 65  *.** Extract the
2de30 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20   smallest value 
2de40 66 72 6f 6d 20 62 6f 6f 6c 65 61 6e 20 69 6e 64  from boolean ind
2de50 65 78 20 50 31 20 61 6e 64 20 70 75 74 20 74 68  ex P1 and put th
2de60 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 0a 2a 2a  at value into.**
2de70 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 20 4f   register P3.  O
2de80 72 2c 20 69 66 20 62 6f 6f 6c 65 61 6e 20 69 6e  r, if boolean in
2de90 64 65 78 20 50 31 20 69 73 20 69 6e 69 74 69 61  dex P1 is initia
2dea0 6c 6c 79 20 65 6d 70 74 79 2c 20 6c 65 61 76 65  lly empty, leave
2deb0 20 50 33 0a 2a 2a 20 75 6e 63 68 61 6e 67 65 64   P3.** unchanged
2dec0 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 69 6e 73   and jump to ins
2ded0 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a  truction P2..*/.
2dee0 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 52 65  case OP_RowSetRe
2def0 61 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a  ad: {       /* j
2df00 75 6d 70 2c 20 69 6e 31 2c 20 6f 75 74 33 20 2a  ump, in1, out3 *
2df10 2f 0a 20 20 69 36 34 20 76 61 6c 3b 0a 0a 20 20  /.  i64 val;..  
2df20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
2df30 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p1];.  if( (pI
2df40 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
2df50 52 6f 77 53 65 74 29 3d 3d 30 20 0a 20 20 20 7c  RowSet)==0 .   |
2df60 7c 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e  | sqlite3RowSetN
2df70 65 78 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77  ext(pIn1->u.pRow
2df80 53 65 74 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20  Set, &val)==0.  
2df90 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 62 6f  ){.    /* The bo
2dfa0 6f 6c 65 61 6e 20 69 6e 64 65 78 20 69 73 20 65  olean index is e
2dfb0 6d 70 74 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69  mpty */.    sqli
2dfc0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
2dfd0 6c 28 70 49 6e 31 29 3b 0a 20 20 20 20 56 64 62  l(pIn1);.    Vdb
2dfe0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32  eBranchTaken(1,2
2dff0 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  );.    goto jump
2e000 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b  _to_p2_and_check
2e010 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a  _for_interrupt;.
2e020 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
2e030 41 20 76 61 6c 75 65 20 77 61 73 20 70 75 6c 6c  A value was pull
2e040 65 64 20 66 72 6f 6d 20 74 68 65 20 69 6e 64 65  ed from the inde
2e050 78 20 2a 2f 0a 20 20 20 20 56 64 62 65 42 72 61  x */.    VdbeBra
2e060 6e 63 68 54 61 6b 65 6e 28 30 2c 32 29 3b 0a 20  nchTaken(0,2);. 
2e070 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2e080 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b  mSetInt64(&aMem[
2e090 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c 29 3b 0a  pOp->p3], val);.
2e0a0 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b    }.  goto check
2e0b0 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a  _for_interrupt;.
2e0c0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  }../* Opcode: Ro
2e0d0 77 53 65 74 54 65 73 74 20 50 31 20 50 32 20 50  wSetTest P1 P2 P
2e0e0 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  3 P4.** Synopsis
2e0f0 3a 20 69 66 20 72 5b 50 33 5d 20 69 6e 20 72 6f  : if r[P3] in ro
2e100 77 73 65 74 28 50 31 29 20 67 6f 74 6f 20 50 32  wset(P1) goto P2
2e110 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
2e120 50 33 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f  P3 is assumed to
2e130 20 68 6f 6c 64 20 61 20 36 34 2d 62 69 74 20 69   hold a 64-bit i
2e140 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 49 66  nteger value. If
2e150 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20   register P1.** 
2e160 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f 77 53 65  contains a RowSe
2e170 74 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 61  t object and tha
2e180 74 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20  t RowSet object 
2e190 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74 68 65 20  contains.** the 
2e1a0 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 50 33  value held in P3
2e1b0 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67 69 73 74  , jump to regist
2e1c0 65 72 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  er P2. Otherwise
2e1d0 2c 20 69 6e 73 65 72 74 20 74 68 65 0a 2a 2a 20  , insert the.** 
2e1e0 69 6e 74 65 67 65 72 20 69 6e 20 50 33 20 69 6e  integer in P3 in
2e1f0 74 6f 20 74 68 65 20 52 6f 77 53 65 74 20 61 6e  to the RowSet an
2e200 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e 20 74 6f  d continue on to
2e210 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 6f 70 63   the.** next opc
2e220 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52  ode..**.** The R
2e230 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 69 73 20  owSet object is 
2e240 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72 20 74 68  optimized for th
2e250 65 20 63 61 73 65 20 77 68 65 72 65 20 73 75 63  e case where suc
2e260 63 65 73 73 69 76 65 20 73 65 74 73 0a 2a 2a 20  cessive sets.** 
2e270 6f 66 20 69 6e 74 65 67 65 72 73 2c 20 77 68 65  of integers, whe
2e280 72 65 20 65 61 63 68 20 73 65 74 20 63 6f 6e 74  re each set cont
2e290 61 69 6e 73 20 6e 6f 20 64 75 70 6c 69 63 61 74  ains no duplicat
2e2a0 65 73 2e 20 45 61 63 68 20 73 65 74 0a 2a 2a 20  es. Each set.** 
2e2b0 6f 66 20 76 61 6c 75 65 73 20 69 73 20 69 64 65  of values is ide
2e2c0 6e 74 69 66 69 65 64 20 62 79 20 61 20 75 6e 69  ntified by a uni
2e2d0 71 75 65 20 50 34 20 76 61 6c 75 65 2e 20 54 68  que P4 value. Th
2e2e0 65 20 66 69 72 73 74 20 73 65 74 0a 2a 2a 20 6d  e first set.** m
2e2f0 75 73 74 20 68 61 76 65 20 50 34 3d 3d 30 2c 20  ust have P4==0, 
2e300 74 68 65 20 66 69 6e 61 6c 20 73 65 74 20 50 34  the final set P4
2e310 3d 2d 31 2e 20 20 50 34 20 6d 75 73 74 20 62 65  =-1.  P4 must be
2e320 20 65 69 74 68 65 72 20 2d 31 20 6f 72 0a 2a 2a   either -1 or.**
2e330 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 2e 20 20   non-negative.  
2e340 46 6f 72 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65  For non-negative
2e350 20 76 61 6c 75 65 73 20 6f 66 20 50 34 20 6f 6e   values of P4 on
2e360 6c 79 20 74 68 65 20 6c 6f 77 65 72 20 34 0a 2a  ly the lower 4.*
2e370 2a 20 62 69 74 73 20 61 72 65 20 73 69 67 6e 69  * bits are signi
2e380 66 69 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  ficant..**.** Th
2e390 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74 69 6d 69  is allows optimi
2e3a0 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20 77 68 65  zations: (a) whe
2e3b0 6e 20 50 34 3d 3d 30 20 74 68 65 72 65 20 69 73  n P4==0 there is
2e3c0 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74 65 73 74   no need to test
2e3d0 0a 2a 2a 20 74 68 65 20 72 6f 77 73 65 74 20 6f  .** the rowset o
2e3e0 62 6a 65 63 74 20 66 6f 72 20 50 33 2c 20 61 73  bject for P3, as
2e3f0 20 69 74 20 69 73 20 67 75 61 72 61 6e 74 65 65   it is guarantee
2e400 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74 61 69 6e  d not to contain
2e410 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77 68 65 6e   it,.** (b) when
2e420 20 50 34 3d 3d 2d 31 20 74 68 65 72 65 20 69 73   P4==-1 there is
2e430 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69 6e 73 65   no need to inse
2e440 72 74 20 74 68 65 20 76 61 6c 75 65 2c 20 61 73  rt the value, as
2e450 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65   it will.** neve
2e460 72 20 62 65 20 74 65 73 74 65 64 20 66 6f 72 2c  r be tested for,
2e470 20 61 6e 64 20 28 63 29 20 77 68 65 6e 20 61 20   and (c) when a 
2e480 76 61 6c 75 65 20 74 68 61 74 20 69 73 20 70 61  value that is pa
2e490 72 74 20 6f 66 20 73 65 74 20 58 20 69 73 0a 2a  rt of set X is.*
2e4a0 2a 20 69 6e 73 65 72 74 65 64 2c 20 74 68 65 72  * inserted, ther
2e4b0 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20  e is no need to 
2e4c0 73 65 61 72 63 68 20 74 6f 20 73 65 65 20 69 66  search to see if
2e4d0 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20   the same value 
2e4e0 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c  was.** previousl
2e4f0 79 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61  y inserted as pa
2e500 72 74 20 6f 66 20 73 65 74 20 58 20 28 6f 6e 6c  rt of set X (onl
2e510 79 20 69 66 20 69 74 20 77 61 73 20 70 72 65 76  y if it was prev
2e520 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73 65 72 74  iously.** insert
2e530 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 6f  ed as part of so
2e540 6d 65 20 6f 74 68 65 72 20 73 65 74 29 2e 0a 2a  me other set)..*
2e550 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74  /.case OP_RowSet
2e560 54 65 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20  Test: {         
2e570 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
2e580 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
2e590 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a 20 20 69  .  int iSet;.  i
2e5a0 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20 20 70 49  nt exists;..  pI
2e5b0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
2e5c0 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61  p1];.  pIn3 = &a
2e5d0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
2e5e0 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69  iSet = pOp->p4.i
2e5f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33  ;.  assert( pIn3
2e600 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20  ->flags&MEM_Int 
2e610 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 72  );..  /* If ther
2e620 65 20 69 73 20 61 6e 79 74 68 69 6e 67 20 6f 74  e is anything ot
2e630 68 65 72 20 74 68 61 6e 20 61 20 72 6f 77 73 65  her than a rowse
2e640 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f  t object in memo
2e650 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a  ry cell P1,.  **
2e660 20 64 65 6c 65 74 65 20 69 74 20 6e 6f 77 20 61   delete it now a
2e670 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 50 31  nd initialize P1
2e680 20 77 69 74 68 20 61 6e 20 65 6d 70 74 79 20 72   with an empty r
2e690 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28  owset.  */.  if(
2e6a0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
2e6b0 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
2e6c0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
2e6d0 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49  eMemSetRowSet(pI
2e6e0 6e 31 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49  n1);.    if( (pI
2e6f0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
2e700 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74  RowSet)==0 ) got
2e710 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20  o no_mem;.  }.. 
2e720 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
2e730 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
2e740 3b 0a 20 20 61 73 73 65 72 74 28 20 69 53 65 74  ;.  assert( iSet
2e750 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20  ==-1 || iSet>=0 
2e760 29 3b 0a 20 20 69 66 28 20 69 53 65 74 20 29 7b  );.  if( iSet ){
2e770 0a 20 20 20 20 65 78 69 73 74 73 20 3d 20 73 71  .    exists = sq
2e780 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28  lite3RowSetTest(
2e790 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c  pIn1->u.pRowSet,
2e7a0 20 69 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69   iSet, pIn3->u.i
2e7b0 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  );.    VdbeBranc
2e7c0 68 54 61 6b 65 6e 28 65 78 69 73 74 73 21 3d 30  hTaken(exists!=0
2e7d0 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 65 78 69  ,2);.    if( exi
2e7e0 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  sts ) goto jump_
2e7f0 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 69 66 28  to_p2;.  }.  if(
2e800 20 69 53 65 74 3e 3d 30 20 29 7b 0a 20 20 20 20   iSet>=0 ){.    
2e810 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73  sqlite3RowSetIns
2e820 65 72 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77  ert(pIn1->u.pRow
2e830 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b  Set, pIn3->u.i);
2e840 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2e850 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2e860 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 0a 2f  _OMIT_TRIGGER../
2e870 2a 20 4f 70 63 6f 64 65 3a 20 50 72 6f 67 72 61  * Opcode: Progra
2e880 6d 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  m P1 P2 P3 P4 P5
2e890 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74  .**.** Execute t
2e8a0 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
2e8b0 61 6d 20 70 61 73 73 65 64 20 61 73 20 50 34 20  am passed as P4 
2e8c0 28 74 79 70 65 20 50 34 5f 53 55 42 50 52 4f 47  (type P4_SUBPROG
2e8d0 52 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20  RAM). .**.** P1 
2e8e0 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64  contains the add
2e8f0 72 65 73 73 20 6f 66 20 74 68 65 20 6d 65 6d 6f  ress of the memo
2e900 72 79 20 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e  ry cell that con
2e910 74 61 69 6e 73 20 74 68 65 20 66 69 72 73 74 20  tains the first 
2e920 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20  memory .** cell 
2e930 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 76  in an array of v
2e940 61 6c 75 65 73 20 75 73 65 64 20 61 73 20 61 72  alues used as ar
2e950 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 73  guments to the s
2e960 75 62 2d 70 72 6f 67 72 61 6d 2e 20 50 32 20 0a  ub-program. P2 .
2e970 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  ** contains the 
2e980 61 64 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20  address to jump 
2e990 74 6f 20 69 66 20 74 68 65 20 73 75 62 2d 70 72  to if the sub-pr
2e9a0 6f 67 72 61 6d 20 74 68 72 6f 77 73 20 61 6e 20  ogram throws an 
2e9b0 49 47 4e 4f 52 45 20 0a 2a 2a 20 65 78 63 65 70  IGNORE .** excep
2e9c0 74 69 6f 6e 20 75 73 69 6e 67 20 74 68 65 20 52  tion using the R
2e9d0 41 49 53 45 28 29 20 66 75 6e 63 74 69 6f 6e 2e  AISE() function.
2e9e0 20 52 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e   Register P3 con
2e9f0 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73  tains the addres
2ea00 73 20 0a 2a 2a 20 6f 66 20 61 20 6d 65 6d 6f 72  s .** of a memor
2ea10 79 20 63 65 6c 6c 20 69 6e 20 74 68 69 73 20 28  y cell in this (
2ea20 74 68 65 20 70 61 72 65 6e 74 29 20 56 4d 20 74  the parent) VM t
2ea30 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 61  hat is used to a
2ea40 6c 6c 6f 63 61 74 65 20 74 68 65 20 0a 2a 2a 20  llocate the .** 
2ea50 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20  memory required 
2ea60 62 79 20 74 68 65 20 73 75 62 2d 76 64 62 65 20  by the sub-vdbe 
2ea70 61 74 20 72 75 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a  at runtime..**.*
2ea80 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
2ea90 72 20 74 6f 20 74 68 65 20 56 4d 20 63 6f 6e 74  r to the VM cont
2eaa0 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67  aining the trigg
2eab0 65 72 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a  er program..**.*
2eac0 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a  * If P5 is non-z
2ead0 65 72 6f 2c 20 74 68 65 6e 20 72 65 63 75 72 73  ero, then recurs
2eae0 69 76 65 20 70 72 6f 67 72 61 6d 20 69 6e 76 6f  ive program invo
2eaf0 63 61 74 69 6f 6e 20 69 73 20 65 6e 61 62 6c 65  cation is enable
2eb00 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72  d..*/.case OP_Pr
2eb10 6f 67 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20  ogram: {        
2eb20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74  /* jump */.  int
2eb30 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   nMem;          
2eb40 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
2eb50 66 20 6d 65 6d 6f 72 79 20 72 65 67 69 73 74 65  f memory registe
2eb60 72 73 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72  rs for sub-progr
2eb70 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74  am */.  int nByt
2eb80 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
2eb90 2f 2a 20 42 79 74 65 73 20 6f 66 20 72 75 6e 74  /* Bytes of runt
2eba0 69 6d 65 20 73 70 61 63 65 20 72 65 71 75 69 72  ime space requir
2ebb0 65 64 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72  ed for sub-progr
2ebc0 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 74  am */.  Mem *pRt
2ebd0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2ebe0 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 61  /* Register to a
2ebf0 6c 6c 6f 63 61 74 65 20 72 75 6e 74 69 6d 65 20  llocate runtime 
2ec00 73 70 61 63 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a  space */.  Mem *
2ec10 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  pMem;           
2ec20 20 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 69 74     /* Used to it
2ec30 65 72 61 74 65 20 74 68 72 6f 75 67 68 20 6d 65  erate through me
2ec40 6d 6f 72 79 20 63 65 6c 6c 73 20 2a 2f 0a 20 20  mory cells */.  
2ec50 4d 65 6d 20 2a 70 45 6e 64 3b 20 20 20 20 20 20  Mem *pEnd;      
2ec60 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20          /* Last 
2ec70 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 6e  memory cell in n
2ec80 65 77 20 61 72 72 61 79 20 2a 2f 0a 20 20 56 64  ew array */.  Vd
2ec90 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
2eca0 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 76 64 62        /* New vdb
2ecb0 65 20 66 72 61 6d 65 20 74 6f 20 65 78 65 63 75  e frame to execu
2ecc0 74 65 20 69 6e 20 2a 2f 0a 20 20 53 75 62 50 72  te in */.  SubPr
2ecd0 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b  ogram *pProgram;
2ece0 20 20 20 2f 2a 20 53 75 62 2d 70 72 6f 67 72 61     /* Sub-progra
2ecf0 6d 20 74 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a  m to execute */.
2ed00 20 20 76 6f 69 64 20 2a 74 3b 20 20 20 20 20 20    void *t;      
2ed10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b            /* Tok
2ed20 65 6e 20 69 64 65 6e 74 69 66 79 69 6e 67 20 74  en identifying t
2ed30 72 69 67 67 65 72 20 2a 2f 0a 0a 20 20 70 50 72  rigger */..  pPr
2ed40 6f 67 72 61 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e  ogram = pOp->p4.
2ed50 70 50 72 6f 67 72 61 6d 3b 0a 20 20 70 52 74 20  pProgram;.  pRt 
2ed60 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
2ed70 3b 0a 20 20 61 73 73 65 72 74 28 20 70 50 72 6f  ;.  assert( pPro
2ed80 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20  gram->nOp>0 );. 
2ed90 20 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 70 35   .  /* If the p5
2eda0 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 2c 20   flag is clear, 
2edb0 74 68 65 6e 20 72 65 63 75 72 73 69 76 65 20 69  then recursive i
2edc0 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69  nvocation of tri
2edd0 67 67 65 72 73 20 69 73 20 0a 20 20 2a 2a 20 64  ggers is .  ** d
2ede0 69 73 61 62 6c 65 64 20 66 6f 72 20 62 61 63 6b  isabled for back
2edf0 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62 69 6c  wards compatibil
2ee00 69 74 79 20 28 70 35 20 69 73 20 73 65 74 20 69  ity (p5 is set i
2ee10 66 20 74 68 69 73 20 73 75 62 2d 70 72 6f 67 72  f this sub-progr
2ee20 61 6d 0a 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c  am.  ** is reall
2ee30 79 20 61 20 74 72 69 67 67 65 72 2c 20 6e 6f 74  y a trigger, not
2ee40 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 61   a foreign key a
2ee50 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66  ction, and the f
2ee60 6c 61 67 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64  lag set.  ** and
2ee70 20 63 6c 65 61 72 65 64 20 62 79 20 74 68 65 20   cleared by the 
2ee80 22 50 52 41 47 4d 41 20 72 65 63 75 72 73 69 76  "PRAGMA recursiv
2ee90 65 5f 74 72 69 67 67 65 72 73 22 20 63 6f 6d 6d  e_triggers" comm
2eea0 61 6e 64 20 69 73 20 63 6c 65 61 72 29 2e 0a 20  and is clear).. 
2eeb0 20 2a 2a 20 0a 20 20 2a 2a 20 49 74 20 69 73 20   ** .  ** It is 
2eec0 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61  recursive invoca
2eed0 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73  tion of triggers
2eee0 2c 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65 76  , at the SQL lev
2eef0 65 6c 2c 20 74 68 61 74 20 69 73 20 0a 20 20 2a  el, that is .  *
2ef00 2a 20 64 69 73 61 62 6c 65 64 2e 20 49 6e 20 73  * disabled. In s
2ef10 6f 6d 65 20 63 61 73 65 73 20 61 20 73 69 6e 67  ome cases a sing
2ef20 6c 65 20 74 72 69 67 67 65 72 20 6d 61 79 20 67  le trigger may g
2ef30 65 6e 65 72 61 74 65 20 6d 6f 72 65 20 74 68 61  enerate more tha
2ef40 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50  n one .  ** SubP
2ef50 72 6f 67 72 61 6d 20 28 69 66 20 74 68 65 20 74  rogram (if the t
2ef60 72 69 67 67 65 72 20 6d 61 79 20 62 65 20 65 78  rigger may be ex
2ef70 65 63 75 74 65 64 20 77 69 74 68 20 6d 6f 72 65  ecuted with more
2ef80 20 74 68 61 6e 20 6f 6e 65 20 64 69 66 66 65 72   than one differ
2ef90 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e  ent .  ** ON CON
2efa0 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 29  FLICT algorithm)
2efb0 2e 20 53 75 62 50 72 6f 67 72 61 6d 20 73 74 72  . SubProgram str
2efc0 75 63 74 75 72 65 73 20 61 73 73 6f 63 69 61 74  uctures associat
2efd0 65 64 20 77 69 74 68 20 61 0a 20 20 2a 2a 20 73  ed with a.  ** s
2efe0 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20 61 6c  ingle trigger al
2eff0 6c 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  l have the same 
2f000 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 53 75  value for the Su
2f010 62 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a  bProgram.token .
2f020 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 2e 20 20    ** variable.  
2f030 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  */.  if( pOp->p5
2f040 20 29 7b 0a 20 20 20 20 74 20 3d 20 70 50 72 6f   ){.    t = pPro
2f050 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20  gram->token;.   
2f060 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70   for(pFrame=p->p
2f070 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 20 26 26  Frame; pFrame &&
2f080 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d   pFrame->token!=
2f090 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65  t; pFrame=pFrame
2f0a0 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20  ->pParent);.    
2f0b0 69 66 28 20 70 46 72 61 6d 65 20 29 20 62 72 65  if( pFrame ) bre
2f0c0 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70  ak;.  }..  if( p
2f0d0 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c  ->nFrame>=db->aL
2f0e0 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
2f0f0 54 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48 5d  T_TRIGGER_DEPTH]
2f100 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
2f110 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73  ITE_ERROR;.    s
2f120 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
2f130 70 2c 20 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76  p, "too many lev
2f140 65 6c 73 20 6f 66 20 74 72 69 67 67 65 72 20 72  els of trigger r
2f150 65 63 75 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20  ecursion");.    
2f160 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2f170 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20  o_error;.  }..  
2f180 2f 2a 20 52 65 67 69 73 74 65 72 20 70 52 74 20  /* Register pRt 
2f190 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
2f1a0 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75   the memory requ
2f1b0 69 72 65 64 20 74 6f 20 73 61 76 65 20 74 68 65  ired to save the
2f1c0 20 73 74 61 74 65 0a 20 20 2a 2a 20 6f 66 20 74   state.  ** of t
2f1d0 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 67 72  he current progr
2f1e0 61 6d 2c 20 61 6e 64 20 74 68 65 20 6d 65 6d 6f  am, and the memo
2f1f0 72 79 20 72 65 71 75 69 72 65 64 20 61 74 20 72  ry required at r
2f200 75 6e 74 69 6d 65 20 74 6f 20 65 78 65 63 75 74  untime to execut
2f210 65 0a 20 20 2a 2a 20 74 68 65 20 74 72 69 67 67  e.  ** the trigg
2f220 65 72 20 70 72 6f 67 72 61 6d 2e 20 49 66 20 74  er program. If t
2f230 68 69 73 20 74 72 69 67 67 65 72 20 68 61 73 20  his trigger has 
2f240 62 65 65 6e 20 66 69 72 65 64 20 62 65 66 6f 72  been fired befor
2f250 65 2c 20 74 68 65 6e 20 70 52 74 20 0a 20 20 2a  e, then pRt .  *
2f260 2a 20 69 73 20 61 6c 72 65 61 64 79 20 61 6c 6c  * is already all
2f270 6f 63 61 74 65 64 2e 20 4f 74 68 65 72 77 69 73  ocated. Otherwis
2f280 65 2c 20 69 74 20 6d 75 73 74 20 62 65 20 69 6e  e, it must be in
2f290 69 74 69 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20  itialized.  */. 
2f2a0 20 69 66 28 20 28 70 52 74 2d 3e 66 6c 61 67 73   if( (pRt->flags
2f2b0 26 4d 45 4d 5f 46 72 61 6d 65 29 3d 3d 30 20 29  &MEM_Frame)==0 )
2f2c0 7b 0a 20 20 20 20 2f 2a 20 53 75 62 50 72 6f 67  {.    /* SubProg
2f2d0 72 61 6d 2e 6e 4d 65 6d 20 69 73 20 73 65 74 20  ram.nMem is set 
2f2e0 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  to the number of
2f2f0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73   memory cells us
2f300 65 64 20 62 79 20 74 68 65 20 0a 20 20 20 20 2a  ed by the .    *
2f310 2a 20 70 72 6f 67 72 61 6d 20 73 74 6f 72 65 64  * program stored
2f320 20 69 6e 20 53 75 62 50 72 6f 67 72 61 6d 2e 61   in SubProgram.a
2f330 4f 70 2e 20 41 73 20 77 65 6c 6c 20 61 73 20 74  Op. As well as t
2f340 68 65 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79  hese, one memory
2f350 0a 20 20 20 20 2a 2a 20 63 65 6c 6c 20 69 73 20  .    ** cell is 
2f360 72 65 71 75 69 72 65 64 20 66 6f 72 20 65 61 63  required for eac
2f370 68 20 63 75 72 73 6f 72 20 75 73 65 64 20 62 79  h cursor used by
2f380 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 53 65   the program. Se
2f390 74 20 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a 20 76  t local.    ** v
2f3a0 61 72 69 61 62 6c 65 20 6e 4d 65 6d 20 28 61 6e  ariable nMem (an
2f3b0 64 20 6c 61 74 65 72 2c 20 56 64 62 65 46 72 61  d later, VdbeFra
2f3c0 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d 29 20 74 6f  me.nChildMem) to
2f3d0 20 74 68 69 73 20 76 61 6c 75 65 2e 0a 20 20 20   this value..   
2f3e0 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d 20 70   */.    nMem = p
2f3f0 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20  Program->nMem + 
2f400 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a  pProgram->nCsr;.
2f410 20 20 20 20 61 73 73 65 72 74 28 20 6e 4d 65 6d      assert( nMem
2f420 3e 30 20 29 3b 0a 20 20 20 20 69 66 28 20 70 50  >0 );.    if( pP
2f430 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 30 20  rogram->nCsr==0 
2f440 29 20 6e 4d 65 6d 2b 2b 3b 0a 20 20 20 20 6e 42  ) nMem++;.    nB
2f450 79 74 65 20 3d 20 52 4f 55 4e 44 38 28 73 69 7a  yte = ROUND8(siz
2f460 65 6f 66 28 56 64 62 65 46 72 61 6d 65 29 29 0a  eof(VdbeFrame)).
2f470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20                + 
2f480 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d 65  nMem * sizeof(Me
2f490 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  m).             
2f4a0 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73   + pProgram->nCs
2f4b0 72 20 2a 20 73 69 7a 65 6f 66 28 56 64 62 65 43  r * sizeof(VdbeC
2f4c0 75 72 73 6f 72 20 2a 29 0a 20 20 20 20 20 20 20  ursor *).       
2f4d0 20 20 20 20 20 20 20 2b 20 70 50 72 6f 67 72 61         + pProgra
2f4e0 6d 2d 3e 6e 4f 6e 63 65 20 2a 20 73 69 7a 65 6f  m->nOnce * sizeo
2f4f0 66 28 75 38 29 3b 0a 20 20 20 20 70 46 72 61 6d  f(u8);.    pFram
2f500 65 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  e = sqlite3DbMal
2f510 6c 6f 63 5a 65 72 6f 28 64 62 2c 20 6e 42 79 74  locZero(db, nByt
2f520 65 29 3b 0a 20 20 20 20 69 66 28 20 21 70 46 72  e);.    if( !pFr
2f530 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  ame ){.      got
2f540 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a  o no_mem;.    }.
2f550 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2f560 65 6d 52 65 6c 65 61 73 65 28 70 52 74 29 3b 0a  emRelease(pRt);.
2f570 20 20 20 20 70 52 74 2d 3e 66 6c 61 67 73 20 3d      pRt->flags =
2f580 20 4d 45 4d 5f 46 72 61 6d 65 3b 0a 20 20 20 20   MEM_Frame;.    
2f590 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65 20 3d 20  pRt->u.pFrame = 
2f5a0 70 46 72 61 6d 65 3b 0a 0a 20 20 20 20 70 46 72  pFrame;..    pFr
2f5b0 61 6d 65 2d 3e 76 20 3d 20 70 3b 0a 20 20 20 20  ame->v = p;.    
2f5c0 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65  pFrame->nChildMe
2f5d0 6d 20 3d 20 6e 4d 65 6d 3b 0a 20 20 20 20 70 46  m = nMem;.    pF
2f5e0 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20  rame->nChildCsr 
2f5f0 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  = pProgram->nCsr
2f600 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 70 63  ;.    pFrame->pc
2f610 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61   = (int)(pOp - a
2f620 4f 70 29 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Op);.    pFrame-
2f630 3e 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b  >aMem = p->aMem;
2f640 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4d 65  .    pFrame->nMe
2f650 6d 20 3d 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20  m = p->nMem;.   
2f660 20 70 46 72 61 6d 65 2d 3e 61 70 43 73 72 20 3d   pFrame->apCsr =
2f670 20 70 2d 3e 61 70 43 73 72 3b 0a 20 20 20 20 70   p->apCsr;.    p
2f680 46 72 61 6d 65 2d 3e 6e 43 75 72 73 6f 72 20 3d  Frame->nCursor =
2f690 20 70 2d 3e 6e 43 75 72 73 6f 72 3b 0a 20 20 20   p->nCursor;.   
2f6a0 20 70 46 72 61 6d 65 2d 3e 61 4f 70 20 3d 20 70   pFrame->aOp = p
2f6b0 2d 3e 61 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d  ->aOp;.    pFram
2f6c0 65 2d 3e 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b  e->nOp = p->nOp;
2f6d0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 74 6f 6b  .    pFrame->tok
2f6e0 65 6e 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74  en = pProgram->t
2f6f0 6f 6b 65 6e 3b 0a 20 20 20 20 70 46 72 61 6d 65  oken;.    pFrame
2f700 2d 3e 61 4f 6e 63 65 46 6c 61 67 20 3d 20 70 2d  ->aOnceFlag = p-
2f710 3e 61 4f 6e 63 65 46 6c 61 67 3b 0a 20 20 20 20  >aOnceFlag;.    
2f720 70 46 72 61 6d 65 2d 3e 6e 4f 6e 63 65 46 6c 61  pFrame->nOnceFla
2f730 67 20 3d 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67  g = p->nOnceFlag
2f740 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
2f750 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e  ENABLE_STMT_SCAN
2f760 53 54 41 54 55 53 0a 20 20 20 20 70 46 72 61 6d  STATUS.    pFram
2f770 65 2d 3e 61 6e 45 78 65 63 20 3d 20 70 2d 3e 61  e->anExec = p->a
2f780 6e 45 78 65 63 3b 0a 23 65 6e 64 69 66 0a 0a 20  nExec;.#endif.. 
2f790 20 20 20 70 45 6e 64 20 3d 20 26 56 64 62 65 46     pEnd = &VdbeF
2f7a0 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b  rameMem(pFrame)[
2f7b0 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65  pFrame->nChildMe
2f7c0 6d 5d 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d  m];.    for(pMem
2f7d0 3d 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46  =VdbeFrameMem(pF
2f7e0 72 61 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e  rame); pMem!=pEn
2f7f0 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20  d; pMem++){.    
2f800 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20    pMem->flags = 
2f810 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20  MEM_Undefined;. 
2f820 20 20 20 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20       pMem->db = 
2f830 64 62 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  db;.    }.  }els
2f840 65 7b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20  e{.    pFrame = 
2f850 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a 20  pRt->u.pFrame;. 
2f860 20 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67     assert( pProg
2f870 72 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72  ram->nMem+pProgr
2f880 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65  am->nCsr==pFrame
2f890 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 0a 20 20 20  ->nChildMem .   
2f8a0 20 20 20 20 20 7c 7c 20 28 70 50 72 6f 67 72 61       || (pProgra
2f8b0 6d 2d 3e 6e 43 73 72 3d 3d 30 20 26 26 20 70 50  m->nCsr==0 && pP
2f8c0 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 31 3d 3d  rogram->nMem+1==
2f8d0 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65  pFrame->nChildMe
2f8e0 6d 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  m) );.    assert
2f8f0 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  ( pProgram->nCsr
2f900 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64  ==pFrame->nChild
2f910 43 73 72 20 29 3b 0a 20 20 20 20 61 73 73 65 72  Csr );.    asser
2f920 74 28 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61  t( (int)(pOp - a
2f930 4f 70 29 3d 3d 70 46 72 61 6d 65 2d 3e 70 63 20  Op)==pFrame->pc 
2f940 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e 6e 46 72  );.  }..  p->nFr
2f950 61 6d 65 2b 2b 3b 0a 20 20 70 46 72 61 6d 65 2d  ame++;.  pFrame-
2f960 3e 70 50 61 72 65 6e 74 20 3d 20 70 2d 3e 70 46  >pParent = p->pF
2f970 72 61 6d 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e  rame;.  pFrame->
2f980 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74  lastRowid = last
2f990 52 6f 77 69 64 3b 0a 20 20 70 46 72 61 6d 65 2d  Rowid;.  pFrame-
2f9a0 3e 6e 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43  >nChange = p->nC
2f9b0 68 61 6e 67 65 3b 0a 20 20 70 46 72 61 6d 65 2d  hange;.  pFrame-
2f9c0 3e 6e 44 62 43 68 61 6e 67 65 20 3d 20 70 2d 3e  >nDbChange = p->
2f9d0 64 62 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 61  db->nChange;.  a
2f9e0 73 73 65 72 74 28 20 70 46 72 61 6d 65 2d 3e 70  ssert( pFrame->p
2f9f0 41 75 78 44 61 74 61 3d 3d 30 20 29 3b 0a 20 20  AuxData==0 );.  
2fa00 70 46 72 61 6d 65 2d 3e 70 41 75 78 44 61 74 61  pFrame->pAuxData
2fa10 20 3d 20 70 2d 3e 70 41 75 78 44 61 74 61 3b 0a   = p->pAuxData;.
2fa20 20 20 70 2d 3e 70 41 75 78 44 61 74 61 20 3d 20    p->pAuxData = 
2fa30 30 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20  0;.  p->nChange 
2fa40 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65  = 0;.  p->pFrame
2fa50 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e   = pFrame;.  p->
2fa60 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 56 64  aMem = aMem = Vd
2fa70 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d  beFrameMem(pFram
2fa80 65 29 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20  e);.  p->nMem = 
2fa90 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65  pFrame->nChildMe
2faa0 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72 73 6f 72 20  m;.  p->nCursor 
2fab0 3d 20 28 75 31 36 29 70 46 72 61 6d 65 2d 3e 6e  = (u16)pFrame->n
2fac0 43 68 69 6c 64 43 73 72 3b 0a 20 20 70 2d 3e 61  ChildCsr;.  p->a
2fad0 70 43 73 72 20 3d 20 28 56 64 62 65 43 75 72 73  pCsr = (VdbeCurs
2fae0 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e 6e  or **)&aMem[p->n
2faf0 4d 65 6d 5d 3b 0a 20 20 70 2d 3e 61 4f 70 20 3d  Mem];.  p->aOp =
2fb00 20 61 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d   aOp = pProgram-
2fb10 3e 61 4f 70 3b 0a 20 20 70 2d 3e 6e 4f 70 20 3d  >aOp;.  p->nOp =
2fb20 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3b 0a   pProgram->nOp;.
2fb30 20 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 20 3d    p->aOnceFlag =
2fb40 20 28 75 38 20 2a 29 26 70 2d 3e 61 70 43 73 72   (u8 *)&p->apCsr
2fb50 5b 70 2d 3e 6e 43 75 72 73 6f 72 5d 3b 0a 20 20  [p->nCursor];.  
2fb60 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d 20 70  p->nOnceFlag = p
2fb70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 6e 63 65 3b 0a  Program->nOnce;.
2fb80 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
2fb90 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54  ABLE_STMT_SCANST
2fba0 41 54 55 53 0a 20 20 70 2d 3e 61 6e 45 78 65 63  ATUS.  p->anExec
2fbb0 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 70   = 0;.#endif.  p
2fbc0 4f 70 20 3d 20 26 61 4f 70 5b 2d 31 5d 3b 0a 20  Op = &aOp[-1];. 
2fbd0 20 6d 65 6d 73 65 74 28 70 2d 3e 61 4f 6e 63 65   memset(p->aOnce
2fbe0 46 6c 61 67 2c 20 30 2c 20 70 2d 3e 6e 4f 6e 63  Flag, 0, p->nOnc
2fbf0 65 46 6c 61 67 29 3b 0a 0a 20 20 62 72 65 61 6b  eFlag);..  break
2fc00 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2fc10 50 61 72 61 6d 20 50 31 20 50 32 20 2a 20 2a 20  Param P1 P2 * * 
2fc20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  *.**.** This opc
2fc30 6f 64 65 20 69 73 20 6f 6e 6c 79 20 65 76 65 72  ode is only ever
2fc40 20 70 72 65 73 65 6e 74 20 69 6e 20 73 75 62 2d   present in sub-
2fc50 70 72 6f 67 72 61 6d 73 20 63 61 6c 6c 65 64 20  programs called 
2fc60 76 69 61 20 74 68 65 20 0a 2a 2a 20 4f 50 5f 50  via the .** OP_P
2fc70 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69  rogram instructi
2fc80 6f 6e 2e 20 43 6f 70 79 20 61 20 76 61 6c 75 65  on. Copy a value
2fc90 20 63 75 72 72 65 6e 74 6c 79 20 73 74 6f 72 65   currently store
2fca0 64 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 0a 2a  d in a memory .*
2fcb0 2a 20 63 65 6c 6c 20 6f 66 20 74 68 65 20 63 61  * cell of the ca
2fcc0 6c 6c 69 6e 67 20 28 70 61 72 65 6e 74 29 20 66  lling (parent) f
2fcd0 72 61 6d 65 20 74 6f 20 63 65 6c 6c 20 50 32 20  rame to cell P2 
2fce0 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 66  in the current f
2fcf0 72 61 6d 65 73 20 0a 2a 2a 20 61 64 64 72 65 73  rames .** addres
2fd00 73 20 73 70 61 63 65 2e 20 54 68 69 73 20 69 73  s space. This is
2fd10 20 75 73 65 64 20 62 79 20 74 72 69 67 67 65 72   used by trigger
2fd20 20 70 72 6f 67 72 61 6d 73 20 74 6f 20 61 63 63   programs to acc
2fd30 65 73 73 20 74 68 65 20 6e 65 77 2e 2a 20 0a 2a  ess the new.* .*
2fd40 2a 20 61 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c 75  * and old.* valu
2fd50 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 64  es..**.** The ad
2fd60 64 72 65 73 73 20 6f 66 20 74 68 65 20 63 65 6c  dress of the cel
2fd70 6c 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20  l in the parent 
2fd80 66 72 61 6d 65 20 69 73 20 64 65 74 65 72 6d 69  frame is determi
2fd90 6e 65 64 20 62 79 20 61 64 64 69 6e 67 0a 2a 2a  ned by adding.**
2fda0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
2fdb0 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f  e P1 argument to
2fdc0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
2fdd0 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f  e P1 argument to
2fde0 20 74 68 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67 20   the.** calling 
2fdf0 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72  OP_Program instr
2fe00 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
2fe10 4f 50 5f 50 61 72 61 6d 3a 20 7b 20 20 20 20 20  OP_Param: {     
2fe20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
2fe30 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
2fe40 72 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e  rame;.  Mem *pIn
2fe50 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
2fe60 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
2fe70 29 3b 0a 20 20 70 46 72 61 6d 65 20 3d 20 70 2d  );.  pFrame = p-
2fe80 3e 70 46 72 61 6d 65 3b 0a 20 20 70 49 6e 20 3d  >pFrame;.  pIn =
2fe90 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70   &pFrame->aMem[p
2fea0 4f 70 2d 3e 70 31 20 2b 20 70 46 72 61 6d 65 2d  Op->p1 + pFrame-
2feb0 3e 61 4f 70 5b 70 46 72 61 6d 65 2d 3e 70 63 5d  >aOp[pFrame->pc]
2fec0 2e 70 31 5d 3b 20 20 20 0a 20 20 73 71 6c 69 74  .p1];   .  sqlit
2fed0 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
2fee0 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 2c 20  Copy(pOut, pIn, 
2fef0 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 62 72  MEM_Ephem);.  br
2ff00 65 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f  eak;.}..#endif /
2ff10 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  * #ifndef SQLITE
2ff20 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 2a 2f  _OMIT_TRIGGER */
2ff30 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2ff40 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
2ff50 59 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 43  Y./* Opcode: FkC
2ff60 6f 75 6e 74 65 72 20 50 31 20 50 32 20 2a 20 2a  ounter P1 P2 * *
2ff70 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2ff80 66 6b 63 74 72 5b 50 31 5d 2b 3d 50 32 0a 2a 2a  fkctr[P1]+=P2.**
2ff90 0a 2a 2a 20 49 6e 63 72 65 6d 65 6e 74 20 61 20  .** Increment a 
2ffa0 22 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e  "constraint coun
2ffb0 74 65 72 22 20 62 79 20 50 32 20 28 50 32 20 6d  ter" by P2 (P2 m
2ffc0 61 79 20 62 65 20 6e 65 67 61 74 69 76 65 20 6f  ay be negative o
2ffd0 72 20 70 6f 73 69 74 69 76 65 29 2e 0a 2a 2a 20  r positive)..** 
2ffe0 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P1 is non-zer
2fff0 6f 2c 20 74 68 65 20 64 61 74 61 62 61 73 65 20  o, the database 
30000 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74  constraint count
30010 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  er is incremente
30020 64 20 0a 2a 2a 20 28 64 65 66 65 72 72 65 64 20  d .** (deferred 
30030 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
30040 74 72 61 69 6e 74 73 29 2e 20 4f 74 68 65 72 77  traints). Otherw
30050 69 73 65 2c 20 69 66 20 50 31 20 69 73 20 7a 65  ise, if P1 is ze
30060 72 6f 2c 20 74 68 65 20 0a 2a 2a 20 73 74 61 74  ro, the .** stat
30070 65 6d 65 6e 74 20 63 6f 75 6e 74 65 72 20 69 73  ement counter is
30080 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 69 6d   incremented (im
30090 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20  mediate foreign 
300a0 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29  key constraints)
300b0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 43  ..*/.case OP_FkC
300c0 6f 75 6e 74 65 72 3a 20 7b 0a 20 20 69 66 28 20  ounter: {.  if( 
300d0 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
300e0 54 45 5f 44 65 66 65 72 46 4b 73 20 29 7b 0a 20  TE_DeferFKs ){. 
300f0 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64     db->nDeferred
30100 49 6d 6d 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e  ImmCons += pOp->
30110 70 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  p2;.  }else if( 
30120 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 64  pOp->p1 ){.    d
30130 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
30140 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d   += pOp->p2;.  }
30150 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b  else{.    p->nFk
30160 43 6f 6e 73 74 72 61 69 6e 74 20 2b 3d 20 70 4f  Constraint += pO
30170 70 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  p->p2;.  }.  bre
30180 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
30190 3a 20 46 6b 49 66 5a 65 72 6f 20 50 31 20 50 32  : FkIfZero P1 P2
301a0 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
301b0 69 73 3a 20 69 66 20 66 6b 63 74 72 5b 50 31 5d  is: if fkctr[P1]
301c0 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  ==0 goto P2.**.*
301d0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 74 65  * This opcode te
301e0 73 74 73 20 69 66 20 61 20 66 6f 72 65 69 67 6e  sts if a foreign
301f0 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 2d   key constraint-
30200 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72 65  counter is curre
30210 6e 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66  ntly zero..** If
30220 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73   so, jump to ins
30230 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68  truction P2. Oth
30240 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72  erwise, fall thr
30250 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
30260 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e   .** instruction
30270 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73  ..**.** If P1 is
30280 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
30290 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
302a0 6e 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73  n if the databas
302b0 65 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75  e constraint-cou
302c0 6e 74 65 72 0a 2a 2a 20 69 73 20 7a 65 72 6f 20  nter.** is zero 
302d0 28 74 68 65 20 6f 6e 65 20 74 68 61 74 20 63 6f  (the one that co
302e0 75 6e 74 73 20 64 65 66 65 72 72 65 64 20 63 6f  unts deferred co
302f0 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
30300 6f 6e 73 29 2e 20 49 66 20 50 31 20 69 73 0a 2a  ons). If P1 is.*
30310 2a 20 7a 65 72 6f 2c 20 74 68 65 20 6a 75 6d 70  * zero, the jump
30320 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65   is taken if the
30330 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e 73 74   statement const
30340 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73  raint-counter is
30350 20 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69   zero.** (immedi
30360 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ate foreign key 
30370 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
30380 74 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65 20  tions)..*/.case 
30390 4f 50 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b 20 20  OP_FkIfZero: {  
303a0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
303b0 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20  /.  if( pOp->p1 
303c0 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  ){.    VdbeBranc
303d0 68 54 61 6b 65 6e 28 64 62 2d 3e 6e 44 65 66 65  hTaken(db->nDefe
303e0 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64  rredCons==0 && d
303f0 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
30400 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20  ons==0, 2);.    
30410 69 66 28 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  if( db->nDeferre
30420 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e  dCons==0 && db->
30430 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
30440 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  ==0 ) goto jump_
30450 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a  to_p2;.  }else{.
30460 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
30470 6b 65 6e 28 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72  ken(p->nFkConstr
30480 61 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e  aint==0 && db->n
30490 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d  DeferredImmCons=
304a0 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20  =0, 2);.    if( 
304b0 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74  p->nFkConstraint
304c0 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65  ==0 && db->nDefe
304d0 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29  rredImmCons==0 )
304e0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
304f0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
30500 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64  .#endif /* #ifnd
30510 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
30520 4f 52 45 49 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23  OREIGN_KEY */..#
30530 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
30540 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
30550 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d  ./* Opcode: MemM
30560 61 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ax P1 P2 * * *.*
30570 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31  * Synopsis: r[P1
30580 5d 3d 6d 61 78 28 72 5b 50 31 5d 2c 72 5b 50 32  ]=max(r[P1],r[P2
30590 5d 29 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  ]).**.** P1 is a
305a0 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 68 65   register in the
305b0 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74   root frame of t
305c0 68 69 73 20 56 4d 20 28 74 68 65 20 72 6f 6f 74  his VM (the root
305d0 20 66 72 61 6d 65 20 69 73 0a 2a 2a 20 64 69 66   frame is.** dif
305e0 66 65 72 65 6e 74 20 66 72 6f 6d 20 74 68 65 20  ferent from the 
305f0 63 75 72 72 65 6e 74 20 66 72 61 6d 65 20 69 66  current frame if
30600 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
30610 6e 20 69 73 20 62 65 69 6e 67 20 65 78 65 63 75  n is being execu
30620 74 65 64 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20  ted.** within a 
30630 73 75 62 2d 70 72 6f 67 72 61 6d 29 2e 20 53 65  sub-program). Se
30640 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72  t the value of r
30650 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 74 68  egister P1 to th
30660 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a  e maximum of .**
30670 20 69 74 73 20 63 75 72 72 65 6e 74 20 76 61 6c   its current val
30680 75 65 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65  ue and the value
30690 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
306a0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
306b0 72 75 63 74 69 6f 6e 20 74 68 72 6f 77 73 20 61  ruction throws a
306c0 6e 20 65 72 72 6f 72 20 69 66 20 74 68 65 20 6d  n error if the m
306d0 65 6d 6f 72 79 20 63 65 6c 6c 20 69 73 20 6e 6f  emory cell is no
306e0 74 20 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 61  t initially.** a
306f0 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61  n integer..*/.ca
30700 73 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20  se OP_MemMax: { 
30710 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f         /* in2 */
30720 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
30730 72 61 6d 65 3b 0a 20 20 69 66 28 20 70 2d 3e 70  rame;.  if( p->p
30740 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 66 6f 72  Frame ){.    for
30750 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d  (pFrame=p->pFram
30760 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  e; pFrame->pPare
30770 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d  nt; pFrame=pFram
30780 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20  e->pParent);.   
30790 20 70 49 6e 31 20 3d 20 26 70 46 72 61 6d 65 2d   pIn1 = &pFrame-
307a0 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  >aMem[pOp->p1];.
307b0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e    }else{.    pIn
307c0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
307d0 31 5d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  1];.  }.  assert
307e0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e  ( memIsValid(pIn
307f0 31 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  1) );.  sqlite3V
30800 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
30810 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d  (pIn1);.  pIn2 =
30820 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
30830 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
30840 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32  mIntegerify(pIn2
30850 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75  );.  if( pIn1->u
30860 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20  .i<pIn2->u.i){. 
30870 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70     pIn1->u.i = p
30880 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20  In2->u.i;.  }.  
30890 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
308a0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  /* SQLITE_OMIT_A
308b0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a  UTOINCREMENT */.
308c0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 50 6f  ./* Opcode: IfPo
308d0 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  s P1 P2 P3 * *.*
308e0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
308f0 5b 50 31 5d 3e 30 20 74 68 65 6e 20 72 5b 50 31  [P1]>0 then r[P1
30900 5d 2d 3d 50 33 2c 20 67 6f 74 6f 20 50 32 0a 2a  ]-=P3, goto P2.*
30910 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31  *.** Register P1
30920 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e   must contain an
30930 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 20 49 66 20   integer..** If 
30940 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67  the value of reg
30950 69 73 74 65 72 20 50 31 20 69 73 20 31 20 6f 72  ister P1 is 1 or
30960 20 67 72 65 61 74 65 72 2c 20 73 75 62 74 72 61   greater, subtra
30970 63 74 20 50 33 20 66 72 6f 6d 20 74 68 65 0a 2a  ct P3 from the.*
30980 2a 20 76 61 6c 75 65 20 69 6e 20 50 31 20 61 6e  * value in P1 an
30990 64 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  d jump to P2..**
309a0 0a 2a 2a 20 49 66 20 74 68 65 20 69 6e 69 74 69  .** If the initi
309b0 61 6c 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  al value of regi
309c0 73 74 65 72 20 50 31 20 69 73 20 6c 65 73 73 20  ster P1 is less 
309d0 74 68 61 6e 20 31 2c 20 74 68 65 6e 20 74 68 65  than 1, then the
309e0 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 75 6e 63  .** value is unc
309f0 68 61 6e 67 65 64 20 61 6e 64 20 63 6f 6e 74 72  hanged and contr
30a00 6f 6c 20 70 61 73 73 65 73 20 74 68 72 6f 75 67  ol passes throug
30a10 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
30a20 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
30a30 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20  se OP_IfPos: {  
30a40 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
30a50 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
30a60 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
30a70 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
30a80 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
30a90 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
30aa0 6e 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 2c 20  n( pIn1->u.i>0, 
30ab0 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  2);.  if( pIn1->
30ac0 75 2e 69 3e 30 20 29 7b 0a 20 20 20 20 70 49 6e  u.i>0 ){.    pIn
30ad0 31 2d 3e 75 2e 69 20 2d 3d 20 70 4f 70 2d 3e 70  1->u.i -= pOp->p
30ae0 33 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  3;.    goto jump
30af0 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
30b00 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
30b10 65 3a 20 4f 66 66 73 65 74 4c 69 6d 69 74 20 50  e: OffsetLimit P
30b20 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
30b30 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
30b40 5d 3e 30 20 74 68 65 6e 20 72 5b 50 32 5d 3d 72  ]>0 then r[P2]=r
30b50 5b 50 31 5d 2b 6d 61 78 28 30 2c 72 5b 50 33 5d  [P1]+max(0,r[P3]
30b60 29 20 65 6c 73 65 20 72 5b 50 32 5d 3d 28 2d 31  ) else r[P2]=(-1
30b70 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ).**.** This opc
30b80 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 61 20 63  ode performs a c
30b90 6f 6d 6d 6f 6e 6c 79 20 75 73 65 64 20 63 6f 6d  ommonly used com
30ba0 70 75 74 61 74 69 6f 6e 20 61 73 73 6f 63 69 61  putation associa
30bb0 74 65 64 20 77 69 74 68 0a 2a 2a 20 4c 49 4d 49  ted with.** LIMI
30bc0 54 20 61 6e 64 20 4f 46 46 53 45 54 20 70 72 6f  T and OFFSET pro
30bd0 63 65 73 73 2e 20 20 72 5b 50 31 5d 20 68 6f 6c  cess.  r[P1] hol
30be0 64 73 20 74 68 65 20 6c 69 6d 69 74 20 63 6f 75  ds the limit cou
30bf0 6e 74 65 72 2e 20 20 72 5b 50 33 5d 0a 2a 2a 20  nter.  r[P3].** 
30c00 68 6f 6c 64 73 20 74 68 65 20 6f 66 66 73 65 74  holds the offset
30c10 20 63 6f 75 6e 74 65 72 2e 20 20 54 68 65 20 6f   counter.  The o
30c20 70 63 6f 64 65 20 63 6f 6d 70 75 74 65 73 20 74  pcode computes t
30c30 68 65 20 63 6f 6d 62 69 6e 65 64 20 76 61 6c 75  he combined valu
30c40 65 0a 2a 2a 20 6f 66 20 74 68 65 20 4c 49 4d 49  e.** of the LIMI
30c50 54 20 61 6e 64 20 4f 46 46 53 45 54 20 61 6e 64  T and OFFSET and
30c60 20 73 74 6f 72 65 73 20 74 68 61 74 20 76 61 6c   stores that val
30c70 75 65 20 69 6e 20 72 5b 50 32 5d 2e 20 20 54 68  ue in r[P2].  Th
30c80 65 20 72 5b 50 32 5d 0a 2a 2a 20 76 61 6c 75 65  e r[P2].** value
30c90 20 63 6f 6d 70 75 74 65 64 20 69 73 20 74 68 65   computed is the
30ca0 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
30cb0 20 72 6f 77 73 20 74 68 61 74 20 77 69 6c 6c 20   rows that will 
30cc0 6e 65 65 64 20 74 6f 20 62 65 0a 2a 2a 20 76 69  need to be.** vi
30cd0 73 69 74 65 64 20 69 6e 20 6f 72 64 65 72 20 74  sited in order t
30ce0 6f 20 63 6f 6d 70 6c 65 74 65 20 74 68 65 20 71  o complete the q
30cf0 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 72  uery..**.** If r
30d00 5b 50 33 5d 20 69 73 20 7a 65 72 6f 20 6f 72 20  [P3] is zero or 
30d10 6e 65 67 61 74 69 76 65 2c 20 74 68 61 74 20 6d  negative, that m
30d20 65 61 6e 73 20 74 68 65 72 65 20 69 73 20 6e 6f  eans there is no
30d30 20 4f 46 46 53 45 54 0a 2a 2a 20 61 6e 64 20 72   OFFSET.** and r
30d40 5b 50 32 5d 20 69 73 20 73 65 74 20 74 6f 20 62  [P2] is set to b
30d50 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  e the value of t
30d60 68 65 20 4c 49 4d 49 54 2c 20 72 5b 50 31 5d 2e  he LIMIT, r[P1].
30d70 0a 2a 2a 0a 2a 2a 20 69 66 20 72 5b 50 31 5d 20  .**.** if r[P1] 
30d80 69 73 20 7a 65 72 6f 20 6f 72 20 6e 65 67 61 74  is zero or negat
30d90 69 76 65 2c 20 74 68 61 74 20 6d 65 61 6e 73 20  ive, that means 
30da0 74 68 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49  there is no LIMI
30db0 54 0a 2a 2a 20 61 6e 64 20 72 5b 50 32 5d 20 69  T.** and r[P2] i
30dc0 73 20 73 65 74 20 74 6f 20 2d 31 2e 20 0a 2a 2a  s set to -1. .**
30dd0 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 72  .** Otherwise, r
30de0 5b 50 32 5d 20 69 73 20 73 65 74 20 74 6f 20 74  [P2] is set to t
30df0 68 65 20 73 75 6d 20 6f 66 20 72 5b 50 31 5d 20  he sum of r[P1] 
30e00 61 6e 64 20 72 5b 50 33 5d 2e 0a 2a 2f 0a 63 61  and r[P3]..*/.ca
30e10 73 65 20 4f 50 5f 4f 66 66 73 65 74 4c 69 6d 69  se OP_OffsetLimi
30e20 74 3a 20 7b 20 20 20 20 2f 2a 20 69 6e 31 2c 20  t: {    /* in1, 
30e30 6f 75 74 32 2c 20 69 6e 33 20 2a 2f 0a 20 20 70  out2, in3 */.  p
30e40 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
30e50 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26  >p1];.  pIn3 = &
30e60 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
30e70 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
30e80 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
30e90 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
30ea0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
30eb0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  );.  assert( pIn
30ec0 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  3->flags & MEM_I
30ed0 6e 74 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  nt );.  pOut->u.
30ee0 69 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3c 3d 30  i = pIn1->u.i<=0
30ef0 20 3f 20 2d 31 20 3a 20 70 49 6e 31 2d 3e 75 2e   ? -1 : pIn1->u.
30f00 69 2b 28 70 49 6e 33 2d 3e 75 2e 69 3e 30 3f 70  i+(pIn3->u.i>0?p
30f10 49 6e 33 2d 3e 75 2e 69 3a 30 29 3b 0a 20 20 62  In3->u.i:0);.  b
30f20 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
30f30 64 65 3a 20 49 66 4e 6f 74 5a 65 72 6f 20 50 31  de: IfNotZero P1
30f40 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
30f50 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
30f60 21 3d 30 20 74 68 65 6e 20 72 5b 50 31 5d 2d 3d  !=0 then r[P1]-=
30f70 50 33 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  P3, goto P2.**.*
30f80 2a 20 52 65 67 69 73 74 65 72 20 50 31 20 6d 75  * Register P1 mu
30f90 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  st contain an in
30fa0 74 65 67 65 72 2e 20 20 49 66 20 74 68 65 20 63  teger.  If the c
30fb0 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
30fc0 65 72 20 50 31 20 69 73 0a 2a 2a 20 69 6e 69 74  er P1 is.** init
30fd0 69 61 6c 6c 79 20 6e 6f 6e 7a 65 72 6f 2c 20 74  ially nonzero, t
30fe0 68 65 6e 20 73 75 62 74 72 61 63 74 20 50 33 20  hen subtract P3 
30ff0 66 72 6f 6d 20 74 68 65 20 76 61 6c 75 65 20 69  from the value i
31000 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
31010 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 50 32 2e  d.** jump to P2.
31020 20 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31    If register P1
31030 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 7a 65   is initially ze
31040 72 6f 2c 20 6c 65 61 76 65 20 69 74 20 75 6e 63  ro, leave it unc
31050 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 66 61  hanged.** and fa
31060 6c 6c 20 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a 63  ll through..*/.c
31070 61 73 65 20 4f 50 5f 49 66 4e 6f 74 5a 65 72 6f  ase OP_IfNotZero
31080 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
31090 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
310a0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
310b0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
310c0 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
310d0 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  t );.  VdbeBranc
310e0 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69  hTaken(pIn1->u.i
310f0 3c 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49  <0, 2);.  if( pI
31100 6e 31 2d 3e 75 2e 69 20 29 7b 0a 20 20 20 20 20  n1->u.i ){.     
31110 70 49 6e 31 2d 3e 75 2e 69 20 2d 3d 20 70 4f 70  pIn1->u.i -= pOp
31120 2d 3e 70 33 3b 0a 20 20 20 20 20 67 6f 74 6f 20  ->p3;.     goto 
31130 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
31140 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
31150 70 63 6f 64 65 3a 20 44 65 63 72 4a 75 6d 70 5a  pcode: DecrJumpZ
31160 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ero P1 P2 * * *.
31170 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
31180 28 2d 2d 72 5b 50 31 5d 29 3d 3d 30 20 67 6f 74  (--r[P1])==0 got
31190 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  o P2.**.** Regis
311a0 74 65 72 20 50 31 20 6d 75 73 74 20 68 6f 6c 64  ter P1 must hold
311b0 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 44 65   an integer.  De
311c0 63 72 65 6d 65 6e 74 20 74 68 65 20 76 61 6c 75  crement the valu
311d0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
311e0 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  .** then jump to
311f0 20 50 32 20 69 66 20 74 68 65 20 6e 65 77 20 76   P2 if the new v
31200 61 6c 75 65 20 69 73 20 65 78 61 63 74 6c 79 20  alue is exactly 
31210 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  zero..*/.case OP
31220 5f 44 65 63 72 4a 75 6d 70 5a 65 72 6f 3a 20 7b  _DecrJumpZero: {
31230 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
31240 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
31250 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
31260 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
31270 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
31280 20 20 70 49 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a 20    pIn1->u.i--;. 
31290 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
312a0 28 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32  (pIn1->u.i==0, 2
312b0 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75  );.  if( pIn1->u
312c0 2e 69 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d  .i==0 ) goto jum
312d0 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b  p_to_p2;.  break
312e0 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ;.}.../* Opcode:
312f0 20 41 67 67 53 74 65 70 30 20 2a 20 50 32 20 50   AggStep0 * P2 P
31300 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
31310 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d  sis: accum=r[P3]
31320 20 73 74 65 70 28 72 5b 50 32 40 50 35 5d 29 0a   step(r[P2@P5]).
31330 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68  **.** Execute th
31340 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20  e step function 
31350 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65  for an aggregate
31360 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69  .  The.** functi
31370 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75 6d 65  on has P5 argume
31380 6e 74 73 2e 20 20 20 50 34 20 69 73 20 61 20 70  nts.   P4 is a p
31390 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75  ointer to the Fu
313a0 6e 63 44 65 66 0a 2a 2a 20 73 74 72 75 63 74 75  ncDef.** structu
313b0 72 65 20 74 68 61 74 20 73 70 65 63 69 66 69 65  re that specifie
313c0 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20  s the function. 
313d0 20 52 65 67 69 73 74 65 72 20 50 33 20 69 73 20   Register P3 is 
313e0 74 68 65 0a 2a 2a 20 61 63 63 75 6d 75 6c 61 74  the.** accumulat
313f0 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35  or..**.** The P5
31400 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74   arguments are t
31410 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74  aken from regist
31420 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a  er P2 and its.**
31430 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a   successors..*/.
31440 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 53 74  /* Opcode: AggSt
31450 65 70 20 2a 20 50 32 20 50 33 20 50 34 20 50 35  ep * P2 P3 P4 P5
31460 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63  .** Synopsis: ac
31470 63 75 6d 3d 72 5b 50 33 5d 20 73 74 65 70 28 72  cum=r[P3] step(r
31480 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45  [P2@P5]).**.** E
31490 78 65 63 75 74 65 20 74 68 65 20 73 74 65 70 20  xecute the step 
314a0 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20  function for an 
314b0 61 67 67 72 65 67 61 74 65 2e 20 20 54 68 65 0a  aggregate.  The.
314c0 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20  ** function has 
314d0 50 35 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 20  P5 arguments.   
314e0 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
314f0 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f  to an sqlite3_co
31500 6e 74 65 78 74 0a 2a 2a 20 6f 62 6a 65 63 74 20  ntext.** object 
31510 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20  that is used to 
31520 72 75 6e 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  run the function
31530 2e 20 20 52 65 67 69 73 74 65 72 20 50 33 20 69  .  Register P3 i
31540 73 0a 2a 2a 20 61 73 20 74 68 65 20 61 63 63 75  s.** as the accu
31550 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54  mulator..**.** T
31560 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20  he P5 arguments 
31570 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72  are taken from r
31580 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 69  egister P2 and i
31590 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73  ts.** successors
315a0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
315b0 6f 64 65 20 69 73 20 69 6e 69 74 69 61 6c 6c 79  ode is initially
315c0 20 63 6f 64 65 64 20 61 73 20 4f 50 5f 41 67 67   coded as OP_Agg
315d0 53 74 65 70 30 2e 20 20 4f 6e 20 66 69 72 73 74  Step0.  On first
315e0 20 65 76 61 6c 75 61 74 69 6f 6e 2c 0a 2a 2a 20   evaluation,.** 
315f0 74 68 65 20 46 75 6e 63 44 65 66 20 73 74 6f 72  the FuncDef stor
31600 65 64 20 69 6e 20 50 34 20 69 73 20 63 6f 6e 76  ed in P4 is conv
31610 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 73 71  erted into an sq
31620 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 61 6e  lite3_context an
31630 64 0a 2a 2a 20 74 68 65 20 6f 70 63 6f 64 65 20  d.** the opcode 
31640 69 73 20 63 68 61 6e 67 65 64 2e 20 20 49 6e 20  is changed.  In 
31650 74 68 69 73 20 77 61 79 2c 20 74 68 65 20 69 6e  this way, the in
31660 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 20  itialization of 
31670 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63  the.** sqlite3_c
31680 6f 6e 74 65 78 74 20 6f 6e 6c 79 20 68 61 70 70  ontext only happ
31690 65 6e 73 20 6f 6e 63 65 2c 20 69 6e 73 74 65 61  ens once, instea
316a0 64 20 6f 66 20 6f 6e 20 65 61 63 68 20 63 61 6c  d of on each cal
316b0 6c 20 74 6f 20 74 68 65 0a 2a 2a 20 73 74 65 70  l to the.** step
316c0 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61   function..*/.ca
316d0 73 65 20 4f 50 5f 41 67 67 53 74 65 70 30 3a 20  se OP_AggStep0: 
316e0 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 73 71 6c  {.  int n;.  sql
316f0 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43  ite3_context *pC
31700 74 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  tx;..  assert( p
31710 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46  Op->p4type==P4_F
31720 55 4e 43 44 45 46 20 29 3b 0a 20 20 6e 20 3d 20  UNCDEF );.  n = 
31730 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72  pOp->p5;.  asser
31740 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
31750 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
31760 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
31770 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  ) );.  assert( n
31780 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e  ==0 || (pOp->p2>
31790 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d  0 && pOp->p2+n<=
317a0 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
317b0 6e 43 75 72 73 6f 72 29 2b 31 29 20 29 3b 0a 20  nCursor)+1) );. 
317c0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
317d0 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d  <pOp->p2 || pOp-
317e0 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29  >p3>=pOp->p2+n )
317f0 3b 0a 20 20 70 43 74 78 20 3d 20 73 71 6c 69 74  ;.  pCtx = sqlit
31800 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28  e3DbMallocRawNN(
31810 64 62 2c 20 73 69 7a 65 6f 66 28 2a 70 43 74 78  db, sizeof(*pCtx
31820 29 20 2b 20 28 6e 2d 31 29 2a 73 69 7a 65 6f 66  ) + (n-1)*sizeof
31830 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29  (sqlite3_value*)
31840 29 3b 0a 20 20 69 66 28 20 70 43 74 78 3d 3d 30  );.  if( pCtx==0
31850 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
31860 20 20 70 43 74 78 2d 3e 70 4d 65 6d 20 3d 20 30    pCtx->pMem = 0
31870 3b 0a 20 20 70 43 74 78 2d 3e 70 46 75 6e 63 20  ;.  pCtx->pFunc 
31880 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b  = pOp->p4.pFunc;
31890 0a 20 20 70 43 74 78 2d 3e 69 4f 70 20 3d 20 28  .  pCtx->iOp = (
318a0 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b  int)(pOp - aOp);
318b0 0a 20 20 70 43 74 78 2d 3e 70 56 64 62 65 20 3d  .  pCtx->pVdbe =
318c0 20 70 3b 0a 20 20 70 43 74 78 2d 3e 61 72 67 63   p;.  pCtx->argc
318d0 20 3d 20 6e 3b 0a 20 20 70 4f 70 2d 3e 70 34 74   = n;.  pOp->p4t
318e0 79 70 65 20 3d 20 50 34 5f 46 55 4e 43 43 54 58  ype = P4_FUNCCTX
318f0 3b 0a 20 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78  ;.  pOp->p4.pCtx
31900 20 3d 20 70 43 74 78 3b 0a 20 20 70 4f 70 2d 3e   = pCtx;.  pOp->
31910 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 41 67 67 53  opcode = OP_AggS
31920 74 65 70 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  tep;.  /* Fall t
31930 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 41  hrough into OP_A
31940 67 67 53 74 65 70 20 2a 2f 0a 7d 0a 63 61 73 65  ggStep */.}.case
31950 20 4f 50 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20   OP_AggStep: {. 
31960 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74 65   int i;.  sqlite
31970 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b  3_context *pCtx;
31980 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20  .  Mem *pMem;.  
31990 4d 65 6d 20 74 3b 0a 0a 20 20 61 73 73 65 72 74  Mem t;..  assert
319a0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
319b0 34 5f 46 55 4e 43 43 54 58 20 29 3b 0a 20 20 70  4_FUNCCTX );.  p
319c0 43 74 78 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 43  Ctx = pOp->p4.pC
319d0 74 78 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d  tx;.  pMem = &aM
319e0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 0a 20 20  em[pOp->p3];..  
319f0 2f 2a 20 49 66 20 74 68 69 73 20 66 75 6e 63 74  /* If this funct
31a00 69 6f 6e 20 69 73 20 69 6e 73 69 64 65 20 6f 66  ion is inside of
31a10 20 61 20 74 72 69 67 67 65 72 2c 20 74 68 65 20   a trigger, the 
31a20 72 65 67 69 73 74 65 72 20 61 72 72 61 79 20 69  register array i
31a30 6e 20 61 4d 65 6d 5b 5d 0a 20 20 2a 2a 20 6d 69  n aMem[].  ** mi
31a40 67 68 74 20 63 68 61 6e 67 65 20 66 72 6f 6d 20  ght change from 
31a50 6f 6e 65 20 65 76 61 6c 75 61 74 69 6f 6e 20 74  one evaluation t
31a60 6f 20 74 68 65 20 6e 65 78 74 2e 20 20 54 68 65  o the next.  The
31a70 20 6e 65 78 74 20 62 6c 6f 63 6b 20 6f 66 20 63   next block of c
31a80 6f 64 65 0a 20 20 2a 2a 20 63 68 65 63 6b 73 20  ode.  ** checks 
31a90 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 72 65  to see if the re
31aa0 67 69 73 74 65 72 20 61 72 72 61 79 20 68 61 73  gister array has
31ab0 20 63 68 61 6e 67 65 64 2c 20 61 6e 64 20 69 66   changed, and if
31ac0 20 73 6f 20 69 74 0a 20 20 2a 2a 20 72 65 69 6e   so it.  ** rein
31ad0 69 74 69 61 6c 69 7a 65 73 20 74 68 65 20 72 65  itializes the re
31ae0 6c 61 76 61 6e 74 20 70 61 72 74 73 20 6f 66 20  lavant parts of 
31af0 74 68 65 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  the sqlite3_cont
31b00 65 78 74 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20  ext object */.  
31b10 69 66 28 20 70 43 74 78 2d 3e 70 4d 65 6d 20 21  if( pCtx->pMem !
31b20 3d 20 70 4d 65 6d 20 29 7b 0a 20 20 20 20 70 43  = pMem ){.    pC
31b30 74 78 2d 3e 70 4d 65 6d 20 3d 20 70 4d 65 6d 3b  tx->pMem = pMem;
31b40 0a 20 20 20 20 66 6f 72 28 69 3d 70 43 74 78 2d  .    for(i=pCtx-
31b50 3e 61 72 67 63 2d 31 3b 20 69 3e 3d 30 3b 20 69  >argc-1; i>=0; i
31b60 2d 2d 29 20 70 43 74 78 2d 3e 61 72 67 76 5b 69  --) pCtx->argv[i
31b70 5d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  ] = &aMem[pOp->p
31b80 32 2b 69 5d 3b 0a 20 20 7d 0a 0a 23 69 66 64 65  2+i];.  }..#ifde
31b90 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
31ba0 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 43 74 78   for(i=0; i<pCtx
31bb0 2d 3e 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20  ->argc; i++){.  
31bc0 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
31bd0 61 6c 69 64 28 70 43 74 78 2d 3e 61 72 67 76 5b  alid(pCtx->argv[
31be0 69 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53  i]) );.    REGIS
31bf0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
31c00 32 2b 69 2c 20 70 43 74 78 2d 3e 61 72 67 76 5b  2+i, pCtx->argv[
31c10 69 5d 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  i]);.  }.#endif.
31c20 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20  .  pMem->n++;.  
31c30 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
31c40 69 74 28 26 74 2c 20 64 62 2c 20 4d 45 4d 5f 4e  it(&t, db, MEM_N
31c50 75 6c 6c 29 3b 0a 20 20 70 43 74 78 2d 3e 70 4f  ull);.  pCtx->pO
31c60 75 74 20 3d 20 26 74 3b 0a 20 20 70 43 74 78 2d  ut = &t;.  pCtx-
31c70 3e 66 45 72 72 6f 72 4f 72 41 75 78 20 3d 20 30  >fErrorOrAux = 0
31c80 3b 0a 20 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c  ;.  pCtx->skipFl
31c90 61 67 20 3d 20 30 3b 0a 20 20 28 70 43 74 78 2d  ag = 0;.  (pCtx-
31ca0 3e 70 46 75 6e 63 2d 3e 78 53 46 75 6e 63 29 28  >pFunc->xSFunc)(
31cb0 70 43 74 78 2c 70 43 74 78 2d 3e 61 72 67 63 2c  pCtx,pCtx->argc,
31cc0 70 43 74 78 2d 3e 61 72 67 76 29 3b 20 2f 2a 20  pCtx->argv); /* 
31cd0 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32  IMP: R-24505-232
31ce0 33 30 20 2a 2f 0a 20 20 69 66 28 20 70 43 74 78  30 */.  if( pCtx
31cf0 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78 20 29 7b  ->fErrorOrAux ){
31d00 0a 20 20 20 20 69 66 28 20 70 43 74 78 2d 3e 69  .    if( pCtx->i
31d10 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 20 20  sError ){.      
31d20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
31d30 28 70 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65  (p, "%s", sqlite
31d40 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 74 29  3_value_text(&t)
31d50 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 70 43  );.      rc = pC
31d60 74 78 2d 3e 69 73 45 72 72 6f 72 3b 0a 20 20 20  tx->isError;.   
31d70 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64   }.    sqlite3Vd
31d80 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 74 29  beMemRelease(&t)
31d90 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67  ;.    if( rc ) g
31da0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
31db0 5f 65 72 72 6f 72 3b 0a 20 20 7d 65 6c 73 65 7b  _error;.  }else{
31dc0 0a 20 20 20 20 61 73 73 65 72 74 28 20 74 2e 66  .    assert( t.f
31dd0 6c 61 67 73 3d 3d 4d 45 4d 5f 4e 75 6c 6c 20 29  lags==MEM_Null )
31de0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 43 74 78  ;.  }.  if( pCtx
31df0 2d 3e 73 6b 69 70 46 6c 61 67 20 29 7b 0a 20 20  ->skipFlag ){.  
31e00 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31    assert( pOp[-1
31e10 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c  ].opcode==OP_Col
31e20 6c 53 65 71 20 29 3b 0a 20 20 20 20 69 20 3d 20  lSeq );.    i = 
31e30 70 4f 70 5b 2d 31 5d 2e 70 31 3b 0a 20 20 20 20  pOp[-1].p1;.    
31e40 69 66 28 20 69 20 29 20 73 71 6c 69 74 65 33 56  if( i ) sqlite3V
31e50 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26  dbeMemSetInt64(&
31e60 61 4d 65 6d 5b 69 5d 2c 20 31 29 3b 0a 20 20 7d  aMem[i], 1);.  }
31e70 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
31e80 4f 70 63 6f 64 65 3a 20 41 67 67 46 69 6e 61 6c  Opcode: AggFinal
31e90 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
31ea0 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d   Synopsis: accum
31eb0 3d 72 5b 50 31 5d 20 4e 3d 50 32 0a 2a 2a 0a 2a  =r[P1] N=P2.**.*
31ec0 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 66 69  * Execute the fi
31ed0 6e 61 6c 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e  nalizer function
31ee0 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74   for an aggregat
31ef0 65 2e 20 20 50 31 20 69 73 0a 2a 2a 20 74 68 65  e.  P1 is.** the
31f00 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   memory location
31f10 20 74 68 61 74 20 69 73 20 74 68 65 20 61 63 63   that is the acc
31f20 75 6d 75 6c 61 74 6f 72 20 66 6f 72 20 74 68 65  umulator for the
31f30 20 61 67 67 72 65 67 61 74 65 2e 0a 2a 2a 0a 2a   aggregate..**.*
31f40 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62  * P2 is the numb
31f50 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
31f60 74 68 61 74 20 74 68 65 20 73 74 65 70 20 66 75  that the step fu
31f70 6e 63 74 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64  nction takes and
31f80 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
31f90 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44  ter to the FuncD
31fa0 65 66 20 66 6f 72 20 74 68 69 73 20 66 75 6e 63  ef for this func
31fb0 74 69 6f 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a  tion.  The P2.**
31fc0 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74   argument is not
31fd0 20 75 73 65 64 20 62 79 20 74 68 69 73 20 6f 70   used by this op
31fe0 63 6f 64 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c  code.  It is onl
31ff0 79 20 74 68 65 72 65 20 74 6f 20 64 69 73 61 6d  y there to disam
32000 62 69 67 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74  biguate.** funct
32010 69 6f 6e 73 20 74 68 61 74 20 63 61 6e 20 74 61  ions that can ta
32020 6b 65 20 76 61 72 79 69 6e 67 20 6e 75 6d 62 65  ke varying numbe
32030 72 73 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e  rs of arguments.
32040 20 20 54 68 65 0a 2a 2a 20 50 34 20 61 72 67 75    The.** P4 argu
32050 6d 65 6e 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65  ment is only nee
32060 64 65 64 20 66 6f 72 20 74 68 65 20 64 65 67 65  ded for the dege
32070 6e 65 72 61 74 65 20 63 61 73 65 20 77 68 65 72  nerate case wher
32080 65 0a 2a 2a 20 74 68 65 20 73 74 65 70 20 66 75  e.** the step fu
32090 6e 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20 70  nction was not p
320a0 72 65 76 69 6f 75 73 6c 79 20 63 61 6c 6c 65 64  reviously called
320b0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67  ..*/.case OP_Agg
320c0 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a  Final: {.  Mem *
320d0 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20  pMem;.  assert( 
320e0 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
320f0 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p1<=(p->nMem+1
32100 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
32110 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d  ;.  pMem = &aMem
32120 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
32130 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67  ert( (pMem->flag
32140 73 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d  s & ~(MEM_Null|M
32150 45 4d 5f 41 67 67 29 29 3d 3d 30 20 29 3b 0a 20  EM_Agg))==0 );. 
32160 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
32170 65 4d 65 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65  eMemFinalize(pMe
32180 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63  m, pOp->p4.pFunc
32190 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20  );.  if( rc ){. 
321a0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
321b0 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71 6c  ror(p, "%s", sql
321c0 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
321d0 70 4d 65 6d 29 29 3b 0a 20 20 20 20 67 6f 74 6f  pMem));.    goto
321e0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
321f0 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  ror;.  }.  sqlit
32200 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
32210 64 69 6e 67 28 70 4d 65 6d 2c 20 65 6e 63 6f 64  ding(pMem, encod
32220 69 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  ing);.  UPDATE_M
32230 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4d 65 6d  AX_BLOBSIZE(pMem
32240 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
32250 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4d  VdbeMemTooBig(pM
32260 65 6d 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  em) ){.    goto 
32270 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62  too_big;.  }.  b
32280 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  reak;.}..#ifndef
32290 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
322a0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 68 65 63  ./* Opcode: Chec
322b0 6b 70 6f 69 6e 74 20 50 31 20 50 32 20 50 33 20  kpoint P1 P2 P3 
322c0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 70  * *.**.** Checkp
322d0 6f 69 6e 74 20 64 61 74 61 62 61 73 65 20 50 31  oint database P1
322e0 2e 20 54 68 69 73 20 69 73 20 61 20 6e 6f 2d 6f  . This is a no-o
322f0 70 20 69 66 20 50 31 20 69 73 20 6e 6f 74 20 63  p if P1 is not c
32300 75 72 72 65 6e 74 6c 79 20 69 6e 0a 2a 2a 20 57  urrently in.** W
32310 41 4c 20 6d 6f 64 65 2e 20 50 61 72 61 6d 65 74  AL mode. Paramet
32320 65 72 20 50 32 20 69 73 20 6f 6e 65 20 6f 66 20  er P2 is one of 
32330 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
32340 54 5f 50 41 53 53 49 56 45 2c 20 46 55 4c 4c 2c  T_PASSIVE, FULL,
32350 0a 2a 2a 20 52 45 53 54 41 52 54 2c 20 6f 72 20  .** RESTART, or 
32360 54 52 55 4e 43 41 54 45 2e 20 20 57 72 69 74 65  TRUNCATE.  Write
32370 20 31 20 6f 72 20 30 20 69 6e 74 6f 20 6d 65 6d   1 or 0 into mem
32380 5b 50 33 5d 20 69 66 20 74 68 65 20 63 68 65 63  [P3] if the chec
32390 6b 70 6f 69 6e 74 20 72 65 74 75 72 6e 73 0a 2a  kpoint returns.*
323a0 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20 6f 72  * SQLITE_BUSY or
323b0 20 6e 6f 74 2c 20 72 65 73 70 65 63 74 69 76 65   not, respective
323c0 6c 79 2e 20 20 57 72 69 74 65 20 74 68 65 20 6e  ly.  Write the n
323d0 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
323e0 6e 20 74 68 65 0a 2a 2a 20 57 41 4c 20 61 66 74  n the.** WAL aft
323f0 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f 69 6e  er the checkpoin
32400 74 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 31 5d  t into mem[P3+1]
32410 20 61 6e 64 20 74 68 65 20 6e 75 6d 62 65 72 20   and the number 
32420 6f 66 20 70 61 67 65 73 0a 2a 2a 20 69 6e 20 74  of pages.** in t
32430 68 65 20 57 41 4c 20 74 68 61 74 20 68 61 76 65  he WAL that have
32440 20 62 65 65 6e 20 63 68 65 63 6b 70 6f 69 6e 74   been checkpoint
32450 65 64 20 61 66 74 65 72 20 74 68 65 20 63 68 65  ed after the che
32460 63 6b 70 6f 69 6e 74 0a 2a 2a 20 63 6f 6d 70 6c  ckpoint.** compl
32470 65 74 65 73 20 69 6e 74 6f 20 6d 65 6d 5b 50 33  etes into mem[P3
32480 2b 32 5d 2e 20 20 48 6f 77 65 76 65 72 20 6f 6e  +2].  However on
32490 20 61 6e 20 65 72 72 6f 72 2c 20 6d 65 6d 5b 50   an error, mem[P
324a0 33 2b 31 5d 20 61 6e 64 0a 2a 2a 20 6d 65 6d 5b  3+1] and.** mem[
324b0 50 33 2b 32 5d 20 61 72 65 20 69 6e 69 74 69 61  P3+2] are initia
324c0 6c 69 7a 65 64 20 74 6f 20 2d 31 2e 0a 2a 2f 0a  lized to -1..*/.
324d0 63 61 73 65 20 4f 50 5f 43 68 65 63 6b 70 6f 69  case OP_Checkpoi
324e0 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 20 20  nt: {.  int i;  
324f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32500 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
32510 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74  counter */.  int
32520 20 61 52 65 73 5b 33 5d 3b 20 20 20 20 20 20 20   aRes[3];       
32530 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
32540 52 65 73 75 6c 74 73 20 2a 2f 0a 20 20 4d 65 6d  Results */.  Mem
32550 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *pMem;         
32560 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
32570 57 72 69 74 65 20 72 65 73 75 6c 74 73 20 68 65  Write results he
32580 72 65 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28  re */..  assert(
32590 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
325a0 29 3b 0a 20 20 61 52 65 73 5b 30 5d 20 3d 20 30  );.  aRes[0] = 0
325b0 3b 0a 20 20 61 52 65 73 5b 31 5d 20 3d 20 61 52  ;.  aRes[1] = aR
325c0 65 73 5b 32 5d 20 3d 20 2d 31 3b 0a 20 20 61 73  es[2] = -1;.  as
325d0 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 53  sert( pOp->p2==S
325e0 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
325f0 5f 50 41 53 53 49 56 45 0a 20 20 20 20 20 20 20  _PASSIVE.       
32600 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  || pOp->p2==SQLI
32610 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 46 55  TE_CHECKPOINT_FU
32620 4c 4c 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70  LL.       || pOp
32630 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45  ->p2==SQLITE_CHE
32640 43 4b 50 4f 49 4e 54 5f 52 45 53 54 41 52 54 0a  CKPOINT_RESTART.
32650 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70         || pOp->p
32660 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  2==SQLITE_CHECKP
32670 4f 49 4e 54 5f 54 52 55 4e 43 41 54 45 0a 20 20  OINT_TRUNCATE.  
32680 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
32690 33 43 68 65 63 6b 70 6f 69 6e 74 28 64 62 2c 20  3Checkpoint(db, 
326a0 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32  pOp->p1, pOp->p2
326b0 2c 20 26 61 52 65 73 5b 31 5d 2c 20 26 61 52 65  , &aRes[1], &aRe
326c0 73 5b 32 5d 29 3b 0a 20 20 69 66 28 20 72 63 20  s[2]);.  if( rc 
326d0 29 7b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53  ){.    if( rc!=S
326e0 51 4c 49 54 45 5f 42 55 53 59 20 29 20 67 6f 74  QLITE_BUSY ) got
326f0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
32700 72 72 6f 72 3b 0a 20 20 20 20 72 63 20 3d 20 53  rror;.    rc = S
32710 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 61 52  QLITE_OK;.    aR
32720 65 73 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20  es[0] = 1;.  }. 
32730 20 66 6f 72 28 69 3d 30 2c 20 70 4d 65 6d 20 3d   for(i=0, pMem =
32740 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
32750 20 69 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b   i<3; i++, pMem+
32760 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  +){.    sqlite3V
32770 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70  dbeMemSetInt64(p
32780 4d 65 6d 2c 20 28 69 36 34 29 61 52 65 73 5b 69  Mem, (i64)aRes[i
32790 5d 29 3b 0a 20 20 7d 20 20 20 20 0a 20 20 62 72  ]);.  }    .  br
327a0 65 61 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69 66  eak;.};  .#endif
327b0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
327c0 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 0a 2f 2a 20  _OMIT_PRAGMA./* 
327d0 4f 70 63 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d  Opcode: JournalM
327e0 6f 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ode P1 P2 P3 * *
327f0 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68  .**.** Change th
32800 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f  e journal mode o
32810 66 20 64 61 74 61 62 61 73 65 20 50 31 20 74 6f  f database P1 to
32820 20 50 33 2e 20 50 33 20 6d 75 73 74 20 62 65 20   P3. P3 must be 
32830 6f 6e 65 20 6f 66 20 74 68 65 0a 2a 2a 20 50 41  one of the.** PA
32840 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
32850 58 58 58 20 76 61 6c 75 65 73 2e 20 49 66 20 63  XXX values. If c
32860 68 61 6e 67 69 6e 67 20 62 65 74 77 65 65 6e 20  hanging between 
32870 74 68 65 20 76 61 72 69 6f 75 73 20 72 6f 6c 6c  the various roll
32880 62 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28 64  back.** modes (d
32890 65 6c 65 74 65 2c 20 74 72 75 6e 63 61 74 65 2c  elete, truncate,
328a0 20 70 65 72 73 69 73 74 2c 20 6f 66 66 20 61 6e   persist, off an
328b0 64 20 6d 65 6d 6f 72 79 29 2c 20 74 68 69 73 20  d memory), this 
328c0 69 73 20 61 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f  is a simple.** o
328d0 70 65 72 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20  peration. No IO 
328e0 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a 0a  is required..**.
328f0 2a 2a 20 49 66 20 63 68 61 6e 67 69 6e 67 20 69  ** If changing i
32900 6e 74 6f 20 6f 72 20 6f 75 74 20 6f 66 20 57 41  nto or out of WA
32910 4c 20 6d 6f 64 65 20 74 68 65 20 70 72 6f 63 65  L mode the proce
32920 64 75 72 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d  dure is more com
32930 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  plicated..**.** 
32940 57 72 69 74 65 20 61 20 73 74 72 69 6e 67 20 63  Write a string c
32950 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66 69  ontaining the fi
32960 6e 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65  nal journal-mode
32970 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e   to register P2.
32980 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f 75 72  .*/.case OP_Jour
32990 6e 61 6c 4d 6f 64 65 3a 20 7b 20 20 20 20 2f 2a  nalMode: {    /*
329a0 20 6f 75 74 32 20 2a 2f 0a 20 20 42 74 72 65 65   out2 */.  Btree
329b0 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20 20   *pBt;          
329c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 74             /* Bt
329d0 72 65 65 20 74 6f 20 63 68 61 6e 67 65 20 6a 6f  ree to change jo
329e0 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f  urnal mode of */
329f0 0a 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72  .  Pager *pPager
32a00 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
32a10 20 20 20 2f 2a 20 50 61 67 65 72 20 61 73 73 6f     /* Pager asso
32a20 63 69 61 74 65 64 20 77 69 74 68 20 70 42 74 20  ciated with pBt 
32a30 2a 2f 0a 20 20 69 6e 74 20 65 4e 65 77 3b 20 20  */.  int eNew;  
32a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a50 20 20 20 20 20 2f 2a 20 4e 65 77 20 6a 6f 75 72       /* New jour
32a60 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e  nal mode */.  in
32a70 74 20 65 4f 6c 64 3b 20 20 20 20 20 20 20 20 20  t eOld;         
32a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
32a90 20 54 68 65 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c   The old journal
32aa0 20 6d 6f 64 65 20 2a 2f 0a 23 69 66 6e 64 65 66   mode */.#ifndef
32ab0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
32ac0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
32ad0 46 69 6c 65 6e 61 6d 65 3b 20 20 20 20 20 20 20  Filename;       
32ae0 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61     /* Name of da
32af0 74 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72 20  tabase file for 
32b00 70 50 61 67 65 72 20 2a 2f 0a 23 65 6e 64 69 66  pPager */.#endif
32b10 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ..  pOut = out2P
32b20 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
32b30 29 3b 0a 20 20 65 4e 65 77 20 3d 20 70 4f 70 2d  );.  eNew = pOp-
32b40 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 65  >p3;.  assert( e
32b50 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
32b60 41 4c 4d 4f 44 45 5f 44 45 4c 45 54 45 20 0a 20  ALMODE_DELETE . 
32b70 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50        || eNew==P
32b80 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
32b90 5f 54 52 55 4e 43 41 54 45 20 0a 20 20 20 20 20  _TRUNCATE .     
32ba0 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
32bb0 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52  _JOURNALMODE_PER
32bc0 53 49 53 54 20 0a 20 20 20 20 20 20 20 7c 7c 20  SIST .       || 
32bd0 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
32be0 4e 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20 20 20 20  NALMODE_OFF.    
32bf0 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
32c00 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45  R_JOURNALMODE_ME
32c10 4d 4f 52 59 0a 20 20 20 20 20 20 20 7c 7c 20 65  MORY.       || e
32c20 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
32c30 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 20 20  ALMODE_WAL.     
32c40 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
32c50 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45  _JOURNALMODE_QUE
32c60 52 59 0a 20 20 29 3b 0a 20 20 61 73 73 65 72 74  RY.  );.  assert
32c70 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
32c80 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
32c90 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
32ca0 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a  readOnly==0 );..
32cb0 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
32cc0 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20  pOp->p1].pBt;.  
32cd0 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33  pPager = sqlite3
32ce0 42 74 72 65 65 50 61 67 65 72 28 70 42 74 29 3b  BtreePager(pBt);
32cf0 0a 20 20 65 4f 6c 64 20 3d 20 73 71 6c 69 74 65  .  eOld = sqlite
32d00 33 50 61 67 65 72 47 65 74 4a 6f 75 72 6e 61 6c  3PagerGetJournal
32d10 4d 6f 64 65 28 70 50 61 67 65 72 29 3b 0a 20 20  Mode(pPager);.  
32d20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f  if( eNew==PAGER_
32d30 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52  JOURNALMODE_QUER
32d40 59 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b  Y ) eNew = eOld;
32d50 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65 33 50  .  if( !sqlite3P
32d60 61 67 65 72 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f  agerOkToChangeJo
32d70 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72  urnalMode(pPager
32d80 29 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b  ) ) eNew = eOld;
32d90 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
32da0 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 7a 46 69 6c  _OMIT_WAL.  zFil
32db0 65 6e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 50  ename = sqlite3P
32dc0 61 67 65 72 46 69 6c 65 6e 61 6d 65 28 70 50 61  agerFilename(pPa
32dd0 67 65 72 2c 20 31 29 3b 0a 0a 20 20 2f 2a 20 44  ger, 1);..  /* D
32de0 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 61 20 74 72  o not allow a tr
32df0 61 6e 73 69 74 69 6f 6e 20 74 6f 20 6a 6f 75 72  ansition to jour
32e00 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20 66 6f 72  nal_mode=WAL for
32e10 20 61 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a   a database.  **
32e20 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 73 74   in temporary st
32e30 6f 72 61 67 65 20 6f 72 20 69 66 20 74 68 65 20  orage or if the 
32e40 56 46 53 20 64 6f 65 73 20 6e 6f 74 20 73 75 70  VFS does not sup
32e50 70 6f 72 74 20 73 68 61 72 65 64 20 6d 65 6d 6f  port shared memo
32e60 72 79 20 0a 20 20 2a 2f 0a 20 20 69 66 28 20 65  ry .  */.  if( e
32e70 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
32e80 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 26 26  ALMODE_WAL.   &&
32e90 20 28 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33   (sqlite3Strlen3
32ea0 30 28 7a 46 69 6c 65 6e 61 6d 65 29 3d 3d 30 20  0(zFilename)==0 
32eb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 6d            /* Tem
32ec0 70 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20 20 20  p file */.      
32ed0 20 7c 7c 20 21 73 71 6c 69 74 65 33 50 61 67 65   || !sqlite3Page
32ee0 72 57 61 6c 53 75 70 70 6f 72 74 65 64 28 70 50  rWalSupported(pP
32ef0 61 67 65 72 29 29 20 20 20 2f 2a 20 4e 6f 20 73  ager))   /* No s
32f00 68 61 72 65 64 2d 6d 65 6d 6f 72 79 20 73 75 70  hared-memory sup
32f10 70 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a 20 20 20  port */.  ){.   
32f20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20   eNew = eOld;.  
32f30 7d 0a 0a 20 20 69 66 28 20 28 65 4e 65 77 21 3d  }..  if( (eNew!=
32f40 65 4f 6c 64 29 0a 20 20 20 26 26 20 28 65 4f 6c  eOld).   && (eOl
32f50 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  d==PAGER_JOURNAL
32f60 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20 65 4e 65 77  MODE_WAL || eNew
32f70 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
32f80 4f 44 45 5f 57 41 4c 29 0a 20 20 29 7b 0a 20 20  ODE_WAL).  ){.  
32f90 20 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43    if( !db->autoC
32fa0 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e 6e 56 64  ommit || db->nVd
32fb0 62 65 52 65 61 64 3e 31 20 29 7b 0a 20 20 20 20  beRead>1 ){.    
32fc0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
32fd0 52 4f 52 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ROR;.      sqlit
32fe0 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 0a 20  e3VdbeError(p,. 
32ff0 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74           "cannot
33000 20 63 68 61 6e 67 65 20 25 73 20 77 61 6c 20 6d   change %s wal m
33010 6f 64 65 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  ode from within 
33020 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 2c 0a  a transaction",.
33030 20 20 20 20 20 20 20 20 20 20 28 65 4e 65 77 3d            (eNew=
33040 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
33050 44 45 5f 57 41 4c 20 3f 20 22 69 6e 74 6f 22 20  DE_WAL ? "into" 
33060 3a 20 22 6f 75 74 20 6f 66 22 29 0a 20 20 20 20  : "out of").    
33070 20 20 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20    );.      goto 
33080 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
33090 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  or;.    }else{. 
330a0 0a 20 20 20 20 20 20 69 66 28 20 65 4f 6c 64 3d  .      if( eOld=
330b0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
330c0 44 45 5f 57 41 4c 20 29 7b 0a 20 20 20 20 20 20  DE_WAL ){.      
330d0 20 20 2f 2a 20 49 66 20 6c 65 61 76 69 6e 67 20    /* If leaving 
330e0 57 41 4c 20 6d 6f 64 65 2c 20 63 6c 6f 73 65 20  WAL mode, close 
330f0 74 68 65 20 6c 6f 67 20 66 69 6c 65 2e 20 49 66  the log file. If
33100 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65   successful, the
33110 20 63 61 6c 6c 0a 20 20 20 20 20 20 20 20 2a 2a   call.        **
33120 20 74 6f 20 50 61 67 65 72 43 6c 6f 73 65 57 61   to PagerCloseWa
33130 6c 28 29 20 63 68 65 63 6b 70 6f 69 6e 74 73 20  l() checkpoints 
33140 61 6e 64 20 64 65 6c 65 74 65 73 20 74 68 65 20  and deletes the 
33150 77 72 69 74 65 2d 61 68 65 61 64 2d 6c 6f 67 20  write-ahead-log 
33160 0a 20 20 20 20 20 20 20 20 2a 2a 20 66 69 6c 65  .        ** file
33170 2e 20 41 6e 20 45 58 43 4c 55 53 49 56 45 20 6c  . An EXCLUSIVE l
33180 6f 63 6b 20 6d 61 79 20 73 74 69 6c 6c 20 62 65  ock may still be
33190 20 68 65 6c 64 20 6f 6e 20 74 68 65 20 64 61 74   held on the dat
331a0 61 62 61 73 65 20 66 69 6c 65 20 0a 20 20 20 20  abase file .    
331b0 20 20 20 20 2a 2a 20 61 66 74 65 72 20 61 20 73      ** after a s
331c0 75 63 63 65 73 73 66 75 6c 20 72 65 74 75 72 6e  uccessful return
331d0 2e 20 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  . .        */.  
331e0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
331f0 65 33 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28  e3PagerCloseWal(
33200 70 50 61 67 65 72 29 3b 0a 20 20 20 20 20 20 20  pPager);.       
33210 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
33220 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  OK ){.          
33230 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a  sqlite3PagerSetJ
33240 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65  ournalMode(pPage
33250 72 2c 20 65 4e 65 77 29 3b 0a 20 20 20 20 20 20  r, eNew);.      
33260 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 20    }.      }else 
33270 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f  if( eOld==PAGER_
33280 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f  JOURNALMODE_MEMO
33290 52 59 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  RY ){.        /*
332a0 20 43 61 6e 6e 6f 74 20 74 72 61 6e 73 69 74 69   Cannot transiti
332b0 6f 6e 20 64 69 72 65 63 74 6c 79 20 66 72 6f 6d  on directly from
332c0 20 4d 45 4d 4f 52 59 20 74 6f 20 57 41 4c 2e 20   MEMORY to WAL. 
332d0 20 55 73 65 20 6d 6f 64 65 20 4f 46 46 0a 20 20   Use mode OFF.  
332e0 20 20 20 20 20 20 2a 2a 20 61 73 20 61 6e 20 69        ** as an i
332f0 6e 74 65 72 6d 65 64 69 61 74 65 20 2a 2f 0a 20  ntermediate */. 
33300 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61         sqlite3Pa
33310 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64  gerSetJournalMod
33320 65 28 70 50 61 67 65 72 2c 20 50 41 47 45 52 5f  e(pPager, PAGER_
33330 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 29  JOURNALMODE_OFF)
33340 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20  ;.      }.  .   
33350 20 20 20 2f 2a 20 4f 70 65 6e 20 61 20 74 72 61     /* Open a tra
33360 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20  nsaction on the 
33370 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 52  database file. R
33380 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65  egardless of the
33390 20 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 20 20 2a   journal.      *
333a0 2a 20 6d 6f 64 65 2c 20 74 68 69 73 20 74 72 61  * mode, this tra
333b0 6e 73 61 63 74 69 6f 6e 20 61 6c 77 61 79 73 20  nsaction always 
333c0 75 73 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20  uses a rollback 
333d0 6a 6f 75 72 6e 61 6c 2e 0a 20 20 20 20 20 20 2a  journal..      *
333e0 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
333f0 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e  sqlite3BtreeIsIn
33400 54 72 61 6e 73 28 70 42 74 29 3d 3d 30 20 29 3b  Trans(pBt)==0 );
33410 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
33420 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
33430 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
33440 42 74 72 65 65 53 65 74 56 65 72 73 69 6f 6e 28  BtreeSetVersion(
33450 70 42 74 2c 20 28 65 4e 65 77 3d 3d 50 41 47 45  pBt, (eNew==PAGE
33460 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
33470 4c 20 3f 20 32 20 3a 20 31 29 29 3b 0a 20 20 20  L ? 2 : 1));.   
33480 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 23     }.    }.  }.#
33490 65 6e 64 69 66 20 2f 2a 20 69 66 6e 64 65 66 20  endif /* ifndef 
334a0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 20  SQLITE_OMIT_WAL 
334b0 2a 2f 0a 0a 20 20 69 66 28 20 72 63 20 29 20 65  */..  if( rc ) e
334c0 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 65 4e  New = eOld;.  eN
334d0 65 77 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  ew = sqlite3Page
334e0 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28  rSetJournalMode(
334f0 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 0a  pPager, eNew);..
33500 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
33510 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74  MEM_Str|MEM_Stat
33520 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70  ic|MEM_Term;.  p
33530 4f 75 74 2d 3e 7a 20 3d 20 28 63 68 61 72 20 2a  Out->z = (char *
33540 29 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d  )sqlite3JournalM
33550 6f 64 65 6e 61 6d 65 28 65 4e 65 77 29 3b 0a 20  odename(eNew);. 
33560 20 70 4f 75 74 2d 3e 6e 20 3d 20 73 71 6c 69 74   pOut->n = sqlit
33570 65 33 53 74 72 6c 65 6e 33 30 28 70 4f 75 74 2d  e3Strlen30(pOut-
33580 3e 7a 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63  >z);.  pOut->enc
33590 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 0a   = SQLITE_UTF8;.
335a0 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
335b0 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74  ngeEncoding(pOut
335c0 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 69  , encoding);.  i
335d0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
335e0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
335f0 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 23 65 6e  .  break;.};.#en
33600 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
33610 49 54 5f 50 52 41 47 4d 41 20 2a 2f 0a 0a 23 69  IT_PRAGMA */..#i
33620 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
33630 45 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 29 20 26  E_OMIT_VACUUM) &
33640 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
33650 45 5f 4f 4d 49 54 5f 41 54 54 41 43 48 29 0a 2f  E_OMIT_ATTACH)./
33660 2a 20 4f 70 63 6f 64 65 3a 20 56 61 63 75 75 6d  * Opcode: Vacuum
33670 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a   * * * * *.**.**
33680 20 56 61 63 75 75 6d 20 74 68 65 20 65 6e 74 69   Vacuum the enti
33690 72 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68  re database.  Th
336a0 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 63  is opcode will c
336b0 61 75 73 65 20 6f 74 68 65 72 20 76 69 72 74 75  ause other virtu
336c0 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65 73 20 74  al.** machines t
336d0 6f 20 62 65 20 63 72 65 61 74 65 64 20 61 6e 64  o be created and
336e0 20 72 75 6e 2e 20 20 49 74 20 6d 61 79 20 6e 6f   run.  It may no
336f0 74 20 62 65 20 63 61 6c 6c 65 64 20 66 72 6f 6d  t be called from
33700 20 77 69 74 68 69 6e 0a 2a 2a 20 61 20 74 72 61   within.** a tra
33710 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  nsaction..*/.cas
33720 65 20 4f 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20  e OP_Vacuum: {. 
33730 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
33740 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 72 63 20  Only==0 );.  rc 
33750 3d 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75  = sqlite3RunVacu
33760 75 6d 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  um(&p->zErrMsg, 
33770 64 62 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  db);.  if( rc ) 
33780 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
33790 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
337a0 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  ;.}.#endif..#if 
337b0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
337c0 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29  OMIT_AUTOVACUUM)
337d0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 63 72  ./* Opcode: Incr
337e0 56 61 63 75 75 6d 20 50 31 20 50 32 20 2a 20 2a  Vacuum P1 P2 * *
337f0 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d   *.**.** Perform
33800 20 61 20 73 69 6e 67 6c 65 20 73 74 65 70 20 6f   a single step o
33810 66 20 74 68 65 20 69 6e 63 72 65 6d 65 6e 74 61  f the incrementa
33820 6c 20 76 61 63 75 75 6d 20 70 72 6f 63 65 64 75  l vacuum procedu
33830 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20 50 31 20  re on.** the P1 
33840 64 61 74 61 62 61 73 65 2e 20 49 66 20 74 68 65  database. If the
33850 20 76 61 63 75 75 6d 20 68 61 73 20 66 69 6e 69   vacuum has fini
33860 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f 20 69 6e  shed, jump to in
33870 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e  struction.** P2.
33880 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c   Otherwise, fall
33890 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
338a0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
338b0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 63  ..*/.case OP_Inc
338c0 72 56 61 63 75 75 6d 3a 20 7b 20 20 20 20 20 20  rVacuum: {      
338d0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 42    /* jump */.  B
338e0 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73  tree *pBt;..  as
338f0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
33900 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
33910 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
33920 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
33930 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70  treeMask, pOp->p
33940 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  1) );.  assert( 
33950 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
33960 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44  ;.  pBt = db->aD
33970 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a  b[pOp->p1].pBt;.
33980 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
33990 72 65 65 49 6e 63 72 56 61 63 75 75 6d 28 70 42  reeIncrVacuum(pB
339a0 74 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  t);.  VdbeBranch
339b0 54 61 6b 65 6e 28 72 63 3d 3d 53 51 4c 49 54 45  Taken(rc==SQLITE
339c0 5f 44 4f 4e 45 2c 32 29 3b 0a 20 20 69 66 28 20  _DONE,2);.  if( 
339d0 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20 72 63  rc ){.    if( rc
339e0 21 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 20  !=SQLITE_DONE ) 
339f0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
33a00 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 72 63 20  o_error;.    rc 
33a10 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20  = SQLITE_OK;.   
33a20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
33a30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
33a40 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f  .#endif../* Opco
33a50 64 65 3a 20 45 78 70 69 72 65 20 50 31 20 2a 20  de: Expire P1 * 
33a60 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73  * * *.**.** Caus
33a70 65 20 70 72 65 63 6f 6d 70 69 6c 65 64 20 73 74  e precompiled st
33a80 61 74 65 6d 65 6e 74 73 20 74 6f 20 65 78 70 69  atements to expi
33a90 72 65 2e 20 20 57 68 65 6e 20 61 6e 20 65 78 70  re.  When an exp
33aa0 69 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a  ired statement.*
33ab0 2a 20 69 73 20 65 78 65 63 75 74 65 64 20 75 73  * is executed us
33ac0 69 6e 67 20 73 71 6c 69 74 65 33 5f 73 74 65 70  ing sqlite3_step
33ad0 28 29 20 69 74 20 77 69 6c 6c 20 65 69 74 68 65  () it will eithe
33ae0 72 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a  r automatically.
33af0 2a 2a 20 72 65 70 72 65 70 61 72 65 20 69 74 73  ** reprepare its
33b00 65 6c 66 20 28 69 66 20 69 74 20 77 61 73 20 6f  elf (if it was o
33b10 72 69 67 69 6e 61 6c 6c 79 20 63 72 65 61 74 65  riginally create
33b20 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f  d using sqlite3_
33b30 70 72 65 70 61 72 65 5f 76 32 28 29 29 0a 2a 2a  prepare_v2()).**
33b40 20 6f 72 20 69 74 20 77 69 6c 6c 20 66 61 69 6c   or it will fail
33b50 20 77 69 74 68 20 53 51 4c 49 54 45 5f 53 43 48   with SQLITE_SCH
33b60 45 4d 41 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50  EMA..** .** If P
33b70 31 20 69 73 20 30 2c 20 74 68 65 6e 20 61 6c 6c  1 is 0, then all
33b80 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
33b90 62 65 63 6f 6d 65 20 65 78 70 69 72 65 64 2e 20  become expired. 
33ba0 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P1 is non-zer
33bb0 6f 2c 0a 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79 20  o,.** then only 
33bc0 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 65 78  the currently ex
33bd0 65 63 75 74 69 6e 67 20 73 74 61 74 65 6d 65 6e  ecuting statemen
33be0 74 20 69 73 20 65 78 70 69 72 65 64 2e 0a 2a 2f  t is expired..*/
33bf0 0a 63 61 73 65 20 4f 50 5f 45 78 70 69 72 65 3a  .case OP_Expire:
33c00 20 7b 0a 20 20 69 66 28 20 21 70 4f 70 2d 3e 70   {.  if( !pOp->p
33c10 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  1 ){.    sqlite3
33c20 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74  ExpirePreparedSt
33c30 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20  atements(db);.  
33c40 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 65 78  }else{.    p->ex
33c50 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20  pired = 1;.  }. 
33c60 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64   break;.}..#ifnd
33c70 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
33c80 48 41 52 45 44 5f 43 41 43 48 45 0a 2f 2a 20 4f  HARED_CACHE./* O
33c90 70 63 6f 64 65 3a 20 54 61 62 6c 65 4c 6f 63 6b  pcode: TableLock
33ca0 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
33cb0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 44 62 3d  * Synopsis: iDb=
33cc0 50 31 20 72 6f 6f 74 3d 50 32 20 77 72 69 74 65  P1 root=P2 write
33cd0 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 62 74 61 69 6e  =P3.**.** Obtain
33ce0 20 61 20 6c 6f 63 6b 20 6f 6e 20 61 20 70 61 72   a lock on a par
33cf0 74 69 63 75 6c 61 72 20 74 61 62 6c 65 2e 20 54  ticular table. T
33d00 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
33d10 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65  is only used whe
33d20 6e 0a 2a 2a 20 74 68 65 20 73 68 61 72 65 64 2d  n.** the shared-
33d30 63 61 63 68 65 20 66 65 61 74 75 72 65 20 69 73  cache feature is
33d40 20 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a   enabled. .**.**
33d50 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78   P1 is the index
33d60 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
33d70 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b   in sqlite3.aDb[
33d80 5d 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  ] of the databas
33d90 65 0a 2a 2a 20 6f 6e 20 77 68 69 63 68 20 74 68  e.** on which th
33da0 65 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72  e lock is acquir
33db0 65 64 2e 20 20 41 20 72 65 61 64 6c 6f 63 6b 20  ed.  A readlock 
33dc0 69 73 20 6f 62 74 61 69 6e 65 64 20 69 66 20 50  is obtained if P
33dd0 33 3d 3d 30 20 6f 72 0a 2a 2a 20 61 20 77 72 69  3==0 or.** a wri
33de0 74 65 20 6c 6f 63 6b 20 69 66 20 50 33 3d 3d 31  te lock if P3==1
33df0 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74 61  ..**.** P2 conta
33e00 69 6e 73 20 74 68 65 20 72 6f 6f 74 2d 70 61 67  ins the root-pag
33e10 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
33e20 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34  o lock..**.** P4
33e30 20 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e   contains a poin
33e40 74 65 72 20 74 6f 20 74 68 65 20 6e 61 6d 65 20  ter to the name 
33e50 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  of the table bei
33e60 6e 67 20 6c 6f 63 6b 65 64 2e 20 54 68 69 73 20  ng locked. This 
33e70 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64 20  is only.** used 
33e80 74 6f 20 67 65 6e 65 72 61 74 65 20 61 6e 20 65  to generate an e
33e90 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69 66 20  rror message if 
33ea0 74 68 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20  the lock cannot 
33eb0 62 65 20 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a  be obtained..*/.
33ec0 63 61 73 65 20 4f 50 5f 54 61 62 6c 65 4c 6f 63  case OP_TableLoc
33ed0 6b 3a 20 7b 0a 20 20 75 38 20 69 73 57 72 69 74  k: {.  u8 isWrit
33ee0 65 4c 6f 63 6b 20 3d 20 28 75 38 29 70 4f 70 2d  eLock = (u8)pOp-
33ef0 3e 70 33 3b 0a 20 20 69 66 28 20 69 73 57 72 69  >p3;.  if( isWri
33f00 74 65 4c 6f 63 6b 20 7c 7c 20 30 3d 3d 28 64 62  teLock || 0==(db
33f10 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 52  ->flags&SQLITE_R
33f20 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 29 20  eadUncommitted) 
33f30 29 7b 0a 20 20 20 20 69 6e 74 20 70 31 20 3d 20  ){.    int p1 = 
33f40 70 4f 70 2d 3e 70 31 3b 20 0a 20 20 20 20 61 73  pOp->p1; .    as
33f50 73 65 72 74 28 20 70 31 3e 3d 30 20 26 26 20 70  sert( p1>=0 && p
33f60 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 20  1<db->nDb );.   
33f70 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
33f80 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
33f90 2c 20 70 31 29 20 29 3b 0a 20 20 20 20 61 73 73  , p1) );.    ass
33fa0 65 72 74 28 20 69 73 57 72 69 74 65 4c 6f 63 6b  ert( isWriteLock
33fb0 3d 3d 30 20 7c 7c 20 69 73 57 72 69 74 65 4c 6f  ==0 || isWriteLo
33fc0 63 6b 3d 3d 31 20 29 3b 0a 20 20 20 20 72 63 20  ck==1 );.    rc 
33fd0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 6f  = sqlite3BtreeLo
33fe0 63 6b 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b  ckTable(db->aDb[
33ff0 70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 32  p1].pBt, pOp->p2
34000 2c 20 69 73 57 72 69 74 65 4c 6f 63 6b 29 3b 0a  , isWriteLock);.
34010 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20      if( rc ){.  
34020 20 20 20 20 69 66 28 20 28 72 63 26 30 78 46 46      if( (rc&0xFF
34030 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  )==SQLITE_LOCKED
34040 20 29 7b 0a 20 20 20 20 20 20 20 20 63 6f 6e 73   ){.        cons
34050 74 20 63 68 61 72 20 2a 7a 20 3d 20 70 4f 70 2d  t char *z = pOp-
34060 3e 70 34 2e 7a 3b 0a 20 20 20 20 20 20 20 20 73  >p4.z;.        s
34070 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
34080 70 2c 20 22 64 61 74 61 62 61 73 65 20 74 61 62  p, "database tab
34090 6c 65 20 69 73 20 6c 6f 63 6b 65 64 3a 20 25 73  le is locked: %s
340a0 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20 7d 0a 20  ", z);.      }. 
340b0 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
340c0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
340d0 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
340e0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
340f0 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
34100 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  CACHE */..#ifnde
34110 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
34120 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
34130 63 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a 20 2a  code: VBegin * *
34140 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
34150 20 6d 61 79 20 62 65 20 61 20 70 6f 69 6e 74 65   may be a pointe
34160 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f  r to an sqlite3_
34170 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 20  vtab structure. 
34180 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68 65 20  If so, call the 
34190 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74 68 6f  .** xBegin metho
341a0 64 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65  d for that table
341b0 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68  ..**.** Also, wh
341c0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 50 34 20  ether or not P4 
341d0 69 73 20 73 65 74 2c 20 63 68 65 63 6b 20 74 68  is set, check th
341e0 61 74 20 74 68 69 73 20 69 73 20 6e 6f 74 20 62  at this is not b
341f0 65 69 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d  eing called from
34200 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 63 61 6c  .** within a cal
34210 6c 62 61 63 6b 20 74 6f 20 61 20 76 69 72 74 75  lback to a virtu
34220 61 6c 20 74 61 62 6c 65 20 78 53 79 6e 63 28 29  al table xSync()
34230 20 6d 65 74 68 6f 64 2e 20 49 66 20 69 74 20 69   method. If it i
34240 73 2c 20 74 68 65 20 65 72 72 6f 72 0a 2a 2a 20  s, the error.** 
34250 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 65 74  code will be set
34260 20 74 6f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45   to SQLITE_LOCKE
34270 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 42  D..*/.case OP_VB
34280 65 67 69 6e 3a 20 7b 0a 20 20 56 54 61 62 6c 65  egin: {.  VTable
34290 20 2a 70 56 54 61 62 3b 0a 20 20 70 56 54 61 62   *pVTab;.  pVTab
342a0 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62   = pOp->p4.pVtab
342b0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
342c0 56 74 61 62 42 65 67 69 6e 28 64 62 2c 20 70 56  VtabBegin(db, pV
342d0 54 61 62 29 3b 0a 20 20 69 66 28 20 70 56 54 61  Tab);.  if( pVTa
342e0 62 20 29 20 73 71 6c 69 74 65 33 56 74 61 62 49  b ) sqlite3VtabI
342f0 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
34300 56 54 61 62 2d 3e 70 56 74 61 62 29 3b 0a 20 20  VTab->pVtab);.  
34310 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
34320 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
34330 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
34340 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
34350 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
34360 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
34370 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
34380 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
34390 56 43 72 65 61 74 65 20 50 31 20 50 32 20 2a 20  VCreate P1 P2 * 
343a0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20  * *.**.** P2 is 
343b0 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
343c0 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 20 6f  holds the name o
343d0 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  f a virtual tabl
343e0 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 0a 2a  e in database .*
343f0 2a 20 50 31 2e 20 43 61 6c 6c 20 74 68 65 20 78  * P1. Call the x
34400 43 72 65 61 74 65 20 6d 65 74 68 6f 64 20 66 6f  Create method fo
34410 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f  r that table..*/
34420 0a 63 61 73 65 20 4f 50 5f 56 43 72 65 61 74 65  .case OP_VCreate
34430 3a 20 7b 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b 20  : {.  Mem sMem; 
34440 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20           /* For 
34450 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65 63 6f  storing the reco
34460 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64  rd being decoded
34470 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
34480 20 2a 7a 54 61 62 3b 20 20 2f 2a 20 4e 61 6d 65   *zTab;  /* Name
34490 20 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c 20   of the virtual 
344a0 74 61 62 6c 65 20 2a 2f 0a 0a 20 20 6d 65 6d 73  table */..  mems
344b0 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a  et(&sMem, 0, siz
344c0 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 73 4d  eof(sMem));.  sM
344d0 65 6d 2e 64 62 20 3d 20 64 62 3b 0a 20 20 2f 2a  em.db = db;.  /*
344e0 20 42 65 63 61 75 73 65 20 50 32 20 69 73 20 61   Because P2 is a
344f0 6c 77 61 79 73 20 61 20 73 74 61 74 69 63 20 73  lways a static s
34500 74 72 69 6e 67 2c 20 69 74 20 69 73 20 69 6d 70  tring, it is imp
34510 6f 73 73 69 62 6c 65 20 66 6f 72 20 74 68 65 0a  ossible for the.
34520 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65    ** sqlite3Vdbe
34530 4d 65 6d 43 6f 70 79 28 29 20 74 6f 20 66 61 69  MemCopy() to fai
34540 6c 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28  l */.  assert( (
34550 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2e 66 6c  aMem[pOp->p2].fl
34560 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 29 21 3d  ags & MEM_Str)!=
34570 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  0 );.  assert( (
34580 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2e 66 6c  aMem[pOp->p2].fl
34590 61 67 73 20 26 20 4d 45 4d 5f 53 74 61 74 69 63  ags & MEM_Static
345a0 29 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73  )!=0 );.  rc = s
345b0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6f 70  qlite3VdbeMemCop
345c0 79 28 26 73 4d 65 6d 2c 20 26 61 4d 65 6d 5b 70  y(&sMem, &aMem[p
345d0 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 61 73 73 65  Op->p2]);.  asse
345e0 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
345f0 4b 20 29 3b 0a 20 20 7a 54 61 62 20 3d 20 28 63  K );.  zTab = (c
34600 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74  onst char*)sqlit
34610 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 73  e3_value_text(&s
34620 4d 65 6d 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Mem);.  assert( 
34630 7a 54 61 62 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c  zTab || db->mall
34640 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 69 66  ocFailed );.  if
34650 28 20 7a 54 61 62 20 29 7b 0a 20 20 20 20 72 63  ( zTab ){.    rc
34660 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43 61   = sqlite3VtabCa
34670 6c 6c 43 72 65 61 74 65 28 64 62 2c 20 70 4f 70  llCreate(db, pOp
34680 2d 3e 70 31 2c 20 7a 54 61 62 2c 20 26 70 2d 3e  ->p1, zTab, &p->
34690 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20  zErrMsg);.  }.  
346a0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
346b0 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20  lease(&sMem);.  
346c0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
346d0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
346e0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
346f0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
34700 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
34710 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
34720 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
34730 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
34740 56 44 65 73 74 72 6f 79 20 50 31 20 2a 20 2a 20  VDestroy P1 * * 
34750 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  P4 *.**.** P4 is
34760 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76   the name of a v
34770 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20  irtual table in 
34780 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 43 61  database P1.  Ca
34790 6c 6c 20 74 68 65 20 78 44 65 73 74 72 6f 79 20  ll the xDestroy 
347a0 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20 74 68 61  method.** of tha
347b0 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65  t table..*/.case
347c0 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a 20 7b 0a   OP_VDestroy: {.
347d0 20 20 64 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2b    db->nVDestroy+
347e0 2b 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  +;.  rc = sqlite
347f0 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79  3VtabCallDestroy
34800 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
34810 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 64 62 2d 3e  p->p4.z);.  db->
34820 6e 56 44 65 73 74 72 6f 79 2d 2d 3b 0a 20 20 69  nVDestroy--;.  i
34830 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
34840 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
34850 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
34860 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
34870 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
34880 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
34890 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
348a0 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
348b0 4f 70 65 6e 20 50 31 20 2a 20 2a 20 50 34 20 2a  Open P1 * * P4 *
348c0 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
348d0 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74  ointer to a virt
348e0 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74  ual table object
348f0 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61  , an sqlite3_vta
34900 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20  b structure..** 
34910 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20 6e  P1 is a cursor n
34920 75 6d 62 65 72 2e 20 20 54 68 69 73 20 6f 70 63  umber.  This opc
34930 6f 64 65 20 6f 70 65 6e 73 20 61 20 63 75 72 73  ode opens a curs
34940 6f 72 20 74 6f 20 74 68 65 20 76 69 72 74 75 61  or to the virtua
34950 6c 0a 2a 2a 20 74 61 62 6c 65 20 61 6e 64 20 73  l.** table and s
34960 74 6f 72 65 73 20 74 68 61 74 20 63 75 72 73 6f  tores that curso
34970 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73 65  r in P1..*/.case
34980 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20 56   OP_VOpen: {.  V
34990 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b  dbeCursor *pCur;
349a0 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  .  sqlite3_vtab_
349b0 63 75 72 73 6f 72 20 2a 70 56 43 75 72 3b 0a 20  cursor *pVCur;. 
349c0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
349d0 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71  Vtab;.  const sq
349e0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
349f0 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65 72 74  odule;..  assert
34a00 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
34a10 3b 0a 20 20 70 43 75 72 20 3d 20 30 3b 0a 20 20  ;.  pCur = 0;.  
34a20 70 56 43 75 72 20 3d 20 30 3b 0a 20 20 70 56 74  pVCur = 0;.  pVt
34a30 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74  ab = pOp->p4.pVt
34a40 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 69 66 28  ab->pVtab;.  if(
34a50 20 70 56 74 61 62 3d 3d 30 20 7c 7c 20 4e 45 56   pVtab==0 || NEV
34a60 45 52 28 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c  ER(pVtab->pModul
34a70 65 3d 3d 30 29 20 29 7b 0a 20 20 20 20 72 63 20  e==0) ){.    rc 
34a80 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b  = SQLITE_LOCKED;
34a90 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f  .    goto abort_
34aa0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
34ab0 7d 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56  }.  pModule = pV
34ac0 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
34ad0 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f  rc = pModule->xO
34ae0 70 65 6e 28 70 56 74 61 62 2c 20 26 70 56 43 75  pen(pVtab, &pVCu
34af0 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61  r);.  sqlite3Vta
34b00 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c  bImportErrmsg(p,
34b10 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72   pVtab);.  if( r
34b20 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
34b30 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20  ue_to_error;..  
34b40 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 73 71  /* Initialize sq
34b50 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
34b60 72 20 62 61 73 65 20 63 6c 61 73 73 20 2a 2f 0a  r base class */.
34b70 20 20 70 56 43 75 72 2d 3e 70 56 74 61 62 20 3d    pVCur->pVtab =
34b80 20 70 56 74 61 62 3b 0a 0a 20 20 2f 2a 20 49 6e   pVtab;..  /* In
34b90 69 74 69 61 6c 69 7a 65 20 76 64 62 65 20 63 75  itialize vdbe cu
34ba0 72 73 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a 20  rsor object */. 
34bb0 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65   pCur = allocate
34bc0 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
34bd0 31 2c 20 30 2c 20 2d 31 2c 20 43 55 52 54 59 50  1, 0, -1, CURTYP
34be0 45 5f 56 54 41 42 29 3b 0a 20 20 69 66 28 20 70  E_VTAB);.  if( p
34bf0 43 75 72 20 29 7b 0a 20 20 20 20 70 43 75 72 2d  Cur ){.    pCur-
34c00 3e 75 63 2e 70 56 43 75 72 20 3d 20 70 56 43 75  >uc.pVCur = pVCu
34c10 72 3b 0a 20 20 20 20 70 56 74 61 62 2d 3e 6e 52  r;.    pVtab->nR
34c20 65 66 2b 2b 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ef++;.  }else{. 
34c30 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6d     assert( db->m
34c40 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20  allocFailed );. 
34c50 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f     pModule->xClo
34c60 73 65 28 70 56 43 75 72 29 3b 0a 20 20 20 20 67  se(pVCur);.    g
34c70 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
34c80 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
34c90 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
34ca0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
34cb0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
34cc0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
34cd0 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 46  LE./* Opcode: VF
34ce0 69 6c 74 65 72 20 50 31 20 50 32 20 50 33 20 50  ilter P1 P2 P3 P
34cf0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
34d00 20 69 70 6c 61 6e 3d 72 5b 50 33 5d 20 7a 70 6c   iplan=r[P3] zpl
34d10 61 6e 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50 31  an='P4'.**.** P1
34d20 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f 70 65   is a cursor ope
34d30 6e 65 64 20 75 73 69 6e 67 20 56 4f 70 65 6e 2e  ned using VOpen.
34d40 20 20 50 32 20 69 73 20 61 6e 20 61 64 64 72 65    P2 is an addre
34d50 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66  ss to jump to if
34d60 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65 72 65 64  .** the filtered
34d70 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65   result set is e
34d80 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  mpty..**.** P4 i
34d90 73 20 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72  s either NULL or
34da0 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 77   a string that w
34db0 61 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20  as generated by 
34dc0 74 68 65 20 78 42 65 73 74 49 6e 64 65 78 0a 2a  the xBestIndex.*
34dd0 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20  * method of the 
34de0 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20 69 6e 74  module.  The int
34df0 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74  erpretation of t
34e00 68 65 20 50 34 20 73 74 72 69 6e 67 20 69 73 20  he P4 string is 
34e10 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68 65 20 6d  left.** to the m
34e20 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  odule implementa
34e30 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  tion..**.** This
34e40 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
34e50 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68  the xFilter meth
34e60 6f 64 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61  od on the virtua
34e70 6c 20 74 61 62 6c 65 20 73 70 65 63 69 66 69 65  l table specifie
34e80 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20 54 68 65  d.** by P1.  The
34e90 20 69 6e 74 65 67 65 72 20 71 75 65 72 79 20 70   integer query p
34ea0 6c 61 6e 20 70 61 72 61 6d 65 74 65 72 20 74 6f  lan parameter to
34eb0 20 78 46 69 6c 74 65 72 20 69 73 20 73 74 6f 72   xFilter is stor
34ec0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a  ed in register.*
34ed0 2a 20 50 33 2e 20 52 65 67 69 73 74 65 72 20 50  * P3. Register P
34ee0 33 2b 31 20 73 74 6f 72 65 73 20 74 68 65 20 61  3+1 stores the a
34ef0 72 67 63 20 70 61 72 61 6d 65 74 65 72 20 74 6f  rgc parameter to
34f00 20 62 65 20 70 61 73 73 65 64 20 74 6f 20 74 68   be passed to th
34f10 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20 6d 65 74  e.** xFilter met
34f20 68 6f 64 2e 20 52 65 67 69 73 74 65 72 73 20 50  hod. Registers P
34f30 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67 63 20 61  3+2..P3+1+argc a
34f40 72 65 20 74 68 65 20 61 72 67 63 0a 2a 2a 20 61  re the argc.** a
34f50 64 64 69 74 69 6f 6e 61 6c 20 70 61 72 61 6d 65  dditional parame
34f60 74 65 72 73 20 77 68 69 63 68 20 61 72 65 20 70  ters which are p
34f70 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78 46 69 6c  assed to.** xFil
34f80 74 65 72 20 61 73 20 61 72 67 76 2e 20 52 65 67  ter as argv. Reg
34f90 69 73 74 65 72 20 50 33 2b 32 20 62 65 63 6f 6d  ister P3+2 becom
34fa0 65 73 20 61 72 67 76 5b 30 5d 20 77 68 65 6e 20  es argv[0] when 
34fb0 70 61 73 73 65 64 20 74 6f 20 78 46 69 6c 74 65  passed to xFilte
34fc0 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20  r..**.** A jump 
34fd0 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20 69 66  is made to P2 if
34fe0 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20   the result set 
34ff0 61 66 74 65 72 20 66 69 6c 74 65 72 69 6e 67 20  after filtering 
35000 77 6f 75 6c 64 20 62 65 20 65 6d 70 74 79 2e 0a  would be empty..
35010 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46 69 6c 74  */.case OP_VFilt
35020 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20  er: {   /* jump 
35030 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20  */.  int nArg;. 
35040 20 69 6e 74 20 69 51 75 65 72 79 3b 0a 20 20 63   int iQuery;.  c
35050 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
35060 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20  ule *pModule;.  
35070 4d 65 6d 20 2a 70 51 75 65 72 79 3b 0a 20 20 4d  Mem *pQuery;.  M
35080 65 6d 20 2a 70 41 72 67 63 3b 0a 20 20 73 71 6c  em *pArgc;.  sql
35090 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
350a0 20 2a 70 56 43 75 72 3b 0a 20 20 73 71 6c 69 74   *pVCur;.  sqlit
350b0 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
350c0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
350d0 75 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  ur;.  int res;. 
350e0 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 2a   int i;.  Mem **
350f0 61 70 41 72 67 3b 0a 0a 20 20 70 51 75 65 72 79  apArg;..  pQuery
35100 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
35110 5d 3b 0a 20 20 70 41 72 67 63 20 3d 20 26 70 51  ];.  pArgc = &pQ
35120 75 65 72 79 5b 31 5d 3b 0a 20 20 70 43 75 72 20  uery[1];.  pCur 
35130 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
35140 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 6d  p1];.  assert( m
35150 65 6d 49 73 56 61 6c 69 64 28 70 51 75 65 72 79  emIsValid(pQuery
35160 29 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  ) );.  REGISTER_
35170 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
35180 51 75 65 72 79 29 3b 0a 20 20 61 73 73 65 72 74  Query);.  assert
35190 28 20 70 43 75 72 2d 3e 65 43 75 72 54 79 70 65  ( pCur->eCurType
351a0 3d 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20 29  ==CURTYPE_VTAB )
351b0 3b 0a 20 20 70 56 43 75 72 20 3d 20 70 43 75 72  ;.  pVCur = pCur
351c0 2d 3e 75 63 2e 70 56 43 75 72 3b 0a 20 20 70 56  ->uc.pVCur;.  pV
351d0 74 61 62 20 3d 20 70 56 43 75 72 2d 3e 70 56 74  tab = pVCur->pVt
351e0 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ab;.  pModule = 
351f0 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
35200 0a 20 20 2f 2a 20 47 72 61 62 20 74 68 65 20 69  .  /* Grab the i
35210 6e 64 65 78 20 6e 75 6d 62 65 72 20 61 6e 64 20  ndex number and 
35220 61 72 67 63 20 70 61 72 61 6d 65 74 65 72 73 20  argc parameters 
35230 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70 51  */.  assert( (pQ
35240 75 65 72 79 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  uery->flags&MEM_
35250 49 6e 74 29 21 3d 30 20 26 26 20 70 41 72 67 63  Int)!=0 && pArgc
35260 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74  ->flags==MEM_Int
35270 20 29 3b 0a 20 20 6e 41 72 67 20 3d 20 28 69 6e   );.  nArg = (in
35280 74 29 70 41 72 67 63 2d 3e 75 2e 69 3b 0a 20 20  t)pArgc->u.i;.  
35290 69 51 75 65 72 79 20 3d 20 28 69 6e 74 29 70 51  iQuery = (int)pQ
352a0 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a  uery->u.i;..  /*
352b0 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 46 69 6c   Invoke the xFil
352c0 74 65 72 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20  ter method */.  
352d0 72 65 73 20 3d 20 30 3b 0a 20 20 61 70 41 72 67  res = 0;.  apArg
352e0 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 66   = p->apArg;.  f
352f0 6f 72 28 69 20 3d 20 30 3b 20 69 3c 6e 41 72 67  or(i = 0; i<nArg
35300 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 70 41 72  ; i++){.    apAr
35310 67 5b 69 5d 20 3d 20 26 70 41 72 67 63 5b 69 2b  g[i] = &pArgc[i+
35320 31 5d 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 70  1];.  }.  rc = p
35330 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c 74 65 72 28  Module->xFilter(
35340 70 56 43 75 72 2c 20 69 51 75 65 72 79 2c 20 70  pVCur, iQuery, p
35350 4f 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67 2c 20  Op->p4.z, nArg, 
35360 61 70 41 72 67 29 3b 0a 20 20 73 71 6c 69 74 65  apArg);.  sqlite
35370 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
35380 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69  g(p, pVtab);.  i
35390 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
353a0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
353b0 0a 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65  .  res = pModule
353c0 2d 3e 78 45 6f 66 28 70 56 43 75 72 29 3b 0a 20  ->xEof(pVCur);. 
353d0 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d   pCur->nullRow =
353e0 20 30 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68   0;.  VdbeBranch
353f0 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b  Taken(res!=0,2);
35400 0a 20 20 69 66 28 20 72 65 73 20 29 20 67 6f 74  .  if( res ) got
35410 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
35420 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
35430 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
35440 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
35450 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
35460 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
35470 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f 6c  ./* Opcode: VCol
35480 75 6d 6e 20 50 31 20 50 32 20 50 33 20 2a 20 2a  umn P1 P2 P3 * *
35490 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
354a0 50 33 5d 3d 76 63 6f 6c 75 6d 6e 28 50 32 29 0a  P3]=vcolumn(P2).
354b0 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20  **.** Store the 
354c0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 32 2d  value of the P2-
354d0 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20  th column of.** 
354e0 74 68 65 20 72 6f 77 20 6f 66 20 74 68 65 20 76  the row of the v
354f0 69 72 74 75 61 6c 2d 74 61 62 6c 65 20 74 68 61  irtual-table tha
35500 74 20 74 68 65 20 0a 2a 2a 20 50 31 20 63 75 72  t the .** P1 cur
35510 73 6f 72 20 69 73 20 70 6f 69 6e 74 69 6e 67 20  sor is pointing 
35520 74 6f 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  to into register
35530 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P3..*/.case OP_
35540 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c  VColumn: {.  sql
35550 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
35560 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  ;.  const sqlite
35570 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
35580 65 3b 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b  e;.  Mem *pDest;
35590 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
355a0 78 74 20 73 43 6f 6e 74 65 78 74 3b 0a 0a 20 20  xt sContext;..  
355b0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72  VdbeCursor *pCur
355c0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
355d0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
355e0 70 43 75 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d  pCur->eCurType==
355f0 43 55 52 54 59 50 45 5f 56 54 41 42 20 29 3b 0a  CURTYPE_VTAB );.
35600 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
35610 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
35620 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
35630 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 44  nCursor) );.  pD
35640 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  est = &aMem[pOp-
35650 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p3];.  memAbout
35660 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73  ToChange(p, pDes
35670 74 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e  t);.  if( pCur->
35680 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73  nullRow ){.    s
35690 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
356a0 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20  Null(pDest);.   
356b0 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56   break;.  }.  pV
356c0 74 61 62 20 3d 20 70 43 75 72 2d 3e 75 63 2e 70  tab = pCur->uc.p
356d0 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70  VCur->pVtab;.  p
356e0 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
356f0 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72  pModule;.  asser
35700 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c  t( pModule->xCol
35710 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28  umn );.  memset(
35720 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20 73 69  &sContext, 0, si
35730 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74 29 29 3b  zeof(sContext));
35740 0a 20 20 73 43 6f 6e 74 65 78 74 2e 70 4f 75 74  .  sContext.pOut
35750 20 3d 20 70 44 65 73 74 3b 0a 20 20 4d 65 6d 53   = pDest;.  MemS
35760 65 74 54 79 70 65 46 6c 61 67 28 70 44 65 73 74  etTypeFlag(pDest
35770 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 72  , MEM_Null);.  r
35780 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f  c = pModule->xCo
35790 6c 75 6d 6e 28 70 43 75 72 2d 3e 75 63 2e 70 56  lumn(pCur->uc.pV
357a0 43 75 72 2c 20 26 73 43 6f 6e 74 65 78 74 2c 20  Cur, &sContext, 
357b0 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 73 71 6c 69  pOp->p2);.  sqli
357c0 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
357d0 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  msg(p, pVtab);. 
357e0 20 69 66 28 20 73 43 6f 6e 74 65 78 74 2e 69 73   if( sContext.is
357f0 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 72 63 20  Error ){.    rc 
35800 3d 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72 72  = sContext.isErr
35810 6f 72 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  or;.  }.  sqlite
35820 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
35830 69 6e 67 28 70 44 65 73 74 2c 20 65 6e 63 6f 64  ing(pDest, encod
35840 69 6e 67 29 3b 0a 20 20 52 45 47 49 53 54 45 52  ing);.  REGISTER
35850 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
35860 70 44 65 73 74 29 3b 0a 20 20 55 50 44 41 54 45  pDest);.  UPDATE
35870 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44  _MAX_BLOBSIZE(pD
35880 65 73 74 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c  est);..  if( sql
35890 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
358a0 67 28 70 44 65 73 74 29 20 29 7b 0a 20 20 20 20  g(pDest) ){.    
358b0 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
358c0 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  }.  if( rc ) got
358d0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
358e0 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
358f0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
35900 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
35910 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
35920 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
35930 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
35940 64 65 3a 20 56 4e 65 78 74 20 50 31 20 50 32 20  de: VNext P1 P2 
35950 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61  * * *.**.** Adva
35960 6e 63 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  nce virtual tabl
35970 65 20 50 31 20 74 6f 20 74 68 65 20 6e 65 78 74  e P1 to the next
35980 20 72 6f 77 20 69 6e 20 69 74 73 20 72 65 73 75   row in its resu
35990 6c 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20 6a 75  lt set and.** ju
359a0 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
359b0 6e 20 50 32 2e 20 20 4f 72 2c 20 69 66 20 74 68  n P2.  Or, if th
359c0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
359d0 68 61 73 20 72 65 61 63 68 65 64 0a 2a 2a 20 74  has reached.** t
359e0 68 65 20 65 6e 64 20 6f 66 20 69 74 73 20 72 65  he end of its re
359f0 73 75 6c 74 20 73 65 74 2c 20 74 68 65 6e 20 66  sult set, then f
35a00 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
35a10 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
35a20 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
35a30 56 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20 6a 75  VNext: {   /* ju
35a40 6d 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  mp */.  sqlite3_
35a50 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63  vtab *pVtab;.  c
35a60 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
35a70 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20  ule *pModule;.  
35a80 69 6e 74 20 72 65 73 3b 0a 20 20 56 64 62 65 43  int res;.  VdbeC
35a90 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a 20 20  ursor *pCur;..  
35aa0 72 65 73 20 3d 20 30 3b 0a 20 20 70 43 75 72 20  res = 0;.  pCur 
35ab0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
35ac0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
35ad0 43 75 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43  Cur->eCurType==C
35ae0 55 52 54 59 50 45 5f 56 54 41 42 20 29 3b 0a 20  URTYPE_VTAB );. 
35af0 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52   if( pCur->nullR
35b00 6f 77 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b  ow ){.    break;
35b10 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70  .  }.  pVtab = p
35b20 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 2d 3e 70  Cur->uc.pVCur->p
35b30 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20  Vtab;.  pModule 
35b40 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
35b50 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64  ;.  assert( pMod
35b60 75 6c 65 2d 3e 78 4e 65 78 74 20 29 3b 0a 0a 20  ule->xNext );.. 
35b70 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78   /* Invoke the x
35b80 4e 65 78 74 28 29 20 6d 65 74 68 6f 64 20 6f 66  Next() method of
35b90 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 54 68 65   the module. The
35ba0 72 65 20 69 73 20 6e 6f 20 77 61 79 20 66 6f 72  re is no way for
35bb0 20 74 68 65 0a 20 20 2a 2a 20 75 6e 64 65 72 6c   the.  ** underl
35bc0 79 69 6e 67 20 69 6d 70 6c 65 6d 65 6e 74 61 74  ying implementat
35bd0 69 6f 6e 20 74 6f 20 72 65 74 75 72 6e 20 61 6e  ion to return an
35be0 20 65 72 72 6f 72 20 69 66 20 6f 6e 65 20 6f 63   error if one oc
35bf0 63 75 72 73 20 64 75 72 69 6e 67 0a 20 20 2a 2a  curs during.  **
35c00 20 78 4e 65 78 74 28 29 2e 20 49 6e 73 74 65 61   xNext(). Instea
35c10 64 2c 20 69 66 20 61 6e 20 65 72 72 6f 72 20 6f  d, if an error o
35c20 63 63 75 72 73 2c 20 74 72 75 65 20 69 73 20 72  ccurs, true is r
35c30 65 74 75 72 6e 65 64 20 28 69 6e 64 69 63 61 74  eturned (indicat
35c40 69 6e 67 20 74 68 61 74 20 0a 20 20 2a 2a 20 64  ing that .  ** d
35c50 61 74 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ata is available
35c60 29 20 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20  ) and the error 
35c70 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20 77 68  code returned wh
35c80 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20  en xColumn or.  
35c90 2a 2a 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65  ** some other me
35ca0 74 68 6f 64 20 69 73 20 6e 65 78 74 20 69 6e 76  thod is next inv
35cb0 6f 6b 65 64 20 6f 6e 20 74 68 65 20 73 61 76 65  oked on the save
35cc0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63   virtual table c
35cd0 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 72 63  ursor..  */.  rc
35ce0 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78   = pModule->xNex
35cf0 74 28 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72  t(pCur->uc.pVCur
35d00 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62  );.  sqlite3Vtab
35d10 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20  ImportErrmsg(p, 
35d20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72 63  pVtab);.  if( rc
35d30 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
35d40 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 72 65  e_to_error;.  re
35d50 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f  s = pModule->xEo
35d60 66 28 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72  f(pCur->uc.pVCur
35d70 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
35d80 61 6b 65 6e 28 21 72 65 73 2c 32 29 3b 0a 20 20  aken(!res,2);.  
35d90 69 66 28 20 21 72 65 73 20 29 7b 0a 20 20 20 20  if( !res ){.    
35da0 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 64  /* If there is d
35db0 61 74 61 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20  ata, jump to P2 
35dc0 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  */.    goto jump
35dd0 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b  _to_p2_and_check
35de0 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a  _for_interrupt;.
35df0 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b    }.  goto check
35e00 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a  _for_interrupt;.
35e10 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
35e20 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
35e30 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
35e40 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
35e50 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
35e60 6f 64 65 3a 20 56 52 65 6e 61 6d 65 20 50 31 20  ode: VRename P1 
35e70 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  * * P4 *.**.** P
35e80 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
35e90 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  o a virtual tabl
35ea0 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c  e object, an sql
35eb0 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
35ec0 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ure..** This opc
35ed0 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20  ode invokes the 
35ee0 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 52  corresponding xR
35ef0 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 20 54 68  ename method. Th
35f00 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 72 65  e value.** in re
35f10 67 69 73 74 65 72 20 50 31 20 69 73 20 70 61 73  gister P1 is pas
35f20 73 65 64 20 61 73 20 74 68 65 20 7a 4e 61 6d 65  sed as the zName
35f30 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
35f40 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e   xRename method.
35f50 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 52 65 6e  .*/.case OP_VRen
35f60 61 6d 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  ame: {.  sqlite3
35f70 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
35f80 4d 65 6d 20 2a 70 4e 61 6d 65 3b 0a 0a 20 20 70  Mem *pName;..  p
35f90 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Vtab = pOp->p4.p
35fa0 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70  Vtab->pVtab;.  p
35fb0 4e 61 6d 65 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  Name = &aMem[pOp
35fc0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
35fd0 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d   pVtab->pModule-
35fe0 3e 78 52 65 6e 61 6d 65 20 29 3b 0a 20 20 61 73  >xRename );.  as
35ff0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
36000 28 70 4e 61 6d 65 29 20 29 3b 0a 20 20 61 73 73  (pName) );.  ass
36010 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
36020 3d 3d 30 20 29 3b 0a 20 20 52 45 47 49 53 54 45  ==0 );.  REGISTE
36030 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c  R_TRACE(pOp->p1,
36040 20 70 4e 61 6d 65 29 3b 0a 20 20 61 73 73 65 72   pName);.  asser
36050 74 28 20 70 4e 61 6d 65 2d 3e 66 6c 61 67 73 20  t( pName->flags 
36060 26 20 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 74  & MEM_Str );.  t
36070 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e  estcase( pName->
36080 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38  enc==SQLITE_UTF8
36090 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
360a0 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49  pName->enc==SQLI
360b0 54 45 5f 55 54 46 31 36 42 45 20 29 3b 0a 20 20  TE_UTF16BE );.  
360c0 74 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d  testcase( pName-
360d0 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46  >enc==SQLITE_UTF
360e0 31 36 4c 45 20 29 3b 0a 20 20 72 63 20 3d 20 73  16LE );.  rc = s
360f0 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
36100 45 6e 63 6f 64 69 6e 67 28 70 4e 61 6d 65 2c 20  Encoding(pName, 
36110 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20 20  SQLITE_UTF8);.  
36120 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
36130 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
36140 3b 0a 20 20 72 63 20 3d 20 70 56 74 61 62 2d 3e  ;.  rc = pVtab->
36150 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65  pModule->xRename
36160 28 70 56 74 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a  (pVtab, pName->z
36170 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62  );.  sqlite3Vtab
36180 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20  ImportErrmsg(p, 
36190 70 56 74 61 62 29 3b 0a 20 20 70 2d 3e 65 78 70  pVtab);.  p->exp
361a0 69 72 65 64 20 3d 20 30 3b 0a 20 20 69 66 28 20  ired = 0;.  if( 
361b0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
361c0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
361d0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
361e0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
361f0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
36200 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70  E./* Opcode: VUp
36210 64 61 74 65 20 50 31 20 50 32 20 50 33 20 50 34  date P1 P2 P3 P4
36220 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
36230 20 64 61 74 61 3d 72 5b 50 33 40 50 32 5d 0a 2a   data=r[P3@P2].*
36240 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
36250 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61  nter to a virtua
36260 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  l table object, 
36270 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
36280 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68  structure..** Th
36290 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
362a0 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  s the correspond
362b0 69 6e 67 20 78 55 70 64 61 74 65 20 6d 65 74 68  ing xUpdate meth
362c0 6f 64 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a 2a  od. P2 values.**
362d0 20 61 72 65 20 63 6f 6e 74 69 67 75 6f 75 73 20   are contiguous 
362e0 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74 61  memory cells sta
362f0 72 74 69 6e 67 20 61 74 20 50 33 20 74 6f 20 70  rting at P3 to p
36300 61 73 73 20 74 6f 20 74 68 65 20 78 55 70 64 61  ass to the xUpda
36310 74 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f  te .** invocatio
36320 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 69 6e 20  n. The value in 
36330 72 65 67 69 73 74 65 72 20 28 50 33 2b 50 32 2d  register (P3+P2-
36340 31 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  1) corresponds t
36350 6f 20 74 68 65 20 0a 2a 2a 20 70 32 74 68 20 65  o the .** p2th e
36360 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 61 72  lement of the ar
36370 67 76 20 61 72 72 61 79 20 70 61 73 73 65 64 20  gv array passed 
36380 74 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a  to xUpdate..**.*
36390 2a 20 54 68 65 20 78 55 70 64 61 74 65 20 6d 65  * The xUpdate me
363a0 74 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20 44  thod will do a D
363b0 45 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e 53 45  ELETE or an INSE
363c0 52 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20 54  RT or both..** T
363d0 68 65 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d 65  he argv[0] eleme
363e0 6e 74 20 28 77 68 69 63 68 20 63 6f 72 72 65 73  nt (which corres
363f0 70 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79 20  ponds to memory 
36400 63 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20 74  cell P3).** is t
36410 68 65 20 72 6f 77 69 64 20 6f 66 20 61 20 72 6f  he rowid of a ro
36420 77 20 74 6f 20 64 65 6c 65 74 65 2e 20 20 49 66  w to delete.  If
36430 20 61 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c 4c   argv[0] is NULL
36440 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c   then no .** del
36450 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20 54  etion occurs.  T
36460 68 65 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d 65  he argv[1] eleme
36470 6e 74 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  nt is the rowid 
36480 6f 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72  of the new .** r
36490 6f 77 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65  ow.  This can be
364a0 20 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20 74 68   NULL to have th
364b0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
364c0 73 65 6c 65 63 74 20 74 68 65 20 6e 65 77 20 0a  select the new .
364d0 2a 2a 20 72 6f 77 69 64 20 66 6f 72 20 69 74 73  ** rowid for its
364e0 65 6c 66 2e 20 20 54 68 65 20 73 75 62 73 65 71  elf.  The subseq
364f0 75 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69 6e  uent elements in
36500 20 74 68 65 20 61 72 72 61 79 20 61 72 65 20 0a   the array are .
36510 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66  ** the values of
36520 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
36530 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49  new row..**.** I
36540 66 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f 20  f P2==1 then no 
36550 69 6e 73 65 72 74 20 69 73 20 70 65 72 66 6f 72  insert is perfor
36560 6d 65 64 2e 20 20 61 72 67 76 5b 30 5d 20 69 73  med.  argv[0] is
36570 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a   the rowid of.**
36580 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65   a row to delete
36590 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  ..**.** P1 is a 
365a0 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49 66  boolean flag. If
365b0 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 72   it is set to tr
365c0 75 65 20 61 6e 64 20 74 68 65 20 78 55 70 64 61  ue and the xUpda
365d0 74 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73 75  te call.** is su
365e0 63 63 65 73 73 66 75 6c 2c 20 74 68 65 6e 20 74  ccessful, then t
365f0 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65  he value returne
36600 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6c 61 73  d by sqlite3_las
36610 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
36620 20 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f 20 74   .** is set to t
36630 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
36640 72 6f 77 69 64 20 66 6f 72 20 74 68 65 20 72 6f  rowid for the ro
36650 77 20 6a 75 73 74 20 69 6e 73 65 72 74 65 64 2e  w just inserted.
36660 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73 20 74 68 65  .**.** P5 is the
36670 20 65 72 72 6f 72 20 61 63 74 69 6f 6e 73 20 28   error actions (
36680 4f 45 5f 52 65 70 6c 61 63 65 2c 20 4f 45 5f 46  OE_Replace, OE_F
36690 61 69 6c 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20  ail, OE_Ignore, 
366a0 65 74 63 29 20 74 6f 0a 2a 2a 20 61 70 70 6c 79  etc) to.** apply
366b0 20 69 6e 20 74 68 65 20 63 61 73 65 20 6f 66 20   in the case of 
366c0 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69  a constraint fai
366d0 6c 75 72 65 20 6f 6e 20 61 6e 20 69 6e 73 65 72  lure on an inser
366e0 74 20 6f 72 20 75 70 64 61 74 65 2e 0a 2a 2f 0a  t or update..*/.
366f0 63 61 73 65 20 4f 50 5f 56 55 70 64 61 74 65 3a  case OP_VUpdate:
36700 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61   {.  sqlite3_vta
36710 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73  b *pVtab;.  cons
36720 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
36730 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74   *pModule;.  int
36740 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 3b 0a   nArg;.  int i;.
36750 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 72    sqlite_int64 r
36760 6f 77 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70  owid;.  Mem **ap
36770 41 72 67 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a  Arg;.  Mem *pX;.
36780 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
36790 70 32 3d 3d 31 20 20 20 20 20 20 20 20 7c 7c 20  p2==1        || 
367a0 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 46 61 69 6c  pOp->p5==OE_Fail
367b0 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f     || pOp->p5==O
367c0 45 5f 52 6f 6c 6c 62 61 63 6b 20 0a 20 20 20 20  E_Rollback .    
367d0 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f     || pOp->p5==O
367e0 45 5f 41 62 6f 72 74 20 7c 7c 20 70 4f 70 2d 3e  E_Abort || pOp->
367f0 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 7c 7c  p5==OE_Ignore ||
36800 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70   pOp->p5==OE_Rep
36810 6c 61 63 65 0a 20 20 29 3b 0a 20 20 61 73 73 65  lace.  );.  asse
36820 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
36830 3d 30 20 29 3b 0a 20 20 70 56 74 61 62 20 3d 20  =0 );.  pVtab = 
36840 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70  pOp->p4.pVtab->p
36850 56 74 61 62 3b 0a 20 20 69 66 28 20 70 56 74 61  Vtab;.  if( pVta
36860 62 3d 3d 30 20 7c 7c 20 4e 45 56 45 52 28 70 56  b==0 || NEVER(pV
36870 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3d 3d 30 29  tab->pModule==0)
36880 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
36890 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20  ITE_LOCKED;.    
368a0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
368b0 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70  o_error;.  }.  p
368c0 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
368d0 70 4d 6f 64 75 6c 65 3b 0a 20 20 6e 41 72 67 20  pModule;.  nArg 
368e0 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73  = pOp->p2;.  ass
368f0 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
36900 3d 3d 50 34 5f 56 54 41 42 20 29 3b 0a 20 20 69  ==P4_VTAB );.  i
36910 66 28 20 41 4c 57 41 59 53 28 70 4d 6f 64 75 6c  f( ALWAYS(pModul
36920 65 2d 3e 78 55 70 64 61 74 65 29 20 29 7b 0a 20  e->xUpdate) ){. 
36930 20 20 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66     u8 vtabOnConf
36940 6c 69 63 74 20 3d 20 64 62 2d 3e 76 74 61 62 4f  lict = db->vtabO
36950 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20 61  nConflict;.    a
36960 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b  pArg = p->apArg;
36970 0a 20 20 20 20 70 58 20 3d 20 26 61 4d 65 6d 5b  .    pX = &aMem[
36980 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 66 6f  pOp->p3];.    fo
36990 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69  r(i=0; i<nArg; i
369a0 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  ++){.      asser
369b0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 58  t( memIsValid(pX
369c0 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62  ) );.      memAb
369d0 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
369e0 58 29 3b 0a 20 20 20 20 20 20 61 70 41 72 67 5b  X);.      apArg[
369f0 69 5d 20 3d 20 70 58 3b 0a 20 20 20 20 20 20 70  i] = pX;.      p
36a00 58 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64  X++;.    }.    d
36a10 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63  b->vtabOnConflic
36a20 74 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 20  t = pOp->p5;.   
36a30 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
36a40 55 70 64 61 74 65 28 70 56 74 61 62 2c 20 6e 41  Update(pVtab, nA
36a50 72 67 2c 20 61 70 41 72 67 2c 20 26 72 6f 77 69  rg, apArg, &rowi
36a60 64 29 3b 0a 20 20 20 20 64 62 2d 3e 76 74 61 62  d);.    db->vtab
36a70 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 76 74 61  OnConflict = vta
36a80 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20  bOnConflict;.   
36a90 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
36aa0 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61  rtErrmsg(p, pVta
36ab0 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  b);.    if( rc==
36ac0 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 4f 70  SQLITE_OK && pOp
36ad0 2d 3e 70 31 20 29 7b 0a 20 20 20 20 20 20 61 73  ->p1 ){.      as
36ae0 73 65 72 74 28 20 6e 41 72 67 3e 31 20 26 26 20  sert( nArg>1 && 
36af0 61 70 41 72 67 5b 30 5d 20 26 26 20 28 61 70 41  apArg[0] && (apA
36b00 72 67 5b 30 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d  rg[0]->flags&MEM
36b10 5f 4e 75 6c 6c 29 20 29 3b 0a 20 20 20 20 20 20  _Null) );.      
36b20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  db->lastRowid = 
36b30 6c 61 73 74 52 6f 77 69 64 20 3d 20 72 6f 77 69  lastRowid = rowi
36b40 64 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  d;.    }.    if(
36b50 20 28 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49   (rc&0xff)==SQLI
36b60 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 26 26  TE_CONSTRAINT &&
36b70 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e   pOp->p4.pVtab->
36b80 62 43 6f 6e 73 74 72 61 69 6e 74 20 29 7b 0a 20  bConstraint ){. 
36b90 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35       if( pOp->p5
36ba0 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20  ==OE_Ignore ){. 
36bb0 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
36bc0 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 7d 65 6c  TE_OK;.      }el
36bd0 73 65 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 65  se{.        p->e
36be0 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28 28 70  rrorAction = ((p
36bf0 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61  Op->p5==OE_Repla
36c00 63 65 29 20 3f 20 4f 45 5f 41 62 6f 72 74 20 3a  ce) ? OE_Abort :
36c10 20 70 4f 70 2d 3e 70 35 29 3b 0a 20 20 20 20 20   pOp->p5);.     
36c20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
36c30 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b      p->nChange++
36c40 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
36c50 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
36c60 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
36c70 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
36c80 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
36c90 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
36ca0 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 20 53 51 4c  */..#ifndef  SQL
36cb0 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
36cc0 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65  RAGMAS./* Opcode
36cd0 3a 20 50 61 67 65 63 6f 75 6e 74 20 50 31 20 50  : Pagecount P1 P
36ce0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72  2 * * *.**.** Wr
36cf0 69 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20  ite the current 
36d00 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
36d10 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 20 74  in database P1 t
36d20 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 32  o memory cell P2
36d30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 67  ..*/.case OP_Pag
36d40 65 63 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20  ecount: {       
36d50 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
36d60 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
36d70 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
36d80 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73  .  pOut->u.i = s
36d90 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 50  qlite3BtreeLastP
36da0 61 67 65 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  age(db->aDb[pOp-
36db0 3e 70 31 5d 2e 70 42 74 29 3b 0a 20 20 62 72 65  >p1].pBt);.  bre
36dc0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23  ak;.}.#endif...#
36dd0 69 66 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4f  ifndef  SQLITE_O
36de0 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
36df0 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 78  S./* Opcode: Max
36e00 50 67 63 6e 74 20 50 31 20 50 32 20 50 33 20 2a  Pgcnt P1 P2 P3 *
36e10 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 79 20 74 6f 20   *.**.** Try to 
36e20 73 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  set the maximum 
36e30 70 61 67 65 20 63 6f 75 6e 74 20 66 6f 72 20 64  page count for d
36e40 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 74 68  atabase P1 to th
36e50 65 20 76 61 6c 75 65 20 69 6e 20 50 33 2e 0a 2a  e value in P3..*
36e60 2a 20 44 6f 20 6e 6f 74 20 6c 65 74 20 74 68 65  * Do not let the
36e70 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f   maximum page co
36e80 75 6e 74 20 66 61 6c 6c 20 62 65 6c 6f 77 20 74  unt fall below t
36e90 68 65 20 63 75 72 72 65 6e 74 20 70 61 67 65 20  he current page 
36ea0 63 6f 75 6e 74 20 61 6e 64 0a 2a 2a 20 64 6f 20  count and.** do 
36eb0 6e 6f 74 20 63 68 61 6e 67 65 20 74 68 65 20 6d  not change the m
36ec0 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e  aximum page coun
36ed0 74 20 76 61 6c 75 65 20 69 66 20 50 33 3d 3d 30  t value if P3==0
36ee0 2e 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68  ..**.** Store th
36ef0 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63  e maximum page c
36f00 6f 75 6e 74 20 61 66 74 65 72 20 74 68 65 20 63  ount after the c
36f10 68 61 6e 67 65 20 69 6e 20 72 65 67 69 73 74 65  hange in registe
36f20 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
36f30 5f 4d 61 78 50 67 63 6e 74 3a 20 7b 20 20 20 20  _MaxPgcnt: {    
36f40 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
36f50 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e  */.  unsigned in
36f60 74 20 6e 65 77 4d 61 78 3b 0a 20 20 42 74 72 65  t newMax;.  Btre
36f70 65 20 2a 70 42 74 3b 0a 0a 20 20 70 4f 75 74 20  e *pBt;..  pOut 
36f80 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
36f90 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 42 74 20  (p, pOp);.  pBt 
36fa0 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  = db->aDb[pOp->p
36fb0 31 5d 2e 70 42 74 3b 0a 20 20 6e 65 77 4d 61 78  1].pBt;.  newMax
36fc0 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d   = 0;.  if( pOp-
36fd0 3e 70 33 20 29 7b 0a 20 20 20 20 6e 65 77 4d 61  >p3 ){.    newMa
36fe0 78 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  x = sqlite3Btree
36ff0 4c 61 73 74 50 61 67 65 28 70 42 74 29 3b 0a 20  LastPage(pBt);. 
37000 20 20 20 69 66 28 20 6e 65 77 4d 61 78 20 3c 20     if( newMax < 
37010 28 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70  (unsigned)pOp->p
37020 33 20 29 20 6e 65 77 4d 61 78 20 3d 20 28 75 6e  3 ) newMax = (un
37030 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70 33 3b 0a  signed)pOp->p3;.
37040 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20    }.  pOut->u.i 
37050 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 61  = sqlite3BtreeMa
37060 78 50 61 67 65 43 6f 75 6e 74 28 70 42 74 2c 20  xPageCount(pBt, 
37070 6e 65 77 4d 61 78 29 3b 0a 20 20 62 72 65 61 6b  newMax);.  break
37080 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20  ;.}.#endif.../* 
37090 4f 70 63 6f 64 65 3a 20 49 6e 69 74 20 2a 20 50  Opcode: Init * P
370a0 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
370b0 70 73 69 73 3a 20 20 53 74 61 72 74 20 61 74 20  psis:  Start at 
370c0 50 32 0a 2a 2a 0a 2a 2a 20 50 72 6f 67 72 61 6d  P2.**.** Program
370d0 73 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67  s contain a sing
370e0 6c 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  le instance of t
370f0 68 69 73 20 6f 70 63 6f 64 65 20 61 73 20 74 68  his opcode as th
37100 65 20 76 65 72 79 20 66 69 72 73 74 0a 2a 2a 20  e very first.** 
37110 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  opcode..**.** If
37120 20 74 72 61 63 69 6e 67 20 69 73 20 65 6e 61 62   tracing is enab
37130 6c 65 64 20 28 62 79 20 74 68 65 20 73 71 6c 69  led (by the sqli
37140 74 65 33 5f 74 72 61 63 65 28 29 29 20 69 6e 74  te3_trace()) int
37150 65 72 66 61 63 65 2c 20 74 68 65 6e 0a 2a 2a 20  erface, then.** 
37160 74 68 65 20 55 54 46 2d 38 20 73 74 72 69 6e 67  the UTF-8 string
37170 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 50 34   contained in P4
37180 20 69 73 20 65 6d 69 74 74 65 64 20 6f 6e 20 74   is emitted on t
37190 68 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61 63  he trace callbac
371a0 6b 2e 0a 2a 2a 20 4f 72 20 69 66 20 50 34 20 69  k..** Or if P4 i
371b0 73 20 62 6c 61 6e 6b 2c 20 75 73 65 20 74 68 65  s blank, use the
371c0 20 73 74 72 69 6e 67 20 72 65 74 75 72 6e 65 64   string returned
371d0 20 62 79 20 73 71 6c 69 74 65 33 5f 73 71 6c 28   by sqlite3_sql(
371e0 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69  )..**.** If P2 i
371f0 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 6a 75 6d 70  s not zero, jump
37200 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
37210 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P2..*/.case OP_I
37220 6e 69 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  nit: {          
37230 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 63 68 61  /* jump */.  cha
37240 72 20 2a 7a 54 72 61 63 65 3b 0a 20 20 63 68 61  r *zTrace;.  cha
37250 72 20 2a 7a 3b 0a 0a 23 69 66 6e 64 65 66 20 53  r *z;..#ifndef S
37260 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45  QLITE_OMIT_TRACE
37270 0a 20 20 69 66 28 20 64 62 2d 3e 78 54 72 61 63  .  if( db->xTrac
37280 65 0a 20 20 20 26 26 20 21 70 2d 3e 64 6f 69 6e  e.   && !p->doin
37290 67 52 65 72 75 6e 0a 20 20 20 26 26 20 28 7a 54  gRerun.   && (zT
372a0 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e  race = (pOp->p4.
372b0 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20  z ? pOp->p4.z : 
372c0 70 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a 20 20 29  p->zSql))!=0.  )
372d0 7b 0a 20 20 20 20 7a 20 3d 20 73 71 6c 69 74 65  {.    z = sqlite
372e0 33 56 64 62 65 45 78 70 61 6e 64 53 71 6c 28 70  3VdbeExpandSql(p
372f0 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 20 20 64  , zTrace);.    d
37300 62 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e 70 54  b->xTrace(db->pT
37310 72 61 63 65 41 72 67 2c 20 7a 29 3b 0a 20 20 20  raceArg, z);.   
37320 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
37330 62 2c 20 7a 29 3b 0a 20 20 7d 0a 23 69 66 64 65  b, z);.  }.#ifde
37340 66 20 53 51 4c 49 54 45 5f 55 53 45 5f 46 43 4e  f SQLITE_USE_FCN
37350 54 4c 5f 54 52 41 43 45 0a 20 20 7a 54 72 61 63  TL_TRACE.  zTrac
37360 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f  e = (pOp->p4.z ?
37370 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e   pOp->p4.z : p->
37380 7a 53 71 6c 29 3b 0a 20 20 69 66 28 20 7a 54 72  zSql);.  if( zTr
37390 61 63 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 69  ace ){.    int i
373a0 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  ;.    for(i=0; i
373b0 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a  <db->nDb; i++){.
373c0 20 20 20 20 20 20 69 66 28 20 44 62 4d 61 73 6b        if( DbMask
373d0 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
373e0 6b 2c 20 69 29 3d 3d 30 20 29 20 63 6f 6e 74 69  k, i)==0 ) conti
373f0 6e 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  nue;.      sqlit
37400 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28  e3_file_control(
37410 64 62 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a  db, db->aDb[i].z
37420 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 46 43 4e  Name, SQLITE_FCN
37430 54 4c 5f 54 52 41 43 45 2c 20 7a 54 72 61 63 65  TL_TRACE, zTrace
37440 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e  );.    }.  }.#en
37450 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53  dif /* SQLITE_US
37460 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 20 2a 2f  E_FCNTL_TRACE */
37470 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
37480 45 42 55 47 0a 20 20 69 66 28 20 28 64 62 2d 3e  EBUG.  if( (db->
37490 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 53  flags & SQLITE_S
374a0 71 6c 54 72 61 63 65 29 21 3d 30 0a 20 20 20 26  qlTrace)!=0.   &
374b0 26 20 28 7a 54 72 61 63 65 20 3d 20 28 70 4f 70  & (zTrace = (pOp
374c0 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34  ->p4.z ? pOp->p4
374d0 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29 21 3d  .z : p->zSql))!=
374e0 30 0a 20 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  0.  ){.    sqlit
374f0 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 22 53  e3DebugPrintf("S
37500 51 4c 2d 74 72 61 63 65 3a 20 25 73 5c 6e 22 2c  QL-trace: %s\n",
37510 20 7a 54 72 61 63 65 29 3b 0a 20 20 7d 0a 23 65   zTrace);.  }.#e
37520 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44  ndif /* SQLITE_D
37530 45 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20 2f  EBUG */.#endif /
37540 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  * SQLITE_OMIT_TR
37550 41 43 45 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70  ACE */.  if( pOp
37560 2d 3e 70 32 20 29 20 67 6f 74 6f 20 6a 75 6d 70  ->p2 ) goto jump
37570 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b  _to_p2;.  break;
37580 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .}..#ifdef SQLIT
37590 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f  E_ENABLE_CURSOR_
375a0 48 49 4e 54 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a  HINTS./* Opcode:
375b0 20 43 75 72 73 6f 72 48 69 6e 74 20 50 31 20 2a   CursorHint P1 *
375c0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 72   * P4 *.**.** Pr
375d0 6f 76 69 64 65 20 61 20 68 69 6e 74 20 74 6f 20  ovide a hint to 
375e0 63 75 72 73 6f 72 20 50 31 20 74 68 61 74 20 69  cursor P1 that i
375f0 74 20 6f 6e 6c 79 20 6e 65 65 64 73 20 74 6f 20  t only needs to 
37600 72 65 74 75 72 6e 20 72 6f 77 73 20 74 68 61 74  return rows that
37610 0a 2a 2a 20 73 61 74 69 73 66 79 20 74 68 65 20  .** satisfy the 
37620 45 78 70 72 20 69 6e 20 50 34 2e 20 20 54 4b 5f  Expr in P4.  TK_
37630 52 45 47 49 53 54 45 52 20 74 65 72 6d 73 20 69  REGISTER terms i
37640 6e 20 74 68 65 20 50 34 20 65 78 70 72 65 73 73  n the P4 express
37650 69 6f 6e 20 72 65 66 65 72 0a 2a 2a 20 74 6f 20  ion refer.** to 
37660 76 61 6c 75 65 73 20 63 75 72 72 65 6e 74 6c 79  values currently
37670 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65   held in registe
37680 72 73 2e 20 20 54 4b 5f 43 4f 4c 55 4d 4e 20 74  rs.  TK_COLUMN t
37690 65 72 6d 73 20 69 6e 20 74 68 65 20 50 34 0a 2a  erms in the P4.*
376a0 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 72 65 66  * expression ref
376b0 65 72 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e  er to columns in
376c0 20 74 68 65 20 62 2d 74 72 65 65 20 74 6f 20 77   the b-tree to w
376d0 68 69 63 68 20 63 75 72 73 6f 72 20 50 31 20 69  hich cursor P1 i
376e0 73 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2f 0a 63  s pointing..*/.c
376f0 61 73 65 20 4f 50 5f 43 75 72 73 6f 72 48 69 6e  ase OP_CursorHin
37700 74 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  t: {.  VdbeCurso
37710 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74  r *pC;..  assert
37720 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
37730 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
37740 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
37750 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
37760 45 58 50 52 20 29 3b 0a 20 20 70 43 20 3d 20 70  EXPR );.  pC = p
37770 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
37780 3b 0a 20 20 69 66 28 20 70 43 20 29 7b 0a 20 20  ;.  if( pC ){.  
37790 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
377a0 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
377b0 42 54 52 45 45 20 29 3b 0a 20 20 20 20 73 71 6c  BTREE );.    sql
377c0 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 48  ite3BtreeCursorH
377d0 69 6e 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  int(pC->uc.pCurs
377e0 6f 72 2c 20 42 54 52 45 45 5f 48 49 4e 54 5f 52  or, BTREE_HINT_R
377f0 41 4e 47 45 2c 0a 20 20 20 20 20 20 20 20 20 20  ANGE,.          
37800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37810 20 70 4f 70 2d 3e 70 34 2e 70 45 78 70 72 2c 20   pOp->p4.pExpr, 
37820 61 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 62 72 65  aMem);.  }.  bre
37830 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
37840 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55  SQLITE_ENABLE_CU
37850 52 53 4f 52 5f 48 49 4e 54 53 20 2a 2f 0a 0a 2f  RSOR_HINTS */../
37860 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70 20 2a  * Opcode: Noop *
37870 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44   * * * *.**.** D
37880 6f 20 6e 6f 74 68 69 6e 67 2e 20 20 54 68 69 73  o nothing.  This
37890 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
378a0 6f 66 74 65 6e 20 75 73 65 66 75 6c 20 61 73 20  often useful as 
378b0 61 20 6a 75 6d 70 0a 2a 2a 20 64 65 73 74 69 6e  a jump.** destin
378c0 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20  ation..*/./*.** 
378d0 54 68 65 20 6d 61 67 69 63 20 45 78 70 6c 61 69  The magic Explai
378e0 6e 20 6f 70 63 6f 64 65 20 61 72 65 20 6f 6e 6c  n opcode are onl
378f0 79 20 69 6e 73 65 72 74 65 64 20 77 68 65 6e 20  y inserted when 
37900 65 78 70 6c 61 69 6e 3d 3d 32 20 28 77 68 69 63  explain==2 (whic
37910 68 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79 20 77  h.** is to say w
37920 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20  hen the EXPLAIN 
37930 51 55 45 52 59 20 50 4c 41 4e 20 73 79 6e 74 61  QUERY PLAN synta
37940 78 20 69 73 20 75 73 65 64 2e 29 0a 2a 2a 20 54  x is used.).** T
37950 68 69 73 20 6f 70 63 6f 64 65 20 72 65 63 6f 72  his opcode recor
37960 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  ds information f
37970 72 6f 6d 20 74 68 65 20 6f 70 74 69 6d 69 7a 65  rom the optimize
37980 72 2e 20 20 49 74 20 69 73 20 74 68 65 0a 2a 2a  r.  It is the.**
37990 20 74 68 65 20 73 61 6d 65 20 61 73 20 61 20 6e   the same as a n
379a0 6f 2d 6f 70 2e 20 20 54 68 69 73 20 6f 70 63 6f  o-op.  This opco
379b0 64 65 73 6e 65 76 65 72 20 61 70 70 65 61 72 73  desnever appears
379c0 20 69 6e 20 61 20 72 65 61 6c 20 56 4d 20 70 72   in a real VM pr
379d0 6f 67 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61 75 6c  ogram..*/.defaul
379e0 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a  t: {          /*
379f0 20 54 68 69 73 20 69 73 20 72 65 61 6c 6c 79 20   This is really 
37a00 4f 50 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50 5f 45  OP_Noop and OP_E
37a10 78 70 6c 61 69 6e 20 2a 2f 0a 20 20 61 73 73 65  xplain */.  asse
37a20 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
37a30 3d 4f 50 5f 4e 6f 6f 70 20 7c 7c 20 70 4f 70 2d  =OP_Noop || pOp-
37a40 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c  >opcode==OP_Expl
37a50 61 69 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  ain );.  break;.
37a60 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  }../************
37a70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
37a80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
37a90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
37aa0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
37ab0 2a 0a 2a 2a 20 54 68 65 20 63 61 73 65 73 20 6f  *.** The cases o
37ac0 66 20 74 68 65 20 73 77 69 74 63 68 20 73 74 61  f the switch sta
37ad0 74 65 6d 65 6e 74 20 61 62 6f 76 65 20 74 68 69  tement above thi
37ae0 73 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 61 6c  s line should al
37af0 6c 20 62 65 20 69 6e 64 65 6e 74 65 64 0a 2a 2a  l be indented.**
37b00 20 62 79 20 36 20 73 70 61 63 65 73 2e 20 20 42   by 6 spaces.  B
37b10 75 74 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74  ut the left-most
37b20 20 36 20 73 70 61 63 65 73 20 68 61 76 65 20 62   6 spaces have b
37b30 65 65 6e 20 72 65 6d 6f 76 65 64 20 74 6f 20 69  een removed to i
37b40 6d 70 72 6f 76 65 20 74 68 65 0a 2a 2a 20 72 65  mprove the.** re
37b50 61 64 61 62 69 6c 69 74 79 2e 20 20 46 72 6f 6d  adability.  From
37b60 20 74 68 69 73 20 70 6f 69 6e 74 20 6f 6e 20 64   this point on d
37b70 6f 77 6e 2c 20 74 68 65 20 6e 6f 72 6d 61 6c 20  own, the normal 
37b80 69 6e 64 65 6e 74 61 74 69 6f 6e 20 72 75 6c 65  indentation rule
37b90 73 20 61 72 65 0a 2a 2a 20 72 65 73 74 6f 72 65  s are.** restore
37ba0 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  d..*************
37bb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
37bc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
37bd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
37be0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
37bf0 2f 0a 20 20 20 20 7d 0a 0a 23 69 66 64 65 66 20  /.    }..#ifdef 
37c00 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20  VDBE_PROFILE.   
37c10 20 7b 0a 20 20 20 20 20 20 75 36 34 20 65 6e 64   {.      u64 end
37c20 54 69 6d 65 20 3d 20 73 71 6c 69 74 65 33 48 77  Time = sqlite3Hw
37c30 74 69 6d 65 28 29 3b 0a 20 20 20 20 20 20 69 66  time();.      if
37c40 28 20 65 6e 64 54 69 6d 65 3e 73 74 61 72 74 20  ( endTime>start 
37c50 29 20 70 4f 72 69 67 4f 70 2d 3e 63 79 63 6c 65  ) pOrigOp->cycle
37c60 73 20 2b 3d 20 65 6e 64 54 69 6d 65 20 2d 20 73  s += endTime - s
37c70 74 61 72 74 3b 0a 20 20 20 20 20 20 70 4f 72 69  tart;.      pOri
37c80 67 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 20 20 20 20  gOp->cnt++;.    
37c90 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a  }.#endif..    /*
37ca0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
37cb0 6f 64 65 20 61 64 64 73 20 6e 6f 74 68 69 6e 67  ode adds nothing
37cc0 20 74 6f 20 74 68 65 20 61 63 74 75 61 6c 20 66   to the actual f
37cd0 75 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 20 20 20  unctionality.   
37ce0 20 2a 2a 20 6f 66 20 74 68 65 20 70 72 6f 67 72   ** of the progr
37cf0 61 6d 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20  am.  It is only 
37d00 68 65 72 65 20 66 6f 72 20 74 65 73 74 69 6e 67  here for testing
37d10 20 61 6e 64 20 64 65 62 75 67 67 69 6e 67 2e 0a   and debugging..
37d20 20 20 20 20 2a 2a 20 4f 6e 20 74 68 65 20 6f 74      ** On the ot
37d30 68 65 72 20 68 61 6e 64 2c 20 69 74 20 64 6f 65  her hand, it doe
37d40 73 20 62 75 72 6e 20 43 50 55 20 63 79 63 6c 65  s burn CPU cycle
37d50 73 20 65 76 65 72 79 20 74 69 6d 65 20 74 68 72  s every time thr
37d60 6f 75 67 68 0a 20 20 20 20 2a 2a 20 74 68 65 20  ough.    ** the 
37d70 65 76 61 6c 75 61 74 6f 72 20 6c 6f 6f 70 2e 20  evaluator loop. 
37d80 20 53 6f 20 77 65 20 63 61 6e 20 6c 65 61 76 65   So we can leave
37d90 20 69 74 20 6f 75 74 20 77 68 65 6e 20 4e 44 45   it out when NDE
37da0 42 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a  BUG is defined..
37db0 20 20 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 4e      */.#ifndef N
37dc0 44 45 42 55 47 0a 20 20 20 20 61 73 73 65 72 74  DEBUG.    assert
37dd0 28 20 70 4f 70 3e 3d 26 61 4f 70 5b 2d 31 5d 20  ( pOp>=&aOp[-1] 
37de0 26 26 20 70 4f 70 3c 26 61 4f 70 5b 70 2d 3e 6e  && pOp<&aOp[p->n
37df0 4f 70 2d 31 5d 20 29 3b 0a 0a 23 69 66 64 65 66  Op-1] );..#ifdef
37e00 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
37e10 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20    if( db->flags 
37e20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  & SQLITE_VdbeTra
37e30 63 65 20 29 7b 0a 20 20 20 20 20 20 75 38 20 6f  ce ){.      u8 o
37e40 70 50 72 6f 70 65 72 74 79 20 3d 20 73 71 6c 69  pProperty = sqli
37e50 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74  te3OpcodePropert
37e60 79 5b 70 4f 72 69 67 4f 70 2d 3e 6f 70 63 6f 64  y[pOrigOp->opcod
37e70 65 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  e];.      if( rc
37e80 21 3d 30 20 29 20 70 72 69 6e 74 66 28 22 72 63  !=0 ) printf("rc
37e90 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a 20 20 20 20  =%d\n",rc);.    
37ea0 20 20 69 66 28 20 6f 70 50 72 6f 70 65 72 74 79    if( opProperty
37eb0 20 26 20 28 4f 50 46 4c 47 5f 4f 55 54 32 29 20   & (OPFLG_OUT2) 
37ec0 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69 73  ){.        regis
37ed0 74 65 72 54 72 61 63 65 28 70 4f 72 69 67 4f 70  terTrace(pOrigOp
37ee0 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 72 69  ->p2, &aMem[pOri
37ef0 67 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 20  gOp->p2]);.     
37f00 20 7d 0a 20 20 20 20 20 20 69 66 28 20 6f 70 50   }.      if( opP
37f10 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f  roperty & OPFLG_
37f20 4f 55 54 33 20 29 7b 0a 20 20 20 20 20 20 20 20  OUT3 ){.        
37f30 72 65 67 69 73 74 65 72 54 72 61 63 65 28 70 4f  registerTrace(pO
37f40 72 69 67 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d  rigOp->p3, &aMem
37f50 5b 70 4f 72 69 67 4f 70 2d 3e 70 33 5d 29 3b 0a  [pOrigOp->p3]);.
37f60 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65        }.    }.#e
37f70 6e 64 69 66 20 20 2f 2a 20 53 51 4c 49 54 45 5f  ndif  /* SQLITE_
37f80 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20  DEBUG */.#endif 
37f90 20 2f 2a 20 4e 44 45 42 55 47 20 2a 2f 0a 20 20   /* NDEBUG */.  
37fa0 7d 20 20 2f 2a 20 54 68 65 20 65 6e 64 20 6f 66  }  /* The end of
37fb0 20 74 68 65 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f   the for(;;) loo
37fc0 70 20 74 68 65 20 6c 6f 6f 70 73 20 74 68 72 6f  p the loops thro
37fd0 75 67 68 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a  ugh opcodes */..
37fe0 20 20 2f 2a 20 49 66 20 77 65 20 72 65 61 63 68    /* If we reach
37ff0 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 69 74 20   this point, it 
38000 6d 65 61 6e 73 20 74 68 61 74 20 65 78 65 63 75  means that execu
38010 74 69 6f 6e 20 69 73 20 66 69 6e 69 73 68 65 64  tion is finished
38020 20 77 69 74 68 0a 20 20 2a 2a 20 61 6e 20 65 72   with.  ** an er
38030 72 6f 72 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64  ror of some kind
38040 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65  ..  */.abort_due
38050 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20 20 69 66 28  _to_error:.  if(
38060 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
38070 64 20 29 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  d ) rc = SQLITE_
38080 4e 4f 4d 45 4d 5f 42 4b 50 54 3b 0a 20 20 61 73  NOMEM_BKPT;.  as
38090 73 65 72 74 28 20 72 63 20 29 3b 0a 20 20 69 66  sert( rc );.  if
380a0 28 20 70 2d 3e 7a 45 72 72 4d 73 67 3d 3d 30 20  ( p->zErrMsg==0 
380b0 26 26 20 72 63 21 3d 53 51 4c 49 54 45 5f 49 4f  && rc!=SQLITE_IO
380c0 45 52 52 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20  ERR_NOMEM ){.   
380d0 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
380e0 72 28 70 2c 20 22 25 73 22 2c 20 73 71 6c 69 74  r(p, "%s", sqlit
380f0 65 33 45 72 72 53 74 72 28 72 63 29 29 3b 0a 20  e3ErrStr(rc));. 
38100 20 7d 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b   }.  p->rc = rc;
38110 0a 20 20 73 71 6c 69 74 65 33 53 79 73 74 65 6d  .  sqlite3System
38120 45 72 72 6f 72 28 64 62 2c 20 72 63 29 3b 0a 20  Error(db, rc);. 
38130 20 74 65 73 74 63 61 73 65 28 20 73 71 6c 69 74   testcase( sqlit
38140 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
38150 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 73 71 6c 69  Log!=0 );.  sqli
38160 74 65 33 5f 6c 6f 67 28 72 63 2c 20 22 73 74 61  te3_log(rc, "sta
38170 74 65 6d 65 6e 74 20 61 62 6f 72 74 73 20 61 74  tement aborts at
38180 20 25 64 3a 20 5b 25 73 5d 20 25 73 22 2c 20 0a   %d: [%s] %s", .
38190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
381a0 20 20 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61     (int)(pOp - a
381b0 4f 70 29 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d  Op), p->zSql, p-
381c0 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 73 71 6c  >zErrMsg);.  sql
381d0 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b  ite3VdbeHalt(p);
381e0 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
381f0 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 20  E_IOERR_NOMEM ) 
38200 73 71 6c 69 74 65 33 4f 6f 6d 46 61 75 6c 74 28  sqlite3OomFault(
38210 64 62 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  db);.  rc = SQLI
38220 54 45 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  TE_ERROR;.  if( 
38230 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
38240 6c 74 3e 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  lt>0 ){.    sqli
38250 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d  te3ResetOneSchem
38260 61 28 64 62 2c 20 72 65 73 65 74 53 63 68 65 6d  a(db, resetSchem
38270 61 4f 6e 46 61 75 6c 74 2d 31 29 3b 0a 20 20 7d  aOnFault-1);.  }
38280 0a 0a 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74  ..  /* This is t
38290 68 65 20 6f 6e 6c 79 20 77 61 79 20 6f 7