/ Hex Artifact Content
Login

Artifact d410ca56e272b8e5734f68bce1281942dc7dd5843d7cb3e450e074f35c49a35d:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 20   like that ever 
0520: 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66 64  happens..*/.#ifd
0530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
0540: 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75  # define memAbou
0550: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73  tToChange(P,M) s
0560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
0570: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a  utToChange(P,M).
0580: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d  #else.# define m
0590: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
05a0: 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  P,M).#endif../*.
05b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
05c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
05d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
05e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
05f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0600: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53  ther by the OP_S
0610: 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  eekXX, OP_Next, 
0620: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0630: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0640: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0650: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0660: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0670: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0680: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0690: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
06a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
06b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
06c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
06d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
06e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
06f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0700: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0710: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0720: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0730: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0740: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0750: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0760: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0770: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0780: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0790: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
07a0: 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65    When it reache
07b0: 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69  s zero, the u1.i
07c0: 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20  sInterrupted.** 
07d0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
07e0: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69  ite3 structure i
07f0: 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74  s set in order t
0800: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
0810: 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54  terrupt..**.** T
0820: 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20  his facility is 
0830: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
0840: 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20   purposes only. 
0850: 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e   It does not fun
0860: 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f  ction.** in an o
0870: 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a  rdinary build..*
0880: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0890: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
08a0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
08b0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
08c0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f  .** The next glo
08d0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20  bal variable is 
08e0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68  incremented each
08f0: 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72   type the OP_Sor
0900: 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  t opcode.** is e
0910: 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65  xecuted.  The te
0920: 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73  st procedures us
0930: 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  e this informati
0940: 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  on to make sure 
0950: 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20  that.** sorting 
0960: 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20  is occurring or 
0970: 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74  not occurring at
0980: 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d   appropriate tim
0990: 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  es.   This varia
09a0: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
09b0: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
09c0: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
09f0: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
0a00: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0a10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  int sqlite3_sort
0a20: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0a30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0a40: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0a50: 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73  le records the s
0a60: 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
0a70: 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f  st MEM_Blob.** o
0a80: 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68  r MEM_Str that h
0a90: 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20  as been used by 
0aa0: 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20  a VDBE opcode.  
0ab0: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0ac0: 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20  res.** use this 
0ad0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d  information to m
0ae0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
0af0: 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63  e zero-blob func
0b00: 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20  tionality.** is 
0b10: 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  working correctl
0b20: 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  y.   This variab
0b30: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0b40: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0b50: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0b60: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0b70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0b80: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0b90: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ba0: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0bb0: 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63  size = 0;.static
0bc0: 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42   void updateMaxB
0bd0: 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b  lobsize(Mem *p){
0be0: 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  .  if( (p->flags
0bf0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
0c00: 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e  Blob))!=0 && p->
0c10: 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c  n>sqlite3_max_bl
0c20: 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71  obsize ){.    sq
0c30: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0c40: 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d  ze = p->n;.  }.}
0c50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0c60: 68 69 73 20 6d 61 63 72 6f 20 65 76 61 6c 75 61  his macro evalua
0c70: 74 65 73 20 74 6f 20 74 72 75 65 20 69 66 20 65  tes to true if e
0c80: 69 74 68 65 72 20 74 68 65 20 75 70 64 61 74 65  ither the update
0c90: 20 68 6f 6f 6b 20 6f 72 20 74 68 65 20 70 72 65   hook or the pre
0ca0: 75 70 64 61 74 65 0a 2a 2a 20 68 6f 6f 6b 20 61  update.** hook a
0cb0: 72 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 64  re enabled for d
0cc0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 20  atabase connect 
0cd0: 44 42 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  DB..*/.#ifdef SQ
0ce0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
0cf0: 50 44 41 54 45 5f 48 4f 4f 4b 0a 23 20 64 65 66  PDATE_HOOK.# def
0d00: 69 6e 65 20 48 41 53 5f 55 50 44 41 54 45 5f 48  ine HAS_UPDATE_H
0d10: 4f 4f 4b 28 44 42 29 20 28 28 44 42 29 2d 3e 78  OOK(DB) ((DB)->x
0d20: 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
0d30: 6b 7c 7c 28 44 42 29 2d 3e 78 55 70 64 61 74 65  k||(DB)->xUpdate
0d40: 43 61 6c 6c 62 61 63 6b 29 0a 23 65 6c 73 65 0a  Callback).#else.
0d50: 23 20 64 65 66 69 6e 65 20 48 41 53 5f 55 50 44  # define HAS_UPD
0d60: 41 54 45 5f 48 4f 4f 4b 28 44 42 29 20 28 28 44  ATE_HOOK(DB) ((D
0d70: 42 29 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  B)->xUpdateCallb
0d80: 61 63 6b 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ack).#endif../*.
0d90: 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62  ** The next glob
0da0: 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69  al variable is i
0db0: 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20  ncremented each 
0dc0: 74 69 6d 65 20 74 68 65 20 4f 50 5f 46 6f 75 6e  time the OP_Foun
0dd0: 64 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  d opcode.** is e
0de0: 78 65 63 75 74 65 64 2e 20 54 68 69 73 20 69 73  xecuted. This is
0df0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 77 68   used to test wh
0e00: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
0e10: 20 66 6f 72 65 69 67 6e 20 6b 65 79 0a 2a 2a 20   foreign key.** 
0e20: 6f 70 65 72 61 74 69 6f 6e 20 69 6d 70 6c 65 6d  operation implem
0e30: 65 6e 74 65 64 20 75 73 69 6e 67 20 4f 50 5f 46  ented using OP_F
0e40: 6b 49 73 5a 65 72 6f 20 69 73 20 77 6f 72 6b 69  kIsZero is worki
0e50: 6e 67 2e 20 54 68 69 73 20 76 61 72 69 61 62 6c  ng. This variabl
0e60: 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63  e.** has no func
0e70: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
0e80: 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  to help verify t
0e90: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0ea0: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c  tion of the.** l
0eb0: 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  ibrary..*/.#ifde
0ec0: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e  f SQLITE_TEST.in
0ed0: 74 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f  t sqlite3_found_
0ee0: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0ef0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 61 20  f../*.** Test a 
0f00: 72 65 67 69 73 74 65 72 20 74 6f 20 73 65 65 20  register to see 
0f10: 69 66 20 69 74 20 65 78 63 65 65 64 73 20 74 68  if it exceeds th
0f20: 65 20 63 75 72 72 65 6e 74 20 6d 61 78 69 6d 75  e current maximu
0f30: 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20  m blob size..** 
0f40: 49 66 20 69 74 20 64 6f 65 73 2c 20 72 65 63 6f  If it does, reco
0f50: 72 64 20 74 68 65 20 6e 65 77 20 6d 61 78 69 6d  rd the new maxim
0f60: 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f  um blob size..*/
0f70: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
0f80: 49 54 45 5f 54 45 53 54 29 20 26 26 20 21 64 65  ITE_TEST) && !de
0f90: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 55 4e 54  fined(SQLITE_UNT
0fa0: 45 53 54 41 42 4c 45 29 0a 23 20 64 65 66 69 6e  ESTABLE).# defin
0fb0: 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f  e UPDATE_MAX_BLO
0fc0: 42 53 49 5a 45 28 50 29 20 20 75 70 64 61 74 65  BSIZE(P)  update
0fd0: 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50 29 0a 23  MaxBlobsize(P).#
0fe0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 55 50  else.# define UP
0ff0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
1000: 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E(P).#endif../*.
1010: 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 56 44  ** Invoke the VD
1020: 42 45 20 63 6f 76 65 72 61 67 65 20 63 61 6c 6c  BE coverage call
1030: 62 61 63 6b 2c 20 69 66 20 74 68 61 74 20 63 61  back, if that ca
1040: 6c 6c 62 61 63 6b 20 69 73 20 64 65 66 69 6e 65  llback is define
1050: 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66 65 61 74  d.  This.** feat
1060: 75 72 65 20 69 73 20 75 73 65 64 20 66 6f 72 20  ure is used for 
1070: 74 65 73 74 20 73 75 69 74 65 20 76 61 6c 69 64  test suite valid
1080: 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e 64 20 64  ation only and d
1090: 6f 65 73 20 6e 6f 74 20 61 70 70 65 61 72 20 61  oes not appear a
10a0: 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69 6f 6e 20  n.** production 
10b0: 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 4d 20  builds..**.** M 
10c0: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 32  is an integer, 2
10d0: 20 6f 72 20 33 2c 20 74 68 61 74 20 69 6e 64 69   or 3, that indi
10e0: 63 65 73 20 68 6f 77 20 6d 61 6e 79 20 64 69 66  ces how many dif
10f0: 66 65 72 65 6e 74 20 77 61 79 73 20 74 68 65 0a  ferent ways the.
1100: 2a 2a 20 62 72 61 6e 63 68 20 63 61 6e 20 67 6f  ** branch can go
1110: 2e 20 20 49 74 20 69 73 20 75 73 75 61 6c 6c 79  .  It is usually
1120: 20 32 2e 20 20 22 49 22 20 69 73 20 74 68 65 20   2.  "I" is the 
1130: 64 69 72 65 63 74 69 6f 6e 20 74 68 65 20 62 72  direction the br
1140: 61 6e 63 68 0a 2a 2a 20 67 6f 65 73 2e 20 20 30  anch.** goes.  0
1150: 20 6d 65 61 6e 73 20 66 61 6c 6c 73 20 74 68 72   means falls thr
1160: 6f 75 67 68 2e 20 20 31 20 6d 65 61 6e 73 20 62  ough.  1 means b
1170: 72 61 6e 63 68 20 69 73 20 74 61 6b 65 6e 2e 20  ranch is taken. 
1180: 20 32 20 6d 65 61 6e 73 20 74 68 65 0a 2a 2a 20   2 means the.** 
1190: 73 65 63 6f 6e 64 20 61 6c 74 65 72 6e 61 74 69  second alternati
11a0: 76 65 20 62 72 61 6e 63 68 20 69 73 20 74 61 6b  ve branch is tak
11b0: 65 6e 2e 0a 2a 2a 0a 2a 2a 20 69 53 72 63 4c 69  en..**.** iSrcLi
11c0: 6e 65 20 69 73 20 74 68 65 20 73 6f 75 72 63 65  ne is the source
11d0: 20 63 6f 64 65 20 6c 69 6e 65 20 28 66 72 6f 6d   code line (from
11e0: 20 74 68 65 20 5f 5f 4c 49 4e 45 5f 5f 20 6d 61   the __LINE__ ma
11f0: 63 72 6f 29 20 74 68 61 74 0a 2a 2a 20 67 65 6e  cro) that.** gen
1200: 65 72 61 74 65 64 20 74 68 65 20 56 44 42 45 20  erated the VDBE 
1210: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 54 68  instruction.  Th
1220: 69 73 20 69 6e 73 74 72 75 6d 65 6e 74 61 74 69  is instrumentati
1230: 6f 6e 20 61 73 73 75 6d 65 73 20 74 68 61 74 20  on assumes that 
1240: 61 6c 6c 0a 2a 2a 20 73 6f 75 72 63 65 20 63 6f  all.** source co
1250: 64 65 20 69 73 20 69 6e 20 61 20 73 69 6e 67 6c  de is in a singl
1260: 65 20 66 69 6c 65 20 28 74 68 65 20 61 6d 61 6c  e file (the amal
1270: 67 61 6d 61 74 69 6f 6e 29 2e 20 20 53 70 65 63  gamation).  Spec
1280: 69 61 6c 20 76 61 6c 75 65 73 20 31 0a 2a 2a 20  ial values 1.** 
1290: 61 6e 64 20 32 20 66 6f 72 20 74 68 65 20 69 53  and 2 for the iS
12a0: 72 63 4c 69 6e 65 20 70 61 72 61 6d 65 74 65 72  rcLine parameter
12b0: 20 6d 65 61 6e 20 74 68 61 74 20 74 68 69 73 20   mean that this 
12c0: 70 61 72 74 69 63 75 6c 61 72 20 62 72 61 6e 63  particular branc
12d0: 68 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 74  h is.** always t
12e0: 61 6b 65 6e 20 6f 72 20 6e 65 76 65 72 20 74 61  aken or never ta
12f0: 6b 65 6e 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ken, respectivel
1300: 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  y..*/.#if !defin
1310: 65 64 28 53 51 4c 49 54 45 5f 56 44 42 45 5f 43  ed(SQLITE_VDBE_C
1320: 4f 56 45 52 41 47 45 29 0a 23 20 64 65 66 69 6e  OVERAGE).# defin
1330: 65 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65  e VdbeBranchTake
1340: 6e 28 49 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 64  n(I,M).#else.# d
1350: 65 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68  efine VdbeBranch
1360: 54 61 6b 65 6e 28 49 2c 4d 29 20 76 64 62 65 54  Taken(I,M) vdbeT
1370: 61 6b 65 42 72 61 6e 63 68 28 70 4f 70 2d 3e 69  akeBranch(pOp->i
1380: 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 0a 20 20 73  SrcLine,I,M).  s
1390: 74 61 74 69 63 20 76 6f 69 64 20 76 64 62 65 54  tatic void vdbeT
13a0: 61 6b 65 42 72 61 6e 63 68 28 69 6e 74 20 69 53  akeBranch(int iS
13b0: 72 63 4c 69 6e 65 2c 20 75 38 20 49 2c 20 75 38  rcLine, u8 I, u8
13c0: 20 4d 29 7b 0a 20 20 20 20 69 66 28 20 69 53 72   M){.    if( iSr
13d0: 63 4c 69 6e 65 3c 3d 32 20 26 26 20 41 4c 57 41  cLine<=2 && ALWA
13e0: 59 53 28 69 53 72 63 4c 69 6e 65 3e 30 29 20 29  YS(iSrcLine>0) )
13f0: 7b 0a 20 20 20 20 20 20 4d 20 3d 20 69 53 72 63  {.      M = iSrc
1400: 4c 69 6e 65 3b 0a 20 20 20 20 20 20 2f 2a 20 41  Line;.      /* A
1410: 73 73 65 72 74 20 74 68 65 20 74 72 75 74 68 20  ssert the truth 
1420: 6f 66 20 56 64 62 65 43 6f 76 65 72 61 67 65 41  of VdbeCoverageA
1430: 6c 77 61 79 73 54 61 6b 65 6e 28 29 20 61 6e 64  lwaysTaken() and
1440: 20 0a 20 20 20 20 20 20 2a 2a 20 56 64 62 65 43   .      ** VdbeC
1450: 6f 76 65 72 61 67 65 4e 65 76 65 72 54 61 6b 65  overageNeverTake
1460: 6e 28 29 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  n() */.      ass
1470: 65 72 74 28 20 28 4d 20 26 20 49 29 3d 3d 49 20  ert( (M & I)==I 
1480: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
1490: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47      if( sqlite3G
14a0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 56 64 62  lobalConfig.xVdb
14b0: 65 42 72 61 6e 63 68 3d 3d 30 20 29 20 72 65 74  eBranch==0 ) ret
14c0: 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54 45 53 54 2a  urn;  /*NO_TEST*
14d0: 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 47  /.      sqlite3G
14e0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 56 64 62  lobalConfig.xVdb
14f0: 65 42 72 61 6e 63 68 28 73 71 6c 69 74 65 33 47  eBranch(sqlite3G
1500: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70 56 64 62  lobalConfig.pVdb
1510: 65 42 72 61 6e 63 68 41 72 67 2c 0a 20 20 20 20  eBranchArg,.    
1520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1540: 20 20 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 3b    iSrcLine,I,M);
1550: 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69  .    }.  }.#endi
1560: 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74  f../*.** Convert
1570: 20 74 68 65 20 67 69 76 65 6e 20 72 65 67 69 73   the given regis
1580: 74 65 72 20 69 6e 74 6f 20 61 20 73 74 72 69 6e  ter into a strin
1590: 67 20 69 66 20 69 74 20 69 73 6e 27 74 20 6f 6e  g if it isn't on
15a0: 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e 20 52 65  e.** already. Re
15b0: 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  turn non-zero if
15c0: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c   a malloc() fail
15d0: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 74  s..*/.#define St
15e0: 72 69 6e 67 69 66 79 28 50 2c 20 65 6e 63 29 20  ringify(P, enc) 
15f0: 5c 0a 20 20 20 69 66 28 28 28 50 29 2d 3e 66 6c  \.   if(((P)->fl
1600: 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  ags&(MEM_Str|MEM
1610: 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26 20 73 71  _Blob))==0 && sq
1620: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69  lite3VdbeMemStri
1630: 6e 67 69 66 79 28 50 2c 65 6e 63 2c 30 29 29 20  ngify(P,enc,0)) 
1640: 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f 20 6e 6f  \.     { goto no
1650: 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20 41  _mem; }../*.** A
1660: 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69  n ephemeral stri
1670: 6e 67 20 76 61 6c 75 65 20 28 73 69 67 6e 69 66  ng value (signif
1680: 69 65 64 20 62 79 20 74 68 65 20 4d 45 4d 5f 45  ied by the MEM_E
1690: 70 68 65 6d 20 66 6c 61 67 29 20 63 6f 6e 74 61  phem flag) conta
16a0: 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72  ins.** a pointer
16b0: 20 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c   to a dynamicall
16c0: 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74 72 69  y allocated stri
16d0: 6e 67 20 77 68 65 72 65 20 73 6f 6d 65 20 6f 74  ng where some ot
16e0: 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a 20 69 73  her entity.** is
16f0: 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72   responsible for
1700: 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68   deallocating th
1710: 61 74 20 73 74 72 69 6e 67 2e 20 20 42 65 63 61  at string.  Beca
1720: 75 73 65 20 74 68 65 20 72 65 67 69 73 74 65 72  use the register
1730: 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e  .** does not con
1740: 74 72 6f 6c 20 74 68 65 20 73 74 72 69 6e 67 2c  trol the string,
1750: 20 69 74 20 6d 69 67 68 74 20 62 65 20 64 65 6c   it might be del
1760: 65 74 65 64 20 77 69 74 68 6f 75 74 20 74 68 65  eted without the
1770: 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6b 6e 6f   register.** kno
1780: 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54  wing it..**.** T
1790: 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e 76  his routine conv
17a0: 65 72 74 73 20 61 6e 20 65 70 68 65 6d 65 72 61  erts an ephemera
17b0: 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20  l string into a 
17c0: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
17d0: 63 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67 20  cated.** string 
17e0: 74 68 61 74 20 74 68 65 20 72 65 67 69 73 74 65  that the registe
17f0: 72 20 69 74 73 65 6c 66 20 63 6f 6e 74 72 6f 6c  r itself control
1800: 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  s.  In other wor
1810: 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76 65 72  ds, it.** conver
1820: 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65 6d 20  ts an MEM_Ephem 
1830: 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 73 74  string into a st
1840: 72 69 6e 67 20 77 69 74 68 20 50 2e 7a 3d 3d 50  ring with P.z==P
1850: 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a 23 64 65  .zMalloc..*/.#de
1860: 66 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61 6c  fine Deephemeral
1870: 69 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28 20  ize(P) \.   if( 
1880: 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  ((P)->flags&MEM_
1890: 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20  Ephem)!=0 \.    
18a0: 20 20 20 26 26 20 73 71 6c 69 74 65 33 56 64 62     && sqlite3Vdb
18b0: 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c  eMemMakeWriteabl
18c0: 65 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f  e(P) ){ goto no_
18d0: 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e  mem;}../* Return
18e0: 20 74 72 75 65 20 69 66 20 74 68 65 20 63 75 72   true if the cur
18f0: 73 6f 72 20 77 61 73 20 6f 70 65 6e 65 64 20 75  sor was opened u
1900: 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70 65 6e  sing the OP_Open
1910: 53 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e 20 2a  Sorter opcode. *
1920: 2f 0a 23 64 65 66 69 6e 65 20 69 73 53 6f 72 74  /.#define isSort
1930: 65 72 28 78 29 20 28 28 78 29 2d 3e 65 43 75 72  er(x) ((x)->eCur
1940: 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 53 4f  Type==CURTYPE_SO
1950: 52 54 45 52 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  RTER)../*.** All
1960: 6f 63 61 74 65 20 56 64 62 65 43 75 72 73 6f 72  ocate VdbeCursor
1970: 20 6e 75 6d 62 65 72 20 69 43 75 72 2e 20 20 52   number iCur.  R
1980: 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72 20  eturn a pointer 
1990: 74 6f 20 69 74 2e 20 20 52 65 74 75 72 6e 20 4e  to it.  Return N
19a0: 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20 72 75 6e  ULL.** if we run
19b0: 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a   out of memory..
19c0: 2a 2f 0a 73 74 61 74 69 63 20 56 64 62 65 43 75  */.static VdbeCu
19d0: 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43 75  rsor *allocateCu
19e0: 72 73 6f 72 28 0a 20 20 56 64 62 65 20 2a 70 2c  rsor(.  Vdbe *p,
19f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1a00: 20 54 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   The virtual mac
1a10: 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 69 43  hine */.  int iC
1a20: 75 72 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ur,             
1a30: 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65 20  /* Index of the 
1a40: 6e 65 77 20 56 64 62 65 43 75 72 73 6f 72 20 2a  new VdbeCursor *
1a50: 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 2c 20  /.  int nField, 
1a60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1a70: 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e  ber of fields in
1a80: 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
1a90: 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62  dex */.  int iDb
1aa0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
1ab0: 2a 20 44 61 74 61 62 61 73 65 20 74 68 65 20 63  * Database the c
1ac0: 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73 20 74 6f  ursor belongs to
1ad0: 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20 75 38 20  , or -1 */.  u8 
1ae0: 65 43 75 72 54 79 70 65 20 20 20 20 20 20 20 20  eCurType        
1af0: 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68     /* Type of th
1b00: 65 20 6e 65 77 20 63 75 72 73 6f 72 20 2a 2f 0a  e new cursor */.
1b10: 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65  ){.  /* Find the
1b20: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
1b30: 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74  t will be used t
1b40: 6f 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62  o store the blob
1b50: 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20   of memory.  ** 
1b60: 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69  required for thi
1b70: 73 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72  s VdbeCursor str
1b80: 75 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f  ucture. It is co
1b90: 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20  nvenient to use 
1ba0: 61 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d  a .  ** vdbe mem
1bb0: 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61  ory cell to mana
1bc0: 67 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c  ge the memory al
1bd0: 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65  location require
1be0: 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62  d for a.  ** Vdb
1bf0: 65 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72  eCursor structur
1c00: 65 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77  e for the follow
1c10: 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a  ing reasons:.  *
1c20: 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74  *.  **   * Somet
1c30: 69 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62  imes cursor numb
1c40: 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72  ers are used for
1c50: 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66   a couple of dif
1c60: 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20  ferent.  **     
1c70: 70 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64  purposes in a vd
1c80: 62 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20  be program. The 
1c90: 64 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d  different uses m
1ca0: 69 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a  ight require.  *
1cb0: 2a 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20  *     different 
1cc0: 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e  sized allocation
1cd0: 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  s. Memory cells 
1ce0: 70 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65  provide growable
1cf0: 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61  .  **     alloca
1d00: 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tions..  **.  **
1d10: 20 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20     * When using 
1d20: 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41  ENABLE_MEMORY_MA
1d30: 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79  NAGEMENT, memory
1d40: 20 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61   cell buffers ca
1d50: 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72  n.  **     be fr
1d60: 65 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74  eed lazily via t
1d70: 68 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61  he sqlite3_relea
1d80: 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e  se_memory() API.
1d90: 20 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d   This.  **     m
1da0: 69 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d  inimizes the num
1db0: 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61  ber of malloc ca
1dc0: 6c 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20  lls made by the 
1dd0: 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a  system..  **.  *
1de0: 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  * The memory cel
1df0: 6c 20 66 6f 72 20 63 75 72 73 6f 72 20 30 20 69  l for cursor 0 i
1e00: 73 20 61 4d 65 6d 5b 30 5d 2e 20 54 68 65 20 72  s aMem[0]. The r
1e10: 65 73 74 20 61 72 65 20 61 6c 6c 6f 63 61 74 65  est are allocate
1e20: 64 20 66 72 6f 6d 0a 20 20 2a 2a 20 74 68 65 20  d from.  ** the 
1e30: 74 6f 70 20 6f 66 20 74 68 65 20 72 65 67 69 73  top of the regis
1e40: 74 65 72 20 73 70 61 63 65 2e 20 20 43 75 72 73  ter space.  Curs
1e50: 6f 72 20 31 20 69 73 20 61 74 20 4d 65 6d 5b 70  or 1 is at Mem[p
1e60: 2d 3e 6e 4d 65 6d 2d 31 5d 2e 0a 20 20 2a 2a 20  ->nMem-1]..  ** 
1e70: 43 75 72 73 6f 72 20 32 20 69 73 20 61 74 20 4d  Cursor 2 is at M
1e80: 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 32 5d 2e 20 41  em[p->nMem-2]. A
1e90: 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a  nd so forth..  *
1ea0: 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20  /.  Mem *pMem = 
1eb0: 69 43 75 72 3e 30 20 3f 20 26 70 2d 3e 61 4d 65  iCur>0 ? &p->aMe
1ec0: 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 20  m[p->nMem-iCur] 
1ed0: 3a 20 70 2d 3e 61 4d 65 6d 3b 0a 0a 20 20 69 6e  : p->aMem;..  in
1ee0: 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65 43  t nByte;.  VdbeC
1ef0: 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b 0a  ursor *pCx = 0;.
1f00: 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20 20    nByte = .     
1f10: 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56   ROUND8(sizeof(V
1f20: 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32 2a  dbeCursor)) + 2*
1f30: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
1f40: 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 65 43 75  ld + .      (eCu
1f50: 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
1f60: 54 52 45 45 3f 73 71 6c 69 74 65 33 42 74 72 65  TREE?sqlite3Btre
1f70: 65 43 75 72 73 6f 72 53 69 7a 65 28 29 3a 30 29  eCursorSize():0)
1f80: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43 75  ;..  assert( iCu
1f90: 72 3e 3d 30 20 26 26 20 69 43 75 72 3c 70 2d 3e  r>=0 && iCur<p->
1fa0: 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28  nCursor );.  if(
1fb0: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20   p->apCsr[iCur] 
1fc0: 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f  ){ /*OPTIMIZATIO
1fd0: 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20  N-IF-FALSE*/.   
1fe0: 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65   sqlite3VdbeFree
1ff0: 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43  Cursor(p, p->apC
2000: 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20 70  sr[iCur]);.    p
2010: 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20  ->apCsr[iCur] = 
2020: 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51 4c  0;.  }.  if( SQL
2030: 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33 56  ITE_OK==sqlite3V
2040: 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65  dbeMemClearAndRe
2050: 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79 74 65  size(pMem, nByte
2060: 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70 43 73  ) ){.    p->apCs
2070: 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20 3d 20  r[iCur] = pCx = 
2080: 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70 4d 65  (VdbeCursor*)pMe
2090: 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73 65 74  m->z;.    memset
20a0: 28 70 43 78 2c 20 30 2c 20 6f 66 66 73 65 74 6f  (pCx, 0, offseto
20b0: 66 28 56 64 62 65 43 75 72 73 6f 72 2c 70 41 6c  f(VdbeCursor,pAl
20c0: 74 43 75 72 73 6f 72 29 29 3b 0a 20 20 20 20 70  tCursor));.    p
20d0: 43 78 2d 3e 65 43 75 72 54 79 70 65 20 3d 20 65  Cx->eCurType = e
20e0: 43 75 72 54 79 70 65 3b 0a 20 20 20 20 70 43 78  CurType;.    pCx
20f0: 2d 3e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20  ->iDb = iDb;.   
2100: 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e   pCx->nField = n
2110: 46 69 65 6c 64 3b 0a 20 20 20 20 70 43 78 2d 3e  Field;.    pCx->
2120: 61 4f 66 66 73 65 74 20 3d 20 26 70 43 78 2d 3e  aOffset = &pCx->
2130: 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d 3b 0a 20  aType[nField];. 
2140: 20 20 20 69 66 28 20 65 43 75 72 54 79 70 65 3d     if( eCurType=
2150: 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
2160: 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e 75 63 2e  {.      pCx->uc.
2170: 70 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75 72  pCursor = (BtCur
2180: 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20 20  sor*).          
2190: 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38 28  &pMem->z[ROUND8(
21a0: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
21b0: 72 29 29 2b 32 2a 73 69 7a 65 6f 66 28 75 33 32  r))+2*sizeof(u32
21c0: 29 2a 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20 20  )*nField];.     
21d0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
21e0: 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 75 63 2e  sorZero(pCx->uc.
21f0: 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a  pCursor);.    }.
2200: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 43 78    }.  return pCx
2210: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74  ;.}../*.** Try t
2220: 6f 20 63 6f 6e 76 65 72 74 20 61 20 76 61 6c 75  o convert a valu
2230: 65 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63  e into a numeric
2240: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2250: 69 66 20 77 65 20 63 61 6e 0a 2a 2a 20 64 6f 20  if we can.** do 
2260: 73 6f 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20  so without loss 
2270: 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20  of information. 
2280: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
2290: 20 69 66 20 74 68 65 20 73 74 72 69 6e 67 0a 2a   if the string.*
22a0: 2a 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61 20 6e  * looks like a n
22b0: 75 6d 62 65 72 2c 20 63 6f 6e 76 65 72 74 20 69  umber, convert i
22c0: 74 20 69 6e 74 6f 20 61 20 6e 75 6d 62 65 72 2e  t into a number.
22d0: 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74    If it does not
22e0: 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20  .** look like a 
22f0: 6e 75 6d 62 65 72 2c 20 6c 65 61 76 65 20 69 74  number, leave it
2300: 20 61 6c 6f 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66   alone..**.** If
2310: 20 74 68 65 20 62 54 72 79 46 6f 72 49 6e 74 20   the bTryForInt 
2320: 66 6c 61 67 20 69 73 20 74 72 75 65 2c 20 74 68  flag is true, th
2330: 65 6e 20 65 78 74 72 61 20 65 66 66 6f 72 74 20  en extra effort 
2340: 69 73 20 6d 61 64 65 20 74 6f 20 67 69 76 65 0a  is made to give.
2350: 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  ** an integer re
2360: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20 53  presentation.  S
2370: 74 72 69 6e 67 73 20 74 68 61 74 20 6c 6f 6f 6b  trings that look
2380: 20 6c 69 6b 65 20 66 6c 6f 61 74 69 6e 67 20 70   like floating p
2390: 6f 69 6e 74 0a 2a 2a 20 76 61 6c 75 65 73 20 62  oint.** values b
23a0: 75 74 20 77 68 69 63 68 20 68 61 76 65 20 6e 6f  ut which have no
23b0: 20 66 72 61 63 74 69 6f 6e 61 6c 20 63 6f 6d 70   fractional comp
23c0: 6f 6e 65 6e 74 20 28 65 78 61 6d 70 6c 65 3a 20  onent (example: 
23d0: 27 34 38 2e 30 30 27 29 0a 2a 2a 20 77 69 6c 6c  '48.00').** will
23e0: 20 68 61 76 65 20 61 20 4d 45 4d 5f 49 6e 74 20   have a MEM_Int 
23f0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 77  representation w
2400: 68 65 6e 20 62 54 72 79 46 6f 72 49 6e 74 20 69  hen bTryForInt i
2410: 73 20 74 72 75 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  s true..**.** If
2420: 20 62 54 72 79 46 6f 72 49 6e 74 20 69 73 20 66   bTryForInt is f
2430: 61 6c 73 65 2c 20 74 68 65 6e 20 69 66 20 74 68  alse, then if th
2440: 65 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20 63  e input string c
2450: 6f 6e 74 61 69 6e 73 20 61 20 64 65 63 69 6d 61  ontains a decima
2460: 6c 0a 2a 2a 20 70 6f 69 6e 74 20 6f 72 20 65 78  l.** point or ex
2470: 70 6f 6e 65 6e 74 69 61 6c 20 6e 6f 74 61 74 69  ponential notati
2480: 6f 6e 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  on, the result i
2490: 73 20 6f 6e 6c 79 20 4d 45 4d 5f 52 65 61 6c 2c  s only MEM_Real,
24a0: 20 65 76 65 6e 0a 2a 2a 20 69 66 20 74 68 65 72   even.** if ther
24b0: 65 20 69 73 20 61 6e 20 65 78 61 63 74 20 69 6e  e is an exact in
24c0: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
24d0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 71 75 61 6e  tion of the quan
24e0: 74 69 74 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  tity..*/.static 
24f0: 76 6f 69 64 20 61 70 70 6c 79 4e 75 6d 65 72 69  void applyNumeri
2500: 63 41 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70  cAffinity(Mem *p
2510: 52 65 63 2c 20 69 6e 74 20 62 54 72 79 46 6f 72  Rec, int bTryFor
2520: 49 6e 74 29 7b 0a 20 20 64 6f 75 62 6c 65 20 72  Int){.  double r
2530: 56 61 6c 75 65 3b 0a 20 20 69 36 34 20 69 56 61  Value;.  i64 iVa
2540: 6c 75 65 3b 0a 20 20 75 38 20 65 6e 63 20 3d 20  lue;.  u8 enc = 
2550: 70 52 65 63 2d 3e 65 6e 63 3b 0a 20 20 61 73 73  pRec->enc;.  ass
2560: 65 72 74 28 20 28 70 52 65 63 2d 3e 66 6c 61 67  ert( (pRec->flag
2570: 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
2580: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d  _Int|MEM_Real))=
2590: 3d 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 69 66  =MEM_Str );.  if
25a0: 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 52  ( sqlite3AtoF(pR
25b0: 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c 20  ec->z, &rValue, 
25c0: 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d 30  pRec->n, enc)==0
25d0: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28   ) return;.  if(
25e0: 20 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f 69 36   0==sqlite3Atoi6
25f0: 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69 56 61 6c  4(pRec->z, &iVal
2600: 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63  ue, pRec->n, enc
2610: 29 20 29 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75  ) ){.    pRec->u
2620: 2e 69 20 3d 20 69 56 61 6c 75 65 3b 0a 20 20 20  .i = iValue;.   
2630: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20   pRec->flags |= 
2640: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 65 6c 73 65  MEM_Int;.  }else
2650: 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75 2e 72 20  {.    pRec->u.r 
2660: 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20 20 70 52  = rValue;.    pR
2670: 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ec->flags |= MEM
2680: 5f 52 65 61 6c 3b 0a 20 20 20 20 69 66 28 20 62  _Real;.    if( b
2690: 54 72 79 46 6f 72 49 6e 74 20 29 20 73 71 6c 69  TryForInt ) sqli
26a0: 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66  te3VdbeIntegerAf
26b0: 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20  finity(pRec);.  
26c0: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65  }.}../*.** Proce
26d0: 73 73 69 6e 67 20 69 73 20 64 65 74 65 72 6d 69  ssing is determi
26e0: 6e 65 20 62 79 20 74 68 65 20 61 66 66 69 6e 69  ne by the affini
26f0: 74 79 20 70 61 72 61 6d 65 74 65 72 3a 0a 2a 2a  ty parameter:.**
2700: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  .** SQLITE_AFF_I
2710: 4e 54 45 47 45 52 3a 0a 2a 2a 20 53 51 4c 49 54  NTEGER:.** SQLIT
2720: 45 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a 2a 20 53  E_AFF_REAL:.** S
2730: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
2740: 43 3a 0a 2a 2a 20 20 20 20 54 72 79 20 74 6f 20  C:.**    Try to 
2750: 63 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20  convert pRec to 
2760: 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65  an integer repre
2770: 73 65 6e 74 61 74 69 6f 6e 20 6f 72 20 61 20 0a  sentation or a .
2780: 2a 2a 20 20 20 20 66 6c 6f 61 74 69 6e 67 2d 70  **    floating-p
2790: 6f 69 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74  oint representat
27a0: 69 6f 6e 20 69 66 20 61 6e 20 69 6e 74 65 67 65  ion if an intege
27b0: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
27c0: 0a 2a 2a 20 20 20 20 69 73 20 6e 6f 74 20 70 6f  .**    is not po
27d0: 73 73 69 62 6c 65 2e 20 20 4e 6f 74 65 20 74 68  ssible.  Note th
27e0: 61 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 72  at the integer r
27f0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73  epresentation is
2800: 0a 2a 2a 20 20 20 20 61 6c 77 61 79 73 20 70 72  .**    always pr
2810: 65 66 65 72 72 65 64 2c 20 65 76 65 6e 20 69 66  eferred, even if
2820: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 69 73   the affinity is
2830: 20 52 45 41 4c 2c 20 62 65 63 61 75 73 65 0a 2a   REAL, because.*
2840: 2a 20 20 20 20 61 6e 20 69 6e 74 65 67 65 72 20  *    an integer 
2850: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69  representation i
2860: 73 20 6d 6f 72 65 20 73 70 61 63 65 20 65 66 66  s more space eff
2870: 69 63 69 65 6e 74 20 6f 6e 20 64 69 73 6b 2e 0a  icient on disk..
2880: 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  **.** SQLITE_AFF
2890: 5f 54 45 58 54 3a 0a 2a 2a 20 20 20 20 43 6f 6e  _TEXT:.**    Con
28a0: 76 65 72 74 20 70 52 65 63 20 74 6f 20 61 20 74  vert pRec to a t
28b0: 65 78 74 20 72 65 70 72 65 73 65 6e 74 61 74 69  ext representati
28c0: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45  on..**.** SQLITE
28d0: 5f 41 46 46 5f 42 4c 4f 42 3a 0a 2a 2a 20 20 20  _AFF_BLOB:.**   
28e0: 20 4e 6f 2d 6f 70 2e 20 20 70 52 65 63 20 69 73   No-op.  pRec is
28f0: 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 73   unchanged..*/.s
2900: 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79  tatic void apply
2910: 41 66 66 69 6e 69 74 79 28 0a 20 20 4d 65 6d 20  Affinity(.  Mem 
2920: 2a 70 52 65 63 2c 20 20 20 20 20 20 20 20 20 20  *pRec,          
2930: 2f 2a 20 54 68 65 20 76 61 6c 75 65 20 74 6f 20  /* The value to 
2940: 61 70 70 6c 79 20 61 66 66 69 6e 69 74 79 20 74  apply affinity t
2950: 6f 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  o */.  char affi
2960: 6e 69 74 79 2c 20 20 20 20 20 20 2f 2a 20 54 68  nity,      /* Th
2970: 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65  e affinity to be
2980: 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 75 38   applied */.  u8
2990: 20 65 6e 63 20 20 20 20 20 20 20 20 20 20 20 20   enc            
29a0: 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 74 65    /* Use this te
29b0: 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 29  xt encoding */.)
29c0: 7b 0a 20 20 69 66 28 20 61 66 66 69 6e 69 74 79  {.  if( affinity
29d0: 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  >=SQLITE_AFF_NUM
29e0: 45 52 49 43 20 29 7b 0a 20 20 20 20 61 73 73 65  ERIC ){.    asse
29f0: 72 74 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51  rt( affinity==SQ
2a00: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
2a10: 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51   || affinity==SQ
2a20: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 0a 20 20  LITE_AFF_REAL.  
2a30: 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 61 66             || af
2a40: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2a50: 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20  FF_NUMERIC );.  
2a60: 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61    if( (pRec->fla
2a70: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
2a80: 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49   ){ /*OPTIMIZATI
2a90: 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20  ON-IF-FALSE*/.  
2aa0: 20 20 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66      if( (pRec->f
2ab0: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29  lags & MEM_Real)
2ac0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69  ==0 ){.        i
2ad0: 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  f( pRec->flags &
2ae0: 20 4d 45 4d 5f 53 74 72 20 29 20 61 70 70 6c 79   MEM_Str ) apply
2af0: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
2b00: 70 52 65 63 2c 31 29 3b 0a 20 20 20 20 20 20 7d  pRec,1);.      }
2b10: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
2b20: 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72  lite3VdbeInteger
2b30: 41 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a  Affinity(pRec);.
2b40: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
2b50: 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e 69  }else if( affini
2b60: 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54  ty==SQLITE_AFF_T
2b70: 45 58 54 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e  EXT ){.    /* On
2b80: 6c 79 20 61 74 74 65 6d 70 74 20 74 68 65 20 63  ly attempt the c
2b90: 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20 54 45 58  onversion to TEX
2ba0: 54 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e  T if there is an
2bb0: 20 69 6e 74 65 67 65 72 20 6f 72 20 72 65 61 6c   integer or real
2bc0: 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e  .    ** represen
2bd0: 74 61 74 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64  tation (blob and
2be0: 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74   NULL do not get
2bf0: 20 63 6f 6e 76 65 72 74 65 64 29 20 62 75 74 20   converted) but 
2c00: 6e 6f 20 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a  no string.    **
2c10: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e   representation.
2c20: 20 20 49 74 20 77 6f 75 6c 64 20 62 65 20 68 61    It would be ha
2c30: 72 6d 6c 65 73 73 20 74 6f 20 72 65 70 65 61 74  rmless to repeat
2c40: 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20   the conversion 
2c50: 69 66 20 0a 20 20 20 20 2a 2a 20 74 68 65 72 65  if .    ** there
2c60: 20 69 73 20 61 6c 72 65 61 64 79 20 61 20 73 74   is already a st
2c70: 72 69 6e 67 20 72 65 70 2c 20 62 75 74 20 69 74  ring rep, but it
2c80: 20 69 73 20 70 6f 69 6e 74 6c 65 73 73 20 74 6f   is pointless to
2c90: 20 77 61 73 74 65 20 74 68 6f 73 65 0a 20 20 20   waste those.   
2ca0: 20 2a 2a 20 43 50 55 20 63 79 63 6c 65 73 2e 20   ** CPU cycles. 
2cb0: 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d 28 70  */.    if( 0==(p
2cc0: 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53  Rec->flags&MEM_S
2cd0: 74 72 29 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a  tr) ){ /*OPTIMIZ
2ce0: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f  ATION-IF-FALSE*/
2cf0: 0a 20 20 20 20 20 20 69 66 28 20 28 70 52 65 63  .      if( (pRec
2d00: 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61  ->flags&(MEM_Rea
2d10: 6c 7c 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20  l|MEM_Int)) ){. 
2d20: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
2d30: 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70  beMemStringify(p
2d40: 52 65 63 2c 20 65 6e 63 2c 20 31 29 3b 0a 20 20  Rec, enc, 1);.  
2d50: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
2d60: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pRec->flags &= ~
2d70: 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e  (MEM_Real|MEM_In
2d80: 74 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a  t);.  }.}../*.**
2d90: 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   Try to convert 
2da0: 74 68 65 20 74 79 70 65 20 6f 66 20 61 20 66 75  the type of a fu
2db0: 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20  nction argument 
2dc0: 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75  or a result colu
2dd0: 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e 75 6d  mn.** into a num
2de0: 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74  eric representat
2df0: 69 6f 6e 2e 20 20 55 73 65 20 65 69 74 68 65 72  ion.  Use either
2e00: 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c   INTEGER or REAL
2e10: 20 77 68 69 63 68 65 76 65 72 0a 2a 2a 20 69 73   whichever.** is
2e20: 20 61 70 70 72 6f 70 72 69 61 74 65 2e 20 20 42   appropriate.  B
2e30: 75 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65 20 63  ut only do the c
2e40: 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 69 74 20  onversion if it 
2e50: 69 73 20 70 6f 73 73 69 62 6c 65 20 77 69 74 68  is possible with
2e60: 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20 69  out.** loss of i
2e70: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 72  nformation and r
2e80: 65 74 75 72 6e 20 74 68 65 20 72 65 76 69 73 65  eturn the revise
2e90: 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 61 72  d type of the ar
2ea0: 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73  gument..*/.int s
2eb0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e 75 6d  qlite3_value_num
2ec0: 65 72 69 63 5f 74 79 70 65 28 73 71 6c 69 74 65  eric_type(sqlite
2ed0: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a  3_value *pVal){.
2ee0: 20 20 69 6e 74 20 65 54 79 70 65 20 3d 20 73 71    int eType = sq
2ef0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65  lite3_value_type
2f00: 28 70 56 61 6c 29 3b 0a 20 20 69 66 28 20 65 54  (pVal);.  if( eT
2f10: 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45 58 54  ype==SQLITE_TEXT
2f20: 20 29 7b 0a 20 20 20 20 4d 65 6d 20 2a 70 4d 65   ){.    Mem *pMe
2f30: 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a  m = (Mem*)pVal;.
2f40: 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
2f50: 41 66 66 69 6e 69 74 79 28 70 4d 65 6d 2c 20 30  Affinity(pMem, 0
2f60: 29 3b 0a 20 20 20 20 65 54 79 70 65 20 3d 20 73  );.    eType = s
2f70: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70  qlite3_value_typ
2f80: 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 20 20 72  e(pVal);.  }.  r
2f90: 65 74 75 72 6e 20 65 54 79 70 65 3b 0a 7d 0a 0a  eturn eType;.}..
2fa0: 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20 76  /*.** Exported v
2fb0: 65 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79 41  ersion of applyA
2fc0: 66 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73 20  ffinity(). This 
2fd0: 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71 6c  one works on sql
2fe0: 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a  ite3_value*, .**
2ff0: 20 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e 61   not the interna
3000: 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a  l Mem* type..*/.
3010: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
3020: 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a  eApplyAffinity(.
3030: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
3040: 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66 66  *pVal, .  u8 aff
3050: 69 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e 63  inity, .  u8 enc
3060: 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e  .){.  applyAffin
3070: 69 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c 2c  ity((Mem *)pVal,
3080: 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29 3b   affinity, enc);
3090: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70 4d 65 6d 20 63  .}../*.** pMem c
30a0: 75 72 72 65 6e 74 6c 79 20 6f 6e 6c 79 20 68 6f  urrently only ho
30b0: 6c 64 73 20 61 20 73 74 72 69 6e 67 20 74 79 70  lds a string typ
30c0: 65 20 28 6f 72 20 6d 61 79 62 65 20 61 20 42 4c  e (or maybe a BL
30d0: 4f 42 20 74 68 61 74 20 77 65 20 63 61 6e 0a 2a  OB that we can.*
30e0: 2a 20 69 6e 74 65 72 70 72 65 74 20 61 73 20 61  * interpret as a
30f0: 20 73 74 72 69 6e 67 20 69 66 20 77 65 20 77 61   string if we wa
3100: 6e 74 20 74 6f 29 2e 20 20 43 6f 6d 70 75 74 65  nt to).  Compute
3110: 20 69 74 73 20 63 6f 72 72 65 73 70 6f 6e 64 69   its correspondi
3120: 6e 67 0a 2a 2a 20 6e 75 6d 65 72 69 63 20 74 79  ng.** numeric ty
3130: 70 65 2c 20 69 66 20 68 61 73 20 6f 6e 65 2e 20  pe, if has one. 
3140: 20 53 65 74 20 74 68 65 20 70 4d 65 6d 2d 3e 75   Set the pMem->u
3150: 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69  .r and pMem->u.i
3160: 20 66 69 65 6c 64 73 0a 2a 2a 20 61 63 63 6f 72   fields.** accor
3170: 64 69 6e 67 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69  dingly..*/.stati
3180: 63 20 75 31 36 20 53 51 4c 49 54 45 5f 4e 4f 49  c u16 SQLITE_NOI
3190: 4e 4c 49 4e 45 20 63 6f 6d 70 75 74 65 4e 75 6d  NLINE computeNum
31a0: 65 72 69 63 54 79 70 65 28 4d 65 6d 20 2a 70 4d  ericType(Mem *pM
31b0: 65 6d 29 7b 0a 20 20 61 73 73 65 72 74 28 20 28  em){.  assert( (
31c0: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
31d0: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
31e0: 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )==0 );.  assert
31f0: 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
3200: 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
3210: 6f 62 29 29 21 3d 30 20 29 3b 0a 20 20 69 66 28  ob))!=0 );.  if(
3220: 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 4d 65   sqlite3AtoF(pMe
3230: 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e 72  m->z, &pMem->u.r
3240: 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d  , pMem->n, pMem-
3250: 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a 20 20 20 20  >enc)==0 ){.    
3260: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20  return 0;.  }.  
3270: 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 69 36  if( sqlite3Atoi6
3280: 34 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d  4(pMem->z, &pMem
3290: 2d 3e 75 2e 69 2c 20 70 4d 65 6d 2d 3e 6e 2c 20  ->u.i, pMem->n, 
32a0: 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 53 51 4c 49  pMem->enc)==SQLI
32b0: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74  TE_OK ){.    ret
32c0: 75 72 6e 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d  urn MEM_Int;.  }
32d0: 0a 20 20 72 65 74 75 72 6e 20 4d 45 4d 5f 52 65  .  return MEM_Re
32e0: 61 6c 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  al;.}../*.** Ret
32f0: 75 72 6e 20 74 68 65 20 6e 75 6d 65 72 69 63 20  urn the numeric 
3300: 74 79 70 65 20 66 6f 72 20 70 4d 65 6d 2c 20 65  type for pMem, e
3310: 69 74 68 65 72 20 4d 45 4d 5f 49 6e 74 20 6f 72  ither MEM_Int or
3320: 20 4d 45 4d 5f 52 65 61 6c 20 6f 72 20 62 6f 74   MEM_Real or bot
3330: 68 20 6f 72 0a 2a 2a 20 6e 6f 6e 65 2e 20 20 0a  h or.** none.  .
3340: 2a 2a 0a 2a 2a 20 55 6e 6c 69 6b 65 20 61 70 70  **.** Unlike app
3350: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
3360: 79 28 29 2c 20 74 68 69 73 20 72 6f 75 74 69 6e  y(), this routin
3370: 65 20 64 6f 65 73 20 6e 6f 74 20 6d 6f 64 69 66  e does not modif
3380: 79 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 2e 0a 2a  y pMem->flags..*
3390: 2a 20 42 75 74 20 69 74 20 64 6f 65 73 20 73 65  * But it does se
33a0: 74 20 70 4d 65 6d 2d 3e 75 2e 72 20 61 6e 64 20  t pMem->u.r and 
33b0: 70 4d 65 6d 2d 3e 75 2e 69 20 61 70 70 72 6f 70  pMem->u.i approp
33c0: 72 69 61 74 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74  riately..*/.stat
33d0: 69 63 20 75 31 36 20 6e 75 6d 65 72 69 63 54 79  ic u16 numericTy
33e0: 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20  pe(Mem *pMem){. 
33f0: 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73   if( pMem->flags
3400: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
3410: 52 65 61 6c 29 20 29 7b 0a 20 20 20 20 72 65 74  Real) ){.    ret
3420: 75 72 6e 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  urn pMem->flags 
3430: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
3440: 65 61 6c 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  eal);.  }.  if( 
3450: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
3460: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
3470: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 63   ){.    return c
3480: 6f 6d 70 75 74 65 4e 75 6d 65 72 69 63 54 79 70  omputeNumericTyp
3490: 65 28 70 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 72  e(pMem);.  }.  r
34a0: 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64  eturn 0;.}..#ifd
34b0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
34c0: 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 6e 69  /*.** Write a ni
34d0: 63 65 20 73 74 72 69 6e 67 20 72 65 70 72 65 73  ce string repres
34e0: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
34f0: 63 6f 6e 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c  contents of cell
3500: 20 70 4d 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75   pMem.** into bu
3510: 66 66 65 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74  ffer zBuf, lengt
3520: 68 20 6e 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20  h nBuf..*/.void 
3530: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72  sqlite3VdbeMemPr
3540: 65 74 74 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70  ettyPrint(Mem *p
3550: 4d 65 6d 2c 20 63 68 61 72 20 2a 7a 42 75 66 29  Mem, char *zBuf)
3560: 7b 0a 20 20 63 68 61 72 20 2a 7a 43 73 72 20 3d  {.  char *zCsr =
3570: 20 7a 42 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d   zBuf;.  int f =
3580: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20   pMem->flags;.. 
3590: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
35a0: 61 72 20 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d  ar *const encnam
35b0: 65 73 5b 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22  es[] = {"(X)", "
35c0: 28 38 29 22 2c 20 22 28 31 36 4c 45 29 22 2c 20  (8)", "(16LE)", 
35d0: 22 28 31 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66  "(16BE)"};..  if
35e0: 28 20 66 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a  ( f&MEM_Blob ){.
35f0: 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 63      int i;.    c
3600: 68 61 72 20 63 3b 0a 20 20 20 20 69 66 28 20 66  har c;.    if( f
3610: 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20   & MEM_Dyn ){.  
3620: 20 20 20 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20      c = 'z';.   
3630: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3640: 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  (MEM_Static|MEM_
3650: 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20  Ephem))==0 );.  
3660: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
3670: 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20  MEM_Static ){.  
3680: 20 20 20 20 63 20 3d 20 27 74 27 3b 0a 20 20 20      c = 't';.   
3690: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
36a0: 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68  (MEM_Dyn|MEM_Eph
36b0: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
36c0: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
36d0: 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20  _Ephem ){.      
36e0: 63 20 3d 20 27 65 27 3b 0a 20 20 20 20 20 20 61  c = 'e';.      a
36f0: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
3700: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29  _Static|MEM_Dyn)
3710: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
3720: 65 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 73 27  e{.      c = 's'
3730: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 28 7a 43  ;.    }.    *(zC
3740: 73 72 2b 2b 29 20 3d 20 63 3b 0a 20 20 20 20 73  sr++) = c;.    s
3750: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
3760: 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 64 5b 22  100, zCsr, "%d["
3770: 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20  , pMem->n);.    
3780: 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53  zCsr += sqlite3S
3790: 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20  trlen30(zCsr);. 
37a0: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36     for(i=0; i<16
37b0: 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69   && i<pMem->n; i
37c0: 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ++){.      sqlit
37d0: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
37e0: 20 7a 43 73 72 2c 20 22 25 30 32 58 22 2c 20 28   zCsr, "%02X", (
37f0: 28 69 6e 74 29 70 4d 65 6d 2d 3e 7a 5b 69 5d 20  (int)pMem->z[i] 
3800: 26 20 30 78 46 46 29 29 3b 0a 20 20 20 20 20 20  & 0xFF));.      
3810: 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53  zCsr += sqlite3S
3820: 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20  trlen30(zCsr);. 
3830: 20 20 20 7d 0a 20 20 20 20 66 6f 72 28 69 3d 30     }.    for(i=0
3840: 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d  ; i<16 && i<pMem
3850: 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ->n; i++){.     
3860: 20 63 68 61 72 20 7a 20 3d 20 70 4d 65 6d 2d 3e   char z = pMem->
3870: 7a 5b 69 5d 3b 0a 20 20 20 20 20 20 69 66 28 20  z[i];.      if( 
3880: 7a 3c 33 32 20 7c 7c 20 7a 3e 31 32 36 20 29 20  z<32 || z>126 ) 
3890: 2a 7a 43 73 72 2b 2b 20 3d 20 27 2e 27 3b 0a 20  *zCsr++ = '.';. 
38a0: 20 20 20 20 20 65 6c 73 65 20 2a 7a 43 73 72 2b       else *zCsr+
38b0: 2b 20 3d 20 7a 3b 0a 20 20 20 20 7d 0a 20 20 20  + = z;.    }.   
38c0: 20 2a 28 7a 43 73 72 2b 2b 29 20 3d 20 27 5d 27   *(zCsr++) = ']'
38d0: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
38e0: 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20  M_Zero ){.      
38f0: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
3900: 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b 25 64 7a  (100, zCsr,"+%dz
3910: 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72 6f 29  ",pMem->u.nZero)
3920: 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20  ;.      zCsr += 
3930: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3940: 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20  zCsr);.    }.   
3950: 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27 3b 0a 20   *zCsr = '\0';. 
3960: 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d   }else if( f & M
3970: 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 69 6e  EM_Str ){.    in
3980: 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42 75 66  t j, k;.    zBuf
3990: 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20 69  [0] = ' ';.    i
39a0: 66 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29  f( f & MEM_Dyn )
39b0: 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20  {.      zBuf[1] 
39c0: 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73  = 'z';.      ass
39d0: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53  ert( (f & (MEM_S
39e0: 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29  tatic|MEM_Ephem)
39f0: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
3a00: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74  e if( f & MEM_St
3a10: 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20 7a 42  atic ){.      zB
3a20: 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a 20 20 20  uf[1] = 't';.   
3a30: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3a40: 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68  (MEM_Dyn|MEM_Eph
3a50: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
3a60: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3a70: 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20  _Ephem ){.      
3a80: 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27 3b 0a 20  zBuf[1] = 'e';. 
3a90: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20       assert( (f 
3aa0: 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  & (MEM_Static|ME
3ab0: 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20  M_Dyn))==0 );.  
3ac0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a    }else{.      z
3ad0: 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b 0a 20 20  Buf[1] = 's';.  
3ae0: 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32 3b 0a 20    }.    k = 2;. 
3af0: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
3b00: 6e 74 66 28 31 30 30 2c 20 26 7a 42 75 66 5b 6b  ntf(100, &zBuf[k
3b10: 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d 2d 3e 6e  ], "%d", pMem->n
3b20: 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69  );.    k += sqli
3b30: 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75  te3Strlen30(&zBu
3b40: 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b  f[k]);.    zBuf[
3b50: 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20 20 20 20  k++] = '[';.    
3b60: 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35 20 26 26  for(j=0; j<15 &&
3b70: 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29   j<pMem->n; j++)
3b80: 7b 0a 20 20 20 20 20 20 75 38 20 63 20 3d 20 70  {.      u8 c = p
3b90: 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20 20 20  Mem->z[j];.     
3ba0: 20 69 66 28 20 63 3e 3d 30 78 32 30 20 26 26 20   if( c>=0x20 && 
3bb0: 63 3c 30 78 37 66 20 29 7b 0a 20 20 20 20 20 20  c<0x7f ){.      
3bc0: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 63 3b    zBuf[k++] = c;
3bd0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
3be0: 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20        zBuf[k++] 
3bf0: 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 7d 0a 20  = '.';.      }. 
3c00: 20 20 20 7d 0a 20 20 20 20 7a 42 75 66 5b 6b 2b     }.    zBuf[k+
3c10: 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20 20 73 71  +] = ']';.    sq
3c20: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
3c30: 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20 65 6e 63  00,&zBuf[k], enc
3c40: 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d  names[pMem->enc]
3c50: 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69  );.    k += sqli
3c60: 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75  te3Strlen30(&zBu
3c70: 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b  f[k]);.    zBuf[
3c80: 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a  k++] = 0;.  }.}.
3c90: 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
3ca0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a  QLITE_DEBUG./*.*
3cb0: 2a 20 50 72 69 6e 74 20 74 68 65 20 76 61 6c 75  * Print the valu
3cc0: 65 20 6f 66 20 61 20 72 65 67 69 73 74 65 72 20  e of a register 
3cd0: 66 6f 72 20 74 72 61 63 69 6e 67 20 70 75 72 70  for tracing purp
3ce0: 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74 69 63 20  oses:.*/.static 
3cf0: 76 6f 69 64 20 6d 65 6d 54 72 61 63 65 50 72 69  void memTracePri
3d00: 6e 74 28 4d 65 6d 20 2a 70 29 7b 0a 20 20 69 66  nt(Mem *p){.  if
3d10: 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ( p->flags & MEM
3d20: 5f 55 6e 64 65 66 69 6e 65 64 20 29 7b 0a 20 20  _Undefined ){.  
3d30: 20 20 70 72 69 6e 74 66 28 22 20 75 6e 64 65 66    printf(" undef
3d40: 69 6e 65 64 22 29 3b 0a 20 20 7d 65 6c 73 65 20  ined");.  }else 
3d50: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3d60: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70  EM_Null ){.    p
3d70: 72 69 6e 74 66 28 22 20 4e 55 4c 4c 22 29 3b 0a  rintf(" NULL");.
3d80: 20 20 7d 65 6c 73 65 20 69 66 28 20 28 70 2d 3e    }else if( (p->
3d90: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74  flags & (MEM_Int
3da0: 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28 4d 45 4d  |MEM_Str))==(MEM
3db0: 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 20 29 7b  _Int|MEM_Str) ){
3dc0: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 73 69  .    printf(" si
3dd0: 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b  :%lld", p->u.i);
3de0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e  .  }else if( p->
3df0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
3e00: 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20  ){.    printf(" 
3e10: 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29  i:%lld", p->u.i)
3e20: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
3e30: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
3e40: 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20 69 66 28  OINT.  }else if(
3e50: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
3e60: 52 65 61 6c 20 29 7b 0a 20 20 20 20 70 72 69 6e  Real ){.    prin
3e70: 74 66 28 22 20 72 3a 25 67 22 2c 20 70 2d 3e 75  tf(" r:%g", p->u
3e80: 2e 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65  .r);.#endif.  }e
3e90: 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  lse if( p->flags
3ea0: 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 20 29 7b   & MEM_RowSet ){
3eb0: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 28 72  .    printf(" (r
3ec0: 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d 65 6c 73  owset)");.  }els
3ed0: 65 7b 0a 20 20 20 20 63 68 61 72 20 7a 42 75 66  e{.    char zBuf
3ee0: 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71 6c 69 74  [200];.    sqlit
3ef0: 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50  e3VdbeMemPrettyP
3f00: 72 69 6e 74 28 70 2c 20 7a 42 75 66 29 3b 0a 20  rint(p, zBuf);. 
3f10: 20 20 20 70 72 69 6e 74 66 28 22 20 25 73 22 2c     printf(" %s",
3f20: 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 20 20 69 66   zBuf);.  }.  if
3f30: 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ( p->flags & MEM
3f40: 5f 53 75 62 74 79 70 65 20 29 20 70 72 69 6e 74  _Subtype ) print
3f50: 66 28 22 20 73 75 62 74 79 70 65 3d 30 78 25 30  f(" subtype=0x%0
3f60: 32 78 22 2c 20 70 2d 3e 65 53 75 62 74 79 70 65  2x", p->eSubtype
3f70: 29 3b 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64  );.}.static void
3f80: 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28 69   registerTrace(i
3f90: 6e 74 20 69 52 65 67 2c 20 4d 65 6d 20 2a 70 29  nt iReg, Mem *p)
3fa0: 7b 0a 20 20 70 72 69 6e 74 66 28 22 52 45 47 5b  {.  printf("REG[
3fb0: 25 64 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b 0a  %d] = ", iReg);.
3fc0: 20 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28    memTracePrint(
3fd0: 70 29 3b 0a 20 20 70 72 69 6e 74 66 28 22 5c 6e  p);.  printf("\n
3fe0: 22 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  ");.  sqlite3Vdb
3ff0: 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61  eCheckMemInvaria
4000: 6e 74 73 28 70 29 3b 0a 7d 0a 23 65 6e 64 69 66  nts(p);.}.#endif
4010: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
4020: 44 45 42 55 47 0a 23 20 20 64 65 66 69 6e 65 20  DEBUG.#  define 
4030: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 52  REGISTER_TRACE(R
4040: 2c 4d 29 20 69 66 28 64 62 2d 3e 66 6c 61 67 73  ,M) if(db->flags
4050: 26 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63  &SQLITE_VdbeTrac
4060: 65 29 72 65 67 69 73 74 65 72 54 72 61 63 65 28  e)registerTrace(
4070: 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 20 64 65  R,M).#else.#  de
4080: 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52  fine REGISTER_TR
4090: 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64 69 66 0a  ACE(R,M).#endif.
40a0: 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  ..#ifdef VDBE_PR
40b0: 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77  OFILE../* .** hw
40c0: 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69 6e 73 20  time.h contains 
40d0: 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62 6c 65 72  inline assembler
40e0: 20 63 6f 64 65 20 66 6f 72 20 69 6d 70 6c 65 6d   code for implem
40f0: 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69 67 68 2d  enting .** high-
4100: 70 65 72 66 6f 72 6d 61 6e 63 65 20 74 69 6d 69  performance timi
4110: 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a  ng routines..*/.
4120: 23 69 6e 63 6c 75 64 65 20 22 68 77 74 69 6d 65  #include "hwtime
4130: 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a 23 69 66  .h"..#endif..#if
4140: 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a  ndef NDEBUG./*.*
4150: 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  * This function 
4160: 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65 64 20 66  is only called f
4170: 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20 61 73  rom within an as
4180: 73 65 72 74 28 29 20 65 78 70 72 65 73 73 69 6f  sert() expressio
4190: 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63 6b 73 20  n. It.** checks 
41a0: 74 68 61 74 20 74 68 65 20 73 71 6c 69 74 65 33  that the sqlite3
41b0: 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e 20 76 61  .nTransaction va
41c0: 72 69 61 62 6c 65 20 69 73 20 63 6f 72 72 65 63  riable is correc
41d0: 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68  tly set to.** th
41e0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d  e number of non-
41f0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
4200: 70 6f 69 6e 74 73 20 63 75 72 72 65 6e 74 6c 79  points currently
4210: 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b   in the .** link
4220: 65 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67  ed list starting
4230: 20 61 74 20 73 71 6c 69 74 65 33 2e 70 53 61 76   at sqlite3.pSav
4240: 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55  epoint..** .** U
4250: 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  sage:.**.**     
4260: 61 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76  assert( checkSav
4270: 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20  epointCount(db) 
4280: 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  );.*/.static int
4290: 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43   checkSavepointC
42a0: 6f 75 6e 74 28 73 71 6c 69 74 65 33 20 2a 64 62  ount(sqlite3 *db
42b0: 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a  ){.  int n = 0;.
42c0: 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 3b 0a    Savepoint *p;.
42d0: 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70 53 61 76    for(p=db->pSav
42e0: 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e  epoint; p; p=p->
42f0: 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20 20 61 73  pNext) n++;.  as
4300: 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53  sert( n==(db->nS
4310: 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 69  avepoint + db->i
4320: 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
4330: 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72 65 74 75  point) );.  retu
4340: 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  rn 1;.}.#endif..
4350: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  /*.** Return the
4360: 20 72 65 67 69 73 74 65 72 20 6f 66 20 70 4f 70   register of pOp
4370: 2d 3e 70 32 20 61 66 74 65 72 20 66 69 72 73 74  ->p2 after first
4380: 20 70 72 65 70 61 72 69 6e 67 20 69 74 20 74 6f   preparing it to
4390: 20 62 65 0a 2a 2a 20 6f 76 65 72 77 72 69 74 74   be.** overwritt
43a0: 65 6e 20 77 69 74 68 20 61 6e 20 69 6e 74 65 67  en with an integ
43b0: 65 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61  er value..*/.sta
43c0: 74 69 63 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  tic SQLITE_NOINL
43d0: 49 4e 45 20 4d 65 6d 20 2a 6f 75 74 32 50 72 65  INE Mem *out2Pre
43e0: 72 65 6c 65 61 73 65 57 69 74 68 43 6c 65 61 72  releaseWithClear
43f0: 28 4d 65 6d 20 2a 70 4f 75 74 29 7b 0a 20 20 73  (Mem *pOut){.  s
4400: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
4410: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 70 4f  Null(pOut);.  pO
4420: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
4430: 49 6e 74 3b 0a 20 20 72 65 74 75 72 6e 20 70 4f  Int;.  return pO
4440: 75 74 3b 0a 7d 0a 73 74 61 74 69 63 20 4d 65 6d  ut;.}.static Mem
4450: 20 2a 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65   *out2Prerelease
4460: 28 56 64 62 65 20 2a 70 2c 20 56 64 62 65 4f 70  (Vdbe *p, VdbeOp
4470: 20 2a 70 4f 70 29 7b 0a 20 20 4d 65 6d 20 2a 70   *pOp){.  Mem *p
4480: 4f 75 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Out;.  assert( p
4490: 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73  Op->p2>0 );.  as
44a0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28  sert( pOp->p2<=(
44b0: 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
44c0: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75  Cursor) );.  pOu
44d0: 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  t = &p->aMem[pOp
44e0: 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p2];.  memAbou
44f0: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
4500: 74 29 3b 0a 20 20 69 66 28 20 56 64 62 65 4d 65  t);.  if( VdbeMe
4510: 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 20 29  mDynamic(pOut) )
4520: 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e  { /*OPTIMIZATION
4530: 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20  -IF-FALSE*/.    
4540: 72 65 74 75 72 6e 20 6f 75 74 32 50 72 65 72 65  return out2Prere
4550: 6c 65 61 73 65 57 69 74 68 43 6c 65 61 72 28 70  leaseWithClear(p
4560: 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  Out);.  }else{. 
4570: 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
4580: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 72 65   MEM_Int;.    re
4590: 74 75 72 6e 20 70 4f 75 74 3b 0a 20 20 7d 0a 7d  turn pOut;.  }.}
45a0: 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65  .../*.** Execute
45b0: 20 61 73 20 6d 75 63 68 20 6f 66 20 61 20 56 44   as much of a VD
45c0: 42 45 20 70 72 6f 67 72 61 6d 20 61 73 20 77 65  BE program as we
45d0: 20 63 61 6e 2e 0a 2a 2a 20 54 68 69 73 20 69 73   can..** This is
45e0: 20 74 68 65 20 63 6f 72 65 20 6f 66 20 73 71 6c   the core of sql
45f0: 69 74 65 33 5f 73 74 65 70 28 29 2e 20 20 0a 2a  ite3_step().  .*
4600: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62  /.int sqlite3Vdb
4610: 65 45 78 65 63 28 0a 20 20 56 64 62 65 20 2a 70  eExec(.  Vdbe *p
4620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4630: 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20      /* The VDBE 
4640: 2a 2f 0a 29 7b 0a 20 20 4f 70 20 2a 61 4f 70 20  */.){.  Op *aOp 
4650: 3d 20 70 2d 3e 61 4f 70 3b 20 20 20 20 20 20 20  = p->aOp;       
4660: 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d     /* Copy of p-
4670: 3e 61 4f 70 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f  >aOp */.  Op *pO
4680: 70 20 3d 20 61 4f 70 3b 20 20 20 20 20 20 20 20  p = aOp;        
4690: 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
46a0: 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66  operation */.#if
46b0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
46c0: 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65  DEBUG) || define
46d0: 64 28 56 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a  d(VDBE_PROFILE).
46e0: 20 20 4f 70 20 2a 70 4f 72 69 67 4f 70 3b 20 20    Op *pOrigOp;  
46f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4700: 56 61 6c 75 65 20 6f 66 20 70 4f 70 20 61 74 20  Value of pOp at 
4710: 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20 6c  the top of the l
4720: 6f 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  oop */.#endif.#i
4730: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
4740: 47 0a 20 20 69 6e 74 20 6e 45 78 74 72 61 44 65  G.  int nExtraDe
4750: 6c 65 74 65 20 3d 20 30 3b 20 20 20 20 20 20 2f  lete = 0;      /
4760: 2a 20 56 65 72 69 66 69 65 73 20 46 4f 52 44 45  * Verifies FORDE
4770: 4c 45 54 45 20 61 6e 64 20 41 55 58 44 45 4c 45  LETE and AUXDELE
4780: 54 45 20 66 6c 61 67 73 20 2a 2f 0a 23 65 6e 64  TE flags */.#end
4790: 69 66 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51  if.  int rc = SQ
47a0: 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20  LITE_OK;        
47b0: 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75  /* Value to retu
47c0: 72 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  rn */.  sqlite3 
47d0: 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20  *db = p->db;    
47e0: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
47f0: 73 65 20 2a 2f 0a 20 20 75 38 20 72 65 73 65 74  se */.  u8 reset
4800: 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20  SchemaOnFault = 
4810: 30 3b 20 2f 2a 20 52 65 73 65 74 20 73 63 68 65  0; /* Reset sche
4820: 6d 61 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f  ma after an erro
4830: 72 20 69 66 20 70 6f 73 69 74 69 76 65 20 2a 2f  r if positive */
4840: 0a 20 20 75 38 20 65 6e 63 6f 64 69 6e 67 20 3d  .  u8 encoding =
4850: 20 45 4e 43 28 64 62 29 3b 20 20 20 20 20 2f 2a   ENC(db);     /*
4860: 20 54 68 65 20 64 61 74 61 62 61 73 65 20 65 6e   The database en
4870: 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  coding */.  int 
4880: 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b 20 20 20  iCompare = 0;   
4890: 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
48a0: 20 6f 66 20 6c 61 73 74 20 63 6f 6d 70 61 72 69   of last compari
48b0: 73 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  son */.  unsigne
48c0: 64 20 6e 56 6d 53 74 65 70 20 3d 20 30 3b 20 20  d nVmStep = 0;  
48d0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
48e0: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
48f0: 20 73 74 65 70 73 20 2a 2f 0a 23 69 66 6e 64 65   steps */.#ifnde
4900: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
4910: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
4920: 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67    unsigned nProg
4930: 72 65 73 73 4c 69 6d 69 74 3b 20 20 20 2f 2a 20  ressLimit;   /* 
4940: 49 6e 76 6f 6b 65 20 78 50 72 6f 67 72 65 73 73  Invoke xProgress
4950: 28 29 20 77 68 65 6e 20 6e 56 6d 53 74 65 70 20  () when nVmStep 
4960: 72 65 61 63 68 65 73 20 74 68 69 73 20 2a 2f 0a  reaches this */.
4970: 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a 61 4d  #endif.  Mem *aM
4980: 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20 20 20  em = p->aMem;   
4990: 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70      /* Copy of p
49a0: 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65 6d 20  ->aMem */.  Mem 
49b0: 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20 20 20 20  *pIn1 = 0;      
49c0: 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 69 6e         /* 1st in
49d0: 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  put operand */. 
49e0: 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30 3b 20   Mem *pIn2 = 0; 
49f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32              /* 2
4a00: 6e 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64  nd input operand
4a10: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 33 20   */.  Mem *pIn3 
4a20: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
4a30: 20 2f 2a 20 33 72 64 20 69 6e 70 75 74 20 6f 70   /* 3rd input op
4a40: 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  erand */.  Mem *
4a50: 70 4f 75 74 20 3d 20 30 3b 20 20 20 20 20 20 20  pOut = 0;       
4a60: 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 20        /* Output 
4a70: 6f 70 65 72 61 6e 64 20 2a 2f 0a 23 69 66 64 65  operand */.#ifde
4a80: 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20  f VDBE_PROFILE. 
4a90: 20 75 36 34 20 73 74 61 72 74 3b 20 20 20 20 20   u64 start;     
4aa0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
4ab0: 50 55 20 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61  PU clock count a
4ac0: 74 20 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64  t start of opcod
4ad0: 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 2f 2a  e */.#endif.  /*
4ae0: 2a 2a 20 49 4e 53 45 52 54 20 53 54 41 43 4b 20  ** INSERT STACK 
4af0: 55 4e 49 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a  UNION HERE ***/.
4b00: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6d 61  .  assert( p->ma
4b10: 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f  gic==VDBE_MAGIC_
4b20: 52 55 4e 20 29 3b 20 20 2f 2a 20 73 71 6c 69 74  RUN );  /* sqlit
4b30: 65 33 5f 73 74 65 70 28 29 20 76 65 72 69 66 69  e3_step() verifi
4b40: 65 73 20 74 68 69 73 20 2a 2f 0a 20 20 73 71 6c  es this */.  sql
4b50: 69 74 65 33 56 64 62 65 45 6e 74 65 72 28 70 29  ite3VdbeEnter(p)
4b60: 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53  ;.  if( p->rc==S
4b70: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20  QLITE_NOMEM ){. 
4b80: 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65     /* This happe
4b90: 6e 73 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29  ns if a malloc()
4ba0: 20 69 6e 73 69 64 65 20 61 20 63 61 6c 6c 20 74   inside a call t
4bb0: 6f 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  o sqlite3_column
4bc0: 5f 74 65 78 74 28 29 20 6f 72 0a 20 20 20 20 2a  _text() or.    *
4bd0: 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  * sqlite3_column
4be0: 5f 74 65 78 74 31 36 28 29 20 66 61 69 6c 65 64  _text16() failed
4bf0: 2e 20 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e  .  */.    goto n
4c00: 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73  o_mem;.  }.  ass
4c10: 65 72 74 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49  ert( p->rc==SQLI
4c20: 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63 26  TE_OK || (p->rc&
4c30: 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 42 55  0xff)==SQLITE_BU
4c40: 53 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  SY );.  assert( 
4c50: 70 2d 3e 62 49 73 52 65 61 64 65 72 20 7c 7c 20  p->bIsReader || 
4c60: 70 2d 3e 72 65 61 64 4f 6e 6c 79 21 3d 30 20 29  p->readOnly!=0 )
4c70: 3b 0a 20 20 70 2d 3e 69 43 75 72 72 65 6e 74 54  ;.  p->iCurrentT
4c80: 69 6d 65 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  ime = 0;.  asser
4c90: 74 28 20 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30  t( p->explain==0
4ca0: 20 29 3b 0a 20 20 70 2d 3e 70 52 65 73 75 6c 74   );.  p->pResult
4cb0: 53 65 74 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62  Set = 0;.  db->b
4cc0: 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79  usyHandler.nBusy
4cd0: 20 3d 20 30 3b 0a 20 20 69 66 28 20 64 62 2d 3e   = 0;.  if( db->
4ce0: 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64  u1.isInterrupted
4cf0: 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
4d00: 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a  e_to_interrupt;.
4d10: 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54    sqlite3VdbeIOT
4d20: 72 61 63 65 53 71 6c 28 70 29 3b 0a 23 69 66 6e  raceSql(p);.#ifn
4d30: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
4d40: 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43  PROGRESS_CALLBAC
4d50: 4b 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f  K.  if( db->xPro
4d60: 67 72 65 73 73 20 29 7b 0a 20 20 20 20 75 33 32  gress ){.    u32
4d70: 20 69 50 72 69 6f 72 20 3d 20 70 2d 3e 61 43 6f   iPrior = p->aCo
4d80: 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d  unter[SQLITE_STM
4d90: 54 53 54 41 54 55 53 5f 56 4d 5f 53 54 45 50 5d  TSTATUS_VM_STEP]
4da0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 30 20  ;.    assert( 0 
4db0: 3c 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f  < db->nProgressO
4dc0: 70 73 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72  ps );.    nProgr
4dd0: 65 73 73 4c 69 6d 69 74 20 3d 20 64 62 2d 3e 6e  essLimit = db->n
4de0: 50 72 6f 67 72 65 73 73 4f 70 73 20 2d 20 28 69  ProgressOps - (i
4df0: 50 72 69 6f 72 20 25 20 64 62 2d 3e 6e 50 72 6f  Prior % db->nPro
4e00: 67 72 65 73 73 4f 70 73 29 3b 0a 20 20 7d 65 6c  gressOps);.  }el
4e10: 73 65 7b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73  se{.    nProgres
4e20: 73 4c 69 6d 69 74 20 3d 20 30 78 66 66 66 66 66  sLimit = 0xfffff
4e30: 66 66 66 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  fff;.  }.#endif.
4e40: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
4e50: 42 55 47 0a 20 20 73 71 6c 69 74 65 33 42 65 67  BUG.  sqlite3Beg
4e60: 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  inBenignMalloc()
4e70: 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d 3d 30  ;.  if( p->pc==0
4e80: 0a 20 20 20 26 26 20 28 70 2d 3e 64 62 2d 3e 66  .   && (p->db->f
4e90: 6c 61 67 73 20 26 20 28 53 51 4c 49 54 45 5f 56  lags & (SQLITE_V
4ea0: 64 62 65 4c 69 73 74 69 6e 67 7c 53 51 4c 49 54  dbeListing|SQLIT
4eb0: 45 5f 56 64 62 65 45 51 50 7c 53 51 4c 49 54 45  E_VdbeEQP|SQLITE
4ec0: 5f 56 64 62 65 54 72 61 63 65 29 29 21 3d 30 0a  _VdbeTrace))!=0.
4ed0: 20 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a    ){.    int i;.
4ee0: 20 20 20 20 69 6e 74 20 6f 6e 63 65 20 3d 20 31      int once = 1
4ef0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
4f00: 65 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20  ePrintSql(p);.  
4f10: 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61    if( p->db->fla
4f20: 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65  gs & SQLITE_Vdbe
4f30: 4c 69 73 74 69 6e 67 20 29 7b 0a 20 20 20 20 20  Listing ){.     
4f40: 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 50 72   printf("VDBE Pr
4f50: 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e  ogram Listing:\n
4f60: 22 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d  ");.      for(i=
4f70: 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b  0; i<p->nOp; i++
4f80: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
4f90: 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74  e3VdbePrintOp(st
4fa0: 64 6f 75 74 2c 20 69 2c 20 26 61 4f 70 5b 69 5d  dout, i, &aOp[i]
4fb0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
4fc0: 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e  .    if( p->db->
4fd0: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
4fe0: 64 62 65 45 51 50 20 29 7b 0a 20 20 20 20 20 20  dbeEQP ){.      
4ff0: 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f  for(i=0; i<p->nO
5000: 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  p; i++){.       
5010: 20 69 66 28 20 61 4f 70 5b 69 5d 2e 6f 70 63 6f   if( aOp[i].opco
5020: 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29  de==OP_Explain )
5030: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  {.          if( 
5040: 6f 6e 63 65 20 29 20 70 72 69 6e 74 66 28 22 56  once ) printf("V
5050: 44 42 45 20 51 75 65 72 79 20 50 6c 61 6e 3a 5c  DBE Query Plan:\
5060: 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70  n");.          p
5070: 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20 61 4f  rintf("%s\n", aO
5080: 70 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20 20 20 20  p[i].p4.z);.    
5090: 20 20 20 20 20 20 6f 6e 63 65 20 3d 20 30 3b 0a        once = 0;.
50a0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
50b0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  }.    }.    if( 
50c0: 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  p->db->flags & S
50d0: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20  QLITE_VdbeTrace 
50e0: 29 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20  )  printf("VDBE 
50f0: 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 7d 0a  Trace:\n");.  }.
5100: 20 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69    sqlite3EndBeni
5110: 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64  gnMalloc();.#end
5120: 69 66 0a 20 20 66 6f 72 28 70 4f 70 3d 26 61 4f  if.  for(pOp=&aO
5130: 70 5b 70 2d 3e 70 63 5d 3b 20 31 3b 20 70 4f 70  p[p->pc]; 1; pOp
5140: 2b 2b 29 7b 0a 20 20 20 20 2f 2a 20 45 72 72 6f  ++){.    /* Erro
5150: 72 73 20 61 72 65 20 64 65 74 65 63 74 65 64 20  rs are detected 
5160: 62 79 20 69 6e 64 69 76 69 64 75 61 6c 20 6f 70  by individual op
5170: 63 6f 64 65 73 2c 20 77 69 74 68 20 61 6e 20 69  codes, with an i
5180: 6d 6d 65 64 69 61 74 65 0a 20 20 20 20 2a 2a 20  mmediate.    ** 
5190: 6a 75 6d 70 73 20 74 6f 20 61 62 6f 72 74 5f 64  jumps to abort_d
51a0: 75 65 5f 74 6f 5f 65 72 72 6f 72 2e 20 2a 2f 0a  ue_to_error. */.
51b0: 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
51c0: 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20  SQLITE_OK );..  
51d0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e 3d 61    assert( pOp>=a
51e0: 4f 70 20 26 26 20 70 4f 70 3c 26 61 4f 70 5b 70  Op && pOp<&aOp[p
51f0: 2d 3e 6e 4f 70 5d 29 3b 0a 23 69 66 64 65 66 20  ->nOp]);.#ifdef 
5200: 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20  VDBE_PROFILE.   
5210: 20 73 74 61 72 74 20 3d 20 73 71 6c 69 74 65 33   start = sqlite3
5220: 48 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64 69 66  Hwtime();.#endif
5230: 0a 20 20 20 20 6e 56 6d 53 74 65 70 2b 2b 3b 0a  .    nVmStep++;.
5240: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
5250: 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54  ABLE_STMT_SCANST
5260: 41 54 55 53 0a 20 20 20 20 69 66 28 20 70 2d 3e  ATUS.    if( p->
5270: 61 6e 45 78 65 63 20 29 20 70 2d 3e 61 6e 45 78  anExec ) p->anEx
5280: 65 63 5b 28 69 6e 74 29 28 70 4f 70 2d 61 4f 70  ec[(int)(pOp-aOp
5290: 29 5d 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  )]++;.#endif..  
52a0: 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20    /* Only allow 
52b0: 74 72 61 63 69 6e 67 20 69 66 20 53 51 4c 49 54  tracing if SQLIT
52c0: 45 5f 44 45 42 55 47 20 69 73 20 64 65 66 69 6e  E_DEBUG is defin
52d0: 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65  ed..    */.#ifde
52e0: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
52f0: 20 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73     if( db->flags
5300: 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72   & SQLITE_VdbeTr
5310: 61 63 65 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ace ){.      sql
5320: 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28  ite3VdbePrintOp(
5330: 73 74 64 6f 75 74 2c 20 28 69 6e 74 29 28 70 4f  stdout, (int)(pO
5340: 70 20 2d 20 61 4f 70 29 2c 20 70 4f 70 29 3b 0a  p - aOp), pOp);.
5350: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20      }.#endif.   
5360: 20 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63     ..    /* Chec
5370: 6b 20 74 6f 20 73 65 65 20 69 66 20 77 65 20 6e  k to see if we n
5380: 65 65 64 20 74 6f 20 73 69 6d 75 6c 61 74 65 20  eed to simulate 
5390: 61 6e 20 69 6e 74 65 72 72 75 70 74 2e 20 20 54  an interrupt.  T
53a0: 68 69 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73  his only happens
53b0: 0a 20 20 20 20 2a 2a 20 69 66 20 77 65 20 68 61  .    ** if we ha
53c0: 76 65 20 61 20 73 70 65 63 69 61 6c 20 74 65 73  ve a special tes
53d0: 74 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a  t build..    */.
53e0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
53f0: 53 54 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  ST.    if( sqlit
5400: 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75  e3_interrupt_cou
5410: 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71  nt>0 ){.      sq
5420: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f  lite3_interrupt_
5430: 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69  count--;.      i
5440: 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  f( sqlite3_inter
5450: 72 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b  rupt_count==0 ){
5460: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
5470: 5f 69 6e 74 65 72 72 75 70 74 28 64 62 29 3b 0a  _interrupt(db);.
5480: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65        }.    }.#e
5490: 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 53 61 6e  ndif..    /* San
54a0: 69 74 79 20 63 68 65 63 6b 69 6e 67 20 6f 6e 20  ity checking on 
54b0: 6f 74 68 65 72 20 6f 70 65 72 61 6e 64 73 20 2a  other operands *
54c0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
54d0: 44 45 42 55 47 0a 20 20 20 20 7b 0a 20 20 20 20  DEBUG.    {.    
54e0: 20 20 75 38 20 6f 70 50 72 6f 70 65 72 74 79 20    u8 opProperty 
54f0: 3d 20 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50  = sqlite3OpcodeP
5500: 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63  roperty[pOp->opc
5510: 6f 64 65 5d 3b 0a 20 20 20 20 20 20 69 66 28 20  ode];.      if( 
5520: 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50  (opProperty & OP
5530: 46 4c 47 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20  FLG_IN1)!=0 ){. 
5540: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
5550: 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20  Op->p1>0 );.    
5560: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5570: 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p1<=(p->nMem+1 
5580: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
5590: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
55a0: 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
55b0: 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20  m[pOp->p1]) );. 
55c0: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73         assert( s
55d0: 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d  qlite3VdbeCheckM
55e0: 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d  emInvariants(&aM
55f0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a  em[pOp->p1]) );.
5600: 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52          REGISTER
5610: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20  _TRACE(pOp->p1, 
5620: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b  &aMem[pOp->p1]);
5630: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
5640: 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26  f( (opProperty &
5650: 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29   OPFLG_IN2)!=0 )
5660: 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
5670: 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
5680: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
5690: 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p2<=(p->nMem
56a0: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
56b0: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
56c0: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
56d0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29  aMem[pOp->p2]) )
56e0: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
56f0: 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  ( sqlite3VdbeChe
5700: 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28  ckMemInvariants(
5710: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20  &aMem[pOp->p2]) 
5720: 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53  );.        REGIS
5730: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
5740: 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  2, &aMem[pOp->p2
5750: 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ]);.      }.    
5760: 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74    if( (opPropert
5770: 79 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d  y & OPFLG_IN3)!=
5780: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  0 ){.        ass
5790: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
57a0: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
57b0: 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  ( pOp->p3<=(p->n
57c0: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
57d0: 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  or) );.        a
57e0: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
57f0: 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  d(&aMem[pOp->p3]
5800: 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ) );.        ass
5810: 65 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65  ert( sqlite3Vdbe
5820: 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e  CheckMemInvarian
5830: 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  ts(&aMem[pOp->p3
5840: 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20 52 45  ]) );.        RE
5850: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
5860: 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ->p3, &aMem[pOp-
5870: 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20  >p3]);.      }. 
5880: 20 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70       if( (opProp
5890: 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54  erty & OPFLG_OUT
58a0: 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  2)!=0 ){.       
58b0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
58c0: 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  >0 );.        as
58d0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28  sert( pOp->p2<=(
58e0: 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
58f0: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
5900: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
5910: 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70  nge(p, &aMem[pOp
5920: 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a  ->p2]);.      }.
5930: 20 20 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f        if( (opPro
5940: 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55  perty & OPFLG_OU
5950: 54 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  T3)!=0 ){.      
5960: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5970: 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61  3>0 );.        a
5980: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
5990: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
59a0: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
59b0: 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
59c0: 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f  ange(p, &aMem[pO
59d0: 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d  p->p3]);.      }
59e0: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69  .    }.#endif.#i
59f0: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
5a00: 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e  _DEBUG) || defin
5a10: 65 64 28 56 44 42 45 5f 50 52 4f 46 49 4c 45 29  ed(VDBE_PROFILE)
5a20: 0a 20 20 20 20 70 4f 72 69 67 4f 70 20 3d 20 70  .    pOrigOp = p
5a30: 4f 70 3b 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20  Op;.#endif.  .  
5a40: 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f    switch( pOp->o
5a50: 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a  pcode ){../*****
5a60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a70: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a80: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a90: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5aa0: 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68 61 74  ********.** What
5ab0: 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20 6d 61   follows is a ma
5ac0: 73 73 69 76 65 20 73 77 69 74 63 68 20 73 74 61  ssive switch sta
5ad0: 74 65 6d 65 6e 74 20 77 68 65 72 65 20 65 61 63  tement where eac
5ae0: 68 20 63 61 73 65 20 69 6d 70 6c 65 6d 65 6e 74  h case implement
5af0: 73 20 61 0a 2a 2a 20 73 65 70 61 72 61 74 65 20  s a.** separate 
5b00: 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 20 74  instruction in t
5b10: 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  he virtual machi
5b20: 6e 65 2e 20 20 49 66 20 77 65 20 66 6f 6c 6c 6f  ne.  If we follo
5b30: 77 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a 20 69  w the usual.** i
5b40: 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e 76 65  ndentation conve
5b50: 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20 63 61 73  ntions, each cas
5b60: 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65  e should be inde
5b70: 6e 74 65 64 20 62 79 20 36 20 73 70 61 63 65 73  nted by 6 spaces
5b80: 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74 20 69  .  But.** that i
5b90: 73 20 61 20 6c 6f 74 20 6f 66 20 77 61 73 74 65  s a lot of waste
5ba0: 64 20 73 70 61 63 65 20 6f 6e 20 74 68 65 20 6c  d space on the l
5bb0: 65 66 74 20 6d 61 72 67 69 6e 2e 20 20 53 6f 20  eft margin.  So 
5bc0: 74 68 65 20 63 6f 64 65 20 77 69 74 68 69 6e 0a  the code within.
5bd0: 2a 2a 20 74 68 65 20 73 77 69 74 63 68 20 73 74  ** the switch st
5be0: 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62 72 65  atement will bre
5bf0: 61 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e 74 69  ak with conventi
5c00: 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75 73 68 2d  on and be flush-
5c10: 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a 2a 2a  left. Another.**
5c20: 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28 73 69   big comment (si
5c30: 6d 69 6c 61 72 20 74 6f 20 74 68 69 73 20 6f 6e  milar to this on
5c40: 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74 68 65  e) will mark the
5c50: 20 70 6f 69 6e 74 20 69 6e 20 74 68 65 20 63 6f   point in the co
5c60: 64 65 20 77 68 65 72 65 0a 2a 2a 20 77 65 20 74  de where.** we t
5c70: 72 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b 20 74  ransition back t
5c80: 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61  o normal indenta
5c90: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  tion..**.** The 
5ca0: 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20 65 61  formatting of ea
5cb0: 63 68 20 63 61 73 65 20 69 73 20 69 6d 70 6f 72  ch case is impor
5cc0: 74 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b 65 66  tant.  The makef
5cd0: 69 6c 65 20 66 6f 72 20 53 51 4c 69 74 65 0a 2a  ile for SQLite.*
5ce0: 2a 20 67 65 6e 65 72 61 74 65 73 20 74 77 6f 20  * generates two 
5cf0: 43 20 66 69 6c 65 73 20 22 6f 70 63 6f 64 65 73  C files "opcodes
5d00: 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f 64 65 73  .h" and "opcodes
5d10: 2e 63 22 20 62 79 20 73 63 61 6e 6e 69 6e 67 20  .c" by scanning 
5d20: 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c 6f 6f  this.** file loo
5d30: 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73 20 74  king for lines t
5d40: 68 61 74 20 62 65 67 69 6e 20 77 69 74 68 20 22  hat begin with "
5d50: 63 61 73 65 20 4f 50 5f 22 2e 20 20 54 68 65 20  case OP_".  The 
5d60: 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c 65 73 0a  opcodes.h files.
5d70: 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c 6c 65  ** will be fille
5d80: 64 20 77 69 74 68 20 23 64 65 66 69 6e 65 73 20  d with #defines 
5d90: 74 68 61 74 20 67 69 76 65 20 75 6e 69 71 75 65  that give unique
5da0: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 20   integer values 
5db0: 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63 6f 64  to each.** opcod
5dc0: 65 20 61 6e 64 20 74 68 65 20 6f 70 63 6f 64 65  e and the opcode
5dd0: 73 2e 63 20 66 69 6c 65 20 69 73 20 66 69 6c 6c  s.c file is fill
5de0: 65 64 20 77 69 74 68 20 61 6e 20 61 72 72 61 79  ed with an array
5df0: 20 6f 66 20 73 74 72 69 6e 67 73 20 77 68 65 72   of strings wher
5e00: 65 0a 2a 2a 20 65 61 63 68 20 73 74 72 69 6e 67  e.** each string
5e10: 20 69 73 20 74 68 65 20 73 79 6d 62 6f 6c 69 63   is the symbolic
5e20: 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 63 6f   name for the co
5e30: 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70 63 6f  rresponding opco
5e40: 64 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 63  de.  If the.** c
5e50: 61 73 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ase statement is
5e60: 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63   followed by a c
5e70: 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20 66 6f  omment of the fo
5e80: 72 6d 20 22 2f 23 20 73 61 6d 65 20 61 73 20 2e  rm "/# same as .
5e90: 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74 20 63  .. #/".** that c
5ea0: 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74  omment is used t
5eb0: 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o determine the 
5ec0: 70 61 72 74 69 63 75 6c 61 72 20 76 61 6c 75 65  particular value
5ed0: 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 0a   of the opcode..
5ee0: 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65 79 77  **.** Other keyw
5ef0: 6f 72 64 73 20 69 6e 20 74 68 65 20 63 6f 6d 6d  ords in the comm
5f00: 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73  ent that follows
5f10: 20 65 61 63 68 20 63 61 73 65 20 61 72 65 20 75   each case are u
5f20: 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73 74 72  sed to.** constr
5f30: 75 63 74 20 74 68 65 20 4f 50 46 4c 47 5f 49 4e  uct the OPFLG_IN
5f40: 49 54 49 41 4c 49 5a 45 52 20 76 61 6c 75 65 20  ITIALIZER value 
5f50: 74 68 61 74 20 69 6e 69 74 69 61 6c 69 7a 65 73  that initializes
5f60: 20 6f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b   opcodeProperty[
5f70: 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73 20 69  ]..** Keywords i
5f80: 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69 6e 32  nclude: in1, in2
5f90: 2c 20 69 6e 33 2c 20 6f 75 74 32 2c 20 6f 75 74  , in3, out2, out
5fa0: 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68 65 20 6d  3.  See.** the m
5fb0: 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20 73 63 72  kopcodeh.awk scr
5fc0: 69 70 74 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ipt for addition
5fd0: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
5fe0: 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74 61 74  **.** Documentat
5ff0: 69 6f 6e 20 61 62 6f 75 74 20 56 44 42 45 20 6f  ion about VDBE o
6000: 70 63 6f 64 65 73 20 69 73 20 67 65 6e 65 72 61  pcodes is genera
6010: 74 65 64 20 62 79 20 73 63 61 6e 6e 69 6e 67 20  ted by scanning 
6020: 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20 66 6f 72  this file.** for
6030: 20 6c 69 6e 65 73 20 6f 66 20 74 68 61 74 20 63   lines of that c
6040: 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64 65 3a 22  ontain "Opcode:"
6050: 2e 20 20 54 68 61 74 20 6c 69 6e 65 20 61 6e 64  .  That line and
6060: 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 0a   all subsequent.
6070: 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e 65 73  ** comment lines
6080: 20 61 72 65 20 75 73 65 64 20 69 6e 20 74 68 65   are used in the
6090: 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74   generation of t
60a0: 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d 6c 20 64  he opcode.html d
60b0: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20  ocumentation.** 
60c0: 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d  file..**.** SUMM
60d0: 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 46  ARY:.**.**     F
60e0: 6f 72 6d 61 74 74 69 6e 67 20 69 73 20 69 6d 70  ormatting is imp
60f0: 6f 72 74 61 6e 74 20 74 6f 20 73 63 72 69 70 74  ortant to script
6100: 73 20 74 68 61 74 20 73 63 61 6e 20 74 68 69 73  s that scan this
6110: 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20 20 44 6f   file..**     Do
6120: 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72 6f   not deviate fro
6130: 6d 20 74 68 65 20 66 6f 72 6d 61 74 74 69 6e 67  m the formatting
6140: 20 73 74 79 6c 65 20 63 75 72 72 65 6e 74 6c 79   style currently
6150: 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a   in use..**.****
6160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6170: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6180: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6190: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
61a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f  *********/../* O
61b0: 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20 2a 20 50  pcode:  Goto * P
61c0: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e  2 * * *.**.** An
61d0: 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 6a   unconditional j
61e0: 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50  ump to address P
61f0: 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 69  2..** The next i
6200: 6e 73 74 72 75 63 74 69 6f 6e 20 65 78 65 63 75  nstruction execu
6210: 74 65 64 20 77 69 6c 6c 20 62 65 20 0a 2a 2a 20  ted will be .** 
6220: 74 68 65 20 6f 6e 65 20 61 74 20 69 6e 64 65 78  the one at index
6230: 20 50 32 20 66 72 6f 6d 20 74 68 65 20 62 65 67   P2 from the beg
6240: 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74 68 65  inning of.** the
6250: 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20   program..**.** 
6260: 54 68 65 20 50 31 20 70 61 72 61 6d 65 74 65 72  The P1 parameter
6270: 20 69 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79   is not actually
6280: 20 75 73 65 64 20 62 79 20 74 68 69 73 20 6f 70   used by this op
6290: 63 6f 64 65 2e 20 20 48 6f 77 65 76 65 72 2c 20  code.  However, 
62a0: 69 74 0a 2a 2a 20 69 73 20 73 6f 6d 65 74 69 6d  it.** is sometim
62b0: 65 73 20 73 65 74 20 74 6f 20 31 20 69 6e 73 74  es set to 1 inst
62c0: 65 61 64 20 6f 66 20 30 20 61 73 20 61 20 68 69  ead of 0 as a hi
62d0: 6e 74 20 74 6f 20 74 68 65 20 63 6f 6d 6d 61 6e  nt to the comman
62e0: 64 2d 6c 69 6e 65 20 73 68 65 6c 6c 0a 2a 2a 20  d-line shell.** 
62f0: 74 68 61 74 20 74 68 69 73 20 47 6f 74 6f 20 69  that this Goto i
6300: 73 20 74 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20  s the bottom of 
6310: 61 20 6c 6f 6f 70 20 61 6e 64 20 74 68 61 74 20  a loop and that 
6320: 74 68 65 20 6c 69 6e 65 73 20 66 72 6f 6d 20 50  the lines from P
6330: 32 20 64 6f 77 6e 0a 2a 2a 20 74 6f 20 74 68 65  2 down.** to the
6340: 20 63 75 72 72 65 6e 74 20 6c 69 6e 65 20 73 68   current line sh
6350: 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e 74 65 64  ould be indented
6360: 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74   for EXPLAIN out
6370: 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  put..*/.case OP_
6380: 47 6f 74 6f 3a 20 7b 20 20 20 20 20 20 20 20 20  Goto: {         
6390: 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 6a      /* jump */.j
63a0: 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68  ump_to_p2_and_ch
63b0: 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70  eck_for_interrup
63c0: 74 3a 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b  t:.  pOp = &aOp[
63d0: 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 0a 20  pOp->p2 - 1];.. 
63e0: 20 2f 2a 20 4f 70 63 6f 64 65 73 20 74 68 61 74   /* Opcodes that
63f0: 20 61 72 65 20 75 73 65 64 20 61 73 20 74 68 65   are used as the
6400: 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f   bottom of a loo
6410: 70 20 28 4f 50 5f 4e 65 78 74 2c 20 4f 50 5f 50  p (OP_Next, OP_P
6420: 72 65 76 2c 0a 20 20 2a 2a 20 4f 50 5f 56 4e 65  rev,.  ** OP_VNe
6430: 78 74 2c 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72  xt, or OP_Sorter
6440: 4e 65 78 74 29 20 61 6c 6c 20 6a 75 6d 70 20 68  Next) all jump h
6450: 65 72 65 20 75 70 6f 6e 0a 20 20 2a 2a 20 63 6f  ere upon.  ** co
6460: 6d 70 6c 65 74 69 6f 6e 2e 20 20 43 68 65 63 6b  mpletion.  Check
6470: 20 74 6f 20 73 65 65 20 69 66 20 73 71 6c 69 74   to see if sqlit
6480: 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20 68  e3_interrupt() h
6490: 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 0a 20  as been called. 
64a0: 20 2a 2a 20 6f 72 20 69 66 20 74 68 65 20 70 72   ** or if the pr
64b0: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
64c0: 6e 65 65 64 73 20 74 6f 20 62 65 20 69 6e 76 6f  needs to be invo
64d0: 6b 65 64 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ked. .  **.  ** 
64e0: 54 68 69 73 20 63 6f 64 65 20 75 73 65 73 20 75  This code uses u
64f0: 6e 73 74 72 75 63 74 75 72 65 64 20 22 67 6f 74  nstructured "got
6500: 6f 22 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e  o" statements an
6510: 64 20 64 6f 65 73 20 6e 6f 74 20 6c 6f 6f 6b 20  d does not look 
6520: 63 6c 65 61 6e 2e 0a 20 20 2a 2a 20 42 75 74 20  clean..  ** But 
6530: 74 68 61 74 20 69 73 20 6e 6f 74 20 64 75 65 20  that is not due 
6540: 74 6f 20 73 6c 6f 70 70 79 20 63 6f 64 69 6e 67  to sloppy coding
6550: 20 68 61 62 69 74 73 2e 20 54 68 65 20 63 6f 64   habits. The cod
6560: 65 20 69 73 20 77 72 69 74 74 65 6e 20 74 68 69  e is written thi
6570: 73 0a 20 20 2a 2a 20 77 61 79 20 66 6f 72 20 70  s.  ** way for p
6580: 65 72 66 6f 72 6d 61 6e 63 65 2c 20 74 6f 20 61  erformance, to a
6590: 76 6f 69 64 20 68 61 76 69 6e 67 20 74 6f 20 72  void having to r
65a0: 75 6e 20 74 68 65 20 69 6e 74 65 72 72 75 70 74  un the interrupt
65b0: 20 61 6e 64 20 70 72 6f 67 72 65 73 73 0a 20 20   and progress.  
65c0: 2a 2a 20 63 68 65 63 6b 73 20 6f 6e 20 65 76 65  ** checks on eve
65d0: 72 79 20 6f 70 63 6f 64 65 2e 20 20 54 68 69 73  ry opcode.  This
65e0: 20 68 65 6c 70 73 20 73 71 6c 69 74 65 33 5f 73   helps sqlite3_s
65f0: 74 65 70 28 29 20 74 6f 20 72 75 6e 20 61 62 6f  tep() to run abo
6600: 75 74 20 31 2e 35 25 0a 20 20 2a 2a 20 66 61 73  ut 1.5%.  ** fas
6610: 74 65 72 20 61 63 63 6f 72 64 69 6e 67 20 74 6f  ter according to
6620: 20 22 76 61 6c 67 72 69 6e 64 20 2d 2d 74 6f 6f   "valgrind --too
6630: 6c 3d 63 61 63 68 65 67 72 69 6e 64 22 20 2a 2f  l=cachegrind" */
6640: 0a 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72  .check_for_inter
6650: 72 75 70 74 3a 0a 20 20 69 66 28 20 64 62 2d 3e  rupt:.  if( db->
6660: 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64  u1.isInterrupted
6670: 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
6680: 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a  e_to_interrupt;.
6690: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
66a0: 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c  MIT_PROGRESS_CAL
66b0: 4c 42 41 43 4b 0a 20 20 2f 2a 20 43 61 6c 6c 20  LBACK.  /* Call 
66c0: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
66d0: 6c 62 61 63 6b 20 69 66 20 69 74 20 69 73 20 63  lback if it is c
66e0: 6f 6e 66 69 67 75 72 65 64 20 61 6e 64 20 74 68  onfigured and th
66f0: 65 20 72 65 71 75 69 72 65 64 20 6e 75 6d 62 65  e required numbe
6700: 72 0a 20 20 2a 2a 20 6f 66 20 56 44 42 45 20 6f  r.  ** of VDBE o
6710: 70 73 20 68 61 76 65 20 62 65 65 6e 20 65 78 65  ps have been exe
6720: 63 75 74 65 64 20 28 65 69 74 68 65 72 20 73 69  cuted (either si
6730: 6e 63 65 20 74 68 69 73 20 69 6e 76 6f 63 61 74  nce this invocat
6740: 69 6f 6e 20 6f 66 0a 20 20 2a 2a 20 73 71 6c 69  ion of.  ** sqli
6750: 74 65 33 56 64 62 65 45 78 65 63 28 29 20 6f 72  te3VdbeExec() or
6760: 20 73 69 6e 63 65 20 6c 61 73 74 20 74 69 6d 65   since last time
6770: 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   the progress ca
6780: 6c 6c 62 61 63 6b 20 77 61 73 20 63 61 6c 6c 65  llback was calle
6790: 64 29 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20  d)..  ** If the 
67a0: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
67b0: 6b 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65  k returns non-ze
67c0: 72 6f 2c 20 65 78 69 74 20 74 68 65 20 76 69 72  ro, exit the vir
67d0: 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 77 69 74  tual machine wit
67e0: 68 0a 20 20 2a 2a 20 61 20 72 65 74 75 72 6e 20  h.  ** a return 
67f0: 63 6f 64 65 20 53 51 4c 49 54 45 5f 41 42 4f 52  code SQLITE_ABOR
6800: 54 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 6e 56  T..  */.  if( nV
6810: 6d 53 74 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73  mStep>=nProgress
6820: 4c 69 6d 69 74 20 26 26 20 64 62 2d 3e 78 50 72  Limit && db->xPr
6830: 6f 67 72 65 73 73 21 3d 30 20 29 7b 0a 20 20 20  ogress!=0 ){.   
6840: 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 50 72   assert( db->nPr
6850: 6f 67 72 65 73 73 4f 70 73 21 3d 30 20 29 3b 0a  ogressOps!=0 );.
6860: 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d      nProgressLim
6870: 69 74 20 3d 20 6e 56 6d 53 74 65 70 20 2b 20 64  it = nVmStep + d
6880: 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20  b->nProgressOps 
6890: 2d 20 28 6e 56 6d 53 74 65 70 25 64 62 2d 3e 6e  - (nVmStep%db->n
68a0: 50 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a 20 20  ProgressOps);.  
68b0: 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72    if( db->xProgr
68c0: 65 73 73 28 64 62 2d 3e 70 50 72 6f 67 72 65 73  ess(db->pProgres
68d0: 73 41 72 67 29 20 29 7b 0a 20 20 20 20 20 20 72  sArg) ){.      r
68e0: 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52  c = SQLITE_INTER
68f0: 52 55 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f  RUPT;.      goto
6900: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
6910: 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23  ror;.    }.  }.#
6920: 65 6e 64 69 66 0a 20 20 0a 20 20 62 72 65 61 6b  endif.  .  break
6930: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
6940: 20 47 6f 73 75 62 20 50 31 20 50 32 20 2a 20 2a   Gosub P1 P2 * *
6950: 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74   *.**.** Write t
6960: 68 65 20 63 75 72 72 65 6e 74 20 61 64 64 72 65  he current addre
6970: 73 73 20 6f 6e 74 6f 20 72 65 67 69 73 74 65 72  ss onto register
6980: 20 50 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20   P1.** and then 
6990: 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20  jump to address 
69a0: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47  P2..*/.case OP_G
69b0: 6f 73 75 62 3a 20 7b 20 20 20 20 20 20 20 20 20  osub: {         
69c0: 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
69d0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
69e0: 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70  0 && pOp->p1<=(p
69f0: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
6a00: 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 49 6e 31  ursor) );.  pIn1
6a10: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
6a20: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 56 64 62  ];.  assert( Vdb
6a30: 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31  eMemDynamic(pIn1
6a40: 29 3d 3d 30 20 29 3b 0a 20 20 6d 65 6d 41 62 6f  )==0 );.  memAbo
6a50: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49  utToChange(p, pI
6a60: 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  n1);.  pIn1->fla
6a70: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
6a80: 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 28 69 6e 74  pIn1->u.i = (int
6a90: 29 28 70 4f 70 2d 61 4f 70 29 3b 0a 20 20 52 45  )(pOp-aOp);.  RE
6aa0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
6ab0: 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 0a 20 20  ->p1, pIn1);..  
6ac0: 2f 2a 20 4d 6f 73 74 20 6a 75 6d 70 20 6f 70 65  /* Most jump ope
6ad0: 72 61 74 69 6f 6e 73 20 64 6f 20 61 20 67 6f 74  rations do a got
6ae0: 6f 20 74 6f 20 74 68 69 73 20 73 70 6f 74 20 69  o to this spot i
6af0: 6e 20 6f 72 64 65 72 20 74 6f 20 75 70 64 61 74  n order to updat
6b00: 65 0a 20 20 2a 2a 20 74 68 65 20 70 4f 70 20 70  e.  ** the pOp p
6b10: 6f 69 6e 74 65 72 2e 20 2a 2f 0a 6a 75 6d 70 5f  ointer. */.jump_
6b20: 74 6f 5f 70 32 3a 0a 20 20 70 4f 70 20 3d 20 26  to_p2:.  pOp = &
6b30: 61 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d  aOp[pOp->p2 - 1]
6b40: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
6b50: 20 4f 70 63 6f 64 65 3a 20 20 52 65 74 75 72 6e   Opcode:  Return
6b60: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
6b70: 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 6e 65  * Jump to the ne
6b80: 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  xt instruction a
6b90: 66 74 65 72 20 74 68 65 20 61 64 64 72 65 73 73  fter the address
6ba0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
6bb0: 20 20 41 66 74 65 72 0a 2a 2a 20 74 68 65 20 6a    After.** the j
6bc0: 75 6d 70 2c 20 72 65 67 69 73 74 65 72 20 50 31  ump, register P1
6bd0: 20 62 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e   becomes undefin
6be0: 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ed..*/.case OP_R
6bf0: 65 74 75 72 6e 3a 20 7b 20 20 20 20 20 20 20 20  eturn: {        
6c00: 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70     /* in1 */.  p
6c10: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
6c20: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
6c30: 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d  pIn1->flags==MEM
6c40: 5f 49 6e 74 20 29 3b 0a 20 20 70 4f 70 20 3d 20  _Int );.  pOp = 
6c50: 26 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b  &aOp[pIn1->u.i];
6c60: 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d  .  pIn1->flags =
6c70: 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a   MEM_Undefined;.
6c80: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
6c90: 70 63 6f 64 65 3a 20 49 6e 69 74 43 6f 72 6f 75  pcode: InitCorou
6ca0: 74 69 6e 65 20 50 31 20 50 32 20 50 33 20 2a 20  tine P1 P2 P3 * 
6cb0: 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 75 70 20 72  *.**.** Set up r
6cc0: 65 67 69 73 74 65 72 20 50 31 20 73 6f 20 74 68  egister P1 so th
6cd0: 61 74 20 69 74 20 77 69 6c 6c 20 59 69 65 6c 64  at it will Yield
6ce0: 20 74 6f 20 74 68 65 20 63 6f 72 6f 75 74 69 6e   to the coroutin
6cf0: 65 0a 2a 2a 20 6c 6f 63 61 74 65 64 20 61 74 20  e.** located at 
6d00: 61 64 64 72 65 73 73 20 50 33 2e 0a 2a 2a 0a 2a  address P3..**.*
6d10: 2a 20 49 66 20 50 32 21 3d 30 20 74 68 65 6e 20  * If P2!=0 then 
6d20: 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d  the coroutine im
6d30: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 6d 6d  plementation imm
6d40: 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73  ediately follows
6d50: 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f 64 65 2e  .** this opcode.
6d60: 20 20 53 6f 20 6a 75 6d 70 20 6f 76 65 72 20 74    So jump over t
6d70: 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70  he coroutine imp
6d80: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 0a 2a  lementation to.*
6d90: 2a 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a  * address P2..**
6da0: 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 45 6e  .** See also: En
6db0: 64 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61  dCoroutine.*/.ca
6dc0: 73 65 20 4f 50 5f 49 6e 69 74 43 6f 72 6f 75 74  se OP_InitCorout
6dd0: 69 6e 65 3a 20 7b 20 20 20 20 20 2f 2a 20 6a 75  ine: {     /* ju
6de0: 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
6df0: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 20 70 4f  pOp->p1>0 &&  pO
6e00: 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p1<=(p->nMem+
6e10: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
6e20: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
6e30: 2d 3e 70 32 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p2>=0 && pOp->
6e40: 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 61  p2<p->nOp );.  a
6e50: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d  ssert( pOp->p3>=
6e60: 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e  0 && pOp->p3<p->
6e70: 6e 4f 70 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  nOp );.  pOut = 
6e80: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
6e90: 20 20 61 73 73 65 72 74 28 20 21 56 64 62 65 4d    assert( !VdbeM
6ea0: 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 20  emDynamic(pOut) 
6eb0: 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
6ec0: 20 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a 20 20   pOp->p3 - 1;.  
6ed0: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
6ee0: 4d 5f 49 6e 74 3b 0a 20 20 69 66 28 20 70 4f 70  M_Int;.  if( pOp
6ef0: 2d 3e 70 32 20 29 20 67 6f 74 6f 20 6a 75 6d 70  ->p2 ) goto jump
6f00: 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b  _to_p2;.  break;
6f10: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
6f20: 45 6e 64 43 6f 72 6f 75 74 69 6e 65 20 50 31 20  EndCoroutine P1 
6f30: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  * * * *.**.** Th
6f40: 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74  e instruction at
6f50: 20 74 68 65 20 61 64 64 72 65 73 73 20 69 6e 20   the address in 
6f60: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 61  register P1 is a
6f70: 20 59 69 65 6c 64 2e 0a 2a 2a 20 4a 75 6d 70 20   Yield..** Jump 
6f80: 74 6f 20 74 68 65 20 50 32 20 70 61 72 61 6d 65  to the P2 parame
6f90: 74 65 72 20 6f 66 20 74 68 61 74 20 59 69 65 6c  ter of that Yiel
6fa0: 64 2e 0a 2a 2a 20 41 66 74 65 72 20 74 68 65 20  d..** After the 
6fb0: 6a 75 6d 70 2c 20 72 65 67 69 73 74 65 72 20 50  jump, register P
6fc0: 31 20 62 65 63 6f 6d 65 73 20 75 6e 64 65 66 69  1 becomes undefi
6fd0: 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ned..**.** See a
6fe0: 6c 73 6f 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69  lso: InitCorouti
6ff0: 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6e  ne.*/.case OP_En
7000: 64 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20  dCoroutine: {   
7010: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
7020: 2f 0a 20 20 56 64 62 65 4f 70 20 2a 70 43 61 6c  /.  VdbeOp *pCal
7030: 6c 65 72 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  ler;.  pIn1 = &a
7040: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
7050: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
7060: 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a  ags==MEM_Int );.
7070: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
7080: 75 2e 69 3e 3d 30 20 26 26 20 70 49 6e 31 2d 3e  u.i>=0 && pIn1->
7090: 75 2e 69 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20  u.i<p->nOp );.  
70a0: 70 43 61 6c 6c 65 72 20 3d 20 26 61 4f 70 5b 70  pCaller = &aOp[p
70b0: 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20 61 73 73  In1->u.i];.  ass
70c0: 65 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e 6f 70  ert( pCaller->op
70d0: 63 6f 64 65 3d 3d 4f 50 5f 59 69 65 6c 64 20 29  code==OP_Yield )
70e0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 61 6c  ;.  assert( pCal
70f0: 6c 65 72 2d 3e 70 32 3e 3d 30 20 26 26 20 70 43  ler->p2>=0 && pC
7100: 61 6c 6c 65 72 2d 3e 70 32 3c 70 2d 3e 6e 4f 70  aller->p2<p->nOp
7110: 20 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70   );.  pOp = &aOp
7120: 5b 70 43 61 6c 6c 65 72 2d 3e 70 32 20 2d 20 31  [pCaller->p2 - 1
7130: 5d 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ];.  pIn1->flags
7140: 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64   = MEM_Undefined
7150: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
7160: 20 4f 70 63 6f 64 65 3a 20 20 59 69 65 6c 64 20   Opcode:  Yield 
7170: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
7180: 2a 20 53 77 61 70 20 74 68 65 20 70 72 6f 67 72  * Swap the progr
7190: 61 6d 20 63 6f 75 6e 74 65 72 20 77 69 74 68 20  am counter with 
71a0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
71b0: 69 73 74 65 72 20 50 31 2e 20 20 54 68 69 73 0a  ister P1.  This.
71c0: 2a 2a 20 68 61 73 20 74 68 65 20 65 66 66 65 63  ** has the effec
71d0: 74 20 6f 66 20 79 69 65 6c 64 69 6e 67 20 74 6f  t of yielding to
71e0: 20 61 20 63 6f 72 6f 75 74 69 6e 65 2e 0a 2a 2a   a coroutine..**
71f0: 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f 72 6f 75  .** If the corou
7200: 74 69 6e 65 20 74 68 61 74 20 69 73 20 6c 61 75  tine that is lau
7210: 6e 63 68 65 64 20 62 79 20 74 68 69 73 20 69 6e  nched by this in
7220: 73 74 72 75 63 74 69 6f 6e 20 65 6e 64 73 20 77  struction ends w
7230: 69 74 68 0a 2a 2a 20 59 69 65 6c 64 20 6f 72 20  ith.** Yield or 
7240: 52 65 74 75 72 6e 20 74 68 65 6e 20 63 6f 6e 74  Return then cont
7250: 69 6e 75 65 20 74 6f 20 74 68 65 20 6e 65 78 74  inue to the next
7260: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42   instruction.  B
7270: 75 74 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 72  ut if.** the cor
7280: 6f 75 74 69 6e 65 20 6c 61 75 6e 63 68 65 64 20  outine launched 
7290: 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  by this instruct
72a0: 69 6f 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a  ion ends with.**
72b0: 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65 2c 20 74   EndCoroutine, t
72c0: 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 20 72  hen jump to P2 r
72d0: 61 74 68 65 72 20 74 68 61 6e 20 63 6f 6e 74 69  ather than conti
72e0: 6e 75 69 6e 67 20 77 69 74 68 20 74 68 65 0a 2a  nuing with the.*
72f0: 2a 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  * next instructi
7300: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  on..**.** See al
7310: 73 6f 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e  so: InitCoroutin
7320: 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65  e.*/.case OP_Yie
7330: 6c 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ld: {           
7340: 20 2f 2a 20 69 6e 31 2c 20 6a 75 6d 70 20 2a 2f   /* in1, jump */
7350: 0a 20 20 69 6e 74 20 70 63 44 65 73 74 3b 0a 20  .  int pcDest;. 
7360: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
7370: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
7380: 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63  ( VdbeMemDynamic
7390: 28 70 49 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 70  (pIn1)==0 );.  p
73a0: 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  In1->flags = MEM
73b0: 5f 49 6e 74 3b 0a 20 20 70 63 44 65 73 74 20 3d  _Int;.  pcDest =
73c0: 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b   (int)pIn1->u.i;
73d0: 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 28  .  pIn1->u.i = (
73e0: 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b  int)(pOp - aOp);
73f0: 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
7400: 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29  E(pOp->p1, pIn1)
7410: 3b 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70  ;.  pOp = &aOp[p
7420: 63 44 65 73 74 5d 3b 0a 20 20 62 72 65 61 6b 3b  cDest];.  break;
7430: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
7440: 48 61 6c 74 49 66 4e 75 6c 6c 20 20 50 31 20 50  HaltIfNull  P1 P
7450: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
7460: 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 33 5d  nopsis: if r[P3]
7470: 3d 6e 75 6c 6c 20 68 61 6c 74 0a 2a 2a 0a 2a 2a  =null halt.**.**
7480: 20 43 68 65 63 6b 20 74 68 65 20 76 61 6c 75 65   Check the value
7490: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
74a0: 20 20 49 66 20 69 74 20 69 73 20 4e 55 4c 4c 20    If it is NULL 
74b0: 74 68 65 6e 20 48 61 6c 74 20 75 73 69 6e 67 0a  then Halt using.
74c0: 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 50 31 2c  ** parameter P1,
74d0: 20 50 32 2c 20 61 6e 64 20 50 34 20 61 73 20 69   P2, and P4 as i
74e0: 66 20 74 68 69 73 20 77 65 72 65 20 61 20 48 61  f this were a Ha
74f0: 6c 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  lt instruction. 
7500: 20 49 66 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65   If the.** value
7510: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
7520: 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65  is not NULL, the
7530: 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69  n this routine i
7540: 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2a 20 54 68  s a no-op..** Th
7550: 65 20 50 35 20 70 61 72 61 6d 65 74 65 72 20 73  e P5 parameter s
7560: 68 6f 75 6c 64 20 62 65 20 31 2e 0a 2a 2f 0a 63  hould be 1..*/.c
7570: 61 73 65 20 4f 50 5f 48 61 6c 74 49 66 4e 75 6c  ase OP_HaltIfNul
7580: 6c 3a 20 7b 20 20 20 20 20 20 2f 2a 20 69 6e 33  l: {      /* in3
7590: 20 2a 2f 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d   */.  pIn3 = &aM
75a0: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
75b0: 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  f( (pIn3->flags 
75c0: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
75d0: 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c   break;.  /* Fal
75e0: 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
75f0: 50 5f 48 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20  P_Halt */.}../* 
7600: 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74 20 50 31  Opcode:  Halt P1
7610: 20 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a   P2 * P4 P5.**.*
7620: 2a 20 45 78 69 74 20 69 6d 6d 65 64 69 61 74 65  * Exit immediate
7630: 6c 79 2e 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75  ly.  All open cu
7640: 72 73 6f 72 73 2c 20 65 74 63 20 61 72 65 20 63  rsors, etc are c
7650: 6c 6f 73 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74  losed.** automat
7660: 69 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31  ically..**.** P1
7670: 20 69 73 20 74 68 65 20 72 65 73 75 6c 74 20 63   is the result c
7680: 6f 64 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  ode returned by 
7690: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 2c 20  sqlite3_exec(), 
76a0: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29 2c  sqlite3_reset(),
76b0: 0a 2a 2a 20 6f 72 20 73 71 6c 69 74 65 33 5f 66  .** or sqlite3_f
76c0: 69 6e 61 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20  inalize().  For 
76d0: 61 20 6e 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74  a normal halt, t
76e0: 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20 53 51  his should be SQ
76f0: 4c 49 54 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20  LITE_OK (0)..** 
7700: 46 6f 72 20 65 72 72 6f 72 73 2c 20 69 74 20 63  For errors, it c
7710: 61 6e 20 62 65 20 73 6f 6d 65 20 6f 74 68 65 72  an be some other
7720: 20 76 61 6c 75 65 2e 20 20 49 66 20 50 31 21 3d   value.  If P1!=
7730: 30 20 74 68 65 6e 20 50 32 20 77 69 6c 6c 20 64  0 then P2 will d
7740: 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74  etermine.** whet
7750: 68 65 72 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f  her or not to ro
7760: 6c 6c 62 61 63 6b 20 74 68 65 20 63 75 72 72 65  llback the curre
7770: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  nt transaction. 
7780: 20 44 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b   Do not rollback
7790: 0a 2a 2a 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61  .** if P2==OE_Fa
77a0: 69 6c 2e 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62  il. Do the rollb
77b0: 61 63 6b 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f  ack if P2==OE_Ro
77c0: 6c 6c 62 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d  llback.  If P2==
77d0: 4f 45 5f 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65  OE_Abort,.** the
77e0: 6e 20 62 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63  n back out all c
77f0: 68 61 6e 67 65 73 20 74 68 61 74 20 68 61 76 65  hanges that have
7800: 20 6f 63 63 75 72 72 65 64 20 64 75 72 69 6e 67   occurred during
7810: 20 74 68 69 73 20 65 78 65 63 75 74 69 6f 6e 20   this execution 
7820: 6f 66 20 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20  of the.** VDBE, 
7830: 62 75 74 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62  but do not rollb
7840: 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74  ack the transact
7850: 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50  ion. .**.** If P
7860: 34 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68  4 is not null th
7870: 65 6e 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f  en it is an erro
7880: 72 20 6d 65 73 73 61 67 65 20 73 74 72 69 6e 67  r message string
7890: 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73 20 61 20  ..**.** P5 is a 
78a0: 76 61 6c 75 65 20 62 65 74 77 65 65 6e 20 30 20  value between 0 
78b0: 61 6e 64 20 34 2c 20 69 6e 63 6c 75 73 69 76 65  and 4, inclusive
78c0: 2c 20 74 68 61 74 20 6d 6f 64 69 66 69 65 73 20  , that modifies 
78d0: 74 68 65 20 50 34 20 73 74 72 69 6e 67 2e 0a 2a  the P4 string..*
78e0: 2a 0a 2a 2a 20 20 20 20 30 3a 20 20 28 6e 6f 20  *.**    0:  (no 
78f0: 63 68 61 6e 67 65 29 0a 2a 2a 20 20 20 20 31 3a  change).**    1:
7900: 20 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 74 72    NOT NULL contr
7910: 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a  aint failed: P4.
7920: 2a 2a 20 20 20 20 32 3a 20 20 55 4e 49 51 55 45  **    2:  UNIQUE
7930: 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c   constraint fail
7940: 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 33 3a 20  ed: P4.**    3: 
7950: 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
7960: 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20  t failed: P4.** 
7970: 20 20 20 34 3a 20 20 46 4f 52 45 49 47 4e 20 4b     4:  FOREIGN K
7980: 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  EY constraint fa
7990: 69 6c 65 64 3a 20 50 34 0a 2a 2a 0a 2a 2a 20 49  iled: P4.**.** I
79a0: 66 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f  f P5 is not zero
79b0: 20 61 6e 64 20 50 34 20 69 73 20 4e 55 4c 4c 2c   and P4 is NULL,
79c0: 20 74 68 65 6e 20 65 76 65 72 79 74 68 69 6e 67   then everything
79d0: 20 61 66 74 65 72 20 74 68 65 20 22 3a 22 20 69   after the ":" i
79e0: 73 0a 2a 2a 20 6f 6d 69 74 74 65 64 2e 0a 2a 2a  s.** omitted..**
79f0: 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 61 6e 20  .** There is an 
7a00: 69 6d 70 6c 69 65 64 20 22 48 61 6c 74 20 30 20  implied "Halt 0 
7a10: 30 20 30 22 20 69 6e 73 74 72 75 63 74 69 6f 6e  0 0" instruction
7a20: 20 69 6e 73 65 72 74 65 64 20 61 74 20 74 68 65   inserted at the
7a30: 20 76 65 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20   very end of.** 
7a40: 65 76 65 72 79 20 70 72 6f 67 72 61 6d 2e 20 20  every program.  
7a50: 53 6f 20 61 20 6a 75 6d 70 20 70 61 73 74 20 74  So a jump past t
7a60: 68 65 20 6c 61 73 74 20 69 6e 73 74 72 75 63 74  he last instruct
7a70: 69 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f 67 72  ion of the progr
7a80: 61 6d 0a 2a 2a 20 69 73 20 74 68 65 20 73 61 6d  am.** is the sam
7a90: 65 20 61 73 20 65 78 65 63 75 74 69 6e 67 20 48  e as executing H
7aa0: 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  alt..*/.case OP_
7ab0: 48 61 6c 74 3a 20 7b 0a 20 20 56 64 62 65 46 72  Halt: {.  VdbeFr
7ac0: 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69  ame *pFrame;.  i
7ad0: 6e 74 20 70 63 78 3b 0a 0a 20 20 70 63 78 20 3d  nt pcx;..  pcx =
7ae0: 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
7af0: 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  );.  if( pOp->p1
7b00: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70  ==SQLITE_OK && p
7b10: 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20  ->pFrame ){.    
7b20: 2f 2a 20 48 61 6c 74 20 74 68 65 20 73 75 62 2d  /* Halt the sub-
7b30: 70 72 6f 67 72 61 6d 2e 20 52 65 74 75 72 6e 20  program. Return 
7b40: 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 70  control to the p
7b50: 61 72 65 6e 74 20 66 72 61 6d 65 2e 20 2a 2f 0a  arent frame. */.
7b60: 20 20 20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e      pFrame = p->
7b70: 70 46 72 61 6d 65 3b 0a 20 20 20 20 70 2d 3e 70  pFrame;.    p->p
7b80: 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 2d 3e  Frame = pFrame->
7b90: 70 50 61 72 65 6e 74 3b 0a 20 20 20 20 70 2d 3e  pParent;.    p->
7ba0: 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20 20 20 73 71  nFrame--;.    sq
7bb0: 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e  lite3VdbeSetChan
7bc0: 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e  ges(db, p->nChan
7bd0: 67 65 29 3b 0a 20 20 20 20 70 63 78 20 3d 20 73  ge);.    pcx = s
7be0: 71 6c 69 74 65 33 56 64 62 65 46 72 61 6d 65 52  qlite3VdbeFrameR
7bf0: 65 73 74 6f 72 65 28 70 46 72 61 6d 65 29 3b 0a  estore(pFrame);.
7c00: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d      if( pOp->p2=
7c10: 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20  =OE_Ignore ){.  
7c20: 20 20 20 20 2f 2a 20 49 6e 73 74 72 75 63 74 69      /* Instructi
7c30: 6f 6e 20 70 63 78 20 69 73 20 74 68 65 20 4f 50  on pcx is the OP
7c40: 5f 50 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6e  _Program that in
7c50: 76 6f 6b 65 64 20 74 68 65 20 73 75 62 2d 70 72  voked the sub-pr
7c60: 6f 67 72 61 6d 20 0a 20 20 20 20 20 20 2a 2a 20  ogram .      ** 
7c70: 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20  currently being 
7c80: 68 61 6c 74 65 64 2e 20 49 66 20 74 68 65 20 70  halted. If the p
7c90: 32 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66  2 instruction of
7ca0: 20 74 68 69 73 20 4f 50 5f 48 61 6c 74 0a 20 20   this OP_Halt.  
7cb0: 20 20 20 20 2a 2a 20 69 6e 73 74 72 75 63 74 69      ** instructi
7cc0: 6f 6e 20 69 73 20 73 65 74 20 74 6f 20 4f 45 5f  on is set to OE_
7cd0: 49 67 6e 6f 72 65 2c 20 74 68 65 6e 20 74 68 65  Ignore, then the
7ce0: 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 69 73 20   sub-program is 
7cf0: 74 68 72 6f 77 69 6e 67 0a 20 20 20 20 20 20 2a  throwing.      *
7d00: 2a 20 61 6e 20 49 47 4e 4f 52 45 20 65 78 63 65  * an IGNORE exce
7d10: 70 74 69 6f 6e 2e 20 49 6e 20 74 68 69 73 20 63  ption. In this c
7d20: 61 73 65 20 6a 75 6d 70 20 74 6f 20 74 68 65 20  ase jump to the 
7d30: 61 64 64 72 65 73 73 20 73 70 65 63 69 66 69 65  address specifie
7d40: 64 0a 20 20 20 20 20 20 2a 2a 20 61 73 20 74 68  d.      ** as th
7d50: 65 20 70 32 20 6f 66 20 74 68 65 20 63 61 6c 6c  e p2 of the call
7d60: 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 2e 20  ing OP_Program. 
7d70: 20 2a 2f 0a 20 20 20 20 20 20 70 63 78 20 3d 20   */.      pcx = 
7d80: 70 2d 3e 61 4f 70 5b 70 63 78 5d 2e 70 32 2d 31  p->aOp[pcx].p2-1
7d90: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 4f 70 20  ;.    }.    aOp 
7da0: 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 61 4d  = p->aOp;.    aM
7db0: 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20  em = p->aMem;.  
7dc0: 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63 78    pOp = &aOp[pcx
7dd0: 5d 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ];.    break;.  
7de0: 7d 0a 20 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d  }.  p->rc = pOp-
7df0: 3e 70 31 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41  >p1;.  p->errorA
7e00: 63 74 69 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d  ction = (u8)pOp-
7e10: 3e 70 32 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70  >p2;.  p->pc = p
7e20: 63 78 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  cx;.  assert( pO
7e30: 70 2d 3e 70 35 3c 3d 34 20 29 3b 0a 20 20 69 66  p->p5<=4 );.  if
7e40: 28 20 70 2d 3e 72 63 20 29 7b 0a 20 20 20 20 69  ( p->rc ){.    i
7e50: 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20  f( pOp->p5 ){.  
7e60: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
7e70: 20 63 68 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a   char * const az
7e80: 54 79 70 65 5b 5d 20 3d 20 7b 20 22 4e 4f 54 20  Type[] = { "NOT 
7e90: 4e 55 4c 4c 22 2c 20 22 55 4e 49 51 55 45 22 2c  NULL", "UNIQUE",
7ea0: 20 22 43 48 45 43 4b 22 2c 0a 20 20 20 20 20 20   "CHECK",.      
7eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ed0: 20 20 20 20 20 20 20 22 46 4f 52 45 49 47 4e 20         "FOREIGN 
7ee0: 4b 45 59 22 20 7d 3b 0a 20 20 20 20 20 20 74 65  KEY" };.      te
7ef0: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d  stcase( pOp->p5=
7f00: 3d 31 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74  =1 );.      test
7f10: 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 32  case( pOp->p5==2
7f20: 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61   );.      testca
7f30: 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 33 20 29  se( pOp->p5==3 )
7f40: 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  ;.      testcase
7f50: 28 20 70 4f 70 2d 3e 70 35 3d 3d 34 20 29 3b 0a  ( pOp->p5==4 );.
7f60: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
7f70: 65 45 72 72 6f 72 28 70 2c 20 22 25 73 20 63 6f  eError(p, "%s co
7f80: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 22  nstraint failed"
7f90: 2c 20 61 7a 54 79 70 65 5b 70 4f 70 2d 3e 70 35  , azType[pOp->p5
7fa0: 2d 31 5d 29 3b 0a 20 20 20 20 20 20 69 66 28 20  -1]);.      if( 
7fb0: 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20  pOp->p4.z ){.   
7fc0: 20 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20       p->zErrMsg 
7fd0: 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66  = sqlite3MPrintf
7fe0: 28 64 62 2c 20 22 25 7a 3a 20 25 73 22 2c 20 70  (db, "%z: %s", p
7ff0: 2d 3e 7a 45 72 72 4d 73 67 2c 20 70 4f 70 2d 3e  ->zErrMsg, pOp->
8000: 70 34 2e 7a 29 3b 0a 20 20 20 20 20 20 7d 0a 20  p4.z);.      }. 
8010: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
8020: 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
8030: 28 70 2c 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70  (p, "%s", pOp->p
8040: 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  4.z);.    }.    
8050: 73 71 6c 69 74 65 33 5f 6c 6f 67 28 70 4f 70 2d  sqlite3_log(pOp-
8060: 3e 70 31 2c 20 22 61 62 6f 72 74 20 61 74 20 25  >p1, "abort at %
8070: 64 20 69 6e 20 5b 25 73 5d 3a 20 25 73 22 2c 20  d in [%s]: %s", 
8080: 70 63 78 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d  pcx, p->zSql, p-
8090: 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20  >zErrMsg);.  }. 
80a0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
80b0: 65 48 61 6c 74 28 70 29 3b 0a 20 20 61 73 73 65  eHalt(p);.  asse
80c0: 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  rt( rc==SQLITE_B
80d0: 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54  USY || rc==SQLIT
80e0: 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49  E_OK || rc==SQLI
80f0: 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20 20 69 66  TE_ERROR );.  if
8100: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
8110: 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d  Y ){.    p->rc =
8120: 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
8130: 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
8140: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
8150: 20 7c 7c 20 28 70 2d 3e 72 63 26 30 78 66 66 29   || (p->rc&0xff)
8160: 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  ==SQLITE_CONSTRA
8170: 49 4e 54 20 29 3b 0a 20 20 20 20 61 73 73 65 72  INT );.    asser
8180: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
8190: 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   || db->nDeferre
81a0: 64 43 6f 6e 73 3e 30 20 7c 7c 20 64 62 2d 3e 6e  dCons>0 || db->n
81b0: 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3e  DeferredImmCons>
81c0: 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 2d  0 );.    rc = p-
81d0: 3e 72 63 20 3f 20 53 51 4c 49 54 45 5f 45 52 52  >rc ? SQLITE_ERR
81e0: 4f 52 20 3a 20 53 51 4c 49 54 45 5f 44 4f 4e 45  OR : SQLITE_DONE
81f0: 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62  ;.  }.  goto vdb
8200: 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20  e_return;.}../* 
8210: 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 65 72 20  Opcode: Integer 
8220: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
8230: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50  ynopsis: r[P2]=P
8240: 31 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62  1.**.** The 32-b
8250: 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  it integer value
8260: 20 50 31 20 69 73 20 77 72 69 74 74 65 6e 20 69   P1 is written i
8270: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
8280: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65  .*/.case OP_Inte
8290: 67 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  ger: {         /
82a0: 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74  * out2 */.  pOut
82b0: 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
82c0: 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75  e(p, pOp);.  pOu
82d0: 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31  t->u.i = pOp->p1
82e0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
82f0: 20 4f 70 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a   Opcode: Int64 *
8300: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
8310: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34  nopsis: r[P2]=P4
8320: 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
8330: 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62  ointer to a 64-b
8340: 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  it integer value
8350: 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20  ..** Write that 
8360: 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73  value into regis
8370: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
8380: 4f 50 5f 49 6e 74 36 34 3a 20 7b 20 20 20 20 20  OP_Int64: {     
8390: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
83a0: 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
83b0: 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
83c0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
83d0: 3e 70 34 2e 70 49 36 34 21 3d 30 20 29 3b 0a 20  >p4.pI64!=0 );. 
83e0: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f   pOut->u.i = *pO
83f0: 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62 72  p->p4.pI64;.  br
8400: 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
8410: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
8420: 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70  TING_POINT./* Op
8430: 63 6f 64 65 3a 20 52 65 61 6c 20 2a 20 50 32 20  code: Real * P2 
8440: 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
8450: 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a  is: r[P2]=P4.**.
8460: 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
8470: 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20 66  er to a 64-bit f
8480: 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61  loating point va
8490: 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68  lue..** Write th
84a0: 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65  at value into re
84b0: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61  gister P2..*/.ca
84c0: 73 65 20 4f 50 5f 52 65 61 6c 3a 20 7b 20 20 20  se OP_Real: {   
84d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
84e0: 20 61 73 20 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75   as TK_FLOAT, ou
84f0: 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f  t2 */.  pOut = o
8500: 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
8510: 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66   pOp);.  pOut->f
8520: 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b  lags = MEM_Real;
8530: 0a 20 20 61 73 73 65 72 74 28 20 21 73 71 6c 69  .  assert( !sqli
8540: 74 65 33 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70  te3IsNaN(*pOp->p
8550: 34 2e 70 52 65 61 6c 29 20 29 3b 0a 20 20 70 4f  4.pReal) );.  pO
8560: 75 74 2d 3e 75 2e 72 20 3d 20 2a 70 4f 70 2d 3e  ut->u.r = *pOp->
8570: 70 34 2e 70 52 65 61 6c 3b 0a 20 20 62 72 65 61  p4.pReal;.  brea
8580: 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  k;.}.#endif../* 
8590: 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 38 20  Opcode: String8 
85a0: 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  * P2 * P4 *.** S
85b0: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27  ynopsis: r[P2]='
85c0: 50 34 27 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69  P4'.**.** P4 poi
85d0: 6e 74 73 20 74 6f 20 61 20 6e 75 6c 20 74 65 72  nts to a nul ter
85e0: 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74  minated UTF-8 st
85f0: 72 69 6e 67 2e 20 54 68 69 73 20 6f 70 63 6f 64  ring. This opcod
8600: 65 20 69 73 20 74 72 61 6e 73 66 6f 72 6d 65 64  e is transformed
8610: 20 0a 2a 2a 20 69 6e 74 6f 20 61 20 53 74 72 69   .** into a Stri
8620: 6e 67 20 6f 70 63 6f 64 65 20 62 65 66 6f 72 65  ng opcode before
8630: 20 69 74 20 69 73 20 65 78 65 63 75 74 65 64 20   it is executed 
8640: 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 74 69  for the first ti
8650: 6d 65 2e 20 20 44 75 72 69 6e 67 0a 2a 2a 20 74  me.  During.** t
8660: 68 69 73 20 74 72 61 6e 73 66 6f 72 6d 61 74 69  his transformati
8670: 6f 6e 2c 20 74 68 65 20 6c 65 6e 67 74 68 20 6f  on, the length o
8680: 66 20 73 74 72 69 6e 67 20 50 34 20 69 73 20 63  f string P4 is c
8690: 6f 6d 70 75 74 65 64 20 61 6e 64 20 73 74 6f 72  omputed and stor
86a0: 65 64 0a 2a 2a 20 61 73 20 74 68 65 20 50 31 20  ed.** as the P1 
86b0: 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 63 61  parameter..*/.ca
86c0: 73 65 20 4f 50 5f 53 74 72 69 6e 67 38 3a 20 7b  se OP_String8: {
86d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
86e0: 20 61 73 20 54 4b 5f 53 54 52 49 4e 47 2c 20 6f   as TK_STRING, o
86f0: 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ut2 */.  assert(
8700: 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b   pOp->p4.z!=0 );
8710: 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
8720: 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
8730: 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ;.  pOp->opcode 
8740: 3d 20 4f 50 5f 53 74 72 69 6e 67 3b 0a 20 20 70  = OP_String;.  p
8750: 4f 70 2d 3e 70 31 20 3d 20 73 71 6c 69 74 65 33  Op->p1 = sqlite3
8760: 53 74 72 6c 65 6e 33 30 28 70 4f 70 2d 3e 70 34  Strlen30(pOp->p4
8770: 2e 7a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  .z);..#ifndef SQ
8780: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
8790: 20 20 69 66 28 20 65 6e 63 6f 64 69 6e 67 21 3d    if( encoding!=
87a0: 53 51 4c 49 54 45 5f 55 54 46 38 20 29 7b 0a 20  SQLITE_UTF8 ){. 
87b0: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
87c0: 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75  dbeMemSetStr(pOu
87d0: 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31  t, pOp->p4.z, -1
87e0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53  , SQLITE_UTF8, S
87f0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
8800: 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
8810: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d  QLITE_OK || rc==
8820: 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29 3b  SQLITE_TOOBIG );
8830: 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f  .    if( SQLITE_
8840: 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64 62 65 43  OK!=sqlite3VdbeC
8850: 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f  hangeEncoding(pO
8860: 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29 20  ut, encoding) ) 
8870: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
8880: 20 61 73 73 65 72 74 28 20 70 4f 75 74 2d 3e 73   assert( pOut->s
8890: 7a 4d 61 6c 6c 6f 63 3e 30 20 26 26 20 70 4f 75  zMalloc>0 && pOu
88a0: 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74  t->zMalloc==pOut
88b0: 2d 3e 7a 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ->z );.    asser
88c0: 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69  t( VdbeMemDynami
88d0: 63 28 70 4f 75 74 29 3d 3d 30 20 29 3b 0a 20 20  c(pOut)==0 );.  
88e0: 20 20 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63    pOut->szMalloc
88f0: 20 3d 20 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e   = 0;.    pOut->
8900: 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61  flags |= MEM_Sta
8910: 74 69 63 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  tic;.    if( pOp
8920: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 44 59 4e  ->p4type==P4_DYN
8930: 41 4d 49 43 20 29 7b 0a 20 20 20 20 20 20 73 71  AMIC ){.      sq
8940: 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
8950: 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20  pOp->p4.z);.    
8960: 7d 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74 79 70  }.    pOp->p4typ
8970: 65 20 3d 20 50 34 5f 44 59 4e 41 4d 49 43 3b 0a  e = P4_DYNAMIC;.
8980: 20 20 20 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20      pOp->p4.z = 
8990: 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70  pOut->z;.    pOp
89a0: 2d 3e 70 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a  ->p1 = pOut->n;.
89b0: 20 20 7d 0a 20 20 74 65 73 74 63 61 73 65 28 20    }.  testcase( 
89c0: 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49  rc==SQLITE_TOOBI
89d0: 47 20 29 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66  G );.#endif.  if
89e0: 28 20 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c  ( pOp->p1>db->aL
89f0: 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
8a00: 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
8a10: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
8a20: 20 7d 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d   }.  assert( rc=
8a30: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20  =SQLITE_OK );.  
8a40: 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
8a50: 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61 73 65  to the next case
8a60: 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d  , OP_String */.}
8a70: 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .  ./* Opcode: S
8a80: 74 72 69 6e 67 20 50 31 20 50 32 20 50 33 20 50  tring P1 P2 P3 P
8a90: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
8aa0: 3a 20 72 5b 50 32 5d 3d 27 50 34 27 20 28 6c 65  : r[P2]='P4' (le
8ab0: 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 54 68 65 20  n=P1).**.** The 
8ac0: 73 74 72 69 6e 67 20 76 61 6c 75 65 20 50 34 20  string value P4 
8ad0: 6f 66 20 6c 65 6e 67 74 68 20 50 31 20 28 62 79  of length P1 (by
8ae0: 74 65 73 29 20 69 73 20 73 74 6f 72 65 64 20 69  tes) is stored i
8af0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
8b00: 2a 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 6e 6f  *.** If P3 is no
8b10: 74 20 7a 65 72 6f 20 61 6e 64 20 74 68 65 20 63  t zero and the c
8b20: 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
8b30: 65 72 20 50 33 20 69 73 20 65 71 75 61 6c 20 74  er P3 is equal t
8b40: 6f 20 50 35 2c 20 74 68 65 6e 0a 2a 2a 20 74 68  o P5, then.** th
8b50: 65 20 64 61 74 61 74 79 70 65 20 6f 66 20 74 68  e datatype of th
8b60: 65 20 72 65 67 69 73 74 65 72 20 50 32 20 69 73  e register P2 is
8b70: 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 42 4c   converted to BL
8b80: 4f 42 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74  OB.  The content
8b90: 20 69 73 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20   is.** the same 
8ba0: 73 65 71 75 65 6e 63 65 20 6f 66 20 62 79 74 65  sequence of byte
8bb0: 73 2c 20 69 74 20 69 73 20 6d 65 72 65 6c 79 20  s, it is merely 
8bc0: 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61  interpreted as a
8bd0: 20 42 4c 4f 42 20 69 6e 73 74 65 61 64 0a 2a 2a   BLOB instead.**
8be0: 20 6f 66 20 61 20 73 74 72 69 6e 67 2c 20 61 73   of a string, as
8bf0: 20 69 66 20 69 74 20 68 61 64 20 62 65 65 6e 20   if it had been 
8c00: 43 41 53 54 2e 20 20 49 6e 20 6f 74 68 65 72 20  CAST.  In other 
8c10: 77 6f 72 64 73 3a 0a 2a 2a 0a 2a 2a 20 69 66 28  words:.**.** if(
8c20: 20 50 33 21 3d 30 20 61 6e 64 20 72 65 67 5b 50   P3!=0 and reg[P
8c30: 33 5d 3d 3d 50 35 20 29 20 72 65 67 5b 50 32 5d  3]==P5 ) reg[P2]
8c40: 20 3a 3d 20 43 41 53 54 28 72 65 67 5b 50 32 5d   := CAST(reg[P2]
8c50: 20 61 73 20 42 4c 4f 42 29 0a 2a 2f 0a 63 61 73   as BLOB).*/.cas
8c60: 65 20 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20  e OP_String: {  
8c70: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
8c80: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
8c90: 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70  ->p4.z!=0 );.  p
8ca0: 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
8cb0: 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
8cc0: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
8cd0: 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63  M_Str|MEM_Static
8ce0: 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75  |MEM_Term;.  pOu
8cf0: 74 2d 3e 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  t->z = pOp->p4.z
8d00: 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f  ;.  pOut->n = pO
8d10: 70 2d 3e 70 31 3b 0a 20 20 70 4f 75 74 2d 3e 65  p->p1;.  pOut->e
8d20: 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20  nc = encoding;. 
8d30: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
8d40: 53 49 5a 45 28 70 4f 75 74 29 3b 0a 23 69 66 6e  SIZE(pOut);.#ifn
8d50: 64 65 66 20 53 51 4c 49 54 45 5f 4c 49 4b 45 5f  def SQLITE_LIKE_
8d60: 44 4f 45 53 4e 54 5f 4d 41 54 43 48 5f 42 4c 4f  DOESNT_MATCH_BLO
8d70: 42 53 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  BS.  if( pOp->p3
8d80: 3e 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  >0 ){.    assert
8d90: 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  ( pOp->p3<=(p->n
8da0: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
8db0: 6f 72 29 20 29 3b 0a 20 20 20 20 70 49 6e 33 20  or) );.    pIn3 
8dc0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
8dd0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49  ;.    assert( pI
8de0: 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
8df0: 49 6e 74 20 29 3b 0a 20 20 20 20 69 66 28 20 70  Int );.    if( p
8e00: 49 6e 33 2d 3e 75 2e 69 3d 3d 70 4f 70 2d 3e 70  In3->u.i==pOp->p
8e10: 35 20 29 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  5 ) pOut->flags 
8e20: 3d 20 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53  = MEM_Blob|MEM_S
8e30: 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a  tatic|MEM_Term;.
8e40: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 62 72 65    }.#endif.  bre
8e50: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
8e60: 3a 20 4e 75 6c 6c 20 50 31 20 50 32 20 50 33 20  : Null P1 P2 P3 
8e70: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
8e80: 20 72 5b 50 32 2e 2e 50 33 5d 3d 4e 55 4c 4c 0a   r[P2..P3]=NULL.
8e90: 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 4e 55  **.** Write a NU
8ea0: 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  LL into register
8eb0: 73 20 50 32 2e 20 20 49 66 20 50 33 20 67 72 65  s P2.  If P3 gre
8ec0: 61 74 65 72 20 74 68 61 6e 20 50 32 2c 20 74 68  ater than P2, th
8ed0: 65 6e 20 61 6c 73 6f 20 77 72 69 74 65 0a 2a 2a  en also write.**
8ee0: 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73   NULL into regis
8ef0: 74 65 72 20 50 33 20 61 6e 64 20 65 76 65 72 79  ter P3 and every
8f00: 20 72 65 67 69 73 74 65 72 20 69 6e 20 62 65 74   register in bet
8f10: 77 65 65 6e 20 50 32 20 61 6e 64 20 50 33 2e 20  ween P2 and P3. 
8f20: 20 49 66 20 50 33 0a 2a 2a 20 69 73 20 6c 65 73   If P3.** is les
8f30: 73 20 74 68 61 6e 20 50 32 20 28 74 79 70 69 63  s than P2 (typic
8f40: 61 6c 6c 79 20 50 33 20 69 73 20 7a 65 72 6f 29  ally P3 is zero)
8f50: 20 74 68 65 6e 20 6f 6e 6c 79 20 72 65 67 69 73   then only regis
8f60: 74 65 72 20 50 32 20 69 73 0a 2a 2a 20 73 65 74  ter P2 is.** set
8f70: 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20   to NULL..**.** 
8f80: 49 66 20 74 68 65 20 50 31 20 76 61 6c 75 65 20  If the P1 value 
8f90: 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
8fa0: 6e 20 61 6c 73 6f 20 73 65 74 20 74 68 65 20 4d  n also set the M
8fb0: 45 4d 5f 43 6c 65 61 72 65 64 20 66 6c 61 67 20  EM_Cleared flag 
8fc0: 73 6f 20 74 68 61 74 0a 2a 2a 20 4e 55 4c 4c 20  so that.** NULL 
8fd0: 76 61 6c 75 65 73 20 77 69 6c 6c 20 6e 6f 74 20  values will not 
8fe0: 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 65 76  compare equal ev
8ff0: 65 6e 20 69 66 20 53 51 4c 49 54 45 5f 4e 55 4c  en if SQLITE_NUL
9000: 4c 45 51 20 69 73 20 73 65 74 20 6f 6e 0a 2a 2a  LEQ is set on.**
9010: 20 4f 50 5f 4e 65 20 6f 72 20 4f 50 5f 45 71 2e   OP_Ne or OP_Eq.
9020: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c  .*/.case OP_Null
9030: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
9040: 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 63   out2 */.  int c
9050: 6e 74 3b 0a 20 20 75 31 36 20 6e 75 6c 6c 46 6c  nt;.  u16 nullFl
9060: 61 67 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74  ag;.  pOut = out
9070: 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
9080: 4f 70 29 3b 0a 20 20 63 6e 74 20 3d 20 70 4f 70  Op);.  cnt = pOp
9090: 2d 3e 70 33 2d 70 4f 70 2d 3e 70 32 3b 0a 20 20  ->p3-pOp->p2;.  
90a0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
90b0: 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
90c0: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
90d0: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c  Out->flags = nul
90e0: 6c 46 6c 61 67 20 3d 20 70 4f 70 2d 3e 70 31 20  lFlag = pOp->p1 
90f0: 3f 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f  ? (MEM_Null|MEM_
9100: 43 6c 65 61 72 65 64 29 20 3a 20 4d 45 4d 5f 4e  Cleared) : MEM_N
9110: 75 6c 6c 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  ull;.  pOut->n =
9120: 20 30 3b 0a 20 20 77 68 69 6c 65 28 20 63 6e 74   0;.  while( cnt
9130: 3e 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2b 2b  >0 ){.    pOut++
9140: 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f  ;.    memAboutTo
9150: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
9160: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
9170: 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
9180: 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  ;.    pOut->flag
9190: 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20  s = nullFlag;.  
91a0: 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 30 3b 0a 20    pOut->n = 0;. 
91b0: 20 20 20 63 6e 74 2d 2d 3b 0a 20 20 7d 0a 20 20     cnt--;.  }.  
91c0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
91d0: 6f 64 65 3a 20 53 6f 66 74 4e 75 6c 6c 20 50 31  ode: SoftNull P1
91e0: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f   * * * *.** Syno
91f0: 70 73 69 73 3a 20 72 5b 50 31 5d 3d 4e 55 4c 4c  psis: r[P1]=NULL
9200: 0a 2a 2a 0a 2a 2a 20 53 65 74 20 72 65 67 69 73  .**.** Set regis
9210: 74 65 72 20 50 31 20 74 6f 20 68 61 76 65 20 74  ter P1 to have t
9220: 68 65 20 76 61 6c 75 65 20 4e 55 4c 4c 20 61 73  he value NULL as
9230: 20 73 65 65 6e 20 62 79 20 74 68 65 20 4f 50 5f   seen by the OP_
9240: 4d 61 6b 65 52 65 63 6f 72 64 0a 2a 2a 20 69 6e  MakeRecord.** in
9250: 73 74 72 75 63 74 69 6f 6e 2c 20 62 75 74 20 64  struction, but d
9260: 6f 20 6e 6f 74 20 66 72 65 65 20 61 6e 79 20 73  o not free any s
9270: 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d 65  tring or blob me
9280: 6d 6f 72 79 20 61 73 73 6f 63 69 61 74 65 64 20  mory associated 
9290: 77 69 74 68 0a 2a 2a 20 74 68 65 20 72 65 67 69  with.** the regi
92a0: 73 74 65 72 2c 20 73 6f 20 74 68 61 74 20 69 66  ster, so that if
92b0: 20 74 68 65 20 76 61 6c 75 65 20 77 61 73 20 61   the value was a
92c0: 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20   string or blob 
92d0: 74 68 61 74 20 77 61 73 0a 2a 2a 20 70 72 65 76  that was.** prev
92e0: 69 6f 75 73 6c 79 20 63 6f 70 69 65 64 20 75 73  iously copied us
92f0: 69 6e 67 20 4f 50 5f 53 43 6f 70 79 2c 20 74 68  ing OP_SCopy, th
9300: 65 20 63 6f 70 69 65 73 20 77 69 6c 6c 20 63 6f  e copies will co
9310: 6e 74 69 6e 75 65 20 74 6f 20 62 65 20 76 61 6c  ntinue to be val
9320: 69 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  id..*/.case OP_S
9330: 6f 66 74 4e 75 6c 6c 3a 20 7b 0a 20 20 61 73 73  oftNull: {.  ass
9340: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26  ert( pOp->p1>0 &
9350: 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e  & pOp->p1<=(p->n
9360: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
9370: 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  or) );.  pOut = 
9380: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
9390: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
93a0: 28 70 4f 75 74 2d 3e 66 6c 61 67 73 26 7e 28 4d  (pOut->flags&~(M
93b0: 45 4d 5f 55 6e 64 65 66 69 6e 65 64 7c 4d 45 4d  EM_Undefined|MEM
93c0: 5f 41 66 66 4d 61 73 6b 29 29 7c 4d 45 4d 5f 4e  _AffMask))|MEM_N
93d0: 75 6c 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ull;.  break;.}.
93e0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 6c 6f 62  ./* Opcode: Blob
93f0: 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
9400: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
9410: 3d 50 34 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a  =P4 (len=P1).**.
9420: 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20  ** P4 points to 
9430: 61 20 62 6c 6f 62 20 6f 66 20 64 61 74 61 20 50  a blob of data P
9440: 31 20 62 79 74 65 73 20 6c 6f 6e 67 2e 20 20 53  1 bytes long.  S
9450: 74 6f 72 65 20 74 68 69 73 0a 2a 2a 20 62 6c 6f  tore this.** blo
9460: 62 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  b in register P2
9470: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f  ..*/.case OP_Blo
9480: 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  b: {            
9490: 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
94a0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
94b0: 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c   <= SQLITE_MAX_L
94c0: 45 4e 47 54 48 20 29 3b 0a 20 20 70 4f 75 74 20  ENGTH );.  pOut 
94d0: 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
94e0: 28 70 2c 20 70 4f 70 29 3b 0a 20 20 73 71 6c 69  (p, pOp);.  sqli
94f0: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
9500: 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a  (pOut, pOp->p4.z
9510: 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29  , pOp->p1, 0, 0)
9520: 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
9530: 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41  encoding;.  UPDA
9540: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
9550: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
9560: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61  }../* Opcode: Va
9570: 72 69 61 62 6c 65 20 50 31 20 50 32 20 2a 20 50  riable P1 P2 * P
9580: 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
9590: 20 72 5b 50 32 5d 3d 70 61 72 61 6d 65 74 65 72   r[P2]=parameter
95a0: 28 50 31 2c 50 34 29 0a 2a 2a 0a 2a 2a 20 54 72  (P1,P4).**.** Tr
95b0: 61 6e 73 66 65 72 20 74 68 65 20 76 61 6c 75 65  ansfer the value
95c0: 73 20 6f 66 20 62 6f 75 6e 64 20 70 61 72 61 6d  s of bound param
95d0: 65 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67  eter P1 into reg
95e0: 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 49  ister P2.**.** I
95f0: 66 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20  f the parameter 
9600: 69 73 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20 69  is named, then i
9610: 74 73 20 6e 61 6d 65 20 61 70 70 65 61 72 73 20  ts name appears 
9620: 69 6e 20 50 34 2e 0a 2a 2a 20 54 68 65 20 50 34  in P4..** The P4
9630: 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20 62   value is used b
9640: 79 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70  y sqlite3_bind_p
9650: 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 29 2e  arameter_name().
9660: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 72 69  .*/.case OP_Vari
9670: 61 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20  able: {         
9680: 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
9690: 4d 65 6d 20 2a 70 56 61 72 3b 20 20 20 20 20 20  Mem *pVar;      
96a0: 20 2f 2a 20 56 61 6c 75 65 20 62 65 69 6e 67 20   /* Value being 
96b0: 74 72 61 6e 73 66 65 72 72 65 64 20 2a 2f 0a 0a  transferred */..
96c0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
96d0: 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d  1>0 && pOp->p1<=
96e0: 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 61 73 73  p->nVar );.  ass
96f0: 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d  ert( pOp->p4.z==
9700: 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d  0 || pOp->p4.z==
9710: 73 71 6c 69 74 65 33 56 4c 69 73 74 4e 75 6d 54  sqlite3VListNumT
9720: 6f 4e 61 6d 65 28 70 2d 3e 70 56 4c 69 73 74 2c  oName(p->pVList,
9730: 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 70 56  pOp->p1) );.  pV
9740: 61 72 20 3d 20 26 70 2d 3e 61 56 61 72 5b 70 4f  ar = &p->aVar[pO
9750: 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 69 66  p->p1 - 1];.  if
9760: 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
9770: 54 6f 6f 42 69 67 28 70 56 61 72 29 20 29 7b 0a  TooBig(pVar) ){.
9780: 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
9790: 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26  ;.  }.  pOut = &
97a0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
97b0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
97c0: 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c  hallowCopy(pOut,
97d0: 20 70 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69   pVar, MEM_Stati
97e0: 63 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  c);.  UPDATE_MAX
97f0: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
9800: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
9810: 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20  Opcode: Move P1 
9820: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
9830: 6f 70 73 69 73 3a 20 72 5b 50 32 40 50 33 5d 3d  opsis: r[P2@P3]=
9840: 72 5b 50 31 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d  r[P1@P3].**.** M
9850: 6f 76 65 20 74 68 65 20 50 33 20 76 61 6c 75 65  ove the P3 value
9860: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
9870: 2e 2e 50 31 2b 50 33 2d 31 20 6f 76 65 72 20 69  ..P1+P3-1 over i
9880: 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73  nto.** registers
9890: 20 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52   P2..P2+P3-1.  R
98a0: 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b  egisters P1..P1+
98b0: 50 33 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74  P3-1 are.** left
98c0: 20 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e   holding a NULL.
98d0: 20 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72    It is an error
98e0: 20 66 6f 72 20 72 65 67 69 73 74 65 72 20 72 61   for register ra
98f0: 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50  nges.** P1..P1+P
9900: 33 2d 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50  3-1 and P2..P2+P
9910: 33 2d 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e 20  3-1 to overlap. 
9920: 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 0a   It is an error.
9930: 2a 2a 20 66 6f 72 20 50 33 20 74 6f 20 62 65 20  ** for P3 to be 
9940: 6c 65 73 73 20 74 68 61 6e 20 31 2e 0a 2a 2f 0a  less than 1..*/.
9950: 63 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a  case OP_Move: {.
9960: 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20    int n;        
9970: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
9980: 72 65 67 69 73 74 65 72 73 20 6c 65 66 74 20 74  registers left t
9990: 6f 20 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20  o copy */.  int 
99a0: 70 31 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p1;          /* 
99b0: 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79  Register to copy
99c0: 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70   from */.  int p
99d0: 32 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  2;          /* R
99e0: 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20  egister to copy 
99f0: 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70  to */..  n = pOp
9a00: 2d 3e 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70  ->p3;.  p1 = pOp
9a10: 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70  ->p1;.  p2 = pOp
9a20: 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
9a30: 6e 3e 30 20 26 26 20 70 31 3e 30 20 26 26 20 70  n>0 && p1>0 && p
9a40: 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  2>0 );.  assert(
9a50: 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b   p1+n<=p2 || p2+
9a60: 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31  n<=p1 );..  pIn1
9a70: 20 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20   = &aMem[p1];.  
9a80: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d  pOut = &aMem[p2]
9a90: 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65  ;.  do{.    asse
9aa0: 72 74 28 20 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b  rt( pOut<=&aMem[
9ab0: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
9ac0: 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20  nCursor)] );.   
9ad0: 20 61 73 73 65 72 74 28 20 70 49 6e 31 3c 3d 26   assert( pIn1<=&
9ae0: 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20  aMem[(p->nMem+1 
9af0: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29  - p->nCursor)] )
9b00: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
9b10: 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29  mIsValid(pIn1) )
9b20: 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f  ;.    memAboutTo
9b30: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
9b40: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
9b50: 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49  MemMove(pOut, pI
9b60: 6e 31 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  n1);.#ifdef SQLI
9b70: 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28  TE_DEBUG.    if(
9b80: 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f   pOut->pScopyFro
9b90: 6d 3e 3d 26 61 4d 65 6d 5b 70 31 5d 20 26 26 20  m>=&aMem[p1] && 
9ba0: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
9bb0: 3c 70 4f 75 74 20 29 7b 0a 20 20 20 20 20 20 70  <pOut ){.      p
9bc0: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20  Out->pScopyFrom 
9bd0: 2b 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 70 31 3b  += pOp->p2 - p1;
9be0: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
9bf0: 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65    Deephemeralize
9c00: 28 70 4f 75 74 29 3b 0a 20 20 20 20 52 45 47 49  (pOut);.    REGI
9c10: 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c  STER_TRACE(p2++,
9c20: 20 70 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e 31   pOut);.    pIn1
9c30: 2b 2b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a  ++;.    pOut++;.
9c40: 20 20 7d 77 68 69 6c 65 28 20 2d 2d 6e 20 29 3b    }while( --n );
9c50: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
9c60: 4f 70 63 6f 64 65 3a 20 43 6f 70 79 20 50 31 20  Opcode: Copy P1 
9c70: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
9c80: 6f 70 73 69 73 3a 20 72 5b 50 32 40 50 33 2b 31  opsis: r[P2@P3+1
9c90: 5d 3d 72 5b 50 31 40 50 33 2b 31 5d 0a 2a 2a 0a  ]=r[P1@P3+1].**.
9ca0: 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f  ** Make a copy o
9cb0: 66 20 72 65 67 69 73 74 65 72 73 20 50 31 2e 2e  f registers P1..
9cc0: 50 31 2b 50 33 20 69 6e 74 6f 20 72 65 67 69 73  P1+P3 into regis
9cd0: 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2e 0a  ters P2..P2+P3..
9ce0: 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
9cf0: 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64  uction makes a d
9d00: 65 65 70 20 63 6f 70 79 20 6f 66 20 74 68 65 20  eep copy of the 
9d10: 76 61 6c 75 65 2e 20 20 41 20 64 75 70 6c 69 63  value.  A duplic
9d20: 61 74 65 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f  ate.** is made o
9d30: 66 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20  f any string or 
9d40: 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20  blob constant.  
9d50: 53 65 65 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70  See also OP_SCop
9d60: 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  y..*/.case OP_Co
9d70: 70 79 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 0a  py: {.  int n;..
9d80: 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20    n = pOp->p3;. 
9d90: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
9da0: 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p1];.  pOut =
9db0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
9dc0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 21  .  assert( pOut!
9dd0: 3d 70 49 6e 31 20 29 3b 0a 20 20 77 68 69 6c 65  =pIn1 );.  while
9de0: 28 20 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ( 1 ){.    sqlit
9df0: 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
9e00: 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c  Copy(pOut, pIn1,
9e10: 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 20   MEM_Ephem);.   
9e20: 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28   Deephemeralize(
9e30: 70 4f 75 74 29 3b 0a 23 69 66 64 65 66 20 53 51  pOut);.#ifdef SQ
9e40: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 70  LITE_DEBUG.    p
9e50: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20  Out->pScopyFrom 
9e60: 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  = 0;.#endif.    
9e70: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
9e80: 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 2d 6e  Op->p2+pOp->p3-n
9e90: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 69 66 28  , pOut);.    if(
9ea0: 20 28 6e 2d 2d 29 3d 3d 30 20 29 20 62 72 65 61   (n--)==0 ) brea
9eb0: 6b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20  k;.    pOut++;. 
9ec0: 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20     pIn1++;.  }. 
9ed0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
9ee0: 63 6f 64 65 3a 20 53 43 6f 70 79 20 50 31 20 50  code: SCopy P1 P
9ef0: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
9f00: 73 69 73 3a 20 72 5b 50 32 5d 3d 72 5b 50 31 5d  sis: r[P2]=r[P1]
9f10: 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68  .**.** Make a sh
9f20: 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72 65  allow copy of re
9f30: 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72  gister P1 into r
9f40: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
9f50: 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
9f60: 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c  on makes a shall
9f70: 6f 77 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76  ow copy of the v
9f80: 61 6c 75 65 2e 20 20 49 66 20 74 68 65 20 76 61  alue.  If the va
9f90: 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73 74 72 69  lue.** is a stri
9fa0: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e  ng or blob, then
9fb0: 20 74 68 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c   the copy is onl
9fc0: 79 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  y a pointer to t
9fd0: 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61  he.** original a
9fe0: 6e 64 20 68 65 6e 63 65 20 69 66 20 74 68 65 20  nd hence if the 
9ff0: 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e 67 65 73  original changes
a000: 20 73 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f 70   so will the cop
a010: 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20  y..** Worse, if 
a020: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 69 73 20  the original is 
a030: 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65  deallocated, the
a040: 20 63 6f 70 79 20 62 65 63 6f 6d 65 73 20 69 6e   copy becomes in
a050: 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74  valid..** Thus t
a060: 68 65 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20  he program must 
a070: 67 75 61 72 61 6e 74 65 65 20 74 68 61 74 20 74  guarantee that t
a080: 68 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c  he original will
a090: 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64   not change.** d
a0a0: 75 72 69 6e 67 20 74 68 65 20 6c 69 66 65 74 69  uring the lifeti
a0b0: 6d 65 20 6f 66 20 74 68 65 20 63 6f 70 79 2e 20  me of the copy. 
a0c0: 20 55 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20   Use OP_Copy to 
a0d0: 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a  make a complete.
a0e0: 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65  ** copy..*/.case
a0f0: 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20   OP_SCopy: {    
a100: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
a110: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
a120: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
a130: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
a140: 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
a150: 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73  Out!=pIn1 );.  s
a160: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
a170: 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
a180: 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b  In1, MEM_Ephem);
a190: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
a1a0: 45 42 55 47 0a 20 20 69 66 28 20 70 4f 75 74 2d  EBUG.  if( pOut-
a1b0: 3e 70 53 63 6f 70 79 46 72 6f 6d 3d 3d 30 20 29  >pScopyFrom==0 )
a1c0: 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f   pOut->pScopyFro
a1d0: 6d 20 3d 20 70 49 6e 31 3b 0a 23 65 6e 64 69 66  m = pIn1;.#endif
a1e0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
a1f0: 4f 70 63 6f 64 65 3a 20 49 6e 74 43 6f 70 79 20  Opcode: IntCopy 
a200: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
a210: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
a220: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73  [P1].**.** Trans
a230: 66 65 72 20 74 68 65 20 69 6e 74 65 67 65 72 20  fer the integer 
a240: 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 72 65  value held in re
a250: 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72  gister P1 into r
a260: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
a270: 2a 20 54 68 69 73 20 69 73 20 61 6e 20 6f 70 74  * This is an opt
a280: 69 6d 69 7a 65 64 20 76 65 72 73 69 6f 6e 20 6f  imized version o
a290: 66 20 53 43 6f 70 79 20 74 68 61 74 20 77 6f 72  f SCopy that wor
a2a0: 6b 73 20 6f 6e 6c 79 20 66 6f 72 20 69 6e 74 65  ks only for inte
a2b0: 67 65 72 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a  ger.** values..*
a2c0: 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 43 6f 70  /.case OP_IntCop
a2d0: 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  y: {            
a2e0: 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e  /* out2 */.  pIn
a2f0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
a300: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  1];.  assert( (p
a310: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
a320: 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 70 4f  _Int)!=0 );.  pO
a330: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
a340: 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  p2];.  sqlite3Vd
a350: 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f  beMemSetInt64(pO
a360: 75 74 2c 20 70 49 6e 31 2d 3e 75 2e 69 29 3b 0a  ut, pIn1->u.i);.
a370: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
a380: 70 63 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f 77  pcode: ResultRow
a390: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
a3a0: 53 79 6e 6f 70 73 69 73 3a 20 6f 75 74 70 75 74  Synopsis: output
a3b0: 3d 72 5b 50 31 40 50 32 5d 0a 2a 2a 0a 2a 2a 20  =r[P1@P2].**.** 
a3c0: 54 68 65 20 72 65 67 69 73 74 65 72 73 20 50 31  The registers P1
a3d0: 20 74 68 72 6f 75 67 68 20 50 31 2b 50 32 2d 31   through P1+P2-1
a3e0: 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c   contain a singl
a3f0: 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72 65 73 75  e row of.** resu
a400: 6c 74 73 2e 20 54 68 69 73 20 6f 70 63 6f 64 65  lts. This opcode
a410: 20 63 61 75 73 65 73 20 74 68 65 20 73 71 6c 69   causes the sqli
a420: 74 65 33 5f 73 74 65 70 28 29 20 63 61 6c 6c 20  te3_step() call 
a430: 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a 2a 2a 20  to terminate.** 
a440: 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 52  with an SQLITE_R
a450: 4f 57 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61  OW return code a
a460: 6e 64 20 69 74 20 73 65 74 73 20 75 70 20 74 68  nd it sets up th
a470: 65 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 0a 2a  e sqlite3_stmt.*
a480: 2a 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 70  * structure to p
a490: 72 6f 76 69 64 65 20 61 63 63 65 73 73 20 74 6f  rovide access to
a4a0: 20 74 68 65 20 72 28 50 31 29 2e 2e 72 28 50 31   the r(P1)..r(P1
a4b0: 2b 50 32 2d 31 29 20 76 61 6c 75 65 73 20 61 73  +P2-1) values as
a4c0: 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 72  .** the result r
a4d0: 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ow..*/.case OP_R
a4e0: 65 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65  esultRow: {.  Me
a4f0: 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69  m *pMem;.  int i
a500: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6e  ;.  assert( p->n
a510: 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e  ResColumn==pOp->
a520: 70 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  p2 );.  assert( 
a530: 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61  pOp->p1>0 );.  a
a540: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70  ssert( pOp->p1+p
a550: 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p2<=(p->nMem
a560: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
a570: 2b 31 20 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53  +1 );..#ifndef S
a580: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
a590: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f  ESS_CALLBACK.  /
a5a0: 2a 20 52 75 6e 20 74 68 65 20 70 72 6f 67 72 65  * Run the progre
a5b0: 73 73 20 63 6f 75 6e 74 65 72 20 6a 75 73 74 20  ss counter just 
a5c0: 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67  before returning
a5d0: 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d  ..  */.  if( db-
a5e0: 3e 78 50 72 6f 67 72 65 73 73 21 3d 30 0a 20 20  >xProgress!=0.  
a5f0: 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72   && nVmStep>=nPr
a600: 6f 67 72 65 73 73 4c 69 6d 69 74 20 0a 20 20 20  ogressLimit .   
a610: 26 26 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73  && db->xProgress
a620: 28 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72  (db->pProgressAr
a630: 67 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 72  g)!=0.  ){.    r
a640: 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52  c = SQLITE_INTER
a650: 52 55 50 54 3b 0a 20 20 20 20 67 6f 74 6f 20 61  RUPT;.    goto a
a660: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
a670: 72 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  r;.  }.#endif.. 
a680: 20 2f 2a 20 49 66 20 74 68 69 73 20 73 74 61 74   /* If this stat
a690: 65 6d 65 6e 74 20 68 61 73 20 76 69 6f 6c 61 74  ement has violat
a6a0: 65 64 20 69 6d 6d 65 64 69 61 74 65 20 66 6f 72  ed immediate for
a6b0: 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
a6c0: 69 6e 74 73 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f  ints, do.  ** no
a6d0: 74 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d  t return the num
a6e0: 62 65 72 20 6f 66 20 72 6f 77 73 20 6d 6f 64 69  ber of rows modi
a6f0: 66 69 65 64 2e 20 41 6e 64 20 64 6f 20 6e 6f 74  fied. And do not
a700: 20 52 45 4c 45 41 53 45 20 74 68 65 20 73 74 61   RELEASE the sta
a710: 74 65 6d 65 6e 74 0a 20 20 2a 2a 20 74 72 61 6e  tement.  ** tran
a720: 73 61 63 74 69 6f 6e 2e 20 49 74 20 6e 65 65 64  saction. It need
a730: 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62  s to be rolled b
a740: 61 63 6b 2e 20 20 2a 2f 0a 20 20 69 66 28 20 53  ack.  */.  if( S
a750: 51 4c 49 54 45 5f 4f 4b 21 3d 28 72 63 20 3d 20  QLITE_OK!=(rc = 
a760: 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
a770: 46 6b 28 70 2c 20 30 29 29 20 29 7b 0a 20 20 20  Fk(p, 0)) ){.   
a780: 20 61 73 73 65 72 74 28 20 64 62 2d 3e 66 6c 61   assert( db->fla
a790: 67 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52  gs&SQLITE_CountR
a7a0: 6f 77 73 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ows );.    asser
a7b0: 74 28 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f  t( p->usesStmtJo
a7c0: 75 72 6e 61 6c 20 29 3b 0a 20 20 20 20 67 6f 74  urnal );.    got
a7d0: 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
a7e0: 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  rror;.  }..  /* 
a7f0: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 43 6f  If the SQLITE_Co
a800: 75 6e 74 52 6f 77 73 20 66 6c 61 67 20 69 73 20  untRows flag is 
a810: 73 65 74 20 69 6e 20 73 71 6c 69 74 65 33 2e 66  set in sqlite3.f
a820: 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
a830: 0a 20 20 2a 2a 20 44 4d 4c 20 73 74 61 74 65 6d  .  ** DML statem
a840: 65 6e 74 73 20 69 6e 76 6f 6b 65 20 74 68 69 73  ents invoke this
a850: 20 6f 70 63 6f 64 65 20 74 6f 20 72 65 74 75 72   opcode to retur
a860: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
a870: 72 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f 64 69 66  rows .  ** modif
a880: 69 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e  ied to the user.
a890: 20 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c   This is the onl
a8a0: 79 20 77 61 79 20 74 68 61 74 20 61 20 56 4d 20  y way that a VM 
a8b0: 74 68 61 74 0a 20 20 2a 2a 20 6f 70 65 6e 73 20  that.  ** opens 
a8c0: 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  a statement tran
a8d0: 73 61 63 74 69 6f 6e 20 6d 61 79 20 69 6e 76 6f  saction may invo
a8e0: 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  ke this opcode..
a8f0: 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63 61 73    **.  ** In cas
a900: 65 20 74 68 69 73 20 69 73 20 73 75 63 68 20 61  e this is such a
a910: 20 73 74 61 74 65 6d 65 6e 74 2c 20 63 6c 6f 73   statement, clos
a920: 65 20 61 6e 79 20 73 74 61 74 65 6d 65 6e 74 20  e any statement 
a930: 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20 2a 2a  transaction.  **
a940: 20 6f 70 65 6e 65 64 20 62 79 20 74 68 69 73 20   opened by this 
a950: 56 4d 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e  VM before return
a960: 69 6e 67 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74  ing control to t
a970: 68 65 20 75 73 65 72 2e 20 54 68 69 73 20 69 73  he user. This is
a980: 20 74 6f 0a 20 20 2a 2a 20 65 6e 73 75 72 65 20   to.  ** ensure 
a990: 74 68 61 74 20 73 74 61 74 65 6d 65 6e 74 2d 74  that statement-t
a9a0: 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 72 65 20  ransactions are 
a9b0: 61 6c 77 61 79 73 20 6e 65 73 74 65 64 2c 20 6e  always nested, n
a9c0: 6f 74 20 6f 76 65 72 6c 61 70 70 69 6e 67 2e 0a  ot overlapping..
a9d0: 20 20 2a 2a 20 49 66 20 74 68 65 20 6f 70 65 6e    ** If the open
a9e0: 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73   statement-trans
a9f0: 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6c  action is not cl
aa00: 6f 73 65 64 20 68 65 72 65 2c 20 74 68 65 6e 20  osed here, then 
aa10: 74 68 65 20 75 73 65 72 0a 20 20 2a 2a 20 6d 61  the user.  ** ma
aa20: 79 20 73 74 65 70 20 61 6e 6f 74 68 65 72 20 56  y step another V
aa30: 4d 20 74 68 61 74 20 6f 70 65 6e 73 20 69 74 73  M that opens its
aa40: 20 6f 77 6e 20 73 74 61 74 65 6d 65 6e 74 20 74   own statement t
aa50: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 54 68 69 73  ransaction. This
aa60: 0a 20 20 2a 2a 20 6d 61 79 20 6c 65 61 64 20 74  .  ** may lead t
aa70: 6f 20 6f 76 65 72 6c 61 70 70 69 6e 67 20 73 74  o overlapping st
aa80: 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
aa90: 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ions..  **.  ** 
aaa0: 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72  The statement tr
aab0: 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 65 76  ansaction is nev
aac0: 65 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20 74  er a top-level t
aad0: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 48 65 6e  ransaction.  Hen
aae0: 63 65 0a 20 20 2a 2a 20 74 68 65 20 52 45 4c 45  ce.  ** the RELE
aaf0: 41 53 45 20 63 61 6c 6c 20 62 65 6c 6f 77 20 63  ASE call below c
ab00: 61 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e 0a 20  an never fail.. 
ab10: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d   */.  assert( p-
ab20: 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 7c  >iStatement==0 |
ab30: 7c 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49  | db->flags&SQLI
ab40: 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a  TE_CountRows );.
ab50: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
ab60: 62 65 43 6c 6f 73 65 53 74 61 74 65 6d 65 6e 74  beCloseStatement
ab70: 28 70 2c 20 53 41 56 45 50 4f 49 4e 54 5f 52 45  (p, SAVEPOINT_RE
ab80: 4c 45 41 53 45 29 3b 0a 20 20 61 73 73 65 72 74  LEASE);.  assert
ab90: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
aba0: 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 61 6c 69 64  );..  /* Invalid
abb0: 61 74 65 20 61 6c 6c 20 65 70 68 65 6d 65 72 61  ate all ephemera
abc0: 6c 20 63 75 72 73 6f 72 20 72 6f 77 20 63 61 63  l cursor row cac
abd0: 68 65 73 20 2a 2f 0a 20 20 70 2d 3e 63 61 63 68  hes */.  p->cach
abe0: 65 43 74 72 20 3d 20 28 70 2d 3e 63 61 63 68 65  eCtr = (p->cache
abf0: 43 74 72 20 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f  Ctr + 2)|1;..  /
ac00: 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20  * Make sure the 
ac10: 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63  results of the c
ac20: 75 72 72 65 6e 74 20 72 6f 77 20 61 72 65 20 5c  urrent row are \
ac30: 30 30 30 20 74 65 72 6d 69 6e 61 74 65 64 0a 20  000 terminated. 
ac40: 20 2a 2a 20 61 6e 64 20 68 61 76 65 20 61 6e 20   ** and have an 
ac50: 61 73 73 69 67 6e 65 64 20 74 79 70 65 2e 20 20  assigned type.  
ac60: 54 68 65 20 72 65 73 75 6c 74 73 20 61 72 65 20  The results are 
ac70: 64 65 2d 65 70 68 65 6d 65 72 61 6c 69 7a 65 64  de-ephemeralized
ac80: 20 61 73 0a 20 20 2a 2a 20 61 20 73 69 64 65 20   as.  ** a side 
ac90: 65 66 66 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 70  effect..  */.  p
aca0: 4d 65 6d 20 3d 20 70 2d 3e 70 52 65 73 75 6c 74  Mem = p->pResult
acb0: 53 65 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Set = &aMem[pOp-
acc0: 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  >p1];.  for(i=0;
acd0: 20 69 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29   i<pOp->p2; i++)
ace0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  {.    assert( me
acf0: 6d 49 73 56 61 6c 69 64 28 26 70 4d 65 6d 5b 69  mIsValid(&pMem[i
ad00: 5d 29 20 29 3b 0a 20 20 20 20 44 65 65 70 68 65  ]) );.    Deephe
ad10: 6d 65 72 61 6c 69 7a 65 28 26 70 4d 65 6d 5b 69  meralize(&pMem[i
ad20: 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  ]);.    assert( 
ad30: 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26  (pMem[i].flags &
ad40: 20 4d 45 4d 5f 45 70 68 65 6d 29 3d 3d 30 0a 20   MEM_Ephem)==0. 
ad50: 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 28 70             || (p
ad60: 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 28  Mem[i].flags & (
ad70: 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62  MEM_Str|MEM_Blob
ad80: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c  ))==0 );.    sql
ad90: 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6c 54 65  ite3VdbeMemNulTe
ada0: 72 6d 69 6e 61 74 65 28 26 70 4d 65 6d 5b 69 5d  rminate(&pMem[i]
adb0: 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
adc0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c  TRACE(pOp->p1+i,
add0: 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a   &pMem[i]);.  }.
ade0: 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63    if( db->malloc
adf0: 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f  Failed ) goto no
ae00: 5f 6d 65 6d 3b 0a 0a 20 20 69 66 28 20 64 62 2d  _mem;..  if( db-
ae10: 3e 6d 54 72 61 63 65 20 26 20 53 51 4c 49 54 45  >mTrace & SQLITE
ae20: 5f 54 52 41 43 45 5f 52 4f 57 20 29 7b 0a 20 20  _TRACE_ROW ){.  
ae30: 20 20 64 62 2d 3e 78 54 72 61 63 65 28 53 51 4c    db->xTrace(SQL
ae40: 49 54 45 5f 54 52 41 43 45 5f 52 4f 57 2c 20 64  ITE_TRACE_ROW, d
ae50: 62 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 70 2c  b->pTraceArg, p,
ae60: 20 30 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52   0);.  }..  /* R
ae70: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 52 4f 57  eturn SQLITE_ROW
ae80: 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d 20  .  */.  p->pc = 
ae90: 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
aea0: 20 2b 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c   + 1;.  rc = SQL
aeb0: 49 54 45 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20  ITE_ROW;.  goto 
aec0: 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a  vdbe_return;.}..
aed0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61  /* Opcode: Conca
aee0: 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
aef0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
af00: 5d 3d 72 5b 50 32 5d 2b 72 5b 50 31 5d 0a 2a 2a  ]=r[P2]+r[P1].**
af10: 0a 2a 2a 20 41 64 64 20 74 68 65 20 74 65 78 74  .** Add the text
af20: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
af30: 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20  onto the end of 
af40: 74 68 65 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72  the text in.** r
af50: 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 73  egister P2 and s
af60: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
af70: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
af80: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 74 68 65  ** If either the
af90: 20 50 31 20 6f 72 20 50 32 20 74 65 78 74 20 61   P1 or P2 text a
afa0: 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f  re NULL then sto
afb0: 72 65 20 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a  re NULL in P3..*
afc0: 2a 0a 2a 2a 20 20 20 50 33 20 3d 20 50 32 20 7c  *.**   P3 = P2 |
afd0: 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73  | P1.**.** It is
afe0: 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20 50 31 20   illegal for P1 
aff0: 61 6e 64 20 50 33 20 74 6f 20 62 65 20 74 68 65  and P3 to be the
b000: 20 73 61 6d 65 20 72 65 67 69 73 74 65 72 2e 20   same register. 
b010: 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66  Sometimes,.** if
b020: 20 50 33 20 69 73 20 74 68 65 20 73 61 6d 65 20   P3 is the same 
b030: 72 65 67 69 73 74 65 72 20 61 73 20 50 32 2c 20  register as P2, 
b040: 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
b050: 6f 6e 20 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f  on is able.** to
b060: 20 61 76 6f 69 64 20 61 20 6d 65 6d 63 70 79 28   avoid a memcpy(
b070: 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  )..*/.case OP_Co
b080: 6e 63 61 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ncat: {         
b090: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
b0a0: 43 4f 4e 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32  CONCAT, in1, in2
b0b0: 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20  , out3 */.  i64 
b0c0: 6e 42 79 74 65 3b 0a 0a 20 20 70 49 6e 31 20 3d  nByte;..  pIn1 =
b0d0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
b0e0: 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
b0f0: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74  pOp->p2];.  pOut
b100: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
b110: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
b120: 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20 69 66 28  1!=pOut );.  if(
b130: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20   (pIn1->flags | 
b140: 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d  pIn2->flags) & M
b150: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73  EM_Null ){.    s
b160: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
b170: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20  Null(pOut);.    
b180: 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28  break;.  }.  if(
b190: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31   ExpandBlob(pIn1
b1a0: 29 20 7c 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28  ) || ExpandBlob(
b1b0: 70 49 6e 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f  pIn2) ) goto no_
b1c0: 6d 65 6d 3b 0a 20 20 53 74 72 69 6e 67 69 66 79  mem;.  Stringify
b1d0: 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29  (pIn1, encoding)
b1e0: 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 49  ;.  Stringify(pI
b1f0: 6e 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  n2, encoding);. 
b200: 20 6e 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e   nByte = pIn1->n
b210: 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66   + pIn2->n;.  if
b220: 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d  ( nByte>db->aLim
b230: 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
b240: 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67  LENGTH] ){.    g
b250: 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
b260: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
b270: 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20  beMemGrow(pOut, 
b280: 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f  (int)nByte+2, pO
b290: 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20  ut==pIn2) ){.   
b2a0: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
b2b0: 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  }.  MemSetTypeFl
b2c0: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72  ag(pOut, MEM_Str
b2d0: 29 3b 0a 20 20 69 66 28 20 70 4f 75 74 21 3d 70  );.  if( pOut!=p
b2e0: 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70  In2 ){.    memcp
b2f0: 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d  y(pOut->z, pIn2-
b300: 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20  >z, pIn2->n);.  
b310: 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f 75 74  }.  memcpy(&pOut
b320: 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49  ->z[pIn2->n], pI
b330: 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b  n1->z, pIn1->n);
b340: 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65  .  pOut->z[nByte
b350: 5d 3d 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e  ]=0;.  pOut->z[n
b360: 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70  Byte+1] = 0;.  p
b370: 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Out->flags |= ME
b380: 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e  M_Term;.  pOut->
b390: 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a  n = (int)nByte;.
b3a0: 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e    pOut->enc = en
b3b0: 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45  coding;.  UPDATE
b3c0: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
b3d0: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
b3e0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 20  ./* Opcode: Add 
b3f0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
b400: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
b410: 72 5b 50 31 5d 2b 72 5b 50 32 5d 0a 2a 2a 0a 2a  r[P1]+r[P2].**.*
b420: 2a 20 41 64 64 20 74 68 65 20 76 61 6c 75 65 20  * Add the value 
b430: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
b440: 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  o the value in r
b450: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
b460: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
b470: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
b480: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
b490: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
b4a0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
b4b0: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
b4c0: 20 4d 75 6c 74 69 70 6c 79 20 50 31 20 50 32 20   Multiply P1 P2 
b4d0: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
b4e0: 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2a  is: r[P3]=r[P1]*
b4f0: 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d  r[P2].**.**.** M
b500: 75 6c 74 69 70 6c 79 20 74 68 65 20 76 61 6c 75  ultiply the valu
b510: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
b520: 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e   by the value in
b530: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
b540: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
b550: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
b560: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
b570: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
b580: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
b590: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
b5a0: 65 3a 20 53 75 62 74 72 61 63 74 20 50 31 20 50  e: Subtract P1 P
b5b0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
b5c0: 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32  psis: r[P3]=r[P2
b5d0: 5d 2d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 75  ]-r[P1].**.** Su
b5e0: 62 74 72 61 63 74 20 74 68 65 20 76 61 6c 75 65  btract the value
b5f0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
b600: 66 72 6f 6d 20 74 68 65 20 76 61 6c 75 65 20 69  from the value i
b610: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
b620: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
b630: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
b640: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
b650: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
b660: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
b670: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
b680: 64 65 3a 20 44 69 76 69 64 65 20 50 31 20 50 32  de: Divide P1 P2
b690: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
b6a0: 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d  sis: r[P3]=r[P2]
b6b0: 2f 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 44 69 76  /r[P1].**.** Div
b6c0: 69 64 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ide the value in
b6d0: 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20   register P1 by 
b6e0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
b6f0: 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20  ister P2.** and 
b700: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
b710: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
b720: 28 50 33 3d 50 32 2f 50 31 29 2e 20 49 66 20 74  (P3=P2/P1). If t
b730: 68 65 20 76 61 6c 75 65 20 69 6e 20 0a 2a 2a 20  he value in .** 
b740: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 7a  register P1 is z
b750: 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 72 65  ero, then the re
b760: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 49 66  sult is NULL. If
b770: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
b780: 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 20 72   .** NULL, the r
b790: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
b7a0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d  /./* Opcode: Rem
b7b0: 61 69 6e 64 65 72 20 50 31 20 50 32 20 50 33 20  ainder P1 P2 P3 
b7c0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
b7d0: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 25 72 5b 50   r[P3]=r[P2]%r[P
b7e0: 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65  1].**.** Compute
b7f0: 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 61   the remainder a
b800: 66 74 65 72 20 69 6e 74 65 67 65 72 20 72 65 67  fter integer reg
b810: 69 73 74 65 72 20 50 32 20 69 73 20 64 69 76 69  ister P2 is divi
b820: 64 65 64 20 62 79 20 0a 2a 2a 20 72 65 67 69 73  ded by .** regis
b830: 74 65 72 20 50 31 20 61 6e 64 20 73 74 6f 72 65  ter P1 and store
b840: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
b850: 65 67 69 73 74 65 72 20 50 33 2e 20 0a 2a 2a 20  egister P3. .** 
b860: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  If the value in 
b870: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 7a  register P1 is z
b880: 65 72 6f 20 74 68 65 20 72 65 73 75 6c 74 20 69  ero the result i
b890: 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69  s NULL..** If ei
b8a0: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
b8b0: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
b8c0: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73   is NULL..*/.cas
b8d0: 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20  e OP_Add:       
b8e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
b8f0: 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55 53 2c 20  ame as TK_PLUS, 
b900: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
b910: 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61  /.case OP_Subtra
b920: 63 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  ct:             
b930: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4d   /* same as TK_M
b940: 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  INUS, in1, in2, 
b950: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
b960: 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 20 20 20  Multiply:       
b970: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
b980: 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e 31 2c 20  s TK_STAR, in1, 
b990: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
b9a0: 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 20 20 20  e OP_Divide:    
b9b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
b9c0: 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41 53 48 2c  ame as TK_SLASH,
b9d0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
b9e0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6d 61 69  */.case OP_Remai
b9f0: 6e 64 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20  nder: {         
ba00: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
ba10: 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  REM, in1, in2, o
ba20: 75 74 33 20 2a 2f 0a 20 20 63 68 61 72 20 62 49  ut3 */.  char bI
ba30: 6e 74 69 6e 74 3b 20 20 20 2f 2a 20 53 74 61 72  ntint;   /* Star
ba40: 74 65 64 20 6f 75 74 20 61 73 20 74 77 6f 20 69  ted out as two i
ba50: 6e 74 65 67 65 72 20 6f 70 65 72 61 6e 64 73 20  nteger operands 
ba60: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 3b 20  */.  u16 flags; 
ba70: 20 20 20 20 20 2f 2a 20 43 6f 6d 62 69 6e 65 64       /* Combined
ba80: 20 4d 45 4d 5f 2a 20 66 6c 61 67 73 20 66 72 6f   MEM_* flags fro
ba90: 6d 20 62 6f 74 68 20 69 6e 70 75 74 73 20 2a 2f  m both inputs */
baa0: 0a 20 20 75 31 36 20 74 79 70 65 31 3b 20 20 20  .  u16 type1;   
bab0: 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79     /* Numeric ty
bac0: 70 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61  pe of left opera
bad0: 6e 64 20 2a 2f 0a 20 20 75 31 36 20 74 79 70 65  nd */.  u16 type
bae0: 32 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72  2;      /* Numer
baf0: 69 63 20 74 79 70 65 20 6f 66 20 72 69 67 68 74  ic type of right
bb00: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36   operand */.  i6
bb10: 34 20 69 41 3b 20 20 20 20 20 20 20 20 20 2f 2a  4 iA;         /*
bb20: 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f   Integer value o
bb30: 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a  f left operand *
bb40: 2f 0a 20 20 69 36 34 20 69 42 3b 20 20 20 20 20  /.  i64 iB;     
bb50: 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76      /* Integer v
bb60: 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70  alue of right op
bb70: 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c  erand */.  doubl
bb80: 65 20 72 41 3b 20 20 20 20 20 20 2f 2a 20 52 65  e rA;      /* Re
bb90: 61 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74  al value of left
bba0: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f   operand */.  do
bbb0: 75 62 6c 65 20 72 42 3b 20 20 20 20 20 20 2f 2a  uble rB;      /*
bbc0: 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 72   Real value of r
bbd0: 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  ight operand */.
bbe0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
bbf0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 74 79 70 65  pOp->p1];.  type
bc00: 31 20 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28  1 = numericType(
bc10: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20  pIn1);.  pIn2 = 
bc20: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
bc30: 20 20 74 79 70 65 32 20 3d 20 6e 75 6d 65 72 69    type2 = numeri
bc40: 63 54 79 70 65 28 70 49 6e 32 29 3b 0a 20 20 70  cType(pIn2);.  p
bc50: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
bc60: 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 20 3d 20  >p3];.  flags = 
bc70: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
bc80: 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28  n2->flags;.  if(
bc90: 20 28 74 79 70 65 31 20 26 20 74 79 70 65 32 20   (type1 & type2 
bca0: 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 7b  & MEM_Int)!=0 ){
bcb0: 0a 20 20 20 20 69 41 20 3d 20 70 49 6e 31 2d 3e  .    iA = pIn1->
bcc0: 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d 20 70 49  u.i;.    iB = pI
bcd0: 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 62 49 6e  n2->u.i;.    bIn
bce0: 74 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 73 77  tint = 1;.    sw
bcf0: 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  itch( pOp->opcod
bd00: 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20  e ){.      case 
bd10: 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 69 66  OP_Add:       if
bd20: 28 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36  ( sqlite3AddInt6
bd30: 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f  4(&iB,iA) ) goto
bd40: 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b   fp_math;  break
bd50: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
bd60: 53 75 62 74 72 61 63 74 3a 20 20 69 66 28 20 73  Subtract:  if( s
bd70: 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28 26  qlite3SubInt64(&
bd80: 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70  iB,iA) ) goto fp
bd90: 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20  _math;  break;. 
bda0: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c       case OP_Mul
bdb0: 74 69 70 6c 79 3a 20 20 69 66 28 20 73 71 6c 69  tiply:  if( sqli
bdc0: 74 65 33 4d 75 6c 49 6e 74 36 34 28 26 69 42 2c  te3MulInt64(&iB,
bdd0: 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61  iA) ) goto fp_ma
bde0: 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  th;  break;.    
bdf0: 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65    case OP_Divide
be00: 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  : {.        if( 
be10: 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69  iA==0 ) goto ari
be20: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
be30: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  s_null;.        
be40: 69 66 28 20 69 41 3d 3d 2d 31 20 26 26 20 69 42  if( iA==-1 && iB
be50: 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34  ==SMALLEST_INT64
be60: 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b   ) goto fp_math;
be70: 0a 20 20 20 20 20 20 20 20 69 42 20 2f 3d 20 69  .        iB /= i
be80: 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  A;.        break
be90: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
bea0: 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20  default: {.     
beb0: 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67     if( iA==0 ) g
bec0: 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72  oto arithmetic_r
bed0: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20  esult_is_null;. 
bee0: 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d         if( iA==-
bef0: 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20  1 ) iA = 1;.    
bf00: 20 20 20 20 69 42 20 25 3d 20 69 41 3b 0a 20 20      iB %= iA;.  
bf10: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
bf20: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70     }.    }.    p
bf30: 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a 20  Out->u.i = iB;. 
bf40: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
bf50: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
bf60: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28 66  ;.  }else if( (f
bf70: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
bf80: 21 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  !=0 ){.    goto 
bf90: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
bfa0: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 7d 65 6c  t_is_null;.  }el
bfb0: 73 65 7b 0a 20 20 20 20 62 49 6e 74 69 6e 74 20  se{.    bIntint 
bfc0: 3d 20 30 3b 0a 66 70 5f 6d 61 74 68 3a 0a 20 20  = 0;.fp_math:.  
bfd0: 20 20 72 41 20 3d 20 73 71 6c 69 74 65 33 56 64    rA = sqlite3Vd
bfe0: 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31  beRealValue(pIn1
bff0: 29 3b 0a 20 20 20 20 72 42 20 3d 20 73 71 6c 69  );.    rB = sqli
c000: 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65  te3VdbeRealValue
c010: 28 70 49 6e 32 29 3b 0a 20 20 20 20 73 77 69 74  (pIn2);.    swit
c020: 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ch( pOp->opcode 
c030: 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  ){.      case OP
c040: 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20 72 42  _Add:         rB
c050: 20 2b 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72   += rA;       br
c060: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
c070: 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20  OP_Subtract:    
c080: 72 42 20 2d 3d 20 72 41 3b 20 20 20 20 20 20 20  rB -= rA;       
c090: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
c0a0: 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20  e OP_Multiply:  
c0b0: 20 20 72 42 20 2a 3d 20 72 41 3b 20 20 20 20 20    rB *= rA;     
c0c0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
c0d0: 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b  ase OP_Divide: {
c0e0: 0a 20 20 20 20 20 20 20 20 2f 2a 20 28 64 6f 75  .        /* (dou
c0f0: 62 6c 65 29 30 20 49 6e 20 63 61 73 65 20 6f 66  ble)0 In case of
c100: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
c110: 41 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a  ATING_POINT... *
c120: 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 41  /.        if( rA
c130: 3d 3d 28 64 6f 75 62 6c 65 29 30 20 29 20 67 6f  ==(double)0 ) go
c140: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
c150: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
c160: 20 20 20 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a        rB /= rA;.
c170: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
c180: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66       }.      def
c190: 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20  ault: {.        
c1a0: 69 41 20 3d 20 28 69 36 34 29 72 41 3b 0a 20 20  iA = (i64)rA;.  
c1b0: 20 20 20 20 20 20 69 42 20 3d 20 28 69 36 34 29        iB = (i64)
c1c0: 72 42 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  rB;.        if( 
c1d0: 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69  iA==0 ) goto ari
c1e0: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
c1f0: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  s_null;.        
c200: 69 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20  if( iA==-1 ) iA 
c210: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 72 42 20  = 1;.        rB 
c220: 3d 20 28 64 6f 75 62 6c 65 29 28 69 42 20 25 20  = (double)(iB % 
c230: 69 41 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65  iA);.        bre
c240: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
c250: 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  }.#ifdef SQLITE_
c260: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
c270: 49 4e 54 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  INT.    pOut->u.
c280: 69 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53  i = rB;.    MemS
c290: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
c2a0: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73 65   MEM_Int);.#else
c2b0: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
c2c0: 49 73 4e 61 4e 28 72 42 29 20 29 7b 0a 20 20 20  IsNaN(rB) ){.   
c2d0: 20 20 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74     goto arithmet
c2e0: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
c2f0: 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75  l;.    }.    pOu
c300: 74 2d 3e 75 2e 72 20 3d 20 72 42 3b 0a 20 20 20  t->u.r = 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 52 65 61 6c 29 3b  pOut, MEM_Real);
c330: 0a 20 20 20 20 69 66 28 20 28 28 74 79 70 65 31  .    if( ((type1
c340: 7c 74 79 70 65 32 29 26 4d 45 4d 5f 52 65 61 6c  |type2)&MEM_Real
c350: 29 3d 3d 30 20 26 26 20 21 62 49 6e 74 69 6e 74  )==0 && !bIntint
c360: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
c370: 33 56 64 62 65 49 6e 74 65 67 65 72 41 66 66 69  3VdbeIntegerAffi
c380: 6e 69 74 79 28 70 4f 75 74 29 3b 0a 20 20 20 20  nity(pOut);.    
c390: 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62  }.#endif.  }.  b
c3a0: 72 65 61 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69  reak;..arithmeti
c3b0: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
c3c0: 3a 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  :.  sqlite3VdbeM
c3d0: 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
c3e0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
c3f0: 4f 70 63 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20  Opcode: CollSeq 
c400: 50 31 20 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20  P1 * * P4.**.** 
c410: 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
c420: 74 6f 20 61 20 43 6f 6c 6c 53 65 71 20 6f 62 6a  to a CollSeq obj
c430: 65 63 74 2e 20 49 66 20 74 68 65 20 6e 65 78 74  ect. If the next
c440: 20 63 61 6c 6c 20 74 6f 20 61 20 75 73 65 72 20   call to a user 
c450: 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61  function.** or a
c460: 67 67 72 65 67 61 74 65 20 63 61 6c 6c 73 20 73  ggregate calls s
c470: 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c  qlite3GetFuncCol
c480: 6c 53 65 71 28 29 2c 20 74 68 69 73 20 63 6f 6c  lSeq(), this col
c490: 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
c4a0: 77 69 6c 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72  will.** be retur
c4b0: 6e 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65  ned. This is use
c4c0: 64 20 62 79 20 74 68 65 20 62 75 69 6c 74 2d 69  d by the built-i
c4d0: 6e 20 6d 69 6e 28 29 2c 20 6d 61 78 28 29 20 61  n min(), max() a
c4e0: 6e 64 20 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66  nd nullif().** f
c4f0: 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  unctions..**.** 
c500: 49 66 20 50 31 20 69 73 20 6e 6f 74 20 7a 65 72  If P1 is not zer
c510: 6f 2c 20 74 68 65 6e 20 69 74 20 69 73 20 61 20  o, then it is a 
c520: 72 65 67 69 73 74 65 72 20 74 68 61 74 20 61 20  register that a 
c530: 73 75 62 73 65 71 75 65 6e 74 20 6d 69 6e 28 29  subsequent min()
c540: 20 6f 72 0a 2a 2a 20 6d 61 78 28 29 20 61 67 67   or.** max() agg
c550: 72 65 67 61 74 65 20 77 69 6c 6c 20 73 65 74 20  regate will set 
c560: 74 6f 20 31 20 69 66 20 74 68 65 20 63 75 72 72  to 1 if the curr
c570: 65 6e 74 20 72 6f 77 20 69 73 20 6e 6f 74 20 74  ent row is not t
c580: 68 65 20 6d 69 6e 69 6d 75 6d 20 6f 72 0a 2a 2a  he minimum or.**
c590: 20 6d 61 78 69 6d 75 6d 2e 20 20 54 68 65 20 50   maximum.  The P
c5a0: 31 20 72 65 67 69 73 74 65 72 20 69 73 20 69 6e  1 register is in
c5b0: 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 30 20 62  itialized to 0 b
c5c0: 79 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  y this instructi
c5d0: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e  on..**.** The in
c5e0: 74 65 72 66 61 63 65 20 75 73 65 64 20 62 79 20  terface used by 
c5f0: 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
c600: 6f 6e 20 6f 66 20 74 68 65 20 61 66 6f 72 65 6d  on of the aforem
c610: 65 6e 74 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f  entioned functio
c620: 6e 73 0a 2a 2a 20 74 6f 20 72 65 74 72 69 65 76  ns.** to retriev
c630: 65 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20  e the collation 
c640: 73 65 71 75 65 6e 63 65 20 73 65 74 20 62 79 20  sequence set by 
c650: 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e  this opcode is n
c660: 6f 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20  ot available.** 
c670: 70 75 62 6c 69 63 6c 79 2e 20 20 4f 6e 6c 79 20  publicly.  Only 
c680: 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f  built-in functio
c690: 6e 73 20 68 61 76 65 20 61 63 63 65 73 73 20 74  ns have access t
c6a0: 6f 20 74 68 69 73 20 66 65 61 74 75 72 65 2e 0a  o this feature..
c6b0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53  */.case OP_CollS
c6c0: 65 71 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  eq: {.  assert( 
c6d0: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
c6e0: 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 69 66 28  COLLSEQ );.  if(
c6f0: 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20   pOp->p1 ){.    
c700: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
c710: 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70  tInt64(&aMem[pOp
c720: 2d 3e 70 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20  ->p1], 0);.  }. 
c730: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
c740: 63 6f 64 65 3a 20 42 69 74 41 6e 64 20 50 31 20  code: BitAnd P1 
c750: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
c760: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
c770: 31 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54  1]&r[P2].**.** T
c780: 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65  ake the bit-wise
c790: 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75   AND of the valu
c7a0: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
c7b0: 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20  1 and P2 and.** 
c7c0: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
c7d0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
c7e0: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
c7f0: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
c800: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
c810: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42  .*/./* Opcode: B
c820: 69 74 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20  itOr P1 P2 P3 * 
c830: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
c840: 5b 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b 50 32 5d  [P3]=r[P1]|r[P2]
c850: 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
c860: 62 69 74 2d 77 69 73 65 20 4f 52 20 6f 66 20 74  bit-wise OR of t
c870: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
c880: 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20  ister P1 and P2 
c890: 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  and.** store the
c8a0: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
c8b0: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
c8c0: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
c8d0: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
c8e0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
c8f0: 63 6f 64 65 3a 20 53 68 69 66 74 4c 65 66 74 20  code: ShiftLeft 
c900: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
c910: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
c920: 72 5b 50 32 5d 3c 3c 72 5b 50 31 5d 0a 2a 2a 0a  r[P2]<<r[P1].**.
c930: 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e 74  ** Shift the int
c940: 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65  eger value in re
c950: 67 69 73 74 65 72 20 50 32 20 74 6f 20 74 68 65  gister P2 to the
c960: 20 6c 65 66 74 20 62 79 20 74 68 65 0a 2a 2a 20   left by the.** 
c970: 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73  number of bits s
c980: 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20  pecified by the 
c990: 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69 73  integer in regis
c9a0: 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65  ter P1..** Store
c9b0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
c9c0: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
c9d0: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
c9e0: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
c9f0: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
ca00: 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 52  * Opcode: ShiftR
ca10: 69 67 68 74 20 50 31 20 50 32 20 50 33 20 2a 20  ight P1 P2 P3 * 
ca20: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
ca30: 5b 50 33 5d 3d 72 5b 50 32 5d 3e 3e 72 5b 50 31  [P3]=r[P2]>>r[P1
ca40: 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68  ].**.** Shift th
ca50: 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  e integer value 
ca60: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74  in register P2 t
ca70: 6f 20 74 68 65 20 72 69 67 68 74 20 62 79 20 74  o the right by t
ca80: 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  he.** number of 
ca90: 62 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62  bits specified b
caa0: 79 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e  y the integer in
cab0: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
cac0: 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   Store the resul
cad0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
cae0: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
caf0: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
cb00: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
cb10: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74  ..*/.case OP_Bit
cb20: 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20 20  And:            
cb30: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
cb40: 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20  TK_BITAND, in1, 
cb50: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
cb60: 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20 20  e OP_BitOr:     
cb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cb80: 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4f 52  same as TK_BITOR
cb90: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
cba0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66   */.case OP_Shif
cbb0: 74 4c 65 66 74 3a 20 20 20 20 20 20 20 20 20 20  tLeft:          
cbc0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
cbd0: 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c 20 69  K_LSHIFT, in1, i
cbe0: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
cbf0: 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3a 20   OP_ShiftRight: 
cc00: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73  {           /* s
cc10: 61 6d 65 20 61 73 20 54 4b 5f 52 53 48 49 46 54  ame as TK_RSHIFT
cc20: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
cc30: 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 0a 20 20   */.  i64 iA;.  
cc40: 75 36 34 20 75 41 3b 0a 20 20 69 36 34 20 69 42  u64 uA;.  i64 iB
cc50: 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a 20 20 70 49  ;.  u8 op;..  pI
cc60: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
cc70: 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  p1];.  pIn2 = &a
cc80: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
cc90: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
cca0: 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p3];.  if( (pI
ccb0: 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32  n1->flags | pIn2
ccc0: 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e  ->flags) & MEM_N
ccd0: 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ull ){.    sqlit
cce0: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
ccf0: 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61  (pOut);.    brea
cd00: 6b 3b 0a 20 20 7d 0a 20 20 69 41 20 3d 20 73 71  k;.  }.  iA = sq
cd10: 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
cd20: 65 28 70 49 6e 32 29 3b 0a 20 20 69 42 20 3d 20  e(pIn2);.  iB = 
cd30: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
cd40: 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 6f 70 20  lue(pIn1);.  op 
cd50: 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20  = pOp->opcode;. 
cd60: 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 41   if( op==OP_BitA
cd70: 6e 64 20 29 7b 0a 20 20 20 20 69 41 20 26 3d 20  nd ){.    iA &= 
cd80: 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  iB;.  }else if( 
cd90: 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72 20 29 7b 0a  op==OP_BitOr ){.
cda0: 20 20 20 20 69 41 20 7c 3d 20 69 42 3b 0a 20 20      iA |= iB;.  
cdb0: 7d 65 6c 73 65 20 69 66 28 20 69 42 21 3d 30 20  }else if( iB!=0 
cdc0: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f  ){.    assert( o
cdd0: 70 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67 68 74  p==OP_ShiftRight
cde0: 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74   || op==OP_Shift
cdf0: 4c 65 66 74 20 29 3b 0a 0a 20 20 20 20 2f 2a 20  Left );..    /* 
ce00: 49 66 20 73 68 69 66 74 69 6e 67 20 62 79 20 61  If shifting by a
ce10: 20 6e 65 67 61 74 69 76 65 20 61 6d 6f 75 6e 74   negative amount
ce20: 2c 20 73 68 69 66 74 20 69 6e 20 74 68 65 20 6f  , shift in the o
ce30: 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 20 2a  ther direction *
ce40: 2f 0a 20 20 20 20 69 66 28 20 69 42 3c 30 20 29  /.    if( iB<0 )
ce50: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
ce60: 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3d 3d 4f  OP_ShiftRight==O
ce70: 50 5f 53 68 69 66 74 4c 65 66 74 2b 31 20 29 3b  P_ShiftLeft+1 );
ce80: 0a 20 20 20 20 20 20 6f 70 20 3d 20 32 2a 4f 50  .      op = 2*OP
ce90: 5f 53 68 69 66 74 4c 65 66 74 20 2b 20 31 20 2d  _ShiftLeft + 1 -
cea0: 20 6f 70 3b 0a 20 20 20 20 20 20 69 42 20 3d 20   op;.      iB = 
ceb0: 69 42 3e 28 2d 36 34 29 20 3f 20 2d 69 42 20 3a  iB>(-64) ? -iB :
cec0: 20 36 34 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20   64;.    }..    
ced0: 69 66 28 20 69 42 3e 3d 36 34 20 29 7b 0a 20 20  if( iB>=64 ){.  
cee0: 20 20 20 20 69 41 20 3d 20 28 69 41 3e 3d 30 20      iA = (iA>=0 
cef0: 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c  || op==OP_ShiftL
cf00: 65 66 74 29 20 3f 20 30 20 3a 20 2d 31 3b 0a 20  eft) ? 0 : -1;. 
cf10: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
cf20: 6d 65 6d 63 70 79 28 26 75 41 2c 20 26 69 41 2c  memcpy(&uA, &iA,
cf30: 20 73 69 7a 65 6f 66 28 75 41 29 29 3b 0a 20 20   sizeof(uA));.  
cf40: 20 20 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 53      if( op==OP_S
cf50: 68 69 66 74 4c 65 66 74 20 29 7b 0a 20 20 20 20  hiftLeft ){.    
cf60: 20 20 20 20 75 41 20 3c 3c 3d 20 69 42 3b 0a 20      uA <<= iB;. 
cf70: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
cf80: 20 20 20 20 75 41 20 3e 3e 3d 20 69 42 3b 0a 20      uA >>= iB;. 
cf90: 20 20 20 20 20 20 20 2f 2a 20 53 69 67 6e 2d 65         /* Sign-e
cfa0: 78 74 65 6e 64 20 6f 6e 20 61 20 72 69 67 68 74  xtend on a right
cfb0: 20 73 68 69 66 74 20 6f 66 20 61 20 6e 65 67 61   shift of a nega
cfc0: 74 69 76 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20  tive number */. 
cfd0: 20 20 20 20 20 20 20 69 66 28 20 69 41 3c 30 20         if( iA<0 
cfe0: 29 20 75 41 20 7c 3d 20 28 28 28 28 75 36 34 29  ) uA |= ((((u64)
cff0: 30 78 66 66 66 66 66 66 66 66 29 3c 3c 33 32 29  0xffffffff)<<32)
d000: 7c 30 78 66 66 66 66 66 66 66 66 29 20 3c 3c 20  |0xffffffff) << 
d010: 28 36 34 2d 69 42 29 3b 0a 20 20 20 20 20 20 7d  (64-iB);.      }
d020: 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26 69  .      memcpy(&i
d030: 41 2c 20 26 75 41 2c 20 73 69 7a 65 6f 66 28 69  A, &uA, sizeof(i
d040: 41 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  A));.    }.  }. 
d050: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 41 3b   pOut->u.i = iA;
d060: 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
d070: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
d080: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
d090: 20 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20   Opcode: AddImm 
d0a0: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
d0b0: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d  Synopsis: r[P1]=
d0c0: 72 5b 50 31 5d 2b 50 32 0a 2a 2a 20 0a 2a 2a 20  r[P1]+P2.** .** 
d0d0: 41 64 64 20 74 68 65 20 63 6f 6e 73 74 61 6e 74  Add the constant
d0e0: 20 50 32 20 74 6f 20 74 68 65 20 76 61 6c 75 65   P2 to the value
d0f0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
d100: 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 20 69  .** The result i
d110: 73 20 61 6c 77 61 79 73 20 61 6e 20 69 6e 74 65  s always an inte
d120: 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f  ger..**.** To fo
d130: 72 63 65 20 61 6e 79 20 72 65 67 69 73 74 65 72  rce any register
d140: 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65   to be an intege
d150: 72 2c 20 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a  r, just add 0..*
d160: 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d  /.case OP_AddImm
d170: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
d180: 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  * in1 */.  pIn1 
d190: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
d1a0: 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
d1b0: 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20  ange(p, pIn1);. 
d1c0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
d1d0: 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b  ntegerify(pIn1);
d1e0: 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20  .  pIn1->u.i += 
d1f0: 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b  pOp->p2;.  break
d200: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
d210: 4d 75 73 74 42 65 49 6e 74 20 50 31 20 50 32 20  MustBeInt P1 P2 
d220: 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72  * * *.** .** For
d230: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
d240: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
d250: 65 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49  e an integer.  I
d260: 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  f the value.** i
d270: 6e 20 50 31 20 69 73 20 6e 6f 74 20 61 6e 20 69  n P1 is not an i
d280: 6e 74 65 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f  nteger and canno
d290: 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69  t be converted i
d2a0: 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a  nto an integer.*
d2b0: 2a 20 77 69 74 68 6f 75 74 20 64 61 74 61 20 6c  * without data l
d2c0: 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69  oss, then jump i
d2d0: 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
d2e0: 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a  , or if P2==0.**
d2f0: 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45   raise an SQLITE
d300: 5f 4d 49 53 4d 41 54 43 48 20 65 78 63 65 70 74  _MISMATCH except
d310: 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
d320: 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20 20 20 20  MustBeInt: {    
d330: 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
d340: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
d350: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
d360: 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
d370: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d  ags & MEM_Int)==
d380: 30 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66  0 ){.    applyAf
d390: 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c  finity(pIn1, SQL
d3a0: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c  ITE_AFF_NUMERIC,
d3b0: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
d3c0: 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
d3d0: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pIn1->flags&MEM
d3e0: 5f 49 6e 74 29 3d 3d 30 2c 20 32 29 3b 0a 20 20  _Int)==0, 2);.  
d3f0: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
d400: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
d410: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f   ){.      if( pO
d420: 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20  p->p2==0 ){.    
d430: 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
d440: 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20 20 20 20  MISMATCH;.      
d450: 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
d460: 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
d470: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
d480: 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
d490: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
d4a0: 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46   }.  MemSetTypeF
d4b0: 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e  lag(pIn1, MEM_In
d4c0: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
d4d0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
d4e0: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
d4f0: 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  NT./* Opcode: Re
d500: 61 6c 41 66 66 69 6e 69 74 79 20 50 31 20 2a 20  alAffinity P1 * 
d510: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72  * * *.**.** If r
d520: 65 67 69 73 74 65 72 20 50 31 20 68 6f 6c 64 73  egister P1 holds
d530: 20 61 6e 20 69 6e 74 65 67 65 72 20 63 6f 6e 76   an integer conv
d540: 65 72 74 20 69 74 20 74 6f 20 61 20 72 65 61 6c  ert it to a real
d550: 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68   value..**.** Th
d560: 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65  is opcode is use
d570: 64 20 77 68 65 6e 20 65 78 74 72 61 63 74 69 6e  d when extractin
d580: 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72  g information fr
d590: 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74  om a column that
d5a0: 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20 61 66 66  .** has REAL aff
d5b0: 69 6e 69 74 79 2e 20 20 53 75 63 68 20 63 6f 6c  inity.  Such col
d5c0: 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61 79 20 73  umn values may s
d5d0: 74 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 61  till be stored a
d5e0: 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73 2c 20 66  s.** integers, f
d5f0: 6f 72 20 73 70 61 63 65 20 65 66 66 69 63 69 65  or space efficie
d600: 6e 63 79 2c 20 62 75 74 20 61 66 74 65 72 20 65  ncy, but after e
d610: 78 74 72 61 63 74 69 6f 6e 20 77 65 20 77 61 6e  xtraction we wan
d620: 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76  t them.** to hav
d630: 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c 20 76 61  e only a real va
d640: 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lue..*/.case OP_
d650: 52 65 61 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20  RealAffinity: { 
d660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d670: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e   /* in1 */.  pIn
d680: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
d690: 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  1];.  if( pIn1->
d6a0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
d6b0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
d6c0: 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e  beMemRealify(pIn
d6d0: 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  1);.  }.  break;
d6e0: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  .}.#endif..#ifnd
d6f0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
d700: 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  AST./* Opcode: C
d710: 61 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ast P1 P2 * * *.
d720: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 66 66  ** Synopsis: aff
d730: 69 6e 69 74 79 28 72 5b 50 31 5d 29 0a 2a 2a 0a  inity(r[P1]).**.
d740: 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c  ** Force the val
d750: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
d760: 31 20 74 6f 20 62 65 20 74 68 65 20 74 79 70 65  1 to be the type
d770: 20 64 65 66 69 6e 65 64 20 62 79 20 50 32 2e 0a   defined by P2..
d780: 2a 2a 20 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c  ** .** <ul>.** <
d790: 6c 69 3e 20 50 32 3d 3d 27 41 27 20 26 72 61 72  li> P2=='A' &rar
d7a0: 72 3b 20 42 4c 4f 42 0a 2a 2a 20 3c 6c 69 3e 20  r; BLOB.** <li> 
d7b0: 50 32 3d 3d 27 42 27 20 26 72 61 72 72 3b 20 54  P2=='B' &rarr; T
d7c0: 45 58 54 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d  EXT.** <li> P2==
d7d0: 27 43 27 20 26 72 61 72 72 3b 20 4e 55 4d 45 52  'C' &rarr; NUMER
d7e0: 49 43 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27  IC.** <li> P2=='
d7f0: 44 27 20 26 72 61 72 72 3b 20 49 4e 54 45 47 45  D' &rarr; INTEGE
d800: 52 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 45  R.** <li> P2=='E
d810: 27 20 26 72 61 72 72 3b 20 52 45 41 4c 0a 2a 2a  ' &rarr; REAL.**
d820: 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 41 20 4e   </ul>.**.** A N
d830: 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74  ULL value is not
d840: 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73   changed by this
d850: 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65   routine.  It re
d860: 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  mains NULL..*/.c
d870: 61 73 65 20 4f 50 5f 43 61 73 74 3a 20 7b 20 20  ase OP_Cast: {  
d880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d890: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65  /* in1 */.  asse
d8a0: 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 53 51 4c  rt( pOp->p2>=SQL
d8b0: 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 26 26 20  ITE_AFF_BLOB && 
d8c0: 70 4f 70 2d 3e 70 32 3c 3d 53 51 4c 49 54 45 5f  pOp->p2<=SQLITE_
d8d0: 41 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20 74 65  AFF_REAL );.  te
d8e0: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d  stcase( pOp->p2=
d8f0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54  =SQLITE_AFF_TEXT
d900: 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
d910: 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
d920: 41 46 46 5f 42 4c 4f 42 20 29 3b 0a 20 20 74 65  AFF_BLOB );.  te
d930: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d  stcase( pOp->p2=
d940: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45  =SQLITE_AFF_NUME
d950: 52 49 43 20 29 3b 0a 20 20 74 65 73 74 63 61 73  RIC );.  testcas
d960: 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  e( pOp->p2==SQLI
d970: 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 29  TE_AFF_INTEGER )
d980: 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f  ;.  testcase( pO
d990: 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46  p->p2==SQLITE_AF
d9a0: 46 5f 52 45 41 4c 20 29 3b 0a 20 20 70 49 6e 31  F_REAL );.  pIn1
d9b0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
d9c0: 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
d9d0: 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a  hange(p, pIn1);.
d9e0: 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f    rc = ExpandBlo
d9f0: 62 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74  b(pIn1);.  sqlit
da00: 65 33 56 64 62 65 4d 65 6d 43 61 73 74 28 70 49  e3VdbeMemCast(pI
da10: 6e 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 65 6e 63  n1, pOp->p2, enc
da20: 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54 45  oding);.  UPDATE
da30: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49  _MAX_BLOBSIZE(pI
da40: 6e 31 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  n1);.  if( rc ) 
da50: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
da60: 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
da70: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
da80: 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a  LITE_OMIT_CAST *
da90: 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71  /../* Opcode: Eq
daa0: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
dab0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20  ** Synopsis: IF 
dac0: 72 5b 50 33 5d 3d 3d 72 5b 50 31 5d 0a 2a 2a 0a  r[P3]==r[P1].**.
dad0: 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76  ** Compare the v
dae0: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
daf0: 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66  r P1 and P3.  If
db00: 20 72 65 67 28 50 33 29 3d 3d 72 65 67 28 50 31   reg(P3)==reg(P1
db10: 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74  ) then.** jump t
db20: 6f 20 61 64 64 72 65 73 73 20 50 32 2e 20 20 4f  o address P2.  O
db30: 72 20 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f  r if the SQLITE_
db40: 53 54 4f 52 45 50 32 20 66 6c 61 67 20 69 73 20  STOREP2 flag is 
db50: 73 65 74 20 69 6e 20 50 35 2c 20 74 68 65 6e 0a  set in P5, then.
db60: 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  ** store the res
db70: 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  ult of compariso
db80: 6e 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  n in register P2
db90: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ..**.** The SQLI
dba0: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74  TE_AFF_MASK port
dbb0: 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74 20 62  ion of P5 must b
dbc0: 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68  e an affinity ch
dbd0: 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c  aracter -.** SQL
dbe0: 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51  ITE_AFF_TEXT, SQ
dbf0: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
dc00: 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20  , and so forth. 
dc10: 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61  An attempt is ma
dc20: 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65  de .** to coerce
dc30: 20 62 6f 74 68 20 69 6e 70 75 74 73 20 61 63 63   both inputs acc
dc40: 6f 72 64 69 6e 67 20 74 6f 20 74 68 69 73 20 61  ording to this a
dc50: 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65 20 74  ffinity before t
dc60: 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e  he.** comparison
dc70: 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65   is made. If the
dc80: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
dc90: 20 69 73 20 30 78 30 30 2c 20 74 68 65 6e 20 6e   is 0x00, then n
dca0: 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69  umeric.** affini
dcb0: 74 79 20 69 73 20 75 73 65 64 2e 20 4e 6f 74 65  ty is used. Note
dcc0: 20 74 68 61 74 20 74 68 65 20 61 66 66 69 6e 69   that the affini
dcd0: 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61  ty conversions a
dce0: 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63  re stored.** bac
dcf0: 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e 70 75 74  k into the input
dd00: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
dd10: 64 20 50 33 2e 20 20 53 6f 20 74 68 69 73 20 6f  d P3.  So this o
dd20: 70 63 6f 64 65 20 63 61 6e 20 63 61 75 73 65 0a  pcode can cause.
dd30: 2a 2a 20 70 65 72 73 69 73 74 65 6e 74 20 63 68  ** persistent ch
dd40: 61 6e 67 65 73 20 74 6f 20 72 65 67 69 73 74 65  anges to registe
dd50: 72 73 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a  rs P1 and P3..**
dd60: 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e  .** Once any con
dd70: 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20 74 61  versions have ta
dd80: 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e  ken place, and n
dd90: 65 69 74 68 65 72 20 76 61 6c 75 65 20 69 73 20  either value is 
dda0: 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61  NULL, .** the va
ddb0: 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65  lues are compare
ddc0: 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65  d. If both value
ddd0: 73 20 61 72 65 20 62 6c 6f 62 73 20 74 68 65 6e  s are blobs then
dde0: 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20   memcmp() is.** 
ddf0: 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e  used to determin
de00: 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  e the results of
de10: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
de20: 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73    If both values
de30: 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c 20 74 68  .** are text, th
de40: 65 6e 20 74 68 65 20 61 70 70 72 6f 70 72 69 61  en the appropria
de50: 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  te collating fun
de60: 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20  ction specified 
de70: 69 6e 0a 2a 2a 20 50 34 20 69 73 20 75 73 65 64  in.** P4 is used
de80: 20 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70 61   to do the compa
de90: 72 69 73 6f 6e 2e 20 20 49 66 20 50 34 20 69 73  rison.  If P4 is
dea0: 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20 74   not specified t
deb0: 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20  hen.** memcmp() 
dec0: 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61  is used to compa
ded0: 72 65 20 74 65 78 74 20 73 74 72 69 6e 67 2e 20  re text string. 
dee0: 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20   If both values 
def0: 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20  are.** numeric, 
df00: 74 68 65 6e 20 61 20 6e 75 6d 65 72 69 63 20 63  then a numeric c
df10: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 75 73 65  omparison is use
df20: 64 2e 20 49 66 20 74 68 65 20 74 77 6f 20 76 61  d. If the two va
df30: 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64  lues.** are of d
df40: 69 66 66 65 72 65 6e 74 20 74 79 70 65 73 2c 20  ifferent types, 
df50: 74 68 65 6e 20 6e 75 6d 62 65 72 73 20 61 72 65  then numbers are
df60: 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73   considered less
df70: 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73   than.** strings
df80: 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65   and strings are
df90: 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73   considered less
dfa0: 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a   than blobs..**.
dfb0: 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c  ** If SQLITE_NUL
dfc0: 4c 45 51 20 69 73 20 73 65 74 20 69 6e 20 50 35  LEQ is set in P5
dfd0: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
dfe0: 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69   of comparison i
dff0: 73 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 0a  s always either.
e000: 2a 2a 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65  ** true or false
e010: 20 61 6e 64 20 69 73 20 6e 65 76 65 72 20 4e 55   and is never NU
e020: 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f 70 65  LL.  If both ope
e030: 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 74  rands are NULL t
e040: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 2a  hen the result.*
e050: 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20  * of comparison 
e060: 69 73 20 74 72 75 65 2e 20 20 49 66 20 65 69 74  is true.  If eit
e070: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
e080: 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ULL then the res
e090: 75 6c 74 20 69 73 20 66 61 6c 73 65 2e 0a 2a 2a  ult is false..**
e0a0: 20 49 66 20 6e 65 69 74 68 65 72 20 6f 70 65 72   If neither oper
e0b0: 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 20  and is NULL the 
e0c0: 72 65 73 75 6c 74 20 69 73 20 74 68 65 20 73 61  result is the sa
e0d0: 6d 65 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62  me as it would b
e0e0: 65 20 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49  e if.** the SQLI
e0f0: 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77  TE_NULLEQ flag w
e100: 65 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d  ere omitted from
e110: 20 50 35 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 62 6f   P5..**.** If bo
e120: 74 68 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50  th SQLITE_STOREP
e130: 32 20 61 6e 64 20 53 51 4c 49 54 45 5f 4b 45 45  2 and SQLITE_KEE
e140: 50 4e 55 4c 4c 20 66 6c 61 67 73 20 61 72 65 20  PNULL flags are 
e150: 73 65 74 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20  set then the.** 
e160: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 5b 50 32 5d  content of r[P2]
e170: 20 69 73 20 6f 6e 6c 79 20 63 68 61 6e 67 65 64   is only changed
e180: 20 69 66 20 74 68 65 20 6e 65 77 20 76 61 6c 75   if the new valu
e190: 65 20 69 73 20 4e 55 4c 4c 20 6f 72 20 30 20 28  e is NULL or 0 (
e1a0: 66 61 6c 73 65 29 2e 0a 2a 2a 20 49 6e 20 6f 74  false)..** In ot
e1b0: 68 65 72 20 77 6f 72 64 73 2c 20 61 20 70 72 69  her words, a pri
e1c0: 6f 72 20 72 5b 50 32 5d 20 76 61 6c 75 65 20 77  or r[P2] value w
e1d0: 69 6c 6c 20 6e 6f 74 20 62 65 20 6f 76 65 72 77  ill not be overw
e1e0: 72 69 74 74 65 6e 20 62 79 20 31 20 28 74 72 75  ritten by 1 (tru
e1f0: 65 29 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  e)..*/./* Opcode
e200: 3a 20 4e 65 20 50 31 20 50 32 20 50 33 20 50 34  : Ne P1 P2 P3 P4
e210: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
e220: 20 49 46 20 72 5b 50 33 5d 21 3d 72 5b 50 31 5d   IF r[P3]!=r[P1]
e230: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
e240: 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20  s just like the 
e250: 45 71 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74  Eq opcode except
e260: 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69   that the jump i
e270: 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68  s taken if.** th
e280: 65 20 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65  e operands in re
e290: 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
e2a0: 33 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e  3 are not equal.
e2b0: 20 20 53 65 65 20 74 68 65 20 45 71 20 6f 70 63    See the Eq opc
e2c0: 6f 64 65 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74  ode for.** addit
e2d0: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
e2e0: 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 62 6f 74 68  n..**.** If both
e2f0: 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
e300: 61 6e 64 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e  and SQLITE_KEEPN
e310: 55 4c 4c 20 66 6c 61 67 73 20 61 72 65 20 73 65  ULL flags are se
e320: 74 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 63 6f  t then the.** co
e330: 6e 74 65 6e 74 20 6f 66 20 72 5b 50 32 5d 20 69  ntent of r[P2] i
e340: 73 20 6f 6e 6c 79 20 63 68 61 6e 67 65 64 20 69  s only changed i
e350: 66 20 74 68 65 20 6e 65 77 20 76 61 6c 75 65 20  f the new value 
e360: 69 73 20 4e 55 4c 4c 20 6f 72 20 31 20 28 74 72  is NULL or 1 (tr
e370: 75 65 29 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72  ue)..** In other
e380: 20 77 6f 72 64 73 2c 20 61 20 70 72 69 6f 72 20   words, a prior 
e390: 72 5b 50 32 5d 20 76 61 6c 75 65 20 77 69 6c 6c  r[P2] value will
e3a0: 20 6e 6f 74 20 62 65 20 6f 76 65 72 77 72 69 74   not be overwrit
e3b0: 74 65 6e 20 62 79 20 30 20 28 66 61 6c 73 65 29  ten by 0 (false)
e3c0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
e3d0: 4c 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Lt P1 P2 P3 P4 P
e3e0: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49  5.** Synopsis: I
e3f0: 46 20 72 5b 50 33 5d 3c 72 5b 50 31 5d 0a 2a 2a  F r[P3]<r[P1].**
e400: 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20  .** Compare the 
e410: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
e420: 65 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49  er P1 and P3.  I
e430: 66 20 72 65 67 28 50 33 29 3c 72 65 67 28 50 31  f reg(P3)<reg(P1
e440: 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74  ) then.** jump t
e450: 6f 20 61 64 64 72 65 73 73 20 50 32 2e 20 20 4f  o address P2.  O
e460: 72 20 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f  r if the SQLITE_
e470: 53 54 4f 52 45 50 32 20 66 6c 61 67 20 69 73 20  STOREP2 flag is 
e480: 73 65 74 20 69 6e 20 50 35 20 73 74 6f 72 65 0a  set in P5 store.
e490: 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  ** the result of
e4a0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 28 30 20 6f   comparison (0 o
e4b0: 72 20 31 20 6f 72 20 4e 55 4c 4c 29 20 69 6e 74  r 1 or NULL) int
e4c0: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
e4d0: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49  *.** If the SQLI
e4e0: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69  TE_JUMPIFNULL bi
e4f0: 74 20 6f 66 20 50 35 20 69 73 20 73 65 74 20 61  t of P5 is set a
e500: 6e 64 20 65 69 74 68 65 72 20 72 65 67 28 50 31  nd either reg(P1
e510: 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29 20  ) or.** reg(P3) 
e520: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  is NULL then the
e530: 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20   take the jump. 
e540: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a   If the SQLITE_J
e550: 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69  UMPIFNULL .** bi
e560: 74 20 69 73 20 63 6c 65 61 72 20 74 68 65 6e 20  t is clear then 
e570: 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 66 20  fall through if 
e580: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
e590: 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68  s NULL..**.** Th
e5a0: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  e SQLITE_AFF_MAS
e5b0: 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20  K portion of P5 
e5c0: 6d 75 73 74 20 62 65 20 61 6e 20 61 66 66 69 6e  must be an affin
e5d0: 69 74 79 20 63 68 61 72 61 63 74 65 72 20 2d 0a  ity character -.
e5e0: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  ** SQLITE_AFF_TE
e5f0: 58 54 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  XT, SQLITE_AFF_I
e600: 4e 54 45 47 45 52 2c 20 61 6e 64 20 73 6f 20 66  NTEGER, and so f
e610: 6f 72 74 68 2e 20 41 6e 20 61 74 74 65 6d 70 74  orth. An attempt
e620: 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20   is made .** to 
e630: 63 6f 65 72 63 65 20 62 6f 74 68 20 69 6e 70 75  coerce both inpu
e640: 74 73 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20  ts according to 
e650: 74 68 69 73 20 61 66 66 69 6e 69 74 79 20 62 65  this affinity be
e660: 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70  fore the.** comp
e670: 61 72 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20  arison is made. 
e680: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46  If the SQLITE_AF
e690: 46 5f 4d 41 53 4b 20 69 73 20 30 78 30 30 2c 20  F_MASK is 0x00, 
e6a0: 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20  then numeric.** 
e6b0: 61 66 66 69 6e 69 74 79 20 69 73 20 75 73 65 64  affinity is used
e6c0: 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20  . Note that the 
e6d0: 61 66 66 69 6e 69 74 79 20 63 6f 6e 76 65 72 73  affinity convers
e6e0: 69 6f 6e 73 20 61 72 65 20 73 74 6f 72 65 64 0a  ions are stored.
e6f0: 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65  ** back into the
e700: 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73   input registers
e710: 20 50 31 20 61 6e 64 20 50 33 2e 20 20 53 6f 20   P1 and P3.  So 
e720: 74 68 69 73 20 6f 70 63 6f 64 65 20 63 61 6e 20  this opcode can 
e730: 63 61 75 73 65 0a 2a 2a 20 70 65 72 73 69 73 74  cause.** persist
e740: 65 6e 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72  ent changes to r
e750: 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20  egisters P1 and 
e760: 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61  P3..**.** Once a
e770: 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68  ny conversions h
e780: 61 76 65 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c  ave taken place,
e790: 20 61 6e 64 20 6e 65 69 74 68 65 72 20 76 61 6c   and neither val
e7a0: 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20  ue is NULL, .** 
e7b0: 74 68 65 20 76 61 6c 75 65 73 20 61 72 65 20 63  the values are c
e7c0: 6f 6d 70 61 72 65 64 2e 20 49 66 20 62 6f 74 68  ompared. If both
e7d0: 20 76 61 6c 75 65 73 20 61 72 65 20 62 6c 6f 62   values are blob
e7e0: 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20  s then memcmp() 
e7f0: 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64 65  is.** used to de
e800: 74 65 72 6d 69 6e 65 20 74 68 65 20 72 65 73 75  termine the resu
e810: 6c 74 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 61  lts of the compa
e820: 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20  rison.  If both 
e830: 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74 65  values.** are te
e840: 78 74 2c 20 74 68 65 6e 20 74 68 65 20 61 70 70  xt, then the app
e850: 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61 74 69  ropriate collati
e860: 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63  ng function spec
e870: 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69  ified in.** P4 i
e880: 73 20 20 75 73 65 64 20 74 6f 20 64 6f 20 74 68  s  used to do th
e890: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49  e comparison.  I
e8a0: 66 20 50 34 20 69 73 20 6e 6f 74 20 73 70 65 63  f P4 is not spec
e8b0: 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65  ified then.** me
e8c0: 6d 63 6d 70 28 29 20 69 73 20 75 73 65 64 20 74  mcmp() is used t
e8d0: 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20 73  o compare text s
e8e0: 74 72 69 6e 67 2e 20 20 49 66 20 62 6f 74 68 20  tring.  If both 
e8f0: 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75  values are.** nu
e900: 6d 65 72 69 63 2c 20 74 68 65 6e 20 61 20 6e 75  meric, then a nu
e910: 6d 65 72 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e  meric comparison
e920: 20 69 73 20 75 73 65 64 2e 20 49 66 20 74 68 65   is used. If the
e930: 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61   two values.** a
e940: 72 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20  re of different 
e950: 74 79 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62  types, then numb
e960: 65 72 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ers are consider
e970: 65 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20  ed less than.** 
e980: 73 74 72 69 6e 67 73 20 61 6e 64 20 73 74 72 69  strings and stri
e990: 6e 67 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ngs are consider
e9a0: 65 64 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f  ed less than blo
e9b0: 62 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  bs..*/./* Opcode
e9c0: 3a 20 4c 65 20 50 31 20 50 32 20 50 33 20 50 34  : Le P1 P2 P3 P4
e9d0: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
e9e0: 20 49 46 20 72 5b 50 33 5d 3c 3d 72 5b 50 31 5d   IF r[P3]<=r[P1]
e9f0: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
ea00: 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20  s just like the 
ea10: 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74  Lt opcode except
ea20: 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69   that the jump i
ea30: 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68  s taken if.** th
ea40: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
ea50: 69 73 74 65 72 20 50 33 20 69 73 20 6c 65 73 73  ister P3 is less
ea60: 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
ea70: 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  o the content of
ea80: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e  .** register P1.
ea90: 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63    See the Lt opc
eaa0: 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
eab0: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
eac0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 74  */./* Opcode: Gt
ead0: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
eae0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20  ** Synopsis: IF 
eaf0: 72 5b 50 33 5d 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a  r[P3]>r[P1].**.*
eb00: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
eb10: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
eb20: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
eb30: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
eb40: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  en if.** the con
eb50: 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
eb60: 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74   P3 is greater t
eb70: 68 61 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  han the content 
eb80: 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  of.** register P
eb90: 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f  1.  See the Lt o
eba0: 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
ebb0: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
ebc0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
ebd0: 47 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Ge P1 P2 P3 P4 P
ebe0: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49  5.** Synopsis: I
ebf0: 46 20 72 5b 50 33 5d 3e 3d 72 5b 50 31 5d 0a 2a  F r[P3]>=r[P1].*
ec00: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
ec10: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74  just like the Lt
ec20: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
ec30: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
ec40: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
ec50: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
ec60: 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74 65  ter P3 is greate
ec70: 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
ec80: 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  to the content o
ec90: 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  f.** register P1
eca0: 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70  .  See the Lt op
ecb0: 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
ecc0: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
ecd0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 71 3a 20  .*/.case OP_Eq: 
ece0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ecf0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 51 2c 20   same as TK_EQ, 
ed00: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
ed10: 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20  /.case OP_Ne:   
ed20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
ed30: 61 6d 65 20 61 73 20 54 4b 5f 4e 45 2c 20 6a 75  ame as TK_NE, ju
ed40: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
ed50: 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 20  case OP_Lt:     
ed60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
ed70: 65 20 61 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70  e as TK_LT, jump
ed80: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
ed90: 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 20 20 20  se OP_Le:       
eda0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
edb0: 61 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20  as TK_LE, jump, 
edc0: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  in1, in3 */.case
edd0: 20 4f 50 5f 47 74 3a 20 20 20 20 20 20 20 20 20   OP_Gt:         
ede0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
edf0: 20 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20 69 6e   TK_GT, jump, in
ee00: 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
ee10: 50 5f 47 65 3a 20 7b 20 20 20 20 20 20 20 20 20  P_Ge: {         
ee20: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
ee30: 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_GE, jump, in1,
ee40: 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65   in3 */.  int re
ee50: 73 2c 20 72 65 73 32 3b 20 20 20 20 20 20 2f 2a  s, res2;      /*
ee60: 20 52 65 73 75 6c 74 20 6f 66 20 74 68 65 20 63   Result of the c
ee70: 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 70 49 6e  omparison of pIn
ee80: 31 20 61 67 61 69 6e 73 74 20 70 49 6e 33 20 2a  1 against pIn3 *
ee90: 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74  /.  char affinit
eea0: 79 3b 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e  y;      /* Affin
eeb0: 69 74 79 20 74 6f 20 75 73 65 20 66 6f 72 20 63  ity to use for c
eec0: 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 75  omparison */.  u
eed0: 31 36 20 66 6c 61 67 73 31 3b 20 20 20 20 20 20  16 flags1;      
eee0: 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e     /* Copy of in
eef0: 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 70  itial value of p
ef00: 49 6e 31 2d 3e 66 6c 61 67 73 20 2a 2f 0a 20 20  In1->flags */.  
ef10: 75 31 36 20 66 6c 61 67 73 33 3b 20 20 20 20 20  u16 flags3;     
ef20: 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69      /* Copy of i
ef30: 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20  nitial value of 
ef40: 70 49 6e 33 2d 3e 66 6c 61 67 73 20 2a 2f 0a 0a  pIn3->flags */..
ef50: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
ef60: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20  Op->p1];.  pIn3 
ef70: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
ef80: 3b 0a 20 20 66 6c 61 67 73 31 20 3d 20 70 49 6e  ;.  flags1 = pIn
ef90: 31 2d 3e 66 6c 61 67 73 3b 0a 20 20 66 6c 61 67  1->flags;.  flag
efa0: 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73  s3 = pIn3->flags
efb0: 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73 31 20  ;.  if( (flags1 
efc0: 7c 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f 4e 75  | flags3)&MEM_Nu
efd0: 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 65  ll ){.    /* One
efe0: 20 6f 72 20 62 6f 74 68 20 6f 70 65 72 61 6e 64   or both operand
eff0: 73 20 61 72 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20  s are NULL */.  
f000: 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
f010: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 29 7b  SQLITE_NULLEQ ){
f020: 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 53 51 4c  .      /* If SQL
f030: 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65  ITE_NULLEQ is se
f040: 74 20 28 77 68 69 63 68 20 77 69 6c 6c 20 6f 6e  t (which will on
f050: 6c 79 20 68 61 70 70 65 6e 20 69 66 20 74 68 65  ly happen if the
f060: 20 6f 70 65 72 61 74 6f 72 20 69 73 0a 20 20 20   operator is.   
f070: 20 20 20 2a 2a 20 4f 50 5f 45 71 20 6f 72 20 4f     ** OP_Eq or O
f080: 50 5f 4e 65 29 20 74 68 65 6e 20 74 61 6b 65 20  P_Ne) then take 
f090: 74 68 65 20 6a 75 6d 70 20 6f 72 20 6e 6f 74 20  the jump or not 
f0a0: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
f0b0: 74 68 65 72 0a 20 20 20 20 20 20 2a 2a 20 6f 72  ther.      ** or
f0c0: 20 6e 6f 74 20 62 6f 74 68 20 6f 70 65 72 61 6e   not both operan
f0d0: 64 73 20 61 72 65 20 6e 75 6c 6c 2e 0a 20 20 20  ds are null..   
f0e0: 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65     */.      asse
f0f0: 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
f100: 3d 4f 50 5f 45 71 20 7c 7c 20 70 4f 70 2d 3e 6f  =OP_Eq || pOp->o
f110: 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a  pcode==OP_Ne );.
f120: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
f130: 6c 61 67 73 31 20 26 20 4d 45 4d 5f 43 6c 65 61  lags1 & MEM_Clea
f140: 72 65 64 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20  red)==0 );.     
f150: 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70   assert( (pOp->p
f160: 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  5 & SQLITE_JUMPI
f170: 46 4e 55 4c 4c 29 3d 3d 30 20 29 3b 0a 20 20 20  FNULL)==0 );.   
f180: 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 26 66     if( (flags1&f
f190: 6c 61 67 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29 21  lags3&MEM_Null)!
f1a0: 3d 30 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c  =0.       && (fl
f1b0: 61 67 73 33 26 4d 45 4d 5f 43 6c 65 61 72 65 64  ags3&MEM_Cleared
f1c0: 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20 20  )==0.      ){.  
f1d0: 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 20 20        res = 0;  
f1e0: 2f 2a 20 4f 70 65 72 61 6e 64 73 20 61 72 65 20  /* Operands are 
f1f0: 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d  equal */.      }
f200: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72 65  else{.        re
f210: 73 20 3d 20 31 3b 20 20 2f 2a 20 4f 70 65 72 61  s = 1;  /* Opera
f220: 6e 64 73 20 61 72 65 20 6e 6f 74 20 65 71 75 61  nds are not equa
f230: 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 0a 20 20 20  l */.      }.   
f240: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a   }else{.      /*
f250: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69   SQLITE_NULLEQ i
f260: 73 20 63 6c 65 61 72 20 61 6e 64 20 61 74 20 6c  s clear and at l
f270: 65 61 73 74 20 6f 6e 65 20 6f 70 65 72 61 6e 64  east one operand
f280: 20 69 73 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20   is NULL,.      
f290: 2a 2a 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  ** then the resu
f2a0: 6c 74 20 69 73 20 61 6c 77 61 79 73 20 4e 55 4c  lt is always NUL
f2b0: 4c 2e 0a 20 20 20 20 20 20 2a 2a 20 54 68 65 20  L..      ** The 
f2c0: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
f2d0: 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50   the SQLITE_JUMP
f2e0: 49 46 4e 55 4c 4c 20 62 69 74 20 69 73 20 73 65  IFNULL bit is se
f2f0: 74 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  t..      */.    
f300: 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
f310: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29  SQLITE_STOREP2 )
f320: 7b 0a 20 20 20 20 20 20 20 20 70 4f 75 74 20 3d  {.        pOut =
f330: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
f340: 0a 20 20 20 20 20 20 20 20 69 43 6f 6d 70 61 72  .        iCompar
f350: 65 20 3d 20 31 3b 20 20 20 20 2f 2a 20 4f 70 65  e = 1;    /* Ope
f360: 72 61 6e 64 73 20 61 72 65 20 6e 6f 74 20 65 71  rands are not eq
f370: 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d  ual */.        m
f380: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
f390: 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20  p, pOut);.      
f3a0: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
f3b0: 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  (pOut, MEM_Null)
f3c0: 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54  ;.        REGIST
f3d0: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
f3e0: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d  , pOut);.      }
f3f0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 56 64  else{.        Vd
f400: 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c  beBranchTaken(2,
f410: 33 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  3);.        if( 
f420: 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
f430: 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20  _JUMPIFNULL ){. 
f440: 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6a 75           goto ju
f450: 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20  mp_to_p2;.      
f460: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
f470: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
f480: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 4e   }else{.    /* N
f490: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
f4a0: 73 20 4e 55 4c 4c 2e 20 20 44 6f 20 61 20 63 6f  s NULL.  Do a co
f4b0: 6d 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20  mparison. */.   
f4c0: 20 61 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d   affinity = pOp-
f4d0: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 41 46 46  >p5 & SQLITE_AFF
f4e0: 5f 4d 41 53 4b 3b 0a 20 20 20 20 69 66 28 20 61  _MASK;.    if( a
f4f0: 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f  ffinity>=SQLITE_
f500: 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20  AFF_NUMERIC ){. 
f510: 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 31       if( (flags1
f520: 20 7c 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f 53   | flags3)&MEM_S
f530: 74 72 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66  tr ){.        if
f540: 28 20 28 66 6c 61 67 73 31 20 26 20 28 4d 45 4d  ( (flags1 & (MEM
f550: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45  _Int|MEM_Real|ME
f560: 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72  M_Str))==MEM_Str
f570: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61 70   ){.          ap
f580: 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
f590: 74 79 28 70 49 6e 31 2c 30 29 3b 0a 20 20 20 20  ty(pIn1,0);.    
f5a0: 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
f5b0: 66 6c 61 67 73 33 21 3d 70 49 6e 33 2d 3e 66 6c  flags3!=pIn3->fl
f5c0: 61 67 73 20 29 3b 20 2f 2a 20 50 6f 73 73 69 62  ags ); /* Possib
f5d0: 6c 65 20 69 66 20 70 49 6e 31 3d 3d 70 49 6e 33  le if pIn1==pIn3
f5e0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 66 6c   */.          fl
f5f0: 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61  ags3 = pIn3->fla
f600: 67 73 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  gs;.        }.  
f610: 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73        if( (flags
f620: 33 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  3 & (MEM_Int|MEM
f630: 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d  _Real|MEM_Str))=
f640: 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20  =MEM_Str ){.    
f650: 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72        applyNumer
f660: 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c  icAffinity(pIn3,
f670: 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  0);.        }.  
f680: 20 20 20 20 7d 0a 20 20 20 20 20 20 2f 2a 20 48      }.      /* H
f690: 61 6e 64 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e  andle the common
f6a0: 20 63 61 73 65 20 6f 66 20 69 6e 74 65 67 65 72   case of integer
f6b0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 68 65 72 65   comparison here
f6c0: 2c 20 61 73 20 61 6e 0a 20 20 20 20 20 20 2a 2a  , as an.      **
f6d0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2c 20 74   optimization, t
f6e0: 6f 20 61 76 6f 69 64 20 61 20 63 61 6c 6c 20 74  o avoid a call t
f6f0: 6f 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70  o sqlite3MemComp
f700: 61 72 65 28 29 20 2a 2f 0a 20 20 20 20 20 20 69  are() */.      i
f710: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
f720: 26 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20  & pIn3->flags & 
f730: 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20  MEM_Int)!=0 ){. 
f740: 20 20 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d         if( pIn3-
f750: 3e 75 2e 69 20 3e 20 70 49 6e 31 2d 3e 75 2e 69  >u.i > pIn1->u.i
f760: 20 29 7b 20 72 65 73 20 3d 20 2b 31 3b 20 67 6f   ){ res = +1; go
f770: 74 6f 20 63 6f 6d 70 61 72 65 5f 6f 70 3b 20 7d  to compare_op; }
f780: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 49 6e  .        if( pIn
f790: 33 2d 3e 75 2e 69 20 3c 20 70 49 6e 31 2d 3e 75  3->u.i < pIn1->u
f7a0: 2e 69 20 29 7b 20 72 65 73 20 3d 20 2d 31 3b 20  .i ){ res = -1; 
f7b0: 67 6f 74 6f 20 63 6f 6d 70 61 72 65 5f 6f 70 3b  goto compare_op;
f7c0: 20 7d 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d   }.        res =
f7d0: 20 30 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   0;.        goto
f7e0: 20 63 6f 6d 70 61 72 65 5f 6f 70 3b 0a 20 20 20   compare_op;.   
f7f0: 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 20 69     }.    }else i
f800: 66 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  f( affinity==SQL
f810: 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a  ITE_AFF_TEXT ){.
f820: 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73        if( (flags
f830: 31 20 26 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20  1 & MEM_Str)==0 
f840: 26 26 20 28 66 6c 61 67 73 31 20 26 20 28 4d 45  && (flags1 & (ME
f850: 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29  M_Int|MEM_Real))
f860: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 74  !=0 ){.        t
f870: 65 73 74 63 61 73 65 28 20 70 49 6e 31 2d 3e 66  estcase( pIn1->f
f880: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
f890: 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61  ;.        testca
f8a0: 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  se( pIn1->flags 
f8b0: 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20  & MEM_Real );.  
f8c0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
f8d0: 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70 49  eMemStringify(pI
f8e0: 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29  n1, encoding, 1)
f8f0: 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61  ;.        testca
f900: 73 65 28 20 28 66 6c 61 67 73 31 26 4d 45 4d 5f  se( (flags1&MEM_
f910: 44 79 6e 29 20 21 3d 20 28 70 49 6e 31 2d 3e 66  Dyn) != (pIn1->f
f920: 6c 61 67 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b  lags&MEM_Dyn) );
f930: 0a 20 20 20 20 20 20 20 20 66 6c 61 67 73 31 20  .        flags1 
f940: 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  = (pIn1->flags &
f950: 20 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20   ~MEM_TypeMask) 
f960: 7c 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f  | (flags1 & MEM_
f970: 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20  TypeMask);.     
f980: 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 21     assert( pIn1!
f990: 3d 70 49 6e 33 20 29 3b 0a 20 20 20 20 20 20 7d  =pIn3 );.      }
f9a0: 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67  .      if( (flag
f9b0: 73 33 20 26 20 4d 45 4d 5f 53 74 72 29 3d 3d 30  s3 & MEM_Str)==0
f9c0: 20 26 26 20 28 66 6c 61 67 73 33 20 26 20 28 4d   && (flags3 & (M
f9d0: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
f9e0: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
f9f0: 74 65 73 74 63 61 73 65 28 20 70 49 6e 33 2d 3e  testcase( pIn3->
fa00: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
fa10: 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63  );.        testc
fa20: 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73  ase( pIn3->flags
fa30: 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20   & MEM_Real );. 
fa40: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
fa50: 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70  beMemStringify(p
fa60: 49 6e 33 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31  In3, encoding, 1
fa70: 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63  );.        testc
fa80: 61 73 65 28 20 28 66 6c 61 67 73 33 26 4d 45 4d  ase( (flags3&MEM
fa90: 5f 44 79 6e 29 20 21 3d 20 28 70 49 6e 33 2d 3e  _Dyn) != (pIn3->
faa0: 66 6c 61 67 73 26 4d 45 4d 5f 44 79 6e 29 20 29  flags&MEM_Dyn) )
fab0: 3b 0a 20 20 20 20 20 20 20 20 66 6c 61 67 73 33  ;.        flags3
fac0: 20 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20   = (pIn3->flags 
fad0: 26 20 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29  & ~MEM_TypeMask)
fae0: 20 7c 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d   | (flags3 & MEM
faf0: 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 20 20  _TypeMask);.    
fb00: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73    }.    }.    as
fb10: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
fb20: 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c  e==P4_COLLSEQ ||
fb30: 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d   pOp->p4.pColl==
fb40: 30 20 29 3b 0a 20 20 20 20 72 65 73 20 3d 20 73  0 );.    res = s
fb50: 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65  qlite3MemCompare
fb60: 28 70 49 6e 33 2c 20 70 49 6e 31 2c 20 70 4f 70  (pIn3, pIn1, pOp
fb70: 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d  ->p4.pColl);.  }
fb80: 0a 63 6f 6d 70 61 72 65 5f 6f 70 3a 0a 20 20 2f  .compare_op:.  /
fb90: 2a 20 41 74 20 74 68 69 73 20 70 6f 69 6e 74 2c  * At this point,
fba0: 20 72 65 73 20 69 73 20 6e 65 67 61 74 69 76 65   res is negative
fbb0: 2c 20 7a 65 72 6f 2c 20 6f 72 20 70 6f 73 69 74  , zero, or posit
fbc0: 69 76 65 20 69 66 20 72 65 67 5b 50 31 5d 20 69  ive if reg[P1] i
fbd0: 73 0a 20 20 2a 2a 20 6c 65 73 73 20 74 68 61 6e  s.  ** less than
fbe0: 2c 20 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67  , equal to, or g
fbf0: 72 65 61 74 65 72 20 74 68 61 6e 20 72 65 67 5b  reater than reg[
fc00: 50 33 5d 2c 20 72 65 73 70 65 63 74 69 76 65 6c  P3], respectivel
fc10: 79 2e 20 20 43 6f 6d 70 75 74 65 0a 20 20 2a 2a  y.  Compute.  **
fc20: 20 74 68 65 20 61 6e 73 77 65 72 20 74 6f 20 74   the answer to t
fc30: 68 69 73 20 6f 70 65 72 61 74 6f 72 20 69 6e 20  his operator in 
fc40: 72 65 73 32 2c 20 64 65 70 65 6e 64 69 6e 67 20  res2, depending 
fc50: 6f 6e 20 77 68 61 74 20 74 68 65 20 63 6f 6d 70  on what the comp
fc60: 61 72 69 73 6f 6e 0a 20 20 2a 2a 20 6f 70 65 72  arison.  ** oper
fc70: 61 74 6f 72 20 61 63 74 75 61 6c 6c 79 20 69 73  ator actually is
fc80: 2e 20 20 54 68 65 20 6e 65 78 74 20 62 6c 6f 63  .  The next bloc
fc90: 6b 20 6f 66 20 63 6f 64 65 20 64 65 70 65 6e 64  k of code depend
fca0: 73 20 6f 6e 20 74 68 65 20 66 61 63 74 0a 20 20  s on the fact.  
fcb0: 2a 2a 20 74 68 61 74 20 74 68 65 20 36 20 63 6f  ** that the 6 co
fcc0: 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f  mparison operato
fcd0: 72 73 20 61 72 65 20 63 6f 6e 73 65 63 75 74 69  rs are consecuti
fce0: 76 65 20 69 6e 74 65 67 65 72 73 20 69 6e 20 74  ve integers in t
fcf0: 68 69 73 0a 20 20 2a 2a 20 6f 72 64 65 72 3a 20  his.  ** order: 
fd00: 20 4e 45 2c 20 45 51 2c 20 47 54 2c 20 4c 45 2c   NE, EQ, GT, LE,
fd10: 20 4c 54 2c 20 47 45 20 2a 2f 0a 20 20 61 73 73   LT, GE */.  ass
fd20: 65 72 74 28 20 4f 50 5f 45 71 3d 3d 4f 50 5f 4e  ert( OP_Eq==OP_N
fd30: 65 2b 31 20 29 3b 20 61 73 73 65 72 74 28 20 4f  e+1 ); assert( O
fd40: 50 5f 47 74 3d 3d 4f 50 5f 4e 65 2b 32 20 29 3b  P_Gt==OP_Ne+2 );
fd50: 20 61 73 73 65 72 74 28 20 4f 50 5f 4c 65 3d 3d   assert( OP_Le==
fd60: 4f 50 5f 4e 65 2b 33 20 29 3b 0a 20 20 61 73 73  OP_Ne+3 );.  ass
fd70: 65 72 74 28 20 4f 50 5f 4c 74 3d 3d 4f 50 5f 4e  ert( OP_Lt==OP_N
fd80: 65 2b 34 20 29 3b 20 61 73 73 65 72 74 28 20 4f  e+4 ); assert( O
fd90: 50 5f 47 65 3d 3d 4f 50 5f 4e 65 2b 35 20 29 3b  P_Ge==OP_Ne+5 );
fda0: 0a 20 20 69 66 28 20 72 65 73 3c 30 20 29 7b 20  .  if( res<0 ){ 
fdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fdc0: 20 20 20 20 20 20 20 2f 2a 20 6e 65 2c 20 65 71         /* ne, eq
fdd0: 2c 20 67 74 2c 20 6c 65 2c 20 6c 74 2c 20 67 65  , gt, le, lt, ge
fde0: 20 2a 2f 0a 20 20 20 20 73 74 61 74 69 63 20 63   */.    static c
fdf0: 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
fe00: 61 72 20 61 4c 54 62 5b 5d 20 3d 20 7b 20 31 2c  ar aLTb[] = { 1,
fe10: 20 20 30 2c 20 20 30 2c 20 20 31 2c 20 20 31 2c    0,  0,  1,  1,
fe20: 20 20 30 20 7d 3b 0a 20 20 20 20 72 65 73 32 20    0 };.    res2 
fe30: 3d 20 61 4c 54 62 5b 70 4f 70 2d 3e 6f 70 63 6f  = aLTb[pOp->opco
fe40: 64 65 20 2d 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d  de - OP_Ne];.  }
fe50: 65 6c 73 65 20 69 66 28 20 72 65 73 3d 3d 30 20  else if( res==0 
fe60: 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  ){.    static co
fe70: 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
fe80: 72 20 61 45 51 62 5b 5d 20 3d 20 7b 20 30 2c 20  r aEQb[] = { 0, 
fe90: 20 31 2c 20 20 30 2c 20 20 31 2c 20 20 30 2c 20   1,  0,  1,  0, 
fea0: 20 31 20 7d 3b 0a 20 20 20 20 72 65 73 32 20 3d   1 };.    res2 =
feb0: 20 61 45 51 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64   aEQb[pOp->opcod
fec0: 65 20 2d 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 65  e - OP_Ne];.  }e
fed0: 6c 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20  lse{.    static 
fee0: 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
fef0: 68 61 72 20 61 47 54 62 5b 5d 20 3d 20 7b 20 31  har aGTb[] = { 1
ff00: 2c 20 20 30 2c 20 20 31 2c 20 20 30 2c 20 20 30  ,  0,  1,  0,  0
ff10: 2c 20 20 31 20 7d 3b 0a 20 20 20 20 72 65 73 32  ,  1 };.    res2
ff20: 20 3d 20 61 47 54 62 5b 70 4f 70 2d 3e 6f 70 63   = aGTb[pOp->opc
ff30: 6f 64 65 20 2d 20 4f 50 5f 4e 65 5d 3b 0a 20 20  ode - OP_Ne];.  
ff40: 7d 0a 0a 20 20 2f 2a 20 55 6e 64 6f 20 61 6e 79  }..  /* Undo any
ff50: 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79   changes made by
ff60: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29   applyAffinity()
ff70: 20 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65   to the input re
ff80: 67 69 73 74 65 72 73 2e 20 2a 2f 0a 20 20 61 73  gisters. */.  as
ff90: 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61  sert( (pIn1->fla
ffa0: 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d  gs & MEM_Dyn) ==
ffb0: 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 44   (flags1 & MEM_D
ffc0: 79 6e 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66  yn) );.  pIn1->f
ffd0: 6c 61 67 73 20 3d 20 66 6c 61 67 73 31 3b 0a 20  lags = flags1;. 
ffe0: 20 61 73 73 65 72 74 28 20 28 70 49 6e 33 2d 3e   assert( (pIn3->
fff0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29  flags & MEM_Dyn)
10000 20 3d 3d 20 28 66 6c 61 67 73 33 20 26 20 4d 45   == (flags3 & ME
10010 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 70 49 6e 33  M_Dyn) );.  pIn3
10020 2d 3e 66 6c 61 67 73 20 3d 20 66 6c 61 67 73 33  ->flags = flags3
10030 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  ;..  if( pOp->p5
10040 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50   & SQLITE_STOREP
10050 32 20 29 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20  2 ){.    pOut = 
10060 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
10070 20 20 20 20 69 43 6f 6d 70 61 72 65 20 3d 20 72      iCompare = r
10080 65 73 3b 0a 20 20 20 20 69 66 28 20 28 70 4f 70  es;.    if( (pOp
10090 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4b 45  ->p5 & SQLITE_KE
100a0 45 50 4e 55 4c 4c 29 21 3d 30 20 29 7b 0a 20 20  EPNULL)!=0 ){.  
100b0 20 20 20 20 2f 2a 20 54 68 65 20 4b 45 45 50 4e      /* The KEEPN
100c0 55 4c 4c 20 66 6c 61 67 20 70 72 65 76 65 6e 74  ULL flag prevent
100d0 73 20 4f 50 5f 45 71 20 66 72 6f 6d 20 6f 76 65  s OP_Eq from ove
100e0 72 77 72 69 74 69 6e 67 20 61 20 4e 55 4c 4c 20  rwriting a NULL 
100f0 77 69 74 68 20 31 0a 20 20 20 20 20 20 2a 2a 20  with 1.      ** 
10100 61 6e 64 20 70 72 65 76 65 6e 74 73 20 4f 50 5f  and prevents OP_
10110 4e 65 20 66 72 6f 6d 20 6f 76 65 72 77 72 69 74  Ne from overwrit
10120 69 6e 67 20 4e 55 4c 4c 20 77 69 74 68 20 30 2e  ing NULL with 0.
10130 20 20 54 68 69 73 20 66 6c 61 67 0a 20 20 20 20    This flag.    
10140 20 20 2a 2a 20 69 73 20 6f 6e 6c 79 20 75 73 65    ** is only use
10150 64 20 69 6e 20 63 6f 6e 74 65 78 74 73 20 77 68  d in contexts wh
10160 65 72 65 20 65 69 74 68 65 72 3a 0a 20 20 20 20  ere either:.    
10170 20 20 2a 2a 20 20 20 28 31 29 20 6f 70 3d 3d 4f    **   (1) op==O
10180 50 5f 45 71 20 26 26 20 28 72 5b 50 32 5d 3d 3d  P_Eq && (r[P2]==
10190 4e 55 4c 4c 20 7c 7c 20 72 5b 50 32 5d 3d 3d 30  NULL || r[P2]==0
101a0 29 0a 20 20 20 20 20 20 2a 2a 20 20 20 28 32 29  ).      **   (2)
101b0 20 6f 70 3d 3d 4f 50 5f 4e 65 20 26 26 20 28 72   op==OP_Ne && (r
101c0 5b 50 32 5d 3d 3d 4e 55 4c 4c 20 7c 7c 20 72 5b  [P2]==NULL || r[
101d0 50 32 5d 3d 3d 31 29 0a 20 20 20 20 20 20 2a 2a  P2]==1).      **
101e0 20 54 68 65 72 65 66 6f 72 65 20 69 74 20 69 73   Therefore it is
101f0 20 6e 6f 74 20 6e 65 63 65 73 73 61 72 79 20 74   not necessary t
10200 6f 20 63 68 65 63 6b 20 74 68 65 20 63 6f 6e 74  o check the cont
10210 65 6e 74 20 6f 66 20 72 5b 50 32 5d 20 66 6f 72  ent of r[P2] for
10220 0a 20 20 20 20 20 20 2a 2a 20 4e 55 4c 4c 2e 20  .      ** NULL. 
10230 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
10240 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
10250 5f 4e 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  _Ne || pOp->opco
10260 64 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20 20 20  de==OP_Eq );.   
10270 20 20 20 61 73 73 65 72 74 28 20 72 65 73 32 3d     assert( res2=
10280 3d 30 20 7c 7c 20 72 65 73 32 3d 3d 31 20 29 3b  =0 || res2==1 );
10290 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
102a0 20 72 65 73 32 3d 3d 30 20 26 26 20 70 4f 70 2d   res2==0 && pOp-
102b0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 29  >opcode==OP_Eq )
102c0 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  ;.      testcase
102d0 28 20 72 65 73 32 3d 3d 31 20 26 26 20 70 4f 70  ( res2==1 && pOp
102e0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20  ->opcode==OP_Eq 
102f0 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73  );.      testcas
10300 65 28 20 72 65 73 32 3d 3d 30 20 26 26 20 70 4f  e( res2==0 && pO
10310 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65  p->opcode==OP_Ne
10320 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61   );.      testca
10330 73 65 28 20 72 65 73 32 3d 3d 31 20 26 26 20 70  se( res2==1 && p
10340 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e  Op->opcode==OP_N
10350 65 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 28  e );.      if( (
10360 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
10370 45 71 29 3d 3d 72 65 73 32 20 29 20 62 72 65 61  Eq)==res2 ) brea
10380 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6d 65 6d  k;.    }.    mem
10390 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
103a0 20 70 4f 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53   pOut);.    MemS
103b0 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
103c0 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70   MEM_Int);.    p
103d0 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 65 73 32 3b  Out->u.i = res2;
103e0 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
103f0 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75  ACE(pOp->p2, pOu
10400 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  t);.  }else{.   
10410 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
10420 28 72 65 73 21 3d 30 2c 20 28 70 4f 70 2d 3e 70  (res!=0, (pOp->p
10430 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  5 & SQLITE_NULLE
10440 51 29 3f 32 3a 33 29 3b 0a 20 20 20 20 69 66 28  Q)?2:3);.    if(
10450 20 72 65 73 32 20 29 7b 0a 20 20 20 20 20 20 67   res2 ){.      g
10460 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
10470 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
10480 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
10490 20 45 6c 73 65 4e 6f 74 45 71 20 2a 20 50 32 20   ElseNotEq * P2 
104a0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73  * * *.**.** This
104b0 20 6f 70 63 6f 64 65 20 6d 75 73 74 20 69 6d 6d   opcode must imm
104c0 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20  ediately follow 
104d0 61 6e 20 4f 50 5f 4c 74 20 6f 72 20 4f 50 5f 47  an OP_Lt or OP_G
104e0 74 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65  t comparison ope
104f0 72 61 74 6f 72 2e 0a 2a 2a 20 49 66 20 72 65 73  rator..** If res
10500 75 6c 74 20 6f 66 20 61 6e 20 4f 50 5f 45 71 20  ult of an OP_Eq 
10510 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 6e 20 74 68  comparison on th
10520 65 20 73 61 6d 65 20 74 77 6f 20 6f 70 65 72 61  e same two opera
10530 6e 64 73 0a 2a 2a 20 77 6f 75 6c 64 20 68 61 76  nds.** would hav
10540 65 20 62 65 20 4e 55 4c 4c 20 6f 72 20 66 61 6c  e be NULL or fal
10550 73 65 20 28 30 29 2c 20 74 68 65 6e 20 74 68 65  se (0), then the
10560 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a  n jump to P2. .*
10570 2a 20 49 66 20 74 68 65 20 72 65 73 75 6c 74 20  * If the result 
10580 6f 66 20 61 6e 20 4f 50 5f 45 71 20 63 6f 6d 70  of an OP_Eq comp
10590 61 72 69 73 6f 6e 20 6f 6e 20 74 68 65 20 74 77  arison on the tw
105a0 6f 20 70 72 65 76 69 6f 75 73 20 6f 70 65 72 61  o previous opera
105b0 6e 64 73 0a 2a 2a 20 77 6f 75 6c 64 20 68 61 76  nds.** would hav
105c0 65 20 62 65 65 6e 20 74 72 75 65 20 28 31 29 2c  e been true (1),
105d0 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
105e0 67 68 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45  gh..*/.case OP_E
105f0 6c 73 65 4e 6f 74 45 71 3a 20 7b 20 20 20 20 20  lseNotEq: {     
10600 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
10610 45 53 43 41 50 45 2c 20 6a 75 6d 70 20 2a 2f 0a  ESCAPE, jump */.
10620 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e 61 4f    assert( pOp>aO
10630 70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p );.  assert( p
10640 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  Op[-1].opcode==O
10650 50 5f 4c 74 20 7c 7c 20 70 4f 70 5b 2d 31 5d 2e  P_Lt || pOp[-1].
10660 6f 70 63 6f 64 65 3d 3d 4f 50 5f 47 74 20 29 3b  opcode==OP_Gt );
10670 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d  .  assert( pOp[-
10680 31 5d 2e 70 35 20 26 20 53 51 4c 49 54 45 5f 53  1].p5 & SQLITE_S
10690 54 4f 52 45 50 32 20 29 3b 0a 20 20 56 64 62 65  TOREP2 );.  Vdbe
106a0 42 72 61 6e 63 68 54 61 6b 65 6e 28 69 43 6f 6d  BranchTaken(iCom
106b0 70 61 72 65 21 3d 30 2c 20 32 29 3b 0a 20 20 69  pare!=0, 2);.  i
106c0 66 28 20 69 43 6f 6d 70 61 72 65 21 3d 30 20 29  f( iCompare!=0 )
106d0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
106e0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  ;.  break;.}.../
106f0 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75 74  * Opcode: Permut
10700 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a  ation * * * P4 *
10710 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 70  .**.** Set the p
10720 65 72 6d 75 74 61 74 69 6f 6e 20 75 73 65 64 20  ermutation used 
10730 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72  by the OP_Compar
10740 65 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68  e operator in th
10750 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75  e next.** instru
10760 63 74 69 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d  ction.  The perm
10770 75 74 61 74 69 6f 6e 20 69 73 20 73 74 6f 72 65  utation is store
10780 64 20 69 6e 20 74 68 65 20 50 34 20 6f 70 65 72  d in the P4 oper
10790 61 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70  and..**.** The p
107a0 65 72 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e  ermutation is on
107b0 6c 79 20 76 61 6c 69 64 20 75 6e 74 69 6c 20 74  ly valid until t
107c0 68 65 20 6e 65 78 74 20 4f 50 5f 43 6f 6d 70 61  he next OP_Compa
107d0 72 65 20 74 68 61 74 20 68 61 73 0a 2a 2a 20 74  re that has.** t
107e0 68 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54  he OPFLAG_PERMUT
107f0 45 20 62 69 74 20 73 65 74 20 69 6e 20 50 35 2e  E bit set in P5.
10800 20 54 79 70 69 63 61 6c 6c 79 20 74 68 65 20 4f   Typically the O
10810 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 73 68  P_Permutation sh
10820 6f 75 6c 64 20 0a 2a 2a 20 6f 63 63 75 72 20 69  ould .** occur i
10830 6d 6d 65 64 69 61 74 65 6c 79 20 70 72 69 6f 72  mmediately prior
10840 20 74 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61   to the OP_Compa
10850 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 69  re..**.** The fi
10860 72 73 74 20 69 6e 74 65 67 65 72 20 69 6e 20 74  rst integer in t
10870 68 65 20 50 34 20 69 6e 74 65 67 65 72 20 61 72  he P4 integer ar
10880 72 61 79 20 69 73 20 74 68 65 20 6c 65 6e 67 74  ray is the lengt
10890 68 20 6f 66 20 74 68 65 20 61 72 72 61 79 0a 2a  h of the array.*
108a0 2a 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 62  * and does not b
108b0 65 63 6f 6d 65 20 70 61 72 74 20 6f 66 20 74 68  ecome part of th
108c0 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 2e 0a 2a  e permutation..*
108d0 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d 75 74  /.case OP_Permut
108e0 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72  ation: {.  asser
108f0 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
10900 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a 20  P4_INTARRAY );. 
10910 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
10920 2e 61 69 20 29 3b 0a 20 20 61 73 73 65 72 74 28  .ai );.  assert(
10930 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d   pOp[1].opcode==
10940 4f 50 5f 43 6f 6d 70 61 72 65 20 29 3b 0a 20 20  OP_Compare );.  
10950 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70  assert( pOp[1].p
10960 35 20 26 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  5 & OPFLAG_PERMU
10970 54 45 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  TE );.  break;.}
10980 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d  ../* Opcode: Com
10990 70 61 72 65 20 50 31 20 50 32 20 50 33 20 50 34  pare P1 P2 P3 P4
109a0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
109b0 20 72 5b 50 31 40 50 33 5d 20 3c 2d 3e 20 72 5b   r[P1@P3] <-> r[
109c0 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d  P2@P3].**.** Com
109d0 70 61 72 65 20 74 77 6f 20 76 65 63 74 6f 72 73  pare two vectors
109e0 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 69 6e   of registers in
109f0 20 72 65 67 28 50 31 29 2e 2e 72 65 67 28 50 31   reg(P1)..reg(P1
10a00 2b 50 33 2d 31 29 20 28 63 61 6c 6c 20 74 68 69  +P3-1) (call thi
10a10 73 0a 2a 2a 20 76 65 63 74 6f 72 20 22 41 22 29  s.** vector "A")
10a20 20 61 6e 64 20 69 6e 20 72 65 67 28 50 32 29 2e   and in reg(P2).
10a30 2e 72 65 67 28 50 32 2b 50 33 2d 31 29 20 28 22  .reg(P2+P3-1) ("
10a40 42 22 29 2e 20 20 53 61 76 65 20 74 68 65 20 72  B").  Save the r
10a50 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20  esult of.** the 
10a60 63 6f 6d 70 61 72 69 73 6f 6e 20 66 6f 72 20 75  comparison for u
10a70 73 65 20 62 79 20 74 68 65 20 6e 65 78 74 20 4f  se by the next O
10a80 50 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63 74 2e  P_Jump instruct.
10a90 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73  .**.** If P5 has
10aa0 20 74 68 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d   the OPFLAG_PERM
10ab0 55 54 45 20 62 69 74 20 73 65 74 2c 20 74 68 65  UTE bit set, the
10ac0 6e 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 63  n the order of c
10ad0 6f 6d 70 61 72 69 73 6f 6e 20 69 73 0a 2a 2a 20  omparison is.** 
10ae0 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
10af0 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50  e most recent OP
10b00 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f 70 65  _Permutation ope
10b10 72 61 74 6f 72 2e 20 20 49 66 20 74 68 65 0a 2a  rator.  If the.*
10b20 2a 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  * OPFLAG_PERMUTE
10b30 20 62 69 74 20 69 73 20 63 6c 65 61 72 2c 20 74   bit is clear, t
10b40 68 65 6e 20 72 65 67 69 73 74 65 72 20 61 72 65  hen register are
10b50 20 63 6f 6d 70 61 72 65 64 20 69 6e 20 73 65 71   compared in seq
10b60 75 65 6e 74 69 61 6c 0a 2a 2a 20 6f 72 64 65 72  uential.** order
10b70 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  ..**.** P4 is a 
10b80 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
10b90 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 63  e that defines c
10ba0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
10bb0 65 73 20 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f  es and sort.** o
10bc0 72 64 65 72 73 20 66 6f 72 20 74 68 65 20 63 6f  rders for the co
10bd0 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 65 20 70  mparison.  The p
10be0 65 72 6d 75 74 61 74 69 6f 6e 20 61 70 70 6c 69  ermutation appli
10bf0 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 0a  es to registers.
10c00 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65  ** only.  The Ke
10c10 79 49 6e 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61  yInfo elements a
10c20 72 65 20 75 73 65 64 20 73 65 71 75 65 6e 74 69  re used sequenti
10c30 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ally..**.** The 
10c40 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 20  comparison is a 
10c50 73 6f 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c  sort comparison,
10c60 20 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72   so NULLs compar
10c70 65 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c  e equal,.** NULL
10c80 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20  s are less than 
10c90 6e 75 6d 62 65 72 73 2c 20 6e 75 6d 62 65 72 73  numbers, numbers
10ca0 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 73   are less than s
10cb0 74 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73  trings,.** and s
10cc0 74 72 69 6e 67 73 20 61 72 65 20 6c 65 73 73 20  trings are less 
10cd0 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63  than blobs..*/.c
10ce0 61 73 65 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20  ase OP_Compare: 
10cf0 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74  {.  int n;.  int
10d00 20 69 3b 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20   i;.  int p1;.  
10d10 69 6e 74 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20  int p2;.  const 
10d20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
10d30 6f 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20  o;.  int idx;.  
10d40 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20  CollSeq *pColl; 
10d50 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20     /* Collating 
10d60 73 65 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20  sequence to use 
10d70 6f 6e 20 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a  on this term */.
10d80 20 20 69 6e 74 20 62 52 65 76 3b 20 20 20 20 20    int bRev;     
10d90 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72       /* True for
10da0 20 44 45 53 43 45 4e 44 49 4e 47 20 73 6f 72 74   DESCENDING sort
10db0 20 6f 72 64 65 72 20 2a 2f 0a 20 20 69 6e 74 20   order */.  int 
10dc0 2a 61 50 65 72 6d 75 74 65 3b 20 20 20 20 20 2f  *aPermute;     /
10dd0 2a 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f  * The permutatio
10de0 6e 20 2a 2f 0a 0a 20 20 69 66 28 20 28 70 4f 70  n */..  if( (pOp
10df0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 45  ->p5 & OPFLAG_PE
10e00 52 4d 55 54 45 29 3d 3d 30 20 29 7b 0a 20 20 20  RMUTE)==0 ){.   
10e10 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20   aPermute = 0;. 
10e20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
10e30 72 74 28 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20  rt( pOp>aOp );. 
10e40 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d     assert( pOp[-
10e50 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 50 65  1].opcode==OP_Pe
10e60 72 6d 75 74 61 74 69 6f 6e 20 29 3b 0a 20 20 20  rmutation );.   
10e70 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d   assert( pOp[-1]
10e80 2e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41  .p4type==P4_INTA
10e90 52 52 41 59 20 29 3b 0a 20 20 20 20 61 50 65 72  RRAY );.    aPer
10ea0 6d 75 74 65 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70  mute = pOp[-1].p
10eb0 34 2e 61 69 20 2b 20 31 3b 0a 20 20 20 20 61 73  4.ai + 1;.    as
10ec0 73 65 72 74 28 20 61 50 65 72 6d 75 74 65 21 3d  sert( aPermute!=
10ed0 30 20 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20 70  0 );.  }.  n = p
10ee0 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65 79 49 6e  Op->p3;.  pKeyIn
10ef0 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65  fo = pOp->p4.pKe
10f00 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28  yInfo;.  assert(
10f10 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74   n>0 );.  assert
10f20 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b  ( pKeyInfo!=0 );
10f30 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  .  p1 = pOp->p1;
10f40 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b  .  p2 = pOp->p2;
10f50 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
10f60 45 42 55 47 0a 20 20 69 66 28 20 61 50 65 72 6d  EBUG.  if( aPerm
10f70 75 74 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b  ute ){.    int k
10f80 2c 20 6d 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f  , mx = 0;.    fo
10f90 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29  r(k=0; k<n; k++)
10fa0 20 69 66 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d   if( aPermute[k]
10fb0 3e 6d 78 20 29 20 6d 78 20 3d 20 61 50 65 72 6d  >mx ) mx = aPerm
10fc0 75 74 65 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65  ute[k];.    asse
10fd0 72 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6d  rt( p1>0 && p1+m
10fe0 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  x<=(p->nMem+1 - 
10ff0 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
11000 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e  .    assert( p2>
11010 30 20 26 26 20 70 32 2b 6d 78 3c 3d 28 70 2d 3e  0 && p2+mx<=(p->
11020 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
11030 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 65 6c 73  sor)+1 );.  }els
11040 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
11050 31 3e 30 20 26 26 20 70 31 2b 6e 3c 3d 28 70 2d  1>0 && p1+n<=(p-
11060 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
11070 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61  rsor)+1 );.    a
11080 73 73 65 72 74 28 20 70 32 3e 30 20 26 26 20 70  ssert( p2>0 && p
11090 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  2+n<=(p->nMem+1 
110a0 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  - p->nCursor)+1 
110b0 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a  );.  }.#endif /*
110c0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f   SQLITE_DEBUG */
110d0 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b  .  for(i=0; i<n;
110e0 20 69 2b 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d   i++){.    idx =
110f0 20 61 50 65 72 6d 75 74 65 20 3f 20 61 50 65 72   aPermute ? aPer
11100 6d 75 74 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20  mute[i] : i;.   
11110 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
11120 6c 69 64 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78  lid(&aMem[p1+idx
11130 5d 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ]) );.    assert
11140 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
11150 65 6d 5b 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20  em[p2+idx]) );. 
11160 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
11170 45 28 70 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b  E(p1+idx, &aMem[
11180 70 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52 45  p1+idx]);.    RE
11190 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b  GISTER_TRACE(p2+
111a0 69 64 78 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64  idx, &aMem[p2+id
111b0 78 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  x]);.    assert(
111c0 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 4b 65   i<pKeyInfo->nKe
111d0 79 46 69 65 6c 64 20 29 3b 0a 20 20 20 20 70 43  yField );.    pC
111e0 6f 6c 6c 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e  oll = pKeyInfo->
111f0 61 43 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52  aColl[i];.    bR
11200 65 76 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61  ev = pKeyInfo->a
11210 53 6f 72 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20  SortOrder[i];.  
11220 20 20 69 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c    iCompare = sql
11230 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26  ite3MemCompare(&
11240 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 61  aMem[p1+idx], &a
11250 4d 65 6d 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f  Mem[p2+idx], pCo
11260 6c 6c 29 3b 0a 20 20 20 20 69 66 28 20 69 43 6f  ll);.    if( iCo
11270 6d 70 61 72 65 20 29 7b 0a 20 20 20 20 20 20 69  mpare ){.      i
11280 66 28 20 62 52 65 76 20 29 20 69 43 6f 6d 70 61  f( bRev ) iCompa
11290 72 65 20 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a  re = -iCompare;.
112a0 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
112b0 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
112c0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75  }../* Opcode: Ju
112d0 6d 70 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  mp P1 P2 P3 * *.
112e0 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68  **.** Jump to th
112f0 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74  e instruction at
11300 20 61 64 64 72 65 73 73 20 50 31 2c 20 50 32 2c   address P1, P2,
11310 20 6f 72 20 50 33 20 64 65 70 65 6e 64 69 6e 67   or P3 depending
11320 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 69   on whether.** i
11330 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  n the most recen
11340 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73  t OP_Compare ins
11350 74 72 75 63 74 69 6f 6e 20 74 68 65 20 50 31 20  truction the P1 
11360 76 65 63 74 6f 72 20 77 61 73 20 6c 65 73 73 20  vector was less 
11370 74 68 61 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f  than.** equal to
11380 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61  , or greater tha
11390 6e 20 74 68 65 20 50 32 20 76 65 63 74 6f 72 2c  n the P2 vector,
113a0 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a   respectively..*
113b0 2f 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20  /.case OP_Jump: 
113c0 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
113d0 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69   jump */.  if( i
113e0 43 6f 6d 70 61 72 65 3c 30 20 29 7b 0a 20 20 20  Compare<0 ){.   
113f0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
11400 28 30 2c 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f  (0,3); pOp = &aO
11410 70 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a  p[pOp->p1 - 1];.
11420 20 20 7d 65 6c 73 65 20 69 66 28 20 69 43 6f 6d    }else if( iCom
11430 70 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20 20 56  pare==0 ){.    V
11440 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31  dbeBranchTaken(1
11450 2c 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b  ,3); pOp = &aOp[
11460 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20  pOp->p2 - 1];.  
11470 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42  }else{.    VdbeB
11480 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b  ranchTaken(2,3);
11490 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d   pOp = &aOp[pOp-
114a0 3e 70 33 20 2d 20 31 5d 3b 0a 20 20 7d 0a 20 20  >p3 - 1];.  }.  
114b0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
114c0 6f 64 65 3a 20 41 6e 64 20 50 31 20 50 32 20 50  ode: And P1 P2 P
114d0 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
114e0 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20  s: r[P3]=(r[P1] 
114f0 26 26 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20  && r[P2]).**.** 
11500 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c  Take the logical
11510 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75   AND of the valu
11520 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20  es in registers 
11530 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a  P1 and P2 and.**
11540 20 77 72 69 74 65 20 74 68 65 20 72 65 73 75 6c   write the resul
11550 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  t into register 
11560 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74  P3..**.** If eit
11570 68 65 72 20 50 31 20 6f 72 20 50 32 20 69 73 20  her P1 or P2 is 
11580 30 20 28 66 61 6c 73 65 29 20 74 68 65 6e 20 74  0 (false) then t
11590 68 65 20 72 65 73 75 6c 74 20 69 73 20 30 20 65  he result is 0 e
115a0 76 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74  ven if.** the ot
115b0 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
115c0 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74  L.  A NULL and t
115d0 72 75 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73  rue or two NULLs
115e0 20 67 69 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20   give.** a NULL 
115f0 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70  output..*/./* Op
11600 63 6f 64 65 3a 20 4f 72 20 50 31 20 50 32 20 50  code: Or P1 P2 P
11610 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
11620 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20  s: r[P3]=(r[P1] 
11630 7c 7c 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20  || r[P2]).**.** 
11640 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c  Take the logical
11650 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65   OR of the value
11660 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
11670 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73   and P2 and.** s
11680 74 6f 72 65 20 74 68 65 20 61 6e 73 77 65 72 20  tore the answer 
11690 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
116a0 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  **.** If either 
116b0 50 31 20 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a  P1 or P2 is nonz
116c0 65 72 6f 20 28 74 72 75 65 29 20 74 68 65 6e 20  ero (true) then 
116d0 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 31 20  the result is 1 
116e0 28 74 72 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69  (true).** even i
116f0 66 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75  f the other inpu
11700 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55  t is NULL.  A NU
11710 4c 4c 20 61 6e 64 20 66 61 6c 73 65 20 6f 72 20  LL and false or 
11720 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76  two NULLs.** giv
11730 65 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e  e a NULL output.
11740 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a  .*/.case OP_And:
11750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11760 20 73 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c   same as TK_AND,
11770 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
11780 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b  */.case OP_Or: {
11790 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
117a0 73 61 6d 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69  same as TK_OR, i
117b0 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
117c0 0a 20 20 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a  .  int v1;    /*
117d0 20 4c 65 66 74 20 6f 70 65 72 61 6e 64 3a 20 20   Left operand:  
117e0 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55  0==FALSE, 1==TRU
117f0 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72  E, 2==UNKNOWN or
11800 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76   NULL */.  int v
11810 32 3b 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f  2;    /* Right o
11820 70 65 72 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45  perand: 0==FALSE
11830 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e  , 1==TRUE, 2==UN
11840 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f  KNOWN or NULL */
11850 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
11860 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
11870 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
11880 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76  EM_Null ){.    v
11890 31 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a  1 = 2;.  }else{.
118a0 20 20 20 20 76 31 20 3d 20 73 71 6c 69 74 65 33      v1 = sqlite3
118b0 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
118c0 31 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 70 49 6e  1)!=0;.  }.  pIn
118d0 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
118e0 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 32 2d 3e  2];.  if( pIn2->
118f0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
11900 20 29 7b 0a 20 20 20 20 76 32 20 3d 20 32 3b 0a   ){.    v2 = 2;.
11910 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 32 20    }else{.    v2 
11920 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
11930 56 61 6c 75 65 28 70 49 6e 32 29 21 3d 30 3b 0a  Value(pIn2)!=0;.
11940 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f    }.  if( pOp->o
11950 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b  pcode==OP_And ){
11960 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
11970 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
11980 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20  and_logic[] = { 
11990 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32  0, 0, 0, 0, 1, 2
119a0 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20  , 0, 2, 2 };.   
119b0 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b   v1 = and_logic[
119c0 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73  v1*3+v2];.  }els
119d0 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  e{.    static co
119e0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
119f0 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b  r or_logic[] = {
11a00 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20   0, 1, 2, 1, 1, 
11a10 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20  1, 2, 1, 2 };.  
11a20 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b    v1 = or_logic[
11a30 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20  v1*3+v2];.  }.  
11a40 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
11a50 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 76 31 3d  ->p3];.  if( v1=
11a60 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74  =2 ){.    MemSet
11a70 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
11a80 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73  EM_Null);.  }els
11a90 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  e{.    pOut->u.i
11aa0 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d 53 65   = v1;.    MemSe
11ab0 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
11ac0 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20  MEM_Int);.  }.  
11ad0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
11ae0 6f 64 65 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a  ode: Not P1 P2 *
11af0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
11b00 3a 20 72 5b 50 32 5d 3d 20 21 72 5b 50 31 5d 0a  : r[P2]= !r[P1].
11b10 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  **.** Interpret 
11b20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
11b30 69 73 74 65 72 20 50 31 20 61 73 20 61 20 62 6f  ister P1 as a bo
11b40 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 53 74  olean value.  St
11b50 6f 72 65 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65  ore the.** boole
11b60 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e  an complement in
11b70 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49   register P2.  I
11b80 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
11b90 65 67 69 73 74 65 72 20 50 31 20 69 73 20 0a 2a  egister P1 is .*
11ba0 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e  * NULL, then a N
11bb0 55 4c 4c 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ULL is stored in
11bc0 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
11bd0 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Not: {          
11be0 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
11bf0 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75   TK_NOT, in1, ou
11c00 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  t2 */.  pIn1 = &
11c10 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
11c20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
11c30 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65  p->p2];.  sqlite
11c40 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
11c50 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 28 70 49  pOut);.  if( (pI
11c60 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
11c70 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Null)==0 ){.    
11c80 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
11c90 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d  M_Int;.    pOut-
11ca0 3e 75 2e 69 20 3d 20 21 73 71 6c 69 74 65 33 56  >u.i = !sqlite3V
11cb0 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
11cc0 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
11cd0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  }../* Opcode: Bi
11ce0 74 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  tNot P1 P2 * * *
11cf0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
11d00 50 31 5d 3d 20 7e 72 5b 50 31 5d 0a 2a 2a 0a 2a  P1]= ~r[P1].**.*
11d10 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
11d20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
11d30 74 65 72 20 50 31 20 61 73 20 61 6e 20 69 6e 74  ter P1 as an int
11d40 65 67 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65  eger.  Store the
11d50 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d  .** ones-complem
11d60 65 6e 74 20 6f 66 20 74 68 65 20 50 31 20 76 61  ent of the P1 va
11d70 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  lue into registe
11d80 72 20 50 32 2e 20 20 49 66 20 50 31 20 68 6f 6c  r P2.  If P1 hol
11d90 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65  ds.** a NULL the
11da0 6e 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69  n store a NULL i
11db0 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
11dc0 5f 42 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20  _BitNot: {      
11dd0 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
11de0 73 20 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31  s TK_BITNOT, in1
11df0 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31  , out2 */.  pIn1
11e00 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
11e10 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
11e20 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71  m[pOp->p2];.  sq
11e30 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
11e40 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 69 66 28  ull(pOut);.  if(
11e50 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
11e60 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a  MEM_Null)==0 ){.
11e70 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
11e80 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70  = MEM_Int;.    p
11e90 4f 75 74 2d 3e 75 2e 69 20 3d 20 7e 73 71 6c 69  Out->u.i = ~sqli
11ea0 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
11eb0 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65  pIn1);.  }.  bre
11ec0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
11ed0 3a 20 4f 6e 63 65 20 50 31 20 50 32 20 2a 20 2a  : Once P1 P2 * *
11ee0 20 2a 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68   *.**.** Fall th
11ef0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
11f00 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68  t instruction th
11f10 65 20 66 69 72 73 74 20 74 69 6d 65 20 74 68 69  e first time thi
11f20 73 20 6f 70 63 6f 64 65 20 69 73 0a 2a 2a 20 65  s opcode is.** e
11f30 6e 63 6f 75 6e 74 65 72 65 64 20 6f 6e 20 65 61  ncountered on ea
11f40 63 68 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66  ch invocation of
11f50 20 74 68 65 20 62 79 74 65 2d 63 6f 64 65 20 70   the byte-code p
11f60 72 6f 67 72 61 6d 2e 20 20 4a 75 6d 70 20 74 6f  rogram.  Jump to
11f70 20 50 32 0a 2a 2a 20 6f 6e 20 74 68 65 20 73 65   P2.** on the se
11f80 63 6f 6e 64 20 61 6e 64 20 61 6c 6c 20 73 75 62  cond and all sub
11f90 73 65 71 75 65 6e 74 20 65 6e 63 6f 75 6e 74 65  sequent encounte
11fa0 72 73 20 64 75 72 69 6e 67 20 74 68 65 20 73 61  rs during the sa
11fb0 6d 65 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 0a 2a  me invocation..*
11fc0 2a 0a 2a 2a 20 54 6f 70 2d 6c 65 76 65 6c 20 70  *.** Top-level p
11fd0 72 6f 67 72 61 6d 73 20 64 65 74 65 72 6d 69 6e  rograms determin
11fe0 65 20 66 69 72 73 74 20 69 6e 76 6f 63 61 74 69  e first invocati
11ff0 6f 6e 20 62 79 20 63 6f 6d 70 61 72 69 6e 67 20  on by comparing 
12000 74 68 65 20 50 31 0a 2a 2a 20 6f 70 65 72 61 6e  the P1.** operan
12010 64 20 61 67 61 69 6e 73 74 20 74 68 65 20 50 31  d against the P1
12020 20 6f 70 65 72 61 6e 64 20 6f 6e 20 74 68 65 20   operand on the 
12030 4f 50 5f 49 6e 69 74 20 6f 70 63 6f 64 65 20 61  OP_Init opcode a
12040 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a  t the beginning.
12050 2a 2a 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61  ** of the progra
12060 6d 2e 20 20 49 66 20 74 68 65 20 50 31 20 76 61  m.  If the P1 va
12070 6c 75 65 73 20 64 69 66 66 65 72 2c 20 74 68 65  lues differ, the
12080 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 61  n fall through a
12090 6e 64 20 6d 61 6b 65 0a 2a 2a 20 74 68 65 20 50  nd make.** the P
120a0 31 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65  1 of this opcode
120b0 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 50 31   equal to the P1
120c0 20 6f 66 20 4f 50 5f 49 6e 69 74 2e 20 20 49 66   of OP_Init.  If
120d0 20 50 31 20 76 61 6c 75 65 73 20 61 72 65 0a 2a   P1 values are.*
120e0 2a 20 74 68 65 20 73 61 6d 65 20 74 68 65 6e 20  * the same then 
120f0 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 0a 2a  take the jump..*
12100 2a 0a 2a 2a 20 46 6f 72 20 73 75 62 70 72 6f 67  *.** For subprog
12110 72 61 6d 73 2c 20 74 68 65 72 65 20 69 73 20 61  rams, there is a
12120 20 62 69 74 6d 61 73 6b 20 69 6e 20 74 68 65 20   bitmask in the 
12130 56 64 62 65 46 72 61 6d 65 20 74 68 61 74 20 64  VdbeFrame that d
12140 65 74 65 72 6d 69 6e 65 73 0a 2a 2a 20 77 68 65  etermines.** whe
12150 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
12160 6a 75 6d 70 20 73 68 6f 75 6c 64 20 62 65 20 74  jump should be t
12170 61 6b 65 6e 2e 20 20 54 68 65 20 62 69 74 6d 61  aken.  The bitma
12180 73 6b 20 69 73 20 6e 65 63 65 73 73 61 72 79 0a  sk is necessary.
12190 2a 2a 20 62 65 63 61 75 73 65 20 74 68 65 20 73  ** because the s
121a0 65 6c 66 2d 61 6c 74 65 72 69 6e 67 20 63 6f 64  elf-altering cod
121b0 65 20 74 72 69 63 6b 20 64 6f 65 73 20 6e 6f 74  e trick does not
121c0 20 77 6f 72 6b 20 66 6f 72 20 72 65 63 75 72 73   work for recurs
121d0 69 76 65 0a 2a 2a 20 74 72 69 67 67 65 72 73 2e  ive.** triggers.
121e0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 6e 63 65  .*/.case OP_Once
121f0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
12200 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 75 33 32  /* jump */.  u32
12210 20 69 41 64 64 72 3b 20 20 20 20 20 20 20 20 20   iAddr;         
12220 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73         /* Addres
12230 73 20 6f 66 20 74 68 69 73 20 69 6e 73 74 72 75  s of this instru
12240 63 74 69 6f 6e 20 2a 2f 0a 20 20 61 73 73 65 72  ction */.  asser
12250 74 28 20 70 2d 3e 61 4f 70 5b 30 5d 2e 6f 70 63  t( p->aOp[0].opc
12260 6f 64 65 3d 3d 4f 50 5f 49 6e 69 74 20 29 3b 0a  ode==OP_Init );.
12270 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20    if( p->pFrame 
12280 29 7b 0a 20 20 20 20 69 41 64 64 72 20 3d 20 28  ){.    iAddr = (
12290 69 6e 74 29 28 70 4f 70 20 2d 20 70 2d 3e 61 4f  int)(pOp - p->aO
122a0 70 29 3b 0a 20 20 20 20 69 66 28 20 28 70 2d 3e  p);.    if( (p->
122b0 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 5b 69 41  pFrame->aOnce[iA
122c0 64 64 72 2f 38 5d 20 26 20 28 31 3c 3c 28 69 41  ddr/8] & (1<<(iA
122d0 64 64 72 20 26 20 37 29 29 29 21 3d 30 20 29 7b  ddr & 7)))!=0 ){
122e0 0a 20 20 20 20 20 20 56 64 62 65 42 72 61 6e 63  .      VdbeBranc
122f0 68 54 61 6b 65 6e 28 31 2c 20 32 29 3b 0a 20 20  hTaken(1, 2);.  
12300 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
12310 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  _p2;.    }.    p
12320 2d 3e 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 5b  ->pFrame->aOnce[
12330 69 41 64 64 72 2f 38 5d 20 7c 3d 20 31 3c 3c 28  iAddr/8] |= 1<<(
12340 69 41 64 64 72 20 26 20 37 29 3b 0a 20 20 7d 65  iAddr & 7);.  }e
12350 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 70 2d 3e  lse{.    if( p->
12360 61 4f 70 5b 30 5d 2e 70 31 3d 3d 70 4f 70 2d 3e  aOp[0].p1==pOp->
12370 70 31 20 29 7b 0a 20 20 20 20 20 20 56 64 62 65  p1 ){.      Vdbe
12380 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 20 32  BranchTaken(1, 2
12390 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a 75  );.      goto ju
123a0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a  mp_to_p2;.    }.
123b0 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68    }.  VdbeBranch
123c0 54 61 6b 65 6e 28 30 2c 20 32 29 3b 0a 20 20 70  Taken(0, 2);.  p
123d0 4f 70 2d 3e 70 31 20 3d 20 70 2d 3e 61 4f 70 5b  Op->p1 = p->aOp[
123e0 30 5d 2e 70 31 3b 0a 20 20 62 72 65 61 6b 3b 0a  0].p1;.  break;.
123f0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  }../* Opcode: If
12400 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
12410 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
12420 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
12430 65 67 69 73 74 65 72 20 50 31 20 69 73 20 74 72  egister P1 is tr
12440 75 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a  ue.  The value.*
12450 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  * is considered 
12460 74 72 75 65 20 69 66 20 69 74 20 69 73 20 6e 75  true if it is nu
12470 6d 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65  meric and non-ze
12480 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  ro.  If the valu
12490 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55  e.** in P1 is NU
124a0 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  LL then take the
124b0 20 6a 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c   jump if and onl
124c0 79 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a  y if P3 is non-z
124d0 65 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ero..*/./* Opcod
124e0 65 3a 20 49 66 4e 6f 74 20 50 31 20 50 32 20 50  e: IfNot P1 P2 P
124f0 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
12500 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61   to P2 if the va
12510 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
12520 50 31 20 69 73 20 46 61 6c 73 65 2e 20 20 54 68  P1 is False.  Th
12530 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f  e value.** is co
12540 6e 73 69 64 65 72 65 64 20 66 61 6c 73 65 20 69  nsidered false i
12550 66 20 69 74 20 68 61 73 20 61 20 6e 75 6d 65 72  f it has a numer
12560 69 63 20 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f  ic value of zero
12570 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a  .  If the value.
12580 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c  ** in P1 is NULL
12590 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a   then take the j
125a0 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20  ump if and only 
125b0 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72  if P3 is non-zer
125c0 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  o..*/.case OP_If
125d0 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
125e0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
125f0 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a  /.case OP_IfNot:
12600 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
12610 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
12620 69 6e 74 20 63 3b 0a 20 20 70 49 6e 31 20 3d 20  int c;.  pIn1 = 
12630 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
12640 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
12650 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
12660 20 20 20 20 63 20 3d 20 70 4f 70 2d 3e 70 33 3b      c = pOp->p3;
12670 0a 20 20 7d 65 6c 73 65 7b 0a 23 69 66 64 65 66  .  }else{.#ifdef
12680 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
12690 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20  ATING_POINT.    
126a0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  c = sqlite3VdbeI
126b0 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30  ntValue(pIn1)!=0
126c0 3b 0a 23 65 6c 73 65 0a 20 20 20 20 63 20 3d 20  ;.#else.    c = 
126d0 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56  sqlite3VdbeRealV
126e0 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 2e 30 3b  alue(pIn1)!=0.0;
126f0 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20  .#endif.    if( 
12700 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
12710 49 66 4e 6f 74 20 29 20 63 20 3d 20 21 63 3b 0a  IfNot ) c = !c;.
12720 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68    }.  VdbeBranch
12730 54 61 6b 65 6e 28 63 21 3d 30 2c 20 32 29 3b 0a  Taken(c!=0, 2);.
12740 20 20 69 66 28 20 63 20 29 7b 0a 20 20 20 20 67    if( c ){.    g
12750 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
12760 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
12770 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c  /* Opcode: IsNul
12780 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  l P1 P2 * * *.**
12790 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
127a0 50 31 5d 3d 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50  P1]==NULL goto P
127b0 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  2.**.** Jump to 
127c0 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20  P2 if the value 
127d0 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
127e0 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
127f0 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20  OP_IsNull: {    
12800 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
12810 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75  as TK_ISNULL, ju
12820 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
12830 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
12840 31 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  1];.  VdbeBranch
12850 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c  Taken( (pIn1->fl
12860 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21  ags & MEM_Null)!
12870 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70  =0, 2);.  if( (p
12880 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
12890 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20  _Null)!=0 ){.   
128a0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
128b0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
128c0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
128d0 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a  Null P1 P2 * * *
128e0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
128f0 20 72 5b 50 31 5d 21 3d 4e 55 4c 4c 20 67 6f 74   r[P1]!=NULL got
12900 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20  o P2.**.** Jump 
12910 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
12920 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
12930 31 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20  1 is not NULL.  
12940 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e  .*/.case OP_NotN
12950 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ull: {          
12960 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
12970 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69  NOTNULL, jump, i
12980 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
12990 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
129a0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
129b0 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
129c0 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 2c 20 32   MEM_Null)==0, 2
129d0 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
129e0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
129f0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f  )==0 ){.    goto
12a00 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
12a10 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
12a20 4f 70 63 6f 64 65 3a 20 49 66 4e 75 6c 6c 52 6f  Opcode: IfNullRo
12a30 77 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  w P1 P2 P3 * *.*
12a40 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 50  * Synopsis: if P
12a50 31 2e 6e 75 6c 6c 52 6f 77 20 74 68 65 6e 20 72  1.nullRow then r
12a60 5b 50 33 5d 3d 4e 55 4c 4c 2c 20 67 6f 74 6f 20  [P3]=NULL, goto 
12a70 50 32 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74  P2.**.** Check t
12a80 68 65 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20  he cursor P1 to 
12a90 73 65 65 20 69 66 20 69 74 20 69 73 20 63 75 72  see if it is cur
12aa0 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20  rently pointing 
12ab0 61 74 20 61 20 4e 55 4c 4c 20 72 6f 77 2e 0a 2a  at a NULL row..*
12ac0 2a 20 49 66 20 69 74 20 69 73 2c 20 74 68 65 6e  * If it is, then
12ad0 20 73 65 74 20 72 65 67 69 73 74 65 72 20 50 33   set register P3
12ae0 20 74 6f 20 4e 55 4c 4c 20 61 6e 64 20 6a 75 6d   to NULL and jum
12af0 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
12b00 20 50 32 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73   P2..** If P1 is
12b10 20 6e 6f 74 20 6f 6e 20 61 20 4e 55 4c 4c 20 72   not on a NULL r
12b20 6f 77 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  ow, then fall th
12b30 72 6f 75 67 68 20 77 69 74 68 6f 75 74 20 6d 61  rough without ma
12b40 6b 69 6e 67 20 61 6e 79 0a 2a 2a 20 63 68 61 6e  king any.** chan
12b50 67 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ges..*/.case OP_
12b60 49 66 4e 75 6c 6c 52 6f 77 3a 20 7b 20 20 20 20  IfNullRow: {    
12b70 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
12b80 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
12b90 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
12ba0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
12bb0 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72  assert( p->apCsr
12bc0 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a  [pOp->p1]!=0 );.
12bd0 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 70    if( p->apCsr[p
12be0 4f 70 2d 3e 70 31 5d 2d 3e 6e 75 6c 6c 52 6f 77  Op->p1]->nullRow
12bf0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
12c00 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 61 4d  dbeMemSetNull(aM
12c10 65 6d 20 2b 20 70 4f 70 2d 3e 70 33 29 3b 0a 20  em + pOp->p3);. 
12c20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
12c30 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
12c40 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
12c50 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20 50  olumn P1 P2 P3 P
12c60 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
12c70 3a 20 72 5b 50 33 5d 3d 50 58 0a 2a 2a 0a 2a 2a  : r[P3]=PX.**.**
12c80 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 64   Interpret the d
12c90 61 74 61 20 74 68 61 74 20 63 75 72 73 6f 72 20  ata that cursor 
12ca0 50 31 20 70 6f 69 6e 74 73 20 74 6f 20 61 73 20  P1 points to as 
12cb0 61 20 73 74 72 75 63 74 75 72 65 20 62 75 69 6c  a structure buil
12cc0 74 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 4d  t using.** the M
12cd0 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75  akeRecord instru
12ce0 63 74 69 6f 6e 2e 20 20 28 53 65 65 20 74 68 65  ction.  (See the
12cf0 20 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f   MakeRecord opco
12d00 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
12d10 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  l.** information
12d20 20 61 62 6f 75 74 20 74 68 65 20 66 6f 72 6d 61   about the forma
12d30 74 20 6f 66 20 74 68 65 20 64 61 74 61 2e 29 20  t of the data.) 
12d40 20 45 78 74 72 61 63 74 20 74 68 65 20 50 32 2d   Extract the P2-
12d50 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f  th column.** fro
12d60 6d 20 74 68 69 73 20 72 65 63 6f 72 64 2e 20 20  m this record.  
12d70 49 66 20 74 68 65 72 65 20 61 72 65 20 6c 65 73  If there are les
12d80 73 20 74 68 61 74 20 28 50 32 2b 31 29 20 0a 2a  s that (P2+1) .*
12d90 2a 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  * values in the 
12da0 72 65 63 6f 72 64 2c 20 65 78 74 72 61 63 74 20  record, extract 
12db0 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68  a NULL..**.** Th
12dc0 65 20 76 61 6c 75 65 20 65 78 74 72 61 63 74 65  e value extracte
12dd0 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  d is stored in r
12de0 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a  egister P3..**.*
12df0 2a 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20  * If the record 
12e00 63 6f 6e 74 61 69 6e 73 20 66 65 77 65 72 20 74  contains fewer t
12e10 68 61 6e 20 50 32 20 66 69 65 6c 64 73 2c 20 74  han P2 fields, t
12e20 68 65 6e 20 65 78 74 72 61 63 74 20 61 20 4e 55  hen extract a NU
12e30 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20 69 66 20 74  LL.  Or,.** if t
12e40 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69  he P4 argument i
12e50 73 20 61 20 50 34 5f 4d 45 4d 20 75 73 65 20 74  s a P4_MEM use t
12e60 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
12e70 50 34 20 61 72 67 75 6d 65 6e 74 20 61 73 0a 2a  P4 argument as.*
12e80 2a 20 74 68 65 20 72 65 73 75 6c 74 2e 0a 2a 2a  * the result..**
12e90 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
12ea0 47 5f 43 4c 45 41 52 43 41 43 48 45 20 62 69 74  G_CLEARCACHE bit
12eb0 20 69 73 20 73 65 74 20 6f 6e 20 50 35 20 61 6e   is set on P5 an
12ec0 64 20 50 31 20 69 73 20 61 20 70 73 65 75 64 6f  d P1 is a pseudo
12ed0 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 2c 0a 2a  -table cursor,.*
12ee0 2a 20 74 68 65 6e 20 74 68 65 20 63 61 63 68 65  * then the cache
12ef0 20 6f 66 20 74 68 65 20 63 75 72 73 6f 72 20 69   of the cursor i
12f00 73 20 72 65 73 65 74 20 70 72 69 6f 72 20 74 6f  s reset prior to
12f10 20 65 78 74 72 61 63 74 69 6e 67 20 74 68 65 20   extracting the 
12f20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54 68 65 20 66  column..** The f
12f30 69 72 73 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20 61  irst OP_Column a
12f40 67 61 69 6e 73 74 20 61 20 70 73 65 75 64 6f 2d  gainst a pseudo-
12f50 74 61 62 6c 65 20 61 66 74 65 72 20 74 68 65 20  table after the 
12f60 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6e  value of the con
12f70 74 65 6e 74 0a 2a 2a 20 72 65 67 69 73 74 65 72  tent.** register
12f80 20 68 61 73 20 63 68 61 6e 67 65 64 20 73 68 6f   has changed sho
12f90 75 6c 64 20 68 61 76 65 20 74 68 69 73 20 62 69  uld have this bi
12fa0 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  t set..**.** If 
12fb0 74 68 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54  the OPFLAG_LENGT
12fc0 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f  HARG and OPFLAG_
12fd0 54 59 50 45 4f 46 41 52 47 20 62 69 74 73 20 61  TYPEOFARG bits a
12fe0 72 65 20 73 65 74 20 6f 6e 20 50 35 20 74 68 65  re set on P5 the
12ff0 6e 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20  n.** the result 
13000 69 73 20 67 75 61 72 61 6e 74 65 65 64 20 74 6f  is guaranteed to
13010 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 61 73   only be used as
13020 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 6f 66   the argument of
13030 20 61 20 6c 65 6e 67 74 68 28 29 0a 2a 2a 20 6f   a length().** o
13040 72 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74  r typeof() funct
13050 69 6f 6e 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ion, respectivel
13060 79 2e 20 20 54 68 65 20 6c 6f 61 64 69 6e 67 20  y.  The loading 
13070 6f 66 20 6c 61 72 67 65 20 62 6c 6f 62 73 20 63  of large blobs c
13080 61 6e 20 62 65 0a 2a 2a 20 73 6b 69 70 70 65 64  an be.** skipped
13090 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 61 6e   for length() an
130a0 64 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20 6c 6f  d all content lo
130b0 61 64 69 6e 67 20 63 61 6e 20 62 65 20 73 6b 69  ading can be ski
130c0 70 70 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28  pped for typeof(
130d0 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  )..*/.case OP_Co
130e0 6c 75 6d 6e 3a 20 7b 0a 20 20 69 6e 74 20 70 32  lumn: {.  int p2
130f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
13100 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f  column number to
13110 20 72 65 74 72 69 65 76 65 20 2a 2f 0a 20 20 56   retrieve */.  V
13120 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20  dbeCursor *pC;  
13130 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75    /* The VDBE cu
13140 72 73 6f 72 20 2a 2f 0a 20 20 42 74 43 75 72 73  rsor */.  BtCurs
13150 6f 72 20 2a 70 43 72 73 72 3b 20 20 20 2f 2a 20  or *pCrsr;   /* 
13160 54 68 65 20 42 54 72 65 65 20 63 75 72 73 6f 72  The BTree cursor
13170 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66 66 73   */.  u32 *aOffs
13180 65 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f 66 66  et;      /* aOff
13190 73 65 74 5b 69 5d 20 69 73 20 6f 66 66 73 65 74  set[i] is offset
131a0 20 74 6f 20 73 74 61 72 74 20 6f 66 20 64 61 74   to start of dat
131b0 61 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c 75 6d  a for i-th colum
131c0 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20  n */.  int len; 
131d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
131e0 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73   length of the s
131f0 65 72 69 61 6c 69 7a 65 64 20 64 61 74 61 20 66  erialized data f
13200 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 2a 2f  or the column */
13210 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20  .  int i;       
13220 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f        /* Loop co
13230 75 6e 74 65 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a  unter */.  Mem *
13240 70 44 65 73 74 3b 20 20 20 20 20 20 20 20 2f 2a  pDest;        /*
13250 20 57 68 65 72 65 20 74 6f 20 77 72 69 74 65 20   Where to write 
13260 74 68 65 20 65 78 74 72 61 63 74 65 64 20 76 61  the extracted va
13270 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65  lue */.  Mem sMe
13280 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  m;          /* F
13290 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72  or storing the r
132a0 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f  ecord being deco
132b0 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75  ded */.  const u
132c0 38 20 2a 7a 44 61 74 61 3b 20 20 20 2f 2a 20 50  8 *zData;   /* P
132d0 61 72 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72  art of the recor
132e0 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20  d being decoded 
132f0 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a  */.  const u8 *z
13300 48 64 72 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20  Hdr;    /* Next 
13310 75 6e 70 61 72 73 65 64 20 62 79 74 65 20 6f 66  unparsed byte of
13320 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20   the header */. 
13330 20 63 6f 6e 73 74 20 75 38 20 2a 7a 45 6e 64 48   const u8 *zEndH
13340 64 72 3b 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74  dr; /* Pointer t
13350 6f 20 66 69 72 73 74 20 62 79 74 65 20 61 66 74  o first byte aft
13360 65 72 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f  er the header */
13370 0a 20 20 75 33 32 20 6f 66 66 73 65 74 3b 20 20  .  u32 offset;  
13380 20 20 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20        /* Offset 
13390 69 6e 74 6f 20 74 68 65 20 64 61 74 61 20 2a 2f  into the data */
133a0 0a 20 20 75 36 34 20 6f 66 66 73 65 74 36 34 3b  .  u64 offset64;
133b0 20 20 20 20 20 20 2f 2a 20 36 34 2d 62 69 74 20        /* 64-bit 
133c0 6f 66 66 73 65 74 20 2a 2f 0a 20 20 75 33 32 20  offset */.  u32 
133d0 61 76 61 69 6c 3b 20 20 20 20 20 20 20 20 20 2f  avail;         /
133e0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
133f0 73 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 64  s of available d
13400 61 74 61 20 2a 2f 0a 20 20 75 33 32 20 74 3b 20  ata */.  u32 t; 
13410 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
13420 20 74 79 70 65 20 63 6f 64 65 20 66 72 6f 6d 20   type code from 
13430 74 68 65 20 72 65 63 6f 72 64 20 68 65 61 64 65  the record heade
13440 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 67  r */.  Mem *pReg
13450 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50 73 65  ;         /* Pse
13460 75 64 6f 54 61 62 6c 65 20 69 6e 70 75 74 20 72  udoTable input r
13470 65 67 69 73 74 65 72 20 2a 2f 0a 0a 20 20 70 43  egister */..  pC
13480 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
13490 3e 70 31 5d 3b 0a 20 20 70 32 20 3d 20 70 4f 70  >p1];.  p2 = pOp
134a0 2d 3e 70 32 3b 0a 0a 20 20 2f 2a 20 49 66 20 74  ->p2;..  /* If t
134b0 68 65 20 63 75 72 73 6f 72 20 63 61 63 68 65 20  he cursor cache 
134c0 69 73 20 73 74 61 6c 65 20 28 6d 65 61 6e 69 6e  is stale (meanin
134d0 67 20 69 74 20 69 73 20 6e 6f 74 20 63 75 72 72  g it is not curr
134e0 65 6e 74 6c 79 20 70 6f 69 6e 74 20 61 74 0a 20  ently point at. 
134f0 20 2a 2a 20 74 68 65 20 63 6f 72 72 65 63 74 20   ** the correct 
13500 72 6f 77 29 20 74 68 65 6e 20 62 72 69 6e 67 20  row) then bring 
13510 69 74 20 75 70 2d 74 6f 2d 64 61 74 65 20 62 79  it up-to-date by
13520 20 64 6f 69 6e 67 20 74 68 65 20 6e 65 63 65 73   doing the neces
13530 73 61 72 79 20 0a 20 20 2a 2a 20 42 2d 54 72 65  sary .  ** B-Tre
13540 65 20 73 65 65 6b 2e 20 2a 2f 0a 20 20 72 63 20  e seek. */.  rc 
13550 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
13560 73 6f 72 4d 6f 76 65 74 6f 28 26 70 43 2c 20 26  sorMoveto(&pC, &
13570 70 32 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  p2);.  if( rc ) 
13580 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
13590 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 61 73 73 65  o_error;..  asse
135a0 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
135b0 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
135c0 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
135d0 72 29 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20  r) );.  pDest = 
135e0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
135f0 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
13600 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a 20 20  ge(p, pDest);.  
13610 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
13620 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
13630 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
13640 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
13650 20 61 73 73 65 72 74 28 20 70 32 3c 70 43 2d 3e   assert( p2<pC->
13660 6e 46 69 65 6c 64 20 29 3b 0a 20 20 61 4f 66 66  nField );.  aOff
13670 73 65 74 20 3d 20 70 43 2d 3e 61 4f 66 66 73 65  set = pC->aOffse
13680 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  t;.  assert( pC-
13690 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59  >eCurType!=CURTY
136a0 50 45 5f 56 54 41 42 20 29 3b 0a 20 20 61 73 73  PE_VTAB );.  ass
136b0 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
136c0 65 21 3d 43 55 52 54 59 50 45 5f 50 53 45 55 44  e!=CURTYPE_PSEUD
136d0 4f 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  O || pC->nullRow
136e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
136f0 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54  ->eCurType!=CURT
13700 59 50 45 5f 53 4f 52 54 45 52 20 29 3b 0a 0a 20  YPE_SORTER );.. 
13710 20 69 66 28 20 70 43 2d 3e 63 61 63 68 65 53 74   if( pC->cacheSt
13720 61 74 75 73 21 3d 70 2d 3e 63 61 63 68 65 43 74  atus!=p->cacheCt
13730 72 20 29 7b 20 20 20 20 20 20 20 20 20 20 20 20  r ){            
13740 20 20 20 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49      /*OPTIMIZATI
13750 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20  ON-IF-FALSE*/.  
13760 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f    if( pC->nullRo
13770 77 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70  w ){.      if( p
13780 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
13790 54 59 50 45 5f 50 53 45 55 44 4f 20 29 7b 0a 20  TYPE_PSEUDO ){. 
137a0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
137b0 43 2d 3e 75 63 2e 70 73 65 75 64 6f 54 61 62 6c  C->uc.pseudoTabl
137c0 65 52 65 67 3e 30 20 29 3b 0a 20 20 20 20 20 20  eReg>0 );.      
137d0 20 20 70 52 65 67 20 3d 20 26 61 4d 65 6d 5b 70    pReg = &aMem[p
137e0 43 2d 3e 75 63 2e 70 73 65 75 64 6f 54 61 62 6c  C->uc.pseudoTabl
137f0 65 52 65 67 5d 3b 0a 20 20 20 20 20 20 20 20 61  eReg];.        a
13800 73 73 65 72 74 28 20 70 52 65 67 2d 3e 66 6c 61  ssert( pReg->fla
13810 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b  gs & MEM_Blob );
13820 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
13830 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65 67   memIsValid(pReg
13840 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  ) );.        pC-
13850 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70  >payloadSize = p
13860 43 2d 3e 73 7a 52 6f 77 20 3d 20 61 76 61 69 6c  C->szRow = avail
13870 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a 20 20 20 20   = pReg->n;.    
13880 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 28      pC->aRow = (
13890 75 38 2a 29 70 52 65 67 2d 3e 7a 3b 0a 20 20 20  u8*)pReg->z;.   
138a0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
138b0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
138c0 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
138d0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f          goto op_
138e0 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20  column_out;.    
138f0 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20    }.    }else{. 
13900 20 20 20 20 20 70 43 72 73 72 20 3d 20 70 43 2d       pCrsr = pC-
13910 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 20  >uc.pCursor;.   
13920 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65     assert( pC->e
13930 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
13940 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20 20 20  _BTREE );.      
13950 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b  assert( pCrsr );
13960 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
13970 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
13980 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20  rIsValid(pCrsr) 
13990 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 70 61 79  );.      pC->pay
139a0 6c 6f 61 64 53 69 7a 65 20 3d 20 73 71 6c 69 74  loadSize = sqlit
139b0 65 33 42 74 72 65 65 50 61 79 6c 6f 61 64 53 69  e3BtreePayloadSi
139c0 7a 65 28 70 43 72 73 72 29 3b 0a 20 20 20 20 20  ze(pCrsr);.     
139d0 20 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71 6c 69   pC->aRow = sqli
139e0 74 65 33 42 74 72 65 65 50 61 79 6c 6f 61 64 46  te3BtreePayloadF
139f0 65 74 63 68 28 70 43 72 73 72 2c 20 26 61 76 61  etch(pCrsr, &ava
13a00 69 6c 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  il);.      asser
13a10 74 28 20 61 76 61 69 6c 3c 3d 36 35 35 33 36 20  t( avail<=65536 
13a20 29 3b 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 70  );  /* Maximum p
13a30 61 67 65 20 73 69 7a 65 20 69 73 20 36 34 4b 69  age size is 64Ki
13a40 42 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70  B */.      if( p
13a50 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3c  C->payloadSize <
13a60 3d 20 28 75 33 32 29 61 76 61 69 6c 20 29 7b 0a  = (u32)avail ){.
13a70 20 20 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f          pC->szRo
13a80 77 20 3d 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53  w = pC->payloadS
13a90 69 7a 65 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ize;.      }else
13aa0 20 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64   if( pC->payload
13ab0 53 69 7a 65 20 3e 20 28 75 33 32 29 64 62 2d 3e  Size > (u32)db->
13ac0 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
13ad0 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
13ae0 20 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f         goto too_
13af0 62 69 67 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  big;.      }else
13b00 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 73 7a  {.        pC->sz
13b10 52 6f 77 20 3d 20 61 76 61 69 6c 3b 0a 20 20 20  Row = avail;.   
13b20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70     }.    }.    p
13b30 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
13b40 20 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a 20 20   p->cacheCtr;.  
13b50 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74    pC->iHdrOffset
13b60 20 3d 20 67 65 74 56 61 72 69 6e 74 33 32 28 70   = getVarint32(p
13b70 43 2d 3e 61 52 6f 77 2c 20 6f 66 66 73 65 74 29  C->aRow, offset)
13b80 3b 0a 20 20 20 20 70 43 2d 3e 6e 48 64 72 50 61  ;.    pC->nHdrPa
13b90 72 73 65 64 20 3d 20 30 3b 0a 20 20 20 20 61 4f  rsed = 0;.    aO
13ba0 66 66 73 65 74 5b 30 5d 20 3d 20 6f 66 66 73 65  ffset[0] = offse
13bb0 74 3b 0a 0a 0a 20 20 20 20 69 66 28 20 61 76 61  t;...    if( ava
13bc0 69 6c 3c 6f 66 66 73 65 74 20 29 7b 20 20 20 20  il<offset ){    
13bd0 20 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e    /*OPTIMIZATION
13be0 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20  -IF-FALSE*/.    
13bf0 20 20 2f 2a 20 70 43 2d 3e 61 52 6f 77 20 64 6f    /* pC->aRow do
13c00 65 73 20 6e 6f 74 20 68 61 76 65 20 74 6f 20 68  es not have to h
13c10 6f 6c 64 20 74 68 65 20 65 6e 74 69 72 65 20 72  old the entire r
13c20 6f 77 2c 20 62 75 74 20 69 74 20 64 6f 65 73 20  ow, but it does 
13c30 61 74 20 6c 65 61 73 74 0a 20 20 20 20 20 20 2a  at least.      *
13c40 2a 20 6e 65 65 64 20 74 6f 20 63 6f 76 65 72 20  * need to cover 
13c50 74 68 65 20 68 65 61 64 65 72 20 6f 66 20 74 68  the header of th
13c60 65 20 72 65 63 6f 72 64 2e 20 20 49 66 20 70 43  e record.  If pC
13c70 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20  ->aRow does not 
13c80 63 6f 6e 74 61 69 6e 0a 20 20 20 20 20 20 2a 2a  contain.      **
13c90 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 68 65   the complete he
13ca0 61 64 65 72 2c 20 74 68 65 6e 20 73 65 74 20 69  ader, then set i
13cb0 74 20 74 6f 20 7a 65 72 6f 2c 20 66 6f 72 63 69  t to zero, forci
13cc0 6e 67 20 74 68 65 20 68 65 61 64 65 72 20 74 6f  ng the header to
13cd0 20 62 65 0a 20 20 20 20 20 20 2a 2a 20 64 79 6e   be.      ** dyn
13ce0 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74  amically allocat
13cf0 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 70 43 2d  ed. */.      pC-
13d00 3e 61 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20  >aRow = 0;.     
13d10 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 30 3b 0a   pC->szRow = 0;.
13d20 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73  .      /* Make s
13d30 75 72 65 20 61 20 63 6f 72 72 75 70 74 20 64 61  ure a corrupt da
13d40 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20 67  tabase has not g
13d50 69 76 65 6e 20 75 73 20 61 6e 20 6f 76 65 72 73  iven us an overs
13d60 69 7a 65 20 68 65 61 64 65 72 2e 0a 20 20 20 20  ize header..    
13d70 20 20 2a 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77    ** Do this now
13d80 20 74 6f 20 61 76 6f 69 64 20 61 6e 20 6f 76 65   to avoid an ove
13d90 72 73 69 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  rsize memory all
13da0 6f 63 61 74 69 6f 6e 2e 0a 20 20 20 20 20 20 2a  ocation..      *
13db0 2a 0a 20 20 20 20 20 20 2a 2a 20 54 79 70 65 20  *.      ** Type 
13dc0 65 6e 74 72 69 65 73 20 63 61 6e 20 62 65 20 62  entries can be b
13dd0 65 74 77 65 65 6e 20 31 20 61 6e 64 20 35 20 62  etween 1 and 5 b
13de0 79 74 65 73 20 65 61 63 68 2e 20 20 42 75 74 20  ytes each.  But 
13df0 34 20 61 6e 64 20 35 20 62 79 74 65 0a 20 20 20  4 and 5 byte.   
13e00 20 20 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20     ** types use 
13e10 73 6f 20 6d 75 63 68 20 64 61 74 61 20 73 70 61  so much data spa
13e20 63 65 20 74 68 61 74 20 74 68 65 72 65 20 63 61  ce that there ca
13e30 6e 20 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61  n only be 4096 a
13e40 6e 64 20 33 32 20 6f 66 0a 20 20 20 20 20 20 2a  nd 32 of.      *
13e50 2a 20 74 68 65 6d 2c 20 72 65 73 70 65 63 74 69  * them, respecti
13e60 76 65 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d 61  vely.  So the ma
13e70 78 69 6d 75 6d 20 68 65 61 64 65 72 20 6c 65 6e  ximum header len
13e80 67 74 68 20 72 65 73 75 6c 74 73 20 66 72 6f 6d  gth results from
13e90 20 61 0a 20 20 20 20 20 20 2a 2a 20 33 2d 62 79   a.      ** 3-by
13ea0 74 65 20 74 79 70 65 20 66 6f 72 20 65 61 63 68  te type for each
13eb0 20 6f 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20   of the maximum 
13ec0 6f 66 20 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73  of 32768 columns
13ed0 20 70 6c 75 73 20 74 68 72 65 65 0a 20 20 20 20   plus three.    
13ee0 20 20 2a 2a 20 65 78 74 72 61 20 62 79 74 65 73    ** extra bytes
13ef0 20 66 6f 72 20 74 68 65 20 68 65 61 64 65 72 20   for the header 
13f00 6c 65 6e 67 74 68 20 69 74 73 65 6c 66 2e 20 20  length itself.  
13f10 33 32 37 36 38 2a 33 20 2b 20 33 20 3d 20 39 38  32768*3 + 3 = 98
13f20 33 30 37 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  307..      */.  
13f30 20 20 20 20 69 66 28 20 6f 66 66 73 65 74 20 3e      if( offset >
13f40 20 39 38 33 30 37 20 7c 7c 20 6f 66 66 73 65 74   98307 || offset
13f50 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69   > pC->payloadSi
13f60 7a 65 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  ze ){.        rc
13f70 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50   = SQLITE_CORRUP
13f80 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 20 20  T_BKPT;.        
13f90 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
13fa0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
13fb0 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6f  .    }else if( o
13fc0 66 66 73 65 74 3e 30 20 29 7b 20 2f 2a 4f 50 54  ffset>0 ){ /*OPT
13fd0 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55  IMIZATION-IF-TRU
13fe0 45 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 54 68 65  E*/.      /* The
13ff0 20 66 6f 6c 6c 6f 77 69 6e 67 20 67 6f 74 6f 20   following goto 
14000 69 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69  is an optimizati
14010 6f 6e 2e 20 20 49 74 20 63 61 6e 20 62 65 20 6f  on.  It can be o
14020 6d 69 74 74 65 64 20 61 6e 64 0a 20 20 20 20 20  mitted and.     
14030 20 2a 2a 20 65 76 65 72 79 74 68 69 6e 67 20 77   ** everything w
14040 69 6c 6c 20 73 74 69 6c 6c 20 77 6f 72 6b 2e 20  ill still work. 
14050 20 42 75 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20 69   But OP_Column i
14060 73 20 6d 65 61 73 75 72 61 62 6c 79 20 66 61 73  s measurably fas
14070 74 65 72 0a 20 20 20 20 20 20 2a 2a 20 62 79 20  ter.      ** by 
14080 73 6b 69 70 70 69 6e 67 20 74 68 65 20 73 75 62  skipping the sub
14090 73 65 71 75 65 6e 74 20 63 6f 6e 64 69 74 69 6f  sequent conditio
140a0 6e 61 6c 2c 20 77 68 69 63 68 20 69 73 20 61 6c  nal, which is al
140b0 77 61 79 73 20 74 72 75 65 2e 0a 20 20 20 20 20  ways true..     
140c0 20 2a 2f 0a 20 20 20 20 20 20 7a 44 61 74 61 20   */.      zData 
140d0 3d 20 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20  = pC->aRow;.    
140e0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 48    assert( pC->nH
140f0 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29 3b 20  drParsed<=p2 ); 
14100 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 64 69          /* Condi
14110 74 69 6f 6e 61 6c 20 73 6b 69 70 70 65 64 20 2a  tional skipped *
14120 2f 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f  /.      goto op_
14130 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68 65 61 64  column_read_head
14140 65 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20  er;.    }.  }.. 
14150 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 74   /* Make sure at
14160 20 6c 65 61 73 74 20 74 68 65 20 66 69 72 73 74   least the first
14170 20 70 32 2b 31 20 65 6e 74 72 69 65 73 20 6f 66   p2+1 entries of
14180 20 74 68 65 20 68 65 61 64 65 72 20 68 61 76 65   the header have
14190 20 62 65 65 6e 0a 20 20 2a 2a 20 70 61 72 73 65   been.  ** parse
141a0 64 20 61 6e 64 20 76 61 6c 69 64 20 69 6e 66 6f  d and valid info
141b0 72 6d 61 74 69 6f 6e 20 69 73 20 69 6e 20 61 4f  rmation is in aO
141c0 66 66 73 65 74 5b 5d 20 61 6e 64 20 70 43 2d 3e  ffset[] and pC->
141d0 61 54 79 70 65 5b 5d 2e 0a 20 20 2a 2f 0a 20 20  aType[]..  */.  
141e0 69 66 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73  if( pC->nHdrPars
141f0 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20 2f 2a  ed<=p2 ){.    /*
14200 20 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72   If there is mor
14210 65 20 68 65 61 64 65 72 20 61 76 61 69 6c 61 62  e header availab
14220 6c 65 20 66 6f 72 20 70 61 72 73 69 6e 67 20 69  le for parsing i
14230 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20 74 72  n the record, tr
14240 79 0a 20 20 20 20 2a 2a 20 74 6f 20 65 78 74 72  y.    ** to extr
14250 61 63 74 20 61 64 64 69 74 69 6f 6e 61 6c 20 66  act additional f
14260 69 65 6c 64 73 20 75 70 20 74 68 72 6f 75 67 68  ields up through
14270 20 74 68 65 20 70 32 2b 31 2d 74 68 20 66 69 65   the p2+1-th fie
14280 6c 64 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  ld .    */.    i
14290 66 28 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65  f( pC->iHdrOffse
142a0 74 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b 0a  t<aOffset[0] ){.
142b0 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75        /* Make su
142c0 72 65 20 7a 44 61 74 61 20 70 6f 69 6e 74 73 20  re zData points 
142d0 74 6f 20 65 6e 6f 75 67 68 20 6f 66 20 74 68 65  to enough of the
142e0 20 72 65 63 6f 72 64 20 74 6f 20 63 6f 76 65 72   record to cover
142f0 20 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a   the header. */.
14300 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52        if( pC->aR
14310 6f 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ow==0 ){.       
14320 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30   memset(&sMem, 0
14330 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b  , sizeof(sMem));
14340 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
14350 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d  lite3VdbeMemFrom
14360 42 74 72 65 65 28 70 43 2d 3e 75 63 2e 70 43 75  Btree(pC->uc.pCu
14370 72 73 6f 72 2c 20 30 2c 20 61 4f 66 66 73 65 74  rsor, 0, aOffset
14380 5b 30 5d 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20  [0], &sMem);.   
14390 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
143a0 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
143b0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
143c0 3b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20  ;.        zData 
143d0 3d 20 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20  = (u8*)sMem.z;. 
143e0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
143f0 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e      zData = pC->
14400 61 52 6f 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20  aRow;.      }.  
14410 0a 20 20 20 20 20 20 2f 2a 20 46 69 6c 6c 20 69  .      /* Fill i
14420 6e 20 70 43 2d 3e 61 54 79 70 65 5b 69 5d 20 61  n pC->aType[i] a
14430 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d 20 76 61  nd aOffset[i] va
14440 6c 75 65 73 20 74 68 72 6f 75 67 68 20 74 68 65  lues through the
14450 20 70 32 2d 74 68 20 66 69 65 6c 64 2e 20 2a 2f   p2-th field. */
14460 0a 20 20 20 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72  .    op_column_r
14470 65 61 64 5f 68 65 61 64 65 72 3a 0a 20 20 20 20  ead_header:.    
14480 20 20 69 20 3d 20 70 43 2d 3e 6e 48 64 72 50 61    i = pC->nHdrPa
14490 72 73 65 64 3b 0a 20 20 20 20 20 20 6f 66 66 73  rsed;.      offs
144a0 65 74 36 34 20 3d 20 61 4f 66 66 73 65 74 5b 69  et64 = aOffset[i
144b0 5d 3b 0a 20 20 20 20 20 20 7a 48 64 72 20 3d 20  ];.      zHdr = 
144c0 7a 44 61 74 61 20 2b 20 70 43 2d 3e 69 48 64 72  zData + pC->iHdr
144d0 4f 66 66 73 65 74 3b 0a 20 20 20 20 20 20 7a 45  Offset;.      zE
144e0 6e 64 48 64 72 20 3d 20 7a 44 61 74 61 20 2b 20  ndHdr = zData + 
144f0 61 4f 66 66 73 65 74 5b 30 5d 3b 0a 20 20 20 20  aOffset[0];.    
14500 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 69 66    do{.        if
14510 28 20 28 74 20 3d 20 7a 48 64 72 5b 30 5d 29 3c  ( (t = zHdr[0])<
14520 30 78 38 30 20 29 7b 0a 20 20 20 20 20 20 20 20  0x80 ){.        
14530 20 20 7a 48 64 72 2b 2b 3b 0a 20 20 20 20 20 20    zHdr++;.      
14540 20 20 20 20 6f 66 66 73 65 74 36 34 20 2b 3d 20      offset64 += 
14550 73 71 6c 69 74 65 33 56 64 62 65 4f 6e 65 42 79  sqlite3VdbeOneBy
14560 74 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28  teSerialTypeLen(
14570 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  t);.        }els
14580 65 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64  e{.          zHd
14590 72 20 2b 3d 20 73 71 6c 69 74 65 33 47 65 74 56  r += sqlite3GetV
145a0 61 72 69 6e 74 33 32 28 7a 48 64 72 2c 20 26 74  arint32(zHdr, &t
145b0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 66 66  );.          off
145c0 73 65 74 36 34 20 2b 3d 20 73 71 6c 69 74 65 33  set64 += sqlite3
145d0 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65  VdbeSerialTypeLe
145e0 6e 28 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  n(t);.        }.
145f0 20 20 20 20 20 20 20 20 70 43 2d 3e 61 54 79 70          pC->aTyp
14600 65 5b 69 2b 2b 5d 20 3d 20 74 3b 0a 20 20 20 20  e[i++] = t;.    
14610 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d      aOffset[i] =
14620 20 28 75 33 32 29 28 6f 66 66 73 65 74 36 34 20   (u32)(offset64 
14630 26 20 30 78 66 66 66 66 66 66 66 66 29 3b 0a 20  & 0xffffffff);. 
14640 20 20 20 20 20 7d 77 68 69 6c 65 28 20 69 3c 3d       }while( i<=
14650 70 32 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64 48  p2 && zHdr<zEndH
14660 64 72 20 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20  dr );..      /* 
14670 54 68 65 20 72 65 63 6f 72 64 20 69 73 20 63 6f  The record is co
14680 72 72 75 70 74 20 69 66 20 61 6e 79 20 6f 66 20  rrupt if any of 
14690 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72  the following ar
146a0 65 20 74 72 75 65 3a 0a 20 20 20 20 20 20 2a 2a  e true:.      **
146b0 20 28 31 29 20 74 68 65 20 62 79 74 65 73 20 6f   (1) the bytes o
146c0 66 20 74 68 65 20 68 65 61 64 65 72 20 65 78 74  f the header ext
146d0 65 6e 64 20 70 61 73 74 20 74 68 65 20 64 65 63  end past the dec
146e0 6c 61 72 65 64 20 68 65 61 64 65 72 20 73 69 7a  lared header siz
146f0 65 0a 20 20 20 20 20 20 2a 2a 20 28 32 29 20 74  e.      ** (2) t
14700 68 65 20 65 6e 74 69 72 65 20 68 65 61 64 65 72  he entire header
14710 20 77 61 73 20 75 73 65 64 20 62 75 74 20 6e 6f   was used but no
14720 74 20 61 6c 6c 20 64 61 74 61 20 77 61 73 20 75  t all data was u
14730 73 65 64 0a 20 20 20 20 20 20 2a 2a 20 28 33 29  sed.      ** (3)
14740 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
14750 64 61 74 61 20 65 78 74 65 6e 64 73 20 62 65 79  data extends bey
14760 6f 6e 64 20 74 68 65 20 65 6e 64 20 6f 66 20 74  ond the end of t
14770 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20 20 20  he record..     
14780 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28 7a   */.      if( (z
14790 48 64 72 3e 3d 7a 45 6e 64 48 64 72 20 26 26 20  Hdr>=zEndHdr && 
147a0 28 7a 48 64 72 3e 7a 45 6e 64 48 64 72 20 7c 7c  (zHdr>zEndHdr ||
147b0 20 6f 66 66 73 65 74 36 34 21 3d 70 43 2d 3e 70   offset64!=pC->p
147c0 61 79 6c 6f 61 64 53 69 7a 65 29 29 0a 20 20 20  ayloadSize)).   
147d0 20 20 20 20 7c 7c 20 28 6f 66 66 73 65 74 36 34      || (offset64
147e0 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69   > pC->payloadSi
147f0 7a 65 29 0a 20 20 20 20 20 20 29 7b 0a 20 20 20  ze).      ){.   
14800 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f       if( pC->aRo
14810 77 3d 3d 30 20 29 20 73 71 6c 69 74 65 33 56 64  w==0 ) sqlite3Vd
14820 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d  beMemRelease(&sM
14830 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20  em);.        rc 
14840 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  = SQLITE_CORRUPT
14850 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 20 20 67  _BKPT;.        g
14860 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
14870 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
14880 0a 20 20 20 20 20 20 70 43 2d 3e 6e 48 64 72 50  .      pC->nHdrP
14890 61 72 73 65 64 20 3d 20 69 3b 0a 20 20 20 20 20  arsed = i;.     
148a0 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 20   pC->iHdrOffset 
148b0 3d 20 28 75 33 32 29 28 7a 48 64 72 20 2d 20 7a  = (u32)(zHdr - z
148c0 44 61 74 61 29 3b 0a 20 20 20 20 20 20 69 66 28  Data);.      if(
148d0 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 20 73   pC->aRow==0 ) s
148e0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
148f0 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 20  ease(&sMem);.   
14900 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 74 20   }else{.      t 
14910 3d 20 30 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  = 0;.    }..    
14920 2f 2a 20 49 66 20 61 66 74 65 72 20 74 72 79 69  /* If after tryi
14930 6e 67 20 74 6f 20 65 78 74 72 61 63 74 20 6e 65  ng to extract ne
14940 77 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74  w entries from t
14950 68 65 20 68 65 61 64 65 72 2c 20 6e 48 64 72 50  he header, nHdrP
14960 61 72 73 65 64 20 69 73 0a 20 20 20 20 2a 2a 20  arsed is.    ** 
14970 73 74 69 6c 6c 20 6e 6f 74 20 75 70 20 74 6f 20  still not up to 
14980 70 32 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  p2, that means t
14990 68 61 74 20 74 68 65 20 72 65 63 6f 72 64 20 68  hat the record h
149a0 61 73 20 66 65 77 65 72 20 74 68 61 6e 20 70 32  as fewer than p2
149b0 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 73 2e  .    ** columns.
149c0 20 20 53 6f 20 74 68 65 20 72 65 73 75 6c 74 20    So the result 
149d0 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72 20 74  will be either t
149e0 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
149f0 20 6f 72 20 61 20 4e 55 4c 4c 2e 0a 20 20 20 20   or a NULL..    
14a00 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e  */.    if( pC->n
14a10 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b  HdrParsed<=p2 ){
14a20 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
14a30 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20 29  p4type==P4_MEM )
14a40 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
14a50 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
14a60 6f 70 79 28 70 44 65 73 74 2c 20 70 4f 70 2d 3e  opy(pDest, pOp->
14a70 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61  p4.pMem, MEM_Sta
14a80 74 69 63 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  tic);.      }els
14a90 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
14aa0 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
14ab0 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 7d  (pDest);.      }
14ac0 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63  .      goto op_c
14ad0 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d  olumn_out;.    }
14ae0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 74 20  .  }else{.    t 
14af0 3d 20 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 3b  = pC->aType[p2];
14b00 0a 20 20 7d 0a 0a 20 20 2f 2a 20 45 78 74 72 61  .  }..  /* Extra
14b10 63 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 66  ct the content f
14b20 6f 72 20 74 68 65 20 70 32 2b 31 2d 74 68 20 63  or the p2+1-th c
14b30 6f 6c 75 6d 6e 2e 20 20 43 6f 6e 74 72 6f 6c 20  olumn.  Control 
14b40 63 61 6e 20 6f 6e 6c 79 0a 20 20 2a 2a 20 72 65  can only.  ** re
14b50 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74 20 69  ach this point i
14b60 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 61  f aOffset[p2], a
14b70 4f 66 66 73 65 74 5b 70 32 2b 31 5d 2c 20 61 6e  Offset[p2+1], an
14b80 64 20 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 20  d pC->aType[p2] 
14b90 61 72 65 0a 20 20 2a 2a 20 61 6c 6c 20 76 61 6c  are.  ** all val
14ba0 69 64 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  id..  */.  asser
14bb0 74 28 20 70 32 3c 70 43 2d 3e 6e 48 64 72 50 61  t( p2<pC->nHdrPa
14bc0 72 73 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74  rsed );.  assert
14bd0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
14be0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c  );.  assert( sql
14bf0 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d  ite3VdbeCheckMem
14c00 49 6e 76 61 72 69 61 6e 74 73 28 70 44 65 73 74  Invariants(pDest
14c10 29 20 29 3b 0a 20 20 69 66 28 20 56 64 62 65 4d  ) );.  if( VdbeM
14c20 65 6d 44 79 6e 61 6d 69 63 28 70 44 65 73 74 29  emDynamic(pDest)
14c30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
14c40 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44  dbeMemSetNull(pD
14c50 65 73 74 29 3b 0a 20 20 7d 0a 20 20 61 73 73 65  est);.  }.  asse
14c60 72 74 28 20 74 3d 3d 70 43 2d 3e 61 54 79 70 65  rt( t==pC->aType
14c70 5b 70 32 5d 20 29 3b 0a 20 20 69 66 28 20 70 43  [p2] );.  if( pC
14c80 2d 3e 73 7a 52 6f 77 3e 3d 61 4f 66 66 73 65 74  ->szRow>=aOffset
14c90 5b 70 32 2b 31 5d 20 29 7b 0a 20 20 20 20 2f 2a  [p2+1] ){.    /*
14ca0 20 54 68 69 73 20 69 73 20 74 68 65 20 63 6f 6d   This is the com
14cb0 6d 6f 6e 20 63 61 73 65 20 77 68 65 72 65 20 74  mon case where t
14cc0 68 65 20 64 65 73 69 72 65 64 20 63 6f 6e 74 65  he desired conte
14cd0 6e 74 20 66 69 74 73 20 6f 6e 20 74 68 65 20 6f  nt fits on the o
14ce0 72 69 67 69 6e 61 6c 0a 20 20 20 20 2a 2a 20 70  riginal.    ** p
14cf0 61 67 65 20 2d 20 77 68 65 72 65 20 74 68 65 20  age - where the 
14d00 63 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20 6f  content is not o
14d10 6e 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61  n an overflow pa
14d20 67 65 20 2a 2f 0a 20 20 20 20 7a 44 61 74 61 20  ge */.    zData 
14d30 3d 20 70 43 2d 3e 61 52 6f 77 20 2b 20 61 4f 66  = pC->aRow + aOf
14d40 66 73 65 74 5b 70 32 5d 3b 0a 20 20 20 20 69 66  fset[p2];.    if
14d50 28 20 74 3c 31 32 20 29 7b 0a 20 20 20 20 20 20  ( t<12 ){.      
14d60 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
14d70 6c 47 65 74 28 7a 44 61 74 61 2c 20 74 2c 20 70  lGet(zData, t, p
14d80 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65  Dest);.    }else
14d90 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  {.      /* If th
14da0 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 69  e column value i
14db0 73 20 61 20 73 74 72 69 6e 67 2c 20 77 65 20 6e  s a string, we n
14dc0 65 65 64 20 61 20 70 65 72 73 69 73 74 65 6e 74  eed a persistent
14dd0 20 76 61 6c 75 65 2c 20 6e 6f 74 0a 20 20 20 20   value, not.    
14de0 20 20 2a 2a 20 61 20 4d 45 4d 5f 45 70 68 65 6d    ** a MEM_Ephem
14df0 20 76 61 6c 75 65 2e 20 20 54 68 69 73 20 62 72   value.  This br
14e00 61 6e 63 68 20 69 73 20 61 20 66 61 73 74 20 73  anch is a fast s
14e10 68 6f 72 74 2d 63 75 74 20 74 68 61 74 20 69 73  hort-cut that is
14e20 20 65 71 75 69 76 61 6c 65 6e 74 0a 20 20 20 20   equivalent.    
14e30 20 20 2a 2a 20 74 6f 20 63 61 6c 6c 69 6e 67 20    ** to calling 
14e40 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
14e50 6c 47 65 74 28 29 20 61 6e 64 20 73 71 6c 69 74  lGet() and sqlit
14e60 65 33 56 64 62 65 44 65 65 70 68 65 6d 65 72 61  e3VdbeDeephemera
14e70 6c 69 7a 65 28 29 2e 0a 20 20 20 20 20 20 2a 2f  lize()..      */
14e80 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f  .      static co
14e90 6e 73 74 20 75 31 36 20 61 46 6c 61 67 5b 5d 20  nst u16 aFlag[] 
14ea0 3d 20 7b 20 4d 45 4d 5f 42 6c 6f 62 2c 20 4d 45  = { MEM_Blob, ME
14eb0 4d 5f 53 74 72 7c 4d 45 4d 5f 54 65 72 6d 20 7d  M_Str|MEM_Term }
14ec0 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 6e  ;.      pDest->n
14ed0 20 3d 20 6c 65 6e 20 3d 20 28 74 2d 31 32 29 2f   = len = (t-12)/
14ee0 32 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e  2;.      pDest->
14ef0 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
14f00 20 20 20 20 20 20 69 66 28 20 70 44 65 73 74 2d        if( pDest-
14f10 3e 73 7a 4d 61 6c 6c 6f 63 20 3c 20 6c 65 6e 2b  >szMalloc < len+
14f20 32 20 29 7b 0a 20 20 20 20 20 20 20 20 70 44 65  2 ){.        pDe
14f30 73 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  st->flags = MEM_
14f40 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66  Null;.        if
14f50 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
14f60 47 72 6f 77 28 70 44 65 73 74 2c 20 6c 65 6e 2b  Grow(pDest, len+
14f70 32 2c 20 30 29 20 29 20 67 6f 74 6f 20 6e 6f 5f  2, 0) ) goto no_
14f80 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  mem;.      }else
14f90 7b 0a 20 20 20 20 20 20 20 20 70 44 65 73 74 2d  {.        pDest-
14fa0 3e 7a 20 3d 20 70 44 65 73 74 2d 3e 7a 4d 61 6c  >z = pDest->zMal
14fb0 6c 6f 63 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  loc;.      }.   
14fc0 20 20 20 6d 65 6d 63 70 79 28 70 44 65 73 74 2d     memcpy(pDest-
14fd0 3e 7a 2c 20 7a 44 61 74 61 2c 20 6c 65 6e 29 3b  >z, zData, len);
14fe0 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 7a 5b  .      pDest->z[
14ff0 6c 65 6e 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20  len] = 0;.      
15000 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 2b 31 5d 20  pDest->z[len+1] 
15010 3d 20 30 3b 0a 20 20 20 20 20 20 70 44 65 73 74  = 0;.      pDest
15020 2d 3e 66 6c 61 67 73 20 3d 20 61 46 6c 61 67 5b  ->flags = aFlag[
15030 74 26 31 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  t&1];.    }.  }e
15040 6c 73 65 7b 0a 20 20 20 20 70 44 65 73 74 2d 3e  lse{.    pDest->
15050 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
15060 20 20 20 20 2f 2a 20 54 68 69 73 20 62 72 61 6e      /* This bran
15070 63 68 20 68 61 70 70 65 6e 73 20 6f 6e 6c 79 20  ch happens only 
15080 77 68 65 6e 20 63 6f 6e 74 65 6e 74 20 69 73 20  when content is 
15090 6f 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65  on overflow page
150a0 73 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 28 70  s */.    if( ((p
150b0 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47  Op->p5 & (OPFLAG
150c0 5f 4c 45 4e 47 54 48 41 52 47 7c 4f 50 46 4c 41  _LENGTHARG|OPFLA
150d0 47 5f 54 59 50 45 4f 46 41 52 47 29 29 21 3d 30  G_TYPEOFARG))!=0
150e0 0a 20 20 20 20 20 20 20 20 20 20 26 26 20 28 28  .          && ((
150f0 74 3e 3d 31 32 20 26 26 20 28 74 26 31 29 3d 3d  t>=12 && (t&1)==
15100 30 29 20 7c 7c 20 28 70 4f 70 2d 3e 70 35 20 26  0) || (pOp->p5 &
15110 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
15120 47 29 21 3d 30 29 29 0a 20 20 20 20 20 7c 7c 20  G)!=0)).     || 
15130 28 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64  (len = sqlite3Vd
15140 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28  beSerialTypeLen(
15150 74 29 29 3d 3d 30 0a 20 20 20 20 29 7b 0a 20 20  t))==0.    ){.  
15160 20 20 20 20 2f 2a 20 43 6f 6e 74 65 6e 74 20 69      /* Content i
15170 73 20 69 72 72 65 6c 65 76 61 6e 74 20 66 6f 72  s irrelevant for
15180 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 31 2e 20  .      **    1. 
15190 74 68 65 20 74 79 70 65 6f 66 28 29 20 66 75 6e  the typeof() fun
151a0 63 74 69 6f 6e 2c 0a 20 20 20 20 20 20 2a 2a 20  ction,.      ** 
151b0 20 20 20 32 2e 20 74 68 65 20 6c 65 6e 67 74 68     2. the length
151c0 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 66 20  (X) function if 
151d0 58 20 69 73 20 61 20 62 6c 6f 62 2c 20 61 6e 64  X is a blob, and
151e0 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 33 2e 20  .      **    3. 
151f0 69 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6c  if the content l
15200 65 6e 67 74 68 20 69 73 20 7a 65 72 6f 2e 0a 20  ength is zero.. 
15210 20 20 20 20 20 2a 2a 20 53 6f 20 77 65 20 6d 69       ** So we mi
15220 67 68 74 20 61 73 20 77 65 6c 6c 20 75 73 65 20  ght as well use 
15230 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74 20 72 61  bogus content ra
15240 74 68 65 72 20 74 68 61 6e 20 72 65 61 64 69 6e  ther than readin
15250 67 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e 74 65  g.      ** conte
15260 6e 74 20 66 72 6f 6d 20 64 69 73 6b 2e 20 0a 20  nt from disk. . 
15270 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a       **.      **
15280 20 41 6c 74 68 6f 75 67 68 20 73 71 6c 69 74 65   Although sqlite
15290 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 29  3VdbeSerialGet()
152a0 20 6d 61 79 20 72 65 61 64 20 61 74 20 6d 6f 73   may read at mos
152b0 74 20 38 20 62 79 74 65 73 20 66 72 6f 6d 20 74  t 8 bytes from t
152c0 68 65 0a 20 20 20 20 20 20 2a 2a 20 62 75 66 66  he.      ** buff
152d0 65 72 20 70 61 73 73 65 64 20 74 6f 20 69 74 2c  er passed to it,
152e0 20 64 65 62 75 67 67 69 6e 67 20 66 75 6e 63 74   debugging funct
152f0 69 6f 6e 20 56 64 62 65 4d 65 6d 50 72 65 74 74  ion VdbeMemPrett
15300 79 50 72 69 6e 74 28 29 20 6d 61 79 0a 20 20 20  yPrint() may.   
15310 20 20 20 2a 2a 20 72 65 61 64 20 75 70 20 74 6f     ** read up to
15320 20 31 36 2e 20 53 6f 20 31 36 20 62 79 74 65 73   16. So 16 bytes
15330 20 6f 66 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e   of bogus conten
15340 74 20 69 73 20 73 75 70 70 6c 69 65 64 2e 0a 20  t is supplied.. 
15350 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 74       */.      st
15360 61 74 69 63 20 75 38 20 61 5a 65 72 6f 5b 31 36  atic u8 aZero[16
15370 5d 3b 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74  ];  /* This is t
15380 68 65 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74  he bogus content
15390 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65   */.      sqlite
153a0 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 61  3VdbeSerialGet(a
153b0 5a 65 72 6f 2c 20 74 2c 20 70 44 65 73 74 29 3b  Zero, t, pDest);
153c0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
153d0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
153e0 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70  beMemFromBtree(p
153f0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 61  C->uc.pCursor, a
15400 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c  Offset[p2], len,
15410 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 69   pDest);.      i
15420 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
15430 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
15440 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
15450 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72    sqlite3VdbeSer
15460 69 61 6c 47 65 74 28 28 63 6f 6e 73 74 20 75 38  ialGet((const u8
15470 2a 29 70 44 65 73 74 2d 3e 7a 2c 20 74 2c 20 70  *)pDest->z, t, p
15480 44 65 73 74 29 3b 0a 20 20 20 20 20 20 70 44 65  Dest);.      pDe
15490 73 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45  st->flags &= ~ME
154a0 4d 5f 45 70 68 65 6d 3b 0a 20 20 20 20 7d 0a 20  M_Ephem;.    }. 
154b0 20 7d 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75   }..op_column_ou
154c0 74 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  t:.  UPDATE_MAX_
154d0 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b  BLOBSIZE(pDest);
154e0 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
154f0 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74  E(pOp->p3, pDest
15500 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
15510 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e 69  * Opcode: Affini
15520 74 79 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  ty P1 P2 * P4 *.
15530 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 66 66  ** Synopsis: aff
15540 69 6e 69 74 79 28 72 5b 50 31 40 50 32 5d 29 0a  inity(r[P1@P2]).
15550 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66 69  **.** Apply affi
15560 6e 69 74 69 65 73 20 74 6f 20 61 20 72 61 6e 67  nities to a rang
15570 65 20 6f 66 20 50 32 20 72 65 67 69 73 74 65 72  e of P2 register
15580 73 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20  s starting with 
15590 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  P1..**.** P4 is 
155a0 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73  a string that is
155b0 20 50 32 20 63 68 61 72 61 63 74 65 72 73 20 6c   P2 characters l
155c0 6f 6e 67 2e 20 54 68 65 20 4e 2d 74 68 20 63 68  ong. The N-th ch
155d0 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a  aracter of the.*
155e0 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74  * string indicat
155f0 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66  es the column af
15600 66 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75  finity that shou
15610 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72 20 74  ld be used for t
15620 68 65 20 4e 2d 74 68 0a 2a 2a 20 6d 65 6d 6f 72  he N-th.** memor
15630 79 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 72 61  y cell in the ra
15640 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  nge..*/.case OP_
15650 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20 63 6f  Affinity: {.  co
15660 6e 73 74 20 63 68 61 72 20 2a 7a 41 66 66 69 6e  nst char *zAffin
15670 69 74 79 3b 20 20 20 2f 2a 20 54 68 65 20 61 66  ity;   /* The af
15680 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70  finity to be app
15690 6c 69 65 64 20 2a 2f 0a 0a 20 20 7a 41 66 66 69  lied */..  zAffi
156a0 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  nity = pOp->p4.z
156b0 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66  ;.  assert( zAff
156c0 69 6e 69 74 79 21 3d 30 20 29 3b 0a 20 20 61 73  inity!=0 );.  as
156d0 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
156e0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66  );.  assert( zAf
156f0 66 69 6e 69 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d  finity[pOp->p2]=
15700 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26  =0 );.  pIn1 = &
15710 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
15720 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74 28   do{.    assert(
15730 20 70 49 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d 65   pIn1 <= &p->aMe
15740 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  m[(p->nMem+1 - p
15750 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20  ->nCursor)] );. 
15760 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
15770 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20  Valid(pIn1) );. 
15780 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
15790 28 70 49 6e 31 2c 20 2a 28 7a 41 66 66 69 6e 69  (pIn1, *(zAffini
157a0 74 79 2b 2b 29 2c 20 65 6e 63 6f 64 69 6e 67 29  ty++), encoding)
157b0 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20  ;.    pIn1++;.  
157c0 7d 77 68 69 6c 65 28 20 7a 41 66 66 69 6e 69 74  }while( zAffinit
157d0 79 5b 30 5d 20 29 3b 0a 20 20 62 72 65 61 6b 3b  y[0] );.  break;
157e0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .}../* Opcode: M
157f0 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50 32 20  akeRecord P1 P2 
15800 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
15810 73 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b 72 65 63  sis: r[P3]=mkrec
15820 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a  (r[P1@P2]).**.**
15830 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65 67 69   Convert P2 regi
15840 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20  sters beginning 
15850 77 69 74 68 20 50 31 20 69 6e 74 6f 20 74 68 65  with P1 into the
15860 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 5d   [record format]
15870 0a 2a 2a 20 75 73 65 20 61 73 20 61 20 64 61 74  .** use as a dat
15880 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20 64 61  a record in a da
15890 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
158a0 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e 20 61  as a key.** in a
158b0 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20 4f 50  n index.  The OP
158c0 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 63  _Column opcode c
158d0 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20 72 65  an decode the re
158e0 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a  cord later..**.*
158f0 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 73 74  * P4 may be a st
15900 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32 20  ring that is P2 
15910 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e  characters long.
15920 20 20 54 68 65 20 4e 2d 74 68 20 63 68 61 72 61    The N-th chara
15930 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73  cter of the.** s
15940 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20  tring indicates 
15950 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e  the column affin
15960 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20  ity that should 
15970 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20  be used for the 
15980 4e 2d 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66  N-th.** field of
15990 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a   the index key..
159a0 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e  **.** The mappin
159b0 67 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65 72  g from character
159c0 20 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73 20   to affinity is 
159d0 67 69 76 65 6e 20 62 79 20 74 68 65 20 53 51 4c  given by the SQL
159e0 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72  ITE_AFF_.** macr
159f0 6f 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73 71  os defined in sq
15a00 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a  liteInt.h..**.**
15a10 20 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20 74   If P4 is NULL t
15a20 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66 69  hen all index fi
15a30 65 6c 64 73 20 68 61 76 65 20 74 68 65 20 61 66  elds have the af
15a40 66 69 6e 69 74 79 20 42 4c 4f 42 2e 0a 2a 2f 0a  finity BLOB..*/.
15a50 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f  case OP_MakeReco
15a60 72 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65 77  rd: {.  u8 *zNew
15a70 52 65 63 6f 72 64 3b 20 20 20 20 20 20 20 20 2f  Record;        /
15a80 2a 20 41 20 62 75 66 66 65 72 20 74 6f 20 68 6f  * A buffer to ho
15a90 6c 64 20 74 68 65 20 64 61 74 61 20 66 6f 72 20  ld the data for 
15aa0 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a  the new record *
15ab0 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20  /.  Mem *pRec;  
15ac0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
15ad0 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a  e new record */.
15ae0 20 20 75 36 34 20 6e 44 61 74 61 3b 20 20 20 20    u64 nData;    
15af0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
15b00 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64  er of bytes of d
15b10 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  ata space */.  i
15b20 6e 74 20 6e 48 64 72 3b 20 20 20 20 20 20 20 20  nt nHdr;        
15b30 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
15b40 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64  of bytes of head
15b50 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 36  er space */.  i6
15b60 34 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20  4 nByte;        
15b70 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61       /* Data spa
15b80 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ce required for 
15b90 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20  this record */. 
15ba0 20 69 36 34 20 6e 5a 65 72 6f 3b 20 20 20 20 20   i64 nZero;     
15bb0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
15bc0 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20  r of zero bytes 
15bd0 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
15be0 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
15bf0 74 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20 20  t nVarint;      
15c00 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
15c10 66 20 62 79 74 65 73 20 69 6e 20 61 20 76 61 72  f bytes in a var
15c20 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65 72  int */.  u32 ser
15c30 69 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20 20  ial_type;       
15c40 2f 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a 2f  /* Type field */
15c50 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20  .  Mem *pData0; 
15c60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
15c70 73 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20 63  st field to be c
15c80 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68 65  ombined into the
15c90 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d   record */.  Mem
15ca0 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20   *pLast;        
15cb0 20 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c      /* Last fiel
15cc0 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  d of the record 
15cd0 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b  */.  int nField;
15ce0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
15cf0 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
15d00 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  in the record */
15d10 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69  .  char *zAffini
15d20 74 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ty;       /* The
15d30 20 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e 67   affinity string
15d40 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
15d50 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f  */.  int file_fo
15d60 72 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20 46  rmat;       /* F
15d70 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73  ile format to us
15d80 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a  e for encoding *
15d90 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  /.  int i;      
15da0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70             /* Sp
15db0 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77  ace used in zNew
15dc0 52 65 63 6f 72 64 5b 5d 20 68 65 61 64 65 72 20  Record[] header 
15dd0 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20  */.  int j;     
15de0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
15df0 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65  pace used in zNe
15e00 77 52 65 63 6f 72 64 5b 5d 20 63 6f 6e 74 65 6e  wRecord[] conten
15e10 74 20 2a 2f 0a 20 20 75 33 32 20 6c 65 6e 3b 20  t */.  u32 len; 
15e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
15e30 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69 65   Length of a fie
15e40 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75  ld */..  /* Assu
15e50 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20  ming the record 
15e60 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64  contains N field
15e70 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f  s, the record fo
15e80 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20  rmat looks.  ** 
15e90 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a  like this:.  **.
15ea0 20 20 2a 2a 20 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 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20  -------------.  
15ef0 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20  ** | hdr-size | 
15f00 74 79 70 65 20 30 20 7c 20 74 79 70 65 20 31 20  type 0 | type 1 
15f10 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31  | ... | type N-1
15f20 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c   | data0 | ... |
15f30 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a   data N-1 | .  *
15f40 2a 20 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 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a  ----------.  **.
15f90 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20    ** Data(0) is 
15fa0 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
15fb0 74 65 72 20 50 31 2e 20 20 44 61 74 61 28 31 29  ter P1.  Data(1)
15fc0 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69   comes from regi
15fd0 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61  ster P1+1.  ** a
15fe0 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a  nd so forth..  *
15ff0 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65  *.  ** Each type
16000 20 66 69 65 6c 64 20 69 73 20 61 20 76 61 72 69   field is a vari
16010 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  nt representing 
16020 74 68 65 20 73 65 72 69 61 6c 20 74 79 70 65 20  the serial type 
16030 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72  of the .  ** cor
16040 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20  responding data 
16050 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c  element (see sql
16060 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
16070 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20  pe()). The.  ** 
16080 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69  hdr-size field i
16090 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20  s also a varint 
160a0 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66 66  which is the off
160b0 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67  set from the beg
160c0 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74  inning.  ** of t
160d0 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74  he record to dat
160e0 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61  a0..  */.  nData
160f0 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
16100 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
16110 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a   of data space *
16120 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20 20  /.  nHdr = 0;   
16130 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
16140 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61   of bytes of hea
16150 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e  der space */.  n
16160 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20  Zero = 0;       
16170 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a    /* Number of z
16180 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65  ero bytes at the
16190 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f   end of the reco
161a0 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d  rd */.  nField =
161b0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66   pOp->p1;.  zAff
161c0 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e  inity = pOp->p4.
161d0 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69  z;.  assert( nFi
161e0 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  eld>0 && pOp->p2
161f0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46  >0 && pOp->p2+nF
16200 69 65 6c 64 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ield<=(p->nMem+1
16210 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31   - p->nCursor)+1
16220 20 29 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26   );.  pData0 = &
16230 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20  aMem[nField];.  
16240 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32  nField = pOp->p2
16250 3b 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61  ;.  pLast = &pDa
16260 74 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20  ta0[nField-1];. 
16270 20 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70   file_format = p
16280 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
16290 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e  rmat;..  /* Iden
162a0 74 69 66 79 20 74 68 65 20 6f 75 74 70 75 74 20  tify the output 
162b0 72 65 67 69 73 74 65 72 20 2a 2f 0a 20 20 61 73  register */.  as
162c0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f  sert( pOp->p3<pO
162d0 70 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33  p->p1 || pOp->p3
162e0 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70  >=pOp->p1+pOp->p
162f0 32 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  2 );.  pOut = &a
16300 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
16310 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
16320 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a  (p, pOut);..  /*
16330 20 41 70 70 6c 79 20 74 68 65 20 72 65 71 75 65   Apply the reque
16340 73 74 65 64 20 61 66 66 69 6e 69 74 79 20 74 6f  sted affinity to
16350 20 61 6c 6c 20 69 6e 70 75 74 73 0a 20 20 2a 2f   all inputs.  */
16360 0a 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61  .  assert( pData
16370 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 69 66  0<=pLast );.  if
16380 28 20 7a 41 66 66 69 6e 69 74 79 20 29 7b 0a 20  ( zAffinity ){. 
16390 20 20 20 70 52 65 63 20 3d 20 70 44 61 74 61 30     pRec = pData0
163a0 3b 0a 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20  ;.    do{.      
163b0 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 52  applyAffinity(pR
163c0 65 63 2b 2b 2c 20 2a 28 7a 41 66 66 69 6e 69 74  ec++, *(zAffinit
163d0 79 2b 2b 29 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  y++), encoding);
163e0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 7a  .      assert( z
163f0 41 66 66 69 6e 69 74 79 5b 30 5d 3d 3d 30 20 7c  Affinity[0]==0 |
16400 7c 20 70 52 65 63 3c 3d 70 4c 61 73 74 20 29 3b  | pRec<=pLast );
16410 0a 20 20 20 20 7d 77 68 69 6c 65 28 20 7a 41 66  .    }while( zAf
16420 66 69 6e 69 74 79 5b 30 5d 20 29 3b 0a 20 20 7d  finity[0] );.  }
16430 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
16440 45 4e 41 42 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d  ENABLE_NULL_TRIM
16450 0a 20 20 2f 2a 20 4e 55 4c 4c 73 20 63 61 6e 20  .  /* NULLs can 
16460 62 65 20 73 61 66 65 6c 79 20 74 72 69 6d 6d 65  be safely trimme
16470 64 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 6f  d from the end o
16480 66 20 74 68 65 20 72 65 63 6f 72 64 2c 20 61 73  f the record, as
16490 20 6c 6f 6e 67 20 61 73 0a 20 20 2a 2a 20 61 73   long as.  ** as
164a0 20 74 68 65 20 73 63 68 65 6d 61 20 66 6f 72 6d   the schema form
164b0 61 74 20 69 73 20 32 20 6f 72 20 6d 6f 72 65 20  at is 2 or more 
164c0 61 6e 64 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20  and none of the 
164d0 6f 6d 69 74 74 65 64 20 63 6f 6c 75 6d 6e 73 0a  omitted columns.
164e0 20 20 2a 2a 20 68 61 76 65 20 61 20 6e 6f 6e 2d    ** have a non-
164f0 4e 55 4c 4c 20 64 65 66 61 75 6c 74 20 76 61 6c  NULL default val
16500 75 65 2e 20 20 41 6c 73 6f 2c 20 74 68 65 20 72  ue.  Also, the r
16510 65 63 6f 72 64 20 6d 75 73 74 20 62 65 20 6c 65  ecord must be le
16520 66 74 20 77 69 74 68 0a 20 20 2a 2a 20 61 74 20  ft with.  ** at 
16530 6c 65 61 73 74 20 6f 6e 65 20 66 69 65 6c 64 2e  least one field.
16540 20 20 49 66 20 50 35 3e 30 20 74 68 65 6e 20 69    If P5>0 then i
16550 74 20 77 69 6c 6c 20 62 65 20 6f 6e 65 20 6d 6f  t will be one mo
16560 72 65 20 74 68 61 6e 20 74 68 65 0a 20 20 2a 2a  re than the.  **
16570 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 72 69   index of the ri
16580 67 68 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20  ght-most column 
16590 77 69 74 68 20 61 20 6e 6f 6e 2d 4e 55 4c 4c 20  with a non-NULL 
165a0 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 2a 2f  default value */
165b0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29  .  if( pOp->p5 )
165c0 7b 0a 20 20 20 20 77 68 69 6c 65 28 20 28 70 4c  {.    while( (pL
165d0 61 73 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ast->flags & MEM
165e0 5f 4e 75 6c 6c 29 21 3d 30 20 26 26 20 6e 46 69  _Null)!=0 && nFi
165f0 65 6c 64 3e 70 4f 70 2d 3e 70 35 20 29 7b 0a 20  eld>pOp->p5 ){. 
16600 20 20 20 20 20 70 4c 61 73 74 2d 2d 3b 0a 20 20       pLast--;.  
16610 20 20 20 20 6e 46 69 65 6c 64 2d 2d 3b 0a 20 20      nField--;.  
16620 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a    }.  }.#endif..
16630 20 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f 75 67    /* Loop throug
16640 68 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 74  h the elements t
16650 68 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20 75 70  hat will make up
16660 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 66   the record to f
16670 69 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74 20 68  igure.  ** out h
16680 6f 77 20 6d 75 63 68 20 73 70 61 63 65 20 69 73  ow much space is
16690 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68   required for th
166a0 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 0a 20 20  e new record..  
166b0 2a 2f 0a 20 20 70 52 65 63 20 3d 20 70 4c 61 73  */.  pRec = pLas
166c0 74 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73  t;.  do{.    ass
166d0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
166e0 70 52 65 63 29 20 29 3b 0a 20 20 20 20 70 52 65  pRec) );.    pRe
166f0 63 2d 3e 75 54 65 6d 70 20 3d 20 73 65 72 69 61  c->uTemp = seria
16700 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33  l_type = sqlite3
16710 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 70  VdbeSerialType(p
16720 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74  Rec, file_format
16730 2c 20 26 6c 65 6e 29 3b 0a 20 20 20 20 69 66 28  , &len);.    if(
16740 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d   pRec->flags & M
16750 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20  EM_Zero ){.     
16760 20 69 66 28 20 6e 44 61 74 61 20 29 7b 0a 20 20   if( nData ){.  
16770 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
16780 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c  3VdbeMemExpandBl
16790 6f 62 28 70 52 65 63 29 20 29 20 67 6f 74 6f 20  ob(pRec) ) goto 
167a0 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65  no_mem;.      }e
167b0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 6e 5a 65  lse{.        nZe
167c0 72 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a  ro += pRec->u.nZ
167d0 65 72 6f 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e  ero;.        len
167e0 20 2d 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72   -= pRec->u.nZer
167f0 6f 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  o;.      }.    }
16800 0a 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65  .    nData += le
16810 6e 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28  n;.    testcase(
16820 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32   serial_type==12
16830 37 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73  7 );.    testcas
16840 65 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d  e( serial_type==
16850 31 32 38 20 29 3b 0a 20 20 20 20 6e 48 64 72 20  128 );.    nHdr 
16860 2b 3d 20 73 65 72 69 61 6c 5f 74 79 70 65 3c 3d  += serial_type<=
16870 31 32 37 20 3f 20 31 20 3a 20 73 71 6c 69 74 65  127 ? 1 : sqlite
16880 33 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61  3VarintLen(seria
16890 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 69 66 28  l_type);.    if(
168a0 20 70 52 65 63 3d 3d 70 44 61 74 61 30 20 29 20   pRec==pData0 ) 
168b0 62 72 65 61 6b 3b 0a 20 20 20 20 70 52 65 63 2d  break;.    pRec-
168c0 2d 3b 0a 20 20 7d 77 68 69 6c 65 28 31 29 3b 0a  -;.  }while(1);.
168d0 0a 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f  .  /* EVIDENCE-O
168e0 46 3a 20 52 2d 32 32 35 36 34 2d 31 31 36 34 37  F: R-22564-11647
168f0 20 54 68 65 20 68 65 61 64 65 72 20 62 65 67 69   The header begi
16900 6e 73 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65  ns with a single
16910 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 77 68 69   varint.  ** whi
16920 63 68 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68  ch determines th
16930 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
16940 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 68  f bytes in the h
16950 65 61 64 65 72 2e 20 54 68 65 20 76 61 72 69 6e  eader. The varin
16960 74 0a 20 20 2a 2a 20 76 61 6c 75 65 20 69 73 20  t.  ** value is 
16970 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
16980 68 65 61 64 65 72 20 69 6e 20 62 79 74 65 73 20  header in bytes 
16990 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 73 69  including the si
169a0 7a 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 69  ze varint.  ** i
169b0 74 73 65 6c 66 2e 20 2a 2f 0a 20 20 74 65 73 74  tself. */.  test
169c0 63 61 73 65 28 20 6e 48 64 72 3d 3d 31 32 36 20  case( nHdr==126 
169d0 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e  );.  testcase( n
169e0 48 64 72 3d 3d 31 32 37 20 29 3b 0a 20 20 69 66  Hdr==127 );.  if
169f0 28 20 6e 48 64 72 3c 3d 31 32 36 20 29 7b 0a 20  ( nHdr<=126 ){. 
16a00 20 20 20 2f 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e     /* The common
16a10 20 63 61 73 65 20 2a 2f 0a 20 20 20 20 6e 48 64   case */.    nHd
16a20 72 20 2b 3d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b  r += 1;.  }else{
16a30 0a 20 20 20 20 2f 2a 20 52 61 72 65 20 63 61 73  .    /* Rare cas
16a40 65 20 6f 66 20 61 20 72 65 61 6c 6c 79 20 6c 61  e of a really la
16a50 72 67 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20  rge header */.  
16a60 20 20 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c 69    nVarint = sqli
16a70 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64  te3VarintLen(nHd
16a80 72 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20  r);.    nHdr += 
16a90 6e 56 61 72 69 6e 74 3b 0a 20 20 20 20 69 66 28  nVarint;.    if(
16aa0 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74 65 33   nVarint<sqlite3
16ab0 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20  VarintLen(nHdr) 
16ac0 29 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20  ) nHdr++;.  }.  
16ad0 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61  nByte = nHdr+nDa
16ae0 74 61 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 2b  ta;.  if( nByte+
16af0 6e 5a 65 72 6f 3e 64 62 2d 3e 61 4c 69 6d 69 74  nZero>db->aLimit
16b00 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
16b10 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
16b20 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a  o too_big;.  }..
16b30 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74    /* Make sure t
16b40 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74  he output regist
16b50 65 72 20 68 61 73 20 61 20 62 75 66 66 65 72 20  er has a buffer 
16b60 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20  large enough to 
16b70 73 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65 20  store .  ** the 
16b80 6e 65 77 20 72 65 63 6f 72 64 2e 20 54 68 65 20  new record. The 
16b90 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20  output register 
16ba0 28 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74  (pOp->p3) is not
16bb0 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a   allowed to.  **
16bc0 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 69   be one of the i
16bd0 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20 28  nput registers (
16be0 62 65 63 61 75 73 65 20 74 68 65 20 66 6f 6c 6c  because the foll
16bf0 6f 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20  owing call to.  
16c00 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  ** sqlite3VdbeMe
16c10 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28  mClearAndResize(
16c20 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72 20  ) could clobber 
16c30 74 68 65 20 76 61 6c 75 65 20 62 65 66 6f 72 65  the value before
16c40 20 69 74 20 69 73 20 75 73 65 64 29 2e 0a 20 20   it is used)..  
16c50 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  */.  if( sqlite3
16c60 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52  VdbeMemClearAndR
16c70 65 73 69 7a 65 28 70 4f 75 74 2c 20 28 69 6e 74  esize(pOut, (int
16c80 29 6e 42 79 74 65 29 20 29 7b 0a 20 20 20 20 67  )nByte) ){.    g
16c90 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
16ca0 20 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20 28    zNewRecord = (
16cb0 75 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20  u8 *)pOut->z;.. 
16cc0 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20 72 65   /* Write the re
16cd0 63 6f 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75  cord */.  i = pu
16ce0 74 56 61 72 69 6e 74 33 32 28 7a 4e 65 77 52 65  tVarint32(zNewRe
16cf0 63 6f 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20 6a  cord, nHdr);.  j
16d00 20 3d 20 6e 48 64 72 3b 0a 20 20 61 73 73 65 72   = nHdr;.  asser
16d10 74 28 20 70 44 61 74 61 30 3c 3d 70 4c 61 73 74  t( pData0<=pLast
16d20 20 29 3b 0a 20 20 70 52 65 63 20 3d 20 70 44 61   );.  pRec = pDa
16d30 74 61 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 73  ta0;.  do{.    s
16d40 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 70 52 65  erial_type = pRe
16d50 63 2d 3e 75 54 65 6d 70 3b 0a 20 20 20 20 2f 2a  c->uTemp;.    /*
16d60 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
16d70 30 36 35 32 39 2d 34 37 33 36 32 20 46 6f 6c 6c  06529-47362 Foll
16d80 6f 77 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76  owing the size v
16d90 61 72 69 6e 74 20 61 72 65 20 6f 6e 65 20 6f 72  arint are one or
16da0 20 6d 6f 72 65 0a 20 20 20 20 2a 2a 20 61 64 64   more.    ** add
16db0 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73 2c  itional varints,
16dc0 20 6f 6e 65 20 70 65 72 20 63 6f 6c 75 6d 6e 2e   one per column.
16dd0 20 2a 2f 0a 20 20 20 20 69 20 2b 3d 20 70 75 74   */.    i += put
16de0 56 61 72 69 6e 74 33 32 28 26 7a 4e 65 77 52 65  Varint32(&zNewRe
16df0 63 6f 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f  cord[i], serial_
16e00 74 79 70 65 29 3b 20 20 20 20 20 20 20 20 20 20  type);          
16e10 20 20 2f 2a 20 73 65 72 69 61 6c 20 74 79 70 65    /* serial type
16e20 20 2a 2f 0a 20 20 20 20 2f 2a 20 45 56 49 44 45   */.    /* EVIDE
16e30 4e 43 45 2d 4f 46 3a 20 52 2d 36 34 35 33 36 2d  NCE-OF: R-64536-
16e40 35 31 37 32 38 20 54 68 65 20 76 61 6c 75 65 73  51728 The values
16e50 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
16e60 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 0a 20   in the record. 
16e70 20 20 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c     ** immediatel
16e80 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 68 65 61  y follow the hea
16e90 64 65 72 2e 20 2a 2f 0a 20 20 20 20 6a 20 2b 3d  der. */.    j +=
16ea0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
16eb0 61 6c 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72  alPut(&zNewRecor
16ec0 64 5b 6a 5d 2c 20 70 52 65 63 2c 20 73 65 72 69  d[j], pRec, seri
16ed0 61 6c 5f 74 79 70 65 29 3b 20 2f 2a 20 63 6f 6e  al_type); /* con
16ee0 74 65 6e 74 20 2a 2f 0a 20 20 7d 77 68 69 6c 65  tent */.  }while
16ef0 28 20 28 2b 2b 70 52 65 63 29 3c 3d 70 4c 61 73  ( (++pRec)<=pLas
16f00 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  t );.  assert( i
16f10 3d 3d 6e 48 64 72 20 29 3b 0a 20 20 61 73 73 65  ==nHdr );.  asse
16f20 72 74 28 20 6a 3d 3d 6e 42 79 74 65 20 29 3b 0a  rt( j==nByte );.
16f30 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
16f40 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
16f50 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
16f60 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
16f70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42  Out->n = (int)nB
16f80 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  yte;.  pOut->fla
16f90 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 3b 0a 20  gs = MEM_Blob;. 
16fa0 20 69 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20   if( nZero ){.  
16fb0 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20    pOut->u.nZero 
16fc0 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75  = nZero;.    pOu
16fd0 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f  t->flags |= MEM_
16fe0 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 52 45 47 49  Zero;.  }.  REGI
16ff0 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
17000 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44  p3, pOut);.  UPD
17010 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
17020 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
17030 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
17040 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  ount P1 P2 * * *
17050 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
17060 50 32 5d 3d 63 6f 75 6e 74 28 29 0a 2a 2a 0a 2a  P2]=count().**.*
17070 2a 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62  * Store the numb
17080 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61  er of entries (a
17090 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29  n integer value)
170a0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   in the table or
170b0 20 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65   index .** opene
170c0 64 20 62 79 20 63 75 72 73 6f 72 20 50 31 20 69  d by cursor P1 i
170d0 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f  n register P2.*/
170e0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
170f0 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a  OMIT_BTREECOUNT.
17100 63 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b  case OP_Count: {
17110 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
17120 20 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72 79   */.  i64 nEntry
17130 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
17140 72 73 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  rsr;..  assert( 
17150 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
17160 5d 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  ]->eCurType==CUR
17170 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
17180 70 43 72 73 72 20 3d 20 70 2d 3e 61 70 43 73 72  pCrsr = p->apCsr
17190 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 75 63 2e 70 43  [pOp->p1]->uc.pC
171a0 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28  ursor;.  assert(
171b0 20 70 43 72 73 72 20 29 3b 0a 20 20 6e 45 6e 74   pCrsr );.  nEnt
171c0 72 79 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  ry = 0;  /* Not 
171d0 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73  needed.  Only us
171e0 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20  ed to silence a 
171f0 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63  warning. */.  rc
17200 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
17210 6f 75 6e 74 28 70 43 72 73 72 2c 20 26 6e 45 6e  ount(pCrsr, &nEn
17220 74 72 79 29 3b 0a 20 20 69 66 28 20 72 63 20 29  try);.  if( rc )
17230 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
17240 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 4f 75 74  to_error;.  pOut
17250 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
17260 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75  e(p, pOp);.  pOu
17270 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b  t->u.i = nEntry;
17280 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
17290 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  if../* Opcode: S
172a0 61 76 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20  avepoint P1 * * 
172b0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c  P4 *.**.** Open,
172c0 20 72 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c   release or roll
172d0 62 61 63 6b 20 74 68 65 20 73 61 76 65 70 6f 69  back the savepoi
172e0 6e 74 20 6e 61 6d 65 64 20 62 79 20 70 61 72 61  nt named by para
172f0 6d 65 74 65 72 20 50 34 2c 20 64 65 70 65 6e 64  meter P4, depend
17300 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61  ing.** on the va
17310 6c 75 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70  lue of P1. To op
17320 65 6e 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69  en a new savepoi
17330 6e 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65  nt, P1==0. To re
17340 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61  lease (commit) a
17350 6e 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20 73 61  n.** existing sa
17360 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20  vepoint, P1==1, 
17370 6f 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61  or to rollback a
17380 6e 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70  n existing savep
17390 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63  oint P1==2..*/.c
173a0 61 73 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74  ase OP_Savepoint
173b0 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20 20  : {.  int p1;   
173c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173d0 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f        /* Value o
173e0 66 20 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  f P1 operand */.
173f0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
17400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17410 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76    /* Name of sav
17420 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20  epoint */.  int 
17430 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69  nName;.  Savepoi
17440 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65  nt *pNew;.  Save
17450 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e  point *pSavepoin
17460 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  t;.  Savepoint *
17470 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61 76  pTmp;.  int iSav
17480 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69  epoint;.  int ii
17490 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70  ;..  p1 = pOp->p
174a0 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70  1;.  zName = pOp
174b0 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73  ->p4.z;..  /* As
174c0 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70 31  sert that the p1
174d0 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 76 61   parameter is va
174e0 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61 74 20 69  lid. Also that i
174f0 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70  f there is no op
17500 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74  en.  ** transact
17510 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72 65 20  ion, then there 
17520 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73 61  cannot be any sa
17530 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a  vepoints. .  */.
17540 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53    assert( db->pS
17550 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64  avepoint==0 || d
17560 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  b->autoCommit==0
17570 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31   );.  assert( p1
17580 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49  ==SAVEPOINT_BEGI
17590 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  N||p1==SAVEPOINT
175a0 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41  _RELEASE||p1==SA
175b0 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b  VEPOINT_ROLLBACK
175c0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62   );.  assert( db
175d0 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20  ->pSavepoint || 
175e0 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f  db->isTransactio
175f0 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b  nSavepoint==0 );
17600 0a 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b  .  assert( check
17610 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64  SavepointCount(d
17620 62 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  b) );.  assert( 
17630 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
17640 0a 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50  .  if( p1==SAVEP
17650 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20  OINT_BEGIN ){.  
17660 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57    if( db->nVdbeW
17670 72 69 74 65 3e 30 20 29 7b 0a 20 20 20 20 20 20  rite>0 ){.      
17680 2f 2a 20 41 20 6e 65 77 20 73 61 76 65 70 6f 69  /* A new savepoi
17690 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 72 65  nt cannot be cre
176a0 61 74 65 64 20 69 66 20 74 68 65 72 65 20 61 72  ated if there ar
176b0 65 20 61 63 74 69 76 65 20 77 72 69 74 65 20 0a  e active write .
176c0 20 20 20 20 20 20 2a 2a 20 73 74 61 74 65 6d 65        ** stateme
176d0 6e 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72  nts (i.e. open r
176e0 65 61 64 2f 77 72 69 74 65 20 69 6e 63 72 65 6d  ead/write increm
176f0 65 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c  ental blob handl
17700 65 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  es)..      */.  
17710 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
17720 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20  rror(p, "cannot 
17730 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d  open savepoint -
17740 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
17750 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20  in progress");. 
17760 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
17770 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65  _BUSY;.    }else
17780 7b 0a 20 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20  {.      nName = 
17790 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
177a0 7a 4e 61 6d 65 29 3b 0a 0a 23 69 66 6e 64 65 66  zName);..#ifndef
177b0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
177c0 54 55 41 4c 54 41 42 4c 45 0a 20 20 20 20 20 20  TUALTABLE.      
177d0 2f 2a 20 54 68 69 73 20 63 61 6c 6c 20 69 73 20  /* This call is 
177e0 4f 6b 20 65 76 65 6e 20 69 66 20 74 68 69 73 20  Ok even if this 
177f0 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61 63 74  savepoint is act
17800 75 61 6c 6c 79 20 61 20 74 72 61 6e 73 61 63 74  ually a transact
17810 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 73 61 76  ion.      ** sav
17820 65 70 6f 69 6e 74 20 28 61 6e 64 20 74 68 65 72  epoint (and ther
17830 65 66 6f 72 65 20 73 68 6f 75 6c 64 20 6e 6f 74  efore should not
17840 20 70 72 6f 6d 70 74 20 78 53 61 76 65 70 6f 69   prompt xSavepoi
17850 6e 74 28 29 29 20 63 61 6c 6c 62 61 63 6b 73 2e  nt()) callbacks.
17860 0a 20 20 20 20 20 20 2a 2a 20 49 66 20 74 68 69  .      ** If thi
17870 73 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69  s is a transacti
17880 6f 6e 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69  on savepoint bei
17890 6e 67 20 6f 70 65 6e 65 64 2c 20 69 74 20 69 73  ng opened, it is
178a0 20 67 75 61 72 61 6e 74 65 65 64 0a 20 20 20 20   guaranteed.    
178b0 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20 64 62    ** that the db
178c0 2d 3e 61 56 54 72 61 6e 73 5b 5d 20 61 72 72 61  ->aVTrans[] arra
178d0 79 20 69 73 20 65 6d 70 74 79 2e 20 20 2a 2f 0a  y is empty.  */.
178e0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62        assert( db
178f0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  ->autoCommit==0 
17900 7c 7c 20 64 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d  || db->nVTrans==
17910 30 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  0 );.      rc = 
17920 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70  sqlite3VtabSavep
17930 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49  oint(db, SAVEPOI
17940 4e 54 5f 42 45 47 49 4e 2c 0a 20 20 20 20 20 20  NT_BEGIN,.      
17950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17960 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53            db->nS
17970 74 61 74 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61  tatement+db->nSa
17980 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20  vepoint);.      
17990 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
179a0 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
179b0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e  ue_to_error;.#en
179c0 64 69 66 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72  dif..      /* Cr
179d0 65 61 74 65 20 61 20 6e 65 77 20 73 61 76 65 70  eate a new savep
179e0 6f 69 6e 74 20 73 74 72 75 63 74 75 72 65 2e 20  oint structure. 
179f0 2a 2f 0a 20 20 20 20 20 20 70 4e 65 77 20 3d 20  */.      pNew = 
17a00 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
17a10 61 77 4e 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28  awNN(db, sizeof(
17a20 53 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65  Savepoint)+nName
17a30 2b 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  +1);.      if( p
17a40 4e 65 77 20 29 7b 0a 20 20 20 20 20 20 20 20 70  New ){.        p
17a50 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68  New->zName = (ch
17a60 61 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20  ar *)&pNew[1];. 
17a70 20 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 4e         memcpy(pN
17a80 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65  ew->zName, zName
17a90 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20  , nName+1);.    
17aa0 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74  .        /* If t
17ab0 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20  here is no open 
17ac0 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65  transaction, the
17ad0 6e 20 6d 61 72 6b 20 74 68 69 73 20 61 73 20 61  n mark this as a
17ae0 20 73 70 65 63 69 61 6c 0a 20 20 20 20 20 20 20   special.       
17af0 20 2a 2a 20 22 74 72 61 6e 73 61 63 74 69 6f 6e   ** "transaction
17b00 20 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a   savepoint". */.
17b10 20 20 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e          if( db->
17b20 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20  autoCommit ){.  
17b30 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f          db->auto
17b40 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20  Commit = 0;.    
17b50 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e        db->isTran
17b60 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
17b70 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65   = 1;.        }e
17b80 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 64  lse{.          d
17b90 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b  b->nSavepoint++;
17ba0 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  .        }..    
17bb0 20 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68 65 20      /* Link the 
17bc0 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 69 6e  new savepoint in
17bd0 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
17be0 68 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e 20 2a  handle's list. *
17bf0 2f 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e  /.        pNew->
17c00 70 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53 61 76  pNext = db->pSav
17c10 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20  epoint;.        
17c20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d  db->pSavepoint =
17c30 20 70 4e 65 77 3b 0a 20 20 20 20 20 20 20 20 70   pNew;.        p
17c40 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f  New->nDeferredCo
17c50 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72  ns = db->nDeferr
17c60 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20  edCons;.        
17c70 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 49  pNew->nDeferredI
17c80 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65  mmCons = db->nDe
17c90 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20  ferredImmCons;. 
17ca0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
17cb0 65 6c 73 65 7b 0a 20 20 20 20 69 53 61 76 65 70  else{.    iSavep
17cc0 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f  oint = 0;..    /
17cd0 2a 20 46 69 6e 64 20 74 68 65 20 6e 61 6d 65 64  * Find the named
17ce0 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 74   savepoint. If t
17cf0 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20  here is no such 
17d00 73 61 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20  savepoint, then 
17d10 61 6e 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72 72  an.    ** an err
17d20 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64 20 74  or is returned t
17d30 6f 20 74 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a  o the user.  */.
17d40 20 20 20 20 66 6f 72 28 0a 20 20 20 20 20 20 70      for(.      p
17d50 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e  Savepoint = db->
17d60 70 53 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20  pSavepoint; .   
17d70 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 26 26     pSavepoint &&
17d80 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
17d90 70 53 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d  pSavepoint->zNam
17da0 65 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20  e, zName);.     
17db0 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53   pSavepoint = pS
17dc0 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a  avepoint->pNext.
17dd0 20 20 20 20 29 7b 0a 20 20 20 20 20 20 69 53 61      ){.      iSa
17de0 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d  vepoint++;.    }
17df0 0a 20 20 20 20 69 66 28 20 21 70 53 61 76 65 70  .    if( !pSavep
17e00 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71  oint ){.      sq
17e10 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
17e20 2c 20 22 6e 6f 20 73 75 63 68 20 73 61 76 65 70  , "no such savep
17e30 6f 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61 6d 65  oint: %s", zName
17e40 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  );.      rc = SQ
17e50 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
17e60 7d 65 6c 73 65 20 69 66 28 20 64 62 2d 3e 6e 56  }else if( db->nV
17e70 64 62 65 57 72 69 74 65 3e 30 20 26 26 20 70 31  dbeWrite>0 && p1
17e80 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  ==SAVEPOINT_RELE
17e90 41 53 45 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  ASE ){.      /* 
17ea0 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62  It is not possib
17eb0 6c 65 20 74 6f 20 72 65 6c 65 61 73 65 20 28 63  le to release (c
17ec0 6f 6d 6d 69 74 29 20 61 20 73 61 76 65 70 6f 69  ommit) a savepoi
17ed0 6e 74 20 69 66 20 74 68 65 72 65 20 61 72 65 20  nt if there are 
17ee0 0a 20 20 20 20 20 20 2a 2a 20 61 63 74 69 76 65  .      ** active
17ef0 20 77 72 69 74 65 20 73 74 61 74 65 6d 65 6e 74   write statement
17f00 73 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  s..      */.    
17f10 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
17f20 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 72 65  or(p, "cannot re
17f30 6c 65 61 73 65 20 73 61 76 65 70 6f 69 6e 74 20  lease savepoint 
17f40 2d 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  - ".            
17f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53                "S
17f60 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  QL statements in
17f70 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20   progress");.   
17f80 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42     rc = SQLITE_B
17f90 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  USY;.    }else{.
17fa0 0a 20 20 20 20 20 20 2f 2a 20 44 65 74 65 72 6d  .      /* Determ
17fb0 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ine whether or n
17fc0 6f 74 20 74 68 69 73 20 69 73 20 61 20 74 72 61  ot this is a tra
17fd0 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
17fe0 6e 74 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20 20  nt. If so,.     
17ff0 20 2a 2a 20 61 6e 64 20 74 68 69 73 20 69 73 20   ** and this is 
18000 61 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  a RELEASE comman
18010 64 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72 72  d, then the curr
18020 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
18030 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d  .      ** is com
18040 6d 69 74 74 65 64 2e 20 0a 20 20 20 20 20 20 2a  mitted. .      *
18050 2f 0a 20 20 20 20 20 20 69 6e 74 20 69 73 54 72  /.      int isTr
18060 61 6e 73 61 63 74 69 6f 6e 20 3d 20 70 53 61 76  ansaction = pSav
18070 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30  epoint->pNext==0
18080 20 26 26 20 64 62 2d 3e 69 73 54 72 61 6e 73 61   && db->isTransa
18090 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a  ctionSavepoint;.
180a0 20 20 20 20 20 20 69 66 28 20 69 73 54 72 61 6e        if( isTran
180b0 73 61 63 74 69 6f 6e 20 26 26 20 70 31 3d 3d 53  saction && p1==S
180c0 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
180d0 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
180e0 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62  (rc = sqlite3Vdb
180f0 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21  eCheckFk(p, 1))!
18100 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
18110 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62          goto vdb
18120 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20  e_return;.      
18130 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e    }.        db->
18140 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a  autoCommit = 1;.
18150 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69          if( sqli
18160 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d  te3VdbeHalt(p)==
18170 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20  SQLITE_BUSY ){. 
18180 20 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d           p->pc =
18190 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
181a0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  );.          db-
181b0 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b  >autoCommit = 0;
181c0 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 72 63  .          p->rc
181d0 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42   = rc = SQLITE_B
181e0 55 53 59 3b 0a 20 20 20 20 20 20 20 20 20 20 67  USY;.          g
181f0 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
18200 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
18210 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63     db->isTransac
18220 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20  tionSavepoint = 
18230 30 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  0;.        rc = 
18240 70 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c  p->rc;.      }el
18250 73 65 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20  se{.        int 
18260 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 3b 0a  isSchemaChange;.
18270 20 20 20 20 20 20 20 20 69 53 61 76 65 70 6f 69          iSavepoi
18280 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f  nt = db->nSavepo
18290 69 6e 74 20 2d 20 69 53 61 76 65 70 6f 69 6e 74  int - iSavepoint
182a0 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66   - 1;.        if
182b0 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
182c0 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20  ROLLBACK ){.    
182d0 20 20 20 20 20 20 69 73 53 63 68 65 6d 61 43 68        isSchemaCh
182e0 61 6e 67 65 20 3d 20 28 64 62 2d 3e 6d 44 62 46  ange = (db->mDbF
182f0 6c 61 67 73 20 26 20 44 42 46 4c 41 47 5f 53 63  lags & DBFLAG_Sc
18300 68 65 6d 61 43 68 61 6e 67 65 29 21 3d 30 3b 0a  hemaChange)!=0;.
18310 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 69 69            for(ii
18320 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20  =0; ii<db->nDb; 
18330 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20  ii++){.         
18340 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
18350 74 72 65 65 54 72 69 70 41 6c 6c 43 75 72 73 6f  treeTripAllCurso
18360 72 73 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  rs(db->aDb[ii].p
18370 42 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  Bt,.            
18380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18390 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54             SQLIT
183a0 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b  E_ABORT_ROLLBACK
183b0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
183c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183d0 20 20 20 20 20 20 20 20 20 69 73 53 63 68 65 6d           isSchem
183e0 61 43 68 61 6e 67 65 3d 3d 30 29 3b 0a 20 20 20  aChange==0);.   
183f0 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21           if( rc!
18400 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
18410 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
18420 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20  rror;.          
18430 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  }.        }else{
18440 0a 20 20 20 20 20 20 20 20 20 20 69 73 53 63 68  .          isSch
18450 65 6d 61 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20  emaChange = 0;. 
18460 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
18470 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62   for(ii=0; ii<db
18480 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20  ->nDb; ii++){.  
18490 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
184a0 69 74 65 33 42 74 72 65 65 53 61 76 65 70 6f 69  ite3BtreeSavepoi
184b0 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  nt(db->aDb[ii].p
184c0 42 74 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69  Bt, p1, iSavepoi
184d0 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  nt);.          i
184e0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
184f0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
18500 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
18510 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
18520 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
18530 20 20 20 20 20 20 20 69 66 28 20 69 73 53 63 68         if( isSch
18540 65 6d 61 43 68 61 6e 67 65 20 29 7b 0a 20 20 20  emaChange ){.   
18550 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78         sqlite3Ex
18560 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
18570 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20  ements(db);.    
18580 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73        sqlite3Res
18590 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f  etAllSchemasOfCo
185a0 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20  nnection(db);.  
185b0 20 20 20 20 20 20 20 20 64 62 2d 3e 6d 44 62 46          db->mDbF
185c0 6c 61 67 73 20 7c 3d 20 44 42 46 4c 41 47 5f 53  lags |= DBFLAG_S
185d0 63 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20 20 20  chemaChange;.   
185e0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
185f0 20 0a 20 20 20 20 20 20 2f 2a 20 52 65 67 61 72   .      /* Regar
18600 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72  dless of whether
18610 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45 41   this is a RELEA
18620 53 45 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20  SE or ROLLBACK, 
18630 64 65 73 74 72 6f 79 20 61 6c 6c 20 0a 20 20 20  destroy all .   
18640 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 73     ** savepoints
18650 20 6e 65 73 74 65 64 20 69 6e 73 69 64 65 20 6f   nested inside o
18660 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  f the savepoint 
18670 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f  being operated o
18680 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 77 68 69 6c  n. */.      whil
18690 65 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e  e( db->pSavepoin
186a0 74 21 3d 70 53 61 76 65 70 6f 69 6e 74 20 29 7b  t!=pSavepoint ){
186b0 0a 20 20 20 20 20 20 20 20 70 54 6d 70 20 3d 20  .        pTmp = 
186c0 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a  db->pSavepoint;.
186d0 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76          db->pSav
186e0 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70 2d 3e 70  epoint = pTmp->p
186f0 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71  Next;.        sq
18700 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
18710 70 54 6d 70 29 3b 0a 20 20 20 20 20 20 20 20 64  pTmp);.        d
18720 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b  b->nSavepoint--;
18730 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
18740 2f 2a 20 49 66 20 69 74 20 69 73 20 61 20 52 45  /* If it is a RE
18750 4c 45 41 53 45 2c 20 74 68 65 6e 20 64 65 73 74  LEASE, then dest
18760 72 6f 79 20 74 68 65 20 73 61 76 65 70 6f 69 6e  roy the savepoin
18770 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64  t being operated
18780 20 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 74 6f   on .      ** to
18790 6f 2e 20 49 66 20 69 74 20 69 73 20 61 20 52 4f  o. If it is a RO
187a0 4c 4c 42 41 43 4b 20 54 4f 2c 20 74 68 65 6e 20  LLBACK TO, then 
187b0 73 65 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  set the number o
187c0 66 20 64 65 66 65 72 72 65 64 20 0a 20 20 20 20  f deferred .    
187d0 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20    ** constraint 
187e0 76 69 6f 6c 61 74 69 6f 6e 73 20 70 72 65 73 65  violations prese
187f0 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  nt in the databa
18800 73 65 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  se to the value 
18810 73 74 6f 72 65 64 0a 20 20 20 20 20 20 2a 2a 20  stored.      ** 
18820 77 68 65 6e 20 74 68 65 20 73 61 76 65 70 6f 69  when the savepoi
18830 6e 74 20 77 61 73 20 63 72 65 61 74 65 64 2e 20  nt was created. 
18840 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 31   */.      if( p1
18850 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  ==SAVEPOINT_RELE
18860 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20 61  ASE ){.        a
18870 73 73 65 72 74 28 20 70 53 61 76 65 70 6f 69 6e  ssert( pSavepoin
18880 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e  t==db->pSavepoin
18890 74 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  t );.        db-
188a0 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53  >pSavepoint = pS
188b0 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b  avepoint->pNext;
188c0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
188d0 44 62 46 72 65 65 28 64 62 2c 20 70 53 61 76 65  DbFree(db, pSave
188e0 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  point);.        
188f0 69 66 28 20 21 69 73 54 72 61 6e 73 61 63 74 69  if( !isTransacti
18900 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  on ){.          
18910 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d  db->nSavepoint--
18920 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
18930 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
18940 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
18950 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d  ns = pSavepoint-
18960 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a  >nDeferredCons;.
18970 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66          db->nDef
18980 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 70  erredImmCons = p
18990 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65  Savepoint->nDefe
189a0 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20  rredImmCons;.   
189b0 20 20 20 7d 0a 0a 20 20 20 20 20 20 69 66 28 20     }..      if( 
189c0 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 7c  !isTransaction |
189d0 7c 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  | p1==SAVEPOINT_
189e0 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20  ROLLBACK ){.    
189f0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
18a00 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62  VtabSavepoint(db
18a10 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74  , p1, iSavepoint
18a20 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
18a30 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
18a40 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
18a50 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
18a60 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
18a70 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
18a80 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20  due_to_error;.. 
18a90 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
18aa0 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74  code: AutoCommit
18ab0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
18ac0 0a 2a 2a 20 53 65 74 20 74 68 65 20 64 61 74 61  .** Set the data
18ad0 62 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74  base auto-commit
18ae0 20 66 6c 61 67 20 74 6f 20 50 31 20 28 31 20 6f   flag to P1 (1 o
18af0 72 20 30 29 2e 20 49 66 20 50 32 20 69 73 20 74  r 0). If P2 is t
18b00 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63  rue, roll.** bac
18b10 6b 20 61 6e 79 20 63 75 72 72 65 6e 74 6c 79 20  k any currently 
18b20 61 63 74 69 76 65 20 62 74 72 65 65 20 74 72 61  active btree tra
18b30 6e 73 61 63 74 69 6f 6e 73 2e 20 49 66 20 74 68  nsactions. If th
18b40 65 72 65 20 61 72 65 20 61 6e 79 20 61 63 74 69  ere are any acti
18b50 76 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72 74  ve.** VMs (apart
18b60 20 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c   from this one),
18b70 20 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b   then a ROLLBACK
18b80 20 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49   fails.  A COMMI
18b90 54 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68  T fails if.** th
18ba0 65 72 65 20 61 72 65 20 61 63 74 69 76 65 20 77  ere are active w
18bb0 72 69 74 69 6e 67 20 56 4d 73 20 6f 72 20 61 63  riting VMs or ac
18bc0 74 69 76 65 20 56 4d 73 20 74 68 61 74 20 75 73  tive VMs that us
18bd0 65 20 73 68 61 72 65 64 20 63 61 63 68 65 2e 0a  e shared cache..
18be0 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
18bf0 75 63 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68  uction causes th
18c00 65 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f  e VM to halt..*/
18c10 0a 63 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d  .case OP_AutoCom
18c20 6d 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73  mit: {.  int des
18c30 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a  iredAutoCommit;.
18c40 20 20 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b    int iRollback;
18c50 0a 0a 20 20 64 65 73 69 72 65 64 41 75 74 6f 43  ..  desiredAutoC
18c60 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b  ommit = pOp->p1;
18c70 0a 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70  .  iRollback = p
18c80 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74  Op->p2;.  assert
18c90 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  ( desiredAutoCom
18ca0 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65  mit==1 || desire
18cb0 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29  dAutoCommit==0 )
18cc0 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69  ;.  assert( desi
18cd0 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31  redAutoCommit==1
18ce0 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30   || iRollback==0
18cf0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65   );.  assert( de
18d00 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d  siredAutoCommit=
18d10 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 33 3d 3d 30  =0 || pOp->p3==0
18d20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62   );.  assert( db
18d30 2d 3e 6e 56 64 62 65 41 63 74 69 76 65 3e 30 20  ->nVdbeActive>0 
18d40 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73 74 20  );  /* At least 
18d50 74 68 69 73 20 6f 6e 65 20 56 4d 20 69 73 20 61  this one VM is a
18d60 63 74 69 76 65 20 2a 2f 0a 20 20 61 73 73 65 72  ctive */.  asser
18d70 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
18d80 29 3b 0a 0a 20 20 69 66 28 20 64 65 73 69 72 65  );..  if( desire
18d90 64 41 75 74 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d  dAutoCommit!=db-
18da0 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20  >autoCommit ){. 
18db0 20 20 20 69 66 28 20 69 52 6f 6c 6c 62 61 63 6b     if( iRollback
18dc0 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
18dd0 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  ( desiredAutoCom
18de0 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20  mit==1 );.      
18df0 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41  sqlite3RollbackA
18e00 6c 6c 28 64 62 2c 20 53 51 4c 49 54 45 5f 41 42  ll(db, SQLITE_AB
18e10 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20  ORT_ROLLBACK);. 
18e20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
18e30 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c  mit = 1;.    }el
18e40 73 65 20 69 66 28 20 64 65 73 69 72 65 64 41 75  se if( desiredAu
18e50 74 6f 43 6f 6d 6d 69 74 20 26 26 20 64 62 2d 3e  toCommit && db->
18e60 6e 56 64 62 65 57 72 69 74 65 3e 30 20 29 7b 0a  nVdbeWrite>0 ){.
18e70 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73        /* If this
18e80 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70   instruction imp
18e90 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54  lements a COMMIT
18ea0 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61   and other VMs a
18eb0 72 65 20 77 72 69 74 69 6e 67 0a 20 20 20 20 20  re writing.     
18ec0 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20 65 72   ** return an er
18ed0 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74  ror indicating t
18ee0 68 61 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d  hat the other VM
18ef0 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20  s must complete 
18f00 66 69 72 73 74 2e 20 0a 20 20 20 20 20 20 2a 2f  first. .      */
18f10 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
18f20 62 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e  beError(p, "cann
18f30 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73 61  ot commit transa
18f40 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20  ction - ".      
18f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f60 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65      "SQL stateme
18f70 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22  nts in progress"
18f80 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  );.      rc = SQ
18f90 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
18fa0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
18fb0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65  to_error;.    }e
18fc0 6c 73 65 20 69 66 28 20 28 72 63 20 3d 20 73 71  lse if( (rc = sq
18fd0 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b  lite3VdbeCheckFk
18fe0 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f  (p, 1))!=SQLITE_
18ff0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  OK ){.      goto
19000 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
19010 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64    }else{.      d
19020 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
19030 28 75 38 29 64 65 73 69 72 65 64 41 75 74 6f 43  (u8)desiredAutoC
19040 6f 6d 6d 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20  ommit;.    }.   
19050 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
19060 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f  Halt(p)==SQLITE_
19070 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 70 2d  BUSY ){.      p-
19080 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  >pc = (int)(pOp 
19090 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20 20 64 62  - aOp);.      db
190a0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28  ->autoCommit = (
190b0 75 38 29 28 31 2d 64 65 73 69 72 65 64 41 75 74  u8)(1-desiredAut
190c0 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20 20  oCommit);.      
190d0 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c  p->rc = rc = SQL
190e0 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20  ITE_BUSY;.      
190f0 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
19100 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65  ;.    }.    asse
19110 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65  rt( db->nStateme
19120 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c  nt==0 );.    sql
19130 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69  ite3CloseSavepoi
19140 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 69 66 28  nts(db);.    if(
19150 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f   p->rc==SQLITE_O
19160 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  K ){.      rc = 
19170 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20  SQLITE_DONE;.   
19180 20 20 20 64 62 2d 3e 72 65 61 64 6f 6e 6c 79 54     db->readonlyT
19190 72 61 6e 73 20 3d 20 28 70 4f 70 2d 3e 70 33 3d  rans = (pOp->p3=
191a0 3d 54 4b 5f 52 45 41 44 4f 4e 4c 59 29 3b 0a 20  =TK_READONLY);. 
191b0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
191c0 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
191d0 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74  R;.    }.    got
191e0 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
191f0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
19200 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 0a  te3VdbeError(p,.
19210 20 20 20 20 20 20 20 20 28 21 64 65 73 69 72 65          (!desire
19220 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61  dAutoCommit)?"ca
19230 6e 6e 6f 74 20 73 74 61 72 74 20 61 20 74 72 61  nnot start a tra
19240 6e 73 61 63 74 69 6f 6e 20 77 69 74 68 69 6e 20  nsaction within 
19250 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28  a transaction":(
19260 0a 20 20 20 20 20 20 20 20 28 69 52 6f 6c 6c 62  .        (iRollb
19270 61 63 6b 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c  ack)?"cannot rol
19280 6c 62 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73  lback - no trans
19290 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65  action is active
192a0 22 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ":.             
192b0 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f        "cannot co
192c0 6d 6d 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61  mmit - no transa
192d0 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22  ction is active"
192e0 29 29 3b 0a 20 20 20 20 20 20 20 20 20 0a 20 20  ));.         .  
192f0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
19300 52 4f 52 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62  ROR;.    goto ab
19310 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
19320 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
19330 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61  ../* Opcode: Tra
19340 6e 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20 50  nsaction P1 P2 P
19350 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 65  3 P4 P5.**.** Be
19360 67 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  gin a transactio
19370 6e 20 6f 6e 20 64 61 74 61 62 61 73 65 20 50 31  n on database P1
19380 20 69 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f   if a transactio
19390 6e 20 69 73 20 6e 6f 74 20 61 6c 72 65 61 64 79  n is not already
193a0 0a 2a 2a 20 61 63 74 69 76 65 2e 0a 2a 2a 20 49  .** active..** I
193b0 66 20 50 32 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P2 is non-zero
193c0 2c 20 74 68 65 6e 20 61 20 77 72 69 74 65 2d 74  , then a write-t
193d0 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74  ransaction is st
193e0 61 72 74 65 64 2c 20 6f 72 20 69 66 20 61 20 0a  arted, or if a .
193f0 2a 2a 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74  ** read-transact
19400 69 6f 6e 20 69 73 20 61 6c 72 65 61 64 79 20 61  ion is already a
19410 63 74 69 76 65 2c 20 69 74 20 69 73 20 75 70 67  ctive, it is upg
19420 72 61 64 65 64 20 74 6f 20 61 20 77 72 69 74 65  raded to a write
19430 2d 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2a  -transaction..**
19440 20 49 66 20 50 32 20 69 73 20 7a 65 72 6f 2c 20   If P2 is zero, 
19450 74 68 65 6e 20 61 20 72 65 61 64 2d 74 72 61 6e  then a read-tran
19460 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74  saction is start
19470 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  ed..**.** P1 is 
19480 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  the index of the
19490 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6f   database file o
194a0 6e 20 77 68 69 63 68 20 74 68 65 20 74 72 61 6e  n which the tran
194b0 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74  saction is.** st
194c0 61 72 74 65 64 2e 20 20 49 6e 64 65 78 20 30 20  arted.  Index 0 
194d0 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  is the main data
194e0 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 69 6e  base file and in
194f0 64 65 78 20 31 20 69 73 20 74 68 65 0a 2a 2a 20  dex 1 is the.** 
19500 66 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65  file used for te
19510 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20  mporary tables. 
19520 20 49 6e 64 69 63 65 73 20 6f 66 20 32 20 6f 72   Indices of 2 or
19530 20 6d 6f 72 65 20 61 72 65 20 75 73 65 64 20 66   more are used f
19540 6f 72 0a 2a 2a 20 61 74 74 61 63 68 65 64 20 64  or.** attached d
19550 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20  atabases..**.** 
19560 49 66 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73  If a write-trans
19570 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65  action is starte
19580 64 20 61 6e 64 20 74 68 65 20 56 64 62 65 2e 75  d and the Vdbe.u
19590 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 66  sesStmtJournal f
195a0 6c 61 67 20 69 73 0a 2a 2a 20 74 72 75 65 20 28  lag is.** true (
195b0 74 68 69 73 20 66 6c 61 67 20 69 73 20 73 65 74  this flag is set
195c0 20 69 66 20 74 68 65 20 56 64 62 65 20 6d 61 79   if the Vdbe may
195d0 20 6d 6f 64 69 66 79 20 6d 6f 72 65 20 74 68 61   modify more tha
195e0 6e 20 6f 6e 65 20 72 6f 77 20 61 6e 64 20 6d 61  n one row and ma
195f0 79 0a 2a 2a 20 74 68 72 6f 77 20 61 6e 20 41 42  y.** throw an AB
19600 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 29 2c 20  ORT exception), 
19610 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  a statement tran
19620 73 61 63 74 69 6f 6e 20 6d 61 79 20 61 6c 73 6f  saction may also
19630 20 62 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d   be opened..** M
19640 6f 72 65 20 73 70 65 63 69 66 69 63 61 6c 6c 79  ore specifically
19650 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72  , a statement tr
19660 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6f 70 65  ansaction is ope
19670 6e 65 64 20 69 66 66 20 74 68 65 20 64 61 74 61  ned iff the data
19680 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69  base.** connecti
19690 6f 6e 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  on is currently 
196a0 6e 6f 74 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69  not in autocommi
196b0 74 20 6d 6f 64 65 2c 20 6f 72 20 69 66 20 74 68  t mode, or if th
196c0 65 72 65 20 61 72 65 20 6f 74 68 65 72 0a 2a 2a  ere are other.**
196d0 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e   active statemen
196e0 74 73 2e 20 41 20 73 74 61 74 65 6d 65 6e 74 20  ts. A statement 
196f0 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 6c 6f  transaction allo
19700 77 73 20 74 68 65 20 63 68 61 6e 67 65 73 20 6d  ws the changes m
19710 61 64 65 20 62 79 20 74 68 69 73 0a 2a 2a 20 56  ade by this.** V
19720 44 42 45 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64  DBE to be rolled
19730 20 62 61 63 6b 20 61 66 74 65 72 20 61 6e 20 65   back after an e
19740 72 72 6f 72 20 77 69 74 68 6f 75 74 20 68 61 76  rror without hav
19750 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b  ing to roll back
19760 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74   the.** entire t
19770 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 66 20 6e  ransaction. If n
19780 6f 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f 75  o error is encou
19790 6e 74 65 72 65 64 2c 20 74 68 65 20 73 74 61 74  ntered, the stat
197a0 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
197b0 6e 0a 2a 2a 20 77 69 6c 6c 20 61 75 74 6f 6d 61  n.** will automa
197c0 74 69 63 61 6c 6c 79 20 63 6f 6d 6d 69 74 20 77  tically commit w
197d0 68 65 6e 20 74 68 65 20 56 44 42 45 20 68 61 6c  hen the VDBE hal
197e0 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21  ts..**.** If P5!
197f0 3d 30 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63  =0 then this opc
19800 6f 64 65 20 61 6c 73 6f 20 63 68 65 63 6b 73 20  ode also checks 
19810 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  the schema cooki
19820 65 20 61 67 61 69 6e 73 74 20 50 33 0a 2a 2a 20  e against P3.** 
19830 61 6e 64 20 74 68 65 20 73 63 68 65 6d 61 20 67  and the schema g
19840 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65  eneration counte
19850 72 20 61 67 61 69 6e 73 74 20 50 34 2e 0a 2a 2a  r against P4..**
19860 20 54 68 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e   The cookie chan
19870 67 65 73 20 69 74 73 20 76 61 6c 75 65 20 77 68  ges its value wh
19880 65 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62  enever the datab
19890 61 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67  ase schema chang
198a0 65 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72  es..** This oper
198b0 61 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f  ation is used to
198c0 20 64 65 74 65 63 74 20 77 68 65 6e 20 74 68 61   detect when tha
198d0 74 20 74 68 65 20 63 6f 6f 6b 69 65 20 68 61 73  t the cookie has
198e0 20 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20   changed.** and 
198f0 74 68 61 74 20 74 68 65 20 63 75 72 72 65 6e 74  that the current
19900 20 70 72 6f 63 65 73 73 20 6e 65 65 64 73 20 74   process needs t
19910 6f 20 72 65 72 65 61 64 20 74 68 65 20 73 63 68  o reread the sch
19920 65 6d 61 2e 20 20 49 66 20 74 68 65 20 73 63 68  ema.  If the sch
19930 65 6d 61 0a 2a 2a 20 63 6f 6f 6b 69 65 20 69 6e  ema.** cookie in
19940 20 50 33 20 64 69 66 66 65 72 73 20 66 72 6f 6d   P3 differs from
19950 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b   the schema cook
19960 69 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ie in the databa
19970 73 65 20 68 65 61 64 65 72 20 6f 72 0a 2a 2a 20  se header or.** 
19980 69 66 20 74 68 65 20 73 63 68 65 6d 61 20 67 65  if the schema ge
19990 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72  neration counter
199a0 20 69 6e 20 50 34 20 64 69 66 66 65 72 73 20 66   in P4 differs f
199b0 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74 0a  rom the current.
199c0 2a 2a 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f  ** generation co
199d0 75 6e 74 65 72 2c 20 74 68 65 6e 20 61 6e 20 53  unter, then an S
199e0 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 65 72 72  QLITE_SCHEMA err
199f0 6f 72 20 69 73 20 72 61 69 73 65 64 20 61 6e 64  or is raised and
19a00 20 65 78 65 63 75 74 69 6f 6e 0a 2a 2a 20 68 61   execution.** ha
19a10 6c 74 73 2e 20 20 54 68 65 20 73 71 6c 69 74 65  lts.  The sqlite
19a20 33 5f 73 74 65 70 28 29 20 77 72 61 70 70 65 72  3_step() wrapper
19a30 20 66 75 6e 63 74 69 6f 6e 20 6d 69 67 68 74 20   function might 
19a40 74 68 65 6e 20 72 65 70 72 65 70 61 72 65 20 74  then reprepare t
19a50 68 65 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20  he.** statement 
19a60 61 6e 64 20 72 65 72 75 6e 20 69 74 20 66 72 6f  and rerun it fro
19a70 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e  m the beginning.
19a80 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 6e  .*/.case OP_Tran
19a90 73 61 63 74 69 6f 6e 3a 20 7b 0a 20 20 42 74 72  saction: {.  Btr
19aa0 65 65 20 2a 70 42 74 3b 0a 20 20 69 6e 74 20 69  ee *pBt;.  int i
19ab0 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69 47 65 6e  Meta;.  int iGen
19ac0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  ;..  assert( p->
19ad0 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61  bIsReader );.  a
19ae0 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
19af0 6c 79 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 32  ly==0 || pOp->p2
19b00 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
19b10 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
19b20 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
19b30 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61  ;.  assert( DbMa
19b40 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
19b50 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b  ask, pOp->p1) );
19b60 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26  .  if( pOp->p2 &
19b70 26 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  & (db->flags & S
19b80 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 29  QLITE_QueryOnly)
19b90 21 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  !=0 ){.    rc = 
19ba0 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 3b  SQLITE_READONLY;
19bb0 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f  .    goto abort_
19bc0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
19bd0 7d 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44  }.  pBt = db->aD
19be0 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a  b[pOp->p1].pBt;.
19bf0 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20 20  .  if( pBt ){.  
19c00 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
19c10 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 42  reeBeginTrans(pB
19c20 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20  t, pOp->p2);.   
19c30 20 74 65 73 74 63 61 73 65 28 20 72 63 3d 3d 53   testcase( rc==S
19c40 51 4c 49 54 45 5f 42 55 53 59 5f 53 4e 41 50 53  QLITE_BUSY_SNAPS
19c50 48 4f 54 20 29 3b 0a 20 20 20 20 74 65 73 74 63  HOT );.    testc
19c60 61 73 65 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ase( rc==SQLITE_
19c70 42 55 53 59 5f 52 45 43 4f 56 45 52 59 20 29 3b  BUSY_RECOVERY );
19c80 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c  .    if( rc!=SQL
19c90 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
19ca0 69 66 28 20 28 72 63 26 30 78 66 66 29 3d 3d 53  if( (rc&0xff)==S
19cb0 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
19cc0 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69        p->pc = (i
19cd0 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a  nt)(pOp - aOp);.
19ce0 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20          p->rc = 
19cf0 72 63 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f  rc;.        goto
19d00 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
19d10 20 20 20 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f      }.      goto
19d20 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
19d30 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ror;.    }..    
19d40 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 70  if( pOp->p2 && p
19d50 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61  ->usesStmtJourna
19d60 6c 20 0a 20 20 20 20 20 26 26 20 28 64 62 2d 3e  l .     && (db->
19d70 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c  autoCommit==0 ||
19d80 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31   db->nVdbeRead>1
19d90 29 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20  ) .    ){.      
19da0 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
19db0 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42  treeIsInTrans(pB
19dc0 74 29 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  t) );.      if( 
19dd0 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30  p->iStatement==0
19de0 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
19df0 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65  rt( db->nStateme
19e00 6e 74 3e 3d 30 20 26 26 20 64 62 2d 3e 6e 53 61  nt>=0 && db->nSa
19e10 76 65 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20 20  vepoint>=0 );.  
19e20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65        db->nState
19e30 6d 65 6e 74 2b 2b 3b 20 0a 20 20 20 20 20 20 20  ment++; .       
19e40 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 20 3d   p->iStatement =
19e50 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20   db->nSavepoint 
19e60 2b 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74  + db->nStatement
19e70 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
19e80 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
19e90 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53  bSavepoint(db, S
19ea0 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 20  AVEPOINT_BEGIN, 
19eb0 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 2d 31 29  p->iStatement-1)
19ec0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  ;.      if( rc==
19ed0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
19ee0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
19ef0 33 42 74 72 65 65 42 65 67 69 6e 53 74 6d 74 28  3BtreeBeginStmt(
19f00 70 42 74 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65  pBt, p->iStateme
19f10 6e 74 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  nt);.      }..  
19f20 20 20 20 20 2f 2a 20 53 74 6f 72 65 20 74 68 65      /* Store the
19f30 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 6f   current value o
19f40 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  f the database h
19f50 61 6e 64 6c 65 73 20 64 65 66 65 72 72 65 64 20  andles deferred 
19f60 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20 20 20 20  constraint.     
19f70 20 2a 2a 20 63 6f 75 6e 74 65 72 2e 20 49 66 20   ** counter. If 
19f80 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72  the statement tr
19f90 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64 73 20  ansaction needs 
19fa0 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  to be rolled bac
19fb0 6b 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20  k,.      ** the 
19fc0 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f  value of this co
19fd0 75 6e 74 65 72 20 6e 65 65 64 73 20 74 6f 20 62  unter needs to b
19fe0 65 20 72 65 73 74 6f 72 65 64 20 74 6f 6f 2e 20  e restored too. 
19ff0 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74   */.      p->nSt
1a000 6d 74 44 65 66 43 6f 6e 73 20 3d 20 64 62 2d 3e  mtDefCons = db->
1a010 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20  nDeferredCons;. 
1a020 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66       p->nStmtDef
1a030 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44  ImmCons = db->nD
1a040 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a  eferredImmCons;.
1a050 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 47 61      }..    /* Ga
1a060 74 68 65 72 20 74 68 65 20 73 63 68 65 6d 61 20  ther the schema 
1a070 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66  version number f
1a080 6f 72 20 63 68 65 63 6b 69 6e 67 3a 0a 20 20 20  or checking:.   
1a090 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49   ** IMPLEMENTATI
1a0a0 4f 4e 2d 4f 46 3a 20 52 2d 30 33 31 38 39 2d 35  ON-OF: R-03189-5
1a0b0 31 31 33 35 20 41 73 20 65 61 63 68 20 53 51 4c  1135 As each SQL
1a0c0 20 73 74 61 74 65 6d 65 6e 74 20 72 75 6e 73 2c   statement runs,
1a0d0 20 74 68 65 20 73 63 68 65 6d 61 0a 20 20 20 20   the schema.    
1a0e0 2a 2a 20 76 65 72 73 69 6f 6e 20 69 73 20 63 68  ** version is ch
1a0f0 65 63 6b 65 64 20 74 6f 20 65 6e 73 75 72 65 20  ecked to ensure 
1a100 74 68 61 74 20 74 68 65 20 73 63 68 65 6d 61 20  that the schema 
1a110 68 61 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20  has not changed 
1a120 73 69 6e 63 65 20 74 68 65 0a 20 20 20 20 2a 2a  since the.    **
1a130 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 77   SQL statement w
1a140 61 73 20 70 72 65 70 61 72 65 64 2e 0a 20 20 20  as prepared..   
1a150 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 42   */.    sqlite3B
1a160 74 72 65 65 47 65 74 4d 65 74 61 28 70 42 74 2c  treeGetMeta(pBt,
1a170 20 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45   BTREE_SCHEMA_VE
1a180 52 53 49 4f 4e 2c 20 28 75 33 32 20 2a 29 26 69  RSION, (u32 *)&i
1a190 4d 65 74 61 29 3b 0a 20 20 20 20 69 47 65 6e 20  Meta);.    iGen 
1a1a0 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  = db->aDb[pOp->p
1a1b0 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 69 47 65 6e  1].pSchema->iGen
1a1c0 65 72 61 74 69 6f 6e 3b 0a 20 20 7d 65 6c 73 65  eration;.  }else
1a1d0 7b 0a 20 20 20 20 69 47 65 6e 20 3d 20 69 4d 65  {.    iGen = iMe
1a1e0 74 61 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 61 73  ta = 0;.  }.  as
1a1f0 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30  sert( pOp->p5==0
1a200 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d   || pOp->p4type=
1a210 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 69  =P4_INT32 );.  i
1a220 66 28 20 70 4f 70 2d 3e 70 35 20 26 26 20 28 69  f( pOp->p5 && (i
1a230 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 33 20 7c 7c  Meta!=pOp->p3 ||
1a240 20 69 47 65 6e 21 3d 70 4f 70 2d 3e 70 34 2e 69   iGen!=pOp->p4.i
1a250 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  ) ){.    sqlite3
1a260 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45  DbFree(db, p->zE
1a270 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a  rrMsg);.    p->z
1a280 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33  ErrMsg = sqlite3
1a290 44 62 53 74 72 44 75 70 28 64 62 2c 20 22 64 61  DbStrDup(db, "da
1a2a0 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61  tabase schema ha
1a2b0 73 20 63 68 61 6e 67 65 64 22 29 3b 0a 20 20 20  s changed");.   
1a2c0 20 2f 2a 20 49 66 20 74 68 65 20 73 63 68 65 6d   /* If the schem
1a2d0 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20 74 68  a-cookie from th
1a2e0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
1a2f0 6d 61 74 63 68 65 73 20 74 68 65 20 63 6f 6f 6b  matches the cook
1a300 69 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f 72 65  ie .    ** store
1a310 64 20 77 69 74 68 20 74 68 65 20 69 6e 2d 6d 65  d with the in-me
1a320 6d 6f 72 79 20 72 65 70 72 65 73 65 6e 74 61 74  mory representat
1a330 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 68 65 6d  ion of the schem
1a340 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74  a, do.    ** not
1a350 20 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68 65   reload the sche
1a360 6d 61 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ma from the data
1a370 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20 2a  base file..    *
1a380 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76 69 72 74  *.    ** If virt
1a390 75 61 6c 2d 74 61 62 6c 65 73 20 61 72 65 20 69  ual-tables are i
1a3a0 6e 20 75 73 65 2c 20 74 68 69 73 20 69 73 20 6e  n use, this is n
1a3b0 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70 74 69 6d  ot just an optim
1a3c0 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20  ization..    ** 
1a3d0 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65 73 20  Often, v-tables 
1a3e0 73 74 6f 72 65 20 74 68 65 69 72 20 64 61 74 61  store their data
1a3f0 20 69 6e 20 6f 74 68 65 72 20 53 51 4c 69 74 65   in other SQLite
1a400 20 74 61 62 6c 65 73 2c 20 77 68 69 63 68 0a 20   tables, which. 
1a410 20 20 20 2a 2a 20 61 72 65 20 71 75 65 72 69 65     ** are querie
1a420 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 78 4e  d from within xN
1a430 65 78 74 28 29 20 61 6e 64 20 6f 74 68 65 72 20  ext() and other 
1a440 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 20  v-table methods 
1a450 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70 72 65  using.    ** pre
1a460 70 61 72 65 64 20 71 75 65 72 69 65 73 2e 20 49  pared queries. I
1a470 66 20 73 75 63 68 20 61 20 71 75 65 72 79 20 69  f such a query i
1a480 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c 20 77  s out-of-date, w
1a490 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f  e do not want to
1a4a0 0a 20 20 20 20 2a 2a 20 64 69 73 63 61 72 64 20  .    ** discard 
1a4b0 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
1a4c0 65 6d 61 2c 20 61 73 20 74 68 65 20 75 73 65 72  ema, as the user
1a4d0 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74 69   code implementi
1a4e0 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a 20 76 2d  ng the.    ** v-
1a4f0 74 61 62 6c 65 20 77 6f 75 6c 64 20 68 61 76 65  table would have
1a500 20 74 6f 20 62 65 20 72 65 61 64 79 20 66 6f 72   to be ready for
1a510 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
1a520 62 20 73 74 72 75 63 74 75 72 65 20 69 74 73 65  b structure itse
1a530 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65 20  lf.    ** to be 
1a540 69 6e 76 61 6c 69 64 61 74 65 64 20 77 68 65 6e  invalidated when
1a550 65 76 65 72 20 73 71 6c 69 74 65 33 5f 73 74 65  ever sqlite3_ste
1a560 70 28 29 20 69 73 20 63 61 6c 6c 65 64 20 66 72  p() is called fr
1a570 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20 20 20 2a  om within .    *
1a580 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d 65 74 68  * a v-table meth
1a590 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  od..    */.    i
1a5a0 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  f( db->aDb[pOp->
1a5b0 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68  p1].pSchema->sch
1a5c0 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65 74  ema_cookie!=iMet
1a5d0 61 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  a ){.      sqlit
1a5e0 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61  e3ResetOneSchema
1a5f0 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20  (db, pOp->p1);. 
1a600 20 20 20 7d 0a 20 20 20 20 70 2d 3e 65 78 70 69     }.    p->expi
1a610 72 65 64 20 3d 20 31 3b 0a 20 20 20 20 72 63 20  red = 1;.    rc 
1a620 3d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b  = SQLITE_SCHEMA;
1a630 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20  .  }.  if( rc ) 
1a640 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1a650 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
1a660 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1a670 52 65 61 64 43 6f 6f 6b 69 65 20 50 31 20 50 32  ReadCookie P1 P2
1a680 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   P3 * *.**.** Re
1a690 61 64 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72  ad cookie number
1a6a0 20 50 33 20 66 72 6f 6d 20 64 61 74 61 62 61 73   P3 from databas
1a6b0 65 20 50 31 20 61 6e 64 20 77 72 69 74 65 20 69  e P1 and write i
1a6c0 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  t into register 
1a6d0 50 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69 73 20  P2..** P3==1 is 
1a6e0 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  the schema versi
1a6f0 6f 6e 2e 20 20 50 33 3d 3d 32 20 69 73 20 74 68  on.  P3==2 is th
1a700 65 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61  e database forma
1a710 74 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69 73 20 74  t..** P3==3 is t
1a720 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70  he recommended p
1a730 61 67 65 72 20 63 61 63 68 65 20 73 69 7a 65 2c  ager cache size,
1a740 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20   and so forth.  
1a750 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20  P1==0 is.** the 
1a760 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
1a770 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20  le and P1==1 is 
1a780 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
1a790 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 0a  e used to store.
1a7a0 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ** temporary tab
1a7b0 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65  les..**.** There
1a7c0 20 6d 75 73 74 20 62 65 20 61 20 72 65 61 64 2d   must be a read-
1a7d0 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61  lock on the data
1a7e0 62 61 73 65 20 28 65 69 74 68 65 72 20 61 20 74  base (either a t
1a7f0 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75  ransaction.** mu
1a800 73 74 20 62 65 20 73 74 61 72 74 65 64 20 6f 72  st be started or
1a810 20 74 68 65 72 65 20 6d 75 73 74 20 62 65 20 61   there must be a
1a820 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72 29 20 62  n open cursor) b
1a830 65 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74 69  efore.** executi
1a840 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  ng this instruct
1a850 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
1a860 52 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20  ReadCookie: {   
1a870 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
1a880 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65  ut2 */.  int iMe
1a890 74 61 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20  ta;.  int iDb;. 
1a8a0 20 69 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20   int iCookie;.. 
1a8b0 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52   assert( p->bIsR
1a8c0 65 61 64 65 72 20 29 3b 0a 20 20 69 44 62 20 3d  eader );.  iDb =
1a8d0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f   pOp->p1;.  iCoo
1a8e0 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  kie = pOp->p3;. 
1a8f0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
1a900 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f  <SQLITE_N_BTREE_
1a910 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74  META );.  assert
1a920 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c  ( iDb>=0 && iDb<
1a930 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
1a940 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 44 62  ert( db->aDb[iDb
1a950 5d 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73  ].pBt!=0 );.  as
1a960 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
1a970 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69  (p->btreeMask, i
1a980 44 62 29 20 29 3b 0a 0a 20 20 73 71 6c 69 74 65  Db) );..  sqlite
1a990 33 42 74 72 65 65 47 65 74 4d 65 74 61 28 64 62  3BtreeGetMeta(db
1a9a0 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20  ->aDb[iDb].pBt, 
1a9b0 69 43 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a 29  iCookie, (u32 *)
1a9c0 26 69 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74 20  &iMeta);.  pOut 
1a9d0 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
1a9e0 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74  (p, pOp);.  pOut
1a9f0 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20  ->u.i = iMeta;. 
1aa00 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1aa10 63 6f 64 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20  code: SetCookie 
1aa20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
1aa30 2a 2a 20 57 72 69 74 65 20 74 68 65 20 69 6e 74  ** Write the int
1aa40 65 67 65 72 20 76 61 6c 75 65 20 50 33 20 69 6e  eger value P3 in
1aa50 74 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72  to cookie number
1aa60 20 50 32 20 6f 66 20 64 61 74 61 62 61 73 65 20   P2 of database 
1aa70 50 31 2e 0a 2a 2a 20 50 32 3d 3d 31 20 69 73 20  P1..** P2==1 is 
1aa80 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  the schema versi
1aa90 6f 6e 2e 20 20 50 32 3d 3d 32 20 69 73 20 74 68  on.  P2==2 is th
1aaa0 65 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61  e database forma
1aab0 74 2e 0a 2a 2a 20 50 32 3d 3d 33 20 69 73 20 74  t..** P2==3 is t
1aac0 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70  he recommended p
1aad0 61 67 65 72 20 63 61 63 68 65 20 0a 2a 2a 20 73  ager cache .** s
1aae0 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74  ize, and so fort
1aaf0 68 2e 20 20 50 31 3d 3d 30 20 69 73 20 74 68 65  h.  P1==0 is the
1ab00 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
1ab10 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73  ile and P1==1 is
1ab20 20 74 68 65 20 0a 2a 2a 20 64 61 74 61 62 61 73   the .** databas
1ab30 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73  e file used to s
1ab40 74 6f 72 65 20 74 65 6d 70 6f 72 61 72 79 20 74  tore temporary t
1ab50 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74  ables..**.** A t
1ab60 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20  ransaction must 
1ab70 62 65 20 73 74 61 72 74 65 64 20 62 65 66 6f 72  be started befor
1ab80 65 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73  e executing this
1ab90 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65   opcode..*/.case
1aba0 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b   OP_SetCookie: {
1abb0 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 61 73  .  Db *pDb;.  as
1abc0 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51  sert( pOp->p2<SQ
1abd0 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54  LITE_N_BTREE_MET
1abe0 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  A );.  assert( p
1abf0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1ac00 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
1ac10 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
1ac20 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
1ac30 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20  k, pOp->p1) );. 
1ac40 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
1ac50 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62  Only==0 );.  pDb
1ac60 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d   = &db->aDb[pOp-
1ac70 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1ac80 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20  pDb->pBt!=0 );. 
1ac90 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
1aca0 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28  SchemaMutexHeld(
1acb0 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20  db, pOp->p1, 0) 
1acc0 29 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65  );.  /* See note
1acd0 20 61 62 6f 75 74 20 69 6e 64 65 78 20 73 68 69   about index shi
1ace0 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64  fting on OP_Read
1acf0 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d  Cookie */.  rc =
1ad00 20 73 71 6c 69 74 65 33 42 74 72 65 65 55 70 64   sqlite3BtreeUpd
1ad10 61 74 65 4d 65 74 61 28 70 44 62 2d 3e 70 42 74  ateMeta(pDb->pBt
1ad20 2c 20 70 4f 70 2d 3e 70 32 2c 20 70 4f 70 2d 3e  , pOp->p2, pOp->
1ad30 70 33 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  p3);.  if( pOp->
1ad40 70 32 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d 41  p2==BTREE_SCHEMA
1ad50 5f 56 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20  _VERSION ){.    
1ad60 2f 2a 20 57 68 65 6e 20 74 68 65 20 73 63 68 65  /* When the sche
1ad70 6d 61 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65  ma cookie change
1ad80 73 2c 20 72 65 63 6f 72 64 20 74 68 65 20 6e 65  s, record the ne
1ad90 77 20 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61  w cookie interna
1ada0 6c 6c 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e  lly */.    pDb->
1adb0 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f  pSchema->schema_
1adc0 63 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33  cookie = pOp->p3
1add0 3b 0a 20 20 20 20 64 62 2d 3e 6d 44 62 46 6c 61  ;.    db->mDbFla
1ade0 67 73 20 7c 3d 20 44 42 46 4c 41 47 5f 53 63 68  gs |= DBFLAG_Sch
1adf0 65 6d 61 43 68 61 6e 67 65 3b 0a 20 20 7d 65 6c  emaChange;.  }el
1ae00 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d  se if( pOp->p2==
1ae10 42 54 52 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41  BTREE_FILE_FORMA
1ae20 54 20 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f  T ){.    /* Reco
1ae30 72 64 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68  rd changes in th
1ae40 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f  e file format */
1ae50 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d  .    pDb->pSchem
1ae60 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d  a->file_format =
1ae70 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20   pOp->p3;.  }.  
1ae80 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 29  if( pOp->p1==1 )
1ae90 7b 0a 20 20 20 20 2f 2a 20 49 6e 76 61 6c 69 64  {.    /* Invalid
1aea0 61 74 65 20 61 6c 6c 20 70 72 65 70 61 72 65 64  ate all prepared
1aeb0 20 73 74 61 74 65 6d 65 6e 74 73 20 77 68 65 6e   statements when
1aec0 65 76 65 72 20 74 68 65 20 54 45 4d 50 20 64 61  ever the TEMP da
1aed0 74 61 62 61 73 65 0a 20 20 20 20 2a 2a 20 73 63  tabase.    ** sc
1aee0 68 65 6d 61 20 69 73 20 63 68 61 6e 67 65 64 2e  hema is changed.
1aef0 20 20 54 69 63 6b 65 74 20 23 31 36 34 34 20 2a    Ticket #1644 *
1af00 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70  /.    sqlite3Exp
1af10 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
1af20 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 70  ments(db);.    p
1af30 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20  ->expired = 0;. 
1af40 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f   }.  if( rc ) go
1af50 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1af60 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a  error;.  break;.
1af70 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  }..#ifdef SQLITE
1af80 5f 53 45 52 56 45 52 5f 45 44 49 54 49 4f 4e 0a  _SERVER_EDITION.
1af90 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 72 65 65 6c  /* Opcode: Freel
1afa0 69 73 74 46 6d 74 20 50 31 20 50 32 20 50 33 20  istFmt P1 P2 P3 
1afb0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65  * *.**.** Parame
1afc0 74 65 72 20 50 33 20 6d 75 73 74 20 62 65 20 30  ter P3 must be 0
1afd0 2c 20 31 20 6f 72 20 32 2e 20 49 66 20 69 74 20  , 1 or 2. If it 
1afe0 69 73 20 6e 6f 74 20 30 2c 20 61 74 74 65 6d 70  is not 0, attemp
1aff0 74 20 74 6f 20 73 65 74 20 74 68 65 0a 2a 2a 20  t to set the.** 
1b000 66 72 65 65 6c 69 73 74 20 66 6f 72 6d 61 74 20  freelist format 
1b010 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 20 74  of database P1 t
1b020 6f 20 66 6f 72 6d 61 74 20 31 20 6f 72 20 66 6f  o format 1 or fo
1b030 72 6d 61 74 20 32 2e 20 42 65 66 6f 72 65 0a 2a  rmat 2. Before.*
1b040 2a 20 72 65 74 75 72 6e 69 6e 67 2c 20 73 74 6f  * returning, sto
1b050 72 65 20 74 68 65 20 66 69 6e 61 6c 20 66 72 65  re the final fre
1b060 65 6c 69 73 74 20 66 6f 72 6d 61 74 20 28 65 69  elist format (ei
1b070 74 68 65 72 20 31 20 6f 72 20 32 29 20 6f 66 20  ther 1 or 2) of 
1b080 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 50 31 20  .** database P1 
1b090 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
1b0a0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 72 65  ..*/.case OP_Fre
1b0b0 65 6c 69 73 74 46 6d 74 3a 20 7b 20 20 2f 2a 20  elistFmt: {  /* 
1b0c0 6f 75 74 32 20 2a 2f 0a 20 20 44 62 20 2a 70 44  out2 */.  Db *pD
1b0d0 62 3b 0a 20 20 69 6e 74 20 69 56 61 6c 3b 0a 0a  b;.  int iVal;..
1b0e0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1b0f0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1b100 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
1b110 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
1b120 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f  p->btreeMask, pO
1b130 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65  p->p1) );.  asse
1b140 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d  rt( sqlite3Schem
1b150 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 70  aMutexHeld(db, p
1b160 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a 20 20  Op->p1, 0) );.  
1b170 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70  pDb = &db->aDb[p
1b180 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
1b190 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29  t( pDb->pBt!=0 )
1b1a0 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  ;..  pOut = out2
1b1b0 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
1b1c0 70 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  p);.  rc = sqlit
1b1d0 65 33 42 74 72 65 65 46 72 65 65 6c 69 73 74 46  e3BtreeFreelistF
1b1e0 6f 72 6d 61 74 28 70 44 62 2d 3e 70 42 74 2c 20  ormat(pDb->pBt, 
1b1f0 70 4f 70 2d 3e 70 33 2c 20 26 69 56 61 6c 29 3b  pOp->p3, &iVal);
1b200 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
1b210 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1b220 72 6f 72 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  ror;.  pOut->u.i
1b230 20 3d 20 69 56 61 6c 3b 0a 0a 20 20 62 72 65 61   = iVal;..  brea
1b240 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  k;.}.#endif../* 
1b250 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64  Opcode: OpenRead
1b260 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
1b270 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f  ** Synopsis: roo
1b280 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a  t=P2 iDb=P3.**.*
1b290 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e  * Open a read-on
1b2a0 6c 79 20 63 75 72 73 6f 72 20 66 6f 72 20 74 68  ly cursor for th
1b2b0 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
1b2c0 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65   whose root page
1b2d0 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64   is.** P2 in a d
1b2e0 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54  atabase file.  T
1b2f0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
1b300 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
1b310 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20  y P3. .** P3==0 
1b320 6d 65 61 6e 73 20 74 68 65 20 6d 61 69 6e 20 64  means the main d
1b330 61 74 61 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d  atabase, P3==1 m
1b340 65 61 6e 73 20 74 68 65 20 64 61 74 61 62 61 73  eans the databas
1b350 65 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74  e used for .** t
1b360 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2c  emporary tables,
1b370 20 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73 20   and P3>1 means 
1b380 75 73 65 64 20 74 68 65 20 63 6f 72 72 65 73 70  used the corresp
1b390 6f 6e 64 69 6e 67 20 61 74 74 61 63 68 65 64 0a  onding attached.
1b3a0 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20 47 69  ** database.  Gi
1b3b0 76 65 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f  ve the new curso
1b3c0 72 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  r an identifier 
1b3d0 6f 66 20 50 31 2e 20 20 54 68 65 20 50 31 0a 2a  of P1.  The P1.*
1b3e0 2a 20 76 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f  * values need no
1b3f0 74 20 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 20  t be contiguous 
1b400 62 75 74 20 61 6c 6c 20 50 31 20 76 61 6c 75 65  but all P1 value
1b410 73 20 73 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c  s should be smal
1b420 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49  l integers..** I
1b430 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f  t is an error fo
1b440 72 20 50 31 20 74 6f 20 62 65 20 6e 65 67 61 74  r P1 to be negat
1b450 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ive..**.** If P5
1b460 21 3d 30 20 74 68 65 6e 20 75 73 65 20 74 68 65  !=0 then use the
1b470 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
1b480 73 74 65 72 20 50 32 20 61 73 20 74 68 65 20 72  ster P2 as the r
1b490 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a  oot page, not.**
1b4a0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50 32   the value of P2
1b4b0 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54   itself..**.** T
1b4c0 68 65 72 65 20 77 69 6c 6c 20 62 65 20 61 20 72  here will be a r
1b4d0 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 74 68 65 20  ead lock on the 
1b4e0 64 61 74 61 62 61 73 65 20 77 68 65 6e 65 76 65  database wheneve
1b4f0 72 20 74 68 65 72 65 20 69 73 20 61 6e 0a 2a 2a  r there is an.**
1b500 20 6f 70 65 6e 20 63 75 72 73 6f 72 2e 20 20 49   open cursor.  I
1b510 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77  f the database w
1b520 61 73 20 75 6e 6c 6f 63 6b 65 64 20 70 72 69 6f  as unlocked prio
1b530 72 20 74 6f 20 74 68 69 73 20 69 6e 73 74 72 75  r to this instru
1b540 63 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61 20  ction.** then a 
1b550 72 65 61 64 20 6c 6f 63 6b 20 69 73 20 61 63 71  read lock is acq
1b560 75 69 72 65 64 20 61 73 20 70 61 72 74 20 6f 66  uired as part of
1b570 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
1b580 6e 2e 20 20 41 20 72 65 61 64 0a 2a 2a 20 6c 6f  n.  A read.** lo
1b590 63 6b 20 61 6c 6c 6f 77 73 20 6f 74 68 65 72 20  ck allows other 
1b5a0 70 72 6f 63 65 73 73 65 73 20 74 6f 20 72 65 61  processes to rea
1b5b0 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 62  d the database b
1b5c0 75 74 20 70 72 6f 68 69 62 69 74 73 0a 2a 2a 20  ut prohibits.** 
1b5d0 61 6e 79 20 6f 74 68 65 72 20 70 72 6f 63 65 73  any other proces
1b5e0 73 20 66 72 6f 6d 20 6d 6f 64 69 66 79 69 6e 67  s from modifying
1b5f0 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20   the database.  
1b600 54 68 65 20 72 65 61 64 20 6c 6f 63 6b 20 69 73  The read lock is
1b610 0a 2a 2a 20 72 65 6c 65 61 73 65 64 20 77 68 65  .** released whe
1b620 6e 20 61 6c 6c 20 63 75 72 73 6f 72 73 20 61 72  n all cursors ar
1b630 65 20 63 6c 6f 73 65 64 2e 20 20 49 66 20 74 68  e closed.  If th
1b640 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  is instruction a
1b650 74 74 65 6d 70 74 73 0a 2a 2a 20 74 6f 20 67 65  ttempts.** to ge
1b660 74 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 62 75  t a read lock bu
1b670 74 20 66 61 69 6c 73 2c 20 74 68 65 20 73 63 72  t fails, the scr
1b680 69 70 74 20 74 65 72 6d 69 6e 61 74 65 73 20 77  ipt terminates w
1b690 69 74 68 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45  ith an.** SQLITE
1b6a0 5f 42 55 53 59 20 65 72 72 6f 72 20 63 6f 64 65  _BUSY error code
1b6b0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76  ..**.** The P4 v
1b6c0 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68  alue may be eith
1b6d0 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50  er an integer (P
1b6e0 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f  4_INT32) or a po
1b6f0 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65  inter to.** a Ke
1b700 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20  yInfo structure 
1b710 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66  (P4_KEYINFO). If
1b720 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72   it is a pointer
1b730 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a   to a KeyInfo .*
1b740 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74 68 65  * structure, the
1b750 6e 20 73 61 69 64 20 73 74 72 75 63 74 75 72 65  n said structure
1b760 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e   defines the con
1b770 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69  tent and collati
1b780 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20  ng .** sequence 
1b790 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62 65 69  of the index bei
1b7a0 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72  ng opened. Other
1b7b0 77 69 73 65 2c 20 69 66 20 50 34 20 69 73 20 61  wise, if P4 is a
1b7c0 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61  n integer .** va
1b7d0 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74 20 74  lue, it is set t
1b7e0 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
1b7f0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
1b800 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  able..**.** See 
1b810 61 6c 73 6f 3a 20 4f 70 65 6e 57 72 69 74 65 2c  also: OpenWrite,
1b820 20 52 65 6f 70 65 6e 49 64 78 0a 2a 2f 0a 2f 2a   ReopenIdx.*/./*
1b830 20 4f 70 63 6f 64 65 3a 20 52 65 6f 70 65 6e 49   Opcode: ReopenI
1b840 64 78 20 50 31 20 50 32 20 50 33 20 50 34 20 50  dx P1 P2 P3 P4 P
1b850 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  5.** Synopsis: r
1b860 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a  oot=P2 iDb=P3.**
1b870 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e 49 64  .** The ReopenId
1b880 78 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 65  x opcode works e
1b890 78 61 63 74 6c 79 20 6c 69 6b 65 20 52 65 61 64  xactly like Read
1b8a0 4f 70 65 6e 20 65 78 63 65 70 74 20 74 68 61 74  Open except that
1b8b0 20 69 74 20 66 69 72 73 74 0a 2a 2a 20 63 68 65   it first.** che
1b8c0 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74 68  cks to see if th
1b8d0 65 20 63 75 72 73 6f 72 20 6f 6e 20 50 31 20 69  e cursor on P1 i
1b8e0 73 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 77  s already open w
1b8f0 69 74 68 20 61 20 72 6f 6f 74 20 70 61 67 65 0a  ith a root page.
1b900 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 50 32 20  ** number of P2 
1b910 61 6e 64 20 69 66 20 69 74 20 69 73 20 74 68 69  and if it is thi
1b920 73 20 6f 70 63 6f 64 65 20 62 65 63 6f 6d 65 73  s opcode becomes
1b930 20 61 20 6e 6f 2d 6f 70 2e 20 20 49 6e 20 6f 74   a no-op.  In ot
1b940 68 65 72 20 77 6f 72 64 73 2c 0a 2a 2a 20 69 66  her words,.** if
1b950 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 61   the cursor is a
1b960 6c 72 65 61 64 79 20 6f 70 65 6e 2c 20 64 6f 20  lready open, do 
1b970 6e 6f 74 20 72 65 6f 70 65 6e 20 69 74 2e 0a 2a  not reopen it..*
1b980 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e 49  *.** The ReopenI
1b990 64 78 20 6f 70 63 6f 64 65 20 6d 61 79 20 6f 6e  dx opcode may on
1b9a0 6c 79 20 62 65 20 75 73 65 64 20 77 69 74 68 20  ly be used with 
1b9b0 50 35 3d 3d 30 20 61 6e 64 20 77 69 74 68 20 50  P5==0 and with P
1b9c0 34 20 62 65 69 6e 67 0a 2a 2a 20 61 20 50 34 5f  4 being.** a P4_
1b9d0 4b 45 59 49 4e 46 4f 20 6f 62 6a 65 63 74 2e 20  KEYINFO object. 
1b9e0 20 46 75 72 74 68 65 72 6d 6f 72 65 2c 20 74 68   Furthermore, th
1b9f0 65 20 50 33 20 76 61 6c 75 65 20 6d 75 73 74 20  e P3 value must 
1ba00 62 65 20 74 68 65 20 73 61 6d 65 20 61 73 0a 2a  be the same as.*
1ba10 2a 20 65 76 65 72 79 20 6f 74 68 65 72 20 52 65  * every other Re
1ba20 6f 70 65 6e 49 64 78 20 6f 72 20 4f 70 65 6e 52  openIdx or OpenR
1ba30 65 61 64 20 66 6f 72 20 74 68 65 20 73 61 6d 65  ead for the same
1ba40 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 0a   cursor number..
1ba50 2a 2a 0a 2a 2a 20 53 65 65 20 74 68 65 20 4f 70  **.** See the Op
1ba60 65 6e 52 65 61 64 20 6f 70 63 6f 64 65 20 64 6f  enRead opcode do
1ba70 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20  cumentation for 
1ba80 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
1ba90 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70  mation..*/./* Op
1baa0 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20  code: OpenWrite 
1bab0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
1bac0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74  * Synopsis: root
1bad0 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a  =P2 iDb=P3.**.**
1bae0 20 4f 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69   Open a read/wri
1baf0 74 65 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20  te cursor named 
1bb00 50 31 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20  P1 on the table 
1bb10 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72  or index whose r
1bb20 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50  oot.** page is P
1bb30 32 2e 20 20 4f 72 20 69 66 20 50 35 21 3d 30 20  2.  Or if P5!=0 
1bb40 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  use the content 
1bb50 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20 74  of register P2 t
1bb60 6f 20 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f  o find the.** ro
1bb70 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54  ot page..**.** T
1bb80 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20  he P4 value may 
1bb90 62 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74  be either an int
1bba0 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20  eger (P4_INT32) 
1bbb0 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a  or a pointer to.
1bbc0 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72  ** a KeyInfo str
1bbd0 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e  ucture (P4_KEYIN
1bbe0 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20  FO). If it is a 
1bbf0 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79  pointer to a Key
1bc00 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75  Info .** structu
1bc10 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74  re, then said st
1bc20 72 75 63 74 75 72 65 20 64 65 66 69 6e 65 73 20  ructure defines 
1bc30 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20  the content and 
1bc40 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65  collating .** se
1bc50 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e  quence of the in
1bc60 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64  dex being opened
1bc70 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20  . Otherwise, if 
1bc80 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  P4 is an integer
1bc90 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69   .** value, it i
1bca0 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d  s set to the num
1bcb0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
1bcc0 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 6f 72 20  n the table, or 
1bcd0 74 6f 20 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73  to the.** larges
1bce0 74 20 69 6e 64 65 78 20 6f 66 20 61 6e 79 20 63  t index of any c
1bcf0 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 74 61 62  olumn of the tab
1bd00 6c 65 20 74 68 61 74 20 69 73 20 61 63 74 75 61  le that is actua
1bd10 6c 6c 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  lly used..**.** 
1bd20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
1bd30 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
1bd40 20 4f 70 65 6e 52 65 61 64 20 65 78 63 65 70 74   OpenRead except
1bd50 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73 20 74   that it opens t
1bd60 68 65 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20  he cursor.** in 
1bd70 72 65 61 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e  read/write mode.
1bd80 20 20 46 6f 72 20 61 20 67 69 76 65 6e 20 74 61    For a given ta
1bd90 62 6c 65 2c 20 74 68 65 72 65 20 63 61 6e 20 62  ble, there can b
1bda0 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65  e one or more re
1bdb0 61 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f  ad-only.** curso
1bdc0 72 73 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 72  rs or a single r
1bdd0 65 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72  ead/write cursor
1bde0 20 62 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a   but not both..*
1bdf0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70  *.** See also Op
1be00 65 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20  enRead..*/.case 
1be10 4f 50 5f 52 65 6f 70 65 6e 49 64 78 3a 20 7b 0a  OP_ReopenIdx: {.
1be20 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20    int nField;.  
1be30 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
1be40 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 69  o;.  int p2;.  i
1be50 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 77 72  nt iDb;.  int wr
1be60 46 6c 61 67 3b 0a 20 20 42 74 72 65 65 20 2a 70  Flag;.  Btree *p
1be70 58 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  X;.  VdbeCursor 
1be80 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a 70 44 62  *pCur;.  Db *pDb
1be90 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
1bea0 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  ->p5==0 || pOp->
1beb0 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45  p5==OPFLAG_SEEKE
1bec0 51 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Q );.  assert( p
1bed0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b  Op->p4type==P4_K
1bee0 45 59 49 4e 46 4f 20 29 3b 0a 20 20 70 43 75 72  EYINFO );.  pCur
1bef0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1bf00 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 43 75 72  >p1];.  if( pCur
1bf10 20 26 26 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f   && pCur->pgnoRo
1bf20 6f 74 3d 3d 28 75 33 32 29 70 4f 70 2d 3e 70 32  ot==(u32)pOp->p2
1bf30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
1bf40 70 43 75 72 2d 3e 69 44 62 3d 3d 70 4f 70 2d 3e  pCur->iDb==pOp->
1bf50 70 33 20 29 3b 20 20 20 20 20 20 2f 2a 20 47 75  p3 );      /* Gu
1bf60 61 72 61 6e 74 65 65 64 20 62 79 20 74 68 65 20  aranteed by the 
1bf70 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a  code generator *
1bf80 2f 0a 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e 5f  /.    goto open_
1bf90 63 75 72 73 6f 72 5f 73 65 74 5f 68 69 6e 74 73  cursor_set_hints
1bfa0 3b 0a 20 20 7d 0a 20 20 2f 2a 20 49 66 20 74 68  ;.  }.  /* If th
1bfb0 65 20 63 75 72 73 6f 72 20 69 73 20 6e 6f 74 20  e cursor is not 
1bfc0 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 6f  currently open o
1bfd0 72 20 69 73 20 6f 70 65 6e 20 6f 6e 20 61 20 64  r is open on a d
1bfe0 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 69 6e  ifferent.  ** in
1bff0 64 65 78 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74  dex, then fall t
1c000 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 4f  hrough into OP_O
1c010 70 65 6e 52 65 61 64 20 74 6f 20 66 6f 72 63 65  penRead to force
1c020 20 61 20 72 65 6f 70 65 6e 20 2a 2f 0a 63 61 73   a reopen */.cas
1c030 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63  e OP_OpenRead:.c
1c040 61 73 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65  ase OP_OpenWrite
1c050 3a 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  :..  assert( pOp
1c060 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65  ->opcode==OP_Ope
1c070 6e 57 72 69 74 65 20 7c 7c 20 70 4f 70 2d 3e 70  nWrite || pOp->p
1c080 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  5==0 || pOp->p5=
1c090 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29  =OPFLAG_SEEKEQ )
1c0a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ;.  assert( p->b
1c0b0 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73  IsReader );.  as
1c0c0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
1c0d0 65 3d 3d 4f 50 5f 4f 70 65 6e 52 65 61 64 20 7c  e==OP_OpenRead |
1c0e0 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
1c0f0 50 5f 52 65 6f 70 65 6e 49 64 78 0a 20 20 20 20  P_ReopenIdx.    
1c100 20 20 20 20 20 20 7c 7c 20 70 2d 3e 72 65 61 64        || p->read
1c110 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 69 66  Only==0 );..  if
1c120 28 20 70 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a  ( p->expired ){.
1c130 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
1c140 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 3b 0a  ABORT_ROLLBACK;.
1c150 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1c160 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
1c170 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20 30 3b 0a  ..  nField = 0;.
1c180 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a    pKeyInfo = 0;.
1c190 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a    p2 = pOp->p2;.
1c1a0 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b    iDb = pOp->p3;
1c1b0 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d  .  assert( iDb>=
1c1c0 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62  0 && iDb<db->nDb
1c1d0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
1c1e0 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
1c1f0 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 20  eMask, iDb) );. 
1c200 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b   pDb = &db->aDb[
1c210 69 44 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62  iDb];.  pX = pDb
1c220 2d 3e 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28  ->pBt;.  assert(
1c230 20 70 58 21 3d 30 20 29 3b 0a 20 20 69 66 28 20   pX!=0 );.  if( 
1c240 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
1c250 4f 70 65 6e 57 72 69 74 65 20 29 7b 0a 20 20 20  OpenWrite ){.   
1c260 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f   assert( OPFLAG_
1c270 46 4f 52 44 45 4c 45 54 45 3d 3d 42 54 52 45 45  FORDELETE==BTREE
1c280 5f 46 4f 52 44 45 4c 45 54 45 20 29 3b 0a 20 20  _FORDELETE );.  
1c290 20 20 77 72 46 6c 61 67 20 3d 20 42 54 52 45 45    wrFlag = BTREE
1c2a0 5f 57 52 43 53 52 20 7c 20 28 70 4f 70 2d 3e 70  _WRCSR | (pOp->p
1c2b0 35 20 26 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45  5 & OPFLAG_FORDE
1c2c0 4c 45 54 45 29 3b 0a 20 20 20 20 61 73 73 65 72  LETE);.    asser
1c2d0 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  t( sqlite3Schema
1c2e0 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44  MutexHeld(db, iD
1c2f0 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28  b, 0) );.    if(
1c300 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66   pDb->pSchema->f
1c310 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e  ile_format < p->
1c320 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d  minWriteFileForm
1c330 61 74 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d  at ){.      p->m
1c340 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61  inWriteFileForma
1c350 74 20 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d 61  t = pDb->pSchema
1c360 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20  ->file_format;. 
1c370 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
1c380 20 20 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20    wrFlag = 0;.  
1c390 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  }.  if( pOp->p5 
1c3a0 26 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47  & OPFLAG_P2ISREG
1c3b0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
1c3c0 70 32 3e 30 20 29 3b 0a 20 20 20 20 61 73 73 65  p2>0 );.    asse
1c3d0 72 74 28 20 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d  rt( p2<=(p->nMem
1c3e0 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
1c3f0 20 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26   );.    pIn2 = &
1c400 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 61 73  aMem[p2];.    as
1c410 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
1c420 28 70 49 6e 32 29 20 29 3b 0a 20 20 20 20 61 73  (pIn2) );.    as
1c430 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61  sert( (pIn2->fla
1c440 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
1c450 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   );.    sqlite3V
1c460 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
1c470 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 32 20 3d  (pIn2);.    p2 =
1c480 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69 3b   (int)pIn2->u.i;
1c490 0a 20 20 20 20 2f 2a 20 54 68 65 20 70 32 20 76  .    /* The p2 v
1c4a0 61 6c 75 65 20 61 6c 77 61 79 73 20 63 6f 6d 65  alue always come
1c4b0 73 20 66 72 6f 6d 20 61 20 70 72 69 6f 72 20 4f  s from a prior O
1c4c0 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 6f 70  P_CreateTable op
1c4d0 63 6f 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a 20  code and.    ** 
1c4e0 74 68 61 74 20 6f 70 63 6f 64 65 20 77 69 6c 6c  that opcode will
1c4f0 20 61 6c 77 61 79 73 20 73 65 74 20 74 68 65 20   always set the 
1c500 70 32 20 76 61 6c 75 65 20 74 6f 20 32 20 6f 72  p2 value to 2 or
1c510 20 6d 6f 72 65 20 6f 72 20 65 6c 73 65 20 66 61   more or else fa
1c520 69 6c 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68  il..    ** If th
1c530 65 72 65 20 77 65 72 65 20 61 20 66 61 69 6c 75  ere were a failu
1c540 72 65 2c 20 74 68 65 20 70 72 65 70 61 72 65 64  re, the prepared
1c550 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64   statement would
1c560 20 68 61 76 65 20 68 61 6c 74 65 64 0a 20 20 20   have halted.   
1c570 20 2a 2a 20 62 65 66 6f 72 65 20 72 65 61 63 68   ** before reach
1c580 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75 63  ing this instruc
1c590 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 73 73  tion. */.    ass
1c5a0 65 72 74 28 20 70 32 3e 3d 32 20 29 3b 0a 20 20  ert( p2>=2 );.  
1c5b0 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74  }.  if( pOp->p4t
1c5c0 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20  ype==P4_KEYINFO 
1c5d0 29 7b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 20  ){.    pKeyInfo 
1c5e0 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  = pOp->p4.pKeyIn
1c5f0 66 6f 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  fo;.    assert( 
1c600 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45  pKeyInfo->enc==E
1c610 4e 43 28 64 62 29 20 29 3b 0a 20 20 20 20 61 73  NC(db) );.    as
1c620 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e  sert( pKeyInfo->
1c630 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20 6e 46  db==db );.    nF
1c640 69 65 6c 64 20 3d 20 70 4b 65 79 49 6e 66 6f 2d  ield = pKeyInfo-
1c650 3e 6e 41 6c 6c 46 69 65 6c 64 3b 0a 20 20 7d 65  >nAllField;.  }e
1c660 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 34 74  lse if( pOp->p4t
1c670 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 7b  ype==P4_INT32 ){
1c680 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f  .    nField = pO
1c690 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a 20 20 61  p->p4.i;.  }.  a
1c6a0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1c6b0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  0 );.  assert( n
1c6c0 46 69 65 6c 64 3e 3d 30 20 29 3b 0a 20 20 74 65  Field>=0 );.  te
1c6d0 73 74 63 61 73 65 28 20 6e 46 69 65 6c 64 3d 3d  stcase( nField==
1c6e0 30 20 29 3b 20 20 2f 2a 20 54 61 62 6c 65 20 77  0 );  /* Table w
1c6f0 69 74 68 20 49 4e 54 45 47 45 52 20 50 52 49 4d  ith INTEGER PRIM
1c700 41 52 59 20 4b 45 59 20 61 6e 64 20 6e 6f 74 68  ARY KEY and noth
1c710 69 6e 67 20 65 6c 73 65 20 2a 2f 0a 20 20 70 43  ing else */.  pC
1c720 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  ur = allocateCur
1c730 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
1c740 6e 46 69 65 6c 64 2c 20 69 44 62 2c 20 43 55 52  nField, iDb, CUR
1c750 54 59 50 45 5f 42 54 52 45 45 29 3b 0a 20 20 69  TYPE_BTREE);.  i
1c760 66 28 20 70 43 75 72 3d 3d 30 20 29 20 67 6f 74  f( pCur==0 ) got
1c770 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75 72  o no_mem;.  pCur
1c780 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
1c790 20 70 43 75 72 2d 3e 69 73 4f 72 64 65 72 65 64   pCur->isOrdered
1c7a0 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e 70 67   = 1;.  pCur->pg
1c7b0 6e 6f 52 6f 6f 74 20 3d 20 70 32 3b 0a 23 69 66  noRoot = p2;.#if
1c7c0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
1c7d0 0a 20 20 70 43 75 72 2d 3e 77 72 46 6c 61 67 20  .  pCur->wrFlag 
1c7e0 3d 20 77 72 46 6c 61 67 3b 0a 23 65 6e 64 69 66  = wrFlag;.#endif
1c7f0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
1c800 74 72 65 65 43 75 72 73 6f 72 28 70 58 2c 20 70  treeCursor(pX, p
1c810 32 2c 20 77 72 46 6c 61 67 2c 20 70 4b 65 79 49  2, wrFlag, pKeyI
1c820 6e 66 6f 2c 20 70 43 75 72 2d 3e 75 63 2e 70 43  nfo, pCur->uc.pC
1c830 75 72 73 6f 72 29 3b 0a 20 20 70 43 75 72 2d 3e  ursor);.  pCur->
1c840 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49  pKeyInfo = pKeyI
1c850 6e 66 6f 3b 0a 20 20 2f 2a 20 53 65 74 20 74 68  nfo;.  /* Set th
1c860 65 20 56 64 62 65 43 75 72 73 6f 72 2e 69 73 54  e VdbeCursor.isT
1c870 61 62 6c 65 20 76 61 72 69 61 62 6c 65 2e 20 50  able variable. P
1c880 72 65 76 69 6f 75 73 20 76 65 72 73 69 6f 6e 73  revious versions
1c890 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20   of.  ** SQLite 
1c8a0 75 73 65 64 20 74 6f 20 63 68 65 63 6b 20 69 66  used to check if
1c8b0 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 66   the root-page f
1c8c0 6c 61 67 73 20 77 65 72 65 20 73 61 6e 65 20 61  lags were sane a
1c8d0 74 20 74 68 69 73 20 70 6f 69 6e 74 0a 20 20 2a  t this point.  *
1c8e0 2a 20 61 6e 64 20 72 65 70 6f 72 74 20 64 61 74  * and report dat
1c8f0 61 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e  abase corruption
1c900 20 69 66 20 74 68 65 79 20 77 65 72 65 20 6e 6f   if they were no
1c910 74 2c 20 62 75 74 20 74 68 69 73 20 63 68 65 63  t, but this chec
1c920 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69 6e 63 65  k has.  ** since
1c930 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20   moved into the 
1c940 62 74 72 65 65 20 6c 61 79 65 72 2e 20 20 2a 2f  btree layer.  */
1c950 20 20 0a 20 20 70 43 75 72 2d 3e 69 73 54 61 62    .  pCur->isTab
1c960 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65  le = pOp->p4type
1c970 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 0a 6f  !=P4_KEYINFO;..o
1c980 70 65 6e 5f 63 75 72 73 6f 72 5f 73 65 74 5f 68  pen_cursor_set_h
1c990 69 6e 74 73 3a 0a 20 20 61 73 73 65 72 74 28 20  ints:.  assert( 
1c9a0 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 3d 3d  OPFLAG_BULKCSR==
1c9b0 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 20 29  BTREE_BULKLOAD )
1c9c0 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c  ;.  assert( OPFL
1c9d0 41 47 5f 53 45 45 4b 45 51 3d 3d 42 54 52 45 45  AG_SEEKEQ==BTREE
1c9e0 5f 53 45 45 4b 5f 45 51 20 29 3b 0a 20 20 74 65  _SEEK_EQ );.  te
1c9f0 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 20  stcase( pOp->p5 
1ca00 26 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52  & OPFLAG_BULKCSR
1ca10 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   );.#ifdef SQLIT
1ca20 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f  E_ENABLE_CURSOR_
1ca30 48 49 4e 54 53 0a 20 20 74 65 73 74 63 61 73 65  HINTS.  testcase
1ca40 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c  ( pOp->p2 & OPFL
1ca50 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a 23 65 6e  AG_SEEKEQ );.#en
1ca60 64 69 66 0a 20 20 73 71 6c 69 74 65 33 42 74 72  dif.  sqlite3Btr
1ca70 65 65 43 75 72 73 6f 72 48 69 6e 74 46 6c 61 67  eeCursorHintFlag
1ca80 73 28 70 43 75 72 2d 3e 75 63 2e 70 43 75 72 73  s(pCur->uc.pCurs
1ca90 6f 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  or,.            
1caa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cab0 20 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f     (pOp->p5 & (O
1cac0 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 7c 4f 50  PFLAG_BULKCSR|OP
1cad0 46 4c 41 47 5f 53 45 45 4b 45 51 29 29 29 3b 0a  FLAG_SEEKEQ)));.
1cae0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
1caf0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1cb00 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  or;.  break;.}..
1cb10 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 44  /* Opcode: OpenD
1cb20 75 70 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  up P1 P2 * * *.*
1cb30 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20  *.** Open a new 
1cb40 63 75 72 73 6f 72 20 50 31 20 74 68 61 74 20 70  cursor P1 that p
1cb50 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 61 6d  oints to the sam
1cb60 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  e ephemeral tabl
1cb70 65 20 61 73 0a 2a 2a 20 63 75 72 73 6f 72 20 50  e as.** cursor P
1cb80 32 2e 20 20 54 68 65 20 50 32 20 63 75 72 73 6f  2.  The P2 curso
1cb90 72 20 6d 75 73 74 20 68 61 76 65 20 62 65 65 6e  r must have been
1cba0 20 6f 70 65 6e 65 64 20 62 79 20 61 20 70 72 69   opened by a pri
1cbb0 6f 72 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  or OP_OpenEpheme
1cbc0 72 61 6c 0a 2a 2a 20 6f 70 63 6f 64 65 2e 20 20  ral.** opcode.  
1cbd0 4f 6e 6c 79 20 65 70 68 65 6d 65 72 61 6c 20 63  Only ephemeral c
1cbe0 75 72 73 6f 72 73 20 6d 61 79 20 62 65 20 64 75  ursors may be du
1cbf0 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  plicated..**.** 
1cc00 44 75 70 6c 69 63 61 74 65 20 65 70 68 65 6d 65  Duplicate epheme
1cc10 72 61 6c 20 63 75 72 73 6f 72 73 20 61 72 65 20  ral cursors are 
1cc20 75 73 65 64 20 66 6f 72 20 73 65 6c 66 2d 6a 6f  used for self-jo
1cc30 69 6e 73 20 6f 66 20 6d 61 74 65 72 69 61 6c 69  ins of materiali
1cc40 7a 65 64 20 76 69 65 77 73 2e 0a 2a 2f 0a 63 61  zed views..*/.ca
1cc50 73 65 20 4f 50 5f 4f 70 65 6e 44 75 70 3a 20 7b  se OP_OpenDup: {
1cc60 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1cc70 4f 72 69 67 3b 20 20 20 20 2f 2a 20 54 68 65 20  Orig;    /* The 
1cc80 6f 72 69 67 69 6e 61 6c 20 63 75 72 73 6f 72 20  original cursor 
1cc90 74 6f 20 62 65 20 64 75 70 6c 69 63 61 74 65 64  to be duplicated
1cca0 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
1ccb0 20 2a 70 43 78 3b 20 20 20 20 20 20 2f 2a 20 54   *pCx;      /* T
1ccc0 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20 2a 2f  he new cursor */
1ccd0 0a 0a 20 20 70 4f 72 69 67 20 3d 20 70 2d 3e 61  ..  pOrig = p->a
1cce0 70 43 73 72 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  pCsr[pOp->p2];. 
1ccf0 20 61 73 73 65 72 74 28 20 70 4f 72 69 67 2d 3e   assert( pOrig->
1cd00 70 42 74 78 21 3d 30 20 29 3b 20 20 2f 2a 20 4f  pBtx!=0 );  /* O
1cd10 6e 6c 79 20 65 70 68 65 6d 65 72 61 6c 20 63 75  nly ephemeral cu
1cd20 72 73 6f 72 73 20 63 61 6e 20 62 65 20 64 75 70  rsors can be dup
1cd30 6c 69 63 61 74 65 64 20 2a 2f 0a 0a 20 20 70 43  licated */..  pC
1cd40 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  x = allocateCurs
1cd50 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  or(p, pOp->p1, p
1cd60 4f 72 69 67 2d 3e 6e 46 69 65 6c 64 2c 20 2d 31  Orig->nField, -1
1cd70 2c 20 43 55 52 54 59 50 45 5f 42 54 52 45 45 29  , CURTYPE_BTREE)
1cd80 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29  ;.  if( pCx==0 )
1cd90 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
1cda0 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31  pCx->nullRow = 1
1cdb0 3b 0a 20 20 70 43 78 2d 3e 69 73 45 70 68 65 6d  ;.  pCx->isEphem
1cdc0 65 72 61 6c 20 3d 20 31 3b 0a 20 20 70 43 78 2d  eral = 1;.  pCx-
1cdd0 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 72 69  >pKeyInfo = pOri
1cde0 67 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 70  g->pKeyInfo;.  p
1cdf0 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f  Cx->isTable = pO
1ce00 72 69 67 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20  rig->isTable;.  
1ce10 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1ce20 65 43 75 72 73 6f 72 28 70 4f 72 69 67 2d 3e 70  eCursor(pOrig->p
1ce30 42 74 78 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54  Btx, MASTER_ROOT
1ce40 2c 20 42 54 52 45 45 5f 57 52 43 53 52 2c 0a 20  , BTREE_WRCSR,. 
1ce50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce60 20 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70 4b           pCx->pK
1ce70 65 79 49 6e 66 6f 2c 20 70 43 78 2d 3e 75 63 2e  eyInfo, pCx->uc.
1ce80 70 43 75 72 73 6f 72 29 3b 0a 20 20 2f 2a 20 54  pCursor);.  /* T
1ce90 68 65 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  he sqlite3BtreeC
1cea0 75 72 73 6f 72 28 29 20 72 6f 75 74 69 6e 65 20  ursor() routine 
1ceb0 63 61 6e 20 6f 6e 6c 79 20 66 61 69 6c 20 66 6f  can only fail fo
1cec0 72 20 74 68 65 20 66 69 72 73 74 20 63 75 72 73  r the first curs
1ced0 6f 72 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20 66  or.  ** opened f
1cee0 6f 72 20 61 20 64 61 74 61 62 61 73 65 2e 20 20  or a database.  
1cef0 53 69 6e 63 65 20 74 68 65 72 65 20 69 73 20 61  Since there is a
1cf00 6c 72 65 61 64 79 20 61 6e 20 6f 70 65 6e 20 63  lready an open c
1cf10 75 72 73 6f 72 20 77 68 65 6e 20 74 68 69 73 0a  ursor when this.
1cf20 20 20 2a 2a 20 6f 70 63 6f 64 65 20 69 73 20 72    ** opcode is r
1cf30 75 6e 2c 20 74 68 65 20 73 71 6c 69 74 65 33 42  un, the sqlite3B
1cf40 74 72 65 65 43 75 72 73 6f 72 28 29 20 63 61 6e  treeCursor() can
1cf50 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20 61 73  not fail */.  as
1cf60 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
1cf70 5f 4f 4b 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  _OK );.  break;.
1cf80 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  }.../* Opcode: O
1cf90 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 50 31 20  penEphemeral P1 
1cfa0 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 20 53 79  P2 * P4 P5.** Sy
1cfb0 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d  nopsis: nColumn=
1cfc0 50 32 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20  P2.**.** Open a 
1cfd0 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20 74 6f  new cursor P1 to
1cfe0 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62   a transient tab
1cff0 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f  le..** The curso
1d000 72 20 69 73 20 61 6c 77 61 79 73 20 6f 70 65 6e  r is always open
1d010 65 64 20 72 65 61 64 2f 77 72 69 74 65 20 65 76  ed read/write ev
1d020 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61  en if .** the ma
1d030 69 6e 20 64 61 74 61 62 61 73 65 20 69 73 20 72  in database is r
1d040 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 65  ead-only.  The e
1d050 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 74 61 62 6c  phemeral.** tabl
1d060 65 20 69 73 20 64 65 6c 65 74 65 64 20 61 75 74  e is deleted aut
1d070 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e 20  omatically when 
1d080 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 6c  the cursor is cl
1d090 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69  osed..**.** P2 i
1d0a0 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
1d0b0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 65  columns in the e
1d0c0 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 2e 0a  phemeral table..
1d0d0 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 70 6f  ** The cursor po
1d0e0 69 6e 74 73 20 74 6f 20 61 20 42 54 72 65 65 20  ints to a BTree 
1d0f0 74 61 62 6c 65 20 69 66 20 50 34 3d 3d 30 20 61  table if P4==0 a
1d100 6e 64 20 74 6f 20 61 20 42 54 72 65 65 20 69 6e  nd to a BTree in
1d110 64 65 78 0a 2a 2a 20 69 66 20 50 34 20 69 73 20  dex.** if P4 is 
1d120 6e 6f 74 20 30 2e 20 20 49 66 20 50 34 20 69 73  not 0.  If P4 is
1d130 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f   not NULL, it po
1d140 69 6e 74 73 20 74 6f 20 61 20 4b 65 79 49 6e 66  ints to a KeyInf
1d150 6f 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 74  o structure.** t
1d160 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 20  hat defines the 
1d170 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79 73 20 69  format of keys i
1d180 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a  n the index..**.
1d190 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61 6d 65  ** The P5 parame
1d1a0 74 65 72 20 63 61 6e 20 62 65 20 61 20 6d 61 73  ter can be a mas
1d1b0 6b 20 6f 66 20 74 68 65 20 42 54 52 45 45 5f 2a  k of the BTREE_*
1d1c0 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 0a 2a   flags defined.*
1d1d0 2a 20 69 6e 20 62 74 72 65 65 2e 68 2e 20 20 54  * in btree.h.  T
1d1e0 68 65 73 65 20 66 6c 61 67 73 20 63 6f 6e 74 72  hese flags contr
1d1f0 6f 6c 20 61 73 70 65 63 74 73 20 6f 66 20 74 68  ol aspects of th
1d200 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 0a 2a  e operation of.*
1d210 2a 20 74 68 65 20 62 74 72 65 65 2e 20 20 54 68  * the btree.  Th
1d220 65 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55  e BTREE_OMIT_JOU
1d230 52 4e 41 4c 20 61 6e 64 20 42 54 52 45 45 5f 53  RNAL and BTREE_S
1d240 49 4e 47 4c 45 20 66 6c 61 67 73 20 61 72 65 0a  INGLE flags are.
1d250 2a 2a 20 61 64 64 65 64 20 61 75 74 6f 6d 61 74  ** added automat
1d260 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70  ically..*/./* Op
1d270 63 6f 64 65 3a 20 4f 70 65 6e 41 75 74 6f 69 6e  code: OpenAutoin
1d280 64 65 78 20 50 31 20 50 32 20 2a 20 50 34 20 2a  dex P1 P2 * P4 *
1d290 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43  .** Synopsis: nC
1d2a0 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 54  olumn=P2.**.** T
1d2b0 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73  his opcode works
1d2c0 20 74 68 65 20 73 61 6d 65 20 61 73 20 4f 50 5f   the same as OP_
1d2d0 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 2e 20 20  OpenEphemeral.  
1d2e0 49 74 20 68 61 73 20 61 0a 2a 2a 20 64 69 66 66  It has a.** diff
1d2f0 65 72 65 6e 74 20 6e 61 6d 65 20 74 6f 20 64 69  erent name to di
1d300 73 74 69 6e 67 75 69 73 68 20 69 74 73 20 75 73  stinguish its us
1d310 65 2e 20 20 54 61 62 6c 65 73 20 63 72 65 61 74  e.  Tables creat
1d320 65 64 20 75 73 69 6e 67 0a 2a 2a 20 62 79 20 74  ed using.** by t
1d330 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20  his opcode will 
1d340 62 65 20 75 73 65 64 20 66 6f 72 20 61 75 74 6f  be used for auto
1d350 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65  matically create
1d360 64 20 74 72 61 6e 73 69 65 6e 74 0a 2a 2a 20 69  d transient.** i
1d370 6e 64 69 63 65 73 20 69 6e 20 6a 6f 69 6e 73 2e  ndices in joins.
1d380 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  .*/.case OP_Open
1d390 41 75 74 6f 69 6e 64 65 78 3a 20 0a 63 61 73 65  Autoindex: .case
1d3a0 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1d3b0 6c 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  l: {.  VdbeCurso
1d3c0 72 20 2a 70 43 78 3b 0a 20 20 4b 65 79 49 6e 66  r *pCx;.  KeyInf
1d3d0 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20  o *pKeyInfo;..  
1d3e0 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74  static const int
1d3f0 20 76 66 73 46 6c 61 67 73 20 3d 20 0a 20 20 20   vfsFlags = .   
1d400 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52     SQLITE_OPEN_R
1d410 45 41 44 57 52 49 54 45 20 7c 0a 20 20 20 20 20  EADWRITE |.     
1d420 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45   SQLITE_OPEN_CRE
1d430 41 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49  ATE |.      SQLI
1d440 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56  TE_OPEN_EXCLUSIV
1d450 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
1d460 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c  _OPEN_DELETEONCL
1d470 4f 53 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49  OSE |.      SQLI
1d480 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e  TE_OPEN_TRANSIEN
1d490 54 5f 44 42 3b 0a 20 20 61 73 73 65 72 74 28 20  T_DB;.  assert( 
1d4a0 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20  pOp->p1>=0 );.  
1d4b0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
1d4c0 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c  =0 );.  pCx = al
1d4d0 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
1d4e0 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32  pOp->p1, pOp->p2
1d4f0 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 42 54  , -1, CURTYPE_BT
1d500 52 45 45 29 3b 0a 20 20 69 66 28 20 70 43 78 3d  REE);.  if( pCx=
1d510 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1d520 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77  ;.  pCx->nullRow
1d530 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73 45   = 1;.  pCx->isE
1d540 70 68 65 6d 65 72 61 6c 20 3d 20 31 3b 0a 20 20  phemeral = 1;.  
1d550 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1d560 65 4f 70 65 6e 28 64 62 2d 3e 70 56 66 73 2c 20  eOpen(db->pVfs, 
1d570 30 2c 20 64 62 2c 20 26 70 43 78 2d 3e 70 42 74  0, db, &pCx->pBt
1d580 78 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  x, .            
1d590 20 20 20 20 20 20 20 20 20 20 20 20 42 54 52 45              BTRE
1d5a0 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 7c  E_OMIT_JOURNAL |
1d5b0 20 42 54 52 45 45 5f 53 49 4e 47 4c 45 20 7c 20   BTREE_SINGLE | 
1d5c0 70 4f 70 2d 3e 70 35 2c 20 76 66 73 46 6c 61 67  pOp->p5, vfsFlag
1d5d0 73 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  s);.  if( rc==SQ
1d5e0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72  LITE_OK ){.    r
1d5f0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1d600 42 65 67 69 6e 54 72 61 6e 73 28 70 43 78 2d 3e  BeginTrans(pCx->
1d610 70 42 74 78 2c 20 31 29 3b 0a 20 20 7d 0a 20 20  pBtx, 1);.  }.  
1d620 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
1d630 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 61  K ){.    /* If a
1d640 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78   transient index
1d650 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 63 72   is required, cr
1d660 65 61 74 65 20 69 74 20 62 79 20 63 61 6c 6c 69  eate it by calli
1d670 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  ng.    ** sqlite
1d680 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c  3BtreeCreateTabl
1d690 65 28 29 20 77 69 74 68 20 74 68 65 20 42 54 52  e() with the BTR
1d6a0 45 45 5f 42 4c 4f 42 4b 45 59 20 66 6c 61 67 20  EE_BLOBKEY flag 
1d6b0 62 65 66 6f 72 65 0a 20 20 20 20 2a 2a 20 6f 70  before.    ** op
1d6c0 65 6e 69 6e 67 20 69 74 2e 20 49 66 20 61 20 74  ening it. If a t
1d6d0 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 20 69  ransient table i
1d6e0 73 20 72 65 71 75 69 72 65 64 2c 20 6a 75 73 74  s required, just
1d6f0 20 75 73 65 20 74 68 65 0a 20 20 20 20 2a 2a 20   use the.    ** 
1d700 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72  automatically cr
1d710 65 61 74 65 64 20 74 61 62 6c 65 20 77 69 74 68  eated table with
1d720 20 72 6f 6f 74 2d 70 61 67 65 20 31 20 28 61 6e   root-page 1 (an
1d730 20 42 4c 4f 42 5f 49 4e 54 4b 45 59 20 74 61 62   BLOB_INTKEY tab
1d740 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  le)..    */.    
1d750 69 66 28 20 28 70 43 78 2d 3e 70 4b 65 79 49 6e  if( (pCx->pKeyIn
1d760 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 20 3d 20  fo = pKeyInfo = 
1d770 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
1d780 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e  )!=0 ){.      in
1d790 74 20 70 67 6e 6f 3b 0a 20 20 20 20 20 20 61 73  t pgno;.      as
1d7a0 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
1d7b0 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b  e==P4_KEYINFO );
1d7c0 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
1d7d0 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61  te3BtreeCreateTa
1d7e0 62 6c 65 28 70 43 78 2d 3e 70 42 74 78 2c 20 26  ble(pCx->pBtx, &
1d7f0 70 67 6e 6f 2c 20 42 54 52 45 45 5f 42 4c 4f 42  pgno, BTREE_BLOB
1d800 4b 45 59 20 7c 20 70 4f 70 2d 3e 70 35 29 3b 20  KEY | pOp->p5); 
1d810 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
1d820 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1d830 20 20 20 20 61 73 73 65 72 74 28 20 70 67 6e 6f      assert( pgno
1d840 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f 54 2b 31 20  ==MASTER_ROOT+1 
1d850 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
1d860 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d  t( pKeyInfo->db=
1d870 3d 64 62 20 29 3b 0a 20 20 20 20 20 20 20 20 61  =db );.        a
1d880 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d  ssert( pKeyInfo-
1d890 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b  >enc==ENC(db) );
1d8a0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
1d8b0 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
1d8c0 28 70 43 78 2d 3e 70 42 74 78 2c 20 70 67 6e 6f  (pCx->pBtx, pgno
1d8d0 2c 20 42 54 52 45 45 5f 57 52 43 53 52 2c 0a 20  , BTREE_WRCSR,. 
1d8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
1d900 4b 65 79 49 6e 66 6f 2c 20 70 43 78 2d 3e 75 63  KeyInfo, pCx->uc
1d910 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20  .pCursor);.     
1d920 20 7d 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73   }.      pCx->is
1d930 54 61 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20 7d  Table = 0;.    }
1d940 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d  else{.      rc =
1d950 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
1d960 73 6f 72 28 70 43 78 2d 3e 70 42 74 78 2c 20 4d  sor(pCx->pBtx, M
1d970 41 53 54 45 52 5f 52 4f 4f 54 2c 20 42 54 52 45  ASTER_ROOT, BTRE
1d980 45 5f 57 52 43 53 52 2c 0a 20 20 20 20 20 20 20  E_WRCSR,.       
1d990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d9a0 20 20 20 20 20 20 20 30 2c 20 70 43 78 2d 3e 75         0, pCx->u
1d9b0 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  c.pCursor);.    
1d9c0 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d    pCx->isTable =
1d9d0 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   1;.    }.  }.  
1d9e0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
1d9f0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1da00 3b 0a 20 20 70 43 78 2d 3e 69 73 4f 72 64 65 72  ;.  pCx->isOrder
1da10 65 64 20 3d 20 28 70 4f 70 2d 3e 70 35 21 3d 42  ed = (pOp->p5!=B
1da20 54 52 45 45 5f 55 4e 4f 52 44 45 52 45 44 29 3b  TREE_UNORDERED);
1da30 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1da40 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 4f 70  Opcode: SorterOp
1da50 65 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  en P1 P2 P3 P4 *
1da60 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
1da70 64 65 20 77 6f 72 6b 73 20 6c 69 6b 65 20 4f 50  de works like OP
1da80 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 65  _OpenEphemeral e
1da90 78 63 65 70 74 20 74 68 61 74 20 69 74 20 6f 70  xcept that it op
1daa0 65 6e 73 0a 2a 2a 20 61 20 74 72 61 6e 73 69 65  ens.** a transie
1dab0 6e 74 20 69 6e 64 65 78 20 74 68 61 74 20 69 73  nt index that is
1dac0 20 73 70 65 63 69 66 69 63 61 6c 6c 79 20 64 65   specifically de
1dad0 73 69 67 6e 65 64 20 74 6f 20 73 6f 72 74 20 6c  signed to sort l
1dae0 61 72 67 65 0a 2a 2a 20 74 61 62 6c 65 73 20 75  arge.** tables u
1daf0 73 69 6e 67 20 61 6e 20 65 78 74 65 72 6e 61 6c  sing an external
1db00 20 6d 65 72 67 65 2d 73 6f 72 74 20 61 6c 67 6f   merge-sort algo
1db10 72 69 74 68 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  rithm..**.** If 
1db20 61 72 67 75 6d 65 6e 74 20 50 33 20 69 73 20 6e  argument P3 is n
1db30 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74  on-zero, then it
1db40 20 69 6e 64 69 63 61 74 65 73 20 74 68 61 74 20   indicates that 
1db50 74 68 65 20 73 6f 72 74 65 72 20 6d 61 79 0a 2a  the sorter may.*
1db60 2a 20 61 73 73 75 6d 65 20 74 68 61 74 20 61 20  * assume that a 
1db70 73 74 61 62 6c 65 20 73 6f 72 74 20 63 6f 6e 73  stable sort cons
1db80 69 64 65 72 69 6e 67 20 74 68 65 20 66 69 72 73  idering the firs
1db90 74 20 50 33 20 66 69 65 6c 64 73 20 6f 66 20 65  t P3 fields of e
1dba0 61 63 68 0a 2a 2a 20 6b 65 79 20 69 73 20 73 75  ach.** key is su
1dbb0 66 66 69 63 69 65 6e 74 20 74 6f 20 70 72 6f 64  fficient to prod
1dbc0 75 63 65 20 74 68 65 20 72 65 71 75 69 72 65 64  uce the required
1dbd0 20 72 65 73 75 6c 74 73 2e 0a 2a 2f 0a 63 61 73   results..*/.cas
1dbe0 65 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 3a  e OP_SorterOpen:
1dbf0 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
1dc00 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28  *pCx;..  assert(
1dc10 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20   pOp->p1>=0 );. 
1dc20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
1dc30 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61  >=0 );.  pCx = a
1dc40 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c  llocateCursor(p,
1dc50 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
1dc60 32 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 53  2, -1, CURTYPE_S
1dc70 4f 52 54 45 52 29 3b 0a 20 20 69 66 28 20 70 43  ORTER);.  if( pC
1dc80 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  x==0 ) goto no_m
1dc90 65 6d 3b 0a 20 20 70 43 78 2d 3e 70 4b 65 79 49  em;.  pCx->pKeyI
1dca0 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b  nfo = pOp->p4.pK
1dcb0 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74  eyInfo;.  assert
1dcc0 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d  ( pCx->pKeyInfo-
1dcd0 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 61 73 73  >db==db );.  ass
1dce0 65 72 74 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e  ert( pCx->pKeyIn
1dcf0 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29  fo->enc==ENC(db)
1dd00 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
1dd10 65 33 56 64 62 65 53 6f 72 74 65 72 49 6e 69 74  e3VdbeSorterInit
1dd20 28 64 62 2c 20 70 4f 70 2d 3e 70 33 2c 20 70 43  (db, pOp->p3, pC
1dd30 78 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  x);.  if( rc ) g
1dd40 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1dd50 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
1dd60 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
1dd70 65 71 75 65 6e 63 65 54 65 73 74 20 50 31 20 50  equenceTest P1 P
1dd80 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
1dd90 73 69 73 3a 20 69 66 28 20 63 75 72 73 6f 72 5b  sis: if( cursor[
1dda0 50 31 5d 2e 63 74 72 2b 2b 20 29 20 70 63 20 3d  P1].ctr++ ) pc =
1ddb0 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20   P2.**.** P1 is 
1ddc0 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 2e  a sorter cursor.
1ddd0 20 49 66 20 74 68 65 20 73 65 71 75 65 6e 63 65   If the sequence
1dde0 20 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72   counter is curr
1ddf0 65 6e 74 6c 79 20 7a 65 72 6f 2c 20 6a 75 6d 70  ently zero, jump
1de00 0a 2a 2a 20 74 6f 20 50 32 2e 20 52 65 67 61 72  .** to P2. Regar
1de10 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72  dless of whether
1de20 20 6f 72 20 6e 6f 74 20 74 68 65 20 6a 75 6d 70   or not the jump
1de30 20 69 73 20 74 61 6b 65 6e 2c 20 69 6e 63 72 65   is taken, incre
1de40 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 74 68 65 20  ment the.** the 
1de50 73 65 71 75 65 6e 63 65 20 76 61 6c 75 65 2e 0a  sequence value..
1de60 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75 65  */.case OP_Seque
1de70 6e 63 65 54 65 73 74 3a 20 7b 0a 20 20 56 64 62  nceTest: {.  Vdb
1de80 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61  eCursor *pC;.  a
1de90 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1dea0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1deb0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
1dec0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1ded0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69  p1];.  assert( i
1dee0 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20  sSorter(pC) );. 
1def0 20 69 66 28 20 28 70 43 2d 3e 73 65 71 43 6f 75   if( (pC->seqCou
1df00 6e 74 2b 2b 29 3d 3d 30 20 29 7b 0a 20 20 20 20  nt++)==0 ){.    
1df10 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
1df20 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1df30 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
1df40 50 73 65 75 64 6f 20 50 31 20 50 32 20 50 33 20  Pseudo P1 P2 P3 
1df50 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
1df60 20 50 33 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 72   P3 columns in r
1df70 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20  [P2].**.** Open 
1df80 61 20 6e 65 77 20 63 75 72 73 6f 72 20 74 68 61  a new cursor tha
1df90 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66 61  t points to a fa
1dfa0 6b 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f  ke table that co
1dfb0 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a  ntains a single.
1dfc0 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74 61 2e 20  ** row of data. 
1dfd0 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   The content of 
1dfe0 74 68 61 74 20 6f 6e 65 20 72 6f 77 20 69 73 20  that one row is 
1dff0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 6d  the content of m
1e000 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69 73 74 65  emory.** registe
1e010 72 20 50 32 2e 20 20 49 6e 20 6f 74 68 65 72 20  r P2.  In other 
1e020 77 6f 72 64 73 2c 20 63 75 72 73 6f 72 20 50 31  words, cursor P1
1e030 20 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61   becomes an alia
1e040 73 20 66 6f 72 20 74 68 65 20 0a 2a 2a 20 4d 45  s for the .** ME
1e050 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 20 63  M_Blob content c
1e060 6f 6e 74 61 69 6e 65 64 20 69 6e 20 72 65 67 69  ontained in regi
1e070 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41  ster P2..**.** A
1e080 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 72   pseudo-table cr
1e090 65 61 74 65 64 20 62 79 20 74 68 69 73 20 6f 70  eated by this op
1e0a0 63 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20  code is used to 
1e0b0 68 6f 6c 64 20 61 20 73 69 6e 67 6c 65 0a 2a 2a  hold a single.**
1e0c0 20 72 6f 77 20 6f 75 74 70 75 74 20 66 72 6f 6d   row output from
1e0d0 20 74 68 65 20 73 6f 72 74 65 72 20 73 6f 20 74   the sorter so t
1e0e0 68 61 74 20 74 68 65 20 72 6f 77 20 63 61 6e 20  hat the row can 
1e0f0 62 65 20 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e  be decomposed in
1e100 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c  to.** individual
1e110 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74   columns using t
1e120 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  he OP_Column opc
1e130 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c  ode.  The OP_Col
1e140 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73  umn opcode.** is
1e150 20 74 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72   the only cursor
1e160 20 6f 70 63 6f 64 65 20 74 68 61 74 20 77 6f 72   opcode that wor
1e170 6b 73 20 77 69 74 68 20 61 20 70 73 65 75 64 6f  ks with a pseudo
1e180 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33  -table..**.** P3
1e190 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
1e1a0 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
1e1b0 72 65 63 6f 72 64 73 20 74 68 61 74 20 77 69 6c  records that wil
1e1c0 6c 20 62 65 20 73 74 6f 72 65 64 20 62 79 0a 2a  l be stored by.*
1e1d0 2a 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62  * the pseudo-tab
1e1e0 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  le..*/.case OP_O
1e1f0 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56  penPseudo: {.  V
1e200 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a  dbeCursor *pCx;.
1e210 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1e220 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  p1>=0 );.  asser
1e230 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 29 3b  t( pOp->p3>=0 );
1e240 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74  .  pCx = allocat
1e250 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
1e260 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c  p1, pOp->p3, -1,
1e270 20 43 55 52 54 59 50 45 5f 50 53 45 55 44 4f 29   CURTYPE_PSEUDO)
1e280 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29  ;.  if( pCx==0 )
1e290 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
1e2a0 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31  pCx->nullRow = 1
1e2b0 3b 0a 20 20 70 43 78 2d 3e 75 63 2e 70 73 65 75  ;.  pCx->uc.pseu
1e2c0 64 6f 54 61 62 6c 65 52 65 67 20 3d 20 70 4f 70  doTableReg = pOp
1e2d0 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54  ->p2;.  pCx->isT
1e2e0 61 62 6c 65 20 3d 20 31 3b 0a 20 20 61 73 73 65  able = 1;.  asse
1e2f0 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29  rt( pOp->p5==0 )
1e300 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1e310 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50   Opcode: Close P
1e320 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
1e330 43 6c 6f 73 65 20 61 20 63 75 72 73 6f 72 20 70  Close a cursor p
1e340 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64  reviously opened
1e350 20 61 73 20 50 31 2e 20 20 49 66 20 50 31 20 69   as P1.  If P1 i
1e360 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74  s not.** current
1e370 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e  ly open, this in
1e380 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61 20 6e  struction is a n
1e390 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  o-op..*/.case OP
1e3a0 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61 73 73 65  _Close: {.  asse
1e3b0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1e3c0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1e3d0 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69 74 65  rsor );.  sqlite
1e3e0 33 56 64 62 65 46 72 65 65 43 75 72 73 6f 72 28  3VdbeFreeCursor(
1e3f0 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  p, p->apCsr[pOp-
1e400 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73  >p1]);.  p->apCs
1e410 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a  r[pOp->p1] = 0;.
1e420 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 64    break;.}..#ifd
1e430 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
1e440 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f 4d 41 53  _COLUMN_USED_MAS
1e450 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c  K./* Opcode: Col
1e460 75 6d 6e 73 55 73 65 64 20 50 31 20 2a 20 2a 20  umnsUsed P1 * * 
1e470 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  P4 *.**.** This 
1e480 6f 70 63 6f 64 65 20 28 77 68 69 63 68 20 6f 6e  opcode (which on
1e490 6c 79 20 65 78 69 73 74 73 20 69 66 20 53 51 4c  ly exists if SQL
1e4a0 69 74 65 20 77 61 73 20 63 6f 6d 70 69 6c 65 64  ite was compiled
1e4b0 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f   with.** SQLITE_
1e4c0 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53  ENABLE_COLUMN_US
1e4d0 45 44 5f 4d 41 53 4b 29 20 69 64 65 6e 74 69 66  ED_MASK) identif
1e4e0 69 65 73 20 77 68 69 63 68 20 63 6f 6c 75 6d 6e  ies which column
1e4f0 73 20 6f 66 20 74 68 65 0a 2a 2a 20 74 61 62 6c  s of the.** tabl
1e500 65 20 6f 72 20 69 6e 64 65 78 20 66 6f 72 20 63  e or index for c
1e510 75 72 73 6f 72 20 50 31 20 61 72 65 20 75 73 65  ursor P1 are use
1e520 64 2e 20 20 50 34 20 69 73 20 61 20 36 34 2d 62  d.  P4 is a 64-b
1e530 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20 28 50  it integer.** (P
1e540 34 5f 49 4e 54 36 34 29 20 69 6e 20 77 68 69 63  4_INT64) in whic
1e550 68 20 74 68 65 20 66 69 72 73 74 20 36 33 20 62  h the first 63 b
1e560 69 74 73 20 61 72 65 20 6f 6e 65 20 66 6f 72 20  its are one for 
1e570 65 61 63 68 20 6f 66 20 74 68 65 0a 2a 2a 20 66  each of the.** f
1e580 69 72 73 74 20 36 33 20 63 6f 6c 75 6d 6e 73 20  irst 63 columns 
1e590 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  of the table or 
1e5a0 69 6e 64 65 78 20 74 68 61 74 20 61 72 65 20 61  index that are a
1e5b0 63 74 75 61 6c 6c 79 20 75 73 65 64 0a 2a 2a 20  ctually used.** 
1e5c0 62 79 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20  by the cursor.  
1e5d0 54 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62  The high-order b
1e5e0 69 74 20 69 73 20 73 65 74 20 69 66 20 61 6e 79  it is set if any
1e5f0 20 63 6f 6c 75 6d 6e 20 61 66 74 65 72 0a 2a 2a   column after.**
1e600 20 74 68 65 20 36 34 74 68 20 69 73 20 75 73 65   the 64th is use
1e610 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  d..*/.case OP_Co
1e620 6c 75 6d 6e 73 55 73 65 64 3a 20 7b 0a 20 20 56  lumnsUsed: {.  V
1e630 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
1e640 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
1e650 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
1e660 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
1e670 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
1e680 3b 0a 20 20 70 43 2d 3e 6d 61 73 6b 55 73 65 64  ;.  pC->maskUsed
1e690 20 3d 20 2a 28 75 36 34 2a 29 70 4f 70 2d 3e 70   = *(u64*)pOp->p
1e6a0 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b  4.pI64;.  break;
1e6b0 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70  .}.#endif../* Op
1e6c0 63 6f 64 65 3a 20 53 65 65 6b 47 45 20 50 31 20  code: SeekGE P1 
1e6d0 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
1e6e0 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
1e6f0 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  @P4].**.** If cu
1e700 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
1e710 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
1e720 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
1e730 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
1e740 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
1e750 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
1e760 20 61 73 20 74 68 65 20 6b 65 79 2e 20 20 49 66   as the key.  If
1e770 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1e780 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20  s .** to an SQL 
1e790 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69  index, then P3 i
1e7a0 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61  s the first in a
1e7b0 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65  n array of P4 re
1e7c0 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74  gisters .** that
1e7d0 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20   are used as an 
1e7e0 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
1e7f0 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73  ey. .**.** Repos
1e800 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ition cursor P1 
1e810 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e  so that  it poin
1e820 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65  ts to the smalle
1e830 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
1e840 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  * is greater tha
1e850 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
1e860 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20  e key value. If 
1e870 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
1e880 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61 74 65 72  ords .** greater
1e890 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
1e8a0 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32  o the key and P2
1e8b0 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
1e8c0 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
1e8d0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 75 72 73  *.** If the curs
1e8e0 6f 72 20 50 31 20 77 61 73 20 6f 70 65 6e 65 64  or P1 was opened
1e8f0 20 75 73 69 6e 67 20 74 68 65 20 4f 50 46 4c 41   using the OPFLA
1e900 47 5f 53 45 45 4b 45 51 20 66 6c 61 67 2c 20 74  G_SEEKEQ flag, t
1e910 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f  hen this.** opco
1e920 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 6c  de will always l
1e930 61 6e 64 20 6f 6e 20 61 20 72 65 63 6f 72 64 20  and on a record 
1e940 74 68 61 74 20 65 71 75 61 6c 6c 79 20 65 71 75  that equally equ
1e950 61 6c 73 20 74 68 65 20 6b 65 79 2c 20 6f 72 0a  als the key, or.
1e960 2a 2a 20 65 6c 73 65 20 6a 75 6d 70 20 69 6d 6d  ** else jump imm
1e970 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20  ediately to P2. 
1e980 20 57 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72   When the cursor
1e990 20 69 73 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45   is OPFLAG_SEEKE
1e9a0 51 2c 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64  Q, this.** opcod
1e9b0 65 20 6d 75 73 74 20 62 65 20 66 6f 6c 6c 6f 77  e must be follow
1e9c0 65 64 20 62 79 20 61 6e 20 49 64 78 4c 45 20 6f  ed by an IdxLE o
1e9d0 70 63 6f 64 65 20 77 69 74 68 20 74 68 65 20 73  pcode with the s
1e9e0 61 6d 65 20 61 72 67 75 6d 65 6e 74 73 2e 0a 2a  ame arguments..*
1e9f0 2a 20 54 68 65 20 49 64 78 4c 45 20 6f 70 63 6f  * The IdxLE opco
1ea00 64 65 20 77 69 6c 6c 20 62 65 20 73 6b 69 70 70  de will be skipp
1ea10 65 64 20 69 66 20 74 68 69 73 20 6f 70 63 6f 64  ed if this opcod
1ea20 65 20 73 75 63 63 65 65 64 73 2c 20 62 75 74 20  e succeeds, but 
1ea30 74 68 65 0a 2a 2a 20 49 64 78 4c 45 20 6f 70 63  the.** IdxLE opc
1ea40 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64  ode will be used
1ea50 20 6f 6e 20 73 75 62 73 65 71 75 65 6e 74 20 6c   on subsequent l
1ea60 6f 6f 70 20 69 74 65 72 61 74 69 6f 6e 73 2e 0a  oop iterations..
1ea70 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
1ea80 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  e leaves the cur
1ea90 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74  sor configured t
1eaa0 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72  o move in forwar
1eab0 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d  d order,.** from
1eac0 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74   the beginning t
1ead0 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20  oward the end.  
1eae0 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
1eaf0 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a  the cursor is.**
1eb00 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75   configured to u
1eb10 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65  se Next, not Pre
1eb20 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  v..**.** See als
1eb30 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
1eb40 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b  nd, SeekLt, Seek
1eb50 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a  Gt, SeekLe.*/./*
1eb60 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 54 20   Opcode: SeekGT 
1eb70 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1eb80 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
1eb90 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
1eba0 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1ebb0 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c  s to an SQL tabl
1ebc0 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75  e (B-Tree that u
1ebd0 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73  ses integer keys
1ebe0 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76  ), .** use the v
1ebf0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
1ec00 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66   P3 as a key. If
1ec10 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1ec20 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20  s .** to an SQL 
1ec30 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69  index, then P3 i
1ec40 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61  s the first in a
1ec50 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65  n array of P4 re
1ec60 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74  gisters .** that
1ec70 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20   are used as an 
1ec80 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
1ec90 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73  ey. .**.** Repos
1eca0 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ition cursor P1 
1ecb0 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e  so that  it poin
1ecc0 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65  ts to the smalle
1ecd0 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
1ece0 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  * is greater tha
1ecf0 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e  n the key value.
1ed00 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
1ed10 20 72 65 63 6f 72 64 73 20 67 72 65 61 74 65 72   records greater
1ed20 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65   than .** the ke
1ed30 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20  y and P2 is not 
1ed40 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20  zero, then jump 
1ed50 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  to P2..**.** Thi
1ed60 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20  s opcode leaves 
1ed70 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69  the cursor confi
1ed80 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e  gured to move in
1ed90 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a   forward order,.
1eda0 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69  ** from the begi
1edb0 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65  nning toward the
1edc0 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20   end.  In other 
1edd0 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f  words, the curso
1ede0 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72  r is.** configur
1edf0 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20  ed to use Next, 
1ee00 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20  not Prev..**.** 
1ee10 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
1ee20 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c   NotFound, SeekL
1ee30 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c  t, SeekGe, SeekL
1ee40 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
1ee50 53 65 65 6b 4c 54 20 50 31 20 50 32 20 50 33 20  SeekLT P1 P2 P3 
1ee60 50 34 20 2a 20 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 * .** Synopsi
1ee70 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
1ee80 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
1ee90 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
1eea0 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
1eeb0 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
1eec0 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
1eed0 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  se the value in 
1eee0 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61  register P3 as a
1eef0 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20   key. If cursor 
1ef00 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f  P1 refers .** to
1ef10 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74   an SQL index, t
1ef20 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69  hen P3 is the fi
1ef30 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20  rst in an array 
1ef40 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
1ef50 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65  .** that are use
1ef60 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64  d as an unpacked
1ef70 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a   index key. .**.
1ef80 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75  ** Reposition cu
1ef90 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
1efa0 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
1efb0 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20  e largest entry 
1efc0 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73  that .** is less
1efd0 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61   than the key va
1efe0 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
1eff0 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c 65 73  e no records les
1f000 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b  s than .** the k
1f010 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74  ey and P2 is not
1f020 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70   zero, then jump
1f030 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68   to P2..**.** Th
1f040 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
1f050 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66   the cursor conf
1f060 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69  igured to move i
1f070 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c  n reverse order,
1f080 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64  .** from the end
1f090 20 74 6f 77 61 72 64 20 74 68 65 20 62 65 67 69   toward the begi
1f0a0 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72  nning.  In other
1f0b0 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73   words, the curs
1f0c0 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  or is.** configu
1f0d0 72 65 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c  red to use Prev,
1f0e0 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a   not Next..**.**
1f0f0 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
1f100 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b  , NotFound, Seek
1f110 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b  Gt, SeekGe, Seek
1f120 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  Le.*/./* Opcode:
1f130 20 53 65 65 6b 4c 45 20 50 31 20 50 32 20 50 33   SeekLE P1 P2 P3
1f140 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
1f150 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
1f160 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
1f170 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
1f180 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
1f190 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
1f1a0 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
1f1b0 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  se the value in 
1f1c0 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61  register P3 as a
1f1d0 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20   key. If cursor 
1f1e0 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f  P1 refers .** to
1f1f0 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74   an SQL index, t
1f200 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69  hen P3 is the fi
1f210 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20  rst in an array 
1f220 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
1f230 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65  .** that are use
1f240 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64  d as an unpacked
1f250 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a   index key. .**.
1f260 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75  ** Reposition cu
1f270 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
1f280 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
1f290 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74   largest entry t
1f2a0 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20  hat .** is less 
1f2b0 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
1f2c0 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
1f2d0 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
1f2e0 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65 73 73  records .** less
1f2f0 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
1f300 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32  o the key and P2
1f310 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
1f320 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
1f330 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
1f340 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
1f350 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  or configured to
1f360 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65   move in reverse
1f370 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20   order,.** from 
1f380 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74  the end toward t
1f390 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49  he beginning.  I
1f3a0 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
1f3b0 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20  he cursor is.** 
1f3c0 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73  configured to us
1f3d0 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74  e Prev, not Next
1f3e0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63  ..**.** If the c
1f3f0 75 72 73 6f 72 20 50 31 20 77 61 73 20 6f 70 65  ursor P1 was ope
1f400 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50  ned using the OP
1f410 46 4c 41 47 5f 53 45 45 4b 45 51 20 66 6c 61 67  FLAG_SEEKEQ flag
1f420 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f  , then this.** o
1f430 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79  pcode will alway
1f440 73 20 6c 61 6e 64 20 6f 6e 20 61 20 72 65 63 6f  s land on a reco
1f450 72 64 20 74 68 61 74 20 65 71 75 61 6c 6c 79 20  rd that equally 
1f460 65 71 75 61 6c 73 20 74 68 65 20 6b 65 79 2c 20  equals the key, 
1f470 6f 72 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d 70 20  or.** else jump 
1f480 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
1f490 32 2e 20 20 57 68 65 6e 20 74 68 65 20 63 75 72  2.  When the cur
1f4a0 73 6f 72 20 69 73 20 4f 50 46 4c 41 47 5f 53 45  sor is OPFLAG_SE
1f4b0 45 4b 45 51 2c 20 74 68 69 73 0a 2a 2a 20 6f 70  EKEQ, this.** op
1f4c0 63 6f 64 65 20 6d 75 73 74 20 62 65 20 66 6f 6c  code must be fol
1f4d0 6c 6f 77 65 64 20 62 79 20 61 6e 20 49 64 78 47  lowed by an IdxG
1f4e0 45 20 6f 70 63 6f 64 65 20 77 69 74 68 20 74 68  E opcode with th
1f4f0 65 20 73 61 6d 65 20 61 72 67 75 6d 65 6e 74 73  e same arguments
1f500 2e 0a 2a 2a 20 54 68 65 20 49 64 78 47 45 20 6f  ..** The IdxGE o
1f510 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 6b  pcode will be sk
1f520 69 70 70 65 64 20 69 66 20 74 68 69 73 20 6f 70  ipped if this op
1f530 63 6f 64 65 20 73 75 63 63 65 65 64 73 2c 20 62  code succeeds, b
1f540 75 74 20 74 68 65 0a 2a 2a 20 49 64 78 47 45 20  ut the.** IdxGE 
1f550 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75  opcode will be u
1f560 73 65 64 20 6f 6e 20 73 75 62 73 65 71 75 65 6e  sed on subsequen
1f570 74 20 6c 6f 6f 70 20 69 74 65 72 61 74 69 6f 6e  t loop iteration
1f580 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  s..**.** See als
1f590 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
1f5a0 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b  nd, SeekGt, Seek
1f5b0 47 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61  Ge, SeekLt.*/.ca
1f5c0 73 65 20 4f 50 5f 53 65 65 6b 4c 54 3a 20 20 20  se OP_SeekLT:   
1f5d0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1f5e0 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  n3 */.case OP_Se
1f5f0 65 6b 4c 45 3a 20 20 20 20 20 20 20 20 20 2f 2a  ekLE:         /*
1f600 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61   jump, in3 */.ca
1f610 73 65 20 4f 50 5f 53 65 65 6b 47 45 3a 20 20 20  se OP_SeekGE:   
1f620 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1f630 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  n3 */.case OP_Se
1f640 65 6b 47 54 3a 20 7b 20 20 20 20 20 20 20 2f 2a  ekGT: {       /*
1f650 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
1f660 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20  int res;        
1f670 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e     /* Comparison
1f680 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 69 6e 74   result */.  int
1f690 20 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20 20   oc;            
1f6a0 2f 2a 20 4f 70 63 6f 64 65 20 2a 2f 0a 20 20 56  /* Opcode */.  V
1f6b0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20  dbeCursor *pC;  
1f6c0 20 20 2f 2a 20 54 68 65 20 63 75 72 73 6f 72 20    /* The cursor 
1f6d0 74 6f 20 73 65 65 6b 20 2a 2f 0a 20 20 55 6e 70  to seek */.  Unp
1f6e0 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 20 20  ackedRecord r;  
1f6f0 2f 2a 20 54 68 65 20 6b 65 79 20 74 6f 20 73 65  /* The key to se
1f700 65 6b 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20  ek for */.  int 
1f710 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 2f  nField;        /
1f720 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
1f730 6d 6e 73 20 6f 72 20 66 69 65 6c 64 73 20 69 6e  mns or fields in
1f740 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20 69 36   the key */.  i6
1f750 34 20 69 4b 65 79 3b 20 20 20 20 20 20 20 20 20  4 iKey;         
1f760 20 2f 2a 20 54 68 65 20 72 6f 77 69 64 20 77 65   /* The rowid we
1f770 20 61 72 65 20 74 6f 20 73 65 65 6b 20 74 6f 20   are to seek to 
1f780 2a 2f 0a 20 20 69 6e 74 20 65 71 4f 6e 6c 79 3b  */.  int eqOnly;
1f790 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20          /* Only 
1f7a0 69 6e 74 65 72 65 73 74 65 64 20 69 6e 20 3d 3d  interested in ==
1f7b0 20 72 65 73 75 6c 74 73 20 2a 2f 0a 0a 20 20 61   results */..  a
1f7c0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1f7d0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1f7e0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
1f7f0 65 72 74 28 20 70 4f 70 2d 3e 70 32 21 3d 30 20  ert( pOp->p2!=0 
1f800 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1f810 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1f820 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1f830 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
1f840 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
1f850 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72  BTREE );.  asser
1f860 74 28 20 4f 50 5f 53 65 65 6b 4c 45 20 3d 3d 20  t( OP_SeekLE == 
1f870 4f 50 5f 53 65 65 6b 4c 54 2b 31 20 29 3b 0a 20  OP_SeekLT+1 );. 
1f880 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
1f890 47 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b  GE == OP_SeekLT+
1f8a0 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f  2 );.  assert( O
1f8b0 50 5f 53 65 65 6b 47 54 20 3d 3d 20 4f 50 5f 53  P_SeekGT == OP_S
1f8c0 65 65 6b 4c 54 2b 33 20 29 3b 0a 20 20 61 73 73  eekLT+3 );.  ass
1f8d0 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72  ert( pC->isOrder
1f8e0 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ed );.  assert( 
1f8f0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d  pC->uc.pCursor!=
1f900 30 20 29 3b 0a 20 20 6f 63 20 3d 20 70 4f 70 2d  0 );.  oc = pOp-
1f910 3e 6f 70 63 6f 64 65 3b 0a 20 20 65 71 4f 6e 6c  >opcode;.  eqOnl
1f920 79 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 6e 75 6c  y = 0;.  pC->nul
1f930 6c 52 6f 77 20 3d 20 30 3b 0a 23 69 66 64 65 66  lRow = 0;.#ifdef
1f940 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
1f950 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70  pC->seekOp = pOp
1f960 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66  ->opcode;.#endif
1f970 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61  ..  if( pC->isTa
1f980 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  ble ){.    /* Th
1f990 65 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 20  e BTREE_SEEK_EQ 
1f9a0 66 6c 61 67 20 69 73 20 6f 6e 6c 79 20 73 65 74  flag is only set
1f9b0 20 6f 6e 20 69 6e 64 65 78 20 63 75 72 73 6f 72   on index cursor
1f9c0 73 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28  s */.    assert(
1f9d0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
1f9e0 73 6f 72 48 61 73 48 69 6e 74 28 70 43 2d 3e 75  sorHasHint(pC->u
1f9f0 63 2e 70 43 75 72 73 6f 72 2c 20 42 54 52 45 45  c.pCursor, BTREE
1fa00 5f 53 45 45 4b 5f 45 51 29 3d 3d 30 0a 20 20 20  _SEEK_EQ)==0.   
1fa10 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 43 4f             || CO
1fa20 52 52 55 50 54 5f 44 42 20 29 3b 0a 0a 20 20 20  RRUPT_DB );..   
1fa30 20 2f 2a 20 54 68 65 20 69 6e 70 75 74 20 76 61   /* The input va
1fa40 6c 75 65 20 69 6e 20 50 33 20 6d 69 67 68 74 20  lue in P3 might 
1fa50 62 65 20 6f 66 20 61 6e 79 20 74 79 70 65 3a 20  be of any type: 
1fa60 69 6e 74 65 67 65 72 2c 20 72 65 61 6c 2c 20 73  integer, real, s
1fa70 74 72 69 6e 67 2c 0a 20 20 20 20 2a 2a 20 62 6c  tring,.    ** bl
1fa80 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20 42 75  ob, or NULL.  Bu
1fa90 74 20 69 74 20 6e 65 65 64 73 20 74 6f 20 62 65  t it needs to be
1faa0 20 61 6e 20 69 6e 74 65 67 65 72 20 62 65 66 6f   an integer befo
1fab0 72 65 20 77 65 20 63 61 6e 20 64 6f 0a 20 20 20  re we can do.   
1fac0 20 2a 2a 20 74 68 65 20 73 65 65 6b 2c 20 73 6f   ** the seek, so
1fad0 20 63 6f 6e 76 65 72 74 20 69 74 2e 20 2a 2f 0a   convert it. */.
1fae0 20 20 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d      pIn3 = &aMem
1faf0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 69  [pOp->p3];.    i
1fb00 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  f( (pIn3->flags 
1fb10 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
1fb20 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d  eal|MEM_Str))==M
1fb30 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20  EM_Str ){.      
1fb40 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
1fb50 6e 69 74 79 28 70 49 6e 33 2c 20 30 29 3b 0a 20  nity(pIn3, 0);. 
1fb60 20 20 20 7d 0a 20 20 20 20 69 4b 65 79 20 3d 20     }.    iKey = 
1fb70 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
1fb80 6c 75 65 28 70 49 6e 33 29 3b 0a 0a 20 20 20 20  lue(pIn3);..    
1fb90 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c  /* If the P3 val
1fba0 75 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20  ue could not be 
1fbb0 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61  converted into a
1fbc0 6e 20 69 6e 74 65 67 65 72 20 77 69 74 68 6f 75  n integer withou
1fbd0 74 0a 20 20 20 20 2a 2a 20 6c 6f 73 73 20 6f 66  t.    ** loss of
1fbe0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68   information, th
1fbf0 65 6e 20 73 70 65 63 69 61 6c 20 70 72 6f 63 65  en special proce
1fc00 73 73 69 6e 67 20 69 73 20 72 65 71 75 69 72 65  ssing is require
1fc10 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20  d... */.    if( 
1fc20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
1fc30 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20  EM_Int)==0 ){.  
1fc40 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66      if( (pIn3->f
1fc50 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29  lags & MEM_Real)
1fc60 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  ==0 ){.        /
1fc70 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75  * If the P3 valu
1fc80 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76  e cannot be conv
1fc90 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b  erted into any k
1fca0 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c  ind of a number,
1fcb0 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e  .        ** then
1fcc0 20 74 68 65 20 73 65 65 6b 20 69 73 20 6e 6f 74   the seek is not
1fcd0 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75   possible, so ju
1fce0 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20  mp to P2 */.    
1fcf0 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
1fd00 6b 65 6e 28 31 2c 32 29 3b 20 67 6f 74 6f 20 6a  ken(1,2); goto j
1fd10 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20  ump_to_p2;.     
1fd20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
1fd30 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74  }..      /* If t
1fd40 68 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e  he approximation
1fd50 20 69 4b 65 79 20 69 73 20 6c 61 72 67 65 72 20   iKey is larger 
1fd60 74 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20  than the actual 
1fd70 72 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20  real search.    
1fd80 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74    ** term, subst
1fd90 69 74 75 74 65 20 3e 3d 20 66 6f 72 20 3e 20 61  itute >= for > a
1fda0 6e 64 20 3c 20 66 6f 72 20 3c 3d 2e 20 65 2e 67  nd < for <=. e.g
1fdb0 2e 20 69 66 20 74 68 65 20 73 65 61 72 63 68 20  . if the search 
1fdc0 74 65 72 6d 0a 20 20 20 20 20 20 2a 2a 20 69 73  term.      ** is
1fdd0 20 34 2e 39 20 61 6e 64 20 74 68 65 20 69 6e 74   4.9 and the int
1fde0 65 67 65 72 20 61 70 70 72 6f 78 69 6d 61 74 69  eger approximati
1fdf0 6f 6e 20 35 3a 0a 20 20 20 20 20 20 2a 2a 0a 20  on 5:.      **. 
1fe00 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 28       **        (
1fe10 78 20 3e 20 20 34 2e 39 29 20 20 20 20 2d 3e 20  x >  4.9)    -> 
1fe20 20 20 20 20 28 78 20 3e 3d 20 35 29 0a 20 20 20      (x >= 5).   
1fe30 20 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78 20     **        (x 
1fe40 3c 3d 20 34 2e 39 29 20 20 20 20 2d 3e 20 20 20  <= 4.9)    ->   
1fe50 20 20 28 78 20 3c 20 20 35 29 0a 20 20 20 20 20    (x <  5).     
1fe60 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 49   */.      if( pI
1fe70 6e 33 2d 3e 75 2e 72 3c 28 64 6f 75 62 6c 65 29  n3->u.r<(double)
1fe80 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20  iKey ){.        
1fe90 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47  assert( OP_SeekG
1fea0 45 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 2d 31 29  E==(OP_SeekGT-1)
1feb0 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
1fec0 72 74 28 20 4f 50 5f 53 65 65 6b 4c 54 3d 3d 28  rt( OP_SeekLT==(
1fed0 4f 50 5f 53 65 65 6b 4c 45 2d 31 29 20 29 3b 0a  OP_SeekLE-1) );.
1fee0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1fef0 28 4f 50 5f 53 65 65 6b 4c 45 20 26 20 30 78 30  (OP_SeekLE & 0x0
1ff00 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54  001)==(OP_SeekGT
1ff10 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20   & 0x0001) );.  
1ff20 20 20 20 20 20 20 69 66 28 20 28 6f 63 20 26 20        if( (oc & 
1ff30 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65  0x0001)==(OP_See
1ff40 6b 47 54 20 26 20 30 78 30 30 30 31 29 20 29 20  kGT & 0x0001) ) 
1ff50 6f 63 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  oc--;.      }.. 
1ff60 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 61       /* If the a
1ff70 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65  pproximation iKe
1ff80 79 20 69 73 20 73 6d 61 6c 6c 65 72 20 74 68 61  y is smaller tha
1ff90 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72 65 61  n the actual rea
1ffa0 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20 20 2a  l search.      *
1ffb0 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69 74 75  * term, substitu
1ffc0 74 65 20 3c 3d 20 66 6f 72 20 3c 20 61 6e 64 20  te <= for < and 
1ffd0 3e 20 66 6f 72 20 3e 3d 2e 20 20 2a 2f 0a 20 20  > for >=.  */.  
1ffe0 20 20 20 20 65 6c 73 65 20 69 66 28 20 70 49 6e      else if( pIn
1fff0 33 2d 3e 75 2e 72 3e 28 64 6f 75 62 6c 65 29 69  3->u.r>(double)i
20000 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61  Key ){.        a
20010 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45  ssert( OP_SeekLE
20020 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 2b 31 29 20  ==(OP_SeekLT+1) 
20030 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
20040 74 28 20 4f 50 5f 53 65 65 6b 47 54 3d 3d 28 4f  t( OP_SeekGT==(O
20050 50 5f 53 65 65 6b 47 45 2b 31 29 20 29 3b 0a 20  P_SeekGE+1) );. 
20060 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28         assert( (
20070 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30 78 30 30  OP_SeekLT & 0x00
20080 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 20  01)==(OP_SeekGE 
20090 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20  & 0x0001) );.   
200a0 20 20 20 20 20 69 66 28 20 28 6f 63 20 26 20 30       if( (oc & 0
200b0 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b  x0001)==(OP_Seek
200c0 4c 54 20 26 20 30 78 30 30 30 31 29 20 29 20 6f  LT & 0x0001) ) o
200d0 63 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  c++;.      }.   
200e0 20 7d 20 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   } .    rc = sql
200f0 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
20100 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70  npacked(pC->uc.p
20110 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29  Cursor, 0, (u64)
20120 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a  iKey, 0, &res);.
20130 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61      pC->movetoTa
20140 72 67 65 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a  rget = iKey;  /*
20150 20 55 73 65 64 20 62 79 20 4f 50 5f 44 65 6c 65   Used by OP_Dele
20160 74 65 20 2a 2f 0a 20 20 20 20 69 66 28 20 72 63  te */.    if( rc
20170 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
20180 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
20190 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
201a0 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
201b0 20 2f 2a 20 46 6f 72 20 61 20 63 75 72 73 6f 72   /* For a cursor
201c0 20 77 69 74 68 20 74 68 65 20 42 54 52 45 45 5f   with the BTREE_
201d0 53 45 45 4b 5f 45 51 20 68 69 6e 74 2c 20 6f 6e  SEEK_EQ hint, on
201e0 6c 79 20 74 68 65 20 4f 50 5f 53 65 65 6b 47 45  ly the OP_SeekGE
201f0 20 61 6e 64 0a 20 20 20 20 2a 2a 20 4f 50 5f 53   and.    ** OP_S
20200 65 65 6b 4c 45 20 6f 70 63 6f 64 65 73 20 61 72  eekLE opcodes ar
20210 65 20 61 6c 6c 6f 77 65 64 2c 20 61 6e 64 20 74  e allowed, and t
20220 68 65 73 65 20 6d 75 73 74 20 62 65 20 69 6d 6d  hese must be imm
20230 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 65  ediately followe
20240 64 0a 20 20 20 20 2a 2a 20 62 79 20 61 6e 20 4f  d.    ** by an O
20250 50 5f 49 64 78 47 54 20 6f 72 20 4f 50 5f 49 64  P_IdxGT or OP_Id
20260 78 4c 54 20 6f 70 63 6f 64 65 2c 20 72 65 73 70  xLT opcode, resp
20270 65 63 74 69 76 65 6c 79 2c 20 77 69 74 68 20 74  ectively, with t
20280 68 65 20 73 61 6d 65 20 6b 65 79 2e 0a 20 20 20  he same key..   
20290 20 2a 2f 0a 20 20 20 20 69 66 28 20 73 71 6c 69   */.    if( sqli
202a0 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 48 61  te3BtreeCursorHa
202b0 73 48 69 6e 74 28 70 43 2d 3e 75 63 2e 70 43 75  sHint(pC->uc.pCu
202c0 72 73 6f 72 2c 20 42 54 52 45 45 5f 53 45 45 4b  rsor, BTREE_SEEK
202d0 5f 45 51 29 20 29 7b 0a 20 20 20 20 20 20 65 71  _EQ) ){.      eq
202e0 4f 6e 6c 79 20 3d 20 31 3b 0a 20 20 20 20 20 20  Only = 1;.      
202f0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
20300 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c  ode==OP_SeekGE |
20310 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
20320 50 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20  P_SeekLE );.    
20330 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d    assert( pOp[1]
20340 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c  .opcode==OP_IdxL
20350 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f  T || pOp[1].opco
20360 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a  de==OP_IdxGT );.
20370 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
20380 70 5b 31 5d 2e 70 31 3d 3d 70 4f 70 5b 30 5d 2e  p[1].p1==pOp[0].
20390 70 31 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  p1 );.      asse
203a0 72 74 28 20 70 4f 70 5b 31 5d 2e 70 32 3d 3d 70  rt( pOp[1].p2==p
203b0 4f 70 5b 30 5d 2e 70 32 20 29 3b 0a 20 20 20 20  Op[0].p2 );.    
203c0 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d    assert( pOp[1]
203d0 2e 70 33 3d 3d 70 4f 70 5b 30 5d 2e 70 33 20 29  .p3==pOp[0].p3 )
203e0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
203f0 70 4f 70 5b 31 5d 2e 70 34 2e 69 3d 3d 70 4f 70  pOp[1].p4.i==pOp
20400 5b 30 5d 2e 70 34 2e 69 20 29 3b 0a 20 20 20 20  [0].p4.i );.    
20410 7d 0a 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20  }..    nField = 
20420 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 61  pOp->p4.i;.    a
20430 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
20440 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
20450 20 20 20 20 61 73 73 65 72 74 28 20 6e 46 69 65      assert( nFie
20460 6c 64 3e 30 20 29 3b 0a 20 20 20 20 72 2e 70 4b  ld>0 );.    r.pK
20470 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65  eyInfo = pC->pKe
20480 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69  yInfo;.    r.nFi
20490 65 6c 64 20 3d 20 28 75 31 36 29 6e 46 69 65 6c  eld = (u16)nFiel
204a0 64 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e  d;..    /* The n
204b0 65 78 74 20 6c 69 6e 65 20 6f 66 20 63 6f 64 65  ext line of code
204c0 20 63 6f 6d 70 75 74 65 73 20 61 73 20 66 6f 6c   computes as fol
204d0 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66 61 73 74 65  lows, only faste
204e0 72 3a 0a 20 20 20 20 2a 2a 20 20 20 69 66 28 20  r:.    **   if( 
204f0 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c  oc==OP_SeekGT ||
20500 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29   oc==OP_SeekLE )
20510 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64  {.    **     r.d
20520 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a  efault_rc = -1;.
20530 20 20 20 20 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a      **   }else{.
20540 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65 66      **     r.def
20550 61 75 6c 74 5f 72 63 20 3d 20 2b 31 3b 0a 20 20  ault_rc = +1;.  
20560 20 20 2a 2a 20 20 20 7d 0a 20 20 20 20 2a 2f 0a    **   }.    */.
20570 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63      r.default_rc
20580 20 3d 20 28 28 31 20 26 20 28 6f 63 20 2d 20 4f   = ((1 & (oc - O
20590 50 5f 53 65 65 6b 4c 54 29 29 20 3f 20 2d 31 20  P_SeekLT)) ? -1 
205a0 3a 20 2b 31 29 3b 0a 20 20 20 20 61 73 73 65 72  : +1);.    asser
205b0 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 54  t( oc!=OP_SeekGT
205c0 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63   || r.default_rc
205d0 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65  ==-1 );.    asse
205e0 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c  rt( oc!=OP_SeekL
205f0 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72  E || r.default_r
20600 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73 73  c==-1 );.    ass
20610 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b  ert( oc!=OP_Seek
20620 47 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f  GE || r.default_
20630 72 63 3d 3d 2b 31 20 29 3b 0a 20 20 20 20 61 73  rc==+1 );.    as
20640 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65  sert( oc!=OP_See
20650 6b 4c 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74  kLT || r.default
20660 5f 72 63 3d 3d 2b 31 20 29 3b 0a 0a 20 20 20 20  _rc==+1 );..    
20670 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  r.aMem = &aMem[p
20680 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20  Op->p3];.#ifdef 
20690 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
206a0 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d   { int i; for(i=
206b0 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69  0; i<r.nField; i
206c0 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ++) assert( memI
206d0 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69  sValid(&r.aMem[i
206e0 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20  ]) ); }.#endif. 
206f0 20 20 20 72 2e 65 71 53 65 65 6e 20 3d 20 30 3b     r.eqSeen = 0;
20700 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
20710 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
20720 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72  cked(pC->uc.pCur
20730 73 6f 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26  sor, &r, 0, 0, &
20740 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63  res);.    if( rc
20750 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
20760 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
20770 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
20780 20 20 7d 0a 20 20 20 20 69 66 28 20 65 71 4f 6e    }.    if( eqOn
20790 6c 79 20 26 26 20 72 2e 65 71 53 65 65 6e 3d 3d  ly && r.eqSeen==
207a0 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
207b0 74 28 20 72 65 73 21 3d 30 20 29 3b 0a 20 20 20  t( res!=0 );.   
207c0 20 20 20 67 6f 74 6f 20 73 65 65 6b 5f 6e 6f 74     goto seek_not
207d0 5f 66 6f 75 6e 64 3b 0a 20 20 20 20 7d 0a 20 20  _found;.    }.  
207e0 7d 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64  }.  pC->deferred
207f0 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43  Moveto = 0;.  pC
20800 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
20810 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66  CACHE_STALE;.#if
20820 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
20830 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68    sqlite3_search
20840 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
20850 0a 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65  .  if( oc>=OP_Se
20860 65 6b 47 45 20 29 7b 20 20 61 73 73 65 72 74 28  ekGE ){  assert(
20870 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c   oc==OP_SeekGE |
20880 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20  | oc==OP_SeekGT 
20890 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 3c 30  );.    if( res<0
208a0 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f   || (res==0 && o
208b0 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 29 20 29 7b  c==OP_SeekGT) ){
208c0 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a  .      res = 0;.
208d0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
208e0 65 33 42 74 72 65 65 4e 65 78 74 28 70 43 2d 3e  e3BtreeNext(pC->
208f0 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a  uc.pCursor, 0);.
20900 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
20910 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
20920 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
20930 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 20 20  E_DONE ){.      
20940 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
20950 4f 4b 3b 0a 20 20 20 20 20 20 20 20 20 20 72 65  OK;.          re
20960 73 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d  s = 1;.        }
20970 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
20980 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
20990 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
209a0 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d   }.      }.    }
209b0 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 65 73 20  else{.      res 
209c0 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  = 0;.    }.  }el
209d0 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
209e0 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c  oc==OP_SeekLT ||
209f0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29   oc==OP_SeekLE )
20a00 3b 0a 20 20 20 20 69 66 28 20 72 65 73 3e 30 20  ;.    if( res>0 
20a10 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63  || (res==0 && oc
20a20 3d 3d 4f 50 5f 53 65 65 6b 4c 54 29 20 29 7b 0a  ==OP_SeekLT) ){.
20a30 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20        res = 0;. 
20a40 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
20a50 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 28 70  3BtreePrevious(p
20a60 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30  C->uc.pCursor, 0
20a70 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
20a80 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
20a90 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
20aa0 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20  LITE_DONE ){.   
20ab0 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
20ac0 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 20 20 20  TE_OK;.         
20ad0 20 72 65 73 20 3d 20 31 3b 0a 20 20 20 20 20 20   res = 1;.      
20ae0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
20af0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
20b00 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
20b10 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
20b20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f    }else{.      /
20b30 2a 20 72 65 73 20 6d 69 67 68 74 20 62 65 20 6e  * res might be n
20b40 65 67 61 74 69 76 65 20 62 65 63 61 75 73 65 20  egative because 
20b50 74 68 65 20 74 61 62 6c 65 20 69 73 20 65 6d 70  the table is emp
20b60 74 79 2e 20 20 43 68 65 63 6b 20 74 6f 0a 20 20  ty.  Check to.  
20b70 20 20 20 20 2a 2a 20 73 65 65 20 69 66 20 74 68      ** see if th
20b80 69 73 20 69 73 20 74 68 65 20 63 61 73 65 2e 0a  is is the case..
20b90 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 72        */.      r
20ba0 65 73 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  es = sqlite3Btre
20bb0 65 45 6f 66 28 70 43 2d 3e 75 63 2e 70 43 75 72  eEof(pC->uc.pCur
20bc0 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  sor);.    }.  }.
20bd0 73 65 65 6b 5f 6e 6f 74 5f 66 6f 75 6e 64 3a 0a  seek_not_found:.
20be0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
20bf0 32 3e 30 20 29 3b 0a 20 20 56 64 62 65 42 72 61  2>0 );.  VdbeBra
20c00 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c  nchTaken(res!=0,
20c10 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 7b  2);.  if( res ){
20c20 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  .    goto jump_t
20c30 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66  o_p2;.  }else if
20c40 28 20 65 71 4f 6e 6c 79 20 29 7b 0a 20 20 20 20  ( eqOnly ){.    
20c50 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 6f  assert( pOp[1].o
20c60 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20  pcode==OP_IdxLT 
20c70 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65  || pOp[1].opcode
20c80 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20  ==OP_IdxGT );.  
20c90 20 20 70 4f 70 2b 2b 3b 20 2f 2a 20 53 6b 69 70    pOp++; /* Skip
20ca0 20 74 68 65 20 4f 50 5f 49 64 78 4c 74 20 6f 72   the OP_IdxLt or
20cb0 20 4f 50 5f 49 64 78 47 54 20 74 68 61 74 20 66   OP_IdxGT that f
20cc0 6f 6c 6c 6f 77 73 20 2a 2f 0a 20 20 7d 0a 20 20  ollows */.  }.  
20cd0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
20ce0 6f 64 65 3a 20 46 6f 75 6e 64 20 50 31 20 50 32  ode: Found P1 P2
20cf0 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
20d00 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
20d10 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d  4].**.** If P4==
20d20 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
20d30 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20  P3 holds a blob 
20d40 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d  constructed by M
20d50 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a  akeRecord.  If.*
20d60 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69  * P4>0 then regi
20d70 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66  ster P3 is the f
20d80 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73  irst of P4 regis
20d90 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61  ters that form a
20da0 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65  n unpacked.** re
20db0 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73  cord..**.** Curs
20dc0 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69  or P1 is on an i
20dd0 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20  ndex btree.  If 
20de0 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74  the record ident
20df0 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20  ified by P3 and 
20e00 50 34 0a 2a 2a 20 69 73 20 61 20 70 72 65 66 69  P4.** is a prefi
20e10 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69  x of any entry i
20e20 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70  n P1 then a jump
20e30 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20 61   is made to P2 a
20e40 6e 64 0a 2a 2a 20 50 31 20 69 73 20 6c 65 66 74  nd.** P1 is left
20e50 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65   pointing at the
20e60 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e   matching entry.
20e70 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72  .**.** This oper
20e80 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65  ation leaves the
20e90 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61   cursor in a sta
20ea0 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 20  te where it can 
20eb0 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69  be.** advanced i
20ec0 6e 20 74 68 65 20 66 6f 72 77 61 72 64 20 64 69  n the forward di
20ed0 72 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 4e 65  rection.  The Ne
20ee0 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77  xt instruction w
20ef0 69 6c 6c 20 77 6f 72 6b 2c 0a 2a 2a 20 62 75 74  ill work,.** but
20f00 20 6e 6f 74 20 74 68 65 20 50 72 65 76 20 69 6e   not the Prev in
20f10 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
20f20 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f   See also: NotFo
20f30 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c  und, NoConflict,
20f40 20 4e 6f 74 45 78 69 73 74 73 2e 20 53 65 65 6b   NotExists. Seek
20f50 47 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  Ge.*/./* Opcode:
20f60 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20 50 32 20   NotFound P1 P2 
20f70 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
20f80 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
20f90 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30  ].**.** If P4==0
20fa0 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
20fb0 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63  3 holds a blob c
20fc0 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61  onstructed by Ma
20fd0 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a  keRecord.  If.**
20fe0 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73   P4>0 then regis
20ff0 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69  ter P3 is the fi
21000 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74  rst of P4 regist
21010 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e  ers that form an
21020 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63   unpacked.** rec
21030 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73  ord..** .** Curs
21040 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69  or P1 is on an i
21050 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20  ndex btree.  If 
21060 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74  the record ident
21070 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20  ified by P3 and 
21080 50 34 0a 2a 2a 20 69 73 20 6e 6f 74 20 74 68 65  P4.** is not the
21090 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65   prefix of any e
210a0 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20  ntry in P1 then 
210b0 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74  a jump is made t
210c0 6f 20 50 32 2e 20 20 49 66 20 50 31 20 0a 2a 2a  o P2.  If P1 .**
210d0 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 6e   does contain an
210e0 20 65 6e 74 72 79 20 77 68 6f 73 65 20 70 72 65   entry whose pre
210f0 66 69 78 20 6d 61 74 63 68 65 73 20 74 68 65 20  fix matches the 
21100 50 33 2f 50 34 20 72 65 63 6f 72 64 20 74 68 65  P3/P4 record the
21110 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c  n control.** fal
21120 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ls through to th
21130 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
21140 6f 6e 20 61 6e 64 20 50 31 20 69 73 20 6c 65 66  on and P1 is lef
21150 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68  t pointing at th
21160 65 0a 2a 2a 20 6d 61 74 63 68 69 6e 67 20 65 6e  e.** matching en
21170 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  try..**.** This 
21180 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73  operation leaves
21190 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61   the cursor in a
211a0 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20   state where it 
211b0 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76  cannot be.** adv
211c0 61 6e 63 65 64 20 69 6e 20 65 69 74 68 65 72 20  anced in either 
211d0 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f  direction.  In o
211e0 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
211f0 4e 65 78 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a  Next and Prev.**
21200 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20   opcodes do not 
21210 77 6f 72 6b 20 61 66 74 65 72 20 74 68 69 73 20  work after this 
21220 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  operation..**.**
21230 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
21240 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20 4e 6f 43  , NotExists, NoC
21250 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 2f 2a 20 4f 70  onflict.*/./* Op
21260 63 6f 64 65 3a 20 4e 6f 43 6f 6e 66 6c 69 63 74  code: NoConflict
21270 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
21280 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
21290 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49  r[P3@P4].**.** I
212a0 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67  f P4==0 then reg
212b0 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61  ister P3 holds a
212c0 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65   blob constructe
212d0 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e  d by MakeRecord.
212e0 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65    If.** P4>0 the
212f0 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  n register P3 is
21300 20 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34   the first of P4
21310 20 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20   registers that 
21320 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
21330 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a  .** record..** .
21340 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20  ** Cursor P1 is 
21350 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65  on an index btre
21360 65 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f 72  e.  If the recor
21370 64 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  d identified by 
21380 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 63 6f 6e  P3 and P4.** con
21390 74 61 69 6e 73 20 61 6e 79 20 4e 55 4c 4c 20 76  tains any NULL v
213a0 61 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64  alue, jump immed
213b0 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49  iately to P2.  I
213c0 66 20 61 6c 6c 20 74 65 72 6d 73 20 6f 66 20 74  f all terms of t
213d0 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20 61 72 65  he.** record are
213e0 20 6e 6f 74 2d 4e 55 4c 4c 20 74 68 65 6e 20 61   not-NULL then a
213f0 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 74   check is done t
21400 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61  o determine if a
21410 6e 79 20 72 6f 77 20 69 6e 20 74 68 65 0a 2a 2a  ny row in the.**
21420 20 50 31 20 69 6e 64 65 78 20 62 74 72 65 65 20   P1 index btree 
21430 68 61 73 20 61 20 6d 61 74 63 68 69 6e 67 20 6b  has a matching k
21440 65 79 20 70 72 65 66 69 78 2e 20 20 49 66 20 74  ey prefix.  If t
21450 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 61 74 63  here are no matc
21460 68 65 73 2c 20 6a 75 6d 70 0a 2a 2a 20 69 6d 6d  hes, jump.** imm
21470 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20  ediately to P2. 
21480 20 49 66 20 74 68 65 72 65 20 69 73 20 61 20 6d   If there is a m
21490 61 74 63 68 2c 20 66 61 6c 6c 20 74 68 72 6f 75  atch, fall throu
214a0 67 68 20 61 6e 64 20 6c 65 61 76 65 20 74 68 65  gh and leave the
214b0 20 50 31 0a 2a 2a 20 63 75 72 73 6f 72 20 70 6f   P1.** cursor po
214c0 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 6d 61  inting to the ma
214d0 74 63 68 69 6e 67 20 72 6f 77 2e 0a 2a 2a 0a 2a  tching row..**.*
214e0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  * This opcode is
214f0 20 73 69 6d 69 6c 61 72 20 74 6f 20 4f 50 5f 4e   similar to OP_N
21500 6f 74 46 6f 75 6e 64 20 77 69 74 68 20 74 68 65  otFound with the
21510 20 65 78 63 65 70 74 69 6f 6e 73 20 74 68 61 74   exceptions that
21520 20 74 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 69   the.** branch i
21530 73 20 61 6c 77 61 79 73 20 74 61 6b 65 6e 20 69  s always taken i
21540 66 20 61 6e 79 20 70 61 72 74 20 6f 66 20 74 68  f any part of th
21550 65 20 73 65 61 72 63 68 20 6b 65 79 20 69 6e 70  e search key inp
21560 75 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  ut is NULL..**.*
21570 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e  * This operation
21580 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
21590 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68  or in a state wh
215a0 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65  ere it cannot be
215b0 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20  .** advanced in 
215c0 65 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e  either direction
215d0 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
215e0 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20  s, the Next and 
215f0 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20  Prev.** opcodes 
21600 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65  do not work afte
21610 72 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e  r this operation
21620 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
21630 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 46 6f 75 6e  : NotFound, Foun
21640 64 2c 20 4e 6f 74 45 78 69 73 74 73 0a 2a 2f 0a  d, NotExists.*/.
21650 63 61 73 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69  case OP_NoConfli
21660 63 74 3a 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c  ct:     /* jump,
21670 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
21680 4e 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20 20 20  NotFound:       
21690 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
216a0 63 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b  case OP_Found: {
216b0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
216c0 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c   in3 */.  int al
216d0 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20 69  readyExists;.  i
216e0 6e 74 20 74 61 6b 65 4a 75 6d 70 3b 0a 20 20 69  nt takeJump;.  i
216f0 6e 74 20 69 69 3b 0a 20 20 56 64 62 65 43 75 72  nt ii;.  VdbeCur
21700 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72  sor *pC;.  int r
21710 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  es;.  UnpackedRe
21720 63 6f 72 64 20 2a 70 46 72 65 65 3b 0a 20 20 55  cord *pFree;.  U
21730 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70  npackedRecord *p
21740 49 64 78 4b 65 79 3b 0a 20 20 55 6e 70 61 63 6b  IdxKey;.  Unpack
21750 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 23 69 66  edRecord r;..#if
21760 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
21770 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
21780 65 21 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74  e!=OP_NoConflict
21790 20 29 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64   ) sqlite3_found
217a0 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
217b0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
217c0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
217d0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
217e0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
217f0 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
21800 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
21810 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
21820 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
21830 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
21840 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70  BUG.  pC->seekOp
21850 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a   = pOp->opcode;.
21860 23 65 6e 64 69 66 0a 20 20 70 49 6e 33 20 3d 20  #endif.  pIn3 = 
21870 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
21880 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
21890 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
218a0 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72  BTREE );.  asser
218b0 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
218c0 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
218d0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
218e0 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   );.  if( pOp->p
218f0 34 2e 69 3e 30 20 29 7b 0a 20 20 20 20 72 2e 70  4.i>0 ){.    r.p
21900 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b  KeyInfo = pC->pK
21910 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46  eyInfo;.    r.nF
21920 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d  ield = (u16)pOp-
21930 3e 70 34 2e 69 3b 0a 20 20 20 20 72 2e 61 4d 65  >p4.i;.    r.aMe
21940 6d 20 3d 20 70 49 6e 33 3b 0a 23 69 66 64 65 66  m = pIn3;.#ifdef
21950 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
21960 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 72    for(ii=0; ii<r
21970 2e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a  .nField; ii++){.
21980 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
21990 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
219a0 5b 69 69 5d 29 20 29 3b 0a 20 20 20 20 20 20 61  [ii]) );.      a
219b0 73 73 65 72 74 28 20 28 72 2e 61 4d 65 6d 5b 69  ssert( (r.aMem[i
219c0 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  i].flags & MEM_Z
219d0 65 72 6f 29 3d 3d 30 20 7c 7c 20 72 2e 61 4d 65  ero)==0 || r.aMe
219e0 6d 5b 69 69 5d 2e 6e 3d 3d 30 20 29 3b 0a 20 20  m[ii].n==0 );.  
219f0 20 20 20 20 69 66 28 20 69 69 20 29 20 52 45 47      if( ii ) REG
21a00 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
21a10 3e 70 33 2b 69 69 2c 20 26 72 2e 61 4d 65 6d 5b  >p3+ii, &r.aMem[
21a20 69 69 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  ii]);.    }.#end
21a30 69 66 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d  if.    pIdxKey =
21a40 20 26 72 3b 0a 20 20 20 20 70 46 72 65 65 20 3d   &r;.    pFree =
21a50 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   0;.  }else{.   
21a60 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
21a70 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20  lags & MEM_Blob 
21a80 29 3b 0a 20 20 20 20 72 63 20 3d 20 45 78 70 61  );.    rc = Expa
21a90 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20  ndBlob(pIn3);.  
21aa0 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
21ab0 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53  LITE_OK || rc==S
21ac0 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 3b 0a 20  QLITE_NOMEM );. 
21ad0 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
21ae0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 70 46 72   no_mem;.    pFr
21af0 65 65 20 3d 20 70 49 64 78 4b 65 79 20 3d 20 73  ee = pIdxKey = s
21b00 71 6c 69 74 65 33 56 64 62 65 41 6c 6c 6f 63 55  qlite3VdbeAllocU
21b10 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 28 70 43  npackedRecord(pC
21b20 2d 3e 70 4b 65 79 49 6e 66 6f 29 3b 0a 20 20 20  ->pKeyInfo);.   
21b30 20 69 66 28 20 70 49 64 78 4b 65 79 3d 3d 30 20   if( pIdxKey==0 
21b40 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
21b50 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 52 65     sqlite3VdbeRe
21b60 63 6f 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70  cordUnpack(pC->p
21b70 4b 65 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e  KeyInfo, pIn3->n
21b80 2c 20 70 49 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b  , pIn3->z, pIdxK
21b90 65 79 29 3b 0a 20 20 7d 0a 20 20 70 49 64 78 4b  ey);.  }.  pIdxK
21ba0 65 79 2d 3e 64 65 66 61 75 6c 74 5f 72 63 20 3d  ey->default_rc =
21bb0 20 30 3b 0a 20 20 74 61 6b 65 4a 75 6d 70 20 3d   0;.  takeJump =
21bc0 20 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f   0;.  if( pOp->o
21bd0 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66  pcode==OP_NoConf
21be0 6c 69 63 74 20 29 7b 0a 20 20 20 20 2f 2a 20 46  lict ){.    /* F
21bf0 6f 72 20 74 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66  or the OP_NoConf
21c00 6c 69 63 74 20 6f 70 63 6f 64 65 2c 20 74 61 6b  lict opcode, tak
21c10 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e  e the jump if an
21c20 79 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20  y of the.    ** 
21c30 69 6e 70 75 74 20 66 69 65 6c 64 73 20 61 72 65  input fields are
21c40 20 4e 55 4c 4c 2c 20 73 69 6e 63 65 20 61 6e 79   NULL, since any
21c50 20 6b 65 79 20 77 69 74 68 20 61 20 4e 55 4c 4c   key with a NULL
21c60 20 77 69 6c 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a   will not.    **
21c70 20 63 6f 6e 66 6c 69 63 74 20 2a 2f 0a 20 20 20   conflict */.   
21c80 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 70 49   for(ii=0; ii<pI
21c90 64 78 4b 65 79 2d 3e 6e 46 69 65 6c 64 3b 20 69  dxKey->nField; i
21ca0 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20  i++){.      if( 
21cb0 70 49 64 78 4b 65 79 2d 3e 61 4d 65 6d 5b 69 69  pIdxKey->aMem[ii
21cc0 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ].flags & MEM_Nu
21cd0 6c 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 74 61  ll ){.        ta
21ce0 6b 65 4a 75 6d 70 20 3d 20 31 3b 0a 20 20 20 20  keJump = 1;.    
21cf0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
21d00 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72   }.    }.  }.  r
21d10 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
21d20 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
21d30 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 70  C->uc.pCursor, p
21d40 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72  IdxKey, 0, 0, &r
21d50 65 73 29 3b 0a 20 20 69 66 28 20 70 46 72 65 65  es);.  if( pFree
21d60 20 29 20 73 71 6c 69 74 65 33 44 62 46 72 65 65   ) sqlite3DbFree
21d70 4e 4e 28 64 62 2c 20 70 46 72 65 65 29 3b 0a 20  NN(db, pFree);. 
21d80 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
21d90 4f 4b 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 61  OK ){.    goto a
21da0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
21db0 72 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65  r;.  }.  pC->see
21dc0 6b 52 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20  kResult = res;. 
21dd0 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d   alreadyExists =
21de0 20 28 72 65 73 3d 3d 30 29 3b 0a 20 20 70 43 2d   (res==0);.  pC-
21df0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c 72  >nullRow = 1-alr
21e00 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20 70 43  eadyExists;.  pC
21e10 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
21e20 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
21e30 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
21e40 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70  STALE;.  if( pOp
21e50 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75  ->opcode==OP_Fou
21e60 6e 64 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72  nd ){.    VdbeBr
21e70 61 6e 63 68 54 61 6b 65 6e 28 61 6c 72 65 61 64  anchTaken(alread
21e80 79 45 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20  yExists!=0,2);. 
21e90 20 20 20 69 66 28 20 61 6c 72 65 61 64 79 45 78     if( alreadyEx
21ea0 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70  ists ) goto jump
21eb0 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b  _to_p2;.  }else{
21ec0 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
21ed0 61 6b 65 6e 28 74 61 6b 65 4a 75 6d 70 7c 7c 61  aken(takeJump||a
21ee0 6c 72 65 61 64 79 45 78 69 73 74 73 3d 3d 30 2c  lreadyExists==0,
21ef0 32 29 3b 0a 20 20 20 20 69 66 28 20 74 61 6b 65  2);.    if( take
21f00 4a 75 6d 70 20 7c 7c 20 21 61 6c 72 65 61 64 79  Jump || !already
21f10 45 78 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75  Exists ) goto ju
21f20 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
21f30 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
21f40 6f 64 65 3a 20 53 65 65 6b 52 6f 77 69 64 20 50  ode: SeekRowid P
21f50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
21f60 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d  ynopsis: intkey=
21f70 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69  r[P3].**.** P1 i
21f80 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61  s the index of a
21f90 20 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20   cursor open on 
21fa0 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 62 74 72  an SQL table btr
21fb0 65 65 20 28 77 69 74 68 20 69 6e 74 65 67 65 72  ee (with integer
21fc0 0a 2a 2a 20 6b 65 79 73 29 2e 20 20 49 66 20 72  .** keys).  If r
21fd0 65 67 69 73 74 65 72 20 50 33 20 64 6f 65 73 20  egister P3 does 
21fe0 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69  not contain an i
21ff0 6e 74 65 67 65 72 20 6f 72 20 69 66 20 50 31 20  nteger or if P1 
22000 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 6f 6e 74  does not.** cont
22010 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74  ain a record wit
22020 68 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20  h rowid P3 then 
22030 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
22040 20 74 6f 20 50 32 2e 20 20 0a 2a 2a 20 4f 72 2c   to P2.  .** Or,
22050 20 69 66 20 50 32 20 69 73 20 30 2c 20 72 61 69   if P2 is 0, rai
22060 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 43 4f 52  se an SQLITE_COR
22070 52 55 50 54 20 65 72 72 6f 72 2e 20 49 66 20 50  RUPT error. If P
22080 31 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 0a 2a  1 does contain.*
22090 2a 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 20  * a record with 
220a0 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 0a 2a  rowid P3 then .*
220b0 2a 20 6c 65 61 76 65 20 74 68 65 20 63 75 72 73  * leave the curs
220c0 6f 72 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  or pointing at t
220d0 68 61 74 20 72 65 63 6f 72 64 20 61 6e 64 20 66  hat record and f
220e0 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
220f0 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72  he next.** instr
22100 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  uction..**.** Th
22110 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f  e OP_NotExists o
22120 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74  pcode performs t
22130 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f  he same operatio
22140 6e 2c 20 62 75 74 20 77 69 74 68 20 4f 50 5f 4e  n, but with OP_N
22150 6f 74 45 78 69 73 74 73 0a 2a 2a 20 74 68 65 20  otExists.** the 
22160 50 33 20 72 65 67 69 73 74 65 72 20 6d 75 73 74  P3 register must
22170 20 62 65 20 67 75 61 72 61 6e 74 65 65 64 20 74   be guaranteed t
22180 6f 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  o contain an int
22190 65 67 65 72 20 76 61 6c 75 65 2e 20 20 57 69 74  eger value.  Wit
221a0 68 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65  h this.** opcode
221b0 2c 20 72 65 67 69 73 74 65 72 20 50 33 20 6d 69  , register P3 mi
221c0 67 68 74 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20  ght not contain 
221d0 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a  an integer..**.*
221e0 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e  * The OP_NotFoun
221f0 64 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d  d opcode perform
22200 73 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61  s the same opera
22210 74 69 6f 6e 20 6f 6e 20 69 6e 64 65 78 20 62 74  tion on index bt
22220 72 65 65 73 0a 2a 2a 20 28 77 69 74 68 20 61 72  rees.** (with ar
22230 62 69 74 72 61 72 79 20 6d 75 6c 74 69 2d 76 61  bitrary multi-va
22240 6c 75 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a  lue keys)..**.**
22250 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
22260 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69  ves the cursor i
22270 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20  n a state where 
22280 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 61 64 76  it cannot be adv
22290 61 6e 63 65 64 0a 2a 2a 20 69 6e 20 65 69 74 68  anced.** in eith
222a0 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49  er direction.  I
222b0 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
222c0 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76  he Next and Prev
222d0 20 6f 70 63 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a   opcodes will.**
222e0 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77   not work follow
222f0 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e  ing this opcode.
22300 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
22310 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
22320 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 53 65  , NoConflict, Se
22330 65 6b 52 6f 77 69 64 0a 2a 2f 0a 2f 2a 20 4f 70  ekRowid.*/./* Op
22340 63 6f 64 65 3a 20 4e 6f 74 45 78 69 73 74 73 20  code: NotExists 
22350 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
22360 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79  Synopsis: intkey
22370 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20  =r[P3].**.** P1 
22380 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
22390 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e  a cursor open on
223a0 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 62 74   an SQL table bt
223b0 72 65 65 20 28 77 69 74 68 20 69 6e 74 65 67 65  ree (with intege
223c0 72 0a 2a 2a 20 6b 65 79 73 29 2e 20 20 50 33 20  r.** keys).  P3 
223d0 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 72 6f  is an integer ro
223e0 77 69 64 2e 20 20 49 66 20 50 31 20 64 6f 65 73  wid.  If P1 does
223f0 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20 72   not contain a r
22400 65 63 6f 72 64 20 77 69 74 68 0a 2a 2a 20 72 6f  ecord with.** ro
22410 77 69 64 20 50 33 20 74 68 65 6e 20 6a 75 6d 70  wid P3 then jump
22420 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
22430 50 32 2e 20 20 4f 72 2c 20 69 66 20 50 32 20 69  P2.  Or, if P2 i
22440 73 20 30 2c 20 72 61 69 73 65 20 61 6e 0a 2a 2a  s 0, raise an.**
22450 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20   SQLITE_CORRUPT 
22460 65 72 72 6f 72 2e 20 49 66 20 50 31 20 64 6f 65  error. If P1 doe
22470 73 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f  s contain a reco
22480 72 64 20 77 69 74 68 20 72 6f 77 69 64 20 50 33  rd with rowid P3
22490 20 74 68 65 6e 20 0a 2a 2a 20 6c 65 61 76 65 20   then .** leave 
224a0 74 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74  the cursor point
224b0 69 6e 67 20 61 74 20 74 68 61 74 20 72 65 63 6f  ing at that reco
224c0 72 64 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f  rd and fall thro
224d0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 0a  ugh to the next.
224e0 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ** instruction..
224f0 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 53 65 65  **.** The OP_See
22500 6b 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 70 65  kRowid opcode pe
22510 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20  rforms the same 
22520 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20 61 6c  operation but al
22530 73 6f 20 61 6c 6c 6f 77 73 20 74 68 65 0a 2a 2a  so allows the.**
22540 20 50 33 20 72 65 67 69 73 74 65 72 20 74 6f 20   P3 register to 
22550 63 6f 6e 74 61 69 6e 20 61 20 6e 6f 6e 2d 69 6e  contain a non-in
22560 74 65 67 65 72 20 76 61 6c 75 65 2c 20 69 6e 20  teger value, in 
22570 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20 6a  which case the j
22580 75 6d 70 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73  ump is.** always
22590 20 74 61 6b 65 6e 2e 20 20 54 68 69 73 20 6f 70   taken.  This op
225a0 63 6f 64 65 20 72 65 71 75 69 72 65 73 20 74 68  code requires th
225b0 61 74 20 50 33 20 61 6c 77 61 79 73 20 63 6f 6e  at P3 always con
225c0 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e  tain an integer.
225d0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f  .**.** The OP_No
225e0 74 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70 65  tFound opcode pe
225f0 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20  rforms the same 
22600 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64  operation on ind
22610 65 78 20 62 74 72 65 65 73 0a 2a 2a 20 28 77 69  ex btrees.** (wi
22620 74 68 20 61 72 62 69 74 72 61 72 79 20 6d 75 6c  th arbitrary mul
22630 74 69 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a  ti-value keys)..
22640 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
22650 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  e leaves the cur
22660 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77  sor in a state w
22670 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62  here it cannot b
22680 65 20 61 64 76 61 6e 63 65 64 0a 2a 2a 20 69 6e  e advanced.** in
22690 20 65 69 74 68 65 72 20 64 69 72 65 63 74 69 6f   either directio
226a0 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  n.  In other wor
226b0 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64  ds, the Next and
226c0 20 50 72 65 76 20 6f 70 63 6f 64 65 73 20 77 69   Prev opcodes wi
226d0 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20 66  ll.** not work f
226e0 6f 6c 6c 6f 77 69 6e 67 20 74 68 69 73 20 6f 70  ollowing this op
226f0 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  code..**.** See 
22700 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
22710 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63  Found, NoConflic
22720 74 2c 20 53 65 65 6b 52 6f 77 69 64 0a 2a 2f 0a  t, SeekRowid.*/.
22730 63 61 73 65 20 4f 50 5f 53 65 65 6b 52 6f 77 69  case OP_SeekRowi
22740 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  d: {        /* j
22750 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64  ump, in3 */.  Vd
22760 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
22770 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
22780 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 75 36  .  int res;.  u6
22790 34 20 69 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20  4 iKey;..  pIn3 
227a0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
227b0 3b 0a 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66  ;.  if( (pIn3->f
227c0 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d  lags & MEM_Int)=
227d0 3d 30 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 41  =0 ){.    applyA
227e0 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 20 53 51  ffinity(pIn3, SQ
227f0 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
22800 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
22810 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67   if( (pIn3->flag
22820 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20  s & MEM_Int)==0 
22830 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
22840 32 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c  2;.  }.  /* Fall
22850 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50   through into OP
22860 5f 4e 6f 74 45 78 69 73 74 73 20 2a 2f 0a 63 61  _NotExists */.ca
22870 73 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a  se OP_NotExists:
22880 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
22890 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33  p, in3 */.  pIn3
228a0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
228b0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
228c0 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  3->flags & MEM_I
228d0 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  nt );.  assert( 
228e0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
228f0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
22900 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
22910 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
22920 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
22930 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
22940 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f  EBUG.  pC->seekO
22950 70 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20  p = 0;.#endif.  
22960 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
22970 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ble );.  assert(
22980 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
22990 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
229a0 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63    pCrsr = pC->uc
229b0 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65  .pCursor;.  asse
229c0 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a  rt( pCrsr!=0 );.
229d0 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 69 4b 65    res = 0;.  iKe
229e0 79 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20  y = pIn3->u.i;. 
229f0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
22a00 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
22a10 28 70 43 72 73 72 2c 20 30 2c 20 69 4b 65 79 2c  (pCrsr, 0, iKey,
22a20 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 61 73 73   0, &res);.  ass
22a30 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
22a40 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29 3b 0a  OK || res==0 );.
22a50 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67    pC->movetoTarg
22a60 65 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55  et = iKey;  /* U
22a70 73 65 64 20 62 79 20 4f 50 5f 44 65 6c 65 74 65  sed by OP_Delete
22a80 20 2a 2f 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f   */.  pC->nullRo
22a90 77 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63  w = 0;.  pC->cac
22aa0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
22ab0 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 64 65  _STALE;.  pC->de
22ac0 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
22ad0 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
22ae0 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20  ken(res!=0,2);. 
22af0 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
22b00 3d 20 72 65 73 3b 0a 20 20 69 66 28 20 72 65 73  = res;.  if( res
22b10 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72  !=0 ){.    asser
22b20 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
22b30 20 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   );.    if( pOp-
22b40 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  >p2==0 ){.      
22b50 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52  rc = SQLITE_CORR
22b60 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 7d 65  UPT_BKPT;.    }e
22b70 6c 73 65 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  lse{.      goto 
22b80 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20  jump_to_p2;.    
22b90 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29  }.  }.  if( rc )
22ba0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
22bb0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
22bc0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
22bd0 20 53 65 71 75 65 6e 63 65 20 50 31 20 50 32 20   Sequence P1 P2 
22be0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
22bf0 73 3a 20 72 5b 50 32 5d 3d 63 75 72 73 6f 72 5b  s: r[P2]=cursor[
22c00 50 31 5d 2e 63 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20  P1].ctr++.**.** 
22c10 46 69 6e 64 20 74 68 65 20 6e 65 78 74 20 61 76  Find the next av
22c20 61 69 6c 61 62 6c 65 20 73 65 71 75 65 6e 63 65  ailable sequence
22c30 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 75 72 73   number for curs
22c40 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74 65 20  or P1..** Write 
22c50 74 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  the sequence num
22c60 62 65 72 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ber into registe
22c70 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65 71  r P2..** The seq
22c80 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f 6e 20  uence number on 
22c90 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 69 6e  the cursor is in
22ca0 63 72 65 6d 65 6e 74 65 64 20 61 66 74 65 72 20  cremented after 
22cb0 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75 63 74  this.** instruct
22cc0 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f  ion.  .*/.case O
22cd0 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20 20 20  P_Sequence: {   
22ce0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
22cf0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
22d00 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
22d10 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
22d20 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70  .  assert( p->ap
22d30 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20  Csr[pOp->p1]!=0 
22d40 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
22d50 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e  apCsr[pOp->p1]->
22d60 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59 50  eCurType!=CURTYP
22d70 45 5f 56 54 41 42 20 29 3b 0a 20 20 70 4f 75 74  E_VTAB );.  pOut
22d80 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
22d90 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75  e(p, pOp);.  pOu
22da0 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61 70 43 73  t->u.i = p->apCs
22db0 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71 43  r[pOp->p1]->seqC
22dc0 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b  ount++;.  break;
22dd0 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .}.../* Opcode: 
22de0 4e 65 77 52 6f 77 69 64 20 50 31 20 50 32 20 50  NewRowid P1 P2 P
22df0 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
22e00 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a  s: r[P2]=rowid.*
22e10 2a 0a 2a 2a 20 47 65 74 20 61 20 6e 65 77 20 69  *.** Get a new i
22e20 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20 6e 75  nteger record nu
22e30 6d 62 65 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77  mber (a.k.a "row
22e40 69 64 22 29 20 75 73 65 64 20 61 73 20 74 68 65  id") used as the
22e50 20 6b 65 79 20 74 6f 20 61 20 74 61 62 6c 65 2e   key to a table.
22e60 0a 2a 2a 20 54 68 65 20 72 65 63 6f 72 64 20 6e  .** The record n
22e70 75 6d 62 65 72 20 69 73 20 6e 6f 74 20 70 72 65  umber is not pre
22e80 76 69 6f 75 73 6c 79 20 75 73 65 64 20 61 73 20  viously used as 
22e90 61 20 6b 65 79 20 69 6e 20 74 68 65 20 64 61 74  a key in the dat
22ea0 61 62 61 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74  abase.** table t
22eb0 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f  hat cursor P1 po
22ec0 69 6e 74 73 20 74 6f 2e 20 20 54 68 65 20 6e 65  ints to.  The ne
22ed0 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  w record number 
22ee0 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72  is written.** wr
22ef0 69 74 74 65 6e 20 74 6f 20 72 65 67 69 73 74 65  itten to registe
22f00 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  r P2..**.** If P
22f10 33 3e 30 20 74 68 65 6e 20 50 33 20 69 73 20 61  3>0 then P3 is a
22f20 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 68 65   register in the
22f30 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74   root frame of t
22f40 68 69 73 20 56 44 42 45 20 74 68 61 74 20 68 6f  his VDBE that ho
22f50 6c 64 73 20 0a 2a 2a 20 74 68 65 20 6c 61 72 67  lds .** the larg
22f60 65 73 74 20 70 72 65 76 69 6f 75 73 6c 79 20 67  est previously g
22f70 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64 20  enerated record 
22f80 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e 65 77 20 72  number. No new r
22f90 65 63 6f 72 64 20 6e 75 6d 62 65 72 73 20 61 72  ecord numbers ar
22fa0 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20 74 6f 20  e.** allowed to 
22fb0 62 65 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  be less than thi
22fc0 73 20 76 61 6c 75 65 2e 20 57 68 65 6e 20 74 68  s value. When th
22fd0 69 73 20 76 61 6c 75 65 20 72 65 61 63 68 65 73  is value reaches
22fe0 20 69 74 73 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a   its maximum, .*
22ff0 2a 20 61 6e 20 53 51 4c 49 54 45 5f 46 55 4c 4c  * an SQLITE_FULL
23000 20 65 72 72 6f 72 20 69 73 20 67 65 6e 65 72 61   error is genera
23010 74 65 64 2e 20 54 68 65 20 50 33 20 72 65 67 69  ted. The P3 regi
23020 73 74 65 72 20 69 73 20 75 70 64 61 74 65 64 20  ster is updated 
23030 77 69 74 68 20 74 68 65 20 27 0a 2a 2a 20 67 65  with the '.** ge
23040 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e  nerated record n
23050 75 6d 62 65 72 2e 20 54 68 69 73 20 50 33 20 6d  umber. This P3 m
23060 65 63 68 61 6e 69 73 6d 20 69 73 20 75 73 65 64  echanism is used
23070 20 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65   to help impleme
23080 6e 74 20 74 68 65 0a 2a 2a 20 41 55 54 4f 49 4e  nt the.** AUTOIN
23090 43 52 45 4d 45 4e 54 20 66 65 61 74 75 72 65 2e  CREMENT feature.
230a0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 77 52  .*/.case OP_NewR
230b0 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20  owid: {         
230c0 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69    /* out2 */.  i
230d0 36 34 20 76 3b 20 20 20 20 20 20 20 20 20 20 20  64 v;           
230e0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77        /* The new
230f0 20 72 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62 65   rowid */.  Vdbe
23100 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20  Cursor *pC;     
23110 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66 20     /* Cursor of 
23120 74 61 62 6c 65 20 74 6f 20 67 65 74 20 74 68 65  table to get the
23130 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20   new rowid */.  
23140 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20  int res;        
23150 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
23160 20 6f 66 20 61 6e 20 73 71 6c 69 74 65 33 42 74   of an sqlite3Bt
23170 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 69  reeLast() */.  i
23180 6e 74 20 63 6e 74 3b 20 20 20 20 20 20 20 20 20  nt cnt;         
23190 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72        /* Counter
231a0 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75   to limit the nu
231b0 6d 62 65 72 20 6f 66 20 73 65 61 72 63 68 65 73  mber of searches
231c0 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b   */.  Mem *pMem;
231d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
231e0 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
231f0 20 6c 61 72 67 65 73 74 20 72 6f 77 69 64 20 66   largest rowid f
23200 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  or AUTOINCREMENT
23210 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20   */.  VdbeFrame 
23220 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 2f 2a 20  *pFrame;     /* 
23230 52 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 56 44  Root frame of VD
23240 42 45 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a  BE */..  v = 0;.
23250 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 70 4f 75    res = 0;.  pOu
23260 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
23270 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73  se(p, pOp);.  as
23280 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
23290 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
232a0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
232b0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
232c0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
232d0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
232e0 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
232f0 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
23300 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63    assert( pC->uc
23310 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  .pCursor!=0 );. 
23320 20 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65   {.    /* The ne
23330 78 74 20 72 6f 77 69 64 20 6f 72 20 72 65 63 6f  xt rowid or reco
23340 72 64 20 6e 75 6d 62 65 72 20 28 64 69 66 66 65  rd number (diffe
23350 72 65 6e 74 20 74 65 72 6d 73 20 66 6f 72 20 74  rent terms for t
23360 68 65 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74  he same.    ** t
23370 68 69 6e 67 29 20 69 73 20 6f 62 74 61 69 6e 65  hing) is obtaine
23380 64 20 69 6e 20 61 20 74 77 6f 2d 73 74 65 70 20  d in a two-step 
23390 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a  algorithm..    *
233a0 2a 0a 20 20 20 20 2a 2a 20 46 69 72 73 74 20 77  *.    ** First w
233b0 65 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e  e attempt to fin
233c0 64 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78  d the largest ex
233d0 69 73 74 69 6e 67 20 72 6f 77 69 64 20 61 6e 64  isting rowid and
233e0 20 61 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20   add one.    ** 
233f0 74 6f 20 74 68 61 74 2e 20 20 42 75 74 20 69 66  to that.  But if
23400 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69   the largest exi
23410 73 74 69 6e 67 20 72 6f 77 69 64 20 69 73 20 61  sting rowid is a
23420 6c 72 65 61 64 79 20 74 68 65 20 6d 61 78 69 6d  lready the maxim
23430 75 6d 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74 69  um.    ** positi
23440 76 65 20 69 6e 74 65 67 65 72 2c 20 77 65 20 68  ve integer, we h
23450 61 76 65 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f  ave to fall thro
23460 75 67 68 20 74 6f 20 74 68 65 20 73 65 63 6f 6e  ugh to the secon
23470 64 0a 20 20 20 20 2a 2a 20 70 72 6f 62 61 62 69  d.    ** probabi
23480 6c 69 73 74 69 63 20 61 6c 67 6f 72 69 74 68 6d  listic algorithm
23490 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54  .    **.    ** T
234a0 68 65 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69  he second algori
234b0 74 68 6d 20 69 73 20 74 6f 20 73 65 6c 65 63 74  thm is to select
234c0 20 61 20 72 6f 77 69 64 20 61 74 20 72 61 6e 64   a rowid at rand
234d0 6f 6d 20 61 6e 64 20 73 65 65 20 69 66 0a 20 20  om and see if.  
234e0 20 20 2a 2a 20 69 74 20 61 6c 72 65 61 64 79 20    ** it already 
234f0 65 78 69 73 74 73 20 69 6e 20 74 68 65 20 74 61  exists in the ta
23500 62 6c 65 2e 20 20 49 66 20 69 74 20 64 6f 65 73  ble.  If it does
23510 20 6e 6f 74 20 65 78 69 73 74 2c 20 77 65 20 68   not exist, we h
23520 61 76 65 0a 20 20 20 20 2a 2a 20 73 75 63 63 65  ave.    ** succe
23530 65 64 65 64 2e 20 20 49 66 20 74 68 65 20 72 61  eded.  If the ra
23540 6e 64 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73 20  ndom rowid does 
23550 65 78 69 73 74 2c 20 77 65 20 73 65 6c 65 63 74  exist, we select
23560 20 61 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a   a new one.    *
23570 2a 20 61 6e 64 20 74 72 79 20 61 67 61 69 6e 2c  * and try again,
23580 20 75 70 20 74 6f 20 31 30 30 20 74 69 6d 65 73   up to 100 times
23590 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73  ..    */.    ass
235a0 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
235b0 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49   );..#ifdef SQLI
235c0 54 45 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a 23  TE_32BIT_ROWID.#
235d0 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f     define MAX_RO
235e0 57 49 44 20 30 78 37 66 66 66 66 66 66 66 0a 23  WID 0x7fffffff.#
235f0 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65  else.    /* Some
23600 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c   compilers compl
23610 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74 61  ain about consta
23620 6e 74 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  nts of the form 
23630 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66 66  0x7fffffffffffff
23640 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72  ff..    ** Other
23650 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74  s complain about
23660 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66   0x7ffffffffffff
23670 66 66 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c  ffffLL.  The fol
23680 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 73 65 65  lowing macro see
23690 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f  ms.    ** to pro
236a0 76 69 64 65 20 74 68 65 20 63 6f 6e 73 74 61 6e  vide the constan
236b0 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61  t while making a
236c0 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20 68 61 70  ll compilers hap
236d0 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64  py..    */.#   d
236e0 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20  efine MAX_ROWID 
236f0 20 28 69 36 34 29 28 20 28 28 28 75 36 34 29 30   (i64)( (((u64)0
23700 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29 20  x7fffffff)<<32) 
23710 7c 20 28 75 36 34 29 30 78 66 66 66 66 66 66 66  | (u64)0xfffffff
23720 66 20 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20  f ).#endif..    
23730 69 66 28 20 21 70 43 2d 3e 75 73 65 52 61 6e 64  if( !pC->useRand
23740 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20  omRowid ){.     
23750 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
23760 65 65 4c 61 73 74 28 70 43 2d 3e 75 63 2e 70 43  eeLast(pC->uc.pC
23770 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20  ursor, &res);.  
23780 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
23790 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
237a0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
237b0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
237c0 7d 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 20  }.      if( res 
237d0 29 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20 31  ){.        v = 1
237e0 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 36 31  ;   /* IMP: R-61
237f0 39 31 34 2d 34 38 30 37 34 20 2a 2f 0a 20 20 20  914-48074 */.   
23800 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
23810 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
23820 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61  3BtreeCursorIsVa
23830 6c 69 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  lid(pC->uc.pCurs
23840 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 76  or) );.        v
23850 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
23860 6e 74 65 67 65 72 4b 65 79 28 70 43 2d 3e 75 63  ntegerKey(pC->uc
23870 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20  .pCursor);.     
23880 20 20 20 69 66 28 20 76 3e 3d 4d 41 58 5f 52 4f     if( v>=MAX_RO
23890 57 49 44 20 29 7b 0a 20 20 20 20 20 20 20 20 20  WID ){.         
238a0 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f   pC->useRandomRo
238b0 77 69 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  wid = 1;.       
238c0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
238d0 20 20 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a    v++;   /* IMP:
238e0 20 52 2d 32 39 35 33 38 2d 33 34 39 38 37 20 2a   R-29538-34987 *
238f0 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  /.        }.    
23900 20 20 7d 0a 20 20 20 20 7d 0a 0a 23 69 66 6e 64    }.    }..#ifnd
23910 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
23920 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20  UTOINCREMENT.   
23930 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a   if( pOp->p3 ){.
23940 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20        /* Assert 
23950 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c  that P3 is a val
23960 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20  id memory cell. 
23970 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
23980 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
23990 20 20 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d      if( p->pFram
239a0 65 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72  e ){.        for
239b0 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d  (pFrame=p->pFram
239c0 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  e; pFrame->pPare
239d0 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d  nt; pFrame=pFram
239e0 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20  e->pParent);.   
239f0 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74       /* Assert t
23a00 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69  hat P3 is a vali
23a10 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a  d memory cell. *
23a20 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  /.        assert
23a30 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 46 72 61 6d  ( pOp->p3<=pFram
23a40 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20  e->nMem );.     
23a50 20 20 20 70 4d 65 6d 20 3d 20 26 70 46 72 61 6d     pMem = &pFram
23a60 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  e->aMem[pOp->p3]
23a70 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
23a80 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74         /* Assert
23a90 20 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61   that P3 is a va
23aa0 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e  lid memory cell.
23ab0 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65   */.        asse
23ac0 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  rt( pOp->p3<=(p-
23ad0 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
23ae0 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20  rsor) );.       
23af0 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f   pMem = &aMem[pO
23b00 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20  p->p3];.        
23b10 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
23b20 28 70 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20  (p, pMem);.     
23b30 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28   }.      assert(
23b40 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4d 65 6d   memIsValid(pMem
23b50 29 20 29 3b 0a 0a 20 20 20 20 20 20 52 45 47 49  ) );..      REGI
23b60 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
23b70 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20  p3, pMem);.     
23b80 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
23b90 6e 74 65 67 65 72 69 66 79 28 70 4d 65 6d 29 3b  ntegerify(pMem);
23ba0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
23bb0 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pMem->flags & ME
23bc0 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f 2a  M_Int)!=0 );  /*
23bd0 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73 20 61   mem(P3) holds a
23be0 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20 20  n integer */.   
23bf0 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e 69     if( pMem->u.i
23c00 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20 70  ==MAX_ROWID || p
23c10 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
23c20 64 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  d ){.        rc 
23c30 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20  = SQLITE_FULL;  
23c40 20 2f 2a 20 49 4d 50 3a 20 52 2d 31 37 38 31 37   /* IMP: R-17817
23c50 2d 30 30 36 33 30 20 2a 2f 0a 20 20 20 20 20 20  -00630 */.      
23c60 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
23c70 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
23c80 20 7d 0a 20 20 20 20 20 20 69 66 28 20 76 3c 70   }.      if( v<p
23c90 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20  Mem->u.i+1 ){.  
23ca0 20 20 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e        v = pMem->
23cb0 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 7d  u.i + 1;.      }
23cc0 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69  .      pMem->u.i
23cd0 20 3d 20 76 3b 0a 20 20 20 20 7d 0a 23 65 6e 64   = v;.    }.#end
23ce0 69 66 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 75  if.    if( pC->u
23cf0 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b  seRandomRowid ){
23d00 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50 4c 45 4d  .      /* IMPLEM
23d10 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30  ENTATION-OF: R-0
23d20 37 36 37 37 2d 34 31 38 38 31 20 49 66 20 74 68  7677-41881 If th
23d30 65 20 6c 61 72 67 65 73 74 20 52 4f 57 49 44 20  e largest ROWID 
23d40 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65 0a  is equal to the.
23d50 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 73 74        ** largest
23d60 20 70 6f 73 73 69 62 6c 65 20 69 6e 74 65 67 65   possible intege
23d70 72 20 28 39 32 32 33 33 37 32 30 33 36 38 35 34  r (9223372036854
23d80 37 37 35 38 30 37 29 20 74 68 65 6e 20 74 68 65  775807) then the
23d90 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 20   database.      
23da0 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61 72 74 73  ** engine starts
23db0 20 70 69 63 6b 69 6e 67 20 70 6f 73 69 74 69 76   picking positiv
23dc0 65 20 63 61 6e 64 69 64 61 74 65 20 52 4f 57 49  e candidate ROWI
23dd0 44 73 20 61 74 20 72 61 6e 64 6f 6d 20 75 6e 74  Ds at random unt
23de0 69 6c 0a 20 20 20 20 20 20 2a 2a 20 69 74 20 66  il.      ** it f
23df0 69 6e 64 73 20 6f 6e 65 20 74 68 61 74 20 69 73  inds one that is
23e00 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20   not previously 
23e10 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 61  used. */.      a
23e20 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d  ssert( pOp->p3==
23e30 30 20 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e 6e  0 );  /* We cann
23e40 6f 74 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d 20  ot be in random 
23e50 72 6f 77 69 64 20 6d 6f 64 65 20 69 66 20 74 68  rowid mode if th
23e60 69 73 20 69 73 0a 20 20 20 20 20 20 20 20 20 20  is is.          
23e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e80 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e 43     ** an AUTOINC
23e90 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a 2f  REMENT table. */
23ea0 0a 20 20 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a  .      cnt = 0;.
23eb0 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20        do{.      
23ec0 20 20 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d    sqlite3_random
23ed0 6e 65 73 73 28 73 69 7a 65 6f 66 28 76 29 2c 20  ness(sizeof(v), 
23ee0 26 76 29 3b 0a 20 20 20 20 20 20 20 20 76 20 26  &v);.        v &
23ef0 3d 20 28 4d 41 58 5f 52 4f 57 49 44 3e 3e 31 29  = (MAX_ROWID>>1)
23f00 3b 20 76 2b 2b 3b 20 20 2f 2a 20 45 6e 73 75 72  ; v++;  /* Ensur
23f10 65 20 74 68 61 74 20 76 20 69 73 20 67 72 65 61  e that v is grea
23f20 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 20 2a 2f  ter than zero */
23f30 0a 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20 20  .      }while(  
23f40 28 28 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74  ((rc = sqlite3Bt
23f50 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
23f60 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  d(pC->uc.pCursor
23f70 2c 20 30 2c 20 28 75 36 34 29 76 2c 0a 20 20 20  , 0, (u64)v,.   
23f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 2c                0,
23fb0 20 26 72 65 73 29 29 3d 3d 53 51 4c 49 54 45 5f   &res))==SQLITE_
23fc0 4f 4b 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  OK).            
23fd0 26 26 20 28 72 65 73 3d 3d 30 29 0a 20 20 20 20  && (res==0).    
23fe0 20 20 20 20 20 20 20 20 26 26 20 28 2b 2b 63 6e          && (++cn
23ff0 74 3c 31 30 30 29 29 3b 0a 20 20 20 20 20 20 69  t<100));.      i
24000 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
24010 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
24020 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 3d 3d  .      if( res==
24030 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  0 ){.        rc 
24040 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20  = SQLITE_FULL;  
24050 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 38 32 31 39   /* IMP: R-38219
24060 2d 35 33 30 30 32 20 2a 2f 0a 20 20 20 20 20 20  -53002 */.      
24070 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
24080 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
24090 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28   }.      assert(
240a0 20 76 3e 30 20 29 3b 20 20 2f 2a 20 45 56 3a 20   v>0 );  /* EV: 
240b0 52 2d 34 30 38 31 32 2d 30 33 35 37 30 20 2a 2f  R-40812-03570 */
240c0 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64  .    }.    pC->d
240d0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
240e0 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  0;.    pC->cache
240f0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
24100 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  TALE;.  }.  pOut
24110 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65  ->u.i = v;.  bre
24120 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
24130 3a 20 49 6e 73 65 72 74 20 50 31 20 50 32 20 50  : Insert P1 P2 P
24140 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
24150 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33  sis: intkey=r[P3
24160 5d 20 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a  ] data=r[P2].**.
24170 2a 2a 20 57 72 69 74 65 20 61 6e 20 65 6e 74 72  ** Write an entr
24180 79 20 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65  y into the table
24190 20 6f 66 20 63 75 72 73 6f 72 20 50 31 2e 20 20   of cursor P1.  
241a0 41 20 6e 65 77 20 65 6e 74 72 79 20 69 73 0a 2a  A new entry is.*
241b0 2a 20 63 72 65 61 74 65 64 20 69 66 20 69 74 20  * created if it 
241c0 64 6f 65 73 6e 27 74 20 61 6c 72 65 61 64 79 20  doesn't already 
241d0 65 78 69 73 74 20 6f 72 20 74 68 65 20 64 61 74  exist or the dat
241e0 61 20 66 6f 72 20 61 6e 20 65 78 69 73 74 69 6e  a for an existin
241f0 67 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20 6f 76  g.** entry is ov
24200 65 72 77 72 69 74 74 65 6e 2e 20 20 54 68 65 20  erwritten.  The 
24210 64 61 74 61 20 69 73 20 74 68 65 20 76 61 6c 75  data is the valu
24220 65 20 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f 72 65  e MEM_Blob store
24230 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a  d in register.**
24240 20 6e 75 6d 62 65 72 20 50 32 2e 20 54 68 65 20   number P2. The 
24250 6b 65 79 20 69 73 20 73 74 6f 72 65 64 20 69 6e  key is stored in
24260 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 54 68   register P3. Th
24270 65 20 6b 65 79 20 6d 75 73 74 0a 2a 2a 20 62 65  e key must.** be
24280 20 61 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a   a MEM_Int..**.*
24290 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
242a0 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20  NCHANGE flag of 
242b0 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  P5 is set, then 
242c0 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63  the row change c
242d0 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65  ount is.** incre
242e0 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73  mented (otherwis
242f0 65 20 6e 6f 74 29 2e 20 20 49 66 20 74 68 65 20  e not).  If the 
24300 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44  OPFLAG_LASTROWID
24310 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73   flag of P5 is s
24320 65 74 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f 77 69  et,.** then rowi
24330 64 20 69 73 20 73 74 6f 72 65 64 20 66 6f 72 20  d is stored for 
24340 73 75 62 73 65 71 75 65 6e 74 20 72 65 74 75 72  subsequent retur
24350 6e 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69  n by the.** sqli
24360 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f  te3_last_insert_
24370 72 6f 77 69 64 28 29 20 66 75 6e 63 74 69 6f 6e  rowid() function
24380 20 28 6f 74 68 65 72 77 69 73 65 20 69 74 20 69   (otherwise it i
24390 73 20 75 6e 6d 6f 64 69 66 69 65 64 29 2e 0a 2a  s unmodified)..*
243a0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
243b0 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
243c0 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73   flag of P5 is s
243d0 65 74 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e  et, the implemen
243e0 74 61 74 69 6f 6e 20 6d 69 67 68 74 0a 2a 2a 20  tation might.** 
243f0 72 75 6e 20 66 61 73 74 65 72 20 62 79 20 61 76  run faster by av
24400 6f 69 64 69 6e 67 20 61 6e 20 75 6e 6e 65 63 65  oiding an unnece
24410 73 73 61 72 79 20 73 65 65 6b 20 6f 6e 20 63 75  ssary seek on cu
24420 72 73 6f 72 20 50 31 2e 20 20 48 6f 77 65 76 65  rsor P1.  Howeve
24430 72 2c 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47  r,.** the OPFLAG
24440 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66  _USESEEKRESULT f
24450 6c 61 67 20 6d 75 73 74 20 6f 6e 6c 79 20 62 65  lag must only be
24460 20 73 65 74 20 69 66 20 74 68 65 72 65 20 68 61   set if there ha
24470 76 65 20 62 65 65 6e 20 6e 6f 20 70 72 69 6f 72  ve been no prior
24480 0a 2a 2a 20 73 65 65 6b 73 20 6f 6e 20 74 68 65  .** seeks on the
24490 20 63 75 72 73 6f 72 20 6f 72 20 69 66 20 74 68   cursor or if th
244a0 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 65  e most recent se
244b0 65 6b 20 75 73 65 64 20 61 20 6b 65 79 20 65 71  ek used a key eq
244c0 75 61 6c 20 74 6f 20 50 33 2e 0a 2a 2a 0a 2a 2a  ual to P3..**.**
244d0 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 49   If the OPFLAG_I
244e0 53 55 50 44 41 54 45 20 66 6c 61 67 20 69 73 20  SUPDATE flag is 
244f0 73 65 74 2c 20 74 68 65 6e 20 74 68 69 73 20 6f  set, then this o
24500 70 63 6f 64 65 20 69 73 20 70 61 72 74 20 6f 66  pcode is part of
24510 20 61 6e 0a 2a 2a 20 55 50 44 41 54 45 20 6f 70   an.** UPDATE op
24520 65 72 61 74 69 6f 6e 2e 20 20 4f 74 68 65 72 77  eration.  Otherw
24530 69 73 65 20 28 69 66 20 74 68 65 20 66 6c 61 67  ise (if the flag
24540 20 69 73 20 63 6c 65 61 72 29 20 74 68 65 6e 20   is clear) then 
24550 74 68 69 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 69  this opcode.** i
24560 73 20 70 61 72 74 20 6f 66 20 61 6e 20 49 4e 53  s part of an INS
24570 45 52 54 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20  ERT operation.  
24580 54 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 69  The difference i
24590 73 20 6f 6e 6c 79 20 69 6d 70 6f 72 74 61 6e 74  s only important
245a0 20 74 6f 0a 2a 2a 20 74 68 65 20 75 70 64 61 74   to.** the updat
245b0 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61  e hook..**.** Pa
245c0 72 61 6d 65 74 65 72 20 50 34 20 6d 61 79 20 70  rameter P4 may p
245d0 6f 69 6e 74 20 74 6f 20 61 20 54 61 62 6c 65 20  oint to a Table 
245e0 73 74 72 75 63 74 75 72 65 2c 20 6f 72 20 6d 61  structure, or ma
245f0 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74  y be NULL. If it
24600 20 69 73 20 0a 2a 2a 20 6e 6f 74 20 4e 55 4c 4c   is .** not NULL
24610 2c 20 74 68 65 6e 20 74 68 65 20 75 70 64 61 74  , then the updat
24620 65 2d 68 6f 6f 6b 20 28 73 71 6c 69 74 65 33 2e  e-hook (sqlite3.
24630 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29  xUpdateCallback)
24640 20 69 73 20 69 6e 76 6f 6b 65 64 20 0a 2a 2a 20   is invoked .** 
24650 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63 63  following a succ
24660 65 73 73 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a  essful insert..*
24670 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f  *.** (WARNING/TO
24680 44 4f 3a 20 49 66 20 50 31 20 69 73 20 61 20 70  DO: If P1 is a p
24690 73 65 75 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64  seudo-cursor and
246a0 20 50 32 20 69 73 20 64 79 6e 61 6d 69 63 61 6c   P2 is dynamical
246b0 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c  ly.** allocated,
246c0 20 74 68 65 6e 20 6f 77 6e 65 72 73 68 69 70 20   then ownership 
246d0 6f 66 20 50 32 20 69 73 20 74 72 61 6e 73 66 65  of P2 is transfe
246e0 72 72 65 64 20 74 6f 20 74 68 65 20 70 73 65 75  rred to the pseu
246f0 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64  do-cursor.** and
24700 20 72 65 67 69 73 74 65 72 20 50 32 20 62 65 63   register P2 bec
24710 6f 6d 65 73 20 65 70 68 65 6d 65 72 61 6c 2e 20  omes ephemeral. 
24720 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 69   If the cursor i
24730 73 20 63 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a  s changed, the.*
24740 2a 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  * value of regis
24750 74 65 72 20 50 32 20 77 69 6c 6c 20 74 68 65 6e  ter P2 will then
24760 20 63 68 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73   change.  Make s
24770 75 72 65 20 74 68 69 73 20 64 6f 65 73 20 6e 6f  ure this does no
24780 74 0a 2a 2a 20 63 61 75 73 65 20 61 6e 79 20 70  t.** cause any p
24790 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20  roblems.).**.** 
247a0 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
247b0 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74   only works on t
247c0 61 62 6c 65 73 2e 20 20 54 68 65 20 65 71 75 69  ables.  The equi
247d0 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69  valent instructi
247e0 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65  on.** for indice
247f0 73 20 69 73 20 4f 50 5f 49 64 78 49 6e 73 65 72  s is OP_IdxInser
24800 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  t..*/./* Opcode:
24810 20 49 6e 73 65 72 74 49 6e 74 20 50 31 20 50 32   InsertInt P1 P2
24820 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
24830 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 50 33  opsis: intkey=P3
24840 20 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a   data=r[P2].**.*
24850 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 65 78 61  * This works exa
24860 63 74 6c 79 20 6c 69 6b 65 20 4f 50 5f 49 6e 73  ctly like OP_Ins
24870 65 72 74 20 65 78 63 65 70 74 20 74 68 61 74 20  ert except that 
24880 74 68 65 20 6b 65 79 20 69 73 20 74 68 65 0a 2a  the key is the.*
24890 2a 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * integer value 
248a0 50 33 2c 20 6e 6f 74 20 74 68 65 20 76 61 6c 75  P3, not the valu
248b0 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72  e of the integer
248c0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
248d0 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20  ter P3..*/.case 
248e0 4f 50 5f 49 6e 73 65 72 74 3a 20 0a 63 61 73 65  OP_Insert: .case
248f0 20 4f 50 5f 49 6e 73 65 72 74 49 6e 74 3a 20 7b   OP_InsertInt: {
24900 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 3b 20 20  .  Mem *pData;  
24910 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c       /* MEM cell
24920 20 68 6f 6c 64 69 6e 67 20 64 61 74 61 20 66 6f   holding data fo
24930 72 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  r the record to 
24940 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20  be inserted */. 
24950 20 4d 65 6d 20 2a 70 4b 65 79 3b 20 20 20 20 20   Mem *pKey;     
24960 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68     /* MEM cell h
24970 6f 6c 64 69 6e 67 20 6b 65 79 20 20 66 6f 72 20  olding key  for 
24980 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
24990 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
249a0 20 20 2f 2a 20 43 75 72 73 6f 72 20 74 6f 20 74    /* Cursor to t
249b0 61 62 6c 65 20 69 6e 74 6f 20 77 68 69 63 68 20  able into which 
249c0 69 6e 73 65 72 74 20 69 73 20 77 72 69 74 74 65  insert is writte
249d0 6e 20 2a 2f 0a 20 20 69 6e 74 20 73 65 65 6b 52  n */.  int seekR
249e0 65 73 75 6c 74 3b 20 20 20 2f 2a 20 52 65 73 75  esult;   /* Resu
249f0 6c 74 20 6f 66 20 70 72 69 6f 72 20 73 65 65 6b  lt of prior seek
24a00 20 6f 72 20 30 20 69 66 20 6e 6f 20 55 53 45 53   or 0 if no USES
24a10 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 2a  EEKRESULT flag *
24a20 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
24a30 7a 44 62 3b 20 20 2f 2a 20 64 61 74 61 62 61 73  zDb;  /* databas
24a40 65 20 6e 61 6d 65 20 2d 20 75 73 65 64 20 62 79  e name - used by
24a50 20 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b   the update hook
24a60 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61   */.  Table *pTa
24a70 62 3b 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65  b;      /* Table
24a80 20 73 74 72 75 63 74 75 72 65 20 2d 20 75 73 65   structure - use
24a90 64 20 62 79 20 75 70 64 61 74 65 20 61 6e 64 20  d by update and 
24aa0 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 73  pre-update hooks
24ab0 20 2a 2f 0a 20 20 69 6e 74 20 6f 70 3b 20 20 20   */.  int op;   
24ac0 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64          /* Opcod
24ad0 65 20 66 6f 72 20 75 70 64 61 74 65 20 68 6f 6f  e for update hoo
24ae0 6b 3a 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45  k: SQLITE_UPDATE
24af0 20 6f 72 20 53 51 4c 49 54 45 5f 49 4e 53 45 52   or SQLITE_INSER
24b00 54 20 2a 2f 0a 20 20 42 74 72 65 65 50 61 79 6c  T */.  BtreePayl
24b10 6f 61 64 20 78 3b 20 20 20 2f 2a 20 50 61 79 6c  oad x;   /* Payl
24b20 6f 61 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74  oad to be insert
24b30 65 64 20 2a 2f 0a 0a 20 20 6f 70 20 3d 20 30 3b  ed */..  op = 0;
24b40 0a 20 20 70 44 61 74 61 20 3d 20 26 61 4d 65 6d  .  pData = &aMem
24b50 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
24b60 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
24b70 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
24b80 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
24b90 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 44  t( memIsValid(pD
24ba0 61 74 61 29 20 29 3b 0a 20 20 70 43 20 3d 20 70  ata) );.  pC = p
24bb0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
24bc0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
24bd0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
24be0 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
24bf0 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
24c00 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
24c10 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61  Cursor!=0 );.  a
24c20 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20  ssert( (pOp->p5 
24c30 26 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 29  & OPFLAG_ISNOOP)
24c40 20 7c 7c 20 70 43 2d 3e 69 73 54 61 62 6c 65 20   || pC->isTable 
24c50 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
24c60 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42  ->p4type==P4_TAB
24c70 4c 45 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70  LE || pOp->p4typ
24c80 65 3e 3d 50 34 5f 53 54 41 54 49 43 20 29 3b 0a  e>=P4_STATIC );.
24c90 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
24ca0 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61 29  (pOp->p2, pData)
24cb0 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  ;..  if( pOp->op
24cc0 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 20  code==OP_Insert 
24cd0 29 7b 0a 20 20 20 20 70 4b 65 79 20 3d 20 26 61  ){.    pKey = &a
24ce0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
24cf0 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 2d 3e    assert( pKey->
24d00 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
24d10 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  );.    assert( m
24d20 65 6d 49 73 56 61 6c 69 64 28 70 4b 65 79 29 20  emIsValid(pKey) 
24d30 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
24d40 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
24d50 4b 65 79 29 3b 0a 20 20 20 20 78 2e 6e 4b 65 79  Key);.    x.nKey
24d60 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20   = pKey->u.i;.  
24d70 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
24d80 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
24d90 4f 50 5f 49 6e 73 65 72 74 49 6e 74 20 29 3b 0a  OP_InsertInt );.
24da0 20 20 20 20 78 2e 6e 4b 65 79 20 3d 20 70 4f 70      x.nKey = pOp
24db0 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  ->p3;.  }..  if(
24dc0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
24dd0 5f 54 41 42 4c 45 20 26 26 20 48 41 53 5f 55 50  _TABLE && HAS_UP
24de0 44 41 54 45 5f 48 4f 4f 4b 28 64 62 29 20 29 7b  DATE_HOOK(db) ){
24df0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
24e00 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20 7a  >iDb>=0 );.    z
24e10 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d  Db = db->aDb[pC-
24e20 3e 69 44 62 5d 2e 7a 44 62 53 4e 61 6d 65 3b 0a  >iDb].zDbSName;.
24e30 20 20 20 20 70 54 61 62 20 3d 20 70 4f 70 2d 3e      pTab = pOp->
24e40 70 34 2e 70 54 61 62 3b 0a 20 20 20 20 61 73 73  p4.pTab;.    ass
24e50 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26 20  ert( (pOp->p5 & 
24e60 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 29 20 7c  OPFLAG_ISNOOP) |
24e70 7c 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29  | HasRowid(pTab)
24e80 20 29 3b 0a 20 20 20 20 6f 70 20 3d 20 28 28 70   );.    op = ((p
24e90 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
24ea0 49 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49  ISUPDATE) ? SQLI
24eb0 54 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49  TE_UPDATE : SQLI
24ec0 54 45 5f 49 4e 53 45 52 54 29 3b 0a 20 20 7d 65  TE_INSERT);.  }e
24ed0 6c 73 65 7b 0a 20 20 20 20 70 54 61 62 20 3d 20  lse{.    pTab = 
24ee0 30 3b 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64  0; /* Not needed
24ef0 2e 20 20 53 69 6c 65 6e 63 65 20 61 20 63 6f 6d  .  Silence a com
24f00 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a  piler warning. *
24f10 2f 0a 20 20 20 20 7a 44 62 20 3d 20 30 3b 20 20  /.    zDb = 0;  
24f20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
24f30 53 69 6c 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c  Silence a compil
24f40 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20  er warning. */. 
24f50 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54   }..#ifdef SQLIT
24f60 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41  E_ENABLE_PREUPDA
24f70 54 45 5f 48 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76  TE_HOOK.  /* Inv
24f80 6f 6b 65 20 74 68 65 20 70 72 65 2d 75 70 64 61  oke the pre-upda
24f90 74 65 20 68 6f 6f 6b 2c 20 69 66 20 61 6e 79 20  te hook, if any 
24fa0 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72  */.  if( db->xPr
24fb0 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  eUpdateCallback 
24fc0 0a 20 20 20 26 26 20 70 4f 70 2d 3e 70 34 74 79  .   && pOp->p4ty
24fd0 70 65 3d 3d 50 34 5f 54 41 42 4c 45 0a 20 20 20  pe==P4_TABLE.   
24fe0 26 26 20 21 28 70 4f 70 2d 3e 70 35 20 26 20 4f  && !(pOp->p5 & O
24ff0 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 0a  PFLAG_ISUPDATE).
25000 20 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33    ){.    sqlite3
25010 56 64 62 65 50 72 65 55 70 64 61 74 65 48 6f 6f  VdbePreUpdateHoo
25020 6b 28 70 2c 20 70 43 2c 20 53 51 4c 49 54 45 5f  k(p, pC, SQLITE_
25030 49 4e 53 45 52 54 2c 20 7a 44 62 2c 20 70 54 61  INSERT, zDb, pTa
25040 62 2c 20 78 2e 6e 4b 65 79 2c 20 70 4f 70 2d 3e  b, x.nKey, pOp->
25050 70 32 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  p2);.  }.  if( p
25060 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
25070 49 53 4e 4f 4f 50 20 29 20 62 72 65 61 6b 3b 0a  ISNOOP ) break;.
25080 23 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 70 4f  #endif..  if( pO
25090 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e  p->p5 & OPFLAG_N
250a0 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61  CHANGE ) p->nCha
250b0 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70  nge++;.  if( pOp
250c0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41  ->p5 & OPFLAG_LA
250d0 53 54 52 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61  STROWID ) db->la
250e0 73 74 52 6f 77 69 64 20 3d 20 78 2e 6e 4b 65 79  stRowid = x.nKey
250f0 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66  ;.  if( pData->f
25100 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
25110 29 7b 0a 20 20 20 20 78 2e 70 44 61 74 61 20 3d  ){.    x.pData =
25120 20 30 3b 0a 20 20 20 20 78 2e 6e 44 61 74 61 20   0;.    x.nData 
25130 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  = 0;.  }else{.  
25140 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61 2d    assert( pData-
25150 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c  >flags & (MEM_Bl
25160 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a 20  ob|MEM_Str) );. 
25170 20 20 20 78 2e 70 44 61 74 61 20 3d 20 70 44 61     x.pData = pDa
25180 74 61 2d 3e 7a 3b 0a 20 20 20 20 78 2e 6e 44 61  ta->z;.    x.nDa
25190 74 61 20 3d 20 70 44 61 74 61 2d 3e 6e 3b 0a 20  ta = pData->n;. 
251a0 20 7d 0a 20 20 73 65 65 6b 52 65 73 75 6c 74 20   }.  seekResult 
251b0 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50  = ((pOp->p5 & OP
251c0 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
251d0 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65  LT) ? pC->seekRe
251e0 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20 69 66 28  sult : 0);.  if(
251f0 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20   pData->flags & 
25200 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20  MEM_Zero ){.    
25210 78 2e 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d  x.nZero = pData-
25220 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73  >u.nZero;.  }els
25230 65 7b 0a 20 20 20 20 78 2e 6e 5a 65 72 6f 20 3d  e{.    x.nZero =
25240 20 30 3b 0a 20 20 7d 0a 20 20 78 2e 70 4b 65 79   0;.  }.  x.pKey
25250 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c   = 0;.  rc = sql
25260 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74 28  ite3BtreeInsert(
25270 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
25280 26 78 2c 0a 20 20 20 20 20 20 28 70 4f 70 2d 3e  &x,.      (pOp->
25290 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 41 50 50  p5 & (OPFLAG_APP
252a0 45 4e 44 7c 4f 50 46 4c 41 47 5f 53 41 56 45 50  END|OPFLAG_SAVEP
252b0 4f 53 49 54 49 4f 4e 29 29 2c 20 73 65 65 6b 52  OSITION)), seekR
252c0 65 73 75 6c 74 0a 20 20 29 3b 0a 20 20 70 43 2d  esult.  );.  pC-
252d0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
252e0 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 0;.  pC->cache
252f0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
25300 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f  TALE;..  /* Invo
25310 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f  ke the update-ho
25320 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20  ok if required. 
25330 2a 2f 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  */.  if( rc ) go
25340 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
25350 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 64 62 2d  error;.  if( db-
25360 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
25370 20 26 26 20 6f 70 20 29 7b 0a 20 20 20 20 64 62   && op ){.    db
25380 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
25390 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67  k(db->pUpdateArg
253a0 2c 20 6f 70 2c 20 7a 44 62 2c 20 70 54 61 62 2d  , op, zDb, pTab-
253b0 3e 7a 4e 61 6d 65 2c 20 78 2e 6e 4b 65 79 29 3b  >zName, x.nKey);
253c0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
253d0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 6c 65  ./* Opcode: Dele
253e0 74 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  te P1 P2 P3 P4 P
253f0 35 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74  5.**.** Delete t
25400 68 65 20 72 65 63 6f 72 64 20 61 74 20 77 68 69  he record at whi
25410 63 68 20 74 68 65 20 50 31 20 63 75 72 73 6f 72  ch the P1 cursor
25420 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
25430 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 49 66  inting..**.** If
25440 20 74 68 65 20 4f 50 46 4c 41 47 5f 53 41 56 45   the OPFLAG_SAVE
25450 50 4f 53 49 54 49 4f 4e 20 62 69 74 20 6f 66 20  POSITION bit of 
25460 74 68 65 20 50 35 20 70 61 72 61 6d 65 74 65 72  the P5 parameter
25470 20 69 73 20 73 65 74 2c 20 74 68 65 6e 0a 2a 2a   is set, then.**
25480 20 74 68 65 20 63 75 72 73 6f 72 20 77 69 6c 6c   the cursor will
25490 20 62 65 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e   be left pointin
254a0 67 20 61 74 20 20 65 69 74 68 65 72 20 74 68 65  g at  either the
254b0 20 6e 65 78 74 20 6f 72 20 74 68 65 20 70 72 65   next or the pre
254c0 76 69 6f 75 73 0a 2a 2a 20 72 65 63 6f 72 64 20  vious.** record 
254d0 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 49 66  in the table. If
254e0 20 69 74 20 69 73 20 6c 65 66 74 20 70 6f 69 6e   it is left poin
254f0 74 69 6e 67 20 61 74 20 74 68 65 20 6e 65 78 74  ting at the next
25500 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a   record, then.**
25510 20 74 68 65 20 6e 65 78 74 20 4e 65 78 74 20 69   the next Next i
25520 6e 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20  nstruction will 
25530 62 65 20 61 20 6e 6f 2d 6f 70 2e 20 41 73 20 61  be a no-op. As a
25540 20 72 65 73 75 6c 74 2c 20 69 6e 20 74 68 69 73   result, in this
25550 20 63 61 73 65 0a 2a 2a 20 69 74 20 69 73 20 6f   case.** it is o
25560 6b 20 74 6f 20 64 65 6c 65 74 65 20 61 20 72 65  k to delete a re
25570 63 6f 72 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  cord from within
25580 20 61 20 4e 65 78 74 20 6c 6f 6f 70 2e 20 49 66   a Next loop. If
25590 20 0a 2a 2a 20 4f 50 46 4c 41 47 5f 53 41 56 45   .** OPFLAG_SAVE
255a0 50 4f 53 49 54 49 4f 4e 20 62 69 74 20 6f 66 20  POSITION bit of 
255b0 50 35 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65  P5 is clear, the
255c0 6e 20 74 68 65 20 63 75 72 73 6f 72 20 77 69 6c  n the cursor wil
255d0 6c 20 62 65 0a 2a 2a 20 6c 65 66 74 20 69 6e 20  l be.** left in 
255e0 61 6e 20 75 6e 64 65 66 69 6e 65 64 20 73 74 61  an undefined sta
255f0 74 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  te..**.** If the
25600 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54   OPFLAG_AUXDELET
25610 45 20 62 69 74 20 69 73 20 73 65 74 20 6f 6e 20  E bit is set on 
25620 50 35 2c 20 74 68 61 74 20 69 6e 64 69 63 61 74  P5, that indicat
25630 65 73 20 74 68 61 74 20 74 68 69 73 0a 2a 2a 20  es that this.** 
25640 64 65 6c 65 74 65 20 6f 6e 65 20 6f 66 20 73 65  delete one of se
25650 76 65 72 61 6c 20 61 73 73 6f 63 69 61 74 65 64  veral associated
25660 20 77 69 74 68 20 64 65 6c 65 74 69 6e 67 20 61   with deleting a
25670 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20 61   table row and a
25680 6c 6c 20 69 74 73 0a 2a 2a 20 61 73 73 6f 63 69  ll its.** associ
25690 61 74 65 64 20 69 6e 64 65 78 20 65 6e 74 72 69  ated index entri
256a0 65 73 2e 20 20 45 78 61 63 74 6c 79 20 6f 6e 65  es.  Exactly one
256b0 20 6f 66 20 74 68 6f 73 65 20 64 65 6c 65 74 65   of those delete
256c0 73 20 69 73 20 74 68 65 20 22 70 72 69 6d 61 72  s is the "primar
256d0 79 22 0a 2a 2a 20 64 65 6c 65 74 65 2e 20 20 54  y".** delete.  T
256e0 68 65 20 6f 74 68 65 72 73 20 61 72 65 20 61 6c  he others are al
256f0 6c 20 6f 6e 20 4f 50 46 4c 41 47 5f 46 4f 52 44  l on OPFLAG_FORD
25700 45 4c 45 54 45 20 63 75 72 73 6f 72 73 20 6f 72  ELETE cursors or
25710 20 65 6c 73 65 20 61 72 65 0a 2a 2a 20 6d 61 72   else are.** mar
25720 6b 65 64 20 77 69 74 68 20 74 68 65 20 41 55 58  ked with the AUX
25730 44 45 4c 45 54 45 20 66 6c 61 67 2e 0a 2a 2a 0a  DELETE flag..**.
25740 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
25750 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66  _NCHANGE flag of
25760 20 50 32 20 28 4e 42 3a 20 50 32 20 6e 6f 74 20   P2 (NB: P2 not 
25770 50 35 29 20 69 73 20 73 65 74 2c 20 74 68 65 6e  P5) is set, then
25780 20 74 68 65 20 72 6f 77 0a 2a 2a 20 63 68 61 6e   the row.** chan
25790 67 65 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72  ge count is incr
257a0 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69  emented (otherwi
257b0 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50  se not)..**.** P
257c0 31 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 70 73  1 must not be ps
257d0 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49 74 20  eudo-table.  It 
257e0 68 61 73 20 74 6f 20 62 65 20 61 20 72 65 61 6c  has to be a real
257f0 20 74 61 62 6c 65 20 77 69 74 68 0a 2a 2a 20 6d   table with.** m
25800 75 6c 74 69 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a  ultiple rows..**
25810 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74  .** If P4 is not
25820 20 4e 55 4c 4c 20 74 68 65 6e 20 69 74 20 70 6f   NULL then it po
25830 69 6e 74 73 20 74 6f 20 61 20 54 61 62 6c 65 20  ints to a Table 
25840 6f 62 6a 65 63 74 2e 20 49 6e 20 74 68 69 73 20  object. In this 
25850 63 61 73 65 20 65 69 74 68 65 72 20 0a 2a 2a 20  case either .** 
25860 74 68 65 20 75 70 64 61 74 65 20 6f 72 20 70 72  the update or pr
25870 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 2c 20 6f  e-update hook, o
25880 72 20 62 6f 74 68 2c 20 6d 61 79 20 62 65 20 69  r both, may be i
25890 6e 76 6f 6b 65 64 2e 20 54 68 65 20 50 31 20 63  nvoked. The P1 c
258a0 75 72 73 6f 72 20 6d 75 73 74 0a 2a 2a 20 68 61  ursor must.** ha
258b0 76 65 20 62 65 65 6e 20 70 6f 73 69 74 69 6f 6e  ve been position
258c0 65 64 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46  ed using OP_NotF
258d0 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f 20 69 6e  ound prior to in
258e0 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70 63 6f  voking this opco
258f0 64 65 20 69 6e 20 0a 2a 2a 20 74 68 69 73 20 63  de in .** this c
25900 61 73 65 2e 20 53 70 65 63 69 66 69 63 61 6c 6c  ase. Specificall
25910 79 2c 20 69 66 20 6f 6e 65 20 69 73 20 63 6f 6e  y, if one is con
25920 66 69 67 75 72 65 64 2c 20 74 68 65 20 70 72 65  figured, the pre
25930 2d 75 70 64 61 74 65 20 68 6f 6f 6b 20 69 73 20  -update hook is 
25940 0a 2a 2a 20 69 6e 76 6f 6b 65 64 20 69 66 20 50  .** invoked if P
25950 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 54  4 is not NULL. T
25960 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69  he update-hook i
25970 73 20 69 6e 76 6f 6b 65 64 20 69 66 20 6f 6e 65  s invoked if one
25980 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64 2c 20   is configured, 
25990 0a 2a 2a 20 50 34 20 69 73 20 6e 6f 74 20 4e 55  .** P4 is not NU
259a0 4c 4c 2c 20 61 6e 64 20 74 68 65 20 4f 50 46 4c  LL, and the OPFL
259b0 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20  AG_NCHANGE flag 
259c0 69 73 20 73 65 74 20 69 6e 20 50 32 2e 0a 2a 2a  is set in P2..**
259d0 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
259e0 47 5f 49 53 55 50 44 41 54 45 20 66 6c 61 67 20  G_ISUPDATE flag 
259f0 69 73 20 73 65 74 20 69 6e 20 50 32 2c 20 74 68  is set in P2, th
25a00 65 6e 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74  en P3 contains t
25a10 68 65 20 61 64 64 72 65 73 73 0a 2a 2a 20 6f 66  he address.** of
25a20 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   the memory cell
25a30 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74   that contains t
25a40 68 65 20 76 61 6c 75 65 20 74 68 61 74 20 74 68  he value that th
25a50 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 72  e rowid of the r
25a60 6f 77 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 73 65  ow will.** be se
25a70 74 20 74 6f 20 62 79 20 74 68 65 20 75 70 64 61  t to by the upda
25a80 74 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  te..*/.case OP_D
25a90 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43  elete: {.  VdbeC
25aa0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 63 6f 6e  ursor *pC;.  con
25ab0 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 0a 20 20  st char *zDb;.  
25ac0 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 69  Table *pTab;.  i
25ad0 6e 74 20 6f 70 66 6c 61 67 73 3b 0a 0a 20 20 6f  nt opflags;..  o
25ae0 70 66 6c 61 67 73 20 3d 20 70 4f 70 2d 3e 70 32  pflags = pOp->p2
25af0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
25b00 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
25b10 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
25b20 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
25b30 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
25b40 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
25b50 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
25b60 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
25b70 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  EE );.  assert( 
25b80 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d  pC->uc.pCursor!=
25b90 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
25ba0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
25bb0 6f 3d 3d 30 20 29 3b 0a 0a 23 69 66 64 65 66 20  o==0 );..#ifdef 
25bc0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
25bd0 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
25be0 50 34 5f 54 41 42 4c 45 20 26 26 20 48 61 73 52  P4_TABLE && HasR
25bf0 6f 77 69 64 28 70 4f 70 2d 3e 70 34 2e 70 54 61  owid(pOp->p4.pTa
25c00 62 29 20 26 26 20 70 4f 70 2d 3e 70 35 3d 3d 30  b) && pOp->p5==0
25c10 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 70 35   ){.    /* If p5
25c20 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 73 65   is zero, the se
25c30 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 74 68 61  ek operation tha
25c40 74 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68 65  t positioned the
25c50 20 63 75 72 73 6f 72 20 70 72 69 6f 72 20 74 6f   cursor prior to
25c60 0a 20 20 20 20 2a 2a 20 4f 50 5f 44 65 6c 65 74  .    ** OP_Delet
25c70 65 20 77 69 6c 6c 20 68 61 76 65 20 61 6c 73 6f  e will have also
25c80 20 73 65 74 20 74 68 65 20 70 43 2d 3e 6d 6f 76   set the pC->mov
25c90 65 74 6f 54 61 72 67 65 74 20 66 69 65 6c 64 20  etoTarget field 
25ca0 74 6f 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a  to the rowid of.
25cb0 20 20 20 20 2a 2a 20 74 68 65 20 72 6f 77 20 74      ** the row t
25cc0 68 61 74 20 69 73 20 62 65 69 6e 67 20 64 65 6c  hat is being del
25cd0 65 74 65 64 20 2a 2f 0a 20 20 20 20 69 36 34 20  eted */.    i64 
25ce0 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 42 74  iKey = sqlite3Bt
25cf0 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43  reeIntegerKey(pC
25d00 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
25d10 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6d     assert( pC->m
25d20 6f 76 65 74 6f 54 61 72 67 65 74 3d 3d 69 4b 65  ovetoTarget==iKe
25d30 79 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  y );.  }.#endif.
25d40 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 75 70 64  .  /* If the upd
25d50 61 74 65 2d 68 6f 6f 6b 20 6f 72 20 70 72 65 2d  ate-hook or pre-
25d60 75 70 64 61 74 65 2d 68 6f 6f 6b 20 77 69 6c 6c  update-hook will
25d70 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 73 65 74   be invoked, set
25d80 20 7a 44 62 20 74 6f 0a 20 20 2a 2a 20 74 68 65   zDb to.  ** the
25d90 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 62 20   name of the db 
25da0 74 6f 20 70 61 73 73 20 61 73 20 74 6f 20 69 74  to pass as to it
25db0 2e 20 41 6c 73 6f 20 73 65 74 20 6c 6f 63 61 6c  . Also set local
25dc0 20 70 54 61 62 20 74 6f 20 61 20 63 6f 70 79 0a   pTab to a copy.
25dd0 20 20 2a 2a 20 6f 66 20 70 34 2e 70 54 61 62 2e    ** of p4.pTab.
25de0 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 70 35 20   Finally, if p5 
25df0 69 73 20 74 72 75 65 2c 20 69 6e 64 69 63 61 74  is true, indicat
25e00 69 6e 67 20 74 68 61 74 20 74 68 69 73 20 63 75  ing that this cu
25e10 72 73 6f 72 20 77 61 73 0a 20 20 2a 2a 20 6c 61  rsor was.  ** la
25e20 73 74 20 6d 6f 76 65 64 20 77 69 74 68 20 4f 50  st moved with OP
25e30 5f 4e 65 78 74 20 6f 72 20 4f 50 5f 50 72 65 76  _Next or OP_Prev
25e40 2c 20 6e 6f 74 20 53 65 65 6b 20 6f 72 20 4e 6f  , not Seek or No
25e50 74 46 6f 75 6e 64 2c 20 73 65 74 20 0a 20 20 2a  tFound, set .  *
25e60 2a 20 56 64 62 65 43 75 72 73 6f 72 2e 6d 6f 76  * VdbeCursor.mov
25e70 65 74 6f 54 61 72 67 65 74 20 74 6f 20 74 68 65  etoTarget to the
25e80 20 63 75 72 72 65 6e 74 20 72 6f 77 69 64 2e 20   current rowid. 
25e90 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   */.  if( pOp->p
25ea0 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20  4type==P4_TABLE 
25eb0 26 26 20 48 41 53 5f 55 50 44 41 54 45 5f 48 4f  && HAS_UPDATE_HO
25ec0 4f 4b 28 64 62 29 20 29 7b 0a 20 20 20 20 61 73  OK(db) ){.    as
25ed0 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30  sert( pC->iDb>=0
25ee0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
25ef0 70 4f 70 2d 3e 70 34 2e 70 54 61 62 21 3d 30 20  pOp->p4.pTab!=0 
25f00 29 3b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d  );.    zDb = db-
25f10 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 44  >aDb[pC->iDb].zD
25f20 62 53 4e 61 6d 65 3b 0a 20 20 20 20 70 54 61 62  bSName;.    pTab
25f30 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 3b   = pOp->p4.pTab;
25f40 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 70  .    if( (pOp->p
25f50 35 20 26 20 4f 50 46 4c 41 47 5f 53 41 56 45 50  5 & OPFLAG_SAVEP
25f60 4f 53 49 54 49 4f 4e 29 21 3d 30 20 26 26 20 70  OSITION)!=0 && p
25f70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20  C->isTable ){.  
25f80 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61      pC->movetoTa
25f90 72 67 65 74 20 3d 20 73 71 6c 69 74 65 33 42 74  rget = sqlite3Bt
25fa0 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43  reeIntegerKey(pC
25fb0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
25fc0 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
25fd0 20 20 7a 44 62 20 3d 20 30 3b 20 20 20 2f 2a 20    zDb = 0;   /* 
25fe0 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69 6c  Not needed.  Sil
25ff0 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65 72 20  ence a compiler 
26000 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20  warning. */.    
26010 70 54 61 62 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f  pTab = 0;  /* No
26020 74 20 6e 65 65 64 65 64 2e 20 20 53 69 6c 65 6e  t needed.  Silen
26030 63 65 20 61 20 63 6f 6d 70 69 6c 65 72 20 77 61  ce a compiler wa
26040 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 7d 0a 0a 23  rning. */.  }..#
26050 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
26060 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f  BLE_PREUPDATE_HO
26070 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  OK.  /* Invoke t
26080 68 65 20 70 72 65 2d 75 70 64 61 74 65 2d 68 6f  he pre-update-ho
26090 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20  ok if required. 
260a0 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72  */.  if( db->xPr
260b0 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  eUpdateCallback 
260c0 26 26 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 20  && pOp->p4.pTab 
260d0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 21  ){.    assert( !
260e0 28 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41  (opflags & OPFLA
260f0 47 5f 49 53 55 50 44 41 54 45 29 20 0a 20 20 20  G_ISUPDATE) .   
26100 20 20 20 20 20 20 7c 7c 20 48 61 73 52 6f 77 69        || HasRowi
26110 64 28 70 54 61 62 29 3d 3d 30 20 0a 20 20 20 20  d(pTab)==0 .    
26120 20 20 20 20 20 7c 7c 20 28 61 4d 65 6d 5b 70 4f       || (aMem[pO
26130 70 2d 3e 70 33 5d 2e 66 6c 61 67 73 20 26 20 4d  p->p3].flags & M
26140 45 4d 5f 49 6e 74 29 20 0a 20 20 20 20 29 3b 0a  EM_Int) .    );.
26150 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
26160 72 65 55 70 64 61 74 65 48 6f 6f 6b 28 70 2c 20  reUpdateHook(p, 
26170 70 43 2c 0a 20 20 20 20 20 20 20 20 28 6f 70 66  pC,.        (opf
26180 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 49 53  lags & OPFLAG_IS
26190 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45  UPDATE) ? SQLITE
261a0 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45  _UPDATE : SQLITE
261b0 5f 44 45 4c 45 54 45 2c 20 0a 20 20 20 20 20 20  _DELETE, .      
261c0 20 20 7a 44 62 2c 20 70 54 61 62 2c 20 70 43 2d    zDb, pTab, pC-
261d0 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 2c 0a 20  >movetoTarget,. 
261e0 20 20 20 20 20 20 20 70 4f 70 2d 3e 70 33 0a 20         pOp->p3. 
261f0 20 20 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20     );.  }.  if( 
26200 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47  opflags & OPFLAG
26210 5f 49 53 4e 4f 4f 50 20 29 20 62 72 65 61 6b 3b  _ISNOOP ) break;
26220 0a 23 65 6e 64 69 66 0a 20 0a 20 20 2f 2a 20 4f  .#endif. .  /* O
26230 6e 6c 79 20 66 6c 61 67 73 20 74 68 61 74 20 63  nly flags that c
26240 61 6e 20 62 65 20 73 65 74 20 61 72 65 20 53 41  an be set are SA
26250 56 45 50 4f 49 53 54 49 4f 4e 20 61 6e 64 20 41  VEPOISTION and A
26260 55 58 44 45 4c 45 54 45 20 2a 2f 20 0a 20 20 61  UXDELETE */ .  a
26270 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20  ssert( (pOp->p5 
26280 26 20 7e 28 4f 50 46 4c 41 47 5f 53 41 56 45 50  & ~(OPFLAG_SAVEP
26290 4f 53 49 54 49 4f 4e 7c 4f 50 46 4c 41 47 5f 41  OSITION|OPFLAG_A
262a0 55 58 44 45 4c 45 54 45 29 29 3d 3d 30 20 29 3b  UXDELETE))==0 );
262b0 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41  .  assert( OPFLA
262c0 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 3d 3d  G_SAVEPOSITION==
262d0 42 54 52 45 45 5f 53 41 56 45 50 4f 53 49 54 49  BTREE_SAVEPOSITI
262e0 4f 4e 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ON );.  assert( 
262f0 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45  OPFLAG_AUXDELETE
26300 3d 3d 42 54 52 45 45 5f 41 55 58 44 45 4c 45 54  ==BTREE_AUXDELET
26310 45 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  E );..#ifdef SQL
26320 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20  ITE_DEBUG.  if( 
26330 70 2d 3e 70 46 72 61 6d 65 3d 3d 30 20 29 7b 0a  p->pFrame==0 ){.
26340 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73 45 70      if( pC->isEp
26350 68 65 6d 65 72 61 6c 3d 3d 30 0a 20 20 20 20 20  hemeral==0.     
26360 20 20 20 26 26 20 28 70 4f 70 2d 3e 70 35 20 26     && (pOp->p5 &
26370 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54   OPFLAG_AUXDELET
26380 45 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 26 26  E)==0.        &&
26390 20 28 70 43 2d 3e 77 72 46 6c 61 67 20 26 20 4f   (pC->wrFlag & O
263a0 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 29  PFLAG_FORDELETE)
263b0 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20  ==0.      ){.   
263c0 20 20 20 6e 45 78 74 72 61 44 65 6c 65 74 65 2b     nExtraDelete+
263d0 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  +;.    }.    if(
263e0 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41   pOp->p2 & OPFLA
263f0 47 5f 4e 43 48 41 4e 47 45 20 29 7b 0a 20 20 20  G_NCHANGE ){.   
26400 20 20 20 6e 45 78 74 72 61 44 65 6c 65 74 65 2d     nExtraDelete-
26410 2d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e  -;.    }.  }.#en
26420 64 69 66 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69  dif..  rc = sqli
26430 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28 70  te3BtreeDelete(p
26440 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 70  C->uc.pCursor, p
26450 4f 70 2d 3e 70 35 29 3b 0a 20 20 70 43 2d 3e 63  Op->p5);.  pC->c
26460 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
26470 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e  HE_STALE;.  pC->
26480 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a  seekResult = 0;.
26490 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
264a0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
264b0 6f 72 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65  or;..  /* Invoke
264c0 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   the update-hook
264d0 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f   if required. */
264e0 0a 20 20 69 66 28 20 6f 70 66 6c 61 67 73 20 26  .  if( opflags &
264f0 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
26500 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67  ){.    p->nChang
26510 65 2b 2b 3b 0a 20 20 20 20 69 66 28 20 64 62 2d  e++;.    if( db-
26520 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
26530 20 26 26 20 48 61 73 52 6f 77 69 64 28 70 54 61   && HasRowid(pTa
26540 62 29 20 29 7b 0a 20 20 20 20 20 20 64 62 2d 3e  b) ){.      db->
26550 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28  xUpdateCallback(
26560 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20  db->pUpdateArg, 
26570 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20 7a  SQLITE_DELETE, z
26580 44 62 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c  Db, pTab->zName,
26590 0a 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e 6d  .          pC->m
265a0 6f 76 65 74 6f 54 61 72 67 65 74 29 3b 0a 20 20  ovetoTarget);.  
265b0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
265c0 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20 7d 0a  iDb>=0 );.    }.
265d0 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a    }..  break;.}.
265e0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74  /* Opcode: Reset
265f0 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a 0a  Count * * * * *.
26600 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  **.** The value 
26610 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f  of the change co
26620 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65 64 20  unter is copied 
26630 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
26640 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65  handle.** change
26650 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75 72 6e   counter (return
26660 65 64 20 62 79 20 73 75 62 73 65 71 75 65 6e 74  ed by subsequent
26670 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65   calls to sqlite
26680 33 5f 63 68 61 6e 67 65 73 28 29 29 2e 0a 2a 2a  3_changes())..**
26690 20 54 68 65 6e 20 74 68 65 20 56 4d 73 20 69 6e   Then the VMs in
266a0 74 65 72 6e 61 6c 20 63 68 61 6e 67 65 20 63 6f  ternal change co
266b0 75 6e 74 65 72 20 72 65 73 65 74 73 20 74 6f 20  unter resets to 
266c0 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 75 73  0..** This is us
266d0 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70 72  ed by trigger pr
266e0 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20  ograms..*/.case 
266f0 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b  OP_ResetCount: {
26700 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  .  sqlite3VdbeSe
26710 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e  tChanges(db, p->
26720 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70 2d 3e 6e  nChange);.  p->n
26730 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 62 72  Change = 0;.  br
26740 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
26750 65 3a 20 53 6f 72 74 65 72 43 6f 6d 70 61 72 65  e: SorterCompare
26760 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 20   P1 P2 P3 P4.** 
26770 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 6b 65 79  Synopsis: if key
26780 28 50 31 29 21 3d 74 72 69 6d 28 72 5b 50 33 5d  (P1)!=trim(r[P3]
26790 2c 50 34 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  ,P4) goto P2.**.
267a0 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72 74 65  ** P1 is a sorte
267b0 72 20 63 75 72 73 6f 72 2e 20 54 68 69 73 20 69  r cursor. This i
267c0 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 6d 70 61  nstruction compa
267d0 72 65 73 20 61 20 70 72 65 66 69 78 20 6f 66 20  res a prefix of 
267e0 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20 62 6c  the.** record bl
267f0 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ob in register P
26800 33 20 61 67 61 69 6e 73 74 20 61 20 70 72 65 66  3 against a pref
26810 69 78 20 6f 66 20 74 68 65 20 65 6e 74 72 79 20  ix of the entry 
26820 74 68 61 74 20 0a 2a 2a 20 74 68 65 20 73 6f 72  that .** the sor
26830 74 65 72 20 63 75 72 73 6f 72 20 63 75 72 72 65  ter cursor curre
26840 6e 74 6c 79 20 70 6f 69 6e 74 73 20 74 6f 2e 20  ntly points to. 
26850 20 4f 6e 6c 79 20 74 68 65 20 66 69 72 73 74 20   Only the first 
26860 50 34 20 66 69 65 6c 64 73 0a 2a 2a 20 6f 66 20  P4 fields.** of 
26870 72 5b 50 33 5d 20 61 6e 64 20 74 68 65 20 73 6f  r[P3] and the so
26880 72 74 65 72 20 72 65 63 6f 72 64 20 61 72 65 20  rter record are 
26890 63 6f 6d 70 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20  compared..**.** 
268a0 49 66 20 65 69 74 68 65 72 20 50 33 20 6f 72 20  If either P3 or 
268b0 74 68 65 20 73 6f 72 74 65 72 20 63 6f 6e 74 61  the sorter conta
268c0 69 6e 73 20 61 20 4e 55 4c 4c 20 69 6e 20 6f 6e  ins a NULL in on
268d0 65 20 6f 66 20 74 68 65 69 72 20 73 69 67 6e 69  e of their signi
268e0 66 69 63 61 6e 74 0a 2a 2a 20 66 69 65 6c 64 73  ficant.** fields
268f0 20 28 6e 6f 74 20 63 6f 75 6e 74 69 6e 67 20 74   (not counting t
26900 68 65 20 50 34 20 66 69 65 6c 64 73 20 61 74 20  he P4 fields at 
26910 74 68 65 20 65 6e 64 20 77 68 69 63 68 20 61 72  the end which ar
26920 65 20 69 67 6e 6f 72 65 64 29 20 74 68 65 6e 0a  e ignored) then.
26930 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  ** the compariso
26940 6e 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20  n is assumed to 
26950 62 65 20 65 71 75 61 6c 2e 0a 2a 2a 0a 2a 2a 20  be equal..**.** 
26960 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  Fall through to 
26970 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
26980 20 69 66 20 74 68 65 20 74 77 6f 20 72 65 63 6f   if the two reco
26990 72 64 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61  rds compare equa
269a0 6c 20 74 6f 0a 2a 2a 20 65 61 63 68 20 6f 74 68  l to.** each oth
269b0 65 72 2e 20 20 4a 75 6d 70 20 74 6f 20 50 32 20  er.  Jump to P2 
269c0 69 66 20 74 68 65 79 20 61 72 65 20 64 69 66 66  if they are diff
269d0 65 72 65 6e 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  erent..*/.case O
269e0 50 5f 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 3a  P_SorterCompare:
269f0 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
26a00 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  *pC;.  int res;.
26a10 20 20 69 6e 74 20 6e 4b 65 79 43 6f 6c 3b 0a 0a    int nKeyCol;..
26a20 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
26a30 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
26a40 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
26a50 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
26a60 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
26a70 54 33 32 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20  T32 );.  pIn3 = 
26a80 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
26a90 20 20 6e 4b 65 79 43 6f 6c 20 3d 20 70 4f 70 2d    nKeyCol = pOp-
26aa0 3e 70 34 2e 69 3b 0a 20 20 72 65 73 20 3d 20 30  >p4.i;.  res = 0
26ab0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
26ac0 56 64 62 65 53 6f 72 74 65 72 43 6f 6d 70 61 72  VdbeSorterCompar
26ad0 65 28 70 43 2c 20 70 49 6e 33 2c 20 6e 4b 65 79  e(pC, pIn3, nKey
26ae0 43 6f 6c 2c 20 26 72 65 73 29 3b 0a 20 20 56 64  Col, &res);.  Vd
26af0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
26b00 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72  s!=0,2);.  if( r
26b10 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
26b20 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69  ue_to_error;.  i
26b30 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75  f( res ) goto ju
26b40 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
26b50 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.};../* Opcode
26b60 3a 20 53 6f 72 74 65 72 44 61 74 61 20 50 31 20  : SorterData P1 
26b70 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
26b80 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74  opsis: r[P2]=dat
26b90 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e  a.**.** Write in
26ba0 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74  to register P2 t
26bb0 68 65 20 63 75 72 72 65 6e 74 20 73 6f 72 74 65  he current sorte
26bc0 72 20 64 61 74 61 20 66 6f 72 20 73 6f 72 74 65  r data for sorte
26bd0 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20  r cursor P1..** 
26be0 54 68 65 6e 20 63 6c 65 61 72 20 74 68 65 20 63  Then clear the c
26bf0 6f 6c 75 6d 6e 20 68 65 61 64 65 72 20 63 61 63  olumn header cac
26c00 68 65 20 6f 6e 20 63 75 72 73 6f 72 20 50 33 2e  he on cursor P3.
26c10 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
26c20 64 65 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 75  de is normally u
26c30 73 65 20 74 6f 20 6d 6f 76 65 20 61 20 72 65 63  se to move a rec
26c40 6f 72 64 20 6f 75 74 20 6f 66 20 74 68 65 20 73  ord out of the s
26c50 6f 72 74 65 72 20 61 6e 64 20 69 6e 74 6f 0a 2a  orter and into.*
26c60 2a 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  * a register tha
26c70 74 20 69 73 20 74 68 65 20 73 6f 75 72 63 65 20  t is the source 
26c80 66 6f 72 20 61 20 70 73 65 75 64 6f 2d 74 61 62  for a pseudo-tab
26c90 6c 65 20 63 75 72 73 6f 72 20 63 72 65 61 74 65  le cursor create
26ca0 64 20 75 73 69 6e 67 0a 2a 2a 20 4f 70 65 6e 50  d using.** OpenP
26cb0 73 65 75 64 6f 2e 20 20 54 68 61 74 20 70 73 65  seudo.  That pse
26cc0 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72  udo-table cursor
26cd0 20 69 73 20 74 68 65 20 6f 6e 65 20 74 68 61 74   is the one that
26ce0 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 62   is identified b
26cf0 79 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 50  y.** parameter P
26d00 33 2e 20 20 43 6c 65 61 72 69 6e 67 20 74 68 65  3.  Clearing the
26d10 20 50 33 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65   P3 column cache
26d20 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 69 73   as part of this
26d30 20 6f 70 63 6f 64 65 20 73 61 76 65 73 0a 2a 2a   opcode saves.**
26d40 20 75 73 20 66 72 6f 6d 20 68 61 76 69 6e 67 20   us from having 
26d50 74 6f 20 69 73 73 75 65 20 61 20 73 65 70 61 72  to issue a separ
26d60 61 74 65 20 4e 75 6c 6c 52 6f 77 20 69 6e 73 74  ate NullRow inst
26d70 72 75 63 74 69 6f 6e 20 74 6f 20 63 6c 65 61 72  ruction to clear
26d80 20 74 68 61 74 20 63 61 63 68 65 2e 0a 2a 2f 0a   that cache..*/.
26d90 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 44 61  case OP_SorterDa
26da0 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  ta: {.  VdbeCurs
26db0 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 4f 75 74 20  or *pC;..  pOut 
26dc0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
26dd0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
26de0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
26df0 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
26e00 43 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  C) );.  rc = sql
26e10 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 6f  ite3VdbeSorterRo
26e20 77 6b 65 79 28 70 43 2c 20 70 4f 75 74 29 3b 0a  wkey(pC, pOut);.
26e30 20 20 61 73 73 65 72 74 28 20 72 63 21 3d 53 51    assert( rc!=SQ
26e40 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 4f 75 74  LITE_OK || (pOut
26e50 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
26e60 6f 62 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ob) );.  assert(
26e70 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
26e80 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
26e90 72 20 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  r );.  if( rc ) 
26ea0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
26eb0 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 2d 3e 61 70  o_error;.  p->ap
26ec0 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 2d 3e 63 61  Csr[pOp->p3]->ca
26ed0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
26ee0 45 5f 53 54 41 4c 45 3b 0a 20 20 62 72 65 61 6b  E_STALE;.  break
26ef0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
26f00 52 6f 77 44 61 74 61 20 50 31 20 50 32 20 50 33  RowData P1 P2 P3
26f10 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
26f20 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a  : r[P2]=data.**.
26f30 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65  ** Write into re
26f40 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63 6f  gister P2 the co
26f50 6d 70 6c 65 74 65 20 72 6f 77 20 63 6f 6e 74 65  mplete row conte
26f60 6e 74 20 66 6f 72 20 74 68 65 20 72 6f 77 20 61  nt for the row a
26f70 74 20 0a 2a 2a 20 77 68 69 63 68 20 63 75 72 73  t .** which curs
26f80 6f 72 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  or P1 is current
26f90 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 20  ly pointing..** 
26fa0 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65  There is no inte
26fb0 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68  rpretation of th
26fc0 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49 74 20  e data.  .** It 
26fd0 69 73 20 6a 75 73 74 20 63 6f 70 69 65 64 20 6f  is just copied o
26fe0 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67 69 73  nto the P2 regis
26ff0 74 65 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a  ter exactly as .
27000 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69  ** it is found i
27010 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
27020 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  ile..**.** If cu
27030 72 73 6f 72 20 50 31 20 69 73 20 61 6e 20 69 6e  rsor P1 is an in
27040 64 65 78 2c 20 74 68 65 6e 20 74 68 65 20 63 6f  dex, then the co
27050 6e 74 65 6e 74 20 69 73 20 74 68 65 20 6b 65 79  ntent is the key
27060 20 6f 66 20 74 68 65 20 72 6f 77 2e 0a 2a 2a 20   of the row..** 
27070 49 66 20 63 75 72 73 6f 72 20 50 32 20 69 73 20  If cursor P2 is 
27080 61 20 74 61 62 6c 65 2c 20 74 68 65 6e 20 74 68  a table, then th
27090 65 20 63 6f 6e 74 65 6e 74 20 65 78 74 72 61 63  e content extrac
270a0 74 65 64 20 69 73 20 74 68 65 20 64 61 74 61 2e  ted is the data.
270b0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
270c0 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
270d0 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61  pointing to a va
270e0 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e  lid row (not a N
270f0 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61  ULL row).** of a
27100 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
27110 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
27120 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 21 3d 30 20  .**.** If P3!=0 
27130 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  then this opcode
27140 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f 20 6d   is allowed to m
27150 61 6b 65 20 61 6e 20 65 70 68 65 72 6d 65 72 61  ake an ephermera
27160 6c 20 70 6f 69 6e 74 65 72 0a 2a 2a 20 69 6e 74  l pointer.** int
27170 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 70  o the database p
27180 61 67 65 2e 20 20 54 68 61 74 20 6d 65 61 6e 73  age.  That means
27190 20 74 68 61 74 20 74 68 65 20 63 6f 6e 74 65 6e   that the conten
271a0 74 20 6f 66 20 74 68 65 20 6f 75 74 70 75 74 0a  t of the output.
271b0 2a 2a 20 72 65 67 69 73 74 65 72 20 77 69 6c 6c  ** register will
271c0 20 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64 20   be invalidated 
271d0 61 73 20 73 6f 6f 6e 20 61 73 20 74 68 65 20 63  as soon as the c
271e0 75 72 73 6f 72 20 6d 6f 76 65 73 20 2d 20 69 6e  ursor moves - in
271f0 63 6c 75 64 69 6e 67 0a 2a 2a 20 6d 6f 76 65 73  cluding.** moves
27200 20 63 61 75 73 65 64 20 62 79 20 6f 74 68 65 72   caused by other
27210 20 63 75 72 73 6f 72 73 20 74 68 61 74 20 22 73   cursors that "s
27220 61 76 65 22 20 74 68 65 20 74 68 65 20 63 75 72  ave" the the cur
27230 72 65 6e 74 20 63 75 72 73 6f 72 73 0a 2a 2a 20  rent cursors.** 
27240 70 6f 73 69 74 69 6f 6e 20 69 6e 20 6f 72 64 65  position in orde
27250 72 20 74 68 61 74 20 74 68 65 79 20 63 61 6e 20  r that they can 
27260 77 72 69 74 65 20 74 6f 20 74 68 65 20 73 61 6d  write to the sam
27270 65 20 74 61 62 6c 65 2e 20 20 49 66 20 50 33 3d  e table.  If P3=
27280 3d 30 0a 2a 2a 20 74 68 65 6e 20 61 20 63 6f 70  =0.** then a cop
27290 79 20 6f 66 20 74 68 65 20 64 61 74 61 20 69 73  y of the data is
272a0 20 6d 61 64 65 20 69 6e 74 6f 20 6d 65 6d 6f 72   made into memor
272b0 79 2e 20 20 50 33 21 3d 30 20 69 73 20 66 61 73  y.  P3!=0 is fas
272c0 74 65 72 2c 20 62 75 74 0a 2a 2a 20 50 33 3d 3d  ter, but.** P3==
272d0 30 20 69 73 20 73 61 66 65 72 2e 0a 2a 2a 0a 2a  0 is safer..**.*
272e0 2a 20 49 66 20 50 33 21 3d 30 20 74 68 65 6e 20  * If P3!=0 then 
272f0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  the content of t
27300 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20 69  he P2 register i
27310 73 20 75 6e 73 75 69 74 61 62 6c 65 20 66 6f 72  s unsuitable for
27320 20 75 73 65 0a 2a 2a 20 69 6e 20 4f 50 5f 52 65   use.** in OP_Re
27330 73 75 6c 74 20 61 6e 64 20 61 6e 79 20 4f 50 5f  sult and any OP_
27340 52 65 73 75 6c 74 20 77 69 6c 6c 20 69 6e 76 61  Result will inva
27350 6c 69 64 61 74 65 20 74 68 65 20 50 32 20 72 65  lidate the P2 re
27360 67 69 73 74 65 72 20 63 6f 6e 74 65 6e 74 2e 0a  gister content..
27370 2a 2a 20 54 68 65 20 50 32 20 72 65 67 69 73 74  ** The P2 regist
27380 65 72 20 63 6f 6e 74 65 6e 74 20 69 73 20 69 6e  er content is in
27390 76 61 6c 69 64 61 74 65 64 20 62 79 20 6f 70 63  validated by opc
273a0 6f 64 65 73 20 6c 69 6b 65 20 4f 50 5f 46 75 6e  odes like OP_Fun
273b0 63 74 69 6f 6e 20 6f 72 0a 2a 2a 20 62 79 20 61  ction or.** by a
273c0 6e 79 20 75 73 65 20 6f 66 20 61 6e 6f 74 68 65  ny use of anothe
273d0 72 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e  r cursor pointin
273e0 67 20 74 6f 20 74 68 65 20 73 61 6d 65 20 74 61  g to the same ta
273f0 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ble..*/.case OP_
27400 52 6f 77 44 61 74 61 3a 20 7b 0a 20 20 56 64 62  RowData: {.  Vdb
27410 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
27420 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
27430 20 20 75 33 32 20 6e 3b 0a 0a 20 20 70 4f 75 74    u32 n;..  pOut
27440 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
27450 65 28 70 2c 20 70 4f 70 29 3b 0a 0a 20 20 61 73  e(p, pOp);..  as
27460 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
27470 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
27480 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
27490 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
274a0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
274b0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
274c0 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
274d0 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
274e0 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74    assert( isSort
274f0 65 72 28 70 43 29 3d 3d 30 20 29 3b 0a 20 20 61  er(pC)==0 );.  a
27500 73 73 65 72 74 28 20 70 43 2d 3e 6e 75 6c 6c 52  ssert( pC->nullR
27510 6f 77 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ow==0 );.  asser
27520 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
27530 72 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20  r!=0 );.  pCrsr 
27540 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  = pC->uc.pCursor
27550 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 52  ;..  /* The OP_R
27560 6f 77 44 61 74 61 20 6f 70 63 6f 64 65 73 20 61  owData opcodes a
27570 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20 4f 50 5f  lways follow OP_
27580 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a 20 20 2a  NotExists or.  *
27590 2a 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64 20 6f  * OP_SeekRowid o
275a0 72 20 4f 50 5f 52 65 77 69 6e 64 2f 4f 70 5f 4e  r OP_Rewind/Op_N
275b0 65 78 74 20 77 69 74 68 20 6e 6f 20 69 6e 74 65  ext with no inte
275c0 72 76 65 6e 69 6e 67 20 69 6e 73 74 72 75 63 74  rvening instruct
275d0 69 6f 6e 73 0a 20 20 2a 2a 20 74 68 61 74 20 6d  ions.  ** that m
275e0 69 67 68 74 20 69 6e 76 61 6c 69 64 61 74 65 20  ight invalidate 
275f0 74 68 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2a  the cursor..  **
27600 20 49 66 20 74 68 69 73 20 77 68 65 72 65 20 6e   If this where n
27610 6f 74 20 74 68 65 20 63 61 73 65 2c 20 6f 6e 20  ot the case, on 
27620 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
27630 20 61 73 73 65 72 74 28 29 73 0a 20 20 2a 2a 20   assert()s.  ** 
27640 77 6f 75 6c 64 20 66 61 69 6c 2e 20 20 53 68 6f  would fail.  Sho
27650 75 6c 64 20 74 68 69 73 20 65 76 65 72 20 63 68  uld this ever ch
27660 61 6e 67 65 20 28 62 65 63 61 75 73 65 20 6f 66  ange (because of
27670 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20   changes in the 
27680 63 6f 64 65 0a 20 20 2a 2a 20 67 65 6e 65 72 61  code.  ** genera
27690 74 6f 72 29 20 74 68 65 6e 20 74 68 65 20 66 69  tor) then the fi
276a0 78 20 77 6f 75 6c 64 20 62 65 20 74 6f 20 69 6e  x would be to in
276b0 73 65 72 74 20 61 20 63 61 6c 6c 20 74 6f 0a 20  sert a call to. 
276c0 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 43   ** sqlite3VdbeC
276d0 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 2e 0a 20  ursorMoveto().. 
276e0 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43   */.  assert( pC
276f0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
27700 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
27710 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
27720 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72  sorIsValid(pCrsr
27730 29 20 29 3b 0a 23 69 66 20 30 20 20 2f 2a 20 4e  ) );.#if 0  /* N
27740 6f 74 20 72 65 71 75 69 72 65 64 20 64 75 65 20  ot required due 
27750 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  to the previous 
27760 74 6f 20 61 73 73 65 72 74 28 29 20 73 74 61 74  to assert() stat
27770 65 6d 65 6e 74 73 20 2a 2f 0a 20 20 72 63 20 3d  ements */.  rc =
27780 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
27790 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20  orMoveto(pC);.  
277a0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
277b0 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
277c0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e  ue_to_error;.#en
277d0 64 69 66 0a 0a 20 20 6e 20 3d 20 73 71 6c 69 74  dif..  n = sqlit
277e0 65 33 42 74 72 65 65 50 61 79 6c 6f 61 64 53 69  e3BtreePayloadSi
277f0 7a 65 28 70 43 72 73 72 29 3b 0a 20 20 69 66 28  ze(pCrsr);.  if(
27800 20 6e 3e 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d   n>(u32)db->aLim
27810 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
27820 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67  LENGTH] ){.    g
27830 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
27840 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 3d 3d  .  testcase( n==
27850 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  0 );.  rc = sqli
27860 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74  te3VdbeMemFromBt
27870 72 65 65 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c  ree(pCrsr, 0, n,
27880 20 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 72 63   pOut);.  if( rc
27890 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
278a0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66  e_to_error;.  if
278b0 28 20 21 70 4f 70 2d 3e 70 33 20 29 20 44 65 65  ( !pOp->p3 ) Dee
278c0 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74  phemeralize(pOut
278d0 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
278e0 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
278f0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
27900 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
27910 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
27920 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64 20 50 31  Opcode: Rowid P1
27930 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
27940 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77  opsis: r[P2]=row
27950 69 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69  id.**.** Store i
27960 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  n register P2 an
27970 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69   integer which i
27980 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65  s the key of the
27990 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 68 61   table entry tha
279a0 74 0a 2a 2a 20 50 31 20 69 73 20 63 75 72 72 65  t.** P1 is curre
279b0 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a  ntly point to..*
279c0 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65 20 65  *.** P1 can be e
279d0 69 74 68 65 72 20 61 6e 20 6f 72 64 69 6e 61 72  ither an ordinar
279e0 79 20 74 61 62 6c 65 20 6f 72 20 61 20 76 69 72  y table or a vir
279f0 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65  tual table.  The
27a00 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65  re used to.** be
27a10 20 61 20 73 65 70 61 72 61 74 65 20 4f 50 5f 56   a separate OP_V
27a20 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 66 6f 72  Rowid opcode for
27a30 20 75 73 65 20 77 69 74 68 20 76 69 72 74 75 61   use with virtua
27a40 6c 20 74 61 62 6c 65 73 2c 20 62 75 74 20 74 68  l tables, but th
27a50 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65  is.** one opcode
27a60 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20 62   now works for b
27a70 6f 74 68 20 74 61 62 6c 65 20 74 79 70 65 73 2e  oth table types.
27a80 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69  .*/.case OP_Rowi
27a90 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  d: {            
27aa0 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
27ab0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
27ac0 3b 0a 20 20 69 36 34 20 76 3b 0a 20 20 73 71 6c  ;.  i64 v;.  sql
27ad0 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
27ae0 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  ;.  const sqlite
27af0 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
27b00 65 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74  e;..  pOut = out
27b10 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
27b20 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Op);.  assert( p
27b30 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
27b40 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
27b50 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
27b60 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
27b70 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
27b80 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
27b90 75 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f  urType!=CURTYPE_
27ba0 50 53 45 55 44 4f 20 7c 7c 20 70 43 2d 3e 6e 75  PSEUDO || pC->nu
27bb0 6c 6c 52 6f 77 20 29 3b 0a 20 20 69 66 28 20 70  llRow );.  if( p
27bc0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  C->nullRow ){.  
27bd0 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
27be0 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62 72  MEM_Null;.    br
27bf0 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  eak;.  }else if(
27c00 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
27c10 65 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d 20 70  eto ){.    v = p
27c20 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b  C->movetoTarget;
27c30 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
27c40 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
27c50 45 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43  E.  }else if( pC
27c60 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
27c70 59 50 45 5f 56 54 41 42 20 29 7b 0a 20 20 20 20  YPE_VTAB ){.    
27c80 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
27c90 56 43 75 72 21 3d 30 20 29 3b 0a 20 20 20 20 70  VCur!=0 );.    p
27ca0 56 74 61 62 20 3d 20 70 43 2d 3e 75 63 2e 70 56  Vtab = pC->uc.pV
27cb0 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20  Cur->pVtab;.    
27cc0 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
27cd0 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73  >pModule;.    as
27ce0 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78  sert( pModule->x
27cf0 52 6f 77 69 64 20 29 3b 0a 20 20 20 20 72 63 20  Rowid );.    rc 
27d00 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69  = pModule->xRowi
27d10 64 28 70 43 2d 3e 75 63 2e 70 56 43 75 72 2c 20  d(pC->uc.pVCur, 
27d20 26 76 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  &v);.    sqlite3
27d30 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
27d40 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20  (p, pVtab);.    
27d50 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
27d60 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
27d70 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
27d80 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
27d90 41 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b  ABLE */.  }else{
27da0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
27db0 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
27dc0 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20  PE_BTREE );.    
27dd0 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
27de0 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20  Cursor!=0 );.   
27df0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
27e00 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 70  eCursorRestore(p
27e10 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29  C);.    if( rc )
27e20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
27e30 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69 66  to_error;.    if
27e40 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  ( pC->nullRow ){
27e50 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  .      pOut->fla
27e60 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
27e70 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
27e80 7d 0a 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65  }.    v = sqlite
27e90 33 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79  3BtreeIntegerKey
27ea0 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  (pC->uc.pCursor)
27eb0 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e  ;.  }.  pOut->u.
27ec0 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a  i = v;.  break;.
27ed0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75  }../* Opcode: Nu
27ee0 6c 6c 52 6f 77 20 50 31 20 2a 20 2a 20 2a 20 2a  llRow P1 * * * *
27ef0 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20  .**.** Move the 
27f00 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 6e  cursor P1 to a n
27f10 75 6c 6c 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50  ull row.  Any OP
27f20 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f  _Column operatio
27f30 6e 73 0a 2a 2a 20 74 68 61 74 20 6f 63 63 75 72  ns.** that occur
27f40 20 77 68 69 6c 65 20 74 68 65 20 63 75 72 73 6f   while the curso
27f50 72 20 69 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c  r is on the null
27f60 20 72 6f 77 20 77 69 6c 6c 20 61 6c 77 61 79 73   row will always
27f70 0a 2a 2a 20 77 72 69 74 65 20 61 20 4e 55 4c 4c  .** write a NULL
27f80 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c  ..*/.case OP_Nul
27f90 6c 52 6f 77 3a 20 7b 0a 20 20 56 64 62 65 43 75  lRow: {.  VdbeCu
27fa0 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73  rsor *pC;..  ass
27fb0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
27fc0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
27fd0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
27fe0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
27ff0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
28000 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c  =0 );.  pC->null
28010 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 2d 3e 63  Row = 1;.  pC->c
28020 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
28030 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20  HE_STALE;.  if( 
28040 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
28050 52 54 59 50 45 5f 42 54 52 45 45 20 29 7b 0a 20  RTYPE_BTREE ){. 
28060 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75     assert( pC->u
28070 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  c.pCursor!=0 );.
28080 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
28090 43 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e  ClearCursor(pC->
280a0 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d  uc.pCursor);.  }
280b0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
280c0 4f 70 63 6f 64 65 3a 20 53 65 65 6b 45 6e 64 20  Opcode: SeekEnd 
280d0 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
280e0 20 50 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72   Position cursor
280f0 20 50 31 20 61 74 20 74 68 65 20 65 6e 64 20 6f   P1 at the end o
28100 66 20 74 68 65 20 62 74 72 65 65 20 66 6f 72 20  f the btree for 
28110 74 68 65 20 70 75 72 70 6f 73 65 20 6f 66 0a 2a  the purpose of.*
28120 2a 20 61 70 70 65 6e 64 69 6e 67 20 61 20 6e 65  * appending a ne
28130 77 20 65 6e 74 72 79 20 6f 6e 74 6f 20 74 68 65  w entry onto the
28140 20 62 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 74   btree..**.** It
28150 20 69 73 20 61 73 73 75 6d 65 64 20 74 68 61 74   is assumed that
28160 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 75   the cursor is u
28170 73 65 64 20 6f 6e 6c 79 20 66 6f 72 20 61 70 70  sed only for app
28180 65 6e 64 69 6e 67 20 61 6e 64 20 73 6f 0a 2a 2a  ending and so.**
28190 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 69   if the cursor i
281a0 73 20 76 61 6c 69 64 2c 20 74 68 65 6e 20 74 68  s valid, then th
281b0 65 20 63 75 72 73 6f 72 20 6d 75 73 74 20 61 6c  e cursor must al
281c0 72 65 61 64 79 20 62 65 20 70 6f 69 6e 74 69 6e  ready be pointin
281d0 67 0a 2a 2a 20 61 74 20 74 68 65 20 65 6e 64 20  g.** at the end 
281e0 6f 66 20 74 68 65 20 62 74 72 65 65 20 61 6e 64  of the btree and
281f0 20 73 6f 20 6e 6f 20 63 68 61 6e 67 65 73 20 61   so no changes a
28200 72 65 20 6d 61 64 65 20 74 6f 0a 2a 2a 20 74 68  re made to.** th
28210 65 20 63 75 72 73 6f 72 2e 0a 2a 2f 0a 2f 2a 20  e cursor..*/./* 
28220 4f 70 63 6f 64 65 3a 20 4c 61 73 74 20 50 31 20  Opcode: Last P1 
28230 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
28240 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74  he next use of t
28250 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75  he Rowid or Colu
28260 6d 6e 20 6f 72 20 50 72 65 76 20 69 6e 73 74 72  mn or Prev instr
28270 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a  uction for P1 .*
28280 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20  * will refer to 
28290 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69  the last entry i
282a0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  n the database t
282b0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a  able or index..*
282c0 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f  * If the table o
282d0 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79  r index is empty
282e0 20 61 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20   and P2>0, then 
282f0 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
28300 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32   to P2..** If P2
28310 20 69 73 20 30 20 6f 72 20 69 66 20 74 68 65 20   is 0 or if the 
28320 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69  table or index i
28330 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c  s not empty, fal
28340 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20  l through.** to 
28350 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e  the following in
28360 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
28370 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
28380 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63  ves the cursor c
28390 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76  onfigured to mov
283a0 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64  e in reverse ord
283b0 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  er,.** from the 
283c0 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20 62  end toward the b
283d0 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74  eginning.  In ot
283e0 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63  her words, the c
283f0 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66  ursor is.** conf
28400 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 50 72  igured to use Pr
28410 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2f  ev, not Next..*/
28420 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 45 6e 64  .case OP_SeekEnd
28430 3a 0a 63 61 73 65 20 4f 50 5f 4c 61 73 74 3a 20  :.case OP_Last: 
28440 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
28450 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
28460 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
28470 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
28480 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  es;..  assert( p
28490 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
284a0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
284b0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
284c0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
284d0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
284e0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
284f0 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
28500 42 54 52 45 45 20 29 3b 0a 20 20 70 43 72 73 72  BTREE );.  pCrsr
28510 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f   = pC->uc.pCurso
28520 72 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  r;.  res = 0;.  
28530 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30  assert( pCrsr!=0
28540 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   );.#ifdef SQLIT
28550 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65  E_DEBUG.  pC->se
28560 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f  ekOp = pOp->opco
28570 64 65 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28  de;.#endif.  if(
28580 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
28590 5f 53 65 65 6b 45 6e 64 20 29 7b 0a 20 20 20 20  _SeekEnd ){.    
285a0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d  assert( pOp->p2=
285b0 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e 73 65  =0 );.    pC->se
285c0 65 6b 52 65 73 75 6c 74 20 3d 20 2d 31 3b 0a 20  ekResult = -1;. 
285d0 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 42 74     if( sqlite3Bt
285e0 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64  reeCursorIsValid
285f0 4e 4e 28 70 43 72 73 72 29 20 29 7b 0a 20 20 20  NN(pCrsr) ){.   
28600 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
28610 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
28620 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 72 73  e3BtreeLast(pCrs
28630 72 2c 20 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e  r, &res);.  pC->
28640 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65  nullRow = (u8)re
28650 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65  s;.  pC->deferre
28660 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70  dMoveto = 0;.  p
28670 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
28680 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
28690 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
286a0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
286b0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3e  ;.  if( pOp->p2>
286c0 30 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61  0 ){.    VdbeBra
286d0 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c  nchTaken(res!=0,
286e0 32 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 20  2);.    if( res 
286f0 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
28700 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
28710 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  }../* Opcode: If
28720 53 6d 61 6c 6c 65 72 20 50 31 20 50 32 20 50 33  Smaller P1 P2 P3
28730 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45 73 74 69 6d   * *.**.** Estim
28740 61 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ate the number o
28750 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61  f rows in the ta
28760 62 6c 65 20 50 31 2e 20 20 4a 75 6d 70 20 74 6f  ble P1.  Jump to
28770 20 50 32 20 69 66 20 74 68 61 74 0a 2a 2a 20 65   P2 if that.** e
28780 73 74 69 6d 61 74 65 20 69 73 20 6c 65 73 73 20  stimate is less 
28790 74 68 61 6e 20 61 70 70 72 6f 78 69 6d 61 74 65  than approximate
287a0 6c 79 20 32 2a 2a 28 30 2e 31 2a 50 33 29 2e 0a  ly 2**(0.1*P3)..
287b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 53 6d 61  */.case OP_IfSma
287c0 6c 6c 65 72 3a 20 7b 20 20 20 20 20 20 20 20 2f  ller: {        /
287d0 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65  * jump */.  Vdbe
287e0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
287f0 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
28800 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 36 34 20   int res;.  i64 
28810 73 7a 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  sz;..  assert( p
28820 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
28830 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
28840 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
28850 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
28860 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
28870 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63    pCrsr = pC->uc
28880 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65  .pCursor;.  asse
28890 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 72  rt( pCrsr );.  r
288a0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
288b0 46 69 72 73 74 28 70 43 72 73 72 2c 20 26 72 65  First(pCrsr, &re
288c0 73 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  s);.  if( rc ) g
288d0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
288e0 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65  _error;.  if( re
288f0 73 3d 3d 30 20 29 7b 0a 20 20 20 20 73 7a 20 3d  s==0 ){.    sz =
28900 20 73 71 6c 69 74 65 33 42 74 72 65 65 52 6f 77   sqlite3BtreeRow
28910 43 6f 75 6e 74 45 73 74 28 70 43 72 73 72 29 3b  CountEst(pCrsr);
28920 0a 20 20 20 20 69 66 28 20 41 4c 57 41 59 53 28  .    if( ALWAYS(
28930 73 7a 3e 3d 30 29 20 26 26 20 73 71 6c 69 74 65  sz>=0) && sqlite
28940 33 4c 6f 67 45 73 74 28 28 75 36 34 29 73 7a 29  3LogEst((u64)sz)
28950 3c 70 4f 70 2d 3e 70 33 20 29 20 72 65 73 20 3d  <pOp->p3 ) res =
28960 20 31 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72   1;.  }.  VdbeBr
28970 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
28980 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29  ,2);.  if( res )
28990 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
289a0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  ;.  break;.}.../
289b0 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72  * Opcode: Sorter
289c0 53 6f 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  Sort P1 P2 * * *
289d0 0a 2a 2a 0a 2a 2a 20 41 66 74 65 72 20 61 6c 6c  .**.** After all
289e0 20 72 65 63 6f 72 64 73 20 68 61 76 65 20 62 65   records have be
289f0 65 6e 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f  en inserted into
28a00 20 74 68 65 20 53 6f 72 74 65 72 20 6f 62 6a 65   the Sorter obje
28a10 63 74 0a 2a 2a 20 69 64 65 6e 74 69 66 69 65 64  ct.** identified
28a20 20 62 79 20 50 31 2c 20 69 6e 76 6f 6b 65 20 74   by P1, invoke t
28a30 68 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 61 63  his opcode to ac
28a40 74 75 61 6c 6c 79 20 64 6f 20 74 68 65 20 73 6f  tually do the so
28a50 72 74 69 6e 67 2e 0a 2a 2a 20 4a 75 6d 70 20 74  rting..** Jump t
28a60 6f 20 50 32 20 69 66 20 74 68 65 72 65 20 61 72  o P2 if there ar
28a70 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 74 6f 20  e no records to 
28a80 62 65 20 73 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a  be sorted..**.**
28a90 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
28aa0 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 4f 50 5f  an alias for OP_
28ab0 53 6f 72 74 20 61 6e 64 20 4f 50 5f 52 65 77 69  Sort and OP_Rewi
28ac0 6e 64 20 74 68 61 74 20 69 73 20 75 73 65 64 0a  nd that is used.
28ad0 2a 2a 20 66 6f 72 20 53 6f 72 74 65 72 20 6f 62  ** for Sorter ob
28ae0 6a 65 63 74 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  jects..*/./* Opc
28af0 6f 64 65 3a 20 53 6f 72 74 20 50 31 20 50 32 20  ode: Sort P1 P2 
28b00 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73  * * *.**.** This
28b10 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 65 78 61   opcode does exa
28b20 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 74 68  ctly the same th
28b30 69 6e 67 20 61 73 20 4f 50 5f 52 65 77 69 6e 64  ing as OP_Rewind
28b40 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20   except that.** 
28b50 69 74 20 69 6e 63 72 65 6d 65 6e 74 73 20 61 6e  it increments an
28b60 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20 67 6c   undocumented gl
28b70 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 75 73  obal variable us
28b80 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67 2e 0a  ed for testing..
28b90 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20 69 73  **.** Sorting is
28ba0 20 61 63 63 6f 6d 70 6c 69 73 68 65 64 20 62 79   accomplished by
28bb0 20 77 72 69 74 69 6e 67 20 72 65 63 6f 72 64 73   writing records
28bc0 20 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e 67 20   into a sorting 
28bd0 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e 20 72  index,.** then r
28be0 65 77 69 6e 64 69 6e 67 20 74 68 61 74 20 69 6e  ewinding that in
28bf0 64 65 78 20 61 6e 64 20 70 6c 61 79 69 6e 67 20  dex and playing 
28c00 69 74 20 62 61 63 6b 20 66 72 6f 6d 20 62 65 67  it back from beg
28c10 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64  inning to.** end
28c20 2e 20 20 57 65 20 75 73 65 20 74 68 65 20 4f 50  .  We use the OP
28c30 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20 69 6e 73  _Sort opcode ins
28c40 74 65 61 64 20 6f 66 20 4f 50 5f 52 65 77 69 6e  tead of OP_Rewin
28c50 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a 20 72  d to do the.** r
28c60 65 77 69 6e 64 69 6e 67 20 73 6f 20 74 68 61 74  ewinding so that
28c70 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69   the global vari
28c80 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 69 6e 63  able will be inc
28c90 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a 2a 20  remented and.** 
28ca0 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73  regression tests
28cb0 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65 20 77   can determine w
28cc0 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
28cd0 65 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 0a 2a  e optimizer is.*
28ce0 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f 70 74 69  * correctly opti
28cf0 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72 74 73  mizing out sorts
28d00 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
28d10 74 65 72 53 6f 72 74 3a 20 20 20 20 2f 2a 20 6a  terSort:    /* j
28d20 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ump */.case OP_S
28d30 6f 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ort: {        /*
28d40 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20   jump */.#ifdef 
28d50 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71  SQLITE_TEST.  sq
28d60 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74  lite3_sort_count
28d70 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 65  ++;.  sqlite3_se
28d80 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65  arch_count--;.#e
28d90 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e 74  ndif.  p->aCount
28da0 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54  er[SQLITE_STMTST
28db0 41 54 55 53 5f 53 4f 52 54 5d 2b 2b 3b 0a 20 20  ATUS_SORT]++;.  
28dc0 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
28dd0 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64 20 2a  into OP_Rewind *
28de0 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  /.}./* Opcode: R
28df0 65 77 69 6e 64 20 50 31 20 50 32 20 2a 20 2a 20  ewind P1 P2 * * 
28e00 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74  *.**.** The next
28e10 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69   use of the Rowi
28e20 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e  d or Column or N
28e30 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
28e40 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20  for P1 .** will 
28e50 72 65 66 65 72 20 74 6f 20 74 68 65 20 66 69 72  refer to the fir
28e60 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20  st entry in the 
28e70 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
28e80 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74  r index..** If t
28e90 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
28ea0 78 20 69 73 20 65 6d 70 74 79 2c 20 6a 75 6d 70  x is empty, jump
28eb0 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
28ec0 50 32 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61  P2..** If the ta
28ed0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
28ee0 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20  not empty, fall 
28ef0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 66  through to the f
28f00 6f 6c 6c 6f 77 69 6e 67 20 0a 2a 2a 20 69 6e 73  ollowing .** ins
28f10 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
28f20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76  This opcode leav
28f30 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  es the cursor co
28f40 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65  nfigured to move
28f50 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65   in forward orde
28f60 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62  r,.** from the b
28f70 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20  eginning toward 
28f80 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68  the end.  In oth
28f90 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75  er words, the cu
28fa0 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69  rsor is.** confi
28fb0 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78  gured to use Nex
28fc0 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2f 0a  t, not Prev..*/.
28fd0 63 61 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a 20  case OP_Rewind: 
28fe0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
28ff0 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
29000 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
29010 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
29020 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  es;..  assert( p
29030 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
29040 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
29050 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
29060 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
29070 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
29080 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74    assert( isSort
29090 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70  er(pC)==(pOp->op
290a0 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 53  code==OP_SorterS
290b0 6f 72 74 29 20 29 3b 0a 20 20 72 65 73 20 3d 20  ort) );.  res = 
290c0 31 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  1;.#ifdef SQLITE
290d0 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65  _DEBUG.  pC->see
290e0 6b 4f 70 20 3d 20 4f 50 5f 52 65 77 69 6e 64 3b  kOp = OP_Rewind;
290f0 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 69 73  .#endif.  if( is
29100 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20  Sorter(pC) ){.  
29110 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
29120 62 65 53 6f 72 74 65 72 52 65 77 69 6e 64 28 70  beSorterRewind(p
29130 43 2c 20 26 72 65 73 29 3b 0a 20 20 7d 65 6c 73  C, &res);.  }els
29140 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
29150 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
29160 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
29170 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63    pCrsr = pC->uc
29180 2e 70 43 75 72 73 6f 72 3b 0a 20 20 20 20 61 73  .pCursor;.    as
29190 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20  sert( pCrsr );. 
291a0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
291b0 74 72 65 65 46 69 72 73 74 28 70 43 72 73 72 2c  treeFirst(pCrsr,
291c0 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e   &res);.    pC->
291d0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
291e0 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   0;.    pC->cach
291f0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
29200 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66 28  STALE;.  }.  if(
29210 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
29220 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
29230 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28   pC->nullRow = (
29240 75 38 29 72 65 73 3b 0a 20 20 61 73 73 65 72 74  u8)res;.  assert
29250 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70  ( pOp->p2>0 && p
29260 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b  Op->p2<p->nOp );
29270 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
29280 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
29290 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a  if( res ) goto j
292a0 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65  ump_to_p2;.  bre
292b0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
292c0 3a 20 4e 65 78 74 20 50 31 20 50 32 20 50 33 20  : Next P1 P2 P3 
292d0 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61  P4 P5.**.** Adva
292e0 6e 63 65 20 63 75 72 73 6f 72 20 50 31 20 73 6f  nce cursor P1 so
292f0 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
29300 74 6f 20 74 68 65 20 6e 65 78 74 20 6b 65 79 2f  to the next key/
29310 64 61 74 61 20 70 61 69 72 20 69 6e 20 69 74 73  data pair in its
29320 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  .** table or ind
29330 65 78 2e 20 20 49 66 20 74 68 65 72 65 20 61 72  ex.  If there ar
29340 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61  e no more key/va
29350 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66  lue pairs then f
29360 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  all through.** t
29370 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
29380 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75  instruction.  Bu
29390 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20  t if the cursor 
293a0 61 64 76 61 6e 63 65 20 77 61 73 20 73 75 63 63  advance was succ
293b0 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20  essful,.** jump 
293c0 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
293d0 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4e 65 78  2..**.** The Nex
293e0 74 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  t opcode is only
293f0 20 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67   valid following
29400 20 61 6e 20 53 65 65 6b 47 54 2c 20 53 65 65 6b   an SeekGT, Seek
29410 47 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 52 65 77  GE, or.** OP_Rew
29420 69 6e 64 20 6f 70 63 6f 64 65 20 75 73 65 64 20  ind opcode used 
29430 74 6f 20 70 6f 73 69 74 69 6f 6e 20 74 68 65 20  to position the 
29440 63 75 72 73 6f 72 2e 20 20 4e 65 78 74 20 69 73  cursor.  Next is
29450 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20   not allowed.** 
29460 74 6f 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 4c 54  to follow SeekLT
29470 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 20 4f 50 5f  , SeekLE, or OP_
29480 4c 61 73 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  Last..**.** The 
29490 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
294a0 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62  e for a real tab
294b0 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
294c0 2d 74 61 62 6c 65 2e 20 20 50 31 20 6d 75 73 74  -table.  P1 must
294d0 20 68 61 76 65 0a 2a 2a 20 62 65 65 6e 20 6f 70   have.** been op
294e0 65 6e 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68  ened prior to th
294f0 69 73 20 6f 70 63 6f 64 65 20 6f 72 20 74 68 65  is opcode or the
29500 20 70 72 6f 67 72 61 6d 20 77 69 6c 6c 20 73 65   program will se
29510 67 66 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  gfault..**.** Th
29520 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 61 20  e P3 value is a 
29530 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65  hint to the btre
29540 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
29550 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74  . If P3==1, that
29560 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20  .** means P1 is 
29570 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64  an SQL index and
29580 20 74 68 61 74 20 74 68 69 73 20 69 6e 73 74 72   that this instr
29590 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76  uction could hav
295a0 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65  e been.** omitte
295b0 64 20 69 66 20 74 68 61 74 20 69 6e 64 65 78 20  d if that index 
295c0 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e  had been unique.
295d0 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20    P3 is usually 
295e0 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77  0.  P3 is.** alw
295f0 61 79 73 20 65 69 74 68 65 72 20 30 20 6f 72 20  ays either 0 or 
29600 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  1..**.** P4 is a
29610 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50 34  lways of type P4
29620 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75  _ADVANCE. The fu
29630 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70  nction pointer p
29640 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69  oints to.** sqli
29650 74 65 33 42 74 72 65 65 4e 65 78 74 28 29 2e 0a  te3BtreeNext()..
29660 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70  **.** If P5 is p
29670 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68 65 20  ositive and the 
29680 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74  jump is taken, t
29690 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65  hen event counte
296a0 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31  r.** number P5-1
296b0 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
296c0 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e   statement is in
296d0 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a  cremented..**.**
296e0 20 53 65 65 20 61 6c 73 6f 3a 20 50 72 65 76 2c   See also: Prev,
296f0 20 4e 65 78 74 49 66 4f 70 65 6e 0a 2a 2f 0a 2f   NextIfOpen.*/./
29700 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 49 66  * Opcode: NextIf
29710 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20 50 34  Open P1 P2 P3 P4
29720 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f   P5.**.** This o
29730 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73 74  pcode works just
29740 20 6c 69 6b 65 20 4e 65 78 74 20 65 78 63 65 70   like Next excep
29750 74 20 74 68 61 74 20 69 66 20 63 75 72 73 6f 72  t that if cursor
29760 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70   P1 is not.** op
29770 65 6e 20 69 74 20 62 65 68 61 76 65 73 20 61 20  en it behaves a 
29780 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  no-op..*/./* Opc
29790 6f 64 65 3a 20 50 72 65 76 20 50 31 20 50 32 20  ode: Prev P1 P2 
297a0 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42  P3 P4 P5.**.** B
297b0 61 63 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31  ack up cursor P1
297c0 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
297d0 74 73 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f  ts to the previo
297e0 75 73 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72  us key/data pair
297f0 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65   in its.** table
29800 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74   or index.  If t
29810 68 65 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69  here is no previ
29820 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61  ous key/value pa
29830 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  irs then fall th
29840 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
29850 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
29860 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74  ction.  But if t
29870 68 65 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70  he cursor backup
29880 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c   was successful,
29890 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  .** jump immedia
298a0 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  tely to P2..**.*
298b0 2a 0a 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70  *.** The Prev op
298c0 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c  code is only val
298d0 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20  id following an 
298e0 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20  SeekLT, SeekLE, 
298f0 6f 72 0a 2a 2a 20 4f 50 5f 4c 61 73 74 20 6f 70  or.** OP_Last op
29900 63 6f 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73  code used to pos
29910 69 74 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72  ition the cursor
29920 2e 20 20 50 72 65 76 20 69 73 20 6e 6f 74 20 61  .  Prev is not a
29930 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c  llowed.** to fol
29940 6c 6f 77 20 53 65 65 6b 47 54 2c 20 53 65 65 6b  low SeekGT, Seek
29950 47 45 2c 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64  GE, or OP_Rewind
29960 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63  ..**.** The P1 c
29970 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f  ursor must be fo
29980 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  r a real table, 
29990 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
299a0 6c 65 2e 20 20 49 66 20 50 31 20 69 73 0a 2a 2a  le.  If P1 is.**
299b0 20 6e 6f 74 20 6f 70 65 6e 20 74 68 65 6e 20 74   not open then t
299c0 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 75  he behavior is u
299d0 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20  ndefined..**.** 
299e0 54 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20  The P3 value is 
299f0 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74  a hint to the bt
29a00 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ree implementati
29a10 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68  on. If P3==1, th
29a20 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69  at.** means P1 i
29a30 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61  s an SQL index a
29a40 6e 64 20 74 68 61 74 20 74 68 69 73 20 69 6e 73  nd that this ins
29a50 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68  truction could h
29a60 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74  ave been.** omit
29a70 74 65 64 20 69 66 20 74 68 61 74 20 69 6e 64 65  ted if that inde
29a80 78 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75  x had been uniqu
29a90 65 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c  e.  P3 is usuall
29aa0 79 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61  y 0.  P3 is.** a
29ab0 6c 77 61 79 73 20 65 69 74 68 65 72 20 30 20 6f  lways either 0 o
29ac0 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  r 1..**.** P4 is
29ad0 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20   always of type 
29ae0 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20  P4_ADVANCE. The 
29af0 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  function pointer
29b00 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71   points to.** sq
29b10 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f  lite3BtreePrevio
29b20 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  us()..**.** If P
29b30 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e  5 is positive an
29b40 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  d the jump is ta
29b50 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20  ken, then event 
29b60 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65  counter.** numbe
29b70 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72  r P5-1 in the pr
29b80 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
29b90 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e   is incremented.
29ba0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .*/./* Opcode: P
29bb0 72 65 76 49 66 4f 70 65 6e 20 50 31 20 50 32 20  revIfOpen P1 P2 
29bc0 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54  P3 P4 P5.**.** T
29bd0 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73  his opcode works
29be0 20 6a 75 73 74 20 6c 69 6b 65 20 50 72 65 76 20   just like Prev 
29bf0 65 78 63 65 70 74 20 74 68 61 74 20 69 66 20 63  except that if c
29c00 75 72 73 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a  ursor P1 is not.
29c10 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65 68 61 76  ** open it behav
29c20 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 2f  es a no-op..*/./
29c30 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72  * Opcode: Sorter
29c40 4e 65 78 74 20 50 31 20 50 32 20 2a 20 2a 20 50  Next P1 P2 * * P
29c50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  5.**.** This opc
29c60 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  ode works just l
29c70 69 6b 65 20 4f 50 5f 4e 65 78 74 20 65 78 63 65  ike OP_Next exce
29c80 70 74 20 74 68 61 74 20 50 31 20 6d 75 73 74 20  pt that P1 must 
29c90 62 65 20 61 0a 2a 2a 20 73 6f 72 74 65 72 20 6f  be a.** sorter o
29ca0 62 6a 65 63 74 20 66 6f 72 20 77 68 69 63 68 20  bject for which 
29cb0 74 68 65 20 4f 50 5f 53 6f 72 74 65 72 53 6f 72  the OP_SorterSor
29cc0 74 20 6f 70 63 6f 64 65 20 68 61 73 20 62 65 65  t opcode has bee
29cd0 6e 0a 2a 2a 20 69 6e 76 6f 6b 65 64 2e 20 20 54  n.** invoked.  T
29ce0 68 69 73 20 6f 70 63 6f 64 65 20 61 64 76 61 6e  his opcode advan
29cf0 63 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 74  ces the cursor t
29d00 6f 20 74 68 65 20 6e 65 78 74 20 73 6f 72 74 65  o the next sorte
29d10 64 0a 2a 2a 20 72 65 63 6f 72 64 2c 20 6f 72 20  d.** record, or 
29d20 6a 75 6d 70 73 20 74 6f 20 50 32 20 69 66 20 74  jumps to P2 if t
29d30 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65  here are no more
29d40 20 73 6f 72 74 65 64 20 72 65 63 6f 72 64 73 2e   sorted records.
29d50 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74  .*/.case OP_Sort
29d60 65 72 4e 65 78 74 3a 20 7b 20 20 2f 2a 20 6a 75  erNext: {  /* ju
29d70 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  mp */.  VdbeCurs
29d80 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 43 20 3d 20  or *pC;..  pC = 
29d90 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
29da0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  ];.  assert( isS
29db0 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 72  orter(pC) );.  r
29dc0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
29dd0 6f 72 74 65 72 4e 65 78 74 28 64 62 2c 20 70 43  orterNext(db, pC
29de0 29 3b 0a 20 20 67 6f 74 6f 20 6e 65 78 74 5f 74  );.  goto next_t
29df0 61 69 6c 3b 0a 63 61 73 65 20 4f 50 5f 50 72 65  ail;.case OP_Pre
29e00 76 49 66 4f 70 65 6e 3a 20 20 20 20 2f 2a 20 6a  vIfOpen:    /* j
29e10 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  ump */.case OP_N
29e20 65 78 74 49 66 4f 70 65 6e 3a 20 20 20 20 2f 2a  extIfOpen:    /*
29e30 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70   jump */.  if( p
29e40 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
29e50 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f  ==0 ) break;.  /
29e60 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 2a  * Fall through *
29e70 2f 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 3a 20  /.case OP_Prev: 
29e80 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
29e90 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74   */.case OP_Next
29ea0 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
29eb0 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
29ec0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
29ed0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
29ee0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
29ef0 70 2d 3e 70 35 3c 41 72 72 61 79 53 69 7a 65 28  p->p5<ArraySize(
29f00 70 2d 3e 61 43 6f 75 6e 74 65 72 29 20 29 3b 0a  p->aCounter) );.
29f10 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
29f20 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
29f30 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
29f40 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
29f50 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
29f60 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
29f70 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
29f80 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72  BTREE );.  asser
29f90 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
29fa0 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e  OP_Next || pOp->
29fb0 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c  p4.xAdvance==sql
29fc0 69 74 65 33 42 74 72 65 65 4e 65 78 74 20 29 3b  ite3BtreeNext );
29fd0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
29fe0 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20  opcode!=OP_Prev 
29ff0 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61  || pOp->p4.xAdva
2a000 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  nce==sqlite3Btre
2a010 65 50 72 65 76 69 6f 75 73 20 29 3b 0a 20 20 61  ePrevious );.  a
2a020 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
2a030 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65  de!=OP_NextIfOpe
2a040 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64  n || pOp->p4.xAd
2a050 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74  vance==sqlite3Bt
2a060 72 65 65 4e 65 78 74 20 29 3b 0a 20 20 61 73 73  reeNext );.  ass
2a070 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
2a080 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 20  !=OP_PrevIfOpen 
2a090 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61  || pOp->p4.xAdva
2a0a0 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  nce==sqlite3Btre
2a0b0 65 50 72 65 76 69 6f 75 73 29 3b 0a 0a 20 20 2f  ePrevious);..  /
2a0c0 2a 20 54 68 65 20 4e 65 78 74 20 6f 70 63 6f 64  * The Next opcod
2a0d0 65 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 61  e is only used a
2a0e0 66 74 65 72 20 53 65 65 6b 47 54 2c 20 53 65 65  fter SeekGT, See
2a0f0 6b 47 45 2c 20 61 6e 64 20 52 65 77 69 6e 64 2e  kGE, and Rewind.
2a100 0a 20 20 2a 2a 20 54 68 65 20 50 72 65 76 20 6f  .  ** The Prev o
2a110 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73  pcode is only us
2a120 65 64 20 61 66 74 65 72 20 53 65 65 6b 4c 54 2c  ed after SeekLT,
2a130 20 53 65 65 6b 4c 45 2c 20 61 6e 64 20 4c 61 73   SeekLE, and Las
2a140 74 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  t. */.  assert( 
2a150 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
2a160 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  Next || pOp->opc
2a170 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70  ode!=OP_NextIfOp
2a180 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d  en.       || pC-
2a190 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b  >seekOp==OP_Seek
2a1a0 47 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70  GT || pC->seekOp
2a1b0 3d 3d 4f 50 5f 53 65 65 6b 47 45 0a 20 20 20 20  ==OP_SeekGE.    
2a1c0 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70     || pC->seekOp
2a1d0 3d 3d 4f 50 5f 52 65 77 69 6e 64 20 7c 7c 20 70  ==OP_Rewind || p
2a1e0 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 46 6f  C->seekOp==OP_Fo
2a1f0 75 6e 64 29 3b 0a 20 20 61 73 73 65 72 74 28 20  und);.  assert( 
2a200 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
2a210 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  Prev || pOp->opc
2a220 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70  ode!=OP_PrevIfOp
2a230 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d  en.       || pC-
2a240 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b  >seekOp==OP_Seek
2a250 4c 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70  LT || pC->seekOp
2a260 3d 3d 4f 50 5f 53 65 65 6b 4c 45 0a 20 20 20 20  ==OP_SeekLE.    
2a270 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70     || pC->seekOp
2a280 3d 3d 4f 50 5f 4c 61 73 74 20 29 3b 0a 0a 20 20  ==OP_Last );..  
2a290 72 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 78 41 64  rc = pOp->p4.xAd
2a2a0 76 61 6e 63 65 28 70 43 2d 3e 75 63 2e 70 43 75  vance(pC->uc.pCu
2a2b0 72 73 6f 72 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a  rsor, pOp->p3);.
2a2c0 6e 65 78 74 5f 74 61 69 6c 3a 0a 20 20 70 43 2d  next_tail:.  pC-
2a2d0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
2a2e0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 56 64  ACHE_STALE;.  Vd
2a2f0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 63  beBranchTaken(rc
2a300 3d 3d 53 51 4c 49 54 45 5f 4f 4b 2c 32 29 3b 0a  ==SQLITE_OK,2);.
2a310 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
2a320 5f 4f 4b 20 29 7b 0a 20 20 20 20 70 43 2d 3e 6e  _OK ){.    pC->n
2a330 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20  ullRow = 0;.    
2a340 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d  p->aCounter[pOp-
2a350 3e 70 35 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53  >p5]++;.#ifdef S
2a360 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73  QLITE_TEST.    s
2a370 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f  qlite3_search_co
2a380 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20  unt++;.#endif.  
2a390 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
2a3a0 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f  2_and_check_for_
2a3b0 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 0a 20  interrupt;.  }. 
2a3c0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
2a3d0 44 4f 4e 45 20 29 20 67 6f 74 6f 20 61 62 6f 72  DONE ) goto abor
2a3e0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2a3f0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
2a400 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
2a410 3d 20 31 3b 0a 20 20 67 6f 74 6f 20 63 68 65 63  = 1;.  goto chec
2a420 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b  k_for_interrupt;
2a430 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
2a440 64 78 49 6e 73 65 72 74 20 50 31 20 50 32 20 50  dxInsert P1 P2 P
2a450 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
2a460 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a 2a  sis: key=r[P2].*
2a470 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 32  *.** Register P2
2a480 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c 20 69 6e   holds an SQL in
2a490 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75 73 69  dex key made usi
2a4a0 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65  ng the.** MakeRe
2a4b0 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e  cord instruction
2a4c0 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20  s.  This opcode 
2a4d0 77 72 69 74 65 73 20 74 68 61 74 20 6b 65 79 0a  writes that key.
2a4e0 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e 64 65  ** into the inde
2a4f0 78 20 50 31 2e 20 20 44 61 74 61 20 66 6f 72 20  x P1.  Data for 
2a500 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e 69 6c  the entry is nil
2a510 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73  ..**.** If P4 is
2a520 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
2a530 69 74 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72  it is the number
2a540 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 74 68   of values in th
2a550 65 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 6b 65  e unpacked.** ke
2a560 79 20 6f 66 20 72 65 67 28 50 32 29 2e 20 20 49  y of reg(P2).  I
2a570 6e 20 74 68 61 74 20 63 61 73 65 2c 20 50 33 20  n that case, P3 
2a580 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
2a590 74 68 65 20 66 69 72 73 74 20 72 65 67 69 73 74  the first regist
2a5a0 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 75 6e  er.** for the un
2a5b0 70 61 63 6b 65 64 20 6b 65 79 2e 20 20 54 68 65  packed key.  The
2a5c0 20 61 76 61 69 6c 61 62 69 6c 69 74 79 20 6f 66   availability of
2a5d0 20 74 68 65 20 75 6e 70 61 63 6b 65 64 20 6b 65   the unpacked ke
2a5e0 79 20 63 61 6e 20 73 6f 6d 65 74 69 6d 65 73 0a  y can sometimes.
2a5f0 2a 2a 20 62 65 20 61 6e 20 6f 70 74 69 6d 69 7a  ** be an optimiz
2a600 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ation..**.** If 
2a610 50 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41  P5 has the OPFLA
2a620 47 5f 41 50 50 45 4e 44 20 62 69 74 20 73 65 74  G_APPEND bit set
2a630 2c 20 74 68 61 74 20 69 73 20 61 20 68 69 6e 74  , that is a hint
2a640 20 74 6f 20 74 68 65 20 62 2d 74 72 65 65 20 6c   to the b-tree l
2a650 61 79 65 72 0a 2a 2a 20 74 68 61 74 20 74 68 69  ayer.** that thi
2a660 73 20 69 6e 73 65 72 74 20 69 73 20 6c 69 6b 65  s insert is like
2a670 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65  ly to be an appe
2a680 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  nd..**.** If P5 
2a690 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e  has the OPFLAG_N
2a6a0 43 48 41 4e 47 45 20 62 69 74 20 73 65 74 2c 20  CHANGE bit set, 
2a6b0 74 68 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20  then the change 
2a6c0 63 6f 75 6e 74 65 72 20 69 73 0a 2a 2a 20 69 6e  counter is.** in
2a6d0 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 69  cremented by thi
2a6e0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  s instruction.  
2a6f0 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  If the OPFLAG_NC
2a700 48 41 4e 47 45 20 62 69 74 20 69 73 20 63 6c 65  HANGE bit is cle
2a710 61 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20  ar,.** then the 
2a720 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69  change counter i
2a730 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2a 0a  s unchanged..**.
2a740 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
2a750 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66  _USESEEKRESULT f
2a760 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
2a770 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  , the implementa
2a780 74 69 6f 6e 20 6d 69 67 68 74 0a 2a 2a 20 72 75  tion might.** ru
2a790 6e 20 66 61 73 74 65 72 20 62 79 20 61 76 6f 69  n faster by avoi
2a7a0 64 69 6e 67 20 61 6e 20 75 6e 6e 65 63 65 73 73  ding an unnecess
2a7b0 61 72 79 20 73 65 65 6b 20 6f 6e 20 63 75 72 73  ary seek on curs
2a7c0 6f 72 20 50 31 2e 20 20 48 6f 77 65 76 65 72 2c  or P1.  However,
2a7d0 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f 55  .** the OPFLAG_U
2a7e0 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61  SESEEKRESULT fla
2a7f0 67 20 6d 75 73 74 20 6f 6e 6c 79 20 62 65 20 73  g must only be s
2a800 65 74 20 69 66 20 74 68 65 72 65 20 68 61 76 65  et if there have
2a810 20 62 65 65 6e 20 6e 6f 20 70 72 69 6f 72 0a 2a   been no prior.*
2a820 2a 20 73 65 65 6b 73 20 6f 6e 20 74 68 65 20 63  * seeks on the c
2a830 75 72 73 6f 72 20 6f 72 20 69 66 20 74 68 65 20  ursor or if the 
2a840 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 65 65 6b  most recent seek
2a850 20 75 73 65 64 20 61 20 6b 65 79 20 65 71 75 69   used a key equi
2a860 76 61 6c 65 6e 74 0a 2a 2a 20 74 6f 20 50 32 2e  valent.** to P2.
2a870 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73   .**.** This ins
2a880 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f  truction only wo
2a890 72 6b 73 20 66 6f 72 20 69 6e 64 69 63 65 73 2e  rks for indices.
2a8a0 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74    The equivalent
2a8b0 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20   instruction.** 
2a8c0 66 6f 72 20 74 61 62 6c 65 73 20 69 73 20 4f 50  for tables is OP
2a8d0 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f  _Insert..*/./* O
2a8e0 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 49 6e 73  pcode: SorterIns
2a8f0 65 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ert P1 P2 * * *.
2a900 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
2a910 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67  =r[P2].**.** Reg
2a920 69 73 74 65 72 20 50 32 20 68 6f 6c 64 73 20 61  ister P2 holds a
2a930 6e 20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20  n SQL index key 
2a940 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a  made using the.*
2a950 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73  * MakeRecord ins
2a960 74 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73  tructions.  This
2a970 20 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20 74   opcode writes t
2a980 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20  hat key.** into 
2a990 74 68 65 20 73 6f 72 74 65 72 20 50 31 2e 20 20  the sorter P1.  
2a9a0 44 61 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74  Data for the ent
2a9b0 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2f 0a 63 61  ry is nil..*/.ca
2a9c0 73 65 20 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65  se OP_SorterInse
2a9d0 72 74 3a 20 20 20 20 20 20 20 2f 2a 20 69 6e 32  rt:       /* in2
2a9e0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 49   */.case OP_IdxI
2a9f0 6e 73 65 72 74 3a 20 7b 20 20 20 20 20 20 20 20  nsert: {        
2aa00 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65  /* in2 */.  Vdbe
2aa10 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
2aa20 72 65 65 50 61 79 6c 6f 61 64 20 78 3b 0a 0a 20  reePayload x;.. 
2aa30 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
2aa40 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
2aa50 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
2aa60 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
2aa70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2aa80 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
2aa90 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
2aaa0 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  ==(pOp->opcode==
2aab0 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 29  OP_SorterInsert)
2aac0 20 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d   );.  pIn2 = &aM
2aad0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
2aae0 73 73 65 72 74 28 20 70 49 6e 32 2d 3e 66 6c 61  ssert( pIn2->fla
2aaf0 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b  gs & MEM_Blob );
2ab00 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
2ab10 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
2ab20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a  ) p->nChange++;.
2ab30 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
2ab40 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
2ab50 42 54 52 45 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70  BTREE || pOp->op
2ab60 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49  code==OP_SorterI
2ab70 6e 73 65 72 74 20 29 3b 0a 20 20 61 73 73 65 72  nsert );.  asser
2ab80 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  t( pC->isTable==
2ab90 30 20 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61  0 );.  rc = Expa
2aba0 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20  ndBlob(pIn2);.  
2abb0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
2abc0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2abd0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
2abe0 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e  ode==OP_SorterIn
2abf0 73 65 72 74 20 29 7b 0a 20 20 20 20 72 63 20 3d  sert ){.    rc =
2ac00 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
2ac10 65 72 57 72 69 74 65 28 70 43 2c 20 70 49 6e 32  erWrite(pC, pIn2
2ac20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
2ac30 78 2e 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e  x.nKey = pIn2->n
2ac40 3b 0a 20 20 20 20 78 2e 70 4b 65 79 20 3d 20 70  ;.    x.pKey = p
2ac50 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 78 2e 61 4d  In2->z;.    x.aM
2ac60 65 6d 20 3d 20 61 4d 65 6d 20 2b 20 70 4f 70 2d  em = aMem + pOp-
2ac70 3e 70 33 3b 0a 20 20 20 20 78 2e 6e 4d 65 6d 20  >p3;.    x.nMem 
2ac80 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69  = (u16)pOp->p4.i
2ac90 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
2aca0 65 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43  e3BtreeInsert(pC
2acb0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 78  ->uc.pCursor, &x
2acc0 2c 0a 20 20 20 20 20 20 20 20 20 28 70 4f 70 2d  ,.         (pOp-
2acd0 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 41 50  >p5 & (OPFLAG_AP
2ace0 50 45 4e 44 7c 4f 50 46 4c 41 47 5f 53 41 56 45  PEND|OPFLAG_SAVE
2acf0 50 4f 53 49 54 49 4f 4e 29 29 2c 20 0a 20 20 20  POSITION)), .   
2ad00 20 20 20 20 20 28 28 70 4f 70 2d 3e 70 35 20 26       ((pOp->p5 &
2ad10 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
2ad20 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65  ESULT) ? pC->see
2ad30 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a 20 20 20  kResult : 0).   
2ad40 20 20 20 20 20 29 3b 0a 20 20 20 20 61 73 73 65       );.    asse
2ad50 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
2ad60 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20  Moveto==0 );.   
2ad70 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
2ad80 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
2ad90 20 20 7d 0a 20 20 69 66 28 20 72 63 29 20 67 6f    }.  if( rc) go
2ada0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2adb0 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a  error;.  break;.
2adc0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  }../* Opcode: Id
2add0 78 44 65 6c 65 74 65 20 50 31 20 50 32 20 50 33  xDelete P1 P2 P3
2ade0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2adf0 3a 20 6b 65 79 3d 72 5b 50 32 40 50 33 5d 0a 2a  : key=r[P2@P3].*
2ae00 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74  *.** The content
2ae10 20 6f 66 20 50 33 20 72 65 67 69 73 74 65 72 73   of P3 registers
2ae20 20 73 74 61 72 74 69 6e 67 20 61 74 20 72 65 67   starting at reg
2ae30 69 73 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a  ister P2 form.**
2ae40 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
2ae50 65 78 20 6b 65 79 2e 20 54 68 69 73 20 6f 70 63  ex key. This opc
2ae60 6f 64 65 20 72 65 6d 6f 76 65 73 20 74 68 61 74  ode removes that
2ae70 20 65 6e 74 72 79 20 66 72 6f 6d 20 74 68 65 20   entry from the 
2ae80 0a 2a 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65 64  .** index opened
2ae90 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a   by cursor P1..*
2aea0 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 44 65 6c  /.case OP_IdxDel
2aeb0 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ete: {.  VdbeCur
2aec0 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
2aed0 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
2aee0 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65  t res;.  Unpacke
2aef0 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73  dRecord r;..  as
2af00 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
2af10 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
2af20 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
2af30 32 2b 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  2+pOp->p3<=(p->n
2af40 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
2af50 6f 72 29 2b 31 20 29 3b 0a 20 20 61 73 73 65 72  or)+1 );.  asser
2af60 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
2af70 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
2af80 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
2af90 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
2afa0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
2afb0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2afc0 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
2afd0 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70  YPE_BTREE );.  p
2afe0 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43  Crsr = pC->uc.pC
2aff0 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28  ursor;.  assert(
2b000 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 61   pCrsr!=0 );.  a
2b010 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d  ssert( pOp->p5==
2b020 30 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66  0 );.  r.pKeyInf
2b030 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  o = pC->pKeyInfo
2b040 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28  ;.  r.nField = (
2b050 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 72  u16)pOp->p3;.  r
2b060 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b  .default_rc = 0;
2b070 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65  .  r.aMem = &aMe
2b080 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 72 63  m[pOp->p2];.  rc
2b090 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
2b0a0 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
2b0b0 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26  rsr, &r, 0, 0, &
2b0c0 72 65 73 29 3b 0a 20 20 69 66 28 20 72 63 20 29  res);.  if( rc )
2b0d0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2b0e0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20  to_error;.  if( 
2b0f0 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63  res==0 ){.    rc
2b100 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
2b110 65 6c 65 74 65 28 70 43 72 73 72 2c 20 42 54 52  elete(pCrsr, BTR
2b120 45 45 5f 41 55 58 44 45 4c 45 54 45 29 3b 0a 20  EE_AUXDELETE);. 
2b130 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
2b140 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2b150 72 6f 72 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  ror;.  }.  asser
2b160 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
2b170 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 70 43  oveto==0 );.  pC
2b180 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
2b190 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70  CACHE_STALE;.  p
2b1a0 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  C->seekResult = 
2b1b0 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  0;.  break;.}../
2b1c0 2a 20 4f 70 63 6f 64 65 3a 20 44 65 66 65 72 72  * Opcode: Deferr
2b1d0 65 64 53 65 65 6b 20 50 31 20 2a 20 50 33 20 50  edSeek P1 * P3 P
2b1e0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
2b1f0 20 4d 6f 76 65 20 50 33 20 74 6f 20 50 31 2e 72   Move P3 to P1.r
2b200 6f 77 69 64 20 69 66 20 6e 65 65 64 65 64 0a 2a  owid if needed.*
2b210 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20 6f 70  *.** P1 is an op
2b220 65 6e 20 69 6e 64 65 78 20 63 75 72 73 6f 72 20  en index cursor 
2b230 61 6e 64 20 50 33 20 69 73 20 61 20 63 75 72 73  and P3 is a curs
2b240 6f 72 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73  or on the corres
2b250 70 6f 6e 64 69 6e 67 0a 2a 2a 20 74 61 62 6c 65  ponding.** table
2b260 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64  .  This opcode d
2b270 6f 65 73 20 61 20 64 65 66 65 72 72 65 64 20 73  oes a deferred s
2b280 65 65 6b 20 6f 66 20 74 68 65 20 50 33 20 74 61  eek of the P3 ta
2b290 62 6c 65 20 63 75 72 73 6f 72 0a 2a 2a 20 74 6f  ble cursor.** to
2b2a0 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 63 6f   the row that co
2b2b0 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
2b2c0 20 63 75 72 72 65 6e 74 20 72 6f 77 20 6f 66 20   current row of 
2b2d0 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  P1..**.** This i
2b2e0 73 20 61 20 64 65 66 65 72 72 65 64 20 73 65 65  s a deferred see
2b2f0 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63 74 75  k.  Nothing actu
2b300 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 75 6e 74  ally happens unt
2b310 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72  il.** the cursor
2b320 20 69 73 20 75 73 65 64 20 74 6f 20 72 65 61 64   is used to read
2b330 20 61 20 72 65 63 6f 72 64 2e 20 20 54 68 61 74   a record.  That
2b340 20 77 61 79 2c 20 69 66 20 6e 6f 20 72 65 61 64   way, if no read
2b350 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75  s.** occur, no u
2b360 6e 6e 65 63 65 73 73 61 72 79 20 49 2f 4f 20 68  nnecessary I/O h
2b370 61 70 70 65 6e 73 2e 0a 2a 2a 0a 2a 2a 20 50 34  appens..**.** P4
2b380 20 6d 61 79 20 62 65 20 61 6e 20 61 72 72 61 79   may be an array
2b390 20 6f 66 20 69 6e 74 65 67 65 72 73 20 28 74 79   of integers (ty
2b3a0 70 65 20 50 34 5f 49 4e 54 41 52 52 41 59 29 20  pe P4_INTARRAY) 
2b3b0 63 6f 6e 74 61 69 6e 69 6e 67 0a 2a 2a 20 6f 6e  containing.** on
2b3c0 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68  e entry for each
2b3d0 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 50   column in the P
2b3e0 33 20 74 61 62 6c 65 2e 20 20 49 66 20 61 72 72  3 table.  If arr
2b3f0 61 79 20 65 6e 74 72 79 20 61 28 69 29 0a 2a 2a  ay entry a(i).**
2b400 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
2b410 65 6e 20 72 65 61 64 69 6e 67 20 63 6f 6c 75 6d  en reading colum
2b420 6e 20 61 28 69 29 2d 31 20 66 72 6f 6d 20 63 75  n a(i)-1 from cu
2b430 72 73 6f 72 20 50 33 20 69 73 20 0a 2a 2a 20 65  rsor P3 is .** e
2b440 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 70 65 72  quivalent to per
2b450 66 6f 72 6d 69 6e 67 20 74 68 65 20 64 65 66 65  forming the defe
2b460 72 72 65 64 20 73 65 65 6b 20 61 6e 64 20 74 68  rred seek and th
2b470 65 6e 20 72 65 61 64 69 6e 67 20 63 6f 6c 75 6d  en reading colum
2b480 6e 20 69 20 0a 2a 2a 20 66 72 6f 6d 20 50 31 2e  n i .** from P1.
2b490 20 20 54 68 69 73 20 69 6e 66 6f 72 6d 61 74 69    This informati
2b4a0 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  on is stored in 
2b4b0 50 33 20 61 6e 64 20 75 73 65 64 20 74 6f 20 72  P3 and used to r
2b4c0 65 64 69 72 65 63 74 0a 2a 2a 20 72 65 61 64 73  edirect.** reads
2b4d0 20 61 67 61 69 6e 73 74 20 50 33 20 6f 76 65 72   against P3 over
2b4e0 20 74 6f 20 50 31 2c 20 74 68 75 73 20 70 6f 73   to P1, thus pos
2b4f0 73 69 62 6c 79 20 61 76 6f 69 64 69 6e 67 20 74  sibly avoiding t
2b500 68 65 20 6e 65 65 64 20 74 6f 0a 2a 2a 20 73 65  he need to.** se
2b510 65 6b 20 61 6e 64 20 72 65 61 64 20 63 75 72 73  ek and read curs
2b520 6f 72 20 50 33 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  or P3..*/./* Opc
2b530 6f 64 65 3a 20 49 64 78 52 6f 77 69 64 20 50 31  ode: IdxRowid P1
2b540 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
2b550 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77  opsis: r[P2]=row
2b560 69 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69  id.**.** Write i
2b570 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20  nto register P2 
2b580 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68  an integer which
2b590 20 69 73 20 74 68 65 20 6c 61 73 74 20 65 6e 74   is the last ent
2b5a0 72 79 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ry in the record
2b5b0 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f   at.** the end o
2b5c0 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 20  f the index key 
2b5d0 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20 63 75  pointed to by cu
2b5e0 72 73 6f 72 20 50 31 2e 20 20 54 68 69 73 20 69  rsor P1.  This i
2b5f0 6e 74 65 67 65 72 20 73 68 6f 75 6c 64 20 62 65  nteger should be
2b600 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64 20 6f 66  .** the rowid of
2b610 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79   the table entry
2b620 20 74 6f 20 77 68 69 63 68 20 74 68 69 73 20 69   to which this i
2b630 6e 64 65 78 20 65 6e 74 72 79 20 70 6f 69 6e 74  ndex entry point
2b640 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  s..**.** See als
2b650 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65 52 65  o: Rowid, MakeRe
2b660 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  cord..*/.case OP
2b670 5f 44 65 66 65 72 72 65 64 53 65 65 6b 3a 0a 63  _DeferredSeek:.c
2b680 61 73 65 20 4f 50 5f 49 64 78 52 6f 77 69 64 3a  ase OP_IdxRowid:
2b690 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
2b6a0 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62 65 43 75  out2 */.  VdbeCu
2b6b0 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20 20 20  rsor *pC;       
2b6c0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 31 20        /* The P1 
2b6d0 69 6e 64 65 78 20 63 75 72 73 6f 72 20 2a 2f 0a  index cursor */.
2b6e0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 54    VdbeCursor *pT
2b6f0 61 62 43 75 72 3b 20 20 20 20 20 20 20 20 2f 2a  abCur;        /*
2b700 20 54 68 65 20 50 32 20 74 61 62 6c 65 20 63 75   The P2 table cu
2b710 72 73 6f 72 20 28 4f 50 5f 44 65 66 65 72 72 65  rsor (OP_Deferre
2b720 64 53 65 65 6b 20 6f 6e 6c 79 29 20 2a 2f 0a 20  dSeek only) */. 
2b730 20 69 36 34 20 72 6f 77 69 64 3b 20 20 20 20 20   i64 rowid;     
2b740 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2b750 52 6f 77 69 64 20 74 68 61 74 20 50 31 20 63 75  Rowid that P1 cu
2b760 72 72 65 6e 74 20 70 6f 69 6e 74 73 20 74 6f 20  rrent points to 
2b770 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  */..  assert( pO
2b780 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
2b790 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
2b7a0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
2b7b0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
2b7c0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
2b7d0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
2b7e0 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
2b7f0 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74  TREE );.  assert
2b800 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  ( pC->uc.pCursor
2b810 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
2b820 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
2b830 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
2b840 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
2b850 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2b860 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 7c 7c 20  !pC->nullRow || 
2b870 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2b880 49 64 78 52 6f 77 69 64 20 29 3b 0a 0a 20 20 2f  IdxRowid );..  /
2b890 2a 20 54 68 65 20 49 64 78 52 6f 77 69 64 20 61  * The IdxRowid a
2b8a0 6e 64 20 53 65 65 6b 20 6f 70 63 6f 64 65 73 20  nd Seek opcodes 
2b8b0 61 72 65 20 63 6f 6d 62 69 6e 65 64 20 62 65 63  are combined bec
2b8c0 61 75 73 65 20 6f 66 20 74 68 65 20 63 6f 6d 6d  ause of the comm
2b8d0 6f 6e 61 6c 69 74 79 0a 20 20 2a 2a 20 6f 66 20  onality.  ** of 
2b8e0 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
2b8f0 72 52 65 73 74 6f 72 65 28 29 20 61 6e 64 20 73  rRestore() and s
2b900 71 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f 77  qlite3VdbeIdxRow
2b910 69 64 28 29 2e 20 2a 2f 0a 20 20 72 63 20 3d 20  id(). */.  rc = 
2b920 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
2b930 72 52 65 73 74 6f 72 65 28 70 43 29 3b 0a 0a 20  rRestore(pC);.. 
2b940 20 2f 2a 20 73 71 6c 69 74 65 33 56 62 65 43 75   /* sqlite3VbeCu
2b950 72 73 6f 72 52 65 73 74 6f 72 65 28 29 20 63 61  rsorRestore() ca
2b960 6e 20 6f 6e 6c 79 20 66 61 69 6c 20 69 66 20 74  n only fail if t
2b970 68 65 20 72 65 63 6f 72 64 20 68 61 73 20 62 65  he record has be
2b980 65 6e 20 64 65 6c 65 74 65 64 0a 20 20 2a 2a 20  en deleted.  ** 
2b990 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65 72 20 74  out from under t
2b9a0 68 65 20 63 75 72 73 6f 72 2e 20 20 54 68 61 74  he cursor.  That
2b9b0 20 77 69 6c 6c 20 6e 65 76 65 72 20 68 61 70 70   will never happ
2b9c0 65 6e 73 20 66 6f 72 20 61 6e 20 49 64 78 52 6f  ens for an IdxRo
2b9d0 77 69 64 0a 20 20 2a 2a 20 6f 72 20 53 65 65 6b  wid.  ** or Seek
2b9e0 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69 66 28   opcode */.  if(
2b9f0 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54   NEVER(rc!=SQLIT
2ba00 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f  E_OK) ) goto abo
2ba10 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2ba20 0a 0a 20 20 69 66 28 20 21 70 43 2d 3e 6e 75 6c  ..  if( !pC->nul
2ba30 6c 52 6f 77 20 29 7b 0a 20 20 20 20 72 6f 77 69  lRow ){.    rowi
2ba40 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e  d = 0;  /* Not n
2ba50 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65  eeded.  Only use
2ba60 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77  d to silence a w
2ba70 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72  arning. */.    r
2ba80 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  c = sqlite3VdbeI
2ba90 64 78 52 6f 77 69 64 28 64 62 2c 20 70 43 2d 3e  dxRowid(db, pC->
2baa0 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 6f 77  uc.pCursor, &row
2bab0 69 64 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21  id);.    if( rc!
2bac0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
2bad0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
2bae0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
2baf0 20 7d 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e   }.    if( pOp->
2bb00 6f 70 63 6f 64 65 3d 3d 4f 50 5f 44 65 66 65 72  opcode==OP_Defer
2bb10 72 65 64 53 65 65 6b 20 29 7b 0a 20 20 20 20 20  redSeek ){.     
2bb20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
2bb30 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 70  >=0 && pOp->p3<p
2bb40 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 20  ->nCursor );.   
2bb50 20 20 20 70 54 61 62 43 75 72 20 3d 20 70 2d 3e     pTabCur = p->
2bb60 61 70 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  apCsr[pOp->p3];.
2bb70 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 54        assert( pT
2bb80 61 62 43 75 72 21 3d 30 20 29 3b 0a 20 20 20 20  abCur!=0 );.    
2bb90 20 20 61 73 73 65 72 74 28 20 70 54 61 62 43 75    assert( pTabCu
2bba0 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  r->eCurType==CUR
2bbb0 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
2bbc0 20 20 20 20 61 73 73 65 72 74 28 20 70 54 61 62      assert( pTab
2bbd0 43 75 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21  Cur->uc.pCursor!
2bbe0 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  =0 );.      asse
2bbf0 72 74 28 20 70 54 61 62 43 75 72 2d 3e 69 73 54  rt( pTabCur->isT
2bc00 61 62 6c 65 20 29 3b 0a 20 20 20 20 20 20 70 54  able );.      pT
2bc10 61 62 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  abCur->nullRow =
2bc20 20 30 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75   0;.      pTabCu
2bc30 72 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20  r->movetoTarget 
2bc40 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 20 20 70  = rowid;.      p
2bc50 54 61 62 43 75 72 2d 3e 64 65 66 65 72 72 65 64  TabCur->deferred
2bc60 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20 20 20 20  Moveto = 1;.    
2bc70 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2bc80 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52  4type==P4_INTARR
2bc90 41 59 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 61 69  AY || pOp->p4.ai
2bca0 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 70 54 61  ==0 );.      pTa
2bcb0 62 43 75 72 2d 3e 61 41 6c 74 4d 61 70 20 3d 20  bCur->aAltMap = 
2bcc0 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 20 20  pOp->p4.ai;.    
2bcd0 20 20 70 54 61 62 43 75 72 2d 3e 70 41 6c 74 43    pTabCur->pAltC
2bce0 75 72 73 6f 72 20 3d 20 70 43 3b 0a 20 20 20 20  ursor = pC;.    
2bcf0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 4f 75  }else{.      pOu
2bd00 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
2bd10 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 20 20  se(p, pOp);.    
2bd20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f    pOut->u.i = ro
2bd30 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  wid;.    }.  }el
2bd40 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
2bd50 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2bd60 49 64 78 52 6f 77 69 64 20 29 3b 0a 20 20 20 20  IdxRowid );.    
2bd70 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2bd80 74 4e 75 6c 6c 28 26 61 4d 65 6d 5b 70 4f 70 2d  tNull(&aMem[pOp-
2bd90 3e 70 32 5d 29 3b 0a 20 20 7d 0a 20 20 62 72 65  >p2]);.  }.  bre
2bda0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2bdb0 3a 20 49 64 78 47 45 20 50 31 20 50 32 20 50 33  : IdxGE P1 P2 P3
2bdc0 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
2bdd0 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
2bde0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65  .**.** The P4 re
2bdf0 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65  gister values be
2be00 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20  ginning with P3 
2be10 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
2be20 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74   index .** key t
2be30 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52  hat omits the PR
2be40 49 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70  IMARY KEY.  Comp
2be50 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c  are this key val
2be60 75 65 20 61 67 61 69 6e 73 74 20 74 68 65 20 69  ue against the i
2be70 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31  ndex .** that P1
2be80 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
2be90 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72  inting to, ignor
2bea0 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20  ing the PRIMARY 
2beb0 4b 45 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a  KEY or ROWID .**
2bec0 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20 65   fields at the e
2bed0 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  nd..**.** If the
2bee0 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20   P1 index entry 
2bef0 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
2bf00 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
2bf10 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65  key value.** the
2bf20 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f  n jump to P2.  O
2bf30 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68  therwise fall th
2bf40 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
2bf50 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
2bf60 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  /./* Opcode: Idx
2bf70 47 54 20 50 31 20 50 32 20 50 33 20 50 34 20 50  GT P1 P2 P3 P4 P
2bf80 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  5.** Synopsis: k
2bf90 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
2bfa0 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65  * The P4 registe
2bfb0 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69  r values beginni
2bfc0 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20  ng with P3 form 
2bfd0 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
2bfe0 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f  x .** key that o
2bff0 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59  mits the PRIMARY
2c000 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65 20 74   KEY.  Compare t
2c010 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67  his key value ag
2c020 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20  ainst the index 
2c030 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20 63  .** that P1 is c
2c040 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
2c050 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74  g to, ignoring t
2c060 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f  he PRIMARY KEY o
2c070 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c  r ROWID .** fiel
2c080 64 73 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a  ds at the end..*
2c090 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69  *.** If the P1 i
2c0a0 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 67 72  ndex entry is gr
2c0b0 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b  eater than the k
2c0c0 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e  ey value.** then
2c0d0 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74   jump to P2.  Ot
2c0e0 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72  herwise fall thr
2c0f0 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
2c100 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
2c110 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c  ./* Opcode: IdxL
2c120 54 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  T P1 P2 P3 P4 P5
2c130 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
2c140 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
2c150 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72   The P4 register
2c160 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e   values beginnin
2c170 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61  g with P3 form a
2c180 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
2c190 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d   .** key that om
2c1a0 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20  its the PRIMARY 
2c1b0 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20 43  KEY or ROWID.  C
2c1c0 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
2c1d0 76 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a  value against.**
2c1e0 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20   the index that 
2c1f0 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
2c200 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e  pointing to, ign
2c210 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52  oring the PRIMAR
2c220 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49  Y KEY or.** ROWI
2c230 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65  D on the P1 inde
2c240 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  x..**.** If the 
2c250 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69  P1 index entry i
2c260 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20  s less than the 
2c270 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a  key value then j
2c280 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74  ump to P2..** Ot
2c290 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72  herwise fall thr
2c2a0 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
2c2b0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
2c2c0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c  ./* Opcode: IdxL
2c2d0 45 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  E P1 P2 P3 P4 P5
2c2e0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
2c2f0 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
2c300 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72   The P4 register
2c310 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e   values beginnin
2c320 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61  g with P3 form a
2c330 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
2c340 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d   .** key that om
2c350 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20  its the PRIMARY 
2c360 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20 43  KEY or ROWID.  C
2c370 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
2c380 76 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a  value against.**
2c390 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20   the index that 
2c3a0 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
2c3b0 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e  pointing to, ign
2c3c0 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52  oring the PRIMAR
2c3d0 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49  Y KEY or.** ROWI
2c3e0 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65  D on the P1 inde
2c3f0 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  x..**.** If the 
2c400 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69  P1 index entry i
2c410 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  s less than or e
2c420 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
2c430 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 0a  value then jump.
2c440 2a 2a 20 74 6f 20 50 32 2e 20 4f 74 68 65 72 77  ** to P2. Otherw
2c450 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ise fall through
2c460 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
2c470 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
2c480 65 20 4f 50 5f 49 64 78 4c 45 3a 20 20 20 20 20  e OP_IdxLE:     
2c490 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
2c4a0 63 61 73 65 20 4f 50 5f 49 64 78 47 54 3a 20 20  case OP_IdxGT:  
2c4b0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
2c4c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 54  */.case OP_IdxLT
2c4d0 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
2c4e0 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  mp */.case OP_Id
2c4f0 78 47 45 3a 20 20 7b 20 20 20 20 20 20 20 2f 2a  xGE:  {       /*
2c500 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
2c510 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74  ursor *pC;.  int
2c520 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64   res;.  Unpacked
2c530 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73  Record r;..  ass
2c540 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2c550 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
2c560 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
2c570 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
2c580 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
2c590 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2c5a0 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b  pC->isOrdered );
2c5b0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
2c5c0 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
2c5d0 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65  _BTREE );.  asse
2c5e0 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  rt( pC->uc.pCurs
2c5f0 6f 72 21 3d 30 29 3b 0a 20 20 61 73 73 65 72 74  or!=0);.  assert
2c600 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
2c610 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73  veto==0 );.  ass
2c620 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  ert( pOp->p5==0 
2c630 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b  || pOp->p5==1 );
2c640 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2c650 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
2c660 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f   );.  r.pKeyInfo
2c670 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b   = pC->pKeyInfo;
2c680 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75  .  r.nField = (u
2c690 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20  16)pOp->p4.i;.  
2c6a0 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3c  if( pOp->opcode<
2c6b0 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20 20 20 20  OP_IdxLT ){.    
2c6c0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
2c6d0 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c  ode==OP_IdxLE ||
2c6e0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
2c6f0 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20 72 2e  _IdxGT );.    r.
2c700 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b  default_rc = -1;
2c710 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
2c720 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
2c730 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70  e==OP_IdxGE || p
2c740 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
2c750 64 78 4c 54 20 29 3b 0a 20 20 20 20 72 2e 64 65  dxLT );.    r.de
2c760 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20  fault_rc = 0;.  
2c770 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d  }.  r.aMem = &aM
2c780 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66  em[pOp->p3];.#if
2c790 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
2c7a0 0a 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28  .  { int i; for(
2c7b0 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b  i=0; i<r.nField;
2c7c0 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65   i++) assert( me
2c7d0 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
2c7e0 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66  [i]) ); }.#endif
2c7f0 0a 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20  .  res = 0;  /* 
2c800 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c  Not needed.  Onl
2c810 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63  y used to silenc
2c820 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a  e a warning. */.
2c830 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
2c840 62 65 49 64 78 4b 65 79 43 6f 6d 70 61 72 65 28  beIdxKeyCompare(
2c850 64 62 2c 20 70 43 2c 20 26 72 2c 20 26 72 65 73  db, pC, &r, &res
2c860 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 4f 50  );.  assert( (OP
2c870 5f 49 64 78 4c 45 26 31 29 3d 3d 28 4f 50 5f 49  _IdxLE&1)==(OP_I
2c880 64 78 4c 54 26 31 29 20 26 26 20 28 4f 50 5f 49  dxLT&1) && (OP_I
2c890 64 78 47 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78  dxGE&1)==(OP_Idx
2c8a0 47 54 26 31 29 20 29 3b 0a 20 20 69 66 28 20 28  GT&1) );.  if( (
2c8b0 70 4f 70 2d 3e 6f 70 63 6f 64 65 26 31 29 3d 3d  pOp->opcode&1)==
2c8c0 28 4f 50 5f 49 64 78 4c 54 26 31 29 20 29 7b 0a  (OP_IdxLT&1) ){.
2c8d0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
2c8e0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c  >opcode==OP_IdxL
2c8f0 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  E || pOp->opcode
2c900 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20  ==OP_IdxLT );.  
2c910 20 20 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20    res = -res;.  
2c920 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
2c930 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
2c940 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d  OP_IdxGE || pOp-
2c950 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47  >opcode==OP_IdxG
2c960 54 20 29 3b 0a 20 20 20 20 72 65 73 2b 2b 3b 0a  T );.    res++;.
2c970 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68    }.  VdbeBranch
2c980 54 61 6b 65 6e 28 72 65 73 3e 30 2c 32 29 3b 0a  Taken(res>0,2);.
2c990 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
2c9a0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2c9b0 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 3e 30 20  or;.  if( res>0 
2c9c0 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
2c9d0 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  2;.  break;.}../
2c9e0 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72 6f  * Opcode: Destro
2c9f0 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  y P1 P2 P3 * *.*
2ca00 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20 65  *.** Delete an e
2ca10 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 20 74  ntire database t
2ca20 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68  able or index wh
2ca30 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 6e  ose root page in
2ca40 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
2ca50 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62   file is given b
2ca60 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  y P1..**.** The 
2ca70 74 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73 74  table being dest
2ca80 72 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65 20  royed is in the 
2ca90 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
2caa0 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49 66  le if P3==0.  If
2cab0 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20 74  .** P3==1 then t
2cac0 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63  he table to be c
2cad0 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61  lear is in the a
2cae0 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
2caf0 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69  e file.** that i
2cb00 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
2cb10 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73  tables create us
2cb20 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f  ing CREATE TEMPO
2cb30 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a  RARY TABLE..**.*
2cb40 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20  * If AUTOVACUUM 
2cb50 69 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e 20  is enabled then 
2cb60 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74  it is possible t
2cb70 68 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74  hat another root
2cb80 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62   page.** might b
2cb90 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65  e moved into the
2cba0 20 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20 72   newly deleted r
2cbb0 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64 65  oot page in orde
2cbc0 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a  r to keep all.**
2cbd0 20 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e 74   root pages cont
2cbe0 69 67 75 6f 75 73 20 61 74 20 74 68 65 20 62 65  iguous at the be
2cbf0 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64  ginning of the d
2cc00 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 66 6f  atabase.  The fo
2cc10 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66  rmer.** value of
2cc20 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 74   the root page t
2cc30 68 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73 20  hat moved - its 
2cc40 76 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68 65  value before the
2cc50 20 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20 2d   move occurred -
2cc60 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e  .** is stored in
2cc70 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 49 66   register P2. If
2cc80 20 6e 6f 20 70 61 67 65 20 6d 6f 76 65 6d 65 6e   no page movemen
2cc90 74 20 77 61 73 20 72 65 71 75 69 72 65 64 20 28  t was required (
2cca0 62 65 63 61 75 73 65 20 74 68 65 0a 2a 2a 20 74  because the.** t
2ccb0 61 62 6c 65 20 62 65 69 6e 67 20 64 72 6f 70 70  able being dropp
2ccc0 65 64 20 77 61 73 20 61 6c 72 65 61 64 79 20 74  ed was already t
2ccd0 68 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74  he last one in t
2cce0 68 65 20 64 61 74 61 62 61 73 65 29 20 74 68 65  he database) the
2ccf0 6e 20 61 20 0a 2a 2a 20 7a 65 72 6f 20 69 73 20  n a .** zero is 
2cd00 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
2cd10 65 72 20 50 32 2e 20 20 49 66 20 41 55 54 4f 56  er P2.  If AUTOV
2cd20 41 43 55 55 4d 20 69 73 20 64 69 73 61 62 6c 65  ACUUM is disable
2cd30 64 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 0a 2a  d then a zero .*
2cd40 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  * is stored in r
2cd50 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
2cd60 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 74 68  * This opcode th
2cd70 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66  rows an error if
2cd80 20 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 61   there are any a
2cd90 63 74 69 76 65 20 72 65 61 64 65 72 20 56 4d 73  ctive reader VMs
2cda0 20 77 68 65 6e 0a 2a 2a 20 69 74 20 69 73 20 69   when.** it is i
2cdb0 6e 76 6f 6b 65 64 2e 20 54 68 69 73 20 69 73 20  nvoked. This is 
2cdc0 64 6f 6e 65 20 74 6f 20 61 76 6f 69 64 20 74 68  done to avoid th
2cdd0 65 20 64 69 66 66 69 63 75 6c 74 79 20 61 73 73  e difficulty ass
2cde0 6f 63 69 61 74 65 64 20 77 69 74 68 20 0a 2a 2a  ociated with .**
2cdf0 20 75 70 64 61 74 69 6e 67 20 65 78 69 73 74 69   updating existi
2ce00 6e 67 20 63 75 72 73 6f 72 73 20 77 68 65 6e 20  ng cursors when 
2ce10 61 20 72 6f 6f 74 20 70 61 67 65 20 69 73 20 6d  a root page is m
2ce20 6f 76 65 64 20 69 6e 20 61 6e 20 41 55 54 4f 56  oved in an AUTOV
2ce30 41 43 55 55 4d 20 0a 2a 2a 20 64 61 74 61 62 61  ACUUM .** databa
2ce40 73 65 2e 20 54 68 69 73 20 65 72 72 6f 72 20 69  se. This error i
2ce50 73 20 74 68 72 6f 77 6e 20 65 76 65 6e 20 69 66  s thrown even if
2ce60 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
2ce70 20 6e 6f 74 20 61 6e 20 41 55 54 4f 56 41 43 55   not an AUTOVACU
2ce80 55 4d 20 0a 2a 2a 20 64 62 20 69 6e 20 6f 72 64  UM .** db in ord
2ce90 65 72 20 74 6f 20 61 76 6f 69 64 20 69 6e 74 72  er to avoid intr
2cea0 6f 64 75 63 69 6e 67 20 61 6e 20 69 6e 63 6f 6d  oducing an incom
2ceb0 70 61 74 69 62 69 6c 69 74 79 20 62 65 74 77 65  patibility betwe
2cec0 65 6e 20 61 75 74 6f 76 61 63 75 75 6d 20 0a 2a  en autovacuum .*
2ced0 2a 20 61 6e 64 20 6e 6f 6e 2d 61 75 74 6f 76 61  * and non-autova
2cee0 63 75 75 6d 20 6d 6f 64 65 73 2e 0a 2a 2a 0a 2a  cuum modes..**.*
2cef0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61  * See also: Clea
2cf00 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73  r.*/.case OP_Des
2cf10 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f  troy: {     /* o
2cf20 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f  ut2 */.  int iMo
2cf30 76 65 64 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a  ved;.  int iDb;.
2cf40 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
2cf50 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61  adOnly==0 );.  a
2cf60 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 31  ssert( pOp->p1>1
2cf70 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74   );.  pOut = out
2cf80 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
2cf90 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  Op);.  pOut->fla
2cfa0 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
2cfb0 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 52 65   if( db->nVdbeRe
2cfc0 61 64 20 3e 20 64 62 2d 3e 6e 56 44 65 73 74 72  ad > db->nVDestr
2cfd0 6f 79 2b 31 20 29 7b 0a 20 20 20 20 72 63 20 3d  oy+1 ){.    rc =
2cfe0 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a   SQLITE_LOCKED;.
2cff0 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69      p->errorActi
2d000 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a 20  on = OE_Abort;. 
2d010 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
2d020 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 65  e_to_error;.  }e
2d030 6c 73 65 7b 0a 20 20 20 20 69 44 62 20 3d 20 70  lse{.    iDb = p
2d040 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73 73 65  Op->p3;.    asse
2d050 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
2d060 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62  ->btreeMask, iDb
2d070 29 20 29 3b 0a 20 20 20 20 69 4d 6f 76 65 64 20  ) );.    iMoved 
2d080 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65  = 0;  /* Not nee
2d090 64 65 64 2e 20 20 4f 6e 6c 79 20 74 6f 20 73 69  ded.  Only to si
2d0a0 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e  lence a warning.
2d0b0 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   */.    rc = sql
2d0c0 69 74 65 33 42 74 72 65 65 44 72 6f 70 54 61 62  ite3BtreeDropTab
2d0d0 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  le(db->aDb[iDb].
2d0e0 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69  pBt, pOp->p1, &i
2d0f0 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f 75 74  Moved);.    pOut
2d100 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
2d110 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  t;.    pOut->u.i
2d120 20 3d 20 69 4d 6f 76 65 64 3b 0a 20 20 20 20 69   = iMoved;.    i
2d130 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
2d140 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2d150 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2d160 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a  OMIT_AUTOVACUUM.
2d170 20 20 20 20 69 66 28 20 69 4d 6f 76 65 64 21 3d      if( iMoved!=
2d180 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
2d190 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28  e3RootPageMoved(
2d1a0 64 62 2c 20 69 44 62 2c 20 69 4d 6f 76 65 64 2c  db, iDb, iMoved,
2d1b0 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 20   pOp->p1);.     
2d1c0 20 2f 2a 20 41 6c 6c 20 4f 50 5f 44 65 73 74 72   /* All OP_Destr
2d1d0 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 63  oy operations oc
2d1e0 63 75 72 20 6f 6e 20 74 68 65 20 73 61 6d 65 20  cur on the same 
2d1f0 62 74 72 65 65 20 2a 2f 0a 20 20 20 20 20 20 61  btree */.      a
2d200 73 73 65 72 74 28 20 72 65 73 65 74 53 63 68 65  ssert( resetSche
2d210 6d 61 4f 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c 20  maOnFault==0 || 
2d220 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
2d230 6c 74 3d 3d 69 44 62 2b 31 20 29 3b 0a 20 20 20  lt==iDb+1 );.   
2d240 20 20 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e     resetSchemaOn
2d250 46 61 75 6c 74 20 3d 20 69 44 62 2b 31 3b 0a 20  Fault = iDb+1;. 
2d260 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a     }.#endif.  }.
2d270 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2d280 70 63 6f 64 65 3a 20 43 6c 65 61 72 20 50 31 20  pcode: Clear P1 
2d290 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65  P2 P3.**.** Dele
2d2a0 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20  te all contents 
2d2b0 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
2d2c0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77  table or index w
2d2d0 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a  hose root page.*
2d2e0 2a 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  * in the databas
2d2f0 65 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20  e file is given 
2d300 62 79 20 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c  by P1.  But, unl
2d310 69 6b 65 20 44 65 73 74 72 6f 79 2c 20 64 6f 20  ike Destroy, do 
2d320 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68  not.** remove th
2d330 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
2d340 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
2d350 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54  se file..**.** T
2d360 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63  he table being c
2d370 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 6d  lear is in the m
2d380 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
2d390 65 20 69 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a  e if P2==0.  If.
2d3a0 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20 74 68  ** P2==1 then th
2d3b0 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c  e table to be cl
2d3c0 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75  ear is in the au
2d3d0 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
2d3e0 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73   file.** that is
2d3f0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
2d400 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69  ables create usi
2d410 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52  ng CREATE TEMPOR
2d420 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a  ARY TABLE..**.**
2d430 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65   If the P3 value
2d440 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
2d450 65 6e 20 74 68 65 20 74 61 62 6c 65 20 72 65 66  en the table ref
2d460 65 72 72 65 64 20 74 6f 20 6d 75 73 74 20 62 65  erred to must be
2d470 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61   an.** intkey ta
2d480 62 6c 65 20 28 61 6e 20 53 51 4c 20 74 61 62 6c  ble (an SQL tabl
2d490 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29  e, not an index)
2d4a0 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74  . In this case t
2d4b0 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a  he row change .*
2d4c0 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72 65  * count is incre
2d4d0 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75  mented by the nu
2d4e0 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20  mber of rows in 
2d4f0 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
2d500 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20  cleared. .** If 
2d510 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68  P3 is greater th
2d520 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  an zero, then th
2d530 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69  e value stored i
2d540 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  n register P3 is
2d550 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65  .** also increme
2d560 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62  nted by the numb
2d570 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
2d580 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c  e table being cl
2d590 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  eared..**.** See
2d5a0 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a   also: Destroy.*
2d5b0 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a  /.case OP_Clear:
2d5c0 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65   {.  int nChange
2d5d0 3b 0a 20 0a 20 20 6e 43 68 61 6e 67 65 20 3d 20  ;. .  nChange = 
2d5e0 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  0;.  assert( p->
2d5f0 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
2d600 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
2d610 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
2d620 2c 20 70 4f 70 2d 3e 70 32 29 20 29 3b 0a 20 20  , pOp->p2) );.  
2d630 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2d640 65 43 6c 65 61 72 54 61 62 6c 65 28 0a 20 20 20  eClearTable(.   
2d650 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e     db->aDb[pOp->
2d660 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31  p2].pBt, pOp->p1
2d670 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43  , (pOp->p3 ? &nC
2d680 68 61 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a  hange : 0).  );.
2d690 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b    if( pOp->p3 ){
2d6a0 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20  .    p->nChange 
2d6b0 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20  += nChange;.    
2d6c0 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b  if( pOp->p3>0 ){
2d6d0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
2d6e0 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
2d6f0 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20  pOp->p3]) );.   
2d700 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
2d710 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70  nge(p, &aMem[pOp
2d720 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d  ->p3]);.      aM
2d730 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20  em[pOp->p3].u.i 
2d740 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20  += nChange;.    
2d750 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29  }.  }.  if( rc )
2d760 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2d770 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
2d780 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2d790 20 52 65 73 65 74 53 6f 72 74 65 72 20 50 31 20   ResetSorter P1 
2d7a0 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65  * * * *.**.** De
2d7b0 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74  lete all content
2d7c0 73 20 66 72 6f 6d 20 74 68 65 20 65 70 68 65 6d  s from the ephem
2d7d0 65 72 61 6c 20 74 61 62 6c 65 20 6f 72 20 73 6f  eral table or so
2d7e0 72 74 65 72 0a 2a 2a 20 74 68 61 74 20 69 73 20  rter.** that is 
2d7f0 6f 70 65 6e 20 6f 6e 20 63 75 72 73 6f 72 20 50  open on cursor P
2d800 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  1..**.** This op
2d810 63 6f 64 65 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  code only works 
2d820 66 6f 72 20 63 75 72 73 6f 72 73 20 75 73 65 64  for cursors used
2d830 20 66 6f 72 20 73 6f 72 74 69 6e 67 20 61 6e 64   for sorting and
2d840 0a 2a 2a 20 6f 70 65 6e 65 64 20 77 69 74 68 20  .** opened with 
2d850 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
2d860 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65   or OP_SorterOpe
2d870 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  n..*/.case OP_Re
2d880 73 65 74 53 6f 72 74 65 72 3a 20 7b 0a 20 20 56  setSorter: {.  V
2d890 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
2d8a0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2d8b0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2d8c0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
2d8d0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
2d8e0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2d8f0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66  t( pC!=0 );.  if
2d900 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
2d910 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
2d920 65 53 6f 72 74 65 72 52 65 73 65 74 28 64 62 2c  eSorterReset(db,
2d930 20 70 43 2d 3e 75 63 2e 70 53 6f 72 74 65 72 29   pC->uc.pSorter)
2d940 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
2d950 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
2d960 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
2d970 45 45 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  EE );.    assert
2d980 28 20 70 43 2d 3e 69 73 45 70 68 65 6d 65 72 61  ( pC->isEphemera
2d990 6c 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  l );.    rc = sq
2d9a0 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 54  lite3BtreeClearT
2d9b0 61 62 6c 65 4f 66 43 75 72 73 6f 72 28 70 43 2d  ableOfCursor(pC-
2d9c0 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20  >uc.pCursor);.  
2d9d0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
2d9e0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2d9f0 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  or;.  }.  break;
2da00 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
2da10 72 65 61 74 65 54 61 62 6c 65 20 50 31 20 50 32  reateTable P1 P2
2da20 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
2da30 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20 69  is: r[P2]=root i
2da40 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f  Db=P1.**.** Allo
2da50 63 61 74 65 20 61 20 6e 65 77 20 74 61 62 6c 65  cate a new table
2da60 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
2da70 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31  abase file if P1
2da80 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a  ==0 or in the.**
2da90 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
2daa0 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d  ase file if P1==
2dab0 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63  1 or in an attac
2dac0 68 65 64 20 64 61 74 61 62 61 73 65 20 69 66 0a  hed database if.
2dad0 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20  ** P1>1.  Write 
2dae0 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  the root page nu
2daf0 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20  mber of the new 
2db00 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65  table into.** re
2db10 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20  gister P2.**.** 
2db20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62  The difference b
2db30 65 74 77 65 65 6e 20 61 20 74 61 62 6c 65 20 61  etween a table a
2db40 6e 64 20 61 6e 20 69 6e 64 65 78 20 69 73 20 74  nd an index is t
2db50 68 69 73 3a 20 20 41 20 74 61 62 6c 65 20 6d 75  his:  A table mu
2db60 73 74 0a 2a 2a 20 68 61 76 65 20 61 20 34 2d 62  st.** have a 4-b
2db70 79 74 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20  yte integer key 
2db80 61 6e 64 20 63 61 6e 20 68 61 76 65 20 61 72 62  and can have arb
2db90 69 74 72 61 72 79 20 64 61 74 61 2e 20 20 41 6e  itrary data.  An
2dba0 20 69 6e 64 65 78 0a 2a 2a 20 68 61 73 20 61 6e   index.** has an
2dbb0 20 61 72 62 69 74 72 61 72 79 20 6b 65 79 20 62   arbitrary key b
2dbc0 75 74 20 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a  ut no data..**.*
2dbd0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 72 65 61  * See also: Crea
2dbe0 74 65 49 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70  teIndex.*/./* Op
2dbf0 63 6f 64 65 3a 20 43 72 65 61 74 65 49 6e 64 65  code: CreateInde
2dc00 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  x P1 P2 * * *.**
2dc10 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
2dc20 3d 72 6f 6f 74 20 69 44 62 3d 50 31 0a 2a 2a 0a  =root iDb=P1.**.
2dc30 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65  ** Allocate a ne
2dc40 77 20 69 6e 64 65 78 20 69 6e 20 74 68 65 20 6d  w index in the m
2dc50 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
2dc60 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e  e if P1==0 or in
2dc70 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72   the.** auxiliar
2dc80 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  y database file 
2dc90 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61  if P1==1 or in a
2dca0 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
2dcb0 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20  ase if.** P1>1. 
2dcc0 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20   Write the root 
2dcd0 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74  page number of t
2dce0 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74  he new table int
2dcf0 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32  o.** register P2
2dd00 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64 6f 63 75  ..**.** See docu
2dd10 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f  mentation on OP_
2dd20 43 72 65 61 74 65 54 61 62 6c 65 20 66 6f 72 20  CreateTable for 
2dd30 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
2dd40 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  mation..*/.case 
2dd50 4f 50 5f 43 72 65 61 74 65 49 6e 64 65 78 3a 20  OP_CreateIndex: 
2dd60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
2dd70 74 32 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72  t2 */.case OP_Cr
2dd80 65 61 74 65 54 61 62 6c 65 3a 20 7b 20 20 20 20  eateTable: {    
2dd90 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
2dda0 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 69  .  int pgno;.  i
2ddb0 6e 74 20 66 6c 61 67 73 3b 0a 20 20 44 62 20 2a  nt flags;.  Db *
2ddc0 70 44 62 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f  pDb;..  pOut = o
2ddd0 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
2dde0 20 70 4f 70 29 3b 0a 20 20 70 67 6e 6f 20 3d 20   pOp);.  pgno = 
2ddf0 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  0;.  assert( pOp
2de00 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
2de10 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
2de20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
2de30 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
2de40 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61   pOp->p1) );.  a
2de50 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
2de60 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d  ly==0 );.  pDb =
2de70 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70   &db->aDb[pOp->p
2de80 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44  1];.  assert( pD
2de90 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 69  b->pBt!=0 );.  i
2dea0 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
2deb0 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 29  OP_CreateTable )
2dec0 7b 0a 20 20 20 20 2f 2a 20 66 6c 61 67 73 20 3d  {.    /* flags =
2ded0 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 20 2a   BTREE_INTKEY; *
2dee0 2f 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42 54  /.    flags = BT
2def0 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20 20 7d 65  REE_INTKEY;.  }e
2df00 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67 73 20 3d  lse{.    flags =
2df10 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 3b 0a   BTREE_BLOBKEY;.
2df20 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
2df30 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62  e3BtreeCreateTab
2df40 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20 26 70 67  le(pDb->pBt, &pg
2df50 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a 20 20 69 66  no, flags);.  if
2df60 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
2df70 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2df80 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67    pOut->u.i = pg
2df90 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  no;.  break;.}..
2dfa0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 71 6c 45 78  /* Opcode: SqlEx
2dfb0 65 63 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  ec * * * P4 *.**
2dfc0 0a 2a 2a 20 52 75 6e 20 74 68 65 20 53 51 4c 20  .** Run the SQL 
2dfd0 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 73 74 61  statement or sta
2dfe0 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65  tements specifie
2dff0 64 20 69 6e 20 74 68 65 20 50 34 20 73 74 72 69  d in the P4 stri
2e000 6e 67 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ng..*/.case OP_S
2e010 71 6c 45 78 65 63 3a 20 7b 0a 20 20 64 62 2d 3e  qlExec: {.  db->
2e020 6e 53 71 6c 45 78 65 63 2b 2b 3b 0a 20 20 72 63  nSqlExec++;.  rc
2e030 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28   = sqlite3_exec(
2e040 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 30  db, pOp->p4.z, 0
2e050 2c 20 30 2c 20 30 29 3b 0a 20 20 64 62 2d 3e 6e  , 0, 0);.  db->n
2e060 53 71 6c 45 78 65 63 2d 2d 3b 0a 20 20 69 66 28  SqlExec--;.  if(
2e070 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
2e080 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
2e090 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2e0a0 63 6f 64 65 3a 20 50 61 72 73 65 53 63 68 65 6d  code: ParseSchem
2e0b0 61 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  a P1 * * P4 *.**
2e0c0 0a 2a 2a 20 52 65 61 64 20 61 6e 64 20 70 61 72  .** Read and par
2e0d0 73 65 20 61 6c 6c 20 65 6e 74 72 69 65 73 20 66  se all entries f
2e0e0 72 6f 6d 20 74 68 65 20 53 51 4c 49 54 45 5f 4d  rom the SQLITE_M
2e0f0 41 53 54 45 52 20 74 61 62 6c 65 20 6f 66 20 64  ASTER table of d
2e100 61 74 61 62 61 73 65 20 50 31 0a 2a 2a 20 74 68  atabase P1.** th
2e110 61 74 20 6d 61 74 63 68 20 74 68 65 20 57 48 45  at match the WHE
2e120 52 45 20 63 6c 61 75 73 65 20 50 34 2e 20 0a 2a  RE clause P4. .*
2e130 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
2e140 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 70 61 72   invokes the par
2e150 73 65 72 20 74 6f 20 63 72 65 61 74 65 20 61 20  ser to create a 
2e160 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68  new virtual mach
2e170 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 75 6e  ine,.** then run
2e180 73 20 74 68 65 20 6e 65 77 20 76 69 72 74 75 61  s the new virtua
2e190 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 74 20 69  l machine.  It i
2e1a0 73 20 74 68 75 73 20 61 20 72 65 2d 65 6e 74 72  s thus a re-entr
2e1b0 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63  ant opcode..*/.c
2e1c0 61 73 65 20 4f 50 5f 50 61 72 73 65 53 63 68 65  ase OP_ParseSche
2e1d0 6d 61 3a 20 7b 0a 20 20 69 6e 74 20 69 44 62 3b  ma: {.  int iDb;
2e1e0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
2e1f0 4d 61 73 74 65 72 3b 0a 20 20 63 68 61 72 20 2a  Master;.  char *
2e200 7a 53 71 6c 3b 0a 20 20 49 6e 69 74 44 61 74 61  zSql;.  InitData
2e210 20 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20 2f 2a   initData;..  /*
2e220 20 41 6e 79 20 70 72 65 70 61 72 65 64 20 73 74   Any prepared st
2e230 61 74 65 6d 65 6e 74 20 74 68 61 74 20 69 6e 76  atement that inv
2e240 6f 6b 65 73 20 74 68 69 73 20 6f 70 63 6f 64 65  okes this opcode
2e250 20 77 69 6c 6c 20 68 6f 6c 64 20 6d 75 74 65 78   will hold mutex
2e260 65 73 0a 20 20 2a 2a 20 6f 6e 20 65 76 65 72 79  es.  ** on every
2e270 20 62 74 72 65 65 2e 20 20 54 68 69 73 20 69 73   btree.  This is
2e280 20 61 20 70 72 65 72 65 71 75 69 73 69 74 65 20   a prerequisite 
2e290 66 6f 72 20 69 6e 76 6f 6b 69 6e 67 20 0a 20 20  for invoking .  
2e2a0 2a 2a 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61  ** sqlite3InitCa
2e2b0 6c 6c 62 61 63 6b 28 29 2e 0a 20 20 2a 2f 0a 23  llback()..  */.#
2e2c0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
2e2d0 55 47 0a 20 20 66 6f 72 28 69 44 62 3d 30 3b 20  UG.  for(iDb=0; 
2e2e0 69 44 62 3c 64 62 2d 3e 6e 44 62 3b 20 69 44 62  iDb<db->nDb; iDb
2e2f0 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
2e300 20 69 44 62 3d 3d 31 20 7c 7c 20 73 71 6c 69 74   iDb==1 || sqlit
2e310 65 33 42 74 72 65 65 48 6f 6c 64 73 4d 75 74 65  e3BtreeHoldsMute
2e320 78 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  x(db->aDb[iDb].p
2e330 42 74 29 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  Bt) );.  }.#endi
2e340 66 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  f..  iDb = pOp->
2e350 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44  p1;.  assert( iD
2e360 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e  b>=0 && iDb<db->
2e370 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
2e380 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 64   DbHasProperty(d
2e390 62 2c 20 69 44 62 2c 20 44 42 5f 53 63 68 65 6d  b, iDb, DB_Schem
2e3a0 61 4c 6f 61 64 65 64 29 20 29 3b 0a 20 20 2f 2a  aLoaded) );.  /*
2e3b0 20 55 73 65 64 20 74 6f 20 62 65 20 61 20 63 6f   Used to be a co
2e3c0 6e 64 69 74 69 6f 6e 61 6c 20 2a 2f 20 7b 0a 20  nditional */ {. 
2e3d0 20 20 20 7a 4d 61 73 74 65 72 20 3d 20 4d 41 53     zMaster = MAS
2e3e0 54 45 52 5f 4e 41 4d 45 3b 0a 20 20 20 20 69 6e  TER_NAME;.    in
2e3f0 69 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a  itData.db = db;.
2e400 20 20 20 20 69 6e 69 74 44 61 74 61 2e 69 44 62      initData.iDb
2e410 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20 20   = pOp->p1;.    
2e420 69 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d 73  initData.pzErrMs
2e430 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b  g = &p->zErrMsg;
2e440 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69  .    zSql = sqli
2e450 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20  te3MPrintf(db,. 
2e460 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61        "SELECT na
2e470 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73 71  me, rootpage, sq
2e480 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25 73 20 57  l FROM '%q'.%s W
2e490 48 45 52 45 20 25 73 20 4f 52 44 45 52 20 42 59  HERE %s ORDER BY
2e4a0 20 72 6f 77 69 64 22 2c 0a 20 20 20 20 20 20 20   rowid",.       
2e4b0 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 44 62  db->aDb[iDb].zDb
2e4c0 53 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20  SName, zMaster, 
2e4d0 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20  pOp->p4.z);.    
2e4e0 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20  if( zSql==0 ){. 
2e4f0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
2e500 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 3b 0a 20 20 20  _NOMEM_BKPT;.   
2e510 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73   }else{.      as
2e520 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62  sert( db->init.b
2e530 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  usy==0 );.      
2e540 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20  db->init.busy = 
2e550 31 3b 0a 20 20 20 20 20 20 69 6e 69 74 44 61 74  1;.      initDat
2e560 61 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  a.rc = SQLITE_OK
2e570 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
2e580 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65  !db->mallocFaile
2e590 64 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  d );.      rc = 
2e5a0 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c  sqlite3_exec(db,
2e5b0 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33 49 6e   zSql, sqlite3In
2e5c0 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69  itCallback, &ini
2e5d0 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 20  tData, 0);.     
2e5e0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
2e5f0 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69 74 44 61  OK ) rc = initDa
2e600 74 61 2e 72 63 3b 0a 20 20 20 20 20 20 73 71 6c  ta.rc;.      sql
2e610 69 74 65 33 44 62 46 72 65 65 4e 4e 28 64 62 2c  ite3DbFreeNN(db,
2e620 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 64 62   zSql);.      db
2e630 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b  ->init.busy = 0;
2e640 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28  .    }.  }.  if(
2e650 20 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74   rc ){.    sqlit
2e660 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61  e3ResetAllSchema
2e670 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62  sOfConnection(db
2e680 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  );.    if( rc==S
2e690 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20  QLITE_NOMEM ){. 
2e6a0 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d       goto no_mem
2e6b0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f  ;.    }.    goto
2e6c0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2e6d0 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ror;.  }.  break
2e6e0 3b 20 20 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69  ;  .}..#if !defi
2e6f0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2e700 41 4e 41 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f  ANALYZE)./* Opco
2e710 64 65 3a 20 4c 6f 61 64 41 6e 61 6c 79 73 69 73  de: LoadAnalysis
2e720 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
2e730 2a 20 52 65 61 64 20 74 68 65 20 73 71 6c 69 74  * Read the sqlit
2e740 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20 66 6f  e_stat1 table fo
2e750 72 20 64 61 74 61 62 61 73 65 20 50 31 20 61 6e  r database P1 an
2e760 64 20 6c 6f 61 64 20 74 68 65 20 63 6f 6e 74 65  d load the conte
2e770 6e 74 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61  nt.** of that ta
2e780 62 6c 65 20 69 6e 74 6f 20 74 68 65 20 69 6e 74  ble into the int
2e790 65 72 6e 61 6c 20 69 6e 64 65 78 20 68 61 73 68  ernal index hash
2e7a0 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 77 69   table.  This wi
2e7b0 6c 6c 20 63 61 75 73 65 0a 2a 2a 20 74 68 65 20  ll cause.** the 
2e7c0 61 6e 61 6c 79 73 69 73 20 74 6f 20 62 65 20 75  analysis to be u
2e7d0 73 65 64 20 77 68 65 6e 20 70 72 65 70 61 72 69  sed when prepari
2e7e0 6e 67 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e  ng all subsequen
2e7f0 74 20 71 75 65 72 69 65 73 2e 0a 2a 2f 0a 63 61  t queries..*/.ca
2e800 73 65 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79 73  se OP_LoadAnalys
2e810 69 73 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  is: {.  assert( 
2e820 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
2e830 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
2e840 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 41  .  rc = sqlite3A
2e850 6e 61 6c 79 73 69 73 4c 6f 61 64 28 64 62 2c 20  nalysisLoad(db, 
2e860 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 69 66 28 20  pOp->p1);.  if( 
2e870 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
2e880 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2e890 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69  break;  .}.#endi
2e8a0 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51  f /* !defined(SQ
2e8b0 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a  LITE_OMIT_ANALYZ
2e8c0 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  E) */../* Opcode
2e8d0 3a 20 44 72 6f 70 54 61 62 6c 65 20 50 31 20 2a  : DropTable P1 *
2e8e0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
2e8f0 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61  move the interna
2e900 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61  l (in-memory) da
2e910 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68  ta structures th
2e920 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74  at describe.** t
2e930 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 50  he table named P
2e940 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  4 in database P1
2e950 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65  .  This is calle
2e960 64 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 0a  d after a table.
2e970 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66 72  ** is dropped fr
2e980 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74  om disk (using t
2e990 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64  he Destroy opcod
2e9a0 65 29 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b  e) in order to k
2e9b0 65 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65  eep .** the inte
2e9c0 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74  rnal representat
2e9d0 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63  ion of the.** sc
2e9e0 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20  hema consistent 
2e9f0 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20  with what is on 
2ea00 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  disk..*/.case OP
2ea10 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20  _DropTable: {.  
2ea20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
2ea30 44 65 6c 65 74 65 54 61 62 6c 65 28 64 62 2c 20  DeleteTable(db, 
2ea40 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
2ea50 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .z);.  break;.}.
2ea60 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70  ./* Opcode: Drop
2ea70 49 6e 64 65 78 20 50 31 20 2a 20 2a 20 50 34 20  Index P1 * * P4 
2ea80 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74  *.**.** Remove t
2ea90 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d  he internal (in-
2eaa0 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72  memory) data str
2eab0 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
2eac0 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64  cribe.** the ind
2ead0 65 78 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64  ex named P4 in d
2eae0 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69  atabase P1.  Thi
2eaf0 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65  s is called afte
2eb00 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73  r an index.** is
2eb10 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69   dropped from di
2eb20 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44 65  sk (using the De
2eb30 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 0a 2a 2a  stroy opcode).**
2eb40 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
2eb50 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72  p the internal r
2eb60 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
2eb70 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63   the.** schema c
2eb80 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77  onsistent with w
2eb90 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a  hat is on disk..
2eba0 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 49  */.case OP_DropI
2ebb0 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65  ndex: {.  sqlite
2ebc0 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
2ebd0 49 6e 64 65 78 28 64 62 2c 20 70 4f 70 2d 3e 70  Index(db, pOp->p
2ebe0 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  1, pOp->p4.z);. 
2ebf0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2ec00 63 6f 64 65 3a 20 44 72 6f 70 54 72 69 67 67 65  code: DropTrigge
2ec10 72 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  r P1 * * P4 *.**
2ec20 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69  .** Remove the i
2ec30 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f  nternal (in-memo
2ec40 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75  ry) data structu
2ec50 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62  res that describ
2ec60 65 0a 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72  e.** the trigger
2ec70 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74   named P4 in dat
2ec80 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20  abase P1.  This 
2ec90 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20  is called after 
2eca0 61 20 74 72 69 67 67 65 72 0a 2a 2a 20 69 73 20  a trigger.** is 
2ecb0 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73  dropped from dis
2ecc0 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44 65 73  k (using the Des
2ecd0 74 72 6f 79 20 6f 70 63 6f 64 65 29 20 69 6e 20  troy opcode) in 
2ece0 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a  order to keep .*
2ecf0 2a 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72  * the internal r
2ed00 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
2ed10 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63   the.** schema c
2ed20 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77  onsistent with w
2ed30 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a  hat is on disk..
2ed40 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54  */.case OP_DropT
2ed50 72 69 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69  rigger: {.  sqli
2ed60 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
2ed70 74 65 54 72 69 67 67 65 72 28 64 62 2c 20 70 4f  teTrigger(db, pO
2ed80 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
2ed90 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a  );.  break;.}...
2eda0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2edb0 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  MIT_INTEGRITY_CH
2edc0 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  ECK./* Opcode: I
2edd0 6e 74 65 67 72 69 74 79 43 6b 20 50 31 20 50 32  ntegrityCk P1 P2
2ede0 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
2edf0 44 6f 20 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f  Do an analysis o
2ee00 66 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20  f the currently 
2ee10 6f 70 65 6e 20 64 61 74 61 62 61 73 65 2e 20 20  open database.  
2ee20 53 74 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69  Store in.** regi
2ee30 73 74 65 72 20 50 31 20 74 68 65 20 74 65 78 74  ster P1 the text
2ee40 20 6f 66 20 61 6e 20 65 72 72 6f 72 20 6d 65 73   of an error mes
2ee50 73 61 67 65 20 64 65 73 63 72 69 62 69 6e 67 20  sage describing 
2ee60 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a  any problems..**
2ee70 20 49 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20   If no problems 
2ee80 61 72 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65  are found, store
2ee90 20 61 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73   a NULL in regis
2eea0 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68  ter P1..**.** Th
2eeb0 65 20 72 65 67 69 73 74 65 72 20 50 33 20 63 6f  e register P3 co
2eec0 6e 74 61 69 6e 73 20 6f 6e 65 20 6c 65 73 73 20  ntains one less 
2eed0 74 68 61 6e 20 74 68 65 20 6d 61 78 69 6d 75 6d  than the maximum
2eee0 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77   number of allow
2eef0 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74  ed errors..** At
2ef00 20 6d 6f 73 74 20 72 65 67 28 50 33 29 20 65 72   most reg(P3) er
2ef10 72 6f 72 73 20 77 69 6c 6c 20 62 65 20 72 65 70  rors will be rep
2ef20 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68  orted..** In oth
2ef30 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 61 6e  er words, the an
2ef40 61 6c 79 73 69 73 20 73 74 6f 70 73 20 61 73 20  alysis stops as 
2ef50 73 6f 6f 6e 20 61 73 20 72 65 67 28 50 31 29 20  soon as reg(P1) 
2ef60 65 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73  errors are .** s
2ef70 65 65 6e 2e 20 20 52 65 67 28 50 31 29 20 69 73  een.  Reg(P1) is
2ef80 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74 68   updated with th
2ef90 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  e number of erro
2efa0 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a  rs remaining..**
2efb0 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67  .** The root pag
2efc0 65 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c  e numbers of all
2efd0 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64   tables in the d
2efe0 61 74 61 62 61 73 65 20 61 72 65 20 69 6e 74 65  atabase are inte
2eff0 67 65 72 73 0a 2a 2a 20 73 74 6f 72 65 64 20 69  gers.** stored i
2f000 6e 20 50 34 5f 49 4e 54 41 52 52 41 59 20 61 72  n P4_INTARRAY ar
2f010 67 75 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66  gument..**.** If
2f020 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P5 is not zero,
2f030 20 74 68 65 20 63 68 65 63 6b 20 69 73 20 64 6f   the check is do
2f040 6e 65 20 6f 6e 20 74 68 65 20 61 75 78 69 6c 69  ne on the auxili
2f050 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  ary database.** 
2f060 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61  file, not the ma
2f070 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
2f080 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
2f090 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20 69  ode is used to i
2f0a0 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 69 6e 74  mplement the int
2f0b0 65 67 72 69 74 79 5f 63 68 65 63 6b 20 70 72 61  egrity_check pra
2f0c0 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  gma..*/.case OP_
2f0d0 49 6e 74 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20  IntegrityCk: {. 
2f0e0 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20   int nRoot;     
2f0f0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61   /* Number of ta
2f100 62 6c 65 73 20 74 6f 20 63 68 65 63 6b 2e 20 20  bles to check.  
2f110 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20  (Number of root 
2f120 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74  pages.) */.  int
2f130 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20   *aRoot;     /* 
2f140 41 72 72 61 79 20 6f 66 20 72 6f 6f 74 70 61 67  Array of rootpag
2f150 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 74 61  e numbers for ta
2f160 62 6c 65 73 20 74 6f 20 62 65 20 63 68 65 63 6b  bles to be check
2f170 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  ed */.  int nErr
2f180 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ;       /* Numbe
2f190 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 70 6f  r of errors repo
2f1a0 72 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  rted */.  char *
2f1b0 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78  z;        /* Tex
2f1c0 74 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20 72  t of the error r
2f1d0 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a  eport */.  Mem *
2f1e0 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20 52 65  pnErr;     /* Re
2f1f0 67 69 73 74 65 72 20 6b 65 65 70 69 6e 67 20 74  gister keeping t
2f200 72 61 63 6b 20 6f 66 20 65 72 72 6f 72 73 20 72  rack of errors r
2f210 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 0a 20 20 61  emaining */..  a
2f220 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
2f230 64 65 72 20 29 3b 0a 20 20 6e 52 6f 6f 74 20 3d  der );.  nRoot =
2f240 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 52 6f 6f   pOp->p2;.  aRoo
2f250 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a  t = pOp->p4.ai;.
2f260 20 20 61 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e    assert( nRoot>
2f270 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 61  0 );.  assert( a
2f280 52 6f 6f 74 5b 6e 52 6f 6f 74 5d 3d 3d 30 20 29  Root[nRoot]==0 )
2f290 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2f2a0 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
2f2b0 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
2f2c0 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
2f2d0 70 6e 45 72 72 20 3d 20 26 61 4d 65 6d 5b 70 4f  pnErr = &aMem[pO
2f2e0 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74  p->p3];.  assert
2f2f0 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20  ( (pnErr->flags 
2f300 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
2f310 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72  .  assert( (pnEr
2f320 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  r->flags & (MEM_
2f330 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d  Str|MEM_Blob))==
2f340 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  0 );.  pIn1 = &a
2f350 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2f360 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c  assert( pOp->p5<
2f370 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
2f380 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
2f390 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f  p->btreeMask, pO
2f3a0 70 2d 3e 70 35 29 20 29 3b 0a 20 20 7a 20 3d 20  p->p5) );.  z = 
2f3b0 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65  sqlite3BtreeInte
2f3c0 67 72 69 74 79 43 68 65 63 6b 28 64 62 2d 3e 61  grityCheck(db->a
2f3d0 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c  Db[pOp->p5].pBt,
2f3e0 20 61 52 6f 6f 74 2c 20 6e 52 6f 6f 74 2c 0a 20   aRoot, nRoot,. 
2f3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f410 28 69 6e 74 29 70 6e 45 72 72 2d 3e 75 2e 69 2b  (int)pnErr->u.i+
2f420 31 2c 20 26 6e 45 72 72 29 3b 0a 20 20 73 71 6c  1, &nErr);.  sql
2f430 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
2f440 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 69 66 28 20  ll(pIn1);.  if( 
2f450 6e 45 72 72 3d 3d 30 20 29 7b 0a 20 20 20 20 61  nErr==0 ){.    a
2f460 73 73 65 72 74 28 20 7a 3d 3d 30 20 29 3b 0a 20  ssert( z==0 );. 
2f470 20 7d 65 6c 73 65 20 69 66 28 20 7a 3d 3d 30 20   }else if( z==0 
2f480 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  ){.    goto no_m
2f490 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  em;.  }else{.   
2f4a0 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e   pnErr->u.i -= n
2f4b0 45 72 72 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74  Err-1;.    sqlit
2f4c0 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28  e3VdbeMemSetStr(
2f4d0 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c  pIn1, z, -1, SQL
2f4e0 49 54 45 5f 55 54 46 38 2c 20 73 71 6c 69 74 65  ITE_UTF8, sqlite
2f4f0 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55  3_free);.  }.  U
2f500 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
2f510 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69  ZE(pIn1);.  sqli
2f520 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
2f530 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f  oding(pIn1, enco
2f540 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  ding);.  break;.
2f550 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2f560 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54  TE_OMIT_INTEGRIT
2f570 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f  Y_CHECK */../* O
2f580 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 41 64 64  pcode: RowSetAdd
2f590 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
2f5a0 53 79 6e 6f 70 73 69 73 3a 20 72 6f 77 73 65 74  Synopsis: rowset
2f5b0 28 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  (P1)=r[P2].**.**
2f5c0 20 49 6e 73 65 72 74 20 74 68 65 20 69 6e 74 65   Insert the inte
2f5d0 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20 62  ger value held b
2f5e0 79 20 72 65 67 69 73 74 65 72 20 50 32 20 69 6e  y register P2 in
2f5f0 74 6f 20 61 20 52 6f 77 53 65 74 20 6f 62 6a 65  to a RowSet obje
2f600 63 74 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65  ct.** held in re
2f610 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a  gister P1..**.**
2f620 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
2f630 69 6c 73 20 69 66 20 50 32 20 69 73 20 6e 6f 74  ils if P2 is not
2f640 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a   an integer..*/.
2f650 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 41 64  case OP_RowSetAd
2f660 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e  d: {       /* in
2f670 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31  1, in2 */.  pIn1
2f680 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
2f690 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  ];.  pIn2 = &aMe
2f6a0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
2f6b0 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61  sert( (pIn2->fla
2f6c0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
2f6d0 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d   );.  if( (pIn1-
2f6e0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
2f6f0 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73  Set)==0 ){.    s
2f700 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
2f710 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20  RowSet(pIn1);.  
2f720 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
2f730 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
2f740 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
2f750 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  m;.  }.  sqlite3
2f760 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e  RowSetInsert(pIn
2f770 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49  1->u.pRowSet, pI
2f780 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61  n2->u.i);.  brea
2f790 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2f7a0 20 52 6f 77 53 65 74 52 65 61 64 20 50 31 20 50   RowSetRead P1 P
2f7b0 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
2f7c0 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 6f 77 73  psis: r[P3]=rows
2f7d0 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20 45 78 74  et(P1).**.** Ext
2f7e0 72 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65 73  ract the smalles
2f7f0 74 20 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65  t value from the
2f800 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 69   RowSet object i
2f810 6e 20 50 31 0a 2a 2a 20 61 6e 64 20 70 75 74 20  n P1.** and put 
2f820 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20  that value into 
2f830 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
2f840 4f 72 2c 20 69 66 20 52 6f 77 53 65 74 20 6f 62  Or, if RowSet ob
2f850 6a 65 63 74 20 50 31 20 69 73 20 69 6e 69 74 69  ject P1 is initi
2f860 61 6c 6c 79 20 65 6d 70 74 79 2c 20 6c 65 61 76  ally empty, leav
2f870 65 20 50 33 0a 2a 2a 20 75 6e 63 68 61 6e 67 65  e P3.** unchange
2f880 64 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 69 6e  d and jump to in
2f890 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f  struction P2..*/
2f8a0 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 52  .case OP_RowSetR
2f8b0 65 61 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20  ead: {       /* 
2f8c0 6a 75 6d 70 2c 20 69 6e 31 2c 20 6f 75 74 33 20  jump, in1, out3 
2f8d0 2a 2f 0a 20 20 69 36 34 20 76 61 6c 3b 0a 0a 20  */.  i64 val;.. 
2f8e0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
2f8f0 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70  p->p1];.  if( (p
2f900 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
2f910 5f 52 6f 77 53 65 74 29 3d 3d 30 20 0a 20 20 20  _RowSet)==0 .   
2f920 7c 7c 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  || sqlite3RowSet
2f930 4e 65 78 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f  Next(pIn1->u.pRo
2f940 77 53 65 74 2c 20 26 76 61 6c 29 3d 3d 30 0a 20  wSet, &val)==0. 
2f950 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 62   ){.    /* The b
2f960 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 69 73 20  oolean index is 
2f970 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20 73 71 6c  empty */.    sql
2f980 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
2f990 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 20 20 56 64  ll(pIn1);.    Vd
2f9a0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c  beBranchTaken(1,
2f9b0 32 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d  2);.    goto jum
2f9c0 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63  p_to_p2_and_chec
2f9d0 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b  k_for_interrupt;
2f9e0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
2f9f0 20 41 20 76 61 6c 75 65 20 77 61 73 20 70 75 6c   A value was pul
2fa00 6c 65 64 20 66 72 6f 6d 20 74 68 65 20 69 6e 64  led from the ind
2fa10 65 78 20 2a 2f 0a 20 20 20 20 56 64 62 65 42 72  ex */.    VdbeBr
2fa20 61 6e 63 68 54 61 6b 65 6e 28 30 2c 32 29 3b 0a  anchTaken(0,2);.
2fa30 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2fa40 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d  emSetInt64(&aMem
2fa50 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c 29 3b  [pOp->p3], val);
2fa60 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63  .  }.  goto chec
2fa70 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b  k_for_interrupt;
2fa80 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
2fa90 6f 77 53 65 74 54 65 73 74 20 50 31 20 50 32 20  owSetTest P1 P2 
2faa0 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69  P3 P4.** Synopsi
2fab0 73 3a 20 69 66 20 72 5b 50 33 5d 20 69 6e 20 72  s: if r[P3] in r
2fac0 6f 77 73 65 74 28 50 31 29 20 67 6f 74 6f 20 50  owset(P1) goto P
2fad0 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  2.**.** Register
2fae0 20 50 33 20 69 73 20 61 73 73 75 6d 65 64 20 74   P3 is assumed t
2faf0 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62 69 74 20  o hold a 64-bit 
2fb00 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 49  integer value. I
2fb10 66 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a  f register P1.**
2fb20 20 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f 77 53   contains a RowS
2fb30 65 74 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68  et object and th
2fb40 61 74 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74  at RowSet object
2fb50 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74 68 65   contains.** the
2fb60 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 50   value held in P
2fb70 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67 69 73  3, jump to regis
2fb80 74 65 72 20 50 32 2e 20 4f 74 68 65 72 77 69 73  ter P2. Otherwis
2fb90 65 2c 20 69 6e 73 65 72 74 20 74 68 65 0a 2a 2a  e, insert the.**
2fba0 20 69 6e 74 65 67 65 72 20 69 6e 20 50 33 20 69   integer in P3 i
2fbb0 6e 74 6f 20 74 68 65 20 52 6f 77 53 65 74 20 61  nto the RowSet a
2fbc0 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e 20 74  nd continue on t
2fbd0 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 6f 70  o the.** next op
2fbe0 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  code..**.** The 
2fbf0 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 69 73  RowSet object is
2fc00 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72 20 74   optimized for t
2fc10 68 65 20 63 61 73 65 20 77 68 65 72 65 20 73 65  he case where se
2fc20 74 73 20 6f 66 20 69 6e 74 65 67 65 72 73 0a 2a  ts of integers.*
2fc30 2a 20 61 72 65 20 69 6e 73 65 72 74 65 64 20 69  * are inserted i
2fc40 6e 20 64 69 73 74 69 6e 63 74 20 70 68 61 73 65  n distinct phase
2fc50 73 2c 20 77 68 69 63 68 20 65 61 63 68 20 73 65  s, which each se
2fc60 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75  t contains no du
2fc70 70 6c 69 63 61 74 65 73 2e 0a 2a 2a 20 45 61 63  plicates..** Eac
2fc80 68 20 73 65 74 20 69 73 20 69 64 65 6e 74 69 66  h set is identif
2fc90 69 65 64 20 62 79 20 61 20 75 6e 69 71 75 65 20  ied by a unique 
2fca0 50 34 20 76 61 6c 75 65 2e 20 54 68 65 20 66 69  P4 value. The fi
2fcb0 72 73 74 20 73 65 74 0a 2a 2a 20 6d 75 73 74 20  rst set.** must 
2fcc0 68 61 76 65 20 50 34 3d 3d 30 2c 20 74 68 65 20  have P4==0, the 
2fcd0 66 69 6e 61 6c 20 73 65 74 20 6d 75 73 74 20 68  final set must h
2fce0 61 76 65 20 50 34 3d 3d 2d 31 2c 20 61 6e 64 20  ave P4==-1, and 
2fcf0 66 6f 72 20 61 6c 6c 20 6f 74 68 65 72 20 73 65  for all other se
2fd00 74 73 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65 20  ts.** must have 
2fd10 50 34 3e 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  P4>0..**.** This
2fd20 20 61 6c 6c 6f 77 73 20 6f 70 74 69 6d 69 7a 61   allows optimiza
2fd30 74 69 6f 6e 73 3a 20 28 61 29 20 77 68 65 6e 20  tions: (a) when 
2fd40 50 34 3d 3d 30 20 74 68 65 72 65 20 69 73 20 6e  P4==0 there is n
2fd50 6f 20 6e 65 65 64 20 74 6f 20 74 65 73 74 0a 2a  o need to test.*
2fd60 2a 20 74 68 65 20 52 6f 77 53 65 74 20 6f 62 6a  * the RowSet obj
2fd70 65 63 74 20 66 6f 72 20 50 33 2c 20 61 73 20 69  ect for P3, as i
2fd80 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 20  t is guaranteed 
2fd90 6e 6f 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20 69  not to contain i
2fda0 74 2c 0a 2a 2a 20 28 62 29 20 77 68 65 6e 20 50  t,.** (b) when P
2fdb0 34 3d 3d 2d 31 20 74 68 65 72 65 20 69 73 20 6e  4==-1 there is n
2fdc0 6f 20 6e 65 65 64 20 74 6f 20 69 6e 73 65 72 74  o need to insert
2fdd0 20 74 68 65 20 76 61 6c 75 65 2c 20 61 73 20 69   the value, as i
2fde0 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20  t will.** never 
2fdf0 62 65 20 74 65 73 74 65 64 20 66 6f 72 2c 20 61  be tested for, a
2fe00 6e 64 20 28 63 29 20 77 68 65 6e 20 61 20 76 61  nd (c) when a va
2fe10 6c 75 65 20 74 68 61 74 20 69 73 20 70 61 72 74  lue that is part
2fe20 20 6f 66 20 73 65 74 20 58 20 69 73 0a 2a 2a 20   of set X is.** 
2fe30 69 6e 73 65 72 74 65 64 2c 20 74 68 65 72 65 20  inserted, there 
2fe40 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 73 65  is no need to se
2fe50 61 72 63 68 20 74 6f 20 73 65 65 20 69 66 20 74  arch to see if t
2fe60 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 77 61  he same value wa
2fe70 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20  s.** previously 
2fe80 69 6e 73 65 72 74 65 64 20 61 73 20 70 61 72 74  inserted as part
2fe90 20 6f 66 20 73 65 74 20 58 20 28 6f 6e 6c 79 20   of set X (only 
2fea0 69 66 20 69 74 20 77 61 73 20 70 72 65 76 69 6f  if it was previo
2feb0 75 73 6c 79 0a 2a 2a 20 69 6e 73 65 72 74 65 64  usly.** inserted
2fec0 20 61 73 20 70 61 72 74 20 6f 66 20 73 6f 6d 65   as part of some
2fed0 20 6f 74 68 65 72 20 73 65 74 29 2e 0a 2a 2f 0a   other set)..*/.
2fee0 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 54 65  case OP_RowSetTe
2fef0 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  st: {           
2ff00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
2ff10 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20  p, in1, in3 */. 
2ff20 20 69 6e 74 20 69 53 65 74 3b 0a 20 20 69 6e 74   int iSet;.  int
2ff30 20 65 78 69 73 74 73 3b 0a 0a 20 20 70 49 6e 31   exists;..  pIn1
2ff40 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
2ff50 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  ];.  pIn3 = &aMe
2ff60 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 53  m[pOp->p3];.  iS
2ff70 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a  et = pOp->p4.i;.
2ff80 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e    assert( pIn3->
2ff90 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b  flags&MEM_Int );
2ffa0 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20  ..  /* If there 
2ffb0 69 73 20 61 6e 79 74 68 69 6e 67 20 6f 74 68 65  is anything othe
2ffc0 72 20 74 68 61 6e 20 61 20 72 6f 77 73 65 74 20  r than a rowset 
2ffd0 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f 72 79  object in memory
2ffe0 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20 64   cell P1,.  ** d
2fff0 65 6c 65 74 65 20 69 74 20 6e 6f 77 20 61 6e 64  elete it now and
30000 20 69 6e 69 74 69 61 6c 69 7a 65 20 50 31 20 77   initialize P1 w
30010 69 74 68 20 61 6e 20 65 6d 70 74 79 20 72 6f 77  ith an empty row
30020 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28 20 28  set.  */.  if( (
30030 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
30040 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a  M_RowSet)==0 ){.
30050 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
30060 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31  emSetRowSet(pIn1
30070 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31  );.    if( (pIn1
30080 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
30090 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20  wSet)==0 ) goto 
300a0 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61  no_mem;.  }..  a
300b0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
300c0 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
300d0 20 20 61 73 73 65 72 74 28 20 69 53 65 74 3d 3d    assert( iSet==
300e0 2d 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20 29 3b  -1 || iSet>=0 );
300f0 0a 20 20 69 66 28 20 69 53 65 74 20 29 7b 0a 20  .  if( iSet ){. 
30100 20 20 20 65 78 69 73 74 73 20 3d 20 73 71 6c 69     exists = sqli
30110 74 65 33 52 6f 77 53 65 74 54 65 73 74 28 70 49  te3RowSetTest(pI
30120 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 69  n1->u.pRowSet, i
30130 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b  Set, pIn3->u.i);
30140 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
30150 61 6b 65 6e 28 65 78 69 73 74 73 21 3d 30 2c 32  aken(exists!=0,2
30160 29 3b 0a 20 20 20 20 69 66 28 20 65 78 69 73 74  );.    if( exist
30170 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  s ) goto jump_to
30180 5f 70 32 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69  _p2;.  }.  if( i
30190 53 65 74 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71  Set>=0 ){.    sq
301a0 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72  lite3RowSetInser
301b0 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65  t(pIn1->u.pRowSe
301c0 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20  t, pIn3->u.i);. 
301d0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a   }.  break;.}...
301e0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
301f0 4d 49 54 5f 54 52 49 47 47 45 52 0a 0a 2f 2a 20  MIT_TRIGGER../* 
30200 4f 70 63 6f 64 65 3a 20 50 72 6f 67 72 61 6d 20  Opcode: Program 
30210 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
30220 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65  *.** Execute the
30230 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
30240 20 70 61 73 73 65 64 20 61 73 20 50 34 20 28 74   passed as P4 (t
30250 79 70 65 20 50 34 5f 53 55 42 50 52 4f 47 52 41  ype P4_SUBPROGRA
30260 4d 29 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f  M). .**.** P1 co
30270 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65  ntains the addre
30280 73 73 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79  ss of the memory
30290 20 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61   cell that conta
302a0 69 6e 73 20 74 68 65 20 66 69 72 73 74 20 6d 65  ins the first me
302b0 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e  mory .** cell in
302c0 20 61 6e 20 61 72 72 61 79 20 6f 66 20 76 61 6c   an array of val
302d0 75 65 73 20 75 73 65 64 20 61 73 20 61 72 67 75  ues used as argu
302e0 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 73 75 62  ments to the sub
302f0 2d 70 72 6f 67 72 61 6d 2e 20 50 32 20 0a 2a 2a  -program. P2 .**
30300 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64   contains the ad
30310 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f  dress to jump to
30320 20 69 66 20 74 68 65 20 73 75 62 2d 70 72 6f 67   if the sub-prog
30330 72 61 6d 20 74 68 72 6f 77 73 20 61 6e 20 49 47  ram throws an IG
30340 4e 4f 52 45 20 0a 2a 2a 20 65 78 63 65 70 74 69  NORE .** excepti
30350 6f 6e 20 75 73 69 6e 67 20 74 68 65 20 52 41 49  on using the RAI
30360 53 45 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 52  SE() function. R
30370 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61  egister P3 conta
30380 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20  ins the address 
30390 0a 2a 2a 20 6f 66 20 61 20 6d 65 6d 6f 72 79 20  .** of a memory 
303a0 63 65 6c 6c 20 69 6e 20 74 68 69 73 20 28 74 68  cell in this (th
303b0 65 20 70 61 72 65 6e 74 29 20 56 4d 20 74 68 61  e parent) VM tha
303c0 74 20 69 73 20 75 73 65 64 20 74 6f 20 61 6c 6c  t is used to all
303d0 6f 63 61 74 65 20 74 68 65 20 0a 2a 2a 20 6d 65  ocate the .** me
303e0 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 62 79  mory required by
303f0 20 74 68 65 20 73 75 62 2d 76 64 62 65 20 61 74   the sub-vdbe at
30400 20 72 75 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20   runtime..**.** 
30410 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
30420 74 6f 20 74 68 65 20 56 4d 20 63 6f 6e 74 61 69  to the VM contai
30430 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72  ning the trigger
30440 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20   program..**.** 
30450 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P5 is non-zer
30460 6f 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69 76  o, then recursiv
30470 65 20 70 72 6f 67 72 61 6d 20 69 6e 76 6f 63 61  e program invoca
30480 74 69 6f 6e 20 69 73 20 65 6e 61 62 6c 65 64 2e  tion is enabled.
30490 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 6f 67  .*/.case OP_Prog
304a0 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ram: {        /*
304b0 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e   jump */.  int n
304c0 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
304d0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
304e0 6d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73  memory registers
304f0 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d   for sub-program
30500 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b   */.  int nByte;
30510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
30520 20 42 79 74 65 73 20 6f 66 20 72 75 6e 74 69 6d   Bytes of runtim
30530 65 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64  e space required
30540 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d   for sub-program
30550 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 74 3b 20   */.  Mem *pRt; 
30560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
30570 20 52 65 67 69 73 74 65 72 20 74 6f 20 61 6c 6c   Register to all
30580 6f 63 61 74 65 20 72 75 6e 74 69 6d 65 20 73 70  ocate runtime sp
30590 61 63 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d  ace */.  Mem *pM
305a0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
305b0 20 2f 2a 20 55 73 65 64 20 74 6f 20 69 74 65 72   /* Used to iter
305c0 61 74 65 20 74 68 72 6f 75 67 68 20 6d 65 6d 6f  ate through memo
305d0 72 79 20 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65  ry cells */.  Me
305e0 6d 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20  m *pEnd;        
305f0 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 6d 65        /* Last me
30600 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 6e 65 77  mory cell in new
30610 20 61 72 72 61 79 20 2a 2f 0a 20 20 56 64 62 65   array */.  Vdbe
30620 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20  Frame *pFrame;  
30630 20 20 20 20 2f 2a 20 4e 65 77 20 76 64 62 65 20      /* New vdbe 
30640 66 72 61 6d 65 20 74 6f 20 65 78 65 63 75 74 65  frame to execute
30650 20 69 6e 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67   in */.  SubProg
30660 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20  ram *pProgram;  
30670 20 2f 2a 20 53 75 62 2d 70 72 6f 67 72 61 6d 20   /* Sub-program 
30680 74 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a 20 20  to execute */.  
30690 76 6f 69 64 20 2a 74 3b 20 20 20 20 20 20 20 20  void *t;        
306a0 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
306b0 20 69 64 65 6e 74 69 66 79 69 6e 67 20 74 72 69   identifying tri
306c0 67 67 65 72 20 2a 2f 0a 0a 20 20 70 50 72 6f 67  gger */..  pProg
306d0 72 61 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 50  ram = pOp->p4.pP
306e0 72 6f 67 72 61 6d 3b 0a 20 20 70 52 74 20 3d 20  rogram;.  pRt = 
306f0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
30700 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72    assert( pProgr
30710 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a  am->nOp>0 );.  .
30720 20 20 2f 2a 20 49 66 20 74 68 65 20 70 35 20 66    /* If the p5 f
30730 6c 61 67 20 69 73 20 63 6c 65 61 72 2c 20 74 68  lag is clear, th
30740 65 6e 20 72 65 63 75 72 73 69 76 65 20 69 6e 76  en recursive inv
30750 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67  ocation of trigg
30760 65 72 73 20 69 73 20 0a 20 20 2a 2a 20 64 69 73  ers is .  ** dis
30770 61 62 6c 65 64 20 66 6f 72 20 62 61 63 6b 77 61  abled for backwa
30780 72 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  rds compatibilit
30790 79 20 28 70 35 20 69 73 20 73 65 74 20 69 66 20  y (p5 is set if 
307a0 74 68 69 73 20 73 75 62 2d 70 72 6f 67 72 61 6d  this sub-program
307b0 0a 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c 79 20  .  ** is really 
307c0 61 20 74 72 69 67 67 65 72 2c 20 6e 6f 74 20 61  a trigger, not a
307d0 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74   foreign key act
307e0 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66 6c 61  ion, and the fla
307f0 67 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64 20 63  g set.  ** and c
30800 6c 65 61 72 65 64 20 62 79 20 74 68 65 20 22 50  leared by the "P
30810 52 41 47 4d 41 20 72 65 63 75 72 73 69 76 65 5f  RAGMA recursive_
30820 74 72 69 67 67 65 72 73 22 20 63 6f 6d 6d 61 6e  triggers" comman
30830 64 20 69 73 20 63 6c 65 61 72 29 2e 0a 20 20 2a  d is clear)..  *
30840 2a 20 0a 20 20 2a 2a 20 49 74 20 69 73 20 72 65  * .  ** It is re
30850 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69  cursive invocati
30860 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73 2c 20  on of triggers, 
30870 61 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c  at the SQL level
30880 2c 20 74 68 61 74 20 69 73 20 0a 20 20 2a 2a 20  , that is .  ** 
30890 64 69 73 61 62 6c 65 64 2e 20 49 6e 20 73 6f 6d  disabled. In som
308a0 65 20 63 61 73 65 73 20 61 20 73 69 6e 67 6c 65  e cases a single
308b0 20 74 72 69 67 67 65 72 20 6d 61 79 20 67 65 6e   trigger may gen
308c0 65 72 61 74 65 20 6d 6f 72 65 20 74 68 61 6e 20  erate more than 
308d0 6f 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50 72 6f  one .  ** SubPro
308e0 67 72 61 6d 20 28 69 66 20 74 68 65 20 74 72 69  gram (if the tri
308f0 67 67 65 72 20 6d 61 79 20 62 65 20 65 78 65 63  gger may be exec
30900 75 74 65 64 20 77 69 74 68 20 6d 6f 72 65 20 74  uted with more t
30910 68 61 6e 20 6f 6e 65 20 64 69 66 66 65 72 65 6e  han one differen
30920 74 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c  t .  ** ON CONFL
30930 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 29 2e 20  ICT algorithm). 
30940 53 75 62 50 72 6f 67 72 61 6d 20 73 74 72 75 63  SubProgram struc
30950 74 75 72 65 73 20 61 73 73 6f 63 69 61 74 65 64  tures associated
30960 20 77 69 74 68 20 61 0a 20 20 2a 2a 20 73 69 6e   with a.  ** sin
30970 67 6c 65 20 74 72 69 67 67 65 72 20 61 6c 6c 20  gle trigger all 
30980 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 76 61  have the same va
30990 6c 75 65 20 66 6f 72 20 74 68 65 20 53 75 62 50  lue for the SubP
309a0 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20  rogram.token .  
309b0 2a 2a 20 76 61 72 69 61 62 6c 65 2e 20 20 2a 2f  ** variable.  */
309c0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29  .  if( pOp->p5 )
309d0 7b 0a 20 20 20 20 74 20 3d 20 70 50 72 6f 67 72  {.    t = pProgr
309e0 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 66  am->token;.    f
309f0 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72  or(pFrame=p->pFr
30a00 61 6d 65 3b 20 70 46 72 61 6d 65 20 26 26 20 70  ame; pFrame && p
30a10 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b  Frame->token!=t;
30a20 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e   pFrame=pFrame->
30a30 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 69 66  pParent);.    if
30a40 28 20 70 46 72 61 6d 65 20 29 20 62 72 65 61 6b  ( pFrame ) break
30a50 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e  ;.  }..  if( p->
30a60 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d  nFrame>=db->aLim
30a70 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
30a80 54 52 49 47 47 45 52 5f 44 45 50 54 48 5d 20 29  TRIGGER_DEPTH] )
30a90 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
30aa0 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c  E_ERROR;.    sql
30ab0 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
30ac0 20 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c   "too many level
30ad0 73 20 6f 66 20 74 72 69 67 67 65 72 20 72 65 63  s of trigger rec
30ae0 75 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20 67 6f  ursion");.    go
30af0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
30b00 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  error;.  }..  /*
30b10 20 52 65 67 69 73 74 65 72 20 70 52 74 20 69 73   Register pRt is
30b20 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
30b30 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72  he memory requir
30b40 65 64 20 74 6f 20 73 61 76 65 20 74 68 65 20 73  ed to save the s
30b50 74 61 74 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65  tate.  ** of the
30b60 20 63 75 72 72 65 6e 74 20 70 72 6f 67 72 61 6d   current program
30b70 2c 20 61 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79  , and the memory
30b80 20 72 65 71 75 69 72 65 64 20 61 74 20 72 75 6e   required at run
30b90 74 69 6d 65 20 74 6f 20 65 78 65 63 75 74 65 0a  time to execute.
30ba0 20 20 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72    ** the trigger
30bb0 20 70 72 6f 67 72 61 6d 2e 20 49 66 20 74 68 69   program. If thi
30bc0 73 20 74 72 69 67 67 65 72 20 68 61 73 20 62 65  s trigger has be
30bd0 65 6e 20 66 69 72 65 64 20 62 65 66 6f 72 65 2c  en fired before,
30be0 20 74 68 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20   then pRt .  ** 
30bf0 69 73 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63  is already alloc
30c00 61 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c  ated. Otherwise,
30c10 20 69 74 20 6d 75 73 74 20 62 65 20 69 6e 69 74   it must be init
30c20 69 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69  ialized.  */.  i
30c30 66 28 20 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d  f( (pRt->flags&M
30c40 45 4d 5f 46 72 61 6d 65 29 3d 3d 30 20 29 7b 0a  EM_Frame)==0 ){.
30c50 20 20 20 20 2f 2a 20 53 75 62 50 72 6f 67 72 61      /* SubProgra
30c60 6d 2e 6e 4d 65 6d 20 69 73 20 73 65 74 20 74 6f  m.nMem is set to
30c70 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d   the number of m
30c80 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64  emory cells used
30c90 20 62 79 20 74 68 65 20 0a 20 20 20 20 2a 2a 20   by the .    ** 
30ca0 70 72 6f 67 72 61 6d 20 73 74 6f 72 65 64 20 69  program stored i
30cb0 6e 20 53 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70  n SubProgram.aOp
30cc0 2e 20 41 73 20 77 65 6c 6c 20 61 73 20 74 68 65  . As well as the
30cd0 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20  se, one memory. 
30ce0 20 20 20 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65     ** cell is re
30cf0 71 75 69 72 65 64 20 66 6f 72 20 65 61 63 68 20  quired for each 
30d00 63 75 72 73 6f 72 20 75 73 65 64 20 62 79 20 74  cursor used by t
30d10 68 65 20 70 72 6f 67 72 61 6d 2e 20 53 65 74 20  he program. Set 
30d20 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72  local.    ** var
30d30 69 61 62 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20  iable nMem (and 
30d40 6c 61 74 65 72 2c 20 56 64 62 65 46 72 61 6d 65  later, VdbeFrame
30d50 2e 6e 43 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74  .nChildMem) to t
30d60 68 69 73 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a  his value..    *
30d70 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72  /.    nMem = pPr
30d80 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50  ogram->nMem + pP
30d90 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20  rogram->nCsr;.  
30da0 20 20 61 73 73 65 72 74 28 20 6e 4d 65 6d 3e 30    assert( nMem>0
30db0 20 29 3b 0a 20 20 20 20 69 66 28 20 70 50 72 6f   );.    if( pPro
30dc0 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 30 20 29 20  gram->nCsr==0 ) 
30dd0 6e 4d 65 6d 2b 2b 3b 0a 20 20 20 20 6e 42 79 74  nMem++;.    nByt
30de0 65 20 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f  e = ROUND8(sizeo
30df0 66 28 56 64 62 65 46 72 61 6d 65 29 29 0a 20 20  f(VdbeFrame)).  
30e00 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 6e 4d              + nM
30e10 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d 29  em * sizeof(Mem)
30e20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b  .              +
30e30 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 20   pProgram->nCsr 
30e40 2a 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72  * sizeof(VdbeCur
30e50 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20 20  sor*).          
30e60 20 20 20 20 2b 20 28 70 50 72 6f 67 72 61 6d 2d      + (pProgram-
30e70 3e 6e 4f 70 20 2b 20 37 29 2f 38 3b 0a 20 20 20  >nOp + 7)/8;.   
30e80 20 70 46 72 61 6d 65 20 3d 20 73 71 6c 69 74 65   pFrame = sqlite
30e90 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62  3DbMallocZero(db
30ea0 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 69 66  , nByte);.    if
30eb0 28 20 21 70 46 72 61 6d 65 20 29 7b 0a 20 20 20  ( !pFrame ){.   
30ec0 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
30ed0 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
30ee0 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28  3VdbeMemRelease(
30ef0 70 52 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e 66  pRt);.    pRt->f
30f00 6c 61 67 73 20 3d 20 4d 45 4d 5f 46 72 61 6d 65  lags = MEM_Frame
30f10 3b 0a 20 20 20 20 70 52 74 2d 3e 75 2e 70 46 72  ;.    pRt->u.pFr
30f20 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 0a 20  ame = pFrame;.. 
30f30 20 20 20 70 46 72 61 6d 65 2d 3e 76 20 3d 20 70     pFrame->v = p
30f40 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43  ;.    pFrame->nC
30f50 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b 0a  hildMem = nMem;.
30f60 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69      pFrame->nChi
30f70 6c 64 43 73 72 20 3d 20 70 50 72 6f 67 72 61 6d  ldCsr = pProgram
30f80 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 70 46 72 61  ->nCsr;.    pFra
30f90 6d 65 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70  me->pc = (int)(p
30fa0 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 70  Op - aOp);.    p
30fb0 46 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70 2d  Frame->aMem = p-
30fc0 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d  >aMem;.    pFram
30fd0 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d 65  e->nMem = p->nMe
30fe0 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  m;.    pFrame->a
30ff0 70 43 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 3b  pCsr = p->apCsr;
31000 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 75  .    pFrame->nCu
31010 72 73 6f 72 20 3d 20 70 2d 3e 6e 43 75 72 73 6f  rsor = p->nCurso
31020 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  r;.    pFrame->a
31030 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20  Op = p->aOp;.   
31040 20 70 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20 70   pFrame->nOp = p
31050 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d  ->nOp;.    pFram
31060 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50 72 6f 67  e->token = pProg
31070 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 23 69 66 64  ram->token;.#ifd
31080 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
31090 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53  _STMT_SCANSTATUS
310a0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 6e 45  .    pFrame->anE
310b0 78 65 63 20 3d 20 70 2d 3e 61 6e 45 78 65 63 3b  xec = p->anExec;
310c0 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 70 45 6e  .#endif..    pEn
310d0 64 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d 65  d = &VdbeFrameMe
310e0 6d 28 70 46 72 61 6d 65 29 5b 70 46 72 61 6d 65  m(pFrame)[pFrame
310f0 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a 20 20  ->nChildMem];.  
31100 20 20 66 6f 72 28 70 4d 65 6d 3d 56 64 62 65 46    for(pMem=VdbeF
31110 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 3b  rameMem(pFrame);
31120 20 70 4d 65 6d 21 3d 70 45 6e 64 3b 20 70 4d 65   pMem!=pEnd; pMe
31130 6d 2b 2b 29 7b 0a 20 20 20 20 20 20 70 4d 65 6d  m++){.      pMem
31140 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e  ->flags = MEM_Un
31150 64 65 66 69 6e 65 64 3b 0a 20 20 20 20 20 20 70  defined;.      p
31160 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20  Mem->db = db;.  
31170 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
31180 20 70 46 72 61 6d 65 20 3d 20 70 52 74 2d 3e 75   pFrame = pRt->u
31190 2e 70 46 72 61 6d 65 3b 0a 20 20 20 20 61 73 73  .pFrame;.    ass
311a0 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  ert( pProgram->n
311b0 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  Mem+pProgram->nC
311c0 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69  sr==pFrame->nChi
311d0 6c 64 4d 65 6d 20 0a 20 20 20 20 20 20 20 20 7c  ldMem .        |
311e0 7c 20 28 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73  | (pProgram->nCs
311f0 72 3d 3d 30 20 26 26 20 70 50 72 6f 67 72 61 6d  r==0 && pProgram
31200 2d 3e 6e 4d 65 6d 2b 31 3d 3d 70 46 72 61 6d 65  ->nMem+1==pFrame
31210 2d 3e 6e 43 68 69 6c 64 4d 65 6d 29 20 29 3b 0a  ->nChildMem) );.
31220 20 20 20 20 61 73 73 65 72 74 28 20 70 50 72 6f      assert( pPro
31230 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61  gram->nCsr==pFra
31240 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 29 3b  me->nChildCsr );
31250 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 69 6e  .    assert( (in
31260 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3d 3d 70  t)(pOp - aOp)==p
31270 46 72 61 6d 65 2d 3e 70 63 20 29 3b 0a 20 20 7d  Frame->pc );.  }
31280 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b  ..  p->nFrame++;
31290 0a 20 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  .  pFrame->pPare
312a0 6e 74 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a  nt = p->pFrame;.
312b0 20 20 70 46 72 61 6d 65 2d 3e 6c 61 73 74 52 6f    pFrame->lastRo
312c0 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f  wid = db->lastRo
312d0 77 69 64 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e  wid;.  pFrame->n
312e0 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61  Change = p->nCha
312f0 6e 67 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e  nge;.  pFrame->n
31300 44 62 43 68 61 6e 67 65 20 3d 20 70 2d 3e 64 62  DbChange = p->db
31310 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 61 73 73  ->nChange;.  ass
31320 65 72 74 28 20 70 46 72 61 6d 65 2d 3e 70 41 75  ert( pFrame->pAu
31330 78 44 61 74 61 3d 3d 30 20 29 3b 0a 20 20 70 46  xData==0 );.  pF
31340 72 61 6d 65 2d 3e 70 41 75 78 44 61 74 61 20 3d  rame->pAuxData =
31350 20 70 2d 3e 70 41 75 78 44 61 74 61 3b 0a 20 20   p->pAuxData;.  
31360 70 2d 3e 70 41 75 78 44 61 74 61 20 3d 20 30 3b  p->pAuxData = 0;
31370 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20  .  p->nChange = 
31380 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d  0;.  p->pFrame =
31390 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d   pFrame;.  p->aM
313a0 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 56 64 62 65  em = aMem = Vdbe
313b0 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29  FrameMem(pFrame)
313c0 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70 46  ;.  p->nMem = pF
313d0 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 3b  rame->nChildMem;
313e0 0a 20 20 70 2d 3e 6e 43 75 72 73 6f 72 20 3d 20  .  p->nCursor = 
313f0 28 75 31 36 29 70 46 72 61 6d 65 2d 3e 6e 43 68  (u16)pFrame->nCh
31400 69 6c 64 43 73 72 3b 0a 20 20 70 2d 3e 61 70 43  ildCsr;.  p->apC
31410 73 72 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72  sr = (VdbeCursor
31420 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65   **)&aMem[p->nMe
31430 6d 5d 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 61 4f  m];.  pFrame->aO
31440 6e 63 65 20 3d 20 28 75 38 2a 29 26 70 2d 3e 61  nce = (u8*)&p->a
31450 70 43 73 72 5b 70 50 72 6f 67 72 61 6d 2d 3e 6e  pCsr[pProgram->n
31460 43 73 72 5d 3b 0a 20 20 6d 65 6d 73 65 74 28 70  Csr];.  memset(p
31470 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 2c 20 30 2c  Frame->aOnce, 0,
31480 20 28 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 20   (pProgram->nOp 
31490 2b 20 37 29 2f 38 29 3b 0a 20 20 70 2d 3e 61 4f  + 7)/8);.  p->aO
314a0 70 20 3d 20 61 4f 70 20 3d 20 70 50 72 6f 67 72  p = aOp = pProgr
314b0 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e 6e 4f  am->aOp;.  p->nO
314c0 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f  p = pProgram->nO
314d0 70 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  p;.#ifdef SQLITE
314e0 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41  _ENABLE_STMT_SCA
314f0 4e 53 54 41 54 55 53 0a 20 20 70 2d 3e 61 6e 45  NSTATUS.  p->anE
31500 78 65 63 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a  xec = 0;.#endif.
31510 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 2d 31 5d    pOp = &aOp[-1]
31520 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  ;..  break;.}../
31530 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 61 6d 20  * Opcode: Param 
31540 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
31550 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  * This opcode is
31560 20 6f 6e 6c 79 20 65 76 65 72 20 70 72 65 73 65   only ever prese
31570 6e 74 20 69 6e 20 73 75 62 2d 70 72 6f 67 72 61  nt in sub-progra
31580 6d 73 20 63 61 6c 6c 65 64 20 76 69 61 20 74 68  ms called via th
31590 65 20 0a 2a 2a 20 4f 50 5f 50 72 6f 67 72 61 6d  e .** OP_Program
315a0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 43 6f   instruction. Co
315b0 70 79 20 61 20 76 61 6c 75 65 20 63 75 72 72 65  py a value curre
315c0 6e 74 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61  ntly stored in a
315d0 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c   memory .** cell
315e0 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67 20   of the calling 
315f0 28 70 61 72 65 6e 74 29 20 66 72 61 6d 65 20 74  (parent) frame t
31600 6f 20 63 65 6c 6c 20 50 32 20 69 6e 20 74 68 65  o cell P2 in the
31610 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65 73 20   current frames 
31620 0a 2a 2a 20 61 64 64 72 65 73 73 20 73 70 61 63  .** address spac
31630 65 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20  e. This is used 
31640 62 79 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  by trigger progr
31650 61 6d 73 20 74 6f 20 61 63 63 65 73 73 20 74 68  ams to access th
31660 65 20 6e 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20  e new.* .** and 
31670 6f 6c 64 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a  old.* values..**
31680 0a 2a 2a 20 54 68 65 20 61 64 64 72 65 73 73 20  .** The address 
31690 6f 66 20 74 68 65 20 63 65 6c 6c 20 69 6e 20 74  of the cell in t
316a0 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65 20  he parent frame 
316b0 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
316c0 20 61 64 64 69 6e 67 0a 2a 2a 20 74 68 65 20 76   adding.** the v
316d0 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20 61  alue of the P1 a
316e0 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 76  rgument to the v
316f0 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20 61  alue of the P1 a
31700 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 0a 2a  rgument to the.*
31710 2a 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f  * calling OP_Pro
31720 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e  gram instruction
31730 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72  ..*/.case OP_Par
31740 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  am: {           
31750 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62  /* out2 */.  Vdb
31760 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a  eFrame *pFrame;.
31770 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20 70 4f    Mem *pIn;.  pO
31780 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
31790 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70  ase(p, pOp);.  p
317a0 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d  Frame = p->pFram
317b0 65 3b 0a 20 20 70 49 6e 20 3d 20 26 70 46 72 61  e;.  pIn = &pFra
317c0 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  me->aMem[pOp->p1
317d0 20 2b 20 70 46 72 61 6d 65 2d 3e 61 4f 70 5b 70   + pFrame->aOp[p
317e0 46 72 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20  Frame->pc].p1]; 
317f0 20 20 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65    .  sqlite3Vdbe
31800 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
31810 4f 75 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45 70  Out, pIn, MEM_Ep
31820 68 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  hem);.  break;.}
31830 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e  ..#endif /* #ifn
31840 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
31850 54 52 49 47 47 45 52 20 2a 2f 0a 0a 23 69 66 6e  TRIGGER */..#ifn
31860 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
31870 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f  FOREIGN_KEY./* O
31880 70 63 6f 64 65 3a 20 46 6b 43 6f 75 6e 74 65 72  pcode: FkCounter
31890 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
318a0 53 79 6e 6f 70 73 69 73 3a 20 66 6b 63 74 72 5b  Synopsis: fkctr[
318b0 50 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20 49 6e  P1]+=P2.**.** In
318c0 63 72 65 6d 65 6e 74 20 61 20 22 63 6f 6e 73 74  crement a "const
318d0 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 22 20 62  raint counter" b
318e0 79 20 50 32 20 28 50 32 20 6d 61 79 20 62 65 20  y P2 (P2 may be 
318f0 6e 65 67 61 74 69 76 65 20 6f 72 20 70 6f 73 69  negative or posi
31900 74 69 76 65 29 2e 0a 2a 2a 20 49 66 20 50 31 20  tive)..** If P1 
31910 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
31920 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72   database constr
31930 61 69 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20  aint counter is 
31940 69 6e 63 72 65 6d 65 6e 74 65 64 20 0a 2a 2a 20  incremented .** 
31950 28 64 65 66 65 72 72 65 64 20 66 6f 72 65 69 67  (deferred foreig
31960 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
31970 73 29 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  s). Otherwise, i
31980 66 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68  f P1 is zero, th
31990 65 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20  e .** statement 
319a0 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65  counter is incre
319b0 6d 65 6e 74 65 64 20 28 69 6d 6d 65 64 69 61 74  mented (immediat
319c0 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  e foreign key co
319d0 6e 73 74 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63  nstraints)..*/.c
319e0 61 73 65 20 4f 50 5f 46 6b 43 6f 75 6e 74 65 72  ase OP_FkCounter
319f0 3a 20 7b 0a 20 20 69 66 28 20 64 62 2d 3e 66 6c  : {.  if( db->fl
31a00 61 67 73 20 26 20 53 51 4c 49 54 45 5f 44 65 66  ags & SQLITE_Def
31a10 65 72 46 4b 73 20 29 7b 0a 20 20 20 20 64 62 2d  erFKs ){.    db-
31a20 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
31a30 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  s += pOp->p2;.  
31a40 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70  }else if( pOp->p
31a50 31 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65  1 ){.    db->nDe
31a60 66 65 72 72 65 64 43 6f 6e 73 20 2b 3d 20 70 4f  ferredCons += pO
31a70 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a  p->p2;.  }else{.
31a80 20 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72      p->nFkConstr
31a90 61 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b  aint += pOp->p2;
31aa0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
31ab0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 49 66  ./* Opcode: FkIf
31ac0 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a  Zero P1 P2 * * *
31ad0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
31ae0 20 66 6b 63 74 72 5b 50 31 5d 3d 3d 30 20 67 6f   fkctr[P1]==0 go
31af0 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73  to P2.**.** This
31b00 20 6f 70 63 6f 64 65 20 74 65 73 74 73 20 69 66   opcode tests if
31b10 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63   a foreign key c
31b20 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65  onstraint-counte
31b30 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 7a  r is currently z
31b40 65 72 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20 6a  ero..** If so, j
31b50 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
31b60 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  on P2. Otherwise
31b70 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  , fall through t
31b80 6f 20 74 68 65 20 6e 65 78 74 20 0a 2a 2a 20 69  o the next .** i
31b90 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
31ba0 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a  * If P1 is non-z
31bb0 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 6a 75  ero, then the ju
31bc0 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74  mp is taken if t
31bd0 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73  he database cons
31be0 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 0a 2a  traint-counter.*
31bf0 2a 20 69 73 20 7a 65 72 6f 20 28 74 68 65 20 6f  * is zero (the o
31c00 6e 65 20 74 68 61 74 20 63 6f 75 6e 74 73 20 64  ne that counts d
31c10 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69  eferred constrai
31c20 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 20  nt violations). 
31c30 49 66 20 50 31 20 69 73 0a 2a 2a 20 7a 65 72 6f  If P1 is.** zero
31c40 2c 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  , the jump is ta
31c50 6b 65 6e 20 69 66 20 74 68 65 20 73 74 61 74 65  ken if the state
31c60 6d 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74 2d  ment constraint-
31c70 63 6f 75 6e 74 65 72 20 69 73 20 7a 65 72 6f 0a  counter is zero.
31c80 2a 2a 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f  ** (immediate fo
31c90 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
31ca0 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29  aint violations)
31cb0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 49  ..*/.case OP_FkI
31cc0 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20  fZero: {        
31cd0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66   /* jump */.  if
31ce0 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20  ( pOp->p1 ){.   
31cf0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
31d00 28 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f  (db->nDeferredCo
31d10 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65  ns==0 && db->nDe
31d20 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30  ferredImmCons==0
31d30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20 64 62  , 2);.    if( db
31d40 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d  ->nDeferredCons=
31d50 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72  =0 && db->nDefer
31d60 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20  redImmCons==0 ) 
31d70 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
31d80 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64  .  }else{.    Vd
31d90 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 2d  beBranchTaken(p-
31da0 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d  >nFkConstraint==
31db0 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72  0 && db->nDeferr
31dc0 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29  edImmCons==0, 2)
31dd0 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e 46 6b  ;.    if( p->nFk
31de0 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26 26  Constraint==0 &&
31df0 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
31e00 6d 43 6f 6e 73 3d 3d 30 20 29 20 67 6f 74 6f 20  mCons==0 ) goto 
31e10 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
31e20 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
31e30 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c  f /* #ifndef SQL
31e40 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
31e50 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  _KEY */..#ifndef
31e60 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
31e70 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70  OINCREMENT./* Op
31e80 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20  code: MemMax P1 
31e90 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
31ea0 70 73 69 73 3a 20 72 5b 50 31 5d 3d 6d 61 78 28  psis: r[P1]=max(
31eb0 72 5b 50 31 5d 2c 72 5b 50 32 5d 29 0a 2a 2a 0a  r[P1],r[P2]).**.
31ec0 2a 2a 20 50 31 20 69 73 20 61 20 72 65 67 69 73  ** P1 is a regis
31ed0 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20  ter in the root 
31ee0 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56 4d  frame of this VM
31ef0 20 28 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65   (the root frame
31f00 20 69 73 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74   is.** different
31f10 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e   from the curren
31f20 74 20 66 72 61 6d 65 20 69 66 20 74 68 69 73 20  t frame if this 
31f30 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 62  instruction is b
31f40 65 69 6e 67 20 65 78 65 63 75 74 65 64 0a 2a 2a  eing executed.**
31f50 20 77 69 74 68 69 6e 20 61 20 73 75 62 2d 70 72   within a sub-pr
31f60 6f 67 72 61 6d 29 2e 20 53 65 74 20 74 68 65 20  ogram). Set the 
31f70 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
31f80 72 20 50 31 20 74 6f 20 74 68 65 20 6d 61 78 69  r P1 to the maxi
31f90 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63  mum of .** its c
31fa0 75 72 72 65 6e 74 20 76 61 6c 75 65 20 61 6e 64  urrent value and
31fb0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
31fc0 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
31fd0 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
31fe0 6e 20 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f  n throws an erro
31ff0 72 20 69 66 20 74 68 65 20 6d 65 6d 6f 72 79 20  r if the memory 
32000 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74  cell is not init
32010 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65  ially.** an inte
32020 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ger..*/.case OP_
32030 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20 20  MemMax: {       
32040 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62   /* in2 */.  Vdb
32050 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a  eFrame *pFrame;.
32060 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20    if( p->pFrame 
32070 29 7b 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d  ){.    for(pFram
32080 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72  e=p->pFrame; pFr
32090 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46  ame->pParent; pF
320a0 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61  rame=pFrame->pPa
320b0 72 65 6e 74 29 3b 0a 20 20 20 20 70 49 6e 31 20  rent);.    pIn1 
320c0 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b  = &pFrame->aMem[
320d0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73  pOp->p1];.  }els
320e0 65 7b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 61  e{.    pIn1 = &a
320f0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
32100 7d 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49  }.  assert( memI
32110 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a  sValid(pIn1) );.
32120 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
32130 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29  Integerify(pIn1)
32140 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
32150 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c  [pOp->p2];.  sql
32160 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
32170 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 69  erify(pIn2);.  i
32180 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e  f( pIn1->u.i<pIn
32190 32 2d 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e  2->u.i){.    pIn
321a0 31 2d 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75  1->u.i = pIn2->u
321b0 2e 69 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  .i;.  }.  break;
321c0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
321d0 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43  ITE_OMIT_AUTOINC
321e0 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70  REMENT */../* Op
321f0 63 6f 64 65 3a 20 49 66 50 6f 73 20 50 31 20 50  code: IfPos P1 P
32200 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
32210 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30  psis: if r[P1]>0
32220 20 74 68 65 6e 20 72 5b 50 31 5d 2d 3d 50 33 2c   then r[P1]-=P3,
32230 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52   goto P2.**.** R
32240 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20  egister P1 must 
32250 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
32260 65 72 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  er..** If the va
32270 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
32280 50 31 20 69 73 20 31 20 6f 72 20 67 72 65 61 74  P1 is 1 or great
32290 65 72 2c 20 73 75 62 74 72 61 63 74 20 50 33 20  er, subtract P3 
322a0 66 72 6f 6d 20 74 68 65 0a 2a 2a 20 76 61 6c 75  from the.** valu
322b0 65 20 69 6e 20 50 31 20 61 6e 64 20 6a 75 6d 70  e in P1 and jump
322c0 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66   to P2..**.** If
322d0 20 74 68 65 20 69 6e 69 74 69 61 6c 20 76 61 6c   the initial val
322e0 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
322f0 31 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 31  1 is less than 1
32300 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61  , then the.** va
32310 6c 75 65 20 69 73 20 75 6e 63 68 61 6e 67 65 64  lue is unchanged
32320 20 61 6e 64 20 63 6f 6e 74 72 6f 6c 20 70 61 73   and control pas
32330 73 65 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74  ses through to t
32340 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
32350 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
32360 49 66 50 6f 73 3a 20 7b 20 20 20 20 20 20 20 20  IfPos: {        
32370 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
32380 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
32390 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
323a0 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d  t( pIn1->flags&M
323b0 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62 65  EM_Int );.  Vdbe
323c0 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 70 49 6e  BranchTaken( pIn
323d0 31 2d 3e 75 2e 69 3e 30 2c 20 32 29 3b 0a 20 20  1->u.i>0, 2);.  
323e0 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20  if( pIn1->u.i>0 
323f0 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69  ){.    pIn1->u.i
32400 20 2d 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20   -= pOp->p3;.   
32410 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
32420 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
32430 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 66 66  ../* Opcode: Off
32440 73 65 74 4c 69 6d 69 74 20 50 31 20 50 32 20 50  setLimit P1 P2 P
32450 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
32460 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20 74 68  s: if r[P1]>0 th
32470 65 6e 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 2b 6d  en r[P2]=r[P1]+m
32480 61 78 28 30 2c 72 5b 50 33 5d 29 20 65 6c 73 65  ax(0,r[P3]) else
32490 20 72 5b 50 32 5d 3d 28 2d 31 29 0a 2a 2a 0a 2a   r[P2]=(-1).**.*
324a0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 70 65  * This opcode pe
324b0 72 66 6f 72 6d 73 20 61 20 63 6f 6d 6d 6f 6e 6c  rforms a commonl
324c0 79 20 75 73 65 64 20 63 6f 6d 70 75 74 61 74 69  y used computati
324d0 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  on associated wi
324e0 74 68 0a 2a 2a 20 4c 49 4d 49 54 20 61 6e 64 20  th.** LIMIT and 
324f0 4f 46 46 53 45 54 20 70 72 6f 63 65 73 73 2e 20  OFFSET process. 
32500 20 72 5b 50 31 5d 20 68 6f 6c 64 73 20 74 68 65   r[P1] holds the
32510 20 6c 69 6d 69 74 20 63 6f 75 6e 74 65 72 2e 20   limit counter. 
32520 20 72 5b 50 33 5d 0a 2a 2a 20 68 6f 6c 64 73 20   r[P3].** holds 
32530 74 68 65 20 6f 66 66 73 65 74 20 63 6f 75 6e 74  the offset count
32540 65 72 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 20  er.  The opcode 
32550 63 6f 6d 70 75 74 65 73 20 74 68 65 20 63 6f 6d  computes the com
32560 62 69 6e 65 64 20 76 61 6c 75 65 0a 2a 2a 20 6f  bined value.** o
32570 66 20 74 68 65 20 4c 49 4d 49 54 20 61 6e 64 20  f the LIMIT and 
32580 4f 46 46 53 45 54 20 61 6e 64 20 73 74 6f 72 65  OFFSET and store
32590 73 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 20  s that value in 
325a0 72 5b 50 32 5d 2e 20 20 54 68 65 20 72 5b 50 32  r[P2].  The r[P2
325b0 5d 0a 2a 2a 20 76 61 6c 75 65 20 63 6f 6d 70 75  ].** value compu
325c0 74 65 64 20 69 73 20 74 68 65 20 74 6f 74 61 6c  ted is the total
325d0 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
325e0 74 68 61 74 20 77 69 6c 6c 20 6e 65 65 64 20 74  that will need t
325f0 6f 20 62 65 0a 2a 2a 20 76 69 73 69 74 65 64 20  o be.** visited 
32600 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 6f 6d 70  in order to comp
32610 6c 65 74 65 20 74 68 65 20 71 75 65 72 79 2e 0a  lete the query..
32620 2a 2a 0a 2a 2a 20 49 66 20 72 5b 50 33 5d 20 69  **.** If r[P3] i
32630 73 20 7a 65 72 6f 20 6f 72 20 6e 65 67 61 74 69  s zero or negati
32640 76 65 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  ve, that means t
32650 68 65 72 65 20 69 73 20 6e 6f 20 4f 46 46 53 45  here is no OFFSE
32660 54 0a 2a 2a 20 61 6e 64 20 72 5b 50 32 5d 20 69  T.** and r[P2] i
32670 73 20 73 65 74 20 74 6f 20 62 65 20 74 68 65 20  s set to be the 
32680 76 61 6c 75 65 20 6f 66 20 74 68 65 20 4c 49 4d  value of the LIM
32690 49 54 2c 20 72 5b 50 31 5d 2e 0a 2a 2a 0a 2a 2a  IT, r[P1]..**.**
326a0 20 69 66 20 72 5b 50 31 5d 20 69 73 20 7a 65 72   if r[P1] is zer
326b0 6f 20 6f 72 20 6e 65 67 61 74 69 76 65 2c 20 74  o or negative, t
326c0 68 61 74 20 6d 65 61 6e 73 20 74 68 65 72 65 20  hat means there 
326d0 69 73 20 6e 6f 20 4c 49 4d 49 54 0a 2a 2a 20 61  is no LIMIT.** a
326e0 6e 64 20 72 5b 50 32 5d 20 69 73 20 73 65 74 20  nd r[P2] is set 
326f0 74 6f 20 2d 31 2e 20 0a 2a 2a 0a 2a 2a 20 4f 74  to -1. .**.** Ot
32700 68 65 72 77 69 73 65 2c 20 72 5b 50 32 5d 20 69  herwise, r[P2] i
32710 73 20 73 65 74 20 74 6f 20 74 68 65 20 73 75 6d  s set to the sum
32720 20 6f 66 20 72 5b 50 31 5d 20 61 6e 64 20 72 5b   of r[P1] and r[
32730 50 33 5d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  P3]..*/.case OP_
32740 4f 66 66 73 65 74 4c 69 6d 69 74 3a 20 7b 20 20  OffsetLimit: {  
32750 20 20 2f 2a 20 69 6e 31 2c 20 6f 75 74 32 2c 20    /* in1, out2, 
32760 69 6e 33 20 2a 2f 0a 20 20 69 36 34 20 78 3b 0a  in3 */.  i64 x;.
32770 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
32780 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20  Op->p1];.  pIn3 
32790 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
327a0 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
327b0 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
327c0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  );.  assert( pIn
327d0 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
327e0 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  nt );.  assert( 
327f0 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
32800 4d 5f 49 6e 74 20 29 3b 0a 20 20 78 20 3d 20 70  M_Int );.  x = p
32810 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 69 66 28 20  In1->u.i;.  if( 
32820 78 3c 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33 41  x<=0 || sqlite3A
32830 64 64 49 6e 74 36 34 28 26 78 2c 20 70 49 6e 33  ddInt64(&x, pIn3
32840 2d 3e 75 2e 69 3e 30 3f 70 49 6e 33 2d 3e 75 2e  ->u.i>0?pIn3->u.
32850 69 3a 30 29 20 29 7b 0a 20 20 20 20 2f 2a 20 49  i:0) ){.    /* I
32860 66 20 74 68 65 20 4c 49 4d 49 54 20 69 73 20 6c  f the LIMIT is l
32870 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
32880 6c 20 74 6f 20 7a 65 72 6f 2c 20 6c 6f 6f 70 20  l to zero, loop 
32890 66 6f 72 65 76 65 72 2e 20 20 54 68 69 73 0a 20  forever.  This. 
328a0 20 20 20 2a 2a 20 69 73 20 64 6f 63 75 6d 65 6e     ** is documen
328b0 74 65 64 2e 20 20 42 75 74 20 61 6c 73 6f 2c 20  ted.  But also, 
328c0 69 66 20 74 68 65 20 4c 49 4d 49 54 2b 4f 46 46  if the LIMIT+OFF
328d0 53 45 54 20 65 78 63 65 65 64 73 20 32 5e 36 33  SET exceeds 2^63
328e0 20 74 68 65 6e 0a 20 20 20 20 2a 2a 20 61 6c 73   then.    ** als
328f0 6f 20 6c 6f 6f 70 20 66 6f 72 65 76 65 72 2e 20  o loop forever. 
32900 20 54 68 69 73 20 69 73 20 75 6e 64 6f 63 75 6d   This is undocum
32910 65 6e 74 65 64 2e 20 20 49 6e 20 66 61 63 74 2c  ented.  In fact,
32920 20 6f 6e 65 20 63 6f 75 6c 64 20 61 72 67 75 65   one could argue
32930 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65  .    ** that the
32940 20 6c 6f 6f 70 20 73 68 6f 75 6c 64 20 74 65 72   loop should ter
32950 6d 69 6e 61 74 65 2e 20 20 42 75 74 20 61 73 73  minate.  But ass
32960 75 6d 69 6e 67 20 31 20 62 69 6c 6c 69 6f 6e 20  uming 1 billion 
32970 69 74 65 72 61 74 69 6f 6e 73 0a 20 20 20 20 2a  iterations.    *
32980 2a 20 70 65 72 20 73 65 63 6f 6e 64 20 28 66 61  * per second (fa
32990 72 20 65 78 63 65 65 64 69 6e 67 20 74 68 65 20  r exceeding the 
329a0 63 61 70 61 62 69 6c 69 74 69 65 73 20 6f 66 20  capabilities of 
329b0 61 6e 79 20 63 75 72 72 65 6e 74 20 68 61 72 64  any current hard
329c0 77 61 72 65 29 0a 20 20 20 20 2a 2a 20 69 74 20  ware).    ** it 
329d0 77 6f 75 6c 64 20 74 61 6b 65 20 6e 65 61 72 6c  would take nearl
329e0 79 20 33 30 30 20 79 65 61 72 73 20 74 6f 20 61  y 300 years to a
329f0 63 74 75 61 6c 6c 79 20 72 65 61 63 68 20 74 68  ctually reach th
32a00 65 20 6c 69 6d 69 74 2e 20 20 53 6f 0a 20 20 20  e limit.  So.   
32a10 20 2a 2a 20 6c 6f 6f 70 69 6e 67 20 66 6f 72 65   ** looping fore
32a20 76 65 72 20 69 73 20 61 20 72 65 61 73 6f 6e 61  ver is a reasona
32a30 62 6c 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f  ble approximatio
32a40 6e 2e 20 2a 2f 0a 20 20 20 20 70 4f 75 74 2d 3e  n. */.    pOut->
32a50 75 2e 69 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c 73  u.i = -1;.  }els
32a60 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  e{.    pOut->u.i
32a70 20 3d 20 78 3b 0a 20 20 7d 0a 20 20 62 72 65 61   = x;.  }.  brea
32a80 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
32a90 20 49 66 4e 6f 74 5a 65 72 6f 20 50 31 20 50 32   IfNotZero P1 P2
32aa0 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
32ab0 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 30 20  is: if r[P1]!=0 
32ac0 74 68 65 6e 20 72 5b 50 31 5d 2d 2d 2c 20 67 6f  then r[P1]--, go
32ad0 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69  to P2.**.** Regi
32ae0 73 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e  ster P1 must con
32af0 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e  tain an integer.
32b00 20 20 49 66 20 74 68 65 20 63 6f 6e 74 65 6e 74    If the content
32b10 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
32b20 69 73 0a 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20  is.** initially 
32b30 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72  greater than zer
32b40 6f 2c 20 74 68 65 6e 20 64 65 63 72 65 6d 65 6e  o, then decremen
32b50 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  t the value in r
32b60 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 49  egister P1..** I
32b70 66 20 69 74 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f it is non-zero
32b80 20 28 6e 65 67 61 74 69 76 65 20 6f 72 20 70 6f   (negative or po
32b90 73 69 74 69 76 65 29 20 61 6e 64 20 74 68 65 6e  sitive) and then
32ba0 20 61 6c 73 6f 20 6a 75 6d 70 20 74 6f 20 50 32   also jump to P2
32bb0 2e 20 20 0a 2a 2a 20 49 66 20 72 65 67 69 73 74  .  .** If regist
32bc0 65 72 20 50 31 20 69 73 20 69 6e 69 74 69 61 6c  er P1 is initial
32bd0 6c 79 20 7a 65 72 6f 2c 20 6c 65 61 76 65 20 69  ly zero, leave i
32be0 74 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20  t unchanged and 
32bf0 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e 0a 2a 2f  fall through..*/
32c00 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 5a 65  .case OP_IfNotZe
32c10 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  ro: {        /* 
32c20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  jump, in1 */.  p
32c30 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
32c40 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
32c50 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
32c60 49 6e 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61  Int );.  VdbeBra
32c70 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75  nchTaken(pIn1->u
32c80 2e 69 3c 30 2c 20 32 29 3b 0a 20 20 69 66 28 20  .i<0, 2);.  if( 
32c90 70 49 6e 31 2d 3e 75 2e 69 20 29 7b 0a 20 20 20  pIn1->u.i ){.   
32ca0 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e    if( pIn1->u.i>
32cb0 30 20 29 20 70 49 6e 31 2d 3e 75 2e 69 2d 2d 3b  0 ) pIn1->u.i--;
32cc0 0a 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f  .     goto jump_
32cd0 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
32ce0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
32cf0 3a 20 44 65 63 72 4a 75 6d 70 5a 65 72 6f 20 50  : DecrJumpZero P
32d00 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
32d10 6e 6f 70 73 69 73 3a 20 69 66 20 28 2d 2d 72 5b  nopsis: if (--r[
32d20 50 31 5d 29 3d 3d 30 20 67 6f 74 6f 20 50 32 0a  P1])==0 goto P2.
32d30 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  **.** Register P
32d40 31 20 6d 75 73 74 20 68 6f 6c 64 20 61 6e 20 69  1 must hold an i
32d50 6e 74 65 67 65 72 2e 20 20 44 65 63 72 65 6d 65  nteger.  Decreme
32d60 6e 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  nt the value in 
32d70 50 31 0a 2a 2a 20 61 6e 64 20 6a 75 6d 70 20 74  P1.** and jump t
32d80 6f 20 50 32 20 69 66 20 74 68 65 20 6e 65 77 20  o P2 if the new 
32d90 76 61 6c 75 65 20 69 73 20 65 78 61 63 74 6c 79  value is exactly
32da0 20 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f   zero..*/.case O
32db0 50 5f 44 65 63 72 4a 75 6d 70 5a 65 72 6f 3a 20  P_DecrJumpZero: 
32dc0 7b 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20  {      /* jump, 
32dd0 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
32de0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
32df0 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
32e00 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b  flags&MEM_Int );
32e10 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
32e20 3e 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20  >SMALLEST_INT64 
32e30 29 20 70 49 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a 20  ) pIn1->u.i--;. 
32e40 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
32e50 28 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32  (pIn1->u.i==0, 2
32e60 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75  );.  if( pIn1->u
32e70 2e 69 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d  .i==0 ) goto jum
32e80 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b  p_to_p2;.  break
32e90 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ;.}.../* Opcode:
32ea0 20 41 67 67 53 74 65 70 30 20 2a 20 50 32 20 50   AggStep0 * P2 P
32eb0 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
32ec0 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d  sis: accum=r[P3]
32ed0 20 73 74 65 70 28 72 5b 50 32 40 50 35 5d 29 0a   step(r[P2@P5]).
32ee0 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68  **.** Execute th
32ef0 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20  e step function 
32f00 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65  for an aggregate
32f10 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69  .  The.** functi
32f20 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75 6d 65  on has P5 argume
32f30 6e 74 73 2e 20 20 20 50 34 20 69 73 20 61 20 70  nts.   P4 is a p
32f40 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75  ointer to the Fu
32f50 6e 63 44 65 66 0a 2a 2a 20 73 74 72 75 63 74 75  ncDef.** structu
32f60 72 65 20 74 68 61 74 20 73 70 65 63 69 66 69 65  re that specifie
32f70 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20  s the function. 
32f80 20 52 65 67 69 73 74 65 72 20 50 33 20 69 73 20   Register P3 is 
32f90 74 68 65 0a 2a 2a 20 61 63 63 75 6d 75 6c 61 74  the.** accumulat
32fa0 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35  or..**.** The P5
32fb0 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74   arguments are t
32fc0 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74  aken from regist
32fd0 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a  er P2 and its.**
32fe0 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a   successors..*/.
32ff0 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 53 74  /* Opcode: AggSt
33000 65 70 20 2a 20 50 32 20 50 33 20 50 34 20 50 35  ep * P2 P3 P4 P5
33010 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63  .** Synopsis: ac
33020 63 75 6d 3d 72 5b 50 33 5d 20 73 74 65 70 28 72  cum=r[P3] step(r
33030 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45  [P2@P5]).**.** E
33040 78 65 63 75 74 65 20 74 68 65 20 73 74 65 70 20  xecute the step 
33050 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20  function for an 
33060 61 67 67 72 65 67 61 74 65 2e 20 20 54 68 65 0a  aggregate.  The.
33070 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20  ** function has 
33080 50 35 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 20  P5 arguments.   
33090 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
330a0 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f  to an sqlite3_co
330b0 6e 74 65 78 74 0a 2a 2a 20 6f 62 6a 65 63 74 20  ntext.** object 
330c0 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20  that is used to 
330d0 72 75 6e 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  run the function
330e0 2e 20 20 52 65 67 69 73 74 65 72 20 50 33 20 69  .  Register P3 i
330f0 73 0a 2a 2a 20 61 73 20 74 68 65 20 61 63 63 75  s.** as the accu
33100 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54  mulator..**.** T
33110 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20  he P5 arguments 
33120 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72  are taken from r
33130 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 69  egister P2 and i
33140 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73  ts.** successors
33150 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
33160 6f 64 65 20 69 73 20 69 6e 69 74 69 61 6c 6c 79  ode is initially
33170 20 63 6f 64 65 64 20 61 73 20 4f 50 5f 41 67 67   coded as OP_Agg
33180 53 74 65 70 30 2e 20 20 4f 6e 20 66 69 72 73 74  Step0.  On first
33190 20 65 76 61 6c 75 61 74 69 6f 6e 2c 0a 2a 2a 20   evaluation,.** 
331a0 74 68 65 20 46 75 6e 63 44 65 66 20 73 74 6f 72  the FuncDef stor
331b0 65 64 20 69 6e 20 50 34 20 69 73 20 63 6f 6e 76  ed in P4 is conv
331c0 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 73 71  erted into an sq
331d0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 61 6e  lite3_context an
331e0 64 0a 2a 2a 20 74 68 65 20 6f 70 63 6f 64 65 20  d.** the opcode 
331f0 69 73 20 63 68 61 6e 67 65 64 2e 20 20 49 6e 20  is changed.  In 
33200 74 68 69 73 20 77 61 79 2c 20 74 68 65 20 69 6e  this way, the in
33210 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 20  itialization of 
33220 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63  the.** sqlite3_c
33230 6f 6e 74 65 78 74 20 6f 6e 6c 79 20 68 61 70 70  ontext only happ
33240 65 6e 73 20 6f 6e 63 65 2c 20 69 6e 73 74 65 61  ens once, instea
33250 64 20 6f 66 20 6f 6e 20 65 61 63 68 20 63 61 6c  d of on each cal
33260 6c 20 74 6f 20 74 68 65 0a 2a 2a 20 73 74 65 70  l to the.** step
33270 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61   function..*/.ca
33280 73 65 20 4f 50 5f 41 67 67 53 74 65 70 30 3a 20  se OP_AggStep0: 
33290 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 73 71 6c  {.  int n;.  sql
332a0 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43  ite3_context *pC
332b0 74 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  tx;..  assert( p
332c0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46  Op->p4type==P4_F
332d0 55 4e 43 44 45 46 20 29 3b 0a 20 20 6e 20 3d 20  UNCDEF );.  n = 
332e0 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72  pOp->p5;.  asser
332f0 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
33300 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
33310 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
33320 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  ) );.  assert( n
33330 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e  ==0 || (pOp->p2>
33340 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d  0 && pOp->p2+n<=
33350 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
33360 6e 43 75 72 73 6f 72 29 2b 31 29 20 29 3b 0a 20  nCursor)+1) );. 
33370 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
33380 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d  <pOp->p2 || pOp-
33390 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29  >p3>=pOp->p2+n )
333a0 3b 0a 20 20 70 43 74 78 20 3d 20 73 71 6c 69 74  ;.  pCtx = sqlit
333b0 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28  e3DbMallocRawNN(
333c0 64 62 2c 20 73 69 7a 65 6f 66 28 2a 70 43 74 78  db, sizeof(*pCtx
333d0 29 20 2b 20 28 6e 2d 31 29 2a 73 69 7a 65 6f 66  ) + (n-1)*sizeof
333e0 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29  (sqlite3_value*)
333f0 29 3b 0a 20 20 69 66 28 20 70 43 74 78 3d 3d 30  );.  if( pCtx==0
33400 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
33410 20 20 70 43 74 78 2d 3e 70 4d 65 6d 20 3d 20 30    pCtx->pMem = 0
33420 3b 0a 20 20 70 43 74 78 2d 3e 70 46 75 6e 63 20  ;.  pCtx->pFunc 
33430 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b  = pOp->p4.pFunc;
33440 0a 20 20 70 43 74 78 2d 3e 69 4f 70 20 3d 20 28  .  pCtx->iOp = (
33450 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b  int)(pOp - aOp);
33460 0a 20 20 70 43 74 78 2d 3e 70 56 64 62 65 20 3d  .  pCtx->pVdbe =
33470 20 70 3b 0a 20 20 70 43 74 78 2d 3e 61 72 67 63   p;.  pCtx->argc
33480 20 3d 20 6e 3b 0a 20 20 70 4f 70 2d 3e 70 34 74   = n;.  pOp->p4t
33490 79 70 65 20 3d 20 50 34 5f 46 55 4e 43 43 54 58  ype = P4_FUNCCTX
334a0 3b 0a 20 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78  ;.  pOp->p4.pCtx
334b0 20 3d 20 70 43 74 78 3b 0a 20 20 70 4f 70 2d 3e   = pCtx;.  pOp->
334c0 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 41 67 67 53  opcode = OP_AggS
334d0 74 65 70 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  tep;.  /* Fall t
334e0 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 41  hrough into OP_A
334f0 67 67 53 74 65 70 20 2a 2f 0a 7d 0a 63 61 73 65  ggStep */.}.case
33500 20 4f 50 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20   OP_AggStep: {. 
33510 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74 65   int i;.  sqlite
33520 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b  3_context *pCtx;
33530 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20  .  Mem *pMem;.  
33540 4d 65 6d 20 74 3b 0a 0a 20 20 61 73 73 65 72 74  Mem t;..  assert
33550 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
33560 34 5f 46 55 4e 43 43 54 58 20 29 3b 0a 20 20 70  4_FUNCCTX );.  p
33570 43 74 78 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 43  Ctx = pOp->p4.pC
33580 74 78 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d  tx;.  pMem = &aM
33590 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 0a 20 20  em[pOp->p3];..  
335a0 2f 2a 20 49 66 20 74 68 69 73 20 66 75 6e 63 74  /* If this funct
335b0 69 6f 6e 20 69 73 20 69 6e 73 69 64 65 20 6f 66  ion is inside of
335c0 20 61 20 74 72 69 67 67 65 72 2c 20 74 68 65 20   a trigger, the 
335d0 72 65 67 69 73 74 65 72 20 61 72 72 61 79 20 69  register array i
335e0 6e 20 61 4d 65 6d 5b 5d 0a 20 20 2a 2a 20 6d 69  n aMem[].  ** mi
335f0 67 68 74 20 63 68 61 6e 67 65 20 66 72 6f 6d 20  ght change from 
33600 6f 6e 65 20 65 76 61 6c 75 61 74 69 6f 6e 20 74  one evaluation t
33610 6f 20 74 68 65 20 6e 65 78 74 2e 20 20 54 68 65  o the next.  The
33620 20 6e 65 78 74 20 62 6c 6f 63 6b 20 6f 66 20 63   next block of c
33630 6f 64 65 0a 20 20 2a 2a 20 63 68 65 63 6b 73 20  ode.  ** checks 
33640 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 72 65  to see if the re
33650 67 69 73 74 65 72 20 61 72 72 61 79 20 68 61 73  gister array has
33660 20 63 68 61 6e 67 65 64 2c 20 61 6e 64 20 69 66   changed, and if
33670 20 73 6f 20 69 74 0a 20 20 2a 2a 20 72 65 69 6e   so it.  ** rein
33680 69 74 69 61 6c 69 7a 65 73 20 74 68 65 20 72 65  itializes the re
33690 6c 61 76 61 6e 74 20 70 61 72 74 73 20 6f 66 20  lavant parts of 
336a0 74 68 65 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  the sqlite3_cont
336b0 65 78 74 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20  ext object */.  
336c0 69 66 28 20 70 43 74 78 2d 3e 70 4d 65 6d 20 21  if( pCtx->pMem !
336d0 3d 20 70 4d 65 6d 20 29 7b 0a 20 20 20 20 70 43  = pMem ){.    pC
336e0 74 78 2d 3e 70 4d 65 6d 20 3d 20 70 4d 65 6d 3b  tx->pMem = pMem;
336f0 0a 20 20 20 20 66 6f 72 28 69 3d 70 43 74 78 2d  .    for(i=pCtx-
33700 3e 61 72 67 63 2d 31 3b 20 69 3e 3d 30 3b 20 69  >argc-1; i>=0; i
33710 2d 2d 29 20 70 43 74 78 2d 3e 61 72 67 76 5b 69  --) pCtx->argv[i
33720 5d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  ] = &aMem[pOp->p
33730 32 2b 69 5d 3b 0a 20 20 7d 0a 0a 23 69 66 64 65  2+i];.  }..#ifde
33740 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
33750 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 43 74 78   for(i=0; i<pCtx
33760 2d 3e 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20  ->argc; i++){.  
33770 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
33780 61 6c 69 64 28 70 43 74 78 2d 3e 61 72 67 76 5b  alid(pCtx->argv[
33790 69 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53  i]) );.    REGIS
337a0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
337b0 32 2b 69 2c 20 70 43 74 78 2d 3e 61 72 67 76 5b  2+i, pCtx->argv[
337c0 69 5d 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  i]);.  }.#endif.
337d0 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20  .  pMem->n++;.  
337e0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
337f0 69 74 28 26 74 2c 20 64 62 2c 20 4d 45 4d 5f 4e  it(&t, db, MEM_N
33800 75 6c 6c 29 3b 0a 20 20 70 43 74 78 2d 3e 70 4f  ull);.  pCtx->pO
33810 75 74 20 3d 20 26 74 3b 0a 20 20 70 43 74 78 2d  ut = &t;.  pCtx-
33820 3e 66 45 72 72 6f 72 4f 72 41 75 78 20 3d 20 30  >fErrorOrAux = 0
33830 3b 0a 20 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c  ;.  pCtx->skipFl
33840 61 67 20 3d 20 30 3b 0a 20 20 28 70 43 74 78 2d  ag = 0;.  (pCtx-
33850 3e 70 46 75 6e 63 2d 3e 78 53 46 75 6e 63 29 28  >pFunc->xSFunc)(
33860 70 43 74 78 2c 70 43 74 78 2d 3e 61 72 67 63 2c  pCtx,pCtx->argc,
33870 70 43 74 78 2d 3e 61 72 67 76 29 3b 20 2f 2a 20  pCtx->argv); /* 
33880 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32  IMP: R-24505-232
33890 33 30 20 2a 2f 0a 20 20 69 66 28 20 70 43 74 78  30 */.  if( pCtx
338a0 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78 20 29 7b  ->fErrorOrAux ){
338b0 0a 20 20 20 20 69 66 28 20 70 43 74 78 2d 3e 69  .    if( pCtx->i
338c0 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 20 20  sError ){.      
338d0 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
338e0 28 70 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65  (p, "%s", sqlite
338f0 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 74 29  3_value_text(&t)
33900 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 70 43  );.      rc = pC
33910 74 78 2d 3e 69 73 45 72 72 6f 72 3b 0a 20 20 20  tx->isError;.   
33920 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64   }.    sqlite3Vd
33930 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 74 29  beMemRelease(&t)
33940 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67  ;.    if( rc ) g
33950 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
33960 5f 65 72 72 6f 72 3b 0a 20 20 7d 65 6c 73 65 7b  _error;.  }else{
33970 0a 20 20 20 20 61 73 73 65 72 74 28 20 74 2e 66  .    assert( t.f
33980 6c 61 67 73 3d 3d 4d 45 4d 5f 4e 75 6c 6c 20 29  lags==MEM_Null )
33990 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 43 74 78  ;.  }.  if( pCtx
339a0 2d 3e 73 6b 69 70 46 6c 61 67 20 29 7b 0a 20 20  ->skipFlag ){.  
339b0 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31    assert( pOp[-1
339c0 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c  ].opcode==OP_Col
339d0 6c 53 65 71 20 29 3b 0a 20 20 20 20 69 20 3d 20  lSeq );.    i = 
339e0 70 4f 70 5b 2d 31 5d 2e 70 31 3b 0a 20 20 20 20  pOp[-1].p1;.    
339f0 69 66 28 20 69 20 29 20 73 71 6c 69 74 65 33 56  if( i ) sqlite3V
33a00 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26  dbeMemSetInt64(&
33a10 61 4d 65 6d 5b 69 5d 2c 20 31 29 3b 0a 20 20 7d  aMem[i], 1);.  }
33a20 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
33a30 4f 70 63 6f 64 65 3a 20 41 67 67 46 69 6e 61 6c  Opcode: AggFinal
33a40 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
33a50 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d   Synopsis: accum
33a60 3d 72 5b 50 31 5d 20 4e 3d 50 32 0a 2a 2a 0a 2a  =r[P1] N=P2.**.*
33a70 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 66 69  * Execute the fi
33a80 6e 61 6c 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e  nalizer function
33a90 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74   for an aggregat
33aa0 65 2e 20 20 50 31 20 69 73 0a 2a 2a 20 74 68 65  e.  P1 is.** the
33ab0 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   memory location
33ac0 20 74 68 61 74 20 69 73 20 74 68 65 20 61 63 63   that is the acc
33ad0 75 6d 75 6c 61 74 6f 72 20 66 6f 72 20 74 68 65  umulator for the
33ae0 20 61 67 67 72 65 67 61 74 65 2e 0a 2a 2a 0a 2a   aggregate..**.*
33af0 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62  * P2 is the numb
33b00 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
33b10 74 68 61 74 20 74 68 65 20 73 74 65 70 20 66 75  that the step fu
33b20 6e 63 74 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64  nction takes and
33b30 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
33b40 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44  ter to the FuncD
33b50 65 66 20 66 6f 72 20 74 68 69 73 20 66 75 6e 63  ef for this func
33b60 74 69 6f 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a  tion.  The P2.**
33b70 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74   argument is not
33b80 20 75 73 65 64 20 62 79 20 74 68 69 73 20 6f 70   used by this op
33b90 63 6f 64 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c  code.  It is onl
33ba0 79 20 74 68 65 72 65 20 74 6f 20 64 69 73 61 6d  y there to disam
33bb0 62 69 67 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74  biguate.** funct
33bc0 69 6f 6e 73 20 74 68 61 74 20 63 61 6e 20 74 61  ions that can ta
33bd0 6b 65 20 76 61 72 79 69 6e 67 20 6e 75 6d 62 65  ke varying numbe
33be0 72 73 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e  rs of arguments.
33bf0 20 20 54 68 65 0a 2a 2a 20 50 34 20 61 72 67 75    The.** P4 argu
33c00 6d 65 6e 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65  ment is only nee
33c10 64 65 64 20 66 6f 72 20 74 68 65 20 64 65 67 65  ded for the dege
33c20 6e 65 72 61 74 65 20 63 61 73 65 20 77 68 65 72  nerate case wher
33c30 65 0a 2a 2a 20 74 68 65 20 73 74 65 70 20 66 75  e.** the step fu
33c40 6e 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20 70  nction was not p
33c50 72 65 76 69 6f 75 73 6c 79 20 63 61 6c 6c 65 64  reviously called
33c60 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67  ..*/.case OP_Agg
33c70 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a  Final: {.  Mem *
33c80 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20  pMem;.  assert( 
33c90 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
33ca0 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p1<=(p->nMem+1
33cb0 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
33cc0 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d  ;.  pMem = &aMem
33cd0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
33ce0 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67  ert( (pMem->flag
33cf0 73 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d  s & ~(MEM_Null|M
33d00 45 4d 5f 41 67 67 29 29 3d 3d 30 20 29 3b 0a 20  EM_Agg))==0 );. 
33d10 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
33d20 65 4d 65 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65  eMemFinalize(pMe
33d30 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63  m, pOp->p4.pFunc
33d40 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20  );.  if( rc ){. 
33d50 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
33d60 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71 6c  ror(p, "%s", sql
33d70 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
33d80 70 4d 65 6d 29 29 3b 0a 20 20 20 20 67 6f 74 6f  pMem));.    goto
33d90 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
33da0 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  ror;.  }.  sqlit
33db0 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
33dc0 64 69 6e 67 28 70 4d 65 6d 2c 20 65 6e 63 6f 64  ding(pMem, encod
33dd0 69 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  ing);.  UPDATE_M
33de0 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4d 65 6d  AX_BLOBSIZE(pMem
33df0 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
33e00 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4d  VdbeMemTooBig(pM
33e10 65 6d 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  em) ){.    goto 
33e20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62  too_big;.  }.  b
33e30 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  reak;.}..#ifndef
33e40 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
33e50 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 68 65 63  ./* Opcode: Chec
33e60 6b 70 6f 69 6e 74 20 50 31 20 50 32 20 50 33 20  kpoint P1 P2 P3 
33e70 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 70  * *.**.** Checkp
33e80 6f 69 6e 74 20 64 61 74 61 62 61 73 65 20 50 31  oint database P1
33e90 2e 20 54 68 69 73 20 69 73 20 61 20 6e 6f 2d 6f  . This is a no-o
33ea0 70 20 69 66 20 50 31 20 69 73 20 6e 6f 74 20 63  p if P1 is not c
33eb0 75 72 72 65 6e 74 6c 79 20 69 6e 0a 2a 2a 20 57  urrently in.** W
33ec0 41 4c 20 6d 6f 64 65 2e 20 50 61 72 61 6d 65 74  AL mode. Paramet
33ed0 65 72 20 50 32 20 69 73 20 6f 6e 65 20 6f 66 20  er P2 is one of 
33ee0 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
33ef0 54 5f 50 41 53 53 49 56 45 2c 20 46 55 4c 4c 2c  T_PASSIVE, FULL,
33f00 0a 2a 2a 20 52 45 53 54 41 52 54 2c 20 6f 72 20  .** RESTART, or 
33f10 54 52 55 4e 43 41 54 45 2e 20 20 57 72 69 74 65  TRUNCATE.  Write
33f20 20 31 20 6f 72 20 30 20 69 6e 74 6f 20 6d 65 6d   1 or 0 into mem
33f30 5b 50 33 5d 20 69 66 20 74 68 65 20 63 68 65 63  [P3] if the chec
33f40 6b 70 6f 69 6e 74 20 72 65 74 75 72 6e 73 0a 2a  kpoint returns.*
33f50 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20 6f 72  * SQLITE_BUSY or
33f60 20 6e 6f 74 2c 20 72 65 73 70 65 63 74 69 76 65   not, respective
33f70 6c 79 2e 20 20 57 72 69 74 65 20 74 68 65 20 6e  ly.  Write the n
33f80 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
33f90 6e 20 74 68 65 0a 2a 2a 20 57 41 4c 20 61 66 74  n the.** WAL aft
33fa0 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f 69 6e  er the checkpoin
33fb0 74 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 31 5d  t into mem[P3+1]
33fc0 20 61 6e 64 20 74 68 65 20 6e 75 6d 62 65 72 20   and the number 
33fd0 6f 66 20 70 61 67 65 73 0a 2a 2a 20 69 6e 20 74  of pages.** in t
33fe0 68 65 20 57 41 4c 20 74 68 61 74 20 68 61 76 65  he WAL that have
33ff0 20 62 65 65 6e 20 63 68 65 63 6b 70 6f 69 6e 74   been checkpoint
34000 65 64 20 61 66 74 65 72 20 74 68 65 20 63 68 65  ed after the che
34010 63 6b 70 6f 69 6e 74 0a 2a 2a 20 63 6f 6d 70 6c  ckpoint.** compl
34020 65 74 65 73 20 69 6e 74 6f 20 6d 65 6d 5b 50 33  etes into mem[P3
34030 2b 32 5d 2e 20 20 48 6f 77 65 76 65 72 20 6f 6e  +2].  However on
34040 20 61 6e 20 65 72 72 6f 72 2c 20 6d 65 6d 5b 50   an error, mem[P
34050 33 2b 31 5d 20 61 6e 64 0a 2a 2a 20 6d 65 6d 5b  3+1] and.** mem[
34060 50 33 2b 32 5d 20 61 72 65 20 69 6e 69 74 69 61  P3+2] are initia
34070 6c 69 7a 65 64 20 74 6f 20 2d 31 2e 0a 2a 2f 0a  lized to -1..*/.
34080 63 61 73 65 20 4f 50 5f 43 68 65 63 6b 70 6f 69  case OP_Checkpoi
34090 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 20 20  nt: {.  int i;  
340a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
340b0 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
340c0 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74  counter */.  int
340d0 20 61 52 65 73 5b 33 5d 3b 20 20 20 20 20 20 20   aRes[3];       
340e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
340f0 52 65 73 75 6c 74 73 20 2a 2f 0a 20 20 4d 65 6d  Results */.  Mem
34100 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *pMem;         
34110 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
34120 57 72 69 74 65 20 72 65 73 75 6c 74 73 20 68 65  Write results he
34130 72 65 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28  re */..  assert(
34140 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
34150 29 3b 0a 20 20 61 52 65 73 5b 30 5d 20 3d 20 30  );.  aRes[0] = 0
34160 3b 0a 20 20 61 52 65 73 5b 31 5d 20 3d 20 61 52  ;.  aRes[1] = aR
34170 65 73 5b 32 5d 20 3d 20 2d 31 3b 0a 20 20 61 73  es[2] = -1;.  as
34180 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 53  sert( pOp->p2==S
34190 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
341a0 5f 50 41 53 53 49 56 45 0a 20 20 20 20 20 20 20  _PASSIVE.       
341b0 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  || pOp->p2==SQLI
341c0 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 46 55  TE_CHECKPOINT_FU
341d0 4c 4c 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70  LL.       || pOp
341e0 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45  ->p2==SQLITE_CHE
341f0 43 4b 50 4f 49 4e 54 5f 52 45 53 54 41 52 54 0a  CKPOINT_RESTART.
34200 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70         || pOp->p
34210 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  2==SQLITE_CHECKP
34220 4f 49 4e 54 5f 54 52 55 4e 43 41 54 45 0a 20 20  OINT_TRUNCATE.  
34230 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
34240 33 43 68 65 63 6b 70 6f 69 6e 74 28 64 62 2c 20  3Checkpoint(db, 
34250 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32  pOp->p1, pOp->p2
34260 2c 20 26 61 52 65 73 5b 31 5d 2c 20 26 61 52 65  , &aRes[1], &aRe
34270 73 5b 32 5d 29 3b 0a 20 20 69 66 28 20 72 63 20  s[2]);.  if( rc 
34280 29 7b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53  ){.    if( rc!=S
34290 51 4c 49 54 45 5f 42 55 53 59 20 29 20 67 6f 74  QLITE_BUSY ) got
342a0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
342b0 72 72 6f 72 3b 0a 20 20 20 20 72 63 20 3d 20 53  rror;.    rc = S
342c0 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 61 52  QLITE_OK;.    aR
342d0 65 73 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20  es[0] = 1;.  }. 
342e0 20 66 6f 72 28 69 3d 30 2c 20 70 4d 65 6d 20 3d   for(i=0, pMem =
342f0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
34300 20 69 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b   i<3; i++, pMem+
34310 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  +){.    sqlite3V
34320 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70  dbeMemSetInt64(p
34330 4d 65 6d 2c 20 28 69 36 34 29 61 52 65 73 5b 69  Mem, (i64)aRes[i
34340 5d 29 3b 0a 20 20 7d 20 20 20 20 0a 20 20 62 72  ]);.  }    .  br
34350 65 61 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69 66  eak;.};  .#endif
34360 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
34370 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 0a 2f 2a 20  _OMIT_PRAGMA./* 
34380 4f 70 63 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d  Opcode: JournalM
34390 6f 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ode P1 P2 P3 * *
343a0 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68  .**.** Change th
343b0 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f  e journal mode o
343c0 66 20 64 61 74 61 62 61 73 65 20 50 31 20 74 6f  f database P1 to
343d0 20 50 33 2e 20 50 33 20 6d 75 73 74 20 62 65 20   P3. P3 must be 
343e0 6f 6e 65 20 6f 66 20 74 68 65 0a 2a 2a 20 50 41  one of the.** PA
343f0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
34400 58 58 58 20 76 61 6c 75 65 73 2e 20 49 66 20 63  XXX values. If c
34410 68 61 6e 67 69 6e 67 20 62 65 74 77 65 65 6e 20  hanging between 
34420 74 68 65 20 76 61 72 69 6f 75 73 20 72 6f 6c 6c  the various roll
34430 62 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28 64  back.** modes (d
34440 65 6c 65 74 65 2c 20 74 72 75 6e 63 61 74 65 2c  elete, truncate,
34450 20 70 65 72 73 69 73 74 2c 20 6f 66 66 20 61 6e   persist, off an
34460 64 20 6d 65 6d 6f 72 79 29 2c 20 74 68 69 73 20  d memory), this 
34470 69 73 20 61 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f  is a simple.** o
34480 70 65 72 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20  peration. No IO 
34490 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a 0a  is required..**.
344a0 2a 2a 20 49 66 20 63 68 61 6e 67 69 6e 67 20 69  ** If changing i
344b0 6e 74 6f 20 6f 72 20 6f 75 74 20 6f 66 20 57 41  nto or out of WA
344c0 4c 20 6d 6f 64 65 20 74 68 65 20 70 72 6f 63 65  L mode the proce
344d0 64 75 72 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d  dure is more com
344e0 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  plicated..**.** 
344f0 57 72 69 74 65 20 61 20 73 74 72 69 6e 67 20 63  Write a string c
34500 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66 69  ontaining the fi
34510 6e 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65  nal journal-mode
34520 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e   to register P2.
34530 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f 75 72  .*/.case OP_Jour
34540 6e 61 6c 4d 6f 64 65 3a 20 7b 20 20 20 20 2f 2a  nalMode: {    /*
34550 20 6f 75 74 32 20 2a 2f 0a 20 20 42 74 72 65 65   out2 */.  Btree
34560 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20 20   *pBt;          
34570 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 74             /* Bt
34580 72 65 65 20 74 6f 20 63 68 61 6e 67 65 20 6a 6f  ree to change jo
34590 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f  urnal mode of */
345a0 0a 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72  .  Pager *pPager
345b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
345c0 20 20 20 2f 2a 20 50 61 67 65 72 20 61 73 73 6f     /* Pager asso
345d0 63 69 61 74 65 64 20 77 69 74 68 20 70 42 74 20  ciated with pBt 
345e0 2a 2f 0a 20 20 69 6e 74 20 65 4e 65 77 3b 20 20  */.  int eNew;  
345f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34600 20 20 20 20 20 2f 2a 20 4e 65 77 20 6a 6f 75 72       /* New jour
34610 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e  nal mode */.  in
34620 74 20 65 4f 6c 64 3b 20 20 20 20 20 20 20 20 20  t eOld;         
34630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
34640 20 54 68 65 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c   The old journal
34650 20 6d 6f 64 65 20 2a 2f 0a 23 69 66 6e 64 65 66   mode */.#ifndef
34660 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
34670 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
34680 46 69 6c 65 6e 61 6d 65 3b 20 20 20 20 20 20 20  Filename;       
34690 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61     /* Name of da
346a0 74 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72 20  tabase file for 
346b0 70 50 61 67 65 72 20 2a 2f 0a 23 65 6e 64 69 66  pPager */.#endif
346c0 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ..  pOut = out2P
346d0 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
346e0 29 3b 0a 20 20 65 4e 65 77 20 3d 20 70 4f 70 2d  );.  eNew = pOp-
346f0 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 65  >p3;.  assert( e
34700 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
34710 41 4c 4d 4f 44 45 5f 44 45 4c 45 54 45 20 0a 20  ALMODE_DELETE . 
34720 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50        || eNew==P
34730 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
34740 5f 54 52 55 4e 43 41 54 45 20 0a 20 20 20 20 20  _TRUNCATE .     
34750 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
34760 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52  _JOURNALMODE_PER
34770 53 49 53 54 20 0a 20 20 20 20 20 20 20 7c 7c 20  SIST .       || 
34780 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
34790 4e 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20 20 20 20  NALMODE_OFF.    
347a0 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
347b0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45  R_JOURNALMODE_ME
347c0 4d 4f 52 59 0a 20 20 20 20 20 20 20 7c 7c 20 65  MORY.       || e
347d0 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
347e0 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 20 20  ALMODE_WAL.     
347f0 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
34800 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45  _JOURNALMODE_QUE
34810 52 59 0a 20 20 29 3b 0a 20 20 61 73 73 65 72 74  RY.  );.  assert
34820 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
34830 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
34840 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
34850 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a  readOnly==0 );..
34860 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
34870 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20  pOp->p1].pBt;.  
34880 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33  pPager = sqlite3
34890 42 74 72 65 65 50 61 67 65 72 28 70 42 74 29 3b  BtreePager(pBt);
348a0 0a 20 20 65 4f 6c 64 20 3d 20 73 71 6c 69 74 65  .  eOld = sqlite
348b0 33 50 61 67 65 72 47 65 74 4a 6f 75 72 6e 61 6c  3PagerGetJournal
348c0 4d 6f 64 65 28 70 50 61 67 65 72 29 3b 0a 20 20  Mode(pPager);.  
348d0 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f  if( eNew==PAGER_
348e0 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52  JOURNALMODE_QUER
348f0 59 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b  Y ) eNew = eOld;
34900 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65 33 50  .  if( !sqlite3P
34910 61 67 65 72 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f  agerOkToChangeJo
34920 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72  urnalMode(pPager
34930 29 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b  ) ) eNew = eOld;
34940 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
34950 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 7a 46 69 6c  _OMIT_WAL.  zFil
34960 65 6e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 50  ename = sqlite3P
34970 61 67 65 72 46 69 6c 65 6e 61 6d 65 28 70 50 61  agerFilename(pPa
34980 67 65 72 2c 20 31 29 3b 0a 0a 20 20 2f 2a 20 44  ger, 1);..  /* D
34990 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 61 20 74 72  o not allow a tr
349a0 61 6e 73 69 74 69 6f 6e 20 74 6f 20 6a 6f 75 72  ansition to jour
349b0 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20 66 6f 72  nal_mode=WAL for
349c0 20 61 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a   a database.  **
349d0 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 73 74   in temporary st
349e0 6f 72 61 67 65 20 6f 72 20 69 66 20 74 68 65 20  orage or if the 
349f0 56 46 53 20 64 6f 65 73 20 6e 6f 74 20 73 75 70  VFS does not sup
34a00 70 6f 72 74 20 73 68 61 72 65 64 20 6d 65 6d 6f  port shared memo
34a10 72 79 20 0a 20 20 2a 2f 0a 20 20 69 66 28 20 65  ry .  */.  if( e
34a20 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
34a30 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 26 26  ALMODE_WAL.   &&
34a40 20 28 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33   (sqlite3Strlen3
34a50 30 28 7a 46 69 6c 65 6e 61 6d 65 29 3d 3d 30 20  0(zFilename)==0 
34a60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 6d            /* Tem
34a70 70 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20 20 20  p file */.      
34a80 20 7c 7c 20 21 73 71 6c 69 74 65 33 50 61 67 65   || !sqlite3Page
34a90 72 57 61 6c 53 75 70 70 6f 72 74 65 64 28 70 50  rWalSupported(pP
34aa0 61 67 65 72 29 29 20 20 20 2f 2a 20 4e 6f 20 73  ager))   /* No s
34ab0 68 61 72 65 64 2d 6d 65 6d 6f 72 79 20 73 75 70  hared-memory sup
34ac0 70 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a 20 20 20  port */.  ){.   
34ad0 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20   eNew = eOld;.  
34ae0 7d 0a 0a 20 20 69 66 28 20 28 65 4e 65 77 21 3d  }..  if( (eNew!=
34af0 65 4f 6c 64 29 0a 20 20 20 26 26 20 28 65 4f 6c  eOld).   && (eOl
34b00 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  d==PAGER_JOURNAL
34b10 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20 65 4e 65 77  MODE_WAL || eNew
34b20 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
34b30 4f 44 45 5f 57 41 4c 29 0a 20 20 29 7b 0a 20 20  ODE_WAL).  ){.  
34b40 20 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43    if( !db->autoC
34b50 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e 6e 56 64  ommit || db->nVd
34b60 62 65 52 65 61 64 3e 31 20 29 7b 0a 20 20 20 20  beRead>1 ){.    
34b70 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
34b80 52 4f 52 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ROR;.      sqlit
34b90 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 0a 20  e3VdbeError(p,. 
34ba0 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74           "cannot
34bb0 20 63 68 61 6e 67 65 20 25 73 20 77 61 6c 20 6d   change %s wal m
34bc0 6f 64 65 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  ode from within 
34bd0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 2c 0a  a transaction",.
34be0 20 20 20 20 20 20 20 20 20 20 28 65 4e 65 77 3d            (eNew=
34bf0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
34c00 44 45 5f 57 41 4c 20 3f 20 22 69 6e 74 6f 22 20  DE_WAL ? "into" 
34c10 3a 20 22 6f 75 74 20 6f 66 22 29 0a 20 20 20 20  : "out of").    
34c20 20 20 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20    );.      goto 
34c30 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
34c40 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  or;.    }else{. 
34c50 0a 20 20 20 20 20 20 69 66 28 20 65 4f 6c 64 3d  .      if( eOld=
34c60 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
34c70 44 45 5f 57 41 4c 20 29 7b 0a 20 20 20 20 20 20  DE_WAL ){.      
34c80 20 20 2f 2a 20 49 66 20 6c 65 61 76 69 6e 67 20    /* If leaving 
34c90 57 41 4c 20 6d 6f 64 65 2c 20 63 6c 6f 73 65 20  WAL mode, close 
34ca0 74 68 65 20 6c 6f 67 20 66 69 6c 65 2e 20 49 66  the log file. If
34cb0 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65   successful, the
34cc0 20 63 61 6c 6c 0a 20 20 20 20 20 20 20 20 2a 2a   call.        **
34cd0 20 74 6f 20 50 61 67 65 72 43 6c 6f 73 65 57 61   to PagerCloseWa
34ce0 6c 28 29 20 63 68 65 63 6b 70 6f 69 6e 74 73 20  l() checkpoints 
34cf0 61 6e 64 20 64 65 6c 65 74 65 73 20 74 68 65 20  and deletes the 
34d00 77 72 69 74 65 2d 61 68 65 61 64 2d 6c 6f 67 20  write-ahead-log 
34d10 0a 20 20 20 20 20 20 20 20 2a 2a 20 66 69 6c 65  .        ** file
34d20 2e 20 41 6e 20 45 58 43 4c 55 53 49 56 45 20 6c  . An EXCLUSIVE l
34d30 6f 63 6b 20 6d 61 79 20 73 74 69 6c 6c 20 62 65  ock may still be
34d40 20 68 65 6c 64 20 6f 6e 20 74 68 65 20 64 61 74   held on the dat
34d50 61 62 61 73 65 20 66 69 6c 65 20 0a 20 20 20 20  abase file .    
34d60 20 20 20 20 2a 2a 20 61 66 74 65 72 20 61 20 73      ** after a s
34d70 75 63 63 65 73 73 66 75 6c 20 72 65 74 75 72 6e  uccessful return
34d80 2e 20 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  . .        */.  
34d90 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
34da0 65 33 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28  e3PagerCloseWal(
34db0 70 50 61 67 65 72 2c 20 64 62 29 3b 0a 20 20 20  pPager, db);.   
34dc0 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
34dd0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
34de0 20 20 20 20 73 71 6c 69 74 65 33 50 61 67 65 72      sqlite3Pager
34df0 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  SetJournalMode(p
34e00 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 20 20  Pager, eNew);.  
34e10 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65        }.      }e
34e20 6c 73 65 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41  lse if( eOld==PA
34e30 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
34e40 4d 45 4d 4f 52 59 20 29 7b 0a 20 20 20 20 20 20  MEMORY ){.      
34e50 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 74 72 61 6e    /* Cannot tran
34e60 73 69 74 69 6f 6e 20 64 69 72 65 63 74 6c 79 20  sition directly 
34e70 66 72 6f 6d 20 4d 45 4d 4f 52 59 20 74 6f 20 57  from MEMORY to W
34e80 41 4c 2e 20 20 55 73 65 20 6d 6f 64 65 20 4f 46  AL.  Use mode OF
34e90 46 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 73 20  F.        ** as 
34ea0 61 6e 20 69 6e 74 65 72 6d 65 64 69 61 74 65 20  an intermediate 
34eb0 2a 2f 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  */.        sqlit
34ec0 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61  e3PagerSetJourna
34ed0 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 50 41  lMode(pPager, PA
34ee0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
34ef0 4f 46 46 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  OFF);.      }.  
34f00 0a 20 20 20 20 20 20 2f 2a 20 4f 70 65 6e 20 61  .      /* Open a
34f10 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20   transaction on 
34f20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
34f30 65 2e 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66  e. Regardless of
34f40 20 74 68 65 20 6a 6f 75 72 6e 61 6c 0a 20 20 20   the journal.   
34f50 20 20 20 2a 2a 20 6d 6f 64 65 2c 20 74 68 69 73     ** mode, this
34f60 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 77   transaction alw
34f70 61 79 73 20 75 73 65 73 20 61 20 72 6f 6c 6c 62  ays uses a rollb
34f80 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 20 20 20  ack journal..   
34f90 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65     */.      asse
34fa0 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
34fb0 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29 3d 3d  IsInTrans(pBt)==
34fc0 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  0 );.      if( r
34fd0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
34fe0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
34ff0 69 74 65 33 42 74 72 65 65 53 65 74 56 65 72 73  ite3BtreeSetVers
35000 69 6f 6e 28 70 42 74 2c 20 28 65 4e 65 77 3d 3d  ion(pBt, (eNew==
35010 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
35020 45 5f 57 41 4c 20 3f 20 32 20 3a 20 31 29 29 3b  E_WAL ? 2 : 1));
35030 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
35040 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 69 66 6e   }.#endif /* ifn
35050 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
35060 57 41 4c 20 2a 2f 0a 0a 20 20 69 66 28 20 72 63  WAL */..  if( rc
35070 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a   ) eNew = eOld;.
35080 20 20 65 4e 65 77 20 3d 20 73 71 6c 69 74 65 33    eNew = sqlite3
35090 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d  PagerSetJournalM
350a0 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77  ode(pPager, eNew
350b0 29 3b 0a 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  );..  pOut->flag
350c0 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f  s = MEM_Str|MEM_
350d0 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b  Static|MEM_Term;
350e0 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 28 63 68  .  pOut->z = (ch
350f0 61 72 20 2a 29 73 71 6c 69 74 65 33 4a 6f 75 72  ar *)sqlite3Jour
35100 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4e 65 77  nalModename(eNew
35110 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 73  );.  pOut->n = s
35120 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70  qlite3Strlen30(p
35130 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70 4f 75 74 2d  Out->z);.  pOut-
35140 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54  >enc = SQLITE_UT
35150 46 38 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  F8;.  sqlite3Vdb
35160 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
35170 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pOut, encoding);
35180 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
35190 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
351a0 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b  ror;.  break;.};
351b0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
351c0 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a 2f  E_OMIT_PRAGMA */
351d0 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
351e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55 55  QLITE_OMIT_VACUU
351f0 4d 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  M) && !defined(S
35200 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41 43  QLITE_OMIT_ATTAC
35210 48 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61  H)./* Opcode: Va
35220 63 75 75 6d 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  cuum P1 * * * *.
35230 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d 20 74 68 65  **.** Vacuum the
35240 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65   entire database
35250 20 50 31 2e 20 20 50 31 20 69 73 20 30 20 66 6f   P1.  P1 is 0 fo
35260 72 20 22 6d 61 69 6e 22 2c 20 61 6e 64 20 32 20  r "main", and 2 
35270 6f 72 20 6d 6f 72 65 0a 2a 2a 20 66 6f 72 20 61  or more.** for a
35280 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
35290 61 73 65 2e 20 20 54 68 65 20 22 74 65 6d 70 22  ase.  The "temp"
352a0 20 64 61 74 61 62 61 73 65 20 6d 61 79 20 6e 6f   database may no
352b0 74 20 62 65 20 76 61 63 75 75 6d 65 64 2e 0a 2a  t be vacuumed..*
352c0 2f 0a 63 61 73 65 20 4f 50 5f 56 61 63 75 75 6d  /.case OP_Vacuum
352d0 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 2d  : {.  assert( p-
352e0 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
352f0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 52 75    rc = sqlite3Ru
35300 6e 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72  nVacuum(&p->zErr
35310 4d 73 67 2c 20 64 62 2c 20 70 4f 70 2d 3e 70 31  Msg, db, pOp->p1
35320 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
35330 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
35340 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a  error;.  break;.
35350 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 21 64  }.#endif..#if !d
35360 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
35370 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29 0a 2f  IT_AUTOVACUUM)./
35380 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 63 72 56 61  * Opcode: IncrVa
35390 63 75 75 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a  cuum P1 P2 * * *
353a0 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d 20 61  .**.** Perform a
353b0 20 73 69 6e 67 6c 65 20 73 74 65 70 20 6f 66 20   single step of 
353c0 74 68 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20  the incremental 
353d0 76 61 63 75 75 6d 20 70 72 6f 63 65 64 75 72 65  vacuum procedure
353e0 20 6f 6e 0a 2a 2a 20 74 68 65 20 50 31 20 64 61   on.** the P1 da
353f0 74 61 62 61 73 65 2e 20 49 66 20 74 68 65 20 76  tabase. If the v
35400 61 63 75 75 6d 20 68 61 73 20 66 69 6e 69 73 68  acuum has finish
35410 65 64 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74  ed, jump to inst
35420 72 75 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20 4f  ruction.** P2. O
35430 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74  therwise, fall t
35440 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
35450 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
35460 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 63 72 56  */.case OP_IncrV
35470 61 63 75 75 6d 3a 20 7b 20 20 20 20 20 20 20 20  acuum: {        
35480 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 42 74 72  /* jump */.  Btr
35490 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65  ee *pBt;..  asse
354a0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
354b0 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
354c0 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44  b );.  assert( D
354d0 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
354e0 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29  eeMask, pOp->p1)
354f0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
35500 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
35510 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
35520 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20  pOp->p1].pBt;.  
35530 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
35540 65 49 6e 63 72 56 61 63 75 75 6d 28 70 42 74 29  eIncrVacuum(pBt)
35550 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
35560 6b 65 6e 28 72 63 3d 3d 53 51 4c 49 54 45 5f 44  ken(rc==SQLITE_D
35570 4f 4e 45 2c 32 29 3b 0a 20 20 69 66 28 20 72 63  ONE,2);.  if( rc
35580 20 29 7b 0a 20 20 20 20 69 66 28 20 72 63 21 3d   ){.    if( rc!=
35590 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 20 67 6f  SQLITE_DONE ) go
355a0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
355b0 65 72 72 6f 72 3b 0a 20 20 20 20 72 63 20 3d 20  error;.    rc = 
355c0 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 67  SQLITE_OK;.    g
355d0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
355e0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
355f0 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65  endif../* Opcode
35600 3a 20 45 78 70 69 72 65 20 50 31 20 2a 20 2a 20  : Expire P1 * * 
35610 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20  * *.**.** Cause 
35620 70 72 65 63 6f 6d 70 69 6c 65 64 20 73 74 61 74  precompiled stat
35630 65 6d 65 6e 74 73 20 74 6f 20 65 78 70 69 72 65  ements to expire
35640 2e 20 20 57 68 65 6e 20 61 6e 20 65 78 70 69 72  .  When an expir
35650 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20  ed statement.** 
35660 69 73 20 65 78 65 63 75 74 65 64 20 75 73 69 6e  is executed usin
35670 67 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  g sqlite3_step()
35680 20 69 74 20 77 69 6c 6c 20 65 69 74 68 65 72 20   it will either 
35690 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a  automatically.**
356a0 20 72 65 70 72 65 70 61 72 65 20 69 74 73 65 6c   reprepare itsel
356b0 66 20 28 69 66 20 69 74 20 77 61 73 20 6f 72 69  f (if it was ori
356c0 67 69 6e 61 6c 6c 79 20 63 72 65 61 74 65 64 20  ginally created 
356d0 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 70 72  using sqlite3_pr
356e0 65 70 61 72 65 5f 76 32 28 29 29 0a 2a 2a 20 6f  epare_v2()).** o
356f0 72 20 69 74 20 77 69 6c 6c 20 66 61 69 6c 20 77  r it will fail w
35700 69 74 68 20 53 51 4c 49 54 45 5f 53 43 48 45 4d  ith SQLITE_SCHEM
35710 41 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50 31 20  A..** .** If P1 
35720 69 73 20 30 2c 20 74 68 65 6e 20 61 6c 6c 20 53  is 0, then all S
35730 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 62 65  QL statements be
35740 63 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 49 66  come expired. If
35750 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c   P1 is non-zero,
35760 0a 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68  .** then only th
35770 65 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65 63  e currently exec
35780 75 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  uting statement 
35790 69 73 20 65 78 70 69 72 65 64 2e 0a 2a 2f 0a 63  is expired..*/.c
357a0 61 73 65 20 4f 50 5f 45 78 70 69 72 65 3a 20 7b  ase OP_Expire: {
357b0 0a 20 20 69 66 28 20 21 70 4f 70 2d 3e 70 31 20  .  if( !pOp->p1 
357c0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78  ){.    sqlite3Ex
357d0 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
357e0 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d 65  ements(db);.  }e
357f0 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 65 78 70 69  lse{.    p->expi
35800 72 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62  red = 1;.  }.  b
35810 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  reak;.}..#ifndef
35820 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
35830 52 45 44 5f 43 41 43 48 45 0a 2f 2a 20 4f 70 63  RED_CACHE./* Opc
35840 6f 64 65 3a 20 54 61 62 6c 65 4c 6f 63 6b 20 50  ode: TableLock P
35850 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
35860 53 79 6e 6f 70 73 69 73 3a 20 69 44 62 3d 50 31  Synopsis: iDb=P1
35870 20 72 6f 6f 74 3d 50 32 20 77 72 69 74 65 3d 50   root=P2 write=P
35880 33 0a 2a 2a 0a 2a 2a 20 4f 62 74 61 69 6e 20 61  3.**.** Obtain a
35890 20 6c 6f 63 6b 20 6f 6e 20 61 20 70 61 72 74 69   lock on a parti
358a0 63 75 6c 61 72 20 74 61 62 6c 65 2e 20 54 68 69  cular table. Thi
358b0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
358c0 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65 6e 0a   only used when.
358d0 2a 2a 20 74 68 65 20 73 68 61 72 65 64 2d 63 61  ** the shared-ca
358e0 63 68 65 20 66 65 61 74 75 72 65 20 69 73 20 65  che feature is e
358f0 6e 61 62 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 50  nabled. .**.** P
35900 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  1 is the index o
35910 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  f the database i
35920 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20  n sqlite3.aDb[] 
35930 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  of the database.
35940 2a 2a 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20  ** on which the 
35950 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65 64  lock is acquired
35960 2e 20 20 41 20 72 65 61 64 6c 6f 63 6b 20 69 73  .  A readlock is
35970 20 6f 62 74 61 69 6e 65 64 20 69 66 20 50 33 3d   obtained if P3=
35980 3d 30 20 6f 72 0a 2a 2a 20 61 20 77 72 69 74 65  =0 or.** a write
35990 20 6c 6f 63 6b 20 69 66 20 50 33 3d 3d 31 2e 0a   lock if P3==1..
359a0 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74 61 69 6e  **.** P2 contain
359b0 73 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  s the root-page 
359c0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
359d0 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63  lock..**.** P4 c
359e0 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e 74 65  ontains a pointe
359f0 72 20 74 6f 20 74 68 65 20 6e 61 6d 65 20 6f 66  r to the name of
35a00 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
35a10 20 6c 6f 63 6b 65 64 2e 20 54 68 69 73 20 69 73   locked. This is
35a20 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64 20 74 6f   only.** used to
35a30 20 67 65 6e 65 72 61 74 65 20 61 6e 20 65 72 72   generate an err
35a40 6f 72 20 6d 65 73 73 61 67 65 20 69 66 20 74 68  or message if th
35a50 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20 62 65  e lock cannot be
35a60 20 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61   obtained..*/.ca
35a70 73 65 20 4f 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a  se OP_TableLock:
35a80 20 7b 0a 20 20 75 38 20 69 73 57 72 69 74 65 4c   {.  u8 isWriteL
35a90 6f 63 6b 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70  ock = (u8)pOp->p
35aa0 33 3b 0a 20 20 69 66 28 20 69 73 57 72 69 74 65  3;.  if( isWrite
35ab0 4c 6f 63 6b 20 7c 7c 20 30 3d 3d 28 64 62 2d 3e  Lock || 0==(db->
35ac0 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 52 65 61  flags&SQLITE_Rea
35ad0 64 55 6e 63 6f 6d 6d 69 74 29 20 29 7b 0a 20 20  dUncommit) ){.  
35ae0 20 20 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e    int p1 = pOp->
35af0 70 31 3b 20 0a 20 20 20 20 61 73 73 65 72 74 28  p1; .    assert(
35b00 20 70 31 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d   p1>=0 && p1<db-
35b10 3e 6e 44 62 20 29 3b 0a 20 20 20 20 61 73 73 65  >nDb );.    asse
35b20 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
35b30 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 31 29  ->btreeMask, p1)
35b40 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
35b50 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 30 20 7c  isWriteLock==0 |
35b60 7c 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 31  | isWriteLock==1
35b70 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   );.    rc = sql
35b80 69 74 65 33 42 74 72 65 65 4c 6f 63 6b 54 61 62  ite3BtreeLockTab
35b90 6c 65 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e 70  le(db->aDb[p1].p
35ba0 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 69 73 57  Bt, pOp->p2, isW
35bb0 72 69 74 65 4c 6f 63 6b 29 3b 0a 20 20 20 20 69  riteLock);.    i
35bc0 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 69  f( rc ){.      i
35bd0 66 28 20 28 72 63 26 30 78 46 46 29 3d 3d 53 51  f( (rc&0xFF)==SQ
35be0 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20  LITE_LOCKED ){. 
35bf0 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
35c00 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  r *z = pOp->p4.z
35c10 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
35c20 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 64  3VdbeError(p, "d
35c30 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 69 73  atabase table is
35c40 20 6c 6f 63 6b 65 64 3a 20 25 73 22 2c 20 7a 29   locked: %s", z)
35c50 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
35c60 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
35c70 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  o_error;.    }. 
35c80 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
35c90 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
35ca0 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
35cb0 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
35cc0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
35cd0 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
35ce0 20 56 42 65 67 69 6e 20 2a 20 2a 20 2a 20 50 34   VBegin * * * P4
35cf0 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20   *.**.** P4 may 
35d00 62 65 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  be a pointer to 
35d10 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
35d20 73 74 72 75 63 74 75 72 65 2e 20 49 66 20 73 6f  structure. If so
35d30 2c 20 63 61 6c 6c 20 74 68 65 20 0a 2a 2a 20 78  , call the .** x
35d40 42 65 67 69 6e 20 6d 65 74 68 6f 64 20 66 6f 72  Begin method for
35d50 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a   that table..**.
35d60 2a 2a 20 41 6c 73 6f 2c 20 77 68 65 74 68 65 72  ** Also, whether
35d70 20 6f 72 20 6e 6f 74 20 50 34 20 69 73 20 73 65   or not P4 is se
35d80 74 2c 20 63 68 65 63 6b 20 74 68 61 74 20 74 68  t, check that th
35d90 69 73 20 69 73 20 6e 6f 74 20 62 65 69 6e 67 20  is is not being 
35da0 63 61 6c 6c 65 64 20 66 72 6f 6d 0a 2a 2a 20 77  called from.** w
35db0 69 74 68 69 6e 20 61 20 63 61 6c 6c 62 61 63 6b  ithin a callback
35dc0 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61   to a virtual ta
35dd0 62 6c 65 20 78 53 79 6e 63 28 29 20 6d 65 74 68  ble xSync() meth
35de0 6f 64 2e 20 49 66 20 69 74 20 69 73 2c 20 74 68  od. If it is, th
35df0 65 20 65 72 72 6f 72 0a 2a 2a 20 63 6f 64 65 20  e error.** code 
35e00 77 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 53  will be set to S
35e10 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f  QLITE_LOCKED..*/
35e20 0a 63 61 73 65 20 4f 50 5f 56 42 65 67 69 6e 3a  .case OP_VBegin:
35e30 20 7b 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54   {.  VTable *pVT
35e40 61 62 3b 0a 20 20 70 56 54 61 62 20 3d 20 70 4f  ab;.  pVTab = pO
35e50 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20 72  p->p4.pVtab;.  r
35e60 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 42  c = sqlite3VtabB
35e70 65 67 69 6e 28 64 62 2c 20 70 56 54 61 62 29 3b  egin(db, pVTab);
35e80 0a 20 20 69 66 28 20 70 56 54 61 62 20 29 20 73  .  if( pVTab ) s
35e90 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
35ea0 45 72 72 6d 73 67 28 70 2c 20 70 56 54 61 62 2d  Errmsg(p, pVTab-
35eb0 3e 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72  >pVtab);.  if( r
35ec0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
35ed0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62  ue_to_error;.  b
35ee0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
35ef0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
35f00 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
35f10 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
35f20 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
35f30 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 72 65 61  /* Opcode: VCrea
35f40 74 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  te P1 P2 * * *.*
35f50 2a 0a 2a 2a 20 50 32 20 69 73 20 61 20 72 65 67  *.** P2 is a reg
35f60 69 73 74 65 72 20 74 68 61 74 20 68 6f 6c 64 73  ister that holds
35f70 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76   the name of a v
35f80 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20  irtual table in 
35f90 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 50 31 2e  database .** P1.
35fa0 20 43 61 6c 6c 20 74 68 65 20 78 43 72 65 61 74   Call the xCreat
35fb0 65 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 61  e method for tha
35fc0 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65  t table..*/.case
35fd0 20 4f 50 5f 56 43 72 65 61 74 65 3a 20 7b 0a 20   OP_VCreate: {. 
35fe0 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20   Mem sMem;      
35ff0 20 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69      /* For stori
36000 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 62 65  ng the record be
36010 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20  ing decoded */. 
36020 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61   const char *zTa
36030 62 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74  b;  /* Name of t
36040 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
36050 20 2a 2f 0a 0a 20 20 6d 65 6d 73 65 74 28 26 73   */..  memset(&s
36060 4d 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73  Mem, 0, sizeof(s
36070 4d 65 6d 29 29 3b 0a 20 20 73 4d 65 6d 2e 64 62  Mem));.  sMem.db
36080 20 3d 20 64 62 3b 0a 20 20 2f 2a 20 42 65 63 61   = db;.  /* Beca
36090 75 73 65 20 50 32 20 69 73 20 61 6c 77 61 79 73  use P2 is always
360a0 20 61 20 73 74 61 74 69 63 20 73 74 72 69 6e 67   a static string
360b0 2c 20 69 74 20 69 73 20 69 6d 70 6f 73 73 69 62  , it is impossib
360c0 6c 65 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20  le for the.  ** 
360d0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6f  sqlite3VdbeMemCo
360e0 70 79 28 29 20 74 6f 20 66 61 69 6c 20 2a 2f 0a  py() to fail */.
360f0 20 20 61 73 73 65 72 74 28 20 28 61 4d 65 6d 5b    assert( (aMem[
36100 70 4f 70 2d 3e 70 32 5d 2e 66 6c 61 67 73 20 26  pOp->p2].flags &
36110 20 4d 45 4d 5f 53 74 72 29 21 3d 30 20 29 3b 0a   MEM_Str)!=0 );.
36120 20 20 61 73 73 65 72 74 28 20 28 61 4d 65 6d 5b    assert( (aMem[
36130 70 4f 70 2d 3e 70 32 5d 2e 66 6c 61 67 73 20 26  pOp->p2].flags &
36140 20 4d 45 4d 5f 53 74 61 74 69 63 29 21 3d 30 20   MEM_Static)!=0 
36150 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
36160 33 56 64 62 65 4d 65 6d 43 6f 70 79 28 26 73 4d  3VdbeMemCopy(&sM
36170 65 6d 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  em, &aMem[pOp->p
36180 32 5d 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72  2]);.  assert( r
36190 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c==SQLITE_OK );.
361a0 20 20 7a 54 61 62 20 3d 20 28 63 6f 6e 73 74 20    zTab = (const 
361b0 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61  char*)sqlite3_va
361c0 6c 75 65 5f 74 65 78 74 28 26 73 4d 65 6d 29 3b  lue_text(&sMem);
361d0 0a 20 20 61 73 73 65 72 74 28 20 7a 54 61 62 20  .  assert( zTab 
361e0 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  || db->mallocFai
361f0 6c 65 64 20 29 3b 0a 20 20 69 66 28 20 7a 54 61  led );.  if( zTa
36200 62 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  b ){.    rc = sq
36210 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65  lite3VtabCallCre
36220 61 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  ate(db, pOp->p1,
36230 20 7a 54 61 62 2c 20 26 70 2d 3e 7a 45 72 72 4d   zTab, &p->zErrM
36240 73 67 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  sg);.  }.  sqlit
36250 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
36260 28 26 73 4d 65 6d 29 3b 0a 20 20 69 66 28 20 72  (&sMem);.  if( r
36270 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
36280 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62  ue_to_error;.  b
36290 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
362a0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
362b0 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
362c0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
362d0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
362e0 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 44 65 73 74  /* Opcode: VDest
362f0 72 6f 79 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  roy P1 * * P4 *.
36300 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20  **.** P4 is the 
36310 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61  name of a virtua
36320 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62  l table in datab
36330 61 73 65 20 50 31 2e 20 20 43 61 6c 6c 20 74 68  ase P1.  Call th
36340 65 20 78 44 65 73 74 72 6f 79 20 6d 65 74 68 6f  e xDestroy metho
36350 64 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62  d.** of that tab
36360 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  le..*/.case OP_V
36370 44 65 73 74 72 6f 79 3a 20 7b 0a 20 20 64 62 2d  Destroy: {.  db-
36380 3e 6e 56 44 65 73 74 72 6f 79 2b 2b 3b 0a 20 20  >nVDestroy++;.  
36390 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
363a0 43 61 6c 6c 44 65 73 74 72 6f 79 28 64 62 2c 20  CallDestroy(db, 
363b0 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
363c0 2e 7a 29 3b 0a 20 20 64 62 2d 3e 6e 56 44 65 73  .z);.  db->nVDes
363d0 74 72 6f 79 2d 2d 3b 0a 20 20 69 66 28 20 72 63  troy--;.  if( rc
363e0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
363f0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
36400 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
36410 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
36420 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
36430 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
36440 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
36450 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70 65 6e 20  * Opcode: VOpen 
36460 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
36470 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
36480 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74  r to a virtual t
36490 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20  able object, an 
364a0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
364b0 75 63 74 75 72 65 2e 0a 2a 2a 20 50 31 20 69 73  ucture..** P1 is
364c0 20 61 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72   a cursor number
364d0 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f  .  This opcode o
364e0 70 65 6e 73 20 61 20 63 75 72 73 6f 72 20 74 6f  pens a cursor to
364f0 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20   the virtual.** 
36500 74 61 62 6c 65 20 61 6e 64 20 73 74 6f 72 65 73  table and stores
36510 20 74 68 61 74 20 63 75 72 73 6f 72 20 69 6e 20   that cursor in 
36520 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  P1..*/.case OP_V
36530 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75  Open: {.  VdbeCu
36540 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 73 71  rsor *pCur;.  sq
36550 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
36560 72 20 2a 70 56 43 75 72 3b 0a 20 20 73 71 6c 69  r *pVCur;.  sqli
36570 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
36580 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
36590 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
365a0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  ;..  assert( p->
365b0 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 70  bIsReader );.  p
365c0 43 75 72 20 3d 20 30 3b 0a 20 20 70 56 43 75 72  Cur = 0;.  pVCur
365d0 20 3d 20 30 3b 0a 20 20 70 56 74 61 62 20 3d 20   = 0;.  pVtab = 
365e0 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70  pOp->p4.pVtab->p
365f0 56 74 61 62 3b 0a 20 20 69 66 28 20 70 56 74 61  Vtab;.  if( pVta
36600 62 3d 3d 30 20 7c 7c 20 4e 45 56 45 52 28 70 56  b==0 || NEVER(pV
36610 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3d 3d 30 29  tab->pModule==0)
36620 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
36630 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20  ITE_LOCKED;.    
36640 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
36650 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70  o_error;.  }.  p
36660 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
36670 70 4d 6f 64 75 6c 65 3b 0a 20 20 72 63 20 3d 20  pModule;.  rc = 
36680 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e 28 70  pModule->xOpen(p
36690 56 74 61 62 2c 20 26 70 56 43 75 72 29 3b 0a 20  Vtab, &pVCur);. 
366a0 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
366b0 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61  rtErrmsg(p, pVta
366c0 62 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  b);.  if( rc ) g
366d0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
366e0 5f 65 72 72 6f 72 3b 0a 0a 20 20 2f 2a 20 49 6e  _error;..  /* In
366f0 69 74 69 61 6c 69 7a 65 20 73 71 6c 69 74 65 33  itialize sqlite3
36700 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 62 61 73  _vtab_cursor bas
36710 65 20 63 6c 61 73 73 20 2a 2f 0a 20 20 70 56 43  e class */.  pVC
36720 75 72 2d 3e 70 56 74 61 62 20 3d 20 70 56 74 61  ur->pVtab = pVta
36730 62 3b 0a 0a 20 20 2f 2a 20 49 6e 69 74 69 61 6c  b;..  /* Initial
36740 69 7a 65 20 76 64 62 65 20 63 75 72 73 6f 72 20  ize vdbe cursor 
36750 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 70 43 75 72  object */.  pCur
36760 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
36770 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c  r(p, pOp->p1, 0,
36780 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 56 54 41   -1, CURTYPE_VTA
36790 42 29 3b 0a 20 20 69 66 28 20 70 43 75 72 20 29  B);.  if( pCur )
367a0 7b 0a 20 20 20 20 70 43 75 72 2d 3e 75 63 2e 70  {.    pCur->uc.p
367b0 56 43 75 72 20 3d 20 70 56 43 75 72 3b 0a 20 20  VCur = pVCur;.  
367c0 20 20 70 56 74 61 62 2d 3e 6e 52 65 66 2b 2b 3b    pVtab->nRef++;
367d0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
367e0 73 65 72 74 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63  sert( db->malloc
367f0 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 70 4d  Failed );.    pM
36800 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73 65 28 70 56  odule->xClose(pV
36810 43 75 72 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6e  Cur);.    goto n
36820 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 62 72 65  o_mem;.  }.  bre
36830 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
36840 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
36850 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
36860 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
36870 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
36880 20 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74 65 72   Opcode: VFilter
36890 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
368a0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 70 6c 61  * Synopsis: ipla
368b0 6e 3d 72 5b 50 33 5d 20 7a 70 6c 61 6e 3d 27 50  n=r[P3] zplan='P
368c0 34 27 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  4'.**.** P1 is a
368d0 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20 75   cursor opened u
368e0 73 69 6e 67 20 56 4f 70 65 6e 2e 20 20 50 32 20  sing VOpen.  P2 
368f0 69 73 20 61 6e 20 61 64 64 72 65 73 73 20 74 6f  is an address to
36900 20 6a 75 6d 70 20 74 6f 20 69 66 0a 2a 2a 20 74   jump to if.** t
36910 68 65 20 66 69 6c 74 65 72 65 64 20 72 65 73 75  he filtered resu
36920 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79 2e  lt set is empty.
36930 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 65 69 74  .**.** P4 is eit
36940 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20 73 74  her NULL or a st
36950 72 69 6e 67 20 74 68 61 74 20 77 61 73 20 67 65  ring that was ge
36960 6e 65 72 61 74 65 64 20 62 79 20 74 68 65 20 78  nerated by the x
36970 42 65 73 74 49 6e 64 65 78 0a 2a 2a 20 6d 65 74  BestIndex.** met
36980 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c  hod of the modul
36990 65 2e 20 20 54 68 65 20 69 6e 74 65 72 70 72 65  e.  The interpre
369a0 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 50 34  tation of the P4
369b0 20 73 74 72 69 6e 67 20 69 73 20 6c 65 66 74 0a   string is left.
369c0 2a 2a 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65  ** to the module
369d0 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
369e0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
369f0 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 78  de invokes the x
36a00 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f 6e  Filter method on
36a10 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
36a20 6c 65 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20  le specified.** 
36a30 62 79 20 50 31 2e 20 20 54 68 65 20 69 6e 74 65  by P1.  The inte
36a40 67 65 72 20 71 75 65 72 79 20 70 6c 61 6e 20 70  ger query plan p
36a50 61 72 61 6d 65 74 65 72 20 74 6f 20 78 46 69 6c  arameter to xFil
36a60 74 65 72 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ter is stored in
36a70 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 2e   register.** P3.
36a80 20 52 65 67 69 73 74 65 72 20 50 33 2b 31 20 73   Register P3+1 s
36a90 74 6f 72 65 73 20 74 68 65 20 61 72 67 63 20 70  tores the argc p
36aa0 61 72 61 6d 65 74 65 72 20 74 6f 20 62 65 20 70  arameter to be p
36ab0 61 73 73 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20  assed to the.** 
36ac0 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e 20  xFilter method. 
36ad0 52 65 67 69 73 74 65 72 73 20 50 33 2b 32 2e 2e  Registers P3+2..
36ae0 50 33 2b 31 2b 61 72 67 63 20 61 72 65 20 74 68  P3+1+argc are th
36af0 65 20 61 72 67 63 0a 2a 2a 20 61 64 64 69 74 69  e argc.** additi
36b00 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65 72 73 20  onal parameters 
36b10 77 68 69 63 68 20 61 72 65 20 70 61 73 73 65 64  which are passed
36b20 20 74 6f 0a 2a 2a 20 78 46 69 6c 74 65 72 20 61   to.** xFilter a
36b30 73 20 61 72 67 76 2e 20 52 65 67 69 73 74 65 72  s argv. Register
36b40 20 50 33 2b 32 20 62 65 63 6f 6d 65 73 20 61 72   P3+2 becomes ar
36b50 67 76 5b 30 5d 20 77 68 65 6e 20 70 61 73 73 65  gv[0] when passe
36b60 64 20 74 6f 20 78 46 69 6c 74 65 72 2e 0a 2a 2a  d to xFilter..**
36b70 0a 2a 2a 20 41 20 6a 75 6d 70 20 69 73 20 6d 61  .** A jump is ma
36b80 64 65 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  de to P2 if the 
36b90 72 65 73 75 6c 74 20 73 65 74 20 61 66 74 65 72  result set after
36ba0 20 66 69 6c 74 65 72 69 6e 67 20 77 6f 75 6c 64   filtering would
36bb0 20 62 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61   be empty..*/.ca
36bc0 73 65 20 4f 50 5f 56 46 69 6c 74 65 72 3a 20 7b  se OP_VFilter: {
36bd0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
36be0 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20  int nArg;.  int 
36bf0 69 51 75 65 72 79 3b 0a 20 20 63 6f 6e 73 74 20  iQuery;.  const 
36c00 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
36c10 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a  pModule;.  Mem *
36c20 70 51 75 65 72 79 3b 0a 20 20 4d 65 6d 20 2a 70  pQuery;.  Mem *p
36c30 41 72 67 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f  Argc;.  sqlite3_
36c40 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 43  vtab_cursor *pVC
36c50 75 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  ur;.  sqlite3_vt
36c60 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 56 64 62  ab *pVtab;.  Vdb
36c70 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20  eCursor *pCur;. 
36c80 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20   int res;.  int 
36c90 69 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67  i;.  Mem **apArg
36ca0 3b 0a 0a 20 20 70 51 75 65 72 79 20 3d 20 26 61  ;..  pQuery = &a
36cb0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
36cc0 70 41 72 67 63 20 3d 20 26 70 51 75 65 72 79 5b  pArgc = &pQuery[
36cd0 31 5d 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e  1];.  pCur = p->
36ce0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
36cf0 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
36d00 61 6c 69 64 28 70 51 75 65 72 79 29 20 29 3b 0a  alid(pQuery) );.
36d10 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
36d20 28 70 4f 70 2d 3e 70 33 2c 20 70 51 75 65 72 79  (pOp->p3, pQuery
36d30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75  );.  assert( pCu
36d40 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  r->eCurType==CUR
36d50 54 59 50 45 5f 56 54 41 42 20 29 3b 0a 20 20 70  TYPE_VTAB );.  p
36d60 56 43 75 72 20 3d 20 70 43 75 72 2d 3e 75 63 2e  VCur = pCur->uc.
36d70 70 56 43 75 72 3b 0a 20 20 70 56 74 61 62 20 3d  pVCur;.  pVtab =
36d80 20 70 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20   pVCur->pVtab;. 
36d90 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
36da0 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f 2a  ->pModule;..  /*
36db0 20 47 72 61 62 20 74 68 65 20 69 6e 64 65 78 20   Grab the index 
36dc0 6e 75 6d 62 65 72 20 61 6e 64 20 61 72 67 63 20  number and argc 
36dd0 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20  parameters */.  
36de0 61 73 73 65 72 74 28 20 28 70 51 75 65 72 79 2d  assert( (pQuery-
36df0 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29 21  >flags&MEM_Int)!
36e00 3d 30 20 26 26 20 70 41 72 67 63 2d 3e 66 6c 61  =0 && pArgc->fla
36e10 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  gs==MEM_Int );. 
36e20 20 6e 41 72 67 20 3d 20 28 69 6e 74 29 70 41 72   nArg = (int)pAr
36e30 67 63 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65 72  gc->u.i;.  iQuer
36e40 79 20 3d 20 28 69 6e 74 29 70 51 75 65 72 79 2d  y = (int)pQuery-
36e50 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f  >u.i;..  /* Invo
36e60 6b 65 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d  ke the xFilter m
36e70 65 74 68 6f 64 20 2a 2f 0a 20 20 72 65 73 20 3d  ethod */.  res =
36e80 20 30 3b 0a 20 20 61 70 41 72 67 20 3d 20 70 2d   0;.  apArg = p-
36e90 3e 61 70 41 72 67 3b 0a 20 20 66 6f 72 28 69 20  >apArg;.  for(i 
36ea0 3d 20 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b  = 0; i<nArg; i++
36eb0 29 7b 0a 20 20 20 20 61 70 41 72 67 5b 69 5d 20  ){.    apArg[i] 
36ec0 3d 20 26 70 41 72 67 63 5b 69 2b 31 5d 3b 0a 20  = &pArgc[i+1];. 
36ed0 20 7d 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c   }.  rc = pModul
36ee0 65 2d 3e 78 46 69 6c 74 65 72 28 70 56 43 75 72  e->xFilter(pVCur
36ef0 2c 20 69 51 75 65 72 79 2c 20 70 4f 70 2d 3e 70  , iQuery, pOp->p
36f00 34 2e 7a 2c 20 6e 41 72 67 2c 20 61 70 41 72 67  4.z, nArg, apArg
36f10 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62  );.  sqlite3Vtab
36f20 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20  ImportErrmsg(p, 
36f30 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72 63  pVtab);.  if( rc
36f40 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
36f50 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 72 65  e_to_error;.  re
36f60 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f  s = pModule->xEo
36f70 66 28 70 56 43 75 72 29 3b 0a 20 20 70 43 75 72  f(pVCur);.  pCur
36f80 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20  ->nullRow = 0;. 
36f90 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
36fa0 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66  (res!=0,2);.  if
36fb0 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d  ( res ) goto jum
36fc0 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b  p_to_p2;.  break
36fd0 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
36fe0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
36ff0 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
37000 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
37010 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
37020 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e 20 50  pcode: VColumn P
37030 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
37040 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 76  ynopsis: r[P3]=v
37050 63 6f 6c 75 6d 6e 28 50 32 29 0a 2a 2a 0a 2a 2a  column(P2).**.**
37060 20 53 74 6f 72 65 20 74 68 65 20 76 61 6c 75 65   Store the value
37070 20 6f 66 20 74 68 65 20 50 32 2d 74 68 20 63 6f   of the P2-th co
37080 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 72  lumn of.** the r
37090 6f 77 20 6f 66 20 74 68 65 20 76 69 72 74 75 61  ow of the virtua
370a0 6c 2d 74 61 62 6c 65 20 74 68 61 74 20 74 68 65  l-table that the
370b0 20 0a 2a 2a 20 50 31 20 63 75 72 73 6f 72 20 69   .** P1 cursor i
370c0 73 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 69 6e  s pointing to in
370d0 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  to register P3..
370e0 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 6f 6c 75  */.case OP_VColu
370f0 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  mn: {.  sqlite3_
37100 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63  vtab *pVtab;.  c
37110 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
37120 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20  ule *pModule;.  
37130 4d 65 6d 20 2a 70 44 65 73 74 3b 0a 20 20 73 71  Mem *pDest;.  sq
37140 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 73 43  lite3_context sC
37150 6f 6e 74 65 78 74 3b 0a 0a 20 20 56 64 62 65 43  ontext;..  VdbeC
37160 75 72 73 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d  ursor *pCur = p-
37170 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
37180 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d  .  assert( pCur-
37190 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
371a0 50 45 5f 56 54 41 42 20 29 3b 0a 20 20 61 73 73  PE_VTAB );.  ass
371b0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
371c0 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  & pOp->p3<=(p->n
371d0 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
371e0 6f 72 29 20 29 3b 0a 20 20 70 44 65 73 74 20 3d  or) );.  pDest =
371f0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
37200 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
37210 6e 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a 20  nge(p, pDest);. 
37220 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52   if( pCur->nullR
37230 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ow ){.    sqlite
37240 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
37250 70 44 65 73 74 29 3b 0a 20 20 20 20 62 72 65 61  pDest);.    brea
37260 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d  k;.  }.  pVtab =
37270 20 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 2d   pCur->uc.pVCur-
37280 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c  >pVtab;.  pModul
37290 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
372a0 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d  le;.  assert( pM
372b0 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29  odule->xColumn )
372c0 3b 0a 20 20 6d 65 6d 73 65 74 28 26 73 43 6f 6e  ;.  memset(&sCon
372d0 74 65 78 74 2c 20 30 2c 20 73 69 7a 65 6f 66 28  text, 0, sizeof(
372e0 73 43 6f 6e 74 65 78 74 29 29 3b 0a 20 20 73 43  sContext));.  sC
372f0 6f 6e 74 65 78 74 2e 70 4f 75 74 20 3d 20 70 44  ontext.pOut = pD
37300 65 73 74 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70  est;.  MemSetTyp
37310 65 46 6c 61 67 28 70 44 65 73 74 2c 20 4d 45 4d  eFlag(pDest, MEM
37320 5f 4e 75 6c 6c 29 3b 0a 20 20 72 63 20 3d 20 70  _Null);.  rc = p
37330 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28  Module->xColumn(
37340 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 2c 20  pCur->uc.pVCur, 
37350 26 73 43 6f 6e 74 65 78 74 2c 20 70 4f 70 2d 3e  &sContext, pOp->
37360 70 32 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74  p2);.  sqlite3Vt
37370 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
37380 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20  , pVtab);.  if( 
37390 73 43 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f 72  sContext.isError
373a0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 43 6f   ){.    rc = sCo
373b0 6e 74 65 78 74 2e 69 73 45 72 72 6f 72 3b 0a 20  ntext.isError;. 
373c0 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65   }.  sqlite3Vdbe
373d0 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
373e0 44 65 73 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  Dest, encoding);
373f0 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
37400 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74  E(pOp->p3, pDest
37410 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
37420 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b  BLOBSIZE(pDest);
37430 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  ..  if( sqlite3V
37440 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 44 65  dbeMemTooBig(pDe
37450 73 74 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  st) ){.    goto 
37460 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 69  too_big;.  }.  i
37470 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
37480 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
37490 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
374a0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
374b0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
374c0 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
374d0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
374e0 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
374f0 4e 65 78 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  Next P1 P2 * * *
37500 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 76  .**.** Advance v
37510 69 72 74 75 61 6c 20 74 61 62 6c 65 20 50 31 20  irtual table P1 
37520 74 6f 20 74 68 65 20 6e 65 78 74 20 72 6f 77 20  to the next row 
37530 69 6e 20 69 74 73 20 72 65 73 75 6c 74 20 73 65  in its result se
37540 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f  t and.** jump to
37550 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e   instruction P2.
37560 20 20 4f 72 2c 20 69 66 20 74 68 65 20 76 69 72    Or, if the vir
37570 74 75 61 6c 20 74 61 62 6c 65 20 68 61 73 20 72  tual table has r
37580 65 61 63 68 65 64 0a 2a 2a 20 74 68 65 20 65 6e  eached.** the en
37590 64 20 6f 66 20 69 74 73 20 72 65 73 75 6c 74 20  d of its result 
375a0 73 65 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74  set, then fall t
375b0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
375c0 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
375d0 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4e 65 78 74  */.case OP_VNext
375e0 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f  : {   /* jump */
375f0 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
37600 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20  *pVtab;.  const 
37610 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
37620 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 72  pModule;.  int r
37630 65 73 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  es;.  VdbeCursor
37640 20 2a 70 43 75 72 3b 0a 0a 20 20 72 65 73 20 3d   *pCur;..  res =
37650 20 30 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e   0;.  pCur = p->
37660 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
37670 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e    assert( pCur->
37680 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
37690 45 5f 56 54 41 42 20 29 3b 0a 20 20 69 66 28 20  E_VTAB );.  if( 
376a0 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  pCur->nullRow ){
376b0 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
376c0 20 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e    pVtab = pCur->
376d0 75 63 2e 70 56 43 75 72 2d 3e 70 56 74 61 62 3b  uc.pVCur->pVtab;
376e0 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74  .  pModule = pVt
376f0 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61  ab->pModule;.  a
37700 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e  ssert( pModule->
37710 78 4e 65 78 74 20 29 3b 0a 0a 20 20 2f 2a 20 49  xNext );..  /* I
37720 6e 76 6f 6b 65 20 74 68 65 20 78 4e 65 78 74 28  nvoke the xNext(
37730 29 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20  ) method of the 
37740 6d 6f 64 75 6c 65 2e 20 54 68 65 72 65 20 69 73  module. There is
37750 20 6e 6f 20 77 61 79 20 66 6f 72 20 74 68 65 0a   no way for the.
37760 20 20 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20    ** underlying 
37770 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74  implementation t
37780 6f 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f  o return an erro
37790 72 20 69 66 20 6f 6e 65 20 6f 63 63 75 72 73 20  r if one occurs 
377a0 64 75 72 69 6e 67 0a 20 20 2a 2a 20 78 4e 65 78  during.  ** xNex
377b0 74 28 29 2e 20 49 6e 73 74 65 61 64 2c 20 69 66  t(). Instead, if
377c0 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73   an error occurs
377d0 2c 20 74 72 75 65 20 69 73 20 72 65 74 75 72 6e  , true is return
377e0 65 64 20 28 69 6e 64 69 63 61 74 69 6e 67 20 74  ed (indicating t
377f0 68 61 74 20 0a 20 20 2a 2a 20 64 61 74 61 20 69  hat .  ** data i
37800 73 20 61 76 61 69 6c 61 62 6c 65 29 20 61 6e 64  s available) and
37810 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20   the error code 
37820 72 65 74 75 72 6e 65 64 20 77 68 65 6e 20 78 43  returned when xC
37830 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f  olumn or.  ** so
37840 6d 65 20 6f 74 68 65 72 20 6d 65 74 68 6f 64 20  me other method 
37850 69 73 20 6e 65 78 74 20 69 6e 76 6f 6b 65 64 20  is next invoked 
37860 6f 6e 20 74 68 65 20 73 61 76 65 20 76 69 72 74  on the save virt
37870 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72  ual table cursor
37880 2e 0a 20 20 2a 2f 0a 20 20 72 63 20 3d 20 70 4d  ..  */.  rc = pM
37890 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 28 70 43 75  odule->xNext(pCu
378a0 72 2d 3e 75 63 2e 70 56 43 75 72 29 3b 0a 20 20  r->uc.pVCur);.  
378b0 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
378c0 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62  tErrmsg(p, pVtab
378d0 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
378e0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
378f0 65 72 72 6f 72 3b 0a 20 20 72 65 73 20 3d 20 70  error;.  res = p
37900 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 43 75  Module->xEof(pCu
37910 72 2d 3e 75 63 2e 70 56 43 75 72 29 3b 0a 20 20  r->uc.pVCur);.  
37920 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
37930 21 72 65 73 2c 32 29 3b 0a 20 20 69 66 28 20 21  !res,2);.  if( !
37940 72 65 73 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  res ){.    /* If
37950 20 74 68 65 72 65 20 69 73 20 64 61 74 61 2c 20   there is data, 
37960 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20  jump to P2 */.  
37970 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
37980 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f  2_and_check_for_
37990 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 0a 20  interrupt;.  }. 
379a0 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f   goto check_for_
379b0 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 23 65 6e  interrupt;.}.#en
379c0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
379d0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
379e0 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
379f0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
37a00 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
37a10 56 52 65 6e 61 6d 65 20 50 31 20 2a 20 2a 20 50  VRename P1 * * P
37a20 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  4 *.**.** P4 is 
37a30 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76  a pointer to a v
37a40 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a  irtual table obj
37a50 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f  ect, an sqlite3_
37a60 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a  vtab structure..
37a70 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
37a80 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65  nvokes the corre
37a90 73 70 6f 6e 64 69 6e 67 20 78 52 65 6e 61 6d 65  sponding xRename
37aa0 20 6d 65 74 68 6f 64 2e 20 54 68 65 20 76 61 6c   method. The val
37ab0 75 65 0a 2a 2a 20 69 6e 20 72 65 67 69 73 74 65  ue.** in registe
37ac0 72 20 50 31 20 69 73 20 70 61 73 73 65 64 20 61  r P1 is passed a
37ad0 73 20 74 68 65 20 7a 4e 61 6d 65 20 61 72 67 75  s the zName argu
37ae0 6d 65 6e 74 20 74 6f 20 74 68 65 20 78 52 65 6e  ment to the xRen
37af0 61 6d 65 20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63  ame method..*/.c
37b00 61 73 65 20 4f 50 5f 56 52 65 6e 61 6d 65 3a 20  ase OP_VRename: 
37b10 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  {.  sqlite3_vtab
37b20 20 2a 70 56 74 61 62 3b 0a 20 20 4d 65 6d 20 2a   *pVtab;.  Mem *
37b30 70 4e 61 6d 65 3b 0a 0a 20 20 70 56 74 61 62 20  pName;..  pVtab 
37b40 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d  = pOp->p4.pVtab-
37b50 3e 70 56 74 61 62 3b 0a 20 20 70 4e 61 6d 65 20  >pVtab;.  pName 
37b60 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
37b70 3b 0a 20 20 61 73 73 65 72 74 28 20 70 56 74 61  ;.  assert( pVta
37b80 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e  b->pModule->xRen
37b90 61 6d 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ame );.  assert(
37ba0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4e 61 6d   memIsValid(pNam
37bb0 65 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  e) );.  assert( 
37bc0 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
37bd0 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
37be0 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d  CE(pOp->p1, pNam
37bf0 65 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4e  e);.  assert( pN
37c00 61 6d 65 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ame->flags & MEM
37c10 5f 53 74 72 20 29 3b 0a 20 20 74 65 73 74 63 61  _Str );.  testca
37c20 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d  se( pName->enc==
37c30 53 51 4c 49 54 45 5f 55 54 46 38 20 29 3b 0a 20  SQLITE_UTF8 );. 
37c40 20 74 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65   testcase( pName
37c50 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54  ->enc==SQLITE_UT
37c60 46 31 36 42 45 20 29 3b 0a 20 20 74 65 73 74 63  F16BE );.  testc
37c70 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d  ase( pName->enc=
37c80 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20  =SQLITE_UTF16LE 
37c90 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
37ca0 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
37cb0 69 6e 67 28 70 4e 61 6d 65 2c 20 53 51 4c 49 54  ing(pName, SQLIT
37cc0 45 5f 55 54 46 38 29 3b 0a 20 20 69 66 28 20 72  E_UTF8);.  if( r
37cd0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
37ce0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 72  ue_to_error;.  r
37cf0 63 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  c = pVtab->pModu
37d00 6c 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56 74 61  le->xRename(pVta
37d10 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20  b, pName->z);.  
37d20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
37d30 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62  tErrmsg(p, pVtab
37d40 29 3b 0a 20 20 70 2d 3e 65 78 70 69 72 65 64 20  );.  p->expired 
37d50 3d 20 30 3b 0a 20 20 69 66 28 20 72 63 20 29 20  = 0;.  if( rc ) 
37d60 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
37d70 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
37d80 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  ;.}.#endif..#ifn
37d90 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
37da0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
37db0 4f 70 63 6f 64 65 3a 20 56 55 70 64 61 74 65 20  Opcode: VUpdate 
37dc0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
37dd0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 64 61 74 61  * Synopsis: data
37de0 3d 72 5b 50 33 40 50 32 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P2].**.** 
37df0 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
37e00 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  to a virtual tab
37e10 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71  le object, an sq
37e20 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63  lite3_vtab struc
37e30 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70  ture..** This op
37e40 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65  code invokes the
37e50 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78   corresponding x
37e60 55 70 64 61 74 65 20 6d 65 74 68 6f 64 2e 20 50  Update method. P
37e70 32 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20  2 values.** are 
37e80 63 6f 6e 74 69 67 75 6f 75 73 20 6d 65 6d 6f 72  contiguous memor
37e90 79 20 63 65 6c 6c 73 20 73 74 61 72 74 69 6e 67  y cells starting
37ea0 20 61 74 20 50 33 20 74 6f 20 70 61 73 73 20 74   at P3 to pass t
37eb0 6f 20 74 68 65 20 78 55 70 64 61 74 65 20 0a 2a  o the xUpdate .*
37ec0 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 20 54 68  * invocation. Th
37ed0 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
37ee0 74 65 72 20 28 50 33 2b 50 32 2d 31 29 20 63 6f  ter (P3+P2-1) co
37ef0 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
37f00 20 0a 2a 2a 20 70 32 74 68 20 65 6c 65 6d 65 6e   .** p2th elemen
37f10 74 20 6f 66 20 74 68 65 20 61 72 67 76 20 61 72  t of the argv ar
37f20 72 61 79 20 70 61 73 73 65 64 20 74 6f 20 78 55  ray passed to xU
37f30 70 64 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  pdate..**.** The
37f40 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64 20   xUpdate method 
37f50 77 69 6c 6c 20 64 6f 20 61 20 44 45 4c 45 54 45  will do a DELETE
37f60 20 6f 72 20 61 6e 20 49 4e 53 45 52 54 20 6f 72   or an INSERT or
37f70 20 62 6f 74 68 2e 0a 2a 2a 20 54 68 65 20 61 72   both..** The ar
37f80 67 76 5b 30 5d 20 65 6c 65 6d 65 6e 74 20 28 77  gv[0] element (w
37f90 68 69 63 68 20 63 6f 72 72 65 73 70 6f 6e 64 73  hich corresponds
37fa0 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   to memory cell 
37fb0 50 33 29 0a 2a 2a 20 69 73 20 74 68 65 20 72 6f  P3).** is the ro
37fc0 77 69 64 20 6f 66 20 61 20 72 6f 77 20 74 6f 20  wid of a row to 
37fd0 64 65 6c 65 74 65 2e 20 20 49 66 20 61 72 67 76  delete.  If argv
37fe0 5b 30 5d 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  [0] is NULL then
37ff0 20 6e 6f 20 0a 2a 2a 20 64 65 6c 65 74 69 6f 6e   no .** deletion
38000 20 6f 63 63 75 72 73 2e 20 20 54 68 65 20 61 72   occurs.  The ar
38010 67 76 5b 31 5d 20 65 6c 65 6d 65 6e 74 20 69 73  gv[1] element is
38020 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
38030 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 2e 20 20  e new .** row.  
38040 54 68 69 73 20 63 61 6e 20 62 65 20 4e 55 4c 4c  This can be NULL
38050 20 74 6f 20 68 61 76 65 20 74 68 65 20 76 69 72   to have the vir
38060 74 75 61 6c 20 74 61 62 6c 65 20 73 65 6c 65 63  tual table selec
38070 74 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f  t the new .** ro
38080 77 69 64 20 66 6f 72 20 69 74 73 65 6c 66 2e 20  wid for itself. 
38090 20 54 68 65 20 73 75 62 73 65 71 75 65 6e 74 20   The subsequent 
380a0 65 6c 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  elements in the 
380b0 61 72 72 61 79 20 61 72 65 20 0a 2a 2a 20 74 68  array are .** th
380c0 65 20 76 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75  e values of colu
380d0 6d 6e 73 20 69 6e 20 74 68 65 20 6e 65 77 20 72  mns in the new r
380e0 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 3d  ow..**.** If P2=
380f0 3d 31 20 74 68 65 6e 20 6e 6f 20 69 6e 73 65 72  =1 then no inser
38100 74 20 69 73 20 70 65 72 66 6f 72 6d 65 64 2e 20  t is performed. 
38110 20 61 72 67 76 5b 30 5d 20 69 73 20 74 68 65 20   argv[0] is the 
38120 72 6f 77 69 64 20 6f 66 0a 2a 2a 20 61 20 72 6f  rowid of.** a ro
38130 77 20 74 6f 20 64 65 6c 65 74 65 2e 0a 2a 2a 0a  w to delete..**.
38140 2a 2a 20 50 31 20 69 73 20 61 20 62 6f 6f 6c 65  ** P1 is a boole
38150 61 6e 20 66 6c 61 67 2e 20 49 66 20 69 74 20 69  an flag. If it i
38160 73 20 73 65 74 20 74 6f 20 74 72 75 65 20 61 6e  s set to true an
38170 64 20 74 68 65 20 78 55 70 64 61 74 65 20 63 61  d the xUpdate ca
38180 6c 6c 0a 2a 2a 20 69 73 20 73 75 63 63 65 73 73  ll.** is success
38190 66 75 6c 2c 20 74 68 65 6e 20 74 68 65 20 76 61  ful, then the va
381a0 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  lue returned by 
381b0 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73  sqlite3_last_ins
381c0 65 72 74 5f 72 6f 77 69 64 28 29 20 0a 2a 2a 20  ert_rowid() .** 
381d0 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 76 61  is set to the va
381e0 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 77 69 64  lue of the rowid
381f0 20 66 6f 72 20 74 68 65 20 72 6f 77 20 6a 75 73   for the row jus
38200 74 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2a 0a 2a  t inserted..**.*
38210 2a 20 50 35 20 69 73 20 74 68 65 20 65 72 72 6f  * P5 is the erro
38220 72 20 61 63 74 69 6f 6e 73 20 28 4f 45 5f 52 65  r actions (OE_Re
38230 70 6c 61 63 65 2c 20 4f 45 5f 46 61 69 6c 2c 20  place, OE_Fail, 
38240 4f 45 5f 49 67 6e 6f 72 65 2c 20 65 74 63 29 20  OE_Ignore, etc) 
38250 74 6f 0a 2a 2a 20 61 70 70 6c 79 20 69 6e 20 74  to.** apply in t
38260 68 65 20 63 61 73 65 20 6f 66 20 61 20 63 6f 6e  he case of a con
38270 73 74 72 61 69 6e 74 20 66 61 69 6c 75 72 65 20  straint failure 
38280 6f 6e 20 61 6e 20 69 6e 73 65 72 74 20 6f 72 20  on an insert or 
38290 75 70 64 61 74 65 2e 0a 2a 2f 0a 63 61 73 65 20  update..*/.case 
382a0 4f 50 5f 56 55 70 64 61 74 65 3a 20 7b 0a 20 20  OP_VUpdate: {.  
382b0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
382c0 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  tab;.  const sql
382d0 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
382e0 64 75 6c 65 3b 0a 20 20 69 6e 74 20 6e 41 72 67  dule;.  int nArg
382f0 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c  ;.  int i;.  sql
38300 69 74 65 5f 69 6e 74 36 34 20 72 6f 77 69 64 3b  ite_int64 rowid;
38310 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a  .  Mem **apArg;.
38320 20 20 4d 65 6d 20 2a 70 58 3b 0a 0a 20 20 61 73    Mem *pX;..  as
38330 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 31  sert(