/ Hex Artifact Content
Login

Artifact 0c353a885a413ce7239610587b637e7124b2ca48:


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 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76  he next global v
0c70: 61 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65  ariable is incre
0c80: 6d 65 6e 74 65 64 20 65 61 63 68 20 74 69 6d 65  mented each time
0c90: 20 74 68 65 20 4f 50 5f 46 6f 75 6e 64 20 6f 70   the OP_Found op
0ca0: 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63 75  code.** is execu
0cb0: 74 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65  ted. This is use
0cc0: 64 20 74 6f 20 74 65 73 74 20 77 68 65 74 68 65  d to test whethe
0cd0: 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 6f 72  r or not the for
0ce0: 65 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f 70 65 72  eign key.** oper
0cf0: 61 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65  ation implemente
0d00: 64 20 75 73 69 6e 67 20 4f 50 5f 46 6b 49 73 5a  d using OP_FkIsZ
0d10: 65 72 6f 20 69 73 20 77 6f 72 6b 69 6e 67 2e 20  ero is working. 
0d20: 54 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a 2a  This variable.**
0d30: 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e   has no function
0d40: 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20 68   other than to h
0d50: 65 6c 70 20 76 65 72 69 66 79 20 74 68 65 20 63  elp verify the c
0d60: 6f 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e  orrect operation
0d70: 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72 61   of the.** libra
0d80: 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ry..*/.#ifdef SQ
0d90: 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71  LITE_TEST.int sq
0da0: 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e  lite3_found_coun
0db0: 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f  t = 0;.#endif../
0dc0: 2a 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67 69  *.** Test a regi
0dd0: 73 74 65 72 20 74 6f 20 73 65 65 20 69 66 20 69  ster to see if i
0de0: 74 20 65 78 63 65 65 64 73 20 74 68 65 20 63 75  t exceeds the cu
0df0: 72 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c  rrent maximum bl
0e00: 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69  ob size..** If i
0e10: 74 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20 74  t does, record t
0e20: 68 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62  he new maximum b
0e30: 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66  lob size..*/.#if
0e40: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
0e50: 54 45 53 54 29 20 26 26 20 21 64 65 66 69 6e 65  TEST) && !define
0e60: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  d(SQLITE_OMIT_BU
0e70: 49 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64 65  ILTIN_TEST).# de
0e80: 66 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f  fine UPDATE_MAX_
0e90: 42 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70 64  BLOBSIZE(P)  upd
0ea0: 61 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50  ateMaxBlobsize(P
0eb0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
0ec0: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
0ed0: 53 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a  SIZE(P).#endif..
0ee0: 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65  /*.** Invoke the
0ef0: 20 56 44 42 45 20 63 6f 76 65 72 61 67 65 20 63   VDBE coverage c
0f00: 61 6c 6c 62 61 63 6b 2c 20 69 66 20 74 68 61 74  allback, if that
0f10: 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 64 65 66   callback is def
0f20: 69 6e 65 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66  ined.  This.** f
0f30: 65 61 74 75 72 65 20 69 73 20 75 73 65 64 20 66  eature is used f
0f40: 6f 72 20 74 65 73 74 20 73 75 69 74 65 20 76 61  or test suite va
0f50: 6c 69 64 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e  lidation only an
0f60: 64 20 64 6f 65 73 20 6e 6f 74 20 61 70 70 65 61  d does not appea
0f70: 72 20 61 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69  r an.** producti
0f80: 6f 6e 20 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a  on builds..**.**
0f90: 20 4d 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72   M is an integer
0fa0: 2c 20 32 20 6f 72 20 33 2c 20 74 68 61 74 20 69  , 2 or 3, that i
0fb0: 6e 64 69 63 65 73 20 68 6f 77 20 6d 61 6e 79 20  ndices how many 
0fc0: 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 74  different ways t
0fd0: 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 63 61 6e  he.** branch can
0fe0: 20 67 6f 2e 20 20 49 74 20 69 73 20 75 73 75 61   go.  It is usua
0ff0: 6c 6c 79 20 32 2e 20 20 22 49 22 20 69 73 20 74  lly 2.  "I" is t
1000: 68 65 20 64 69 72 65 63 74 69 6f 6e 20 74 68 65  he direction the
1010: 20 62 72 61 6e 63 68 0a 2a 2a 20 67 6f 65 73 2e   branch.** goes.
1020: 20 20 30 20 6d 65 61 6e 73 20 66 61 6c 6c 73 20    0 means falls 
1030: 74 68 72 6f 75 67 68 2e 20 20 31 20 6d 65 61 6e  through.  1 mean
1040: 73 20 62 72 61 6e 63 68 20 69 73 20 74 61 6b 65  s branch is take
1050: 6e 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 0a  n.  2 means the.
1060: 2a 2a 20 73 65 63 6f 6e 64 20 61 6c 74 65 72 6e  ** second altern
1070: 61 74 69 76 65 20 62 72 61 6e 63 68 20 69 73 20  ative branch is 
1080: 74 61 6b 65 6e 2e 0a 2a 2a 0a 2a 2a 20 69 53 72  taken..**.** iSr
1090: 63 4c 69 6e 65 20 69 73 20 74 68 65 20 73 6f 75  cLine is the sou
10a0: 72 63 65 20 63 6f 64 65 20 6c 69 6e 65 20 28 66  rce code line (f
10b0: 72 6f 6d 20 74 68 65 20 5f 5f 4c 49 4e 45 5f 5f  rom the __LINE__
10c0: 20 6d 61 63 72 6f 29 20 74 68 61 74 0a 2a 2a 20   macro) that.** 
10d0: 67 65 6e 65 72 61 74 65 64 20 74 68 65 20 56 44  generated the VD
10e0: 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  BE instruction. 
10f0: 20 54 68 69 73 20 69 6e 73 74 72 75 6d 65 6e 74   This instrument
1100: 61 74 69 6f 6e 20 61 73 73 75 6d 65 73 20 74 68  ation assumes th
1110: 61 74 20 61 6c 6c 0a 2a 2a 20 73 6f 75 72 63 65  at all.** source
1120: 20 63 6f 64 65 20 69 73 20 69 6e 20 61 20 73 69   code is in a si
1130: 6e 67 6c 65 20 66 69 6c 65 20 28 74 68 65 20 61  ngle file (the a
1140: 6d 61 6c 67 61 6d 61 74 69 6f 6e 29 2e 20 20 53  malgamation).  S
1150: 70 65 63 69 61 6c 20 76 61 6c 75 65 73 20 31 0a  pecial values 1.
1160: 2a 2a 20 61 6e 64 20 32 20 66 6f 72 20 74 68 65  ** and 2 for the
1170: 20 69 53 72 63 4c 69 6e 65 20 70 61 72 61 6d 65   iSrcLine parame
1180: 74 65 72 20 6d 65 61 6e 20 74 68 61 74 20 74 68  ter mean that th
1190: 69 73 20 70 61 72 74 69 63 75 6c 61 72 20 62 72  is particular br
11a0: 61 6e 63 68 20 69 73 0a 2a 2a 20 61 6c 77 61 79  anch is.** alway
11b0: 73 20 74 61 6b 65 6e 20 6f 72 20 6e 65 76 65 72  s taken or never
11c0: 20 74 61 6b 65 6e 2c 20 72 65 73 70 65 63 74 69   taken, respecti
11d0: 76 65 6c 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  vely..*/.#if !de
11e0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 56 44 42  fined(SQLITE_VDB
11f0: 45 5f 43 4f 56 45 52 41 47 45 29 0a 23 20 64 65  E_COVERAGE).# de
1200: 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68 54  fine VdbeBranchT
1210: 61 6b 65 6e 28 49 2c 4d 29 0a 23 65 6c 73 65 0a  aken(I,M).#else.
1220: 23 20 64 65 66 69 6e 65 20 56 64 62 65 42 72 61  # define VdbeBra
1230: 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29 20 76 64  nchTaken(I,M) vd
1240: 62 65 54 61 6b 65 42 72 61 6e 63 68 28 70 4f 70  beTakeBranch(pOp
1250: 2d 3e 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 0a  ->iSrcLine,I,M).
1260: 20 20 73 74 61 74 69 63 20 76 6f 69 64 20 76 64    static void vd
1270: 62 65 54 61 6b 65 42 72 61 6e 63 68 28 69 6e 74  beTakeBranch(int
1280: 20 69 53 72 63 4c 69 6e 65 2c 20 75 38 20 49 2c   iSrcLine, u8 I,
1290: 20 75 38 20 4d 29 7b 0a 20 20 20 20 69 66 28 20   u8 M){.    if( 
12a0: 69 53 72 63 4c 69 6e 65 3c 3d 32 20 26 26 20 41  iSrcLine<=2 && A
12b0: 4c 57 41 59 53 28 69 53 72 63 4c 69 6e 65 3e 30  LWAYS(iSrcLine>0
12c0: 29 20 29 7b 0a 20 20 20 20 20 20 4d 20 3d 20 69  ) ){.      M = i
12d0: 53 72 63 4c 69 6e 65 3b 0a 20 20 20 20 20 20 2f  SrcLine;.      /
12e0: 2a 20 41 73 73 65 72 74 20 74 68 65 20 74 72 75  * Assert the tru
12f0: 74 68 20 6f 66 20 56 64 62 65 43 6f 76 65 72 61  th of VdbeCovera
1300: 67 65 41 6c 77 61 79 73 54 61 6b 65 6e 28 29 20  geAlwaysTaken() 
1310: 61 6e 64 20 0a 20 20 20 20 20 20 2a 2a 20 56 64  and .      ** Vd
1320: 62 65 43 6f 76 65 72 61 67 65 4e 65 76 65 72 54  beCoverageNeverT
1330: 61 6b 65 6e 28 29 20 2a 2f 0a 20 20 20 20 20 20  aken() */.      
1340: 61 73 73 65 72 74 28 20 28 4d 20 26 20 49 29 3d  assert( (M & I)=
1350: 3d 49 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =I );.    }else{
1360: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
1370: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
1380: 56 64 62 65 42 72 61 6e 63 68 3d 3d 30 20 29 20  VdbeBranch==0 ) 
1390: 72 65 74 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54 45  return;  /*NO_TE
13a0: 53 54 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74  ST*/.      sqlit
13b0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
13c0: 56 64 62 65 42 72 61 6e 63 68 28 73 71 6c 69 74  VdbeBranch(sqlit
13d0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70  e3GlobalConfig.p
13e0: 56 64 62 65 42 72 61 6e 63 68 41 72 67 2c 0a 20  VdbeBranchArg,. 
13f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1410: 20 20 20 20 20 69 53 72 63 4c 69 6e 65 2c 49 2c       iSrcLine,I,
1420: 4d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  M);.    }.  }.#e
1430: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76  ndif../*.** Conv
1440: 65 72 74 20 74 68 65 20 67 69 76 65 6e 20 72 65  ert the given re
1450: 67 69 73 74 65 72 20 69 6e 74 6f 20 61 20 73 74  gister into a st
1460: 72 69 6e 67 20 69 66 20 69 74 20 69 73 6e 27 74  ring if it isn't
1470: 20 6f 6e 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e   one.** already.
1480: 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f   Return non-zero
1490: 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66   if a malloc() f
14a0: 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ails..*/.#define
14b0: 20 53 74 72 69 6e 67 69 66 79 28 50 2c 20 65 6e   Stringify(P, en
14c0: 63 29 20 5c 0a 20 20 20 69 66 28 28 28 50 29 2d  c) \.   if(((P)-
14d0: 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c  >flags&(MEM_Str|
14e0: 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26  MEM_Blob))==0 &&
14f0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
1500: 74 72 69 6e 67 69 66 79 28 50 2c 65 6e 63 2c 30  tringify(P,enc,0
1510: 29 29 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f  )) \.     { goto
1520: 20 6e 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a   no_mem; }../*.*
1530: 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73  * An ephemeral s
1540: 74 72 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67  tring value (sig
1550: 6e 69 66 69 65 64 20 62 79 20 74 68 65 20 4d 45  nified by the ME
1560: 4d 5f 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f  M_Ephem flag) co
1570: 6e 74 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e  ntains.** a poin
1580: 74 65 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63  ter to a dynamic
1590: 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73  ally allocated s
15a0: 74 72 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65  tring where some
15b0: 20 6f 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a   other entity.**
15c0: 20 69 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20   is responsible 
15d0: 66 6f 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  for deallocating
15e0: 20 74 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42   that string.  B
15f0: 65 63 61 75 73 65 20 74 68 65 20 72 65 67 69 73  ecause the regis
1600: 74 65 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20  ter.** does not 
1610: 63 6f 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69  control the stri
1620: 6e 67 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20  ng, it might be 
1630: 64 65 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20  deleted without 
1640: 74 68 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20  the register.** 
1650: 6b 6e 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a  knowing it..**.*
1660: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63  * This routine c
1670: 6f 6e 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d  onverts an ephem
1680: 65 72 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f  eral string into
1690: 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61   a dynamically a
16a0: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69  llocated.** stri
16b0: 6e 67 20 74 68 61 74 20 74 68 65 20 72 65 67 69  ng that the regi
16c0: 73 74 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74  ster itself cont
16d0: 72 6f 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20  rols.  In other 
16e0: 77 6f 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e  words, it.** con
16f0: 76 65 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68  verts an MEM_Eph
1700: 65 6d 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61  em string into a
1710: 20 73 74 72 69 6e 67 20 77 69 74 68 20 50 2e 7a   string with P.z
1720: 3d 3d 50 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a  ==P.zMalloc..*/.
1730: 23 64 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65  #define Deepheme
1740: 72 61 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69  ralize(P) \.   i
1750: 66 28 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d  f( ((P)->flags&M
1760: 45 4d 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20  EM_Ephem)!=0 \. 
1770: 20 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33        && sqlite3
1780: 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65  VdbeMemMakeWrite
1790: 61 62 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20  able(P) ){ goto 
17a0: 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74  no_mem;}../* Ret
17b0: 75 72 6e 20 74 72 75 65 20 69 66 20 74 68 65 20  urn true if the 
17c0: 63 75 72 73 6f 72 20 77 61 73 20 6f 70 65 6e 65  cursor was opene
17d0: 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f  d using the OP_O
17e0: 70 65 6e 53 6f 72 74 65 72 20 6f 70 63 6f 64 65  penSorter opcode
17f0: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 53  . */.#define isS
1800: 6f 72 74 65 72 28 78 29 20 28 28 78 29 2d 3e 70  orter(x) ((x)->p
1810: 53 6f 72 74 65 72 21 3d 30 29 0a 0a 2f 2a 0a 2a  Sorter!=0)../*.*
1820: 2a 20 41 6c 6c 6f 63 61 74 65 20 56 64 62 65 43  * Allocate VdbeC
1830: 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75  ursor number iCu
1840: 72 2e 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69  r.  Return a poi
1850: 6e 74 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74  nter to it.  Ret
1860: 75 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77  urn NULL.** if w
1870: 65 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d  e run out of mem
1880: 6f 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 56  ory..*/.static V
1890: 64 62 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f 63  dbeCursor *alloc
18a0: 61 74 65 43 75 72 73 6f 72 28 0a 20 20 56 64 62  ateCursor(.  Vdb
18b0: 65 20 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20  e *p,           
18c0: 20 20 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61     /* The virtua
18d0: 6c 20 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20 69  l machine */.  i
18e0: 6e 74 20 69 43 75 72 2c 20 20 20 20 20 20 20 20  nt iCur,        
18f0: 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66       /* Index of
1900: 20 74 68 65 20 6e 65 77 20 56 64 62 65 43 75 72   the new VdbeCur
1910: 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69  sor */.  int nFi
1920: 65 6c 64 2c 20 20 20 20 20 20 20 20 20 20 20 2f  eld,           /
1930: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  * Number of fiel
1940: 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ds in the table 
1950: 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  or index */.  in
1960: 74 20 69 44 62 2c 20 20 20 20 20 20 20 20 20 20  t iDb,          
1970: 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
1980: 74 68 65 20 63 75 72 73 6f 72 20 62 65 6c 6f 6e  the cursor belon
1990: 67 73 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a  gs to, or -1 */.
19a0: 20 20 69 6e 74 20 69 73 42 74 72 65 65 43 75 72    int isBtreeCur
19b0: 73 6f 72 20 20 20 20 20 2f 2a 20 54 72 75 65 20  sor     /* True 
19c0: 66 6f 72 20 42 2d 54 72 65 65 2e 20 20 46 61 6c  for B-Tree.  Fal
19d0: 73 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74 61  se for pseudo-ta
19e0: 62 6c 65 20 6f 72 20 76 74 61 62 20 2a 2f 0a 29  ble or vtab */.)
19f0: 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20  {.  /* Find the 
1a00: 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74  memory cell that
1a10: 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f   will be used to
1a20: 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62 20   store the blob 
1a30: 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20 72  of memory.  ** r
1a40: 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73  equired for this
1a50: 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72 75   VdbeCursor stru
1a60: 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f 6e  cture. It is con
1a70: 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20 61  venient to use a
1a80: 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d 6f   .  ** vdbe memo
1a90: 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61 67  ry cell to manag
1aa0: 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  e the memory all
1ab0: 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65 64  ocation required
1ac0: 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62 65   for a.  ** Vdbe
1ad0: 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72 65  Cursor structure
1ae0: 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69   for the followi
1af0: 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a 2a  ng reasons:.  **
1b00: 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74 69  .  **   * Someti
1b10: 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  mes cursor numbe
1b20: 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72 20  rs are used for 
1b30: 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66 66  a couple of diff
1b40: 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20 70  erent.  **     p
1b50: 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64 62  urposes in a vdb
1b60: 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20 64  e program. The d
1b70: 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d 69  ifferent uses mi
1b80: 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a 2a  ght require.  **
1b90: 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20 73       different s
1ba0: 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  ized allocations
1bb0: 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 70  . Memory cells p
1bc0: 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65 0a  rovide growable.
1bd0: 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61 74    **     allocat
1be0: 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ions..  **.  ** 
1bf0: 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20 45    * When using E
1c00: 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e  NABLE_MEMORY_MAN
1c10: 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79 20  AGEMENT, memory 
1c20: 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61 6e  cell buffers can
1c30: 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72 65  .  **     be fre
1c40: 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74 68  ed lazily via th
1c50: 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73  e sqlite3_releas
1c60: 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e 20  e_memory() API. 
1c70: 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d 69  This.  **     mi
1c80: 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d 62  nimizes the numb
1c90: 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61 6c  er of malloc cal
1ca0: 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20 73  ls made by the s
1cb0: 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  ystem..  **.  **
1cc0: 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 66 6f   Memory cells fo
1cd0: 72 20 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c  r cursors are al
1ce0: 6c 6f 63 61 74 65 64 20 61 74 20 74 68 65 20 74  located at the t
1cf0: 6f 70 20 6f 66 20 74 68 65 20 61 64 64 72 65 73  op of the addres
1d00: 73 0a 20 20 2a 2a 20 73 70 61 63 65 2e 20 4d 65  s.  ** space. Me
1d10: 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d  mory cell (p->nM
1d20: 65 6d 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  em) corresponds 
1d30: 74 6f 20 63 75 72 73 6f 72 20 30 2e 20 53 70 61  to cursor 0. Spa
1d40: 63 65 20 66 6f 72 0a 20 20 2a 2a 20 63 75 72 73  ce for.  ** curs
1d50: 6f 72 20 31 20 69 73 20 6d 61 6e 61 67 65 64 20  or 1 is managed 
1d60: 62 79 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 28  by memory cell (
1d70: 70 2d 3e 6e 4d 65 6d 2d 31 29 2c 20 65 74 63 2e  p->nMem-1), etc.
1d80: 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  .  */.  Mem *pMe
1d90: 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e  m = &p->aMem[p->
1da0: 6e 4d 65 6d 2d 69 43 75 72 5d 3b 0a 0a 20 20 69  nMem-iCur];..  i
1db0: 6e 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65  nt nByte;.  Vdbe
1dc0: 43 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b  Cursor *pCx = 0;
1dd0: 0a 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20  .  nByte = .    
1de0: 20 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28    ROUND8(sizeof(
1df0: 56 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32  VdbeCursor)) + 2
1e00: 2a 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69  *sizeof(u32)*nFi
1e10: 65 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 69 73  eld + .      (is
1e20: 42 74 72 65 65 43 75 72 73 6f 72 3f 73 71 6c 69  BtreeCursor?sqli
1e30: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 53 69  te3BtreeCursorSi
1e40: 7a 65 28 29 3a 30 29 3b 0a 0a 20 20 61 73 73 65  ze():0);..  asse
1e50: 72 74 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72  rt( iCur<p->nCur
1e60: 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e  sor );.  if( p->
1e70: 61 70 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20  apCsr[iCur] ){. 
1e80: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72     sqlite3VdbeFr
1e90: 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61  eeCursor(p, p->a
1ea0: 70 43 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20  pCsr[iCur]);.   
1eb0: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20   p->apCsr[iCur] 
1ec0: 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53  = 0;.  }.  if( S
1ed0: 51 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65  QLITE_OK==sqlite
1ee0: 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4d 65  3VdbeMemGrow(pMe
1ef0: 6d 2c 20 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a  m, nByte, 0) ){.
1f00: 20 20 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75      p->apCsr[iCu
1f10: 72 5d 20 3d 20 70 43 78 20 3d 20 28 56 64 62 65  r] = pCx = (Vdbe
1f20: 43 75 72 73 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b  Cursor*)pMem->z;
1f30: 0a 20 20 20 20 6d 65 6d 73 65 74 28 70 43 78 2c  .    memset(pCx,
1f40: 20 30 2c 20 73 69 7a 65 6f 66 28 56 64 62 65 43   0, sizeof(VdbeC
1f50: 75 72 73 6f 72 29 29 3b 0a 20 20 20 20 70 43 78  ursor));.    pCx
1f60: 2d 3e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20  ->iDb = iDb;.   
1f70: 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e   pCx->nField = n
1f80: 46 69 65 6c 64 3b 0a 20 20 20 20 69 66 28 20 69  Field;.    if( i
1f90: 73 42 74 72 65 65 43 75 72 73 6f 72 20 29 7b 0a  sBtreeCursor ){.
1fa0: 20 20 20 20 20 20 70 43 78 2d 3e 70 43 75 72 73        pCx->pCurs
1fb0: 6f 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29  or = (BtCursor*)
1fc0: 0a 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d  .          &pMem
1fd0: 2d 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f  ->z[ROUND8(sizeo
1fe0: 66 28 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32  f(VdbeCursor))+2
1ff0: 2a 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69  *sizeof(u32)*nFi
2000: 65 6c 64 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69  eld];.      sqli
2010: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65  te3BtreeCursorZe
2020: 72 6f 28 70 43 78 2d 3e 70 43 75 72 73 6f 72 29  ro(pCx->pCursor)
2030: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65  ;.    }.  }.  re
2040: 74 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a  turn pCx;.}../*.
2050: 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72  ** Try to conver
2060: 74 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61  t a value into a
2070: 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65   numeric represe
2080: 6e 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61  ntation if we ca
2090: 6e 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f  n.** do so witho
20a0: 75 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72  ut loss of infor
20b0: 6d 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65  mation.  In othe
20c0: 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20  r words, if the 
20d0: 73 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20  string.** looks 
20e0: 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63  like a number, c
20f0: 6f 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61  onvert it into a
2100: 20 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20   number.  If it 
2110: 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b  does not.** look
2120: 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20   like a number, 
2130: 6c 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a  leave it alone..
2140: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 62 54 72  **.** If the bTr
2150: 79 46 6f 72 49 6e 74 20 66 6c 61 67 20 69 73 20  yForInt flag is 
2160: 74 72 75 65 2c 20 74 68 65 6e 20 65 78 74 72 61  true, then extra
2170: 20 65 66 66 6f 72 74 20 69 73 20 6d 61 64 65 20   effort is made 
2180: 74 6f 20 67 69 76 65 0a 2a 2a 20 61 6e 20 69 6e  to give.** an in
2190: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
21a0: 74 69 6f 6e 2e 20 20 53 74 72 69 6e 67 73 20 74  tion.  Strings t
21b0: 68 61 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 66 6c  hat look like fl
21c0: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20  oating point.** 
21d0: 76 61 6c 75 65 73 20 62 75 74 20 77 68 69 63 68  values but which
21e0: 20 68 61 76 65 20 6e 6f 20 66 72 61 63 74 69 6f   have no fractio
21f0: 6e 61 6c 20 63 6f 6d 70 6f 6e 65 6e 74 20 28 65  nal component (e
2200: 78 61 6d 70 6c 65 3a 20 27 34 38 2e 30 30 27 29  xample: '48.00')
2210: 0a 2a 2a 20 77 69 6c 6c 20 68 61 76 65 20 61 20  .** will have a 
2220: 4d 45 4d 5f 49 6e 74 20 72 65 70 72 65 73 65 6e  MEM_Int represen
2230: 74 61 74 69 6f 6e 20 77 68 65 6e 20 62 54 72 79  tation when bTry
2240: 46 6f 72 49 6e 74 20 69 73 20 74 72 75 65 2e 0a  ForInt is true..
2250: 2a 2a 0a 2a 2a 20 49 66 20 62 54 72 79 46 6f 72  **.** If bTryFor
2260: 49 6e 74 20 69 73 20 66 61 6c 73 65 2c 20 74 68  Int is false, th
2270: 65 6e 20 69 66 20 74 68 65 20 69 6e 70 75 74 20  en if the input 
2280: 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 73 20  string contains 
2290: 61 20 64 65 63 69 6d 61 6c 0a 2a 2a 20 70 6f 69  a decimal.** poi
22a0: 6e 74 20 6f 72 20 65 78 70 6f 6e 65 6e 74 69 61  nt or exponentia
22b0: 6c 20 6e 6f 74 61 74 69 6f 6e 2c 20 74 68 65 20  l notation, the 
22c0: 72 65 73 75 6c 74 20 69 73 20 6f 6e 6c 79 20 4d  result is only M
22d0: 45 4d 5f 52 65 61 6c 2c 20 65 76 65 6e 0a 2a 2a  EM_Real, even.**
22e0: 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20   if there is an 
22f0: 65 78 61 63 74 20 69 6e 74 65 67 65 72 20 72 65  exact integer re
2300: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
2310: 74 68 65 20 71 75 61 6e 74 69 74 79 2e 0a 2a 2f  the quantity..*/
2320: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61 70 70  .static void app
2330: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
2340: 79 28 4d 65 6d 20 2a 70 52 65 63 2c 20 69 6e 74  y(Mem *pRec, int
2350: 20 62 54 72 79 46 6f 72 49 6e 74 29 7b 0a 20 20   bTryForInt){.  
2360: 64 6f 75 62 6c 65 20 72 56 61 6c 75 65 3b 0a 20  double rValue;. 
2370: 20 69 36 34 20 69 56 61 6c 75 65 3b 0a 20 20 75   i64 iValue;.  u
2380: 38 20 65 6e 63 20 3d 20 70 52 65 63 2d 3e 65 6e  8 enc = pRec->en
2390: 63 3b 0a 20 20 69 66 28 20 28 70 52 65 63 2d 3e  c;.  if( (pRec->
23a0: 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 3d 3d  flags&MEM_Str)==
23b0: 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66  0 ) return;.  if
23c0: 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 52  ( sqlite3AtoF(pR
23d0: 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c 20  ec->z, &rValue, 
23e0: 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d 30  pRec->n, enc)==0
23f0: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28   ) return;.  if(
2400: 20 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f 69 36   0==sqlite3Atoi6
2410: 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69 56 61 6c  4(pRec->z, &iVal
2420: 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63  ue, pRec->n, enc
2430: 29 20 29 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75  ) ){.    pRec->u
2440: 2e 69 20 3d 20 69 56 61 6c 75 65 3b 0a 20 20 20  .i = iValue;.   
2450: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20   pRec->flags |= 
2460: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 65 6c 73 65  MEM_Int;.  }else
2470: 7b 0a 20 20 20 20 70 52 65 63 2d 3e 72 20 3d 20  {.    pRec->r = 
2480: 72 56 61 6c 75 65 3b 0a 20 20 20 20 70 52 65 63  rValue;.    pRec
2490: 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 52  ->flags |= MEM_R
24a0: 65 61 6c 3b 0a 20 20 20 20 69 66 28 20 62 54 72  eal;.    if( bTr
24b0: 79 46 6f 72 49 6e 74 20 29 20 73 71 6c 69 74 65  yForInt ) sqlite
24c0: 33 56 64 62 65 49 6e 74 65 67 65 72 41 66 66 69  3VdbeIntegerAffi
24d0: 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20 7d 0a  nity(pRec);.  }.
24e0: 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73 73  }../*.** Process
24f0: 69 6e 67 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ing is determine
2500: 20 62 79 20 74 68 65 20 61 66 66 69 6e 69 74 79   by the affinity
2510: 20 70 61 72 61 6d 65 74 65 72 3a 0a 2a 2a 0a 2a   parameter:.**.*
2520: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  * SQLITE_AFF_INT
2530: 45 47 45 52 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f  EGER:.** SQLITE_
2540: 41 46 46 5f 52 45 41 4c 3a 0a 2a 2a 20 53 51 4c  AFF_REAL:.** SQL
2550: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 3a  ITE_AFF_NUMERIC:
2560: 0a 2a 2a 20 20 20 20 54 72 79 20 74 6f 20 63 6f  .**    Try to co
2570: 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20 61 6e  nvert pRec to an
2580: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
2590: 6e 74 61 74 69 6f 6e 20 6f 72 20 61 20 0a 2a 2a  ntation or a .**
25a0: 20 20 20 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69      floating-poi
25b0: 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  nt representatio
25c0: 6e 20 69 66 20 61 6e 20 69 6e 74 65 67 65 72 20  n if an integer 
25d0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 0a 2a  representation.*
25e0: 2a 20 20 20 20 69 73 20 6e 6f 74 20 70 6f 73 73  *    is not poss
25f0: 69 62 6c 65 2e 20 20 4e 6f 74 65 20 74 68 61 74  ible.  Note that
2600: 20 74 68 65 20 69 6e 74 65 67 65 72 20 72 65 70   the integer rep
2610: 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73 0a 2a  resentation is.*
2620: 2a 20 20 20 20 61 6c 77 61 79 73 20 70 72 65 66  *    always pref
2630: 65 72 72 65 64 2c 20 65 76 65 6e 20 69 66 20 74  erred, even if t
2640: 68 65 20 61 66 66 69 6e 69 74 79 20 69 73 20 52  he affinity is R
2650: 45 41 4c 2c 20 62 65 63 61 75 73 65 0a 2a 2a 20  EAL, because.** 
2660: 20 20 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65     an integer re
2670: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73 20  presentation is 
2680: 6d 6f 72 65 20 73 70 61 63 65 20 65 66 66 69 63  more space effic
2690: 69 65 6e 74 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2a  ient on disk..**
26a0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  .** SQLITE_AFF_T
26b0: 45 58 54 3a 0a 2a 2a 20 20 20 20 43 6f 6e 76 65  EXT:.**    Conve
26c0: 72 74 20 70 52 65 63 20 74 6f 20 61 20 74 65 78  rt pRec to a tex
26d0: 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  t representation
26e0: 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  ..**.** SQLITE_A
26f0: 46 46 5f 4e 4f 4e 45 3a 0a 2a 2a 20 20 20 20 4e  FF_NONE:.**    N
2700: 6f 2d 6f 70 2e 20 20 70 52 65 63 20 69 73 20 75  o-op.  pRec is u
2710: 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 73 74 61  nchanged..*/.sta
2720: 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79 41 66  tic void applyAf
2730: 66 69 6e 69 74 79 28 0a 20 20 4d 65 6d 20 2a 70  finity(.  Mem *p
2740: 52 65 63 2c 20 20 20 20 20 20 20 20 20 20 2f 2a  Rec,          /*
2750: 20 54 68 65 20 76 61 6c 75 65 20 74 6f 20 61 70   The value to ap
2760: 70 6c 79 20 61 66 66 69 6e 69 74 79 20 74 6f 20  ply affinity to 
2770: 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  */.  char affini
2780: 74 79 2c 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ty,      /* The 
2790: 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61  affinity to be a
27a0: 70 70 6c 69 65 64 20 2a 2f 0a 20 20 75 38 20 65  pplied */.  u8 e
27b0: 6e 63 20 20 20 20 20 20 20 20 20 20 20 20 20 20  nc              
27c0: 2f 2a 20 55 73 65 20 74 68 69 73 20 74 65 78 74  /* Use this text
27d0: 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 29 7b 0a   encoding */.){.
27e0: 20 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d 3d    if( affinity==
27f0: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20  SQLITE_AFF_TEXT 
2800: 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61  ){.    /* Only a
2810: 74 74 65 6d 70 74 20 74 68 65 20 63 6f 6e 76 65  ttempt the conve
2820: 72 73 69 6f 6e 20 74 6f 20 54 45 58 54 20 69 66  rsion to TEXT if
2830: 20 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e 74   there is an int
2840: 65 67 65 72 20 6f 72 20 72 65 61 6c 0a 20 20 20  eger or real.   
2850: 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69   ** representati
2860: 6f 6e 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55 4c  on (blob and NUL
2870: 4c 20 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f 6e  L do not get con
2880: 76 65 72 74 65 64 29 20 62 75 74 20 6e 6f 20 73  verted) but no s
2890: 74 72 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 70  tring.    ** rep
28a0: 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 20 20 20  resentation..   
28b0: 20 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d 28   */.    if( 0==(
28c0: 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pRec->flags&MEM_
28d0: 53 74 72 29 20 26 26 20 28 70 52 65 63 2d 3e 66  Str) && (pRec->f
28e0: 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d  lags&(MEM_Real|M
28f0: 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20 20 20 20  EM_Int)) ){.    
2900: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2910: 53 74 72 69 6e 67 69 66 79 28 70 52 65 63 2c 20  Stringify(pRec, 
2920: 65 6e 63 2c 20 31 29 3b 0a 20 20 20 20 7d 0a 20  enc, 1);.    }. 
2930: 20 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e   }else if( affin
2940: 69 74 79 21 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity!=SQLITE_AFF_
2950: 4e 4f 4e 45 20 29 7b 0a 20 20 20 20 61 73 73 65  NONE ){.    asse
2960: 72 74 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51  rt( affinity==SQ
2970: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
2980: 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51   || affinity==SQ
2990: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 0a 20 20  LITE_AFF_REAL.  
29a0: 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 61 66             || af
29b0: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
29c0: 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20  FF_NUMERIC );.  
29d0: 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61    if( (pRec->fla
29e0: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
29f0: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 70   ){.      if( (p
2a00: 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Rec->flags & MEM
2a10: 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Real)==0 ){.   
2a20: 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69       applyNumeri
2a30: 63 41 66 66 69 6e 69 74 79 28 70 52 65 63 2c 31  cAffinity(pRec,1
2a40: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
2a50: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
2a60: 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69  dbeIntegerAffini
2a70: 74 79 28 70 52 65 63 29 3b 0a 20 20 20 20 20 20  ty(pRec);.      
2a80: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f  }.    }.  }.}../
2a90: 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76  *.** Try to conv
2aa0: 65 72 74 20 74 68 65 20 74 79 70 65 20 6f 66 20  ert the type of 
2ab0: 61 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d  a function argum
2ac0: 65 6e 74 20 6f 72 20 61 20 72 65 73 75 6c 74 20  ent or a result 
2ad0: 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61  column.** into a
2ae0: 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65   numeric represe
2af0: 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65 20 65 69  ntation.  Use ei
2b00: 74 68 65 72 20 49 4e 54 45 47 45 52 20 6f 72 20  ther INTEGER or 
2b10: 52 45 41 4c 20 77 68 69 63 68 65 76 65 72 0a 2a  REAL whichever.*
2b20: 2a 20 69 73 20 61 70 70 72 6f 70 72 69 61 74 65  * is appropriate
2b30: 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20 74  .  But only do t
2b40: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 66  he conversion if
2b50: 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
2b60: 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20  without.** loss 
2b70: 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  of information a
2b80: 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20 72 65  nd return the re
2b90: 76 69 73 65 64 20 74 79 70 65 20 6f 66 20 74 68  vised type of th
2ba0: 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69  e argument..*/.i
2bb0: 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt sqlite3_value
2bc0: 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73 71  _numeric_type(sq
2bd0: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
2be0: 6c 29 7b 0a 20 20 69 6e 74 20 65 54 79 70 65 20  l){.  int eType 
2bf0: 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  = sqlite3_value_
2c00: 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 69 66  type(pVal);.  if
2c10: 28 20 65 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f  ( eType==SQLITE_
2c20: 54 45 58 54 20 29 7b 0a 20 20 20 20 4d 65 6d 20  TEXT ){.    Mem 
2c30: 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70 56  *pMem = (Mem*)pV
2c40: 61 6c 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75 6d  al;.    applyNum
2c50: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d 65  ericAffinity(pMe
2c60: 6d 2c 20 30 29 3b 0a 20 20 20 20 65 54 79 70 65  m, 0);.    eType
2c70: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
2c80: 5f 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 7d  _type(pVal);.  }
2c90: 0a 20 20 72 65 74 75 72 6e 20 65 54 79 70 65 3b  .  return eType;
2ca0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74  .}../*.** Export
2cb0: 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61 70  ed version of ap
2cc0: 70 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20 54  plyAffinity(). T
2cd0: 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e  his one works on
2ce0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c   sqlite3_value*,
2cf0: 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e 74   .** not the int
2d00: 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65 2e  ernal Mem* type.
2d10: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
2d20: 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69  ValueApplyAffini
2d30: 74 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  ty(.  sqlite3_va
2d40: 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75 38  lue *pVal, .  u8
2d50: 20 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75 38   affinity, .  u8
2d60: 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79 41   enc.){.  applyA
2d70: 66 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29 70  ffinity((Mem *)p
2d80: 56 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20 65  Val, affinity, e
2d90: 6e 63 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70 4d  nc);.}../*.** pM
2da0: 65 6d 20 63 75 72 72 65 6e 74 6c 79 20 6f 6e 6c  em currently onl
2db0: 79 20 68 6f 6c 64 73 20 61 20 73 74 72 69 6e 67  y holds a string
2dc0: 20 74 79 70 65 20 28 6f 72 20 6d 61 79 62 65 20   type (or maybe 
2dd0: 61 20 42 4c 4f 42 20 74 68 61 74 20 77 65 20 63  a BLOB that we c
2de0: 61 6e 0a 2a 2a 20 69 6e 74 65 72 70 72 65 74 20  an.** interpret 
2df0: 61 73 20 61 20 73 74 72 69 6e 67 20 69 66 20 77  as a string if w
2e00: 65 20 77 61 6e 74 20 74 6f 29 2e 20 20 43 6f 6d  e want to).  Com
2e10: 70 75 74 65 20 69 74 73 20 63 6f 72 72 65 73 70  pute its corresp
2e20: 6f 6e 64 69 6e 67 0a 2a 2a 20 6e 75 6d 65 72 69  onding.** numeri
2e30: 63 20 74 79 70 65 2c 20 69 66 20 68 61 73 20 6f  c type, if has o
2e40: 6e 65 2e 20 20 53 65 74 20 74 68 65 20 70 4d 65  ne.  Set the pMe
2e50: 6d 2d 3e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e 75  m->r and pMem->u
2e60: 2e 69 20 66 69 65 6c 64 73 0a 2a 2a 20 61 63 63  .i fields.** acc
2e70: 6f 72 64 69 6e 67 6c 79 2e 0a 2a 2f 0a 73 74 61  ordingly..*/.sta
2e80: 74 69 63 20 75 31 36 20 53 51 4c 49 54 45 5f 4e  tic u16 SQLITE_N
2e90: 4f 49 4e 4c 49 4e 45 20 63 6f 6d 70 75 74 65 4e  OINLINE computeN
2ea0: 75 6d 65 72 69 63 54 79 70 65 28 4d 65 6d 20 2a  umericType(Mem *
2eb0: 70 4d 65 6d 29 7b 0a 20 20 61 73 73 65 72 74 28  pMem){.  assert(
2ec0: 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20   (pMem->flags & 
2ed0: 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  (MEM_Int|MEM_Rea
2ee0: 6c 29 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  l))==0 );.  asse
2ef0: 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73  rt( (pMem->flags
2f00: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
2f10: 42 6c 6f 62 29 29 21 3d 30 20 29 3b 0a 20 20 69  Blob))!=0 );.  i
2f20: 66 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70  f( sqlite3AtoF(p
2f30: 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 72  Mem->z, &pMem->r
2f40: 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d  , pMem->n, pMem-
2f50: 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a 20 20 20 20  >enc)==0 ){.    
2f60: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20  return 0;.  }.  
2f70: 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 69 36  if( sqlite3Atoi6
2f80: 34 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d  4(pMem->z, &pMem
2f90: 2d 3e 75 2e 69 2c 20 70 4d 65 6d 2d 3e 6e 2c 20  ->u.i, pMem->n, 
2fa0: 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 53 51 4c 49  pMem->enc)==SQLI
2fb0: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74  TE_OK ){.    ret
2fc0: 75 72 6e 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d  urn MEM_Int;.  }
2fd0: 0a 20 20 72 65 74 75 72 6e 20 4d 45 4d 5f 52 65  .  return MEM_Re
2fe0: 61 6c 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  al;.}../*.** Ret
2ff0: 75 72 6e 20 74 68 65 20 6e 75 6d 65 72 69 63 20  urn the numeric 
3000: 74 79 70 65 20 66 6f 72 20 70 4d 65 6d 2c 20 65  type for pMem, e
3010: 69 74 68 65 72 20 4d 45 4d 5f 49 6e 74 20 6f 72  ither MEM_Int or
3020: 20 4d 45 4d 5f 52 65 61 6c 20 6f 72 20 62 6f 74   MEM_Real or bot
3030: 68 20 6f 72 0a 2a 2a 20 6e 6f 6e 65 2e 20 20 0a  h or.** none.  .
3040: 2a 2a 0a 2a 2a 20 55 6e 6c 69 6b 65 20 61 70 70  **.** Unlike app
3050: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
3060: 79 28 29 2c 20 74 68 69 73 20 72 6f 75 74 69 6e  y(), this routin
3070: 65 20 64 6f 65 73 20 6e 6f 74 20 6d 6f 64 69 66  e does not modif
3080: 79 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 2e 0a 2a  y pMem->flags..*
3090: 2a 20 42 75 74 20 69 74 20 64 6f 65 73 20 73 65  * But it does se
30a0: 74 20 70 4d 65 6d 2d 3e 72 20 61 6e 64 20 70 4d  t pMem->r and pM
30b0: 65 6d 2d 3e 75 2e 69 20 61 70 70 72 6f 70 72 69  em->u.i appropri
30c0: 61 74 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63  ately..*/.static
30d0: 20 75 31 36 20 6e 75 6d 65 72 69 63 54 79 70 65   u16 numericType
30e0: 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69  (Mem *pMem){.  i
30f0: 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  f( pMem->flags &
3100: 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65   (MEM_Int|MEM_Re
3110: 61 6c 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72  al) ){.    retur
3120: 6e 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20  n pMem->flags & 
3130: 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  (MEM_Int|MEM_Rea
3140: 6c 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4d  l);.  }.  if( pM
3150: 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  em->flags & (MEM
3160: 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29  _Str|MEM_Blob) )
3170: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6d  {.    return com
3180: 70 75 74 65 4e 75 6d 65 72 69 63 54 79 70 65 28  puteNumericType(
3190: 70 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 72 65 74  pMem);.  }.  ret
31a0: 75 72 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64 65 66  urn 0;.}..#ifdef
31b0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a   SQLITE_DEBUG./*
31c0: 0a 2a 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65  .** Write a nice
31d0: 20 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e   string represen
31e0: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f  tation of the co
31f0: 6e 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70  ntents of cell p
3200: 4d 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66  Mem.** into buff
3210: 65 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20  er zBuf, length 
3220: 6e 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  nBuf..*/.void sq
3230: 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74  lite3VdbeMemPret
3240: 74 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65  tyPrint(Mem *pMe
3250: 6d 2c 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a  m, char *zBuf){.
3260: 20 20 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a    char *zCsr = z
3270: 42 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70  Buf;.  int f = p
3280: 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73  Mem->flags;..  s
3290: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
32a0: 20 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73   *const encnames
32b0: 5b 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38  [] = {"(X)", "(8
32c0: 29 22 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28  )", "(16LE)", "(
32d0: 31 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20  16BE)"};..  if( 
32e0: 66 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20  f&MEM_Blob ){.  
32f0: 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61    int i;.    cha
3300: 72 20 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26  r c;.    if( f &
3310: 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20   MEM_Dyn ){.    
3320: 20 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20    c = 'z';.     
3330: 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d   assert( (f & (M
3340: 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70  EM_Static|MEM_Ep
3350: 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  hem))==0 );.    
3360: 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45  }else if( f & ME
3370: 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20  M_Static ){.    
3380: 20 20 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20    c = 't';.     
3390: 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d   assert( (f & (M
33a0: 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d  EM_Dyn|MEM_Ephem
33b0: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
33c0: 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45  se if( f & MEM_E
33d0: 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20  phem ){.      c 
33e0: 3d 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73  = 'e';.      ass
33f0: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53  ert( (f & (MEM_S
3400: 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d  tatic|MEM_Dyn))=
3410: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =0 );.    }else{
3420: 0a 20 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a  .      c = 's';.
3430: 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74      }..    sqlit
3440: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
3450: 20 7a 43 73 72 2c 20 22 25 63 22 2c 20 63 29 3b   zCsr, "%c", c);
3460: 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c  .    zCsr += sql
3470: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73  ite3Strlen30(zCs
3480: 72 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  r);.    sqlite3_
3490: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
34a0: 73 72 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d  sr, "%d[", pMem-
34b0: 3e 6e 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d  >n);.    zCsr +=
34c0: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
34d0: 28 7a 43 73 72 29 3b 0a 20 20 20 20 66 6f 72 28  (zCsr);.    for(
34e0: 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70  i=0; i<16 && i<p
34f0: 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20  Mem->n; i++){.  
3500: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
3510: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20  intf(100, zCsr, 
3520: 22 25 30 32 58 22 2c 20 28 28 69 6e 74 29 70 4d  "%02X", ((int)pM
3530: 65 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29  em->z[i] & 0xFF)
3540: 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d  );.      zCsr +=
3550: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
3560: 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20  (zCsr);.    }.  
3570: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20    for(i=0; i<16 
3580: 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b  && i<pMem->n; i+
3590: 2b 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a  +){.      char z
35a0: 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20   = pMem->z[i];. 
35b0: 20 20 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c       if( z<32 ||
35c0: 20 7a 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b   z>126 ) *zCsr++
35d0: 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c   = '.';.      el
35e0: 73 65 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a  se *zCsr++ = z;.
35f0: 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74      }..    sqlit
3600: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
3610: 20 7a 43 73 72 2c 20 22 5d 25 73 22 2c 20 65 6e   zCsr, "]%s", en
3620: 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63  cnames[pMem->enc
3630: 5d 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20  ]);.    zCsr += 
3640: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3650: 7a 43 73 72 29 3b 0a 20 20 20 20 69 66 28 20 66  zCsr);.    if( f
3660: 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20   & MEM_Zero ){. 
3670: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70       sqlite3_snp
3680: 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c  rintf(100, zCsr,
3690: 22 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e  "+%dz",pMem->u.n
36a0: 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73  Zero);.      zCs
36b0: 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  r += sqlite3Strl
36c0: 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20  en30(zCsr);.    
36d0: 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c  }.    *zCsr = '\
36e0: 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  0';.  }else if( 
36f0: 66 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20  f & MEM_Str ){. 
3700: 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20     int j, k;.   
3710: 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a   zBuf[0] = ' ';.
3720: 20 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f      if( f & MEM_
3730: 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 7a 42 75  Dyn ){.      zBu
3740: 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20  f[1] = 'z';.    
3750: 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28    assert( (f & (
3760: 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45  MEM_Static|MEM_E
3770: 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20  phem))==0 );.   
3780: 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d   }else if( f & M
3790: 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20  EM_Static ){.   
37a0: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27     zBuf[1] = 't'
37b0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
37c0: 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45  (f & (MEM_Dyn|ME
37d0: 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a  M_Ephem))==0 );.
37e0: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20      }else if( f 
37f0: 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20  & MEM_Ephem ){. 
3800: 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27       zBuf[1] = '
3810: 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  e';.      assert
3820: 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74  ( (f & (MEM_Stat
3830: 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20  ic|MEM_Dyn))==0 
3840: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
3850: 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73      zBuf[1] = 's
3860: 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d  ';.    }.    k =
3870: 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   2;.    sqlite3_
3880: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 26 7a  snprintf(100, &z
3890: 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d  Buf[k], "%d", pM
38a0: 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d  em->n);.    k +=
38b0: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
38c0: 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20  (&zBuf[k]);.    
38d0: 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b  zBuf[k++] = '[';
38e0: 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c  .    for(j=0; j<
38f0: 31 35 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b  15 && j<pMem->n;
3900: 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 75 38 20   j++){.      u8 
3910: 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a  c = pMem->z[j];.
3920: 20 20 20 20 20 20 69 66 28 20 63 3e 3d 30 78 32        if( c>=0x2
3930: 30 20 26 26 20 63 3c 30 78 37 66 20 29 7b 0a 20  0 && c<0x7f ){. 
3940: 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d         zBuf[k++]
3950: 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73   = c;.      }els
3960: 65 7b 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b  e{.        zBuf[
3970: 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20  k++] = '.';.    
3980: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42    }.    }.    zB
3990: 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20  uf[k++] = ']';. 
39a0: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
39b0: 6e 74 66 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d  ntf(100,&zBuf[k]
39c0: 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d  , encnames[pMem-
39d0: 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d  >enc]);.    k +=
39e0: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
39f0: 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20  (&zBuf[k]);.    
3a00: 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20  zBuf[k++] = 0;. 
3a10: 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66   }.}.#endif..#if
3a20: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
3a30: 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65  ./*.** Print the
3a40: 20 76 61 6c 75 65 20 6f 66 20 61 20 72 65 67 69   value of a regi
3a50: 73 74 65 72 20 66 6f 72 20 74 72 61 63 69 6e 67  ster for tracing
3a60: 20 70 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74   purposes:.*/.st
3a70: 61 74 69 63 20 76 6f 69 64 20 6d 65 6d 54 72 61  atic void memTra
3a80: 63 65 50 72 69 6e 74 28 4d 65 6d 20 2a 70 29 7b  cePrint(Mem *p){
3a90: 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20  .  if( p->flags 
3aa0: 26 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 20  & MEM_Undefined 
3ab0: 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20  ){.    printf(" 
3ac0: 75 6e 64 65 66 69 6e 65 64 22 29 3b 0a 20 20 7d  undefined");.  }
3ad0: 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67  else if( p->flag
3ae0: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
3af0: 20 20 20 20 70 72 69 6e 74 66 28 22 20 4e 55 4c      printf(" NUL
3b00: 4c 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  L");.  }else if(
3b10: 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45   (p->flags & (ME
3b20: 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d  M_Int|MEM_Str))=
3b30: 3d 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74  =(MEM_Int|MEM_St
3b40: 72 29 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66  r) ){.    printf
3b50: 28 22 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e  (" si:%lld", p->
3b60: 75 2e 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  u.i);.  }else if
3b70: 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ( p->flags & MEM
3b80: 5f 49 6e 74 20 29 7b 0a 20 20 20 20 70 72 69 6e  _Int ){.    prin
3b90: 74 66 28 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d  tf(" i:%lld", p-
3ba0: 3e 75 2e 69 29 3b 0a 23 69 66 6e 64 65 66 20 53  >u.i);.#ifndef S
3bb0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
3bc0: 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c 73  ING_POINT.  }els
3bd0: 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26  e if( p->flags &
3be0: 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20   MEM_Real ){.   
3bf0: 20 70 72 69 6e 74 66 28 22 20 72 3a 25 67 22 2c   printf(" r:%g",
3c00: 20 70 2d 3e 72 29 3b 0a 23 65 6e 64 69 66 0a 20   p->r);.#endif. 
3c10: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
3c20: 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
3c30: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
3c40: 20 28 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d   (rowset)");.  }
3c50: 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a  else{.    char z
3c60: 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71  Buf[200];.    sq
3c70: 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74  lite3VdbeMemPret
3c80: 74 79 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29  tyPrint(p, zBuf)
3c90: 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 25  ;.    printf(" %
3ca0: 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 7d  s", zBuf);.  }.}
3cb0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72 65 67  .static void reg
3cc0: 69 73 74 65 72 54 72 61 63 65 28 69 6e 74 20 69  isterTrace(int i
3cd0: 52 65 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20  Reg, Mem *p){.  
3ce0: 70 72 69 6e 74 66 28 22 52 45 47 5b 25 64 5d 20  printf("REG[%d] 
3cf0: 3d 20 22 2c 20 69 52 65 67 29 3b 0a 20 20 6d 65  = ", iReg);.  me
3d00: 6d 54 72 61 63 65 50 72 69 6e 74 28 70 29 3b 0a  mTracePrint(p);.
3d10: 20 20 70 72 69 6e 74 66 28 22 5c 6e 22 29 3b 0a    printf("\n");.
3d20: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  }.#endif..#ifdef
3d30: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20   SQLITE_DEBUG.# 
3d40: 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52   define REGISTER
3d50: 5f 54 52 41 43 45 28 52 2c 4d 29 20 69 66 28 64  _TRACE(R,M) if(d
3d60: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
3d70: 56 64 62 65 54 72 61 63 65 29 72 65 67 69 73 74  VdbeTrace)regist
3d80: 65 72 54 72 61 63 65 28 52 2c 4d 29 0a 23 65 6c  erTrace(R,M).#el
3d90: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47  se.#  define REG
3da0: 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29  ISTER_TRACE(R,M)
3db0: 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65 66  .#endif...#ifdef
3dc0: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f   VDBE_PROFILE../
3dd0: 2a 20 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20 63  * .** hwtime.h c
3de0: 6f 6e 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20 61  ontains inline a
3df0: 73 73 65 6d 62 6c 65 72 20 63 6f 64 65 20 66 6f  ssembler code fo
3e00: 72 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a  r implementing .
3e10: 2a 2a 20 68 69 67 68 2d 70 65 72 66 6f 72 6d 61  ** high-performa
3e20: 6e 63 65 20 74 69 6d 69 6e 67 20 72 6f 75 74 69  nce timing routi
3e30: 6e 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65  nes..*/.#include
3e40: 20 22 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65 6e   "hwtime.h"..#en
3e50: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45  dif..#ifndef NDE
3e60: 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66  BUG./*.** This f
3e70: 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  unction is only 
3e80: 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
3e90: 69 6e 20 61 6e 20 61 73 73 65 72 74 28 29 20 65  in an assert() e
3ea0: 78 70 72 65 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a  xpression. It.**
3eb0: 20 63 68 65 63 6b 73 20 74 68 61 74 20 74 68 65   checks that the
3ec0: 20 73 71 6c 69 74 65 33 2e 6e 54 72 61 6e 73 61   sqlite3.nTransa
3ed0: 63 74 69 6f 6e 20 76 61 72 69 61 62 6c 65 20 69  ction variable i
3ee0: 73 20 63 6f 72 72 65 63 74 6c 79 20 73 65 74 20  s correctly set 
3ef0: 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  to.** the number
3f00: 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74   of non-transact
3f10: 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 63  ion savepoints c
3f20: 75 72 72 65 6e 74 6c 79 20 69 6e 20 74 68 65 20  urrently in the 
3f30: 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  .** linked list 
3f40: 73 74 61 72 74 69 6e 67 20 61 74 20 73 71 6c 69  starting at sqli
3f50: 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 0a  te3.pSavepoint..
3f60: 2a 2a 20 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a  ** .** Usage:.**
3f70: 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20  .**     assert( 
3f80: 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f  checkSavepointCo
3f90: 75 6e 74 28 64 62 29 20 29 3b 0a 2a 2f 0a 73 74  unt(db) );.*/.st
3fa0: 61 74 69 63 20 69 6e 74 20 63 68 65 63 6b 53 61  atic int checkSa
3fb0: 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 73 71 6c  vepointCount(sql
3fc0: 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74  ite3 *db){.  int
3fd0: 20 6e 20 3d 20 30 3b 0a 20 20 53 61 76 65 70 6f   n = 0;.  Savepo
3fe0: 69 6e 74 20 2a 70 3b 0a 20 20 66 6f 72 28 70 3d  int *p;.  for(p=
3ff0: 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20  db->pSavepoint; 
4000: 70 3b 20 70 3d 70 2d 3e 70 4e 65 78 74 29 20 6e  p; p=p->pNext) n
4010: 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d  ++;.  assert( n=
4020: 3d 28 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  =(db->nSavepoint
4030: 20 2b 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63   + db->isTransac
4040: 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 29 20 29  tionSavepoint) )
4050: 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a  ;.  return 1;.}.
4060: 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 45  #endif.../*.** E
4070: 78 65 63 75 74 65 20 61 73 20 6d 75 63 68 20 6f  xecute as much o
4080: 66 20 61 20 56 44 42 45 20 70 72 6f 67 72 61 6d  f a VDBE program
4090: 20 61 73 20 77 65 20 63 61 6e 2e 0a 2a 2a 20 54   as we can..** T
40a0: 68 69 73 20 69 73 20 74 68 65 20 63 6f 72 65 20  his is the core 
40b0: 6f 66 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  of sqlite3_step(
40c0: 29 2e 20 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ).  .*/.int sqli
40d0: 74 65 33 56 64 62 65 45 78 65 63 28 0a 20 20 56  te3VdbeExec(.  V
40e0: 64 62 65 20 2a 70 20 20 20 20 20 20 20 20 20 20  dbe *p          
40f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
4100: 20 56 44 42 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e   VDBE */.){.  in
4110: 74 20 70 63 3d 30 3b 20 20 20 20 20 20 20 20 20  t pc=0;         
4120: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
4130: 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20  program counter 
4140: 2a 2f 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20 70  */.  Op *aOp = p
4150: 2d 3e 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20  ->aOp;          
4160: 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4f  /* Copy of p->aO
4170: 70 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 3b 20  p */.  Op *pOp; 
4180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4190: 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70 65    /* Current ope
41a0: 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20  ration */.  int 
41b0: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20  rc = SQLITE_OK; 
41c0: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
41d0: 74 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73  to return */.  s
41e0: 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e  qlite3 *db = p->
41f0: 64 62 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  db;       /* The
4200: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75   database */.  u
4210: 38 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46  8 resetSchemaOnF
4220: 61 75 6c 74 20 3d 20 30 3b 20 2f 2a 20 52 65 73  ault = 0; /* Res
4230: 65 74 20 73 63 68 65 6d 61 20 61 66 74 65 72 20  et schema after 
4240: 61 6e 20 65 72 72 6f 72 20 69 66 20 70 6f 73 69  an error if posi
4250: 74 69 76 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63  tive */.  u8 enc
4260: 6f 64 69 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b  oding = ENC(db);
4270: 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
4280: 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f  base encoding */
4290: 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61 72 65 20  .  int iCompare 
42a0: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  = 0;          /*
42b0: 20 52 65 73 75 6c 74 20 6f 66 20 6c 61 73 74 20   Result of last 
42c0: 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61  OP_Compare opera
42d0: 74 69 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  tion */.  unsign
42e0: 65 64 20 6e 56 6d 53 74 65 70 20 3d 20 30 3b 20  ed nVmStep = 0; 
42f0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
4300: 66 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  f virtual machin
4310: 65 20 73 74 65 70 73 20 2a 2f 0a 23 69 66 6e 64  e steps */.#ifnd
4320: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
4330: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
4340: 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f  .  unsigned nPro
4350: 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 30 3b 2f  gressLimit = 0;/
4360: 2a 20 49 6e 76 6f 6b 65 20 78 50 72 6f 67 72 65  * Invoke xProgre
4370: 73 73 28 29 20 77 68 65 6e 20 6e 56 6d 53 74 65  ss() when nVmSte
4380: 70 20 72 65 61 63 68 65 73 20 74 68 69 73 20 2a  p reaches this *
4390: 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a  /.#endif.  Mem *
43a0: 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20  aMem = p->aMem; 
43b0: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
43c0: 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65   p->aMem */.  Me
43d0: 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20 20  m *pIn1 = 0;    
43e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20           /* 1st 
43f0: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
4400: 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30  .  Mem *pIn2 = 0
4410: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
4420: 20 32 6e 64 20 69 6e 70 75 74 20 6f 70 65 72 61   2nd input opera
4430: 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e  nd */.  Mem *pIn
4440: 33 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  3 = 0;          
4450: 20 20 20 2f 2a 20 33 72 64 20 69 6e 70 75 74 20     /* 3rd input 
4460: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d  operand */.  Mem
4470: 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20 20 20   *pOut = 0;     
4480: 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75          /* Outpu
4490: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69  t operand */.  i
44a0: 6e 74 20 2a 61 50 65 72 6d 75 74 65 20 3d 20 30  nt *aPermute = 0
44b0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50 65 72  ;         /* Per
44c0: 6d 75 74 61 74 69 6f 6e 20 6f 66 20 63 6f 6c 75  mutation of colu
44d0: 6d 6e 73 20 66 6f 72 20 4f 50 5f 43 6f 6d 70 61  mns for OP_Compa
44e0: 72 65 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74  re */.  i64 last
44f0: 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74  Rowid = db->last
4500: 52 6f 77 69 64 3b 20 20 2f 2a 20 53 61 76 65 64  Rowid;  /* Saved
4510: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6c 61   value of the la
4520: 73 74 20 69 6e 73 65 72 74 20 52 4f 57 49 44 20  st insert ROWID 
4530: 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  */.#ifdef VDBE_P
4540: 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61  ROFILE.  u64 sta
4550: 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rt;             
4560: 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b      /* CPU clock
4570: 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20   count at start 
4580: 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e  of opcode */.#en
4590: 64 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52  dif.  /*** INSER
45a0: 54 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45  T STACK UNION HE
45b0: 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72  RE ***/..  asser
45c0: 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42  t( p->magic==VDB
45d0: 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20  E_MAGIC_RUN );  
45e0: 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  /* sqlite3_step(
45f0: 29 20 76 65 72 69 66 69 65 73 20 74 68 69 73 20  ) verifies this 
4600: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
4610: 45 6e 74 65 72 28 70 29 3b 0a 20 20 69 66 28 20  Enter(p);.  if( 
4620: 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f  p->rc==SQLITE_NO
4630: 4d 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  MEM ){.    /* Th
4640: 69 73 20 68 61 70 70 65 6e 73 20 69 66 20 61 20  is happens if a 
4650: 6d 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20  malloc() inside 
4660: 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65  a call to sqlite
4670: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20  3_column_text() 
4680: 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  or.    ** sqlite
4690: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28  3_column_text16(
46a0: 29 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20  ) failed.  */.  
46b0: 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
46c0: 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e   }.  assert( p->
46d0: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
46e0: 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 42   p->rc==SQLITE_B
46f0: 55 53 59 20 7c 7c 20 28 28 70 2d 3e 72 63 26 30  USY || ((p->rc&0
4700: 78 46 46 29 20 3d 3d 20 53 51 4c 49 54 45 5f 4c  xFF) == SQLITE_L
4710: 4f 43 4b 45 44 29 29 3b 0a 20 20 61 73 73 65 72  OCKED));.  asser
4720: 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
4730: 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 21 3d  || p->readOnly!=
4740: 30 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 53  0 );.  p->rc = S
4750: 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 70 2d 3e 69  QLITE_OK;.  p->i
4760: 43 75 72 72 65 6e 74 54 69 6d 65 20 3d 20 30 3b  CurrentTime = 0;
4770: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 65 78  .  assert( p->ex
4780: 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d  plain==0 );.  p-
4790: 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 30 3b  >pResultSet = 0;
47a0: 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c  .  db->busyHandl
47b0: 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20  er.nBusy = 0;.  
47c0: 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74  if( db->u1.isInt
47d0: 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20  errupted ) goto 
47e0: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74  abort_due_to_int
47f0: 65 72 72 75 70 74 3b 0a 20 20 73 71 6c 69 74 65  errupt;.  sqlite
4800: 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28  3VdbeIOTraceSql(
4810: 70 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  p);.#ifndef SQLI
4820: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
4830: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 66 28 20  _CALLBACK.  if( 
4840: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 29 7b  db->xProgress ){
4850: 0a 20 20 20 20 61 73 73 65 72 74 28 20 30 20 3c  .    assert( 0 <
4860: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
4870: 73 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65  s );.    nProgre
4880: 73 73 4c 69 6d 69 74 20 3d 20 28 75 6e 73 69 67  ssLimit = (unsig
4890: 6e 65 64 29 70 2d 3e 61 43 6f 75 6e 74 65 72 5b  ned)p->aCounter[
48a0: 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55  SQLITE_STMTSTATU
48b0: 53 5f 56 4d 5f 53 54 45 50 5d 3b 0a 20 20 20 20  S_VM_STEP];.    
48c0: 69 66 28 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d  if( nProgressLim
48d0: 69 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 6e  it==0 ){.      n
48e0: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20  ProgressLimit = 
48f0: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
4900: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
4910: 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69     nProgressLimi
4920: 74 20 25 3d 20 28 75 6e 73 69 67 6e 65 64 29 64  t %= (unsigned)d
4930: 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b  b->nProgressOps;
4940: 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69  .    }.  }.#endi
4950: 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
4960: 44 45 42 55 47 0a 20 20 73 71 6c 69 74 65 33 42  DEBUG.  sqlite3B
4970: 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  eginBenignMalloc
4980: 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d  ();.  if( p->pc=
4990: 3d 30 0a 20 20 20 26 26 20 28 70 2d 3e 64 62 2d  =0.   && (p->db-
49a0: 3e 66 6c 61 67 73 20 26 20 28 53 51 4c 49 54 45  >flags & (SQLITE
49b0: 5f 56 64 62 65 4c 69 73 74 69 6e 67 7c 53 51 4c  _VdbeListing|SQL
49c0: 49 54 45 5f 56 64 62 65 45 51 50 7c 53 51 4c 49  ITE_VdbeEQP|SQLI
49d0: 54 45 5f 56 64 62 65 54 72 61 63 65 29 29 21 3d  TE_VdbeTrace))!=
49e0: 30 0a 20 20 29 7b 0a 20 20 20 20 69 6e 74 20 69  0.  ){.    int i
49f0: 3b 0a 20 20 20 20 69 6e 74 20 6f 6e 63 65 20 3d  ;.    int once =
4a00: 20 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   1;.    sqlite3V
4a10: 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a  dbePrintSql(p);.
4a20: 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66      if( p->db->f
4a30: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64  lags & SQLITE_Vd
4a40: 62 65 4c 69 73 74 69 6e 67 20 29 7b 0a 20 20 20  beListing ){.   
4a50: 20 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20     printf("VDBE 
4a60: 50 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a  Program Listing:
4a70: 5c 6e 22 29 3b 0a 20 20 20 20 20 20 66 6f 72 28  \n");.      for(
4a80: 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69  i=0; i<p->nOp; i
4a90: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  ++){.        sql
4aa0: 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28  ite3VdbePrintOp(
4ab0: 73 74 64 6f 75 74 2c 20 69 2c 20 26 61 4f 70 5b  stdout, i, &aOp[
4ac0: 69 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  i]);.      }.   
4ad0: 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62   }.    if( p->db
4ae0: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
4af0: 5f 56 64 62 65 45 51 50 20 29 7b 0a 20 20 20 20  _VdbeEQP ){.    
4b00: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e    for(i=0; i<p->
4b10: 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  nOp; i++){.     
4b20: 20 20 20 69 66 28 20 61 4f 70 5b 69 5d 2e 6f 70     if( aOp[i].op
4b30: 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e  code==OP_Explain
4b40: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66   ){.          if
4b50: 28 20 6f 6e 63 65 20 29 20 70 72 69 6e 74 66 28  ( once ) printf(
4b60: 22 56 44 42 45 20 51 75 65 72 79 20 50 6c 61 6e  "VDBE Query Plan
4b70: 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 20  :\n");.         
4b80: 20 70 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20   printf("%s\n", 
4b90: 61 4f 70 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20 20  aOp[i].p4.z);.  
4ba0: 20 20 20 20 20 20 20 20 6f 6e 63 65 20 3d 20 30          once = 0
4bb0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
4bc0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66    }.    }.    if
4bd0: 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26  ( p->db->flags &
4be0: 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63   SQLITE_VdbeTrac
4bf0: 65 20 29 20 20 70 72 69 6e 74 66 28 22 56 44 42  e )  printf("VDB
4c00: 45 20 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20  E Trace:\n");.  
4c10: 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e 64 42 65  }.  sqlite3EndBe
4c20: 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65  nignMalloc();.#e
4c30: 6e 64 69 66 0a 20 20 66 6f 72 28 70 63 3d 70 2d  ndif.  for(pc=p-
4c40: 3e 70 63 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f  >pc; rc==SQLITE_
4c50: 4f 4b 3b 20 70 63 2b 2b 29 7b 0a 20 20 20 20 61  OK; pc++){.    a
4c60: 73 73 65 72 74 28 20 70 63 3e 3d 30 20 26 26 20  ssert( pc>=0 && 
4c70: 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 20  pc<p->nOp );.   
4c80: 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46   if( db->mallocF
4c90: 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f  ailed ) goto no_
4ca0: 6d 65 6d 3b 0a 23 69 66 64 65 66 20 56 44 42 45  mem;.#ifdef VDBE
4cb0: 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 73 74 61  _PROFILE.    sta
4cc0: 72 74 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69  rt = sqlite3Hwti
4cd0: 6d 65 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20  me();.#endif.   
4ce0: 20 6e 56 6d 53 74 65 70 2b 2b 3b 0a 20 20 20 20   nVmStep++;.    
4cf0: 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63 5d 3b 0a  pOp = &aOp[pc];.
4d00: 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c  .    /* Only all
4d10: 6f 77 20 74 72 61 63 69 6e 67 20 69 66 20 53 51  ow tracing if SQ
4d20: 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 64 65  LITE_DEBUG is de
4d30: 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69  fined..    */.#i
4d40: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
4d50: 47 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 66 6c  G.    if( db->fl
4d60: 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62  ags & SQLITE_Vdb
4d70: 65 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20  eTrace ){.      
4d80: 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
4d90: 4f 70 28 73 74 64 6f 75 74 2c 20 70 63 2c 20 70  Op(stdout, pc, p
4da0: 4f 70 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  Op);.    }.#endi
4db0: 66 0a 20 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a  f.      ..    /*
4dc0: 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66   Check to see if
4dd0: 20 77 65 20 6e 65 65 64 20 74 6f 20 73 69 6d 75   we need to simu
4de0: 6c 61 74 65 20 61 6e 20 69 6e 74 65 72 72 75 70  late an interrup
4df0: 74 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20 68 61  t.  This only ha
4e00: 70 70 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20  ppens.    ** if 
4e10: 77 65 20 68 61 76 65 20 61 20 73 70 65 63 69 61  we have a specia
4e20: 6c 20 74 65 73 74 20 62 75 69 6c 64 2e 0a 20 20  l test build..  
4e30: 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49    */.#ifdef SQLI
4e40: 54 45 5f 54 45 53 54 0a 20 20 20 20 69 66 28 20  TE_TEST.    if( 
4e50: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
4e60: 74 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20  t_count>0 ){.   
4e70: 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72     sqlite3_inter
4e80: 72 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20  rupt_count--;.  
4e90: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f      if( sqlite3_
4ea0: 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d  interrupt_count=
4eb0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  =0 ){.        sq
4ec0: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28  lite3_interrupt(
4ed0: 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  db);.      }.   
4ee0: 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f   }.#endif..    /
4ef0: 2a 20 4f 6e 20 61 6e 79 20 6f 70 63 6f 64 65 20  * On any opcode 
4f00: 77 69 74 68 20 74 68 65 20 22 6f 75 74 32 2d 70  with the "out2-p
4f10: 72 65 72 65 6c 65 61 73 65 22 20 74 61 67 2c 20  rerelease" tag, 
4f20: 66 72 65 65 20 61 6e 79 0a 20 20 20 20 2a 2a 20  free any.    ** 
4f30: 65 78 74 65 72 6e 61 6c 20 61 6c 6c 6f 63 61 74  external allocat
4f40: 69 6f 6e 73 20 6f 75 74 20 6f 66 20 6d 65 6d 5b  ions out of mem[
4f50: 70 32 5d 20 61 6e 64 20 73 65 74 20 6d 65 6d 5b  p2] and set mem[
4f60: 70 32 5d 20 74 6f 20 62 65 0a 20 20 20 20 2a 2a  p2] to be.    **
4f70: 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 20 69 6e   an undefined in
4f80: 74 65 67 65 72 2e 20 20 4f 70 63 6f 64 65 73 20  teger.  Opcodes 
4f90: 77 69 6c 6c 20 65 69 74 68 65 72 20 66 69 6c 6c  will either fill
4fa0: 20 69 6e 20 74 68 65 20 69 6e 74 65 67 65 72 0a   in the integer.
4fb0: 20 20 20 20 2a 2a 20 76 61 6c 75 65 20 6f 72 20      ** value or 
4fc0: 63 6f 6e 76 65 72 74 20 6d 65 6d 5b 70 32 5d 20  convert mem[p2] 
4fd0: 74 6f 20 61 20 64 69 66 66 65 72 65 6e 74 20 74  to a different t
4fe0: 79 70 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ype..    */.    
4ff0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 66  assert( pOp->opf
5000: 6c 61 67 73 3d 3d 73 71 6c 69 74 65 33 4f 70 63  lags==sqlite3Opc
5010: 6f 64 65 50 72 6f 70 65 72 74 79 5b 70 4f 70 2d  odeProperty[pOp-
5020: 3e 6f 70 63 6f 64 65 5d 20 29 3b 0a 20 20 20 20  >opcode] );.    
5030: 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  if( pOp->opflags
5040: 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52   & OPFLG_OUT2_PR
5050: 45 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20  ERELEASE ){.    
5060: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5070: 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  2>0 );.      ass
5080: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70  ert( pOp->p2<=(p
5090: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
50a0: 72 29 20 29 3b 0a 20 20 20 20 20 20 70 4f 75 74  r) );.      pOut
50b0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
50c0: 5d 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75  ];.      memAbou
50d0: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
50e0: 74 29 3b 0a 20 20 20 20 20 20 56 64 62 65 4d 65  t);.      VdbeMe
50f0: 6d 52 65 6c 65 61 73 65 45 78 74 65 72 6e 28 70  mReleaseExtern(p
5100: 4f 75 74 29 3b 0a 20 20 20 20 20 20 70 4f 75 74  Out);.      pOut
5110: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
5120: 74 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a  t;.    }..    /*
5130: 20 53 61 6e 69 74 79 20 63 68 65 63 6b 69 6e 67   Sanity checking
5140: 20 6f 6e 20 6f 74 68 65 72 20 6f 70 65 72 61 6e   on other operan
5150: 64 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  ds */.#ifdef SQL
5160: 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66  ITE_DEBUG.    if
5170: 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  ( (pOp->opflags 
5180: 26 20 4f 50 46 4c 47 5f 49 4e 31 29 21 3d 30 20  & OPFLG_IN1)!=0 
5190: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
51a0: 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20   pOp->p1>0 );.  
51b0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
51c0: 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p1<=(p->nMem-p-
51d0: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
51e0: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
51f0: 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d  Valid(&aMem[pOp-
5200: 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 61  >p1]) );.      a
5210: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64  ssert( sqlite3Vd
5220: 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69  beCheckMemInvari
5230: 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ants(&aMem[pOp->
5240: 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45  p1]) );.      RE
5250: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
5260: 2d 3e 70 31 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ->p1, &aMem[pOp-
5270: 3e 70 31 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20  >p1]);.    }.   
5280: 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61   if( (pOp->opfla
5290: 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e 32 29 21  gs & OPFLG_IN2)!
52a0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  =0 ){.      asse
52b0: 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b  rt( pOp->p2>0 );
52c0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
52d0: 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p2<=(p->nMem
52e0: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
52f0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
5300: 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
5310: 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20  Op->p2]) );.    
5320: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
5330: 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76  3VdbeCheckMemInv
5340: 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f  ariants(&aMem[pO
5350: 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20  p->p2]) );.     
5360: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
5370: 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70  pOp->p2, &aMem[p
5380: 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a  Op->p2]);.    }.
5390: 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70      if( (pOp->op
53a0: 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e  flags & OPFLG_IN
53b0: 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61  3)!=0 ){.      a
53c0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
53d0: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
53e0: 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  ( pOp->p3<=(p->n
53f0: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
5400: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
5410: 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
5420: 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20  m[pOp->p3]) );. 
5430: 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
5440: 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d  ite3VdbeCheckMem
5450: 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d  Invariants(&aMem
5460: 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20  [pOp->p3]) );.  
5470: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
5480: 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65  CE(pOp->p3, &aMe
5490: 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20  m[pOp->p3]);.   
54a0: 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d   }.    if( (pOp-
54b0: 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47  >opflags & OPFLG
54c0: 5f 4f 55 54 32 29 21 3d 30 20 29 7b 0a 20 20 20  _OUT2)!=0 ){.   
54d0: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
54e0: 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73  p2>0 );.      as
54f0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28  sert( pOp->p2<=(
5500: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
5510: 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d  or) );.      mem
5520: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
5530: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29   &aMem[pOp->p2])
5540: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
5550: 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20  (pOp->opflags & 
5560: 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d 30 20 29  OPFLG_OUT3)!=0 )
5570: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
5580: 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20  pOp->p3>0 );.   
5590: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
55a0: 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
55b0: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
55c0: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
55d0: 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ge(p, &aMem[pOp-
55e0: 3e 70 33 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e  >p3]);.    }.#en
55f0: 64 69 66 0a 20 20 0a 20 20 20 20 73 77 69 74 63  dif.  .    switc
5600: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
5610: 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  {../************
5620: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5630: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5640: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5650: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5660: 2a 0a 2a 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77  *.** What follow
5670: 73 20 69 73 20 61 20 6d 61 73 73 69 76 65 20 73  s is a massive s
5680: 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20  witch statement 
5690: 77 68 65 72 65 20 65 61 63 68 20 63 61 73 65 20  where each case 
56a0: 69 6d 70 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20  implements a.** 
56b0: 73 65 70 61 72 61 74 65 20 69 6e 73 74 72 75 63  separate instruc
56c0: 74 69 6f 6e 20 69 6e 20 74 68 65 20 76 69 72 74  tion in the virt
56d0: 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 66  ual machine.  If
56e0: 20 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75   we follow the u
56f0: 73 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74  sual.** indentat
5700: 69 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c  ion conventions,
5710: 20 65 61 63 68 20 63 61 73 65 20 73 68 6f 75 6c   each case shoul
5720: 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62 79  d be indented by
5730: 20 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 0a   6 spaces.  But.
5740: 2a 2a 20 74 68 61 74 20 69 73 20 61 20 6c 6f 74  ** that is a lot
5750: 20 6f 66 20 77 61 73 74 65 64 20 73 70 61 63 65   of wasted space
5760: 20 6f 6e 20 74 68 65 20 6c 65 66 74 20 6d 61 72   on the left mar
5770: 67 69 6e 2e 20 20 53 6f 20 74 68 65 20 63 6f 64  gin.  So the cod
5780: 65 20 77 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20  e within.** the 
5790: 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74  switch statement
57a0: 20 77 69 6c 6c 20 62 72 65 61 6b 20 77 69 74 68   will break with
57b0: 20 63 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20   convention and 
57c0: 62 65 20 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41  be flush-left. A
57d0: 6e 6f 74 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f  nother.** big co
57e0: 6d 6d 65 6e 74 20 28 73 69 6d 69 6c 61 72 20 74  mment (similar t
57f0: 6f 20 74 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c  o this one) will
5800: 20 6d 61 72 6b 20 74 68 65 20 70 6f 69 6e 74 20   mark the point 
5810: 69 6e 20 74 68 65 20 63 6f 64 65 20 77 68 65 72  in the code wher
5820: 65 0a 2a 2a 20 77 65 20 74 72 61 6e 73 69 74 69  e.** we transiti
5830: 6f 6e 20 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61  on back to norma
5840: 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a  l indentation..*
5850: 2a 0a 2a 2a 20 54 68 65 20 66 6f 72 6d 61 74 74  *.** The formatt
5860: 69 6e 67 20 6f 66 20 65 61 63 68 20 63 61 73 65  ing of each case
5870: 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20   is important.  
5880: 54 68 65 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72  The makefile for
5890: 20 53 51 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72   SQLite.** gener
58a0: 61 74 65 73 20 74 77 6f 20 43 20 66 69 6c 65 73  ates two C files
58b0: 20 22 6f 70 63 6f 64 65 73 2e 68 22 20 61 6e 64   "opcodes.h" and
58c0: 20 22 6f 70 63 6f 64 65 73 2e 63 22 20 62 79 20   "opcodes.c" by 
58d0: 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a  scanning this.**
58e0: 20 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f   file looking fo
58f0: 72 20 6c 69 6e 65 73 20 74 68 61 74 20 62 65 67  r lines that beg
5900: 69 6e 20 77 69 74 68 20 22 63 61 73 65 20 4f 50  in with "case OP
5910: 5f 22 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 73  _".  The opcodes
5920: 2e 68 20 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c  .h files.** will
5930: 20 62 65 20 66 69 6c 6c 65 64 20 77 69 74 68 20   be filled with 
5940: 23 64 65 66 69 6e 65 73 20 74 68 61 74 20 67 69  #defines that gi
5950: 76 65 20 75 6e 69 71 75 65 20 69 6e 74 65 67 65  ve unique intege
5960: 72 20 76 61 6c 75 65 73 20 74 6f 20 65 61 63 68  r values to each
5970: 0a 2a 2a 20 6f 70 63 6f 64 65 20 61 6e 64 20 74  .** opcode and t
5980: 68 65 20 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c  he opcodes.c fil
5990: 65 20 69 73 20 66 69 6c 6c 65 64 20 77 69 74 68  e is filled with
59a0: 20 61 6e 20 61 72 72 61 79 20 6f 66 20 73 74 72   an array of str
59b0: 69 6e 67 73 20 77 68 65 72 65 0a 2a 2a 20 65 61  ings where.** ea
59c0: 63 68 20 73 74 72 69 6e 67 20 69 73 20 74 68 65  ch string is the
59d0: 20 73 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66   symbolic name f
59e0: 6f 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  or the correspon
59f0: 64 69 6e 67 20 6f 70 63 6f 64 65 2e 20 20 49 66  ding opcode.  If
5a00: 20 74 68 65 0a 2a 2a 20 63 61 73 65 20 73 74 61   the.** case sta
5a10: 74 65 6d 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77  tement is follow
5a20: 65 64 20 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20  ed by a comment 
5a30: 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 2f 23 20  of the form "/# 
5a40: 73 61 6d 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a  same as ... #/".
5a50: 2a 2a 20 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20  ** that comment 
5a60: 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72  is used to deter
5a70: 6d 69 6e 65 20 74 68 65 20 70 61 72 74 69 63 75  mine the particu
5a80: 6c 61 72 20 76 61 6c 75 65 20 6f 66 20 74 68 65  lar value of the
5a90: 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f   opcode..**.** O
5aa0: 74 68 65 72 20 6b 65 79 77 6f 72 64 73 20 69 6e  ther keywords in
5ab0: 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61   the comment tha
5ac0: 74 20 66 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63  t follows each c
5ad0: 61 73 65 20 61 72 65 20 75 73 65 64 20 74 6f 0a  ase are used to.
5ae0: 2a 2a 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65  ** construct the
5af0: 20 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a   OPFLG_INITIALIZ
5b00: 45 52 20 76 61 6c 75 65 20 74 68 61 74 20 69 6e  ER value that in
5b10: 69 74 69 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65  itializes opcode
5b20: 50 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b  Property[]..** K
5b30: 65 79 77 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a  eywords include:
5b40: 20 69 6e 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20   in1, in2, in3, 
5b50: 6f 75 74 32 5f 70 72 65 72 65 6c 65 61 73 65 2c  out2_prerelease,
5b60: 20 6f 75 74 32 2c 20 6f 75 74 33 2e 20 20 53 65   out2, out3.  Se
5b70: 65 0a 2a 2a 20 74 68 65 20 6d 6b 6f 70 63 6f 64  e.** the mkopcod
5b80: 65 68 2e 61 77 6b 20 73 63 72 69 70 74 20 66 6f  eh.awk script fo
5b90: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
5ba0: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  ormation..**.** 
5bb0: 44 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62  Documentation ab
5bc0: 6f 75 74 20 56 44 42 45 20 6f 70 63 6f 64 65 73  out VDBE opcodes
5bd0: 20 69 73 20 67 65 6e 65 72 61 74 65 64 20 62 79   is generated by
5be0: 20 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 20 66   scanning this f
5bf0: 69 6c 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65 73  ile.** for lines
5c00: 20 6f 66 20 74 68 61 74 20 63 6f 6e 74 61 69 6e   of that contain
5c10: 20 22 4f 70 63 6f 64 65 3a 22 2e 20 20 54 68 61   "Opcode:".  Tha
5c20: 74 20 6c 69 6e 65 20 61 6e 64 20 61 6c 6c 20 73  t line and all s
5c30: 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d  ubsequent.** com
5c40: 6d 65 6e 74 20 6c 69 6e 65 73 20 61 72 65 20 75  ment lines are u
5c50: 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72  sed in the gener
5c60: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 63  ation of the opc
5c70: 6f 64 65 2e 68 74 6d 6c 20 64 6f 63 75 6d 65 6e  ode.html documen
5c80: 74 61 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a  tation.** file..
5c90: 2a 2a 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a  **.** SUMMARY:.*
5ca0: 2a 0a 2a 2a 20 20 20 20 20 46 6f 72 6d 61 74 74  *.**     Formatt
5cb0: 69 6e 67 20 69 73 20 69 6d 70 6f 72 74 61 6e 74  ing is important
5cc0: 20 74 6f 20 73 63 72 69 70 74 73 20 74 68 61 74   to scripts that
5cd0: 20 73 63 61 6e 20 74 68 69 73 20 66 69 6c 65 2e   scan this file.
5ce0: 0a 2a 2a 20 20 20 20 20 44 6f 20 6e 6f 74 20 64  .**     Do not d
5cf0: 65 76 69 61 74 65 20 66 72 6f 6d 20 74 68 65 20  eviate from the 
5d00: 66 6f 72 6d 61 74 74 69 6e 67 20 73 74 79 6c 65  formatting style
5d10: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73   currently in us
5d20: 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  e..**.**********
5d30: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5d40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5d50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5d60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5d70: 2a 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ***/../* Opcode:
5d80: 20 20 47 6f 74 6f 20 2a 20 50 32 20 2a 20 2a 20    Goto * P2 * * 
5d90: 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e  *.**.** An uncon
5da0: 64 69 74 69 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f  ditional jump to
5db0: 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 20   address P2..** 
5dc0: 54 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  The next instruc
5dd0: 74 69 6f 6e 20 65 78 65 63 75 74 65 64 20 77 69  tion executed wi
5de0: 6c 6c 20 62 65 20 0a 2a 2a 20 74 68 65 20 6f 6e  ll be .** the on
5df0: 65 20 61 74 20 69 6e 64 65 78 20 50 32 20 66 72  e at index P2 fr
5e00: 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
5e10: 20 6f 66 0a 2a 2a 20 74 68 65 20 70 72 6f 67 72   of.** the progr
5e20: 61 6d 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31  am..**.** The P1
5e30: 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f   parameter is no
5e40: 74 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64 20  t actually used 
5e50: 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20  by this opcode. 
5e60: 20 48 6f 77 65 76 65 72 2c 20 69 74 0a 2a 2a 20   However, it.** 
5e70: 69 73 20 73 6f 6d 65 74 69 6d 65 73 20 73 65 74  is sometimes set
5e80: 20 74 6f 20 31 20 69 6e 73 74 65 61 64 20 6f 66   to 1 instead of
5e90: 20 30 20 61 73 20 61 20 68 69 6e 74 20 74 6f 20   0 as a hint to 
5ea0: 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65  the command-line
5eb0: 20 73 68 65 6c 6c 0a 2a 2a 20 74 68 61 74 20 74   shell.** that t
5ec0: 68 69 73 20 47 6f 74 6f 20 69 73 20 74 68 65 20  his Goto is the 
5ed0: 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70  bottom of a loop
5ee0: 20 61 6e 64 20 74 68 61 74 20 74 68 65 20 6c 69   and that the li
5ef0: 6e 65 73 20 66 72 6f 6d 20 50 32 20 64 6f 77 6e  nes from P2 down
5f00: 0a 2a 2a 20 74 6f 20 74 68 65 20 63 75 72 72 65  .** to the curre
5f10: 6e 74 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 62  nt line should b
5f20: 65 20 69 6e 64 65 6e 74 65 64 20 66 6f 72 20 45  e indented for E
5f30: 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 2e 0a 2a  XPLAIN output..*
5f40: 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20  /.case OP_Goto: 
5f50: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
5f60: 20 6a 75 6d 70 20 2a 2f 0a 20 20 70 63 20 3d 20   jump */.  pc = 
5f70: 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 0a 20 20  pOp->p2 - 1;..  
5f80: 2f 2a 20 4f 70 63 6f 64 65 73 20 74 68 61 74 20  /* Opcodes that 
5f90: 61 72 65 20 75 73 65 64 20 61 73 20 74 68 65 20  are used as the 
5fa0: 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70  bottom of a loop
5fb0: 20 28 4f 50 5f 4e 65 78 74 2c 20 4f 50 5f 50 72   (OP_Next, OP_Pr
5fc0: 65 76 2c 0a 20 20 2a 2a 20 4f 50 5f 56 4e 65 78  ev,.  ** OP_VNex
5fd0: 74 2c 20 4f 50 5f 52 6f 77 53 65 74 4e 65 78 74  t, OP_RowSetNext
5fe0: 2c 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4e 65  , or OP_SorterNe
5ff0: 78 74 29 20 61 6c 6c 20 6a 75 6d 70 20 68 65 72  xt) all jump her
6000: 65 20 75 70 6f 6e 0a 20 20 2a 2a 20 63 6f 6d 70  e upon.  ** comp
6010: 6c 65 74 69 6f 6e 2e 20 20 43 68 65 63 6b 20 74  letion.  Check t
6020: 6f 20 73 65 65 20 69 66 20 73 71 6c 69 74 65 33  o see if sqlite3
6030: 5f 69 6e 74 65 72 72 75 70 74 28 29 20 68 61 73  _interrupt() has
6040: 20 62 65 65 6e 20 63 61 6c 6c 65 64 0a 20 20 2a   been called.  *
6050: 2a 20 6f 72 20 69 66 20 74 68 65 20 70 72 6f 67  * or if the prog
6060: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 6e 65  ress callback ne
6070: 65 64 73 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65  eds to be invoke
6080: 64 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  d. .  **.  ** Th
6090: 69 73 20 63 6f 64 65 20 75 73 65 73 20 75 6e 73  is code uses uns
60a0: 74 72 75 63 74 75 72 65 64 20 22 67 6f 74 6f 22  tructured "goto"
60b0: 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 20   statements and 
60c0: 64 6f 65 73 20 6e 6f 74 20 6c 6f 6f 6b 20 63 6c  does not look cl
60d0: 65 61 6e 2e 0a 20 20 2a 2a 20 42 75 74 20 74 68  ean..  ** But th
60e0: 61 74 20 69 73 20 6e 6f 74 20 64 75 65 20 74 6f  at is not due to
60f0: 20 73 6c 6f 70 70 79 20 63 6f 64 69 6e 67 20 68   sloppy coding h
6100: 61 62 69 74 73 2e 20 54 68 65 20 63 6f 64 65 20  abits. The code 
6110: 69 73 20 77 72 69 74 74 65 6e 20 74 68 69 73 0a  is written this.
6120: 20 20 2a 2a 20 77 61 79 20 66 6f 72 20 70 65 72    ** way for per
6130: 66 6f 72 6d 61 6e 63 65 2c 20 74 6f 20 61 76 6f  formance, to avo
6140: 69 64 20 68 61 76 69 6e 67 20 74 6f 20 72 75 6e  id having to run
6150: 20 74 68 65 20 69 6e 74 65 72 72 75 70 74 20 61   the interrupt a
6160: 6e 64 20 70 72 6f 67 72 65 73 73 0a 20 20 2a 2a  nd progress.  **
6170: 20 63 68 65 63 6b 73 20 6f 6e 20 65 76 65 72 79   checks on every
6180: 20 6f 70 63 6f 64 65 2e 20 20 54 68 69 73 20 68   opcode.  This h
6190: 65 6c 70 73 20 73 71 6c 69 74 65 33 5f 73 74 65  elps sqlite3_ste
61a0: 70 28 29 20 74 6f 20 72 75 6e 20 61 62 6f 75 74  p() to run about
61b0: 20 31 2e 35 25 0a 20 20 2a 2a 20 66 61 73 74 65   1.5%.  ** faste
61c0: 72 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 22  r according to "
61d0: 76 61 6c 67 72 69 6e 64 20 2d 2d 74 6f 6f 6c 3d  valgrind --tool=
61e0: 63 61 63 68 65 67 72 69 6e 64 22 20 2a 2f 0a 63  cachegrind" */.c
61f0: 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
6200: 70 74 3a 0a 20 20 69 66 28 20 64 62 2d 3e 75 31  pt:.  if( db->u1
6210: 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29  .isInterrupted )
6220: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
6230: 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 23 69  to_interrupt;.#i
6240: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
6250: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
6260: 41 43 4b 0a 20 20 2f 2a 20 43 61 6c 6c 20 74 68  ACK.  /* Call th
6270: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
6280: 61 63 6b 20 69 66 20 69 74 20 69 73 20 63 6f 6e  ack if it is con
6290: 66 69 67 75 72 65 64 20 61 6e 64 20 74 68 65 20  figured and the 
62a0: 72 65 71 75 69 72 65 64 20 6e 75 6d 62 65 72 0a  required number.
62b0: 20 20 2a 2a 20 6f 66 20 56 44 42 45 20 6f 70 73    ** of VDBE ops
62c0: 20 68 61 76 65 20 62 65 65 6e 20 65 78 65 63 75   have been execu
62d0: 74 65 64 20 28 65 69 74 68 65 72 20 73 69 6e 63  ted (either sinc
62e0: 65 20 74 68 69 73 20 69 6e 76 6f 63 61 74 69 6f  e this invocatio
62f0: 6e 20 6f 66 0a 20 20 2a 2a 20 73 71 6c 69 74 65  n of.  ** sqlite
6300: 33 56 64 62 65 45 78 65 63 28 29 20 6f 72 20 73  3VdbeExec() or s
6310: 69 6e 63 65 20 6c 61 73 74 20 74 69 6d 65 20 74  ince last time t
6320: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
6330: 62 61 63 6b 20 77 61 73 20 63 61 6c 6c 65 64 29  back was called)
6340: 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 70 72  ..  ** If the pr
6350: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
6360: 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f  returns non-zero
6370: 2c 20 65 78 69 74 20 74 68 65 20 76 69 72 74 75  , exit the virtu
6380: 61 6c 20 6d 61 63 68 69 6e 65 20 77 69 74 68 0a  al machine with.
6390: 20 20 2a 2a 20 61 20 72 65 74 75 72 6e 20 63 6f    ** a return co
63a0: 64 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 2e  de SQLITE_ABORT.
63b0: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e  .  */.  if( db->
63c0: 78 50 72 6f 67 72 65 73 73 21 3d 30 20 26 26 20  xProgress!=0 && 
63d0: 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f 67 72 65  nVmStep>=nProgre
63e0: 73 73 4c 69 6d 69 74 20 29 7b 0a 20 20 20 20 61  ssLimit ){.    a
63f0: 73 73 65 72 74 28 20 64 62 2d 3e 6e 50 72 6f 67  ssert( db->nProg
6400: 72 65 73 73 4f 70 73 21 3d 30 20 29 3b 0a 20 20  ressOps!=0 );.  
6410: 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74    nProgressLimit
6420: 20 3d 20 6e 56 6d 53 74 65 70 20 2b 20 64 62 2d   = nVmStep + db-
6430: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 2d 20  >nProgressOps - 
6440: 28 6e 56 6d 53 74 65 70 25 64 62 2d 3e 6e 50 72  (nVmStep%db->nPr
6450: 6f 67 72 65 73 73 4f 70 73 29 3b 0a 20 20 20 20  ogressOps);.    
6460: 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73  if( db->xProgres
6470: 73 28 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41  s(db->pProgressA
6480: 72 67 29 20 29 7b 0a 20 20 20 20 20 20 72 63 20  rg) ){.      rc 
6490: 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55  = SQLITE_INTERRU
64a0: 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76  PT;.      goto v
64b0: 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a  dbe_error_halt;.
64c0: 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66      }.  }.#endif
64d0: 0a 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  .  .  break;.}..
64e0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75  /* Opcode:  Gosu
64f0: 62 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  b P1 P2 * * *.**
6500: 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 75  .** Write the cu
6510: 72 72 65 6e 74 20 61 64 64 72 65 73 73 20 6f 6e  rrent address on
6520: 74 6f 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a  to register P1.*
6530: 2a 20 61 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20  * and then jump 
6540: 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a  to address P2..*
6550: 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a  /.case OP_Gosub:
6560: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
6570: 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72   jump */.  asser
6580: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20  t( pOp->p1>0 && 
6590: 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p1<=(p->nMe
65a0: 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
65b0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
65c0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
65d0: 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d  rt( VdbeMemDynam
65e0: 69 63 28 70 49 6e 31 29 3d 3d 30 20 29 3b 0a 20  ic(pIn1)==0 );. 
65f0: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
6600: 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 70 49  e(p, pIn1);.  pI
6610: 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  n1->flags = MEM_
6620: 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69  Int;.  pIn1->u.i
6630: 20 3d 20 70 63 3b 0a 20 20 52 45 47 49 53 54 45   = pc;.  REGISTE
6640: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c  R_TRACE(pOp->p1,
6650: 20 70 49 6e 31 29 3b 0a 20 20 70 63 20 3d 20 70   pIn1);.  pc = p
6660: 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 62 72  Op->p2 - 1;.  br
6670: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
6680: 65 3a 20 20 52 65 74 75 72 6e 20 50 31 20 2a 20  e:  Return P1 * 
6690: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  * * *.**.** Jump
66a0: 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
66b0: 74 72 75 63 74 69 6f 6e 20 61 66 74 65 72 20 74  truction after t
66c0: 68 65 20 61 64 64 72 65 73 73 20 69 6e 20 72 65  he address in re
66d0: 67 69 73 74 65 72 20 50 31 2e 20 20 41 66 74 65  gister P1.  Afte
66e0: 72 0a 2a 2a 20 74 68 65 20 6a 75 6d 70 2c 20 72  r.** the jump, r
66f0: 65 67 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d  egister P1 becom
6700: 65 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2f  es undefined..*/
6710: 0a 63 61 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a  .case OP_Return:
6720: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
6730: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
6740: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
6750: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
6760: 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29  flags==MEM_Int )
6770: 3b 0a 20 20 70 63 20 3d 20 28 69 6e 74 29 70 49  ;.  pc = (int)pI
6780: 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31 2d  n1->u.i;.  pIn1-
6790: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64  >flags = MEM_Und
67a0: 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b  efined;.  break;
67b0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
67c0: 6e 69 74 43 6f 72 6f 75 74 69 6e 65 20 50 31 20  nitCoroutine P1 
67d0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
67e0: 53 65 74 20 75 70 20 72 65 67 69 73 74 65 72 20  Set up register 
67f0: 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 77 69  P1 so that it wi
6800: 6c 6c 20 59 69 65 6c 64 20 74 6f 20 74 68 65 20  ll Yield to the 
6810: 63 6f 72 6f 75 74 69 6e 65 0a 2a 2a 20 6c 6f 63  coroutine.** loc
6820: 61 74 65 64 20 61 74 20 61 64 64 72 65 73 73 20  ated at address 
6830: 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 21  P3..**.** If P2!
6840: 3d 30 20 74 68 65 6e 20 74 68 65 20 63 6f 72 6f  =0 then the coro
6850: 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61  utine implementa
6860: 74 69 6f 6e 20 69 6d 6d 65 64 69 61 74 65 6c 79  tion immediately
6870: 20 66 6f 6c 6c 6f 77 73 0a 2a 2a 20 74 68 69 73   follows.** this
6880: 20 6f 70 63 6f 64 65 2e 20 20 53 6f 20 6a 75 6d   opcode.  So jum
6890: 70 20 6f 76 65 72 20 74 68 65 20 63 6f 72 6f 75  p over the corou
68a0: 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tine implementat
68b0: 69 6f 6e 20 74 6f 0a 2a 2a 20 61 64 64 72 65 73  ion to.** addres
68c0: 73 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  s P2..**.** See 
68d0: 61 6c 73 6f 3a 20 45 6e 64 43 6f 72 6f 75 74 69  also: EndCorouti
68e0: 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  ne.*/.case OP_In
68f0: 69 74 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20  itCoroutine: {  
6900: 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
6910: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
6920: 30 20 26 26 20 20 70 4f 70 2d 3e 70 31 3c 3d 28  0 &&  pOp->p1<=(
6930: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
6940: 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  or) );.  assert(
6950: 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 26 26 20 70   pOp->p2>=0 && p
6960: 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b  Op->p2<p->nOp );
6970: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
6980: 70 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 33  p3>=0 && pOp->p3
6990: 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f 75  <p->nOp );.  pOu
69a0: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
69b0: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 21 56  1];.  assert( !V
69c0: 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f  dbeMemDynamic(pO
69d0: 75 74 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75  ut) );.  pOut->u
69e0: 2e 69 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31  .i = pOp->p3 - 1
69f0: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
6a00: 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 69 66 28  = MEM_Int;.  if(
6a10: 20 70 4f 70 2d 3e 70 32 20 29 20 70 63 20 3d 20   pOp->p2 ) pc = 
6a20: 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 62  pOp->p2 - 1;.  b
6a30: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
6a40: 64 65 3a 20 20 45 6e 64 43 6f 72 6f 75 74 69 6e  de:  EndCoroutin
6a50: 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  e P1 * * * *.**.
6a60: 2a 2a 20 54 68 65 20 69 6e 73 74 72 75 63 74 69  ** The instructi
6a70: 6f 6e 20 61 74 20 74 68 65 20 61 64 64 72 65 73  on at the addres
6a80: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
6a90: 20 69 73 20 61 20 59 69 65 6c 64 2e 0a 2a 2a 20   is a Yield..** 
6aa0: 4a 75 6d 70 20 74 6f 20 74 68 65 20 50 32 20 70  Jump to the P2 p
6ab0: 61 72 61 6d 65 74 65 72 20 6f 66 20 74 68 61 74  arameter of that
6ac0: 20 59 69 65 6c 64 2e 0a 2a 2a 20 41 66 74 65 72   Yield..** After
6ad0: 20 74 68 65 20 6a 75 6d 70 2c 20 72 65 67 69 73   the jump, regis
6ae0: 74 65 72 20 50 31 20 62 65 63 6f 6d 65 73 20 75  ter P1 becomes u
6af0: 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20  ndefined..**.** 
6b00: 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74 43 6f  See also: InitCo
6b10: 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20  routine.*/.case 
6b20: 4f 50 5f 45 6e 64 43 6f 72 6f 75 74 69 6e 65 3a  OP_EndCoroutine:
6b30: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
6b40: 69 6e 31 20 2a 2f 0a 20 20 56 64 62 65 4f 70 20  in1 */.  VdbeOp 
6b50: 2a 70 43 61 6c 6c 65 72 3b 0a 20 20 70 49 6e 31  *pCaller;.  pIn1
6b60: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
6b70: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
6b80: 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e  1->flags==MEM_In
6b90: 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t );.  assert( p
6ba0: 49 6e 31 2d 3e 75 2e 69 3e 3d 30 20 26 26 20 70  In1->u.i>=0 && p
6bb0: 49 6e 31 2d 3e 75 2e 69 3c 70 2d 3e 6e 4f 70 20  In1->u.i<p->nOp 
6bc0: 29 3b 0a 20 20 70 43 61 6c 6c 65 72 20 3d 20 26  );.  pCaller = &
6bd0: 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a  aOp[pIn1->u.i];.
6be0: 20 20 61 73 73 65 72 74 28 20 70 43 61 6c 6c 65    assert( pCalle
6bf0: 72 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 59 69  r->opcode==OP_Yi
6c00: 65 6c 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28  eld );.  assert(
6c10: 20 70 43 61 6c 6c 65 72 2d 3e 70 32 3e 3d 30 20   pCaller->p2>=0 
6c20: 26 26 20 70 43 61 6c 6c 65 72 2d 3e 70 32 3c 70  && pCaller->p2<p
6c30: 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 63 20 3d 20  ->nOp );.  pc = 
6c40: 70 43 61 6c 6c 65 72 2d 3e 70 32 20 2d 20 31 3b  pCaller->p2 - 1;
6c50: 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d  .  pIn1->flags =
6c60: 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a   MEM_Undefined;.
6c70: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
6c80: 70 63 6f 64 65 3a 20 20 59 69 65 6c 64 20 50 31  pcode:  Yield P1
6c90: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
6ca0: 53 77 61 70 20 74 68 65 20 70 72 6f 67 72 61 6d  Swap the program
6cb0: 20 63 6f 75 6e 74 65 72 20 77 69 74 68 20 74 68   counter with th
6cc0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
6cd0: 74 65 72 20 50 31 2e 20 20 54 68 69 73 0a 2a 2a  ter P1.  This.**
6ce0: 20 68 61 73 20 74 68 65 20 65 66 66 65 63 74 20   has the effect 
6cf0: 6f 66 20 79 69 65 6c 64 69 6e 67 20 74 6f 20 61  of yielding to a
6d00: 20 63 6f 72 6f 75 74 69 6e 65 2e 0a 2a 2a 0a 2a   coroutine..**.*
6d10: 2a 20 49 66 20 74 68 65 20 63 6f 72 6f 75 74 69  * If the corouti
6d20: 6e 65 20 74 68 61 74 20 69 73 20 6c 61 75 6e 63  ne that is launc
6d30: 68 65 64 20 62 79 20 74 68 69 73 20 69 6e 73 74  hed by this inst
6d40: 72 75 63 74 69 6f 6e 20 65 6e 64 73 20 77 69 74  ruction ends wit
6d50: 68 0a 2a 2a 20 59 69 65 6c 64 20 6f 72 20 52 65  h.** Yield or Re
6d60: 74 75 72 6e 20 74 68 65 6e 20 63 6f 6e 74 69 6e  turn then contin
6d70: 75 65 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  ue to the next i
6d80: 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74  nstruction.  But
6d90: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 72 6f 75   if.** the corou
6da0: 74 69 6e 65 20 6c 61 75 6e 63 68 65 64 20 62 79  tine launched by
6db0: 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
6dc0: 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20 45  n ends with.** E
6dd0: 6e 64 43 6f 72 6f 75 74 69 6e 65 2c 20 74 68 65  ndCoroutine, the
6de0: 6e 20 6a 75 6d 70 20 74 6f 20 50 32 20 72 61 74  n jump to P2 rat
6df0: 68 65 72 20 74 68 61 6e 20 63 6f 6e 74 69 6e 75  her than continu
6e00: 69 6e 67 20 77 69 74 68 20 74 68 65 0a 2a 2a 20  ing with the.** 
6e10: 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
6e20: 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
6e30: 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 0a  : InitCoroutine.
6e40: 2a 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c 64  */.case OP_Yield
6e50: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
6e60: 2a 20 69 6e 31 2c 20 6a 75 6d 70 20 2a 2f 0a 20  * in1, jump */. 
6e70: 20 69 6e 74 20 70 63 44 65 73 74 3b 0a 20 20 70   int pcDest;.  p
6e80: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
6e90: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
6ea0: 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70  VdbeMemDynamic(p
6eb0: 49 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e  In1)==0 );.  pIn
6ec0: 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  1->flags = MEM_I
6ed0: 6e 74 3b 0a 20 20 70 63 44 65 73 74 20 3d 20 28  nt;.  pcDest = (
6ee0: 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20  int)pIn1->u.i;. 
6ef0: 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b   pIn1->u.i = pc;
6f00: 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
6f10: 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29  E(pOp->p1, pIn1)
6f20: 3b 0a 20 20 70 63 20 3d 20 70 63 44 65 73 74 3b  ;.  pc = pcDest;
6f30: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
6f40: 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e  Opcode:  HaltIfN
6f50: 75 6c 6c 20 20 50 31 20 50 32 20 50 33 20 50 34  ull  P1 P2 P3 P4
6f60: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
6f70: 20 20 69 66 20 72 5b 50 33 5d 3d 6e 75 6c 6c 20    if r[P3]=null 
6f80: 68 61 6c 74 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b  halt.**.** Check
6f90: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
6fa0: 67 69 73 74 65 72 20 50 33 2e 20 20 49 66 20 69  gister P3.  If i
6fb0: 74 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48  t is NULL then H
6fc0: 61 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72  alt using.** par
6fd0: 61 6d 65 74 65 72 20 50 31 2c 20 50 32 2c 20 61  ameter P1, P2, a
6fe0: 6e 64 20 50 34 20 61 73 20 69 66 20 74 68 69 73  nd P4 as if this
6ff0: 20 77 65 72 65 20 61 20 48 61 6c 74 20 69 6e 73   were a Halt ins
7000: 74 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68  truction.  If th
7010: 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72 65  e.** value in re
7020: 67 69 73 74 65 72 20 50 33 20 69 73 20 6e 6f 74  gister P3 is not
7030: 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73   NULL, then this
7040: 20 72 6f 75 74 69 6e 65 20 69 73 20 61 20 6e 6f   routine is a no
7050: 2d 6f 70 2e 0a 2a 2a 20 54 68 65 20 50 35 20 70  -op..** The P5 p
7060: 61 72 61 6d 65 74 65 72 20 73 68 6f 75 6c 64 20  arameter should 
7070: 62 65 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  be 1..*/.case OP
7080: 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20 20  _HaltIfNull: {  
7090: 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20      /* in3 */.  
70a0: 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
70b0: 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p3];.  if( (pI
70c0: 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
70d0: 4e 75 6c 6c 29 3d 3d 30 20 29 20 62 72 65 61 6b  Null)==0 ) break
70e0: 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  ;.  /* Fall thro
70f0: 75 67 68 20 69 6e 74 6f 20 4f 50 5f 48 61 6c 74  ugh into OP_Halt
7100: 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65   */.}../* Opcode
7110: 3a 20 20 48 61 6c 74 20 50 31 20 50 32 20 2a 20  :  Halt P1 P2 * 
7120: 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 69 74  P4 P5.**.** Exit
7130: 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 41   immediately.  A
7140: 6c 6c 20 6f 70 65 6e 20 63 75 72 73 6f 72 73 2c  ll open cursors,
7150: 20 65 74 63 20 61 72 65 20 63 6c 6f 73 65 64 0a   etc are closed.
7160: 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ** automatically
7170: 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68  ..**.** P1 is th
7180: 65 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65  e result code re
7190: 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
71a0: 33 5f 65 78 65 63 28 29 2c 20 73 71 6c 69 74 65  3_exec(), sqlite
71b0: 33 5f 72 65 73 65 74 28 29 2c 0a 2a 2a 20 6f 72  3_reset(),.** or
71c0: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
71d0: 65 28 29 2e 20 20 46 6f 72 20 61 20 6e 6f 72 6d  e().  For a norm
71e0: 61 6c 20 68 61 6c 74 2c 20 74 68 69 73 20 73 68  al halt, this sh
71f0: 6f 75 6c 64 20 62 65 20 53 51 4c 49 54 45 5f 4f  ould be SQLITE_O
7200: 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f 72 20 65 72  K (0)..** For er
7210: 72 6f 72 73 2c 20 69 74 20 63 61 6e 20 62 65 20  rors, it can be 
7220: 73 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c 75 65  some other value
7230: 2e 20 20 49 66 20 50 31 21 3d 30 20 74 68 65 6e  .  If P1!=0 then
7240: 20 50 32 20 77 69 6c 6c 20 64 65 74 65 72 6d 69   P2 will determi
7250: 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f 72  ne.** whether or
7260: 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62 61 63 6b   not to rollback
7270: 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61   the current tra
7280: 6e 73 61 63 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f  nsaction.  Do no
7290: 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66  t rollback.** if
72a0: 20 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f   P2==OE_Fail. Do
72b0: 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 69 66   the rollback if
72c0: 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b   P2==OE_Rollback
72d0: 2e 20 20 49 66 20 50 32 3d 3d 4f 45 5f 41 62 6f  .  If P2==OE_Abo
72e0: 72 74 2c 0a 2a 2a 20 74 68 65 6e 20 62 61 63 6b  rt,.** then back
72f0: 20 6f 75 74 20 61 6c 6c 20 63 68 61 6e 67 65 73   out all changes
7300: 20 74 68 61 74 20 68 61 76 65 20 6f 63 63 75 72   that have occur
7310: 72 65 64 20 64 75 72 69 6e 67 20 74 68 69 73 20  red during this 
7320: 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 74 68 65  execution of the
7330: 0a 2a 2a 20 56 44 42 45 2c 20 62 75 74 20 64 6f  .** VDBE, but do
7340: 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 68   not rollback th
7350: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 0a  e transaction. .
7360: 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e  **.** If P4 is n
7370: 6f 74 20 6e 75 6c 6c 20 74 68 65 6e 20 69 74 20  ot null then it 
7380: 69 73 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  is an error mess
7390: 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a  age string..**.*
73a0: 2a 20 50 35 20 69 73 20 61 20 76 61 6c 75 65 20  * P5 is a value 
73b0: 62 65 74 77 65 65 6e 20 30 20 61 6e 64 20 34 2c  between 0 and 4,
73c0: 20 69 6e 63 6c 75 73 69 76 65 2c 20 74 68 61 74   inclusive, that
73d0: 20 6d 6f 64 69 66 69 65 73 20 74 68 65 20 50 34   modifies the P4
73e0: 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20   string..**.**  
73f0: 20 20 30 3a 20 20 28 6e 6f 20 63 68 61 6e 67 65    0:  (no change
7400: 29 0a 2a 2a 20 20 20 20 31 3a 20 20 4e 4f 54 20  ).**    1:  NOT 
7410: 4e 55 4c 4c 20 63 6f 6e 74 72 61 69 6e 74 20 66  NULL contraint f
7420: 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20  ailed: P4.**    
7430: 32 3a 20 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  2:  UNIQUE const
7440: 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34  raint failed: P4
7450: 0a 2a 2a 20 20 20 20 33 3a 20 20 43 48 45 43 4b  .**    3:  CHECK
7460: 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c   constraint fail
7470: 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 34 3a 20  ed: P4.**    4: 
7480: 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e   FOREIGN KEY con
7490: 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20  straint failed: 
74a0: 50 34 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  P4.**.** If P5 i
74b0: 73 20 6e 6f 74 20 7a 65 72 6f 20 61 6e 64 20 50  s not zero and P
74c0: 34 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20  4 is NULL, then 
74d0: 65 76 65 72 79 74 68 69 6e 67 20 61 66 74 65 72  everything after
74e0: 20 74 68 65 20 22 3a 22 20 69 73 0a 2a 2a 20 6f   the ":" is.** o
74f0: 6d 69 74 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  mitted..**.** Th
7500: 65 72 65 20 69 73 20 61 6e 20 69 6d 70 6c 69 65  ere is an implie
7510: 64 20 22 48 61 6c 74 20 30 20 30 20 30 22 20 69  d "Halt 0 0 0" i
7520: 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 73 65 72  nstruction inser
7530: 74 65 64 20 61 74 20 74 68 65 20 76 65 72 79 20  ted at the very 
7540: 65 6e 64 20 6f 66 0a 2a 2a 20 65 76 65 72 79 20  end of.** every 
7550: 70 72 6f 67 72 61 6d 2e 20 20 53 6f 20 61 20 6a  program.  So a j
7560: 75 6d 70 20 70 61 73 74 20 74 68 65 20 6c 61 73  ump past the las
7570: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66  t instruction of
7580: 20 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20   the program.** 
7590: 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 65  is the same as e
75a0: 78 65 63 75 74 69 6e 67 20 48 61 6c 74 2e 0a 2a  xecuting Halt..*
75b0: 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 3a 20  /.case OP_Halt: 
75c0: 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
75d0: 7a 54 79 70 65 3b 0a 20 20 63 6f 6e 73 74 20 63  zType;.  const c
75e0: 68 61 72 20 2a 7a 4c 6f 67 46 6d 74 3b 0a 0a 20  har *zLogFmt;.. 
75f0: 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 53 51   if( pOp->p1==SQ
7600: 4c 49 54 45 5f 4f 4b 20 26 26 20 70 2d 3e 70 46  LITE_OK && p->pF
7610: 72 61 6d 65 20 29 7b 0a 20 20 20 20 2f 2a 20 48  rame ){.    /* H
7620: 61 6c 74 20 74 68 65 20 73 75 62 2d 70 72 6f 67  alt the sub-prog
7630: 72 61 6d 2e 20 52 65 74 75 72 6e 20 63 6f 6e 74  ram. Return cont
7640: 72 6f 6c 20 74 6f 20 74 68 65 20 70 61 72 65 6e  rol to the paren
7650: 74 20 66 72 61 6d 65 2e 20 2a 2f 0a 20 20 20 20  t frame. */.    
7660: 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
7670: 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20  e = p->pFrame;. 
7680: 20 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70     p->pFrame = p
7690: 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 0a  Frame->pParent;.
76a0: 20 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b      p->nFrame--;
76b0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
76c0: 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70  SetChanges(db, p
76d0: 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 20 20  ->nChange);.    
76e0: 70 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  pc = sqlite3Vdbe
76f0: 46 72 61 6d 65 52 65 73 74 6f 72 65 28 70 46 72  FrameRestore(pFr
7700: 61 6d 65 29 3b 0a 20 20 20 20 6c 61 73 74 52 6f  ame);.    lastRo
7710: 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f  wid = db->lastRo
7720: 77 69 64 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  wid;.    if( pOp
7730: 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20  ->p2==OE_Ignore 
7740: 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 6e 73 74  ){.      /* Inst
7750: 72 75 63 74 69 6f 6e 20 70 63 20 69 73 20 74 68  ruction pc is th
7760: 65 20 4f 50 5f 50 72 6f 67 72 61 6d 20 74 68 61  e OP_Program tha
7770: 74 20 69 6e 76 6f 6b 65 64 20 74 68 65 20 73 75  t invoked the su
7780: 62 2d 70 72 6f 67 72 61 6d 20 0a 20 20 20 20 20  b-program .     
7790: 20 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 62 65   ** currently be
77a0: 69 6e 67 20 68 61 6c 74 65 64 2e 20 49 66 20 74  ing halted. If t
77b0: 68 65 20 70 32 20 69 6e 73 74 72 75 63 74 69 6f  he p2 instructio
77c0: 6e 20 6f 66 20 74 68 69 73 20 4f 50 5f 48 61 6c  n of this OP_Hal
77d0: 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e 73 74 72  t.      ** instr
77e0: 75 63 74 69 6f 6e 20 69 73 20 73 65 74 20 74 6f  uction is set to
77f0: 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 74 68 65 6e   OE_Ignore, then
7800: 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
7810: 20 69 73 20 74 68 72 6f 77 69 6e 67 0a 20 20 20   is throwing.   
7820: 20 20 20 2a 2a 20 61 6e 20 49 47 4e 4f 52 45 20     ** an IGNORE 
7830: 65 78 63 65 70 74 69 6f 6e 2e 20 49 6e 20 74 68  exception. In th
7840: 69 73 20 63 61 73 65 20 6a 75 6d 70 20 74 6f 20  is case jump to 
7850: 74 68 65 20 61 64 64 72 65 73 73 20 73 70 65 63  the address spec
7860: 69 66 69 65 64 0a 20 20 20 20 20 20 2a 2a 20 61  ified.      ** a
7870: 73 20 74 68 65 20 70 32 20 6f 66 20 74 68 65 20  s the p2 of the 
7880: 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72  calling OP_Progr
7890: 61 6d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 63  am.  */.      pc
78a0: 20 3d 20 70 2d 3e 61 4f 70 5b 70 63 5d 2e 70 32   = p->aOp[pc].p2
78b0: 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 4f  -1;.    }.    aO
78c0: 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20  p = p->aOp;.    
78d0: 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a  aMem = p->aMem;.
78e0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
78f0: 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e 70 31   p->rc = pOp->p1
7900: 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69  ;.  p->errorActi
7910: 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 32  on = (u8)pOp->p2
7920: 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a  ;.  p->pc = pc;.
7930: 20 20 69 66 28 20 70 2d 3e 72 63 20 29 7b 0a 20    if( p->rc ){. 
7940: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29     if( pOp->p5 )
7950: 7b 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63  {.      static c
7960: 6f 6e 73 74 20 63 68 61 72 20 2a 20 63 6f 6e 73  onst char * cons
7970: 74 20 61 7a 54 79 70 65 5b 5d 20 3d 20 7b 20 22  t azType[] = { "
7980: 4e 4f 54 20 4e 55 4c 4c 22 2c 20 22 55 4e 49 51  NOT NULL", "UNIQ
7990: 55 45 22 2c 20 22 43 48 45 43 4b 22 2c 0a 20 20  UE", "CHECK",.  
79a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79c0: 20 20 20 20 20 20 20 20 20 20 20 22 46 4f 52 45             "FORE
79d0: 49 47 4e 20 4b 45 59 22 20 7d 3b 0a 20 20 20 20  IGN KEY" };.    
79e0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
79f0: 35 3e 3d 31 20 26 26 20 70 4f 70 2d 3e 70 35 3c  5>=1 && pOp->p5<
7a00: 3d 34 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74  =4 );.      test
7a10: 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 31  case( pOp->p5==1
7a20: 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61   );.      testca
7a30: 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 32 20 29  se( pOp->p5==2 )
7a40: 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  ;.      testcase
7a50: 28 20 70 4f 70 2d 3e 70 35 3d 3d 33 20 29 3b 0a  ( pOp->p5==3 );.
7a60: 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
7a70: 70 4f 70 2d 3e 70 35 3d 3d 34 20 29 3b 0a 20 20  pOp->p5==4 );.  
7a80: 20 20 20 20 7a 54 79 70 65 20 3d 20 61 7a 54 79      zType = azTy
7a90: 70 65 5b 70 4f 70 2d 3e 70 35 2d 31 5d 3b 0a 20  pe[pOp->p5-1];. 
7aa0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
7ab0: 7a 54 79 70 65 20 3d 20 30 3b 0a 20 20 20 20 7d  zType = 0;.    }
7ac0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 7a 54 79  .    assert( zTy
7ad0: 70 65 21 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34  pe!=0 || pOp->p4
7ae0: 2e 7a 21 3d 30 20 29 3b 0a 20 20 20 20 7a 4c 6f  .z!=0 );.    zLo
7af0: 67 46 6d 74 20 3d 20 22 61 62 6f 72 74 20 61 74  gFmt = "abort at
7b00: 20 25 64 20 69 6e 20 5b 25 73 5d 3a 20 25 73 22   %d in [%s]: %s"
7b10: 3b 0a 20 20 20 20 69 66 28 20 7a 54 79 70 65 20  ;.    if( zType 
7b20: 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a  && pOp->p4.z ){.
7b30: 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
7b40: 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
7b50: 73 67 2c 20 64 62 2c 20 22 25 73 20 63 6f 6e 73  sg, db, "%s cons
7b60: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 25  traint failed: %
7b70: 73 22 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  s", .           
7b80: 20 20 20 20 20 20 20 20 20 20 20 20 7a 54 79 70              zTyp
7b90: 65 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  e, pOp->p4.z);. 
7ba0: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70     }else if( pOp
7bb0: 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20  ->p4.z ){.      
7bc0: 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
7bd0: 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
7be0: 2c 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70 34 2e  , "%s", pOp->p4.
7bf0: 7a 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  z);.    }else{. 
7c00: 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
7c10: 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
7c20: 67 2c 20 64 62 2c 20 22 25 73 20 63 6f 6e 73 74  g, db, "%s const
7c30: 72 61 69 6e 74 20 66 61 69 6c 65 64 22 2c 20 7a  raint failed", z
7c40: 54 79 70 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20  Type);.    }.   
7c50: 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 70 4f 70   sqlite3_log(pOp
7c60: 2d 3e 70 31 2c 20 7a 4c 6f 67 46 6d 74 2c 20 70  ->p1, zLogFmt, p
7c70: 63 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a  c, p->zSql, p->z
7c80: 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 72  ErrMsg);.  }.  r
7c90: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 48  c = sqlite3VdbeH
7ca0: 61 6c 74 28 70 29 3b 0a 20 20 61 73 73 65 72 74  alt(p);.  assert
7cb0: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
7cc0: 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f  Y || rc==SQLITE_
7cd0: 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45  OK || rc==SQLITE
7ce0: 5f 45 52 52 4f 52 20 29 3b 0a 20 20 69 66 28 20  _ERROR );.  if( 
7cf0: 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  rc==SQLITE_BUSY 
7d00: 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d 20 72  ){.    p->rc = r
7d10: 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
7d20: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
7d30: 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
7d40: 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63 26 30 78  _OK || (p->rc&0x
7d50: 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53  ff)==SQLITE_CONS
7d60: 54 52 41 49 4e 54 20 29 3b 0a 20 20 20 20 61 73  TRAINT );.    as
7d70: 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
7d80: 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65  _OK || db->nDefe
7d90: 72 72 65 64 43 6f 6e 73 3e 30 20 7c 7c 20 64 62  rredCons>0 || db
7da0: 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
7db0: 6e 73 3e 30 20 29 3b 0a 20 20 20 20 72 63 20 3d  ns>0 );.    rc =
7dc0: 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49 54 45 5f   p->rc ? SQLITE_
7dd0: 45 52 52 4f 52 20 3a 20 53 51 4c 49 54 45 5f 44  ERROR : SQLITE_D
7de0: 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20  ONE;.  }.  goto 
7df0: 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a  vdbe_return;.}..
7e00: 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67  /* Opcode: Integ
7e10: 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  er P1 P2 * * *.*
7e20: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
7e30: 5d 3d 50 31 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33  ]=P1.**.** The 3
7e40: 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61  2-bit integer va
7e50: 6c 75 65 20 50 31 20 69 73 20 77 72 69 74 74 65  lue P1 is writte
7e60: 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  n into register 
7e70: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P2..*/.case OP_I
7e80: 6e 74 65 67 65 72 3a 20 7b 20 20 20 20 20 20 20  nteger: {       
7e90: 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
7ea0: 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e  ease */.  pOut->
7eb0: 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  u.i = pOp->p1;. 
7ec0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
7ed0: 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20 50 32  code: Int64 * P2
7ee0: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
7ef0: 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a  sis: r[P2]=P4.**
7f00: 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
7f10: 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20  ter to a 64-bit 
7f20: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a  integer value..*
7f30: 2a 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c  * Write that val
7f40: 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  ue into register
7f50: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
7f60: 49 6e 74 36 34 3a 20 7b 20 20 20 20 20 20 20 20  Int64: {        
7f70: 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
7f80: 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72  lease */.  asser
7f90: 74 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36 34 21  t( pOp->p4.pI64!
7fa0: 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  =0 );.  pOut->u.
7fb0: 69 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 49 36  i = *pOp->p4.pI6
7fc0: 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23  4;.  break;.}..#
7fd0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
7fe0: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
7ff0: 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61  T./* Opcode: Rea
8000: 6c 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a  l * P2 * P4 *.**
8010: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
8020: 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  =P4.**.** P4 is 
8030: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36  a pointer to a 6
8040: 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20 70  4-bit floating p
8050: 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20 57  oint value..** W
8060: 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20  rite that value 
8070: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
8080: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61  ..*/.case OP_Rea
8090: 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  l: {            
80a0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 46 4c  /* same as TK_FL
80b0: 4f 41 54 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c  OAT, out2-prerel
80c0: 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e  ease */.  pOut->
80d0: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 65 61 6c  flags = MEM_Real
80e0: 3b 0a 20 20 61 73 73 65 72 74 28 20 21 73 71 6c  ;.  assert( !sql
80f0: 69 74 65 33 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e  ite3IsNaN(*pOp->
8100: 70 34 2e 70 52 65 61 6c 29 20 29 3b 0a 20 20 70  p4.pReal) );.  p
8110: 4f 75 74 2d 3e 72 20 3d 20 2a 70 4f 70 2d 3e 70  Out->r = *pOp->p
8120: 34 2e 70 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b  4.pReal;.  break
8130: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f  ;.}.#endif../* O
8140: 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 38 20 2a  pcode: String8 *
8150: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
8160: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50  nopsis: r[P2]='P
8170: 34 27 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e  4'.**.** P4 poin
8180: 74 73 20 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d  ts to a nul term
8190: 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74 72  inated UTF-8 str
81a0: 69 6e 67 2e 20 54 68 69 73 20 6f 70 63 6f 64 65  ing. This opcode
81b0: 20 69 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20   is transformed 
81c0: 0a 2a 2a 20 69 6e 74 6f 20 61 20 53 74 72 69 6e  .** into a Strin
81d0: 67 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 65  g before it is e
81e0: 78 65 63 75 74 65 64 20 66 6f 72 20 74 68 65 20  xecuted for the 
81f0: 66 69 72 73 74 20 74 69 6d 65 2e 20 20 44 75 72  first time.  Dur
8200: 69 6e 67 0a 2a 2a 20 74 68 69 73 20 74 72 61 6e  ing.** this tran
8210: 73 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20  sformation, the 
8220: 6c 65 6e 67 74 68 20 6f 66 20 73 74 72 69 6e 67  length of string
8230: 20 50 34 20 69 73 20 63 6f 6d 70 75 74 65 64 20   P4 is computed 
8240: 61 6e 64 20 73 74 6f 72 65 64 0a 2a 2a 20 61 73  and stored.** as
8250: 20 74 68 65 20 50 31 20 70 61 72 61 6d 65 74 65   the P1 paramete
8260: 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74  r..*/.case OP_St
8270: 72 69 6e 67 38 3a 20 7b 20 20 20 20 20 20 20 20  ring8: {        
8280: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53   /* same as TK_S
8290: 54 52 49 4e 47 2c 20 6f 75 74 32 2d 70 72 65 72  TRING, out2-prer
82a0: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65  elease */.  asse
82b0: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30  rt( pOp->p4.z!=0
82c0: 20 29 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64   );.  pOp->opcod
82d0: 65 20 3d 20 4f 50 5f 53 74 72 69 6e 67 3b 0a 20  e = OP_String;. 
82e0: 20 70 4f 70 2d 3e 70 31 20 3d 20 73 71 6c 69 74   pOp->p1 = sqlit
82f0: 65 33 53 74 72 6c 65 6e 33 30 28 70 4f 70 2d 3e  e3Strlen30(pOp->
8300: 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e 64 65 66 20  p4.z);..#ifndef 
8310: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
8320: 36 0a 20 20 69 66 28 20 65 6e 63 6f 64 69 6e 67  6.  if( encoding
8330: 21 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29 7b  !=SQLITE_UTF8 ){
8340: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
8350: 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70  3VdbeMemSetStr(p
8360: 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20  Out, pOp->p4.z, 
8370: 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  -1, SQLITE_UTF8,
8380: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
8390: 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
83a0: 49 54 45 5f 54 4f 4f 42 49 47 20 29 20 67 6f 74  ITE_TOOBIG ) got
83b0: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 69  o too_big;.    i
83c0: 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 73 71  f( SQLITE_OK!=sq
83d0: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
83e0: 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e  ncoding(pOut, en
83f0: 63 6f 64 69 6e 67 29 20 29 20 67 6f 74 6f 20 6e  coding) ) goto n
8400: 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73 73 65 72  o_mem;.    asser
8410: 74 28 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63  t( pOut->zMalloc
8420: 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20 20  ==pOut->z );.   
8430: 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d   assert( VdbeMem
8440: 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 3d 3d 30  Dynamic(pOut)==0
8450: 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 4d   );.    pOut->zM
8460: 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 70  alloc = 0;.    p
8470: 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Out->flags |= ME
8480: 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20 20 69 66  M_Static;.    if
8490: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
84a0: 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20 20  4_DYNAMIC ){.   
84b0: 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
84c0: 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  (db, pOp->p4.z);
84d0: 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d 3e  .    }.    pOp->
84e0: 70 34 74 79 70 65 20 3d 20 50 34 5f 44 59 4e 41  p4type = P4_DYNA
84f0: 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34  MIC;.    pOp->p4
8500: 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20  .z = pOut->z;.  
8510: 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75 74    pOp->p1 = pOut
8520: 2d 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  ->n;.  }.#endif.
8530: 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64 62    if( pOp->p1>db
8540: 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
8550: 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
8560: 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
8570: 67 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c  g;.  }.  /* Fall
8580: 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
8590: 6e 65 78 74 20 63 61 73 65 2c 20 4f 50 5f 53 74  next case, OP_St
85a0: 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20  ring */.}.  ./* 
85b0: 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 20 50  Opcode: String P
85c0: 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  1 P2 * P4 *.** S
85d0: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27  ynopsis: r[P2]='
85e0: 50 34 27 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a  P4' (len=P1).**.
85f0: 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20 76 61  ** The string va
8600: 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e 67 74 68  lue P4 of length
8610: 20 50 31 20 28 62 79 74 65 73 29 20 69 73 20 73   P1 (bytes) is s
8620: 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
8630: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
8640: 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20 20 20 20  _String: {      
8650: 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
8660: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65  elease */.  asse
8670: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30  rt( pOp->p4.z!=0
8680: 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   );.  pOut->flag
8690: 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f  s = MEM_Str|MEM_
86a0: 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b  Static|MEM_Term;
86b0: 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70  .  pOut->z = pOp
86c0: 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e  ->p4.z;.  pOut->
86d0: 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  n = pOp->p1;.  p
86e0: 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  Out->enc = encod
86f0: 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ing;.  UPDATE_MA
8700: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
8710: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
8720: 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 50 31   Opcode: Null P1
8730: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
8740: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 32 2e 2e 50  nopsis:  r[P2..P
8750: 33 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 57 72  3]=NULL.**.** Wr
8760: 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f 20  ite a NULL into 
8770: 72 65 67 69 73 74 65 72 73 20 50 32 2e 20 20 49  registers P2.  I
8780: 66 20 50 33 20 67 72 65 61 74 65 72 20 74 68 61  f P3 greater tha
8790: 6e 20 50 32 2c 20 74 68 65 6e 20 61 6c 73 6f 20  n P2, then also 
87a0: 77 72 69 74 65 0a 2a 2a 20 4e 55 4c 4c 20 69 6e  write.** NULL in
87b0: 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 20 61  to register P3 a
87c0: 6e 64 20 65 76 65 72 79 20 72 65 67 69 73 74 65  nd every registe
87d0: 72 20 69 6e 20 62 65 74 77 65 65 6e 20 50 32 20  r in between P2 
87e0: 61 6e 64 20 50 33 2e 20 20 49 66 20 50 33 0a 2a  and P3.  If P3.*
87f0: 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 50  * is less than P
8800: 32 20 28 74 79 70 69 63 61 6c 6c 79 20 50 33 20  2 (typically P3 
8810: 69 73 20 7a 65 72 6f 29 20 74 68 65 6e 20 6f 6e  is zero) then on
8820: 6c 79 20 72 65 67 69 73 74 65 72 20 50 32 20 69  ly register P2 i
8830: 73 0a 2a 2a 20 73 65 74 20 74 6f 20 4e 55 4c 4c  s.** set to NULL
8840: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
8850: 31 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a  1 value is non-z
8860: 65 72 6f 2c 20 74 68 65 6e 20 61 6c 73 6f 20 73  ero, then also s
8870: 65 74 20 74 68 65 20 4d 45 4d 5f 43 6c 65 61 72  et the MEM_Clear
8880: 65 64 20 66 6c 61 67 20 73 6f 20 74 68 61 74 0a  ed flag so that.
8890: 2a 2a 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 77  ** NULL values w
88a0: 69 6c 6c 20 6e 6f 74 20 63 6f 6d 70 61 72 65 20  ill not compare 
88b0: 65 71 75 61 6c 20 65 76 65 6e 20 69 66 20 53 51  equal even if SQ
88c0: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73  LITE_NULLEQ is s
88d0: 65 74 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e 65 20 6f  et on.** OP_Ne o
88e0: 72 20 4f 50 5f 45 71 2e 0a 2a 2f 0a 63 61 73 65  r OP_Eq..*/.case
88f0: 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20 20   OP_Null: {     
8900: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
8910: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e  erelease */.  in
8920: 74 20 63 6e 74 3b 0a 20 20 75 31 36 20 6e 75 6c  t cnt;.  u16 nul
8930: 6c 46 6c 61 67 3b 0a 20 20 63 6e 74 20 3d 20 70  lFlag;.  cnt = p
8940: 4f 70 2d 3e 70 33 2d 70 4f 70 2d 3e 70 32 3b 0a  Op->p3-pOp->p2;.
8950: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
8960: 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  3<=(p->nMem-p->n
8970: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75  Cursor) );.  pOu
8980: 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c 46  t->flags = nullF
8990: 6c 61 67 20 3d 20 70 4f 70 2d 3e 70 31 20 3f 20  lag = pOp->p1 ? 
89a0: 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 43 6c  (MEM_Null|MEM_Cl
89b0: 65 61 72 65 64 29 20 3a 20 4d 45 4d 5f 4e 75 6c  eared) : MEM_Nul
89c0: 6c 3b 0a 20 20 77 68 69 6c 65 28 20 63 6e 74 3e  l;.  while( cnt>
89d0: 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b  0 ){.    pOut++;
89e0: 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  .    memAboutToC
89f0: 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
8a00: 20 20 20 20 56 64 62 65 4d 65 6d 52 65 6c 65 61      VdbeMemRelea
8a10: 73 65 45 78 74 65 72 6e 28 70 4f 75 74 29 3b 0a  seExtern(pOut);.
8a20: 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
8a30: 3d 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 20 20  = nullFlag;.    
8a40: 63 6e 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72 65  cnt--;.  }.  bre
8a50: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
8a60: 3a 20 53 6f 66 74 4e 75 6c 6c 20 50 31 20 2a 20  : SoftNull P1 * 
8a70: 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
8a80: 73 3a 20 20 72 5b 50 31 5d 3d 4e 55 4c 4c 0a 2a  s:  r[P1]=NULL.*
8a90: 2a 0a 2a 2a 20 53 65 74 20 72 65 67 69 73 74 65  *.** Set registe
8aa0: 72 20 50 31 20 74 6f 20 68 61 76 65 20 74 68 65  r P1 to have the
8ab0: 20 76 61 6c 75 65 20 4e 55 4c 4c 20 61 73 20 73   value NULL as s
8ac0: 65 65 6e 20 62 79 20 74 68 65 20 4f 50 5f 4d 61  een by the OP_Ma
8ad0: 6b 65 52 65 63 6f 72 64 0a 2a 2a 20 69 6e 73 74  keRecord.** inst
8ae0: 72 75 63 74 69 6f 6e 2c 20 62 75 74 20 64 6f 20  ruction, but do 
8af0: 6e 6f 74 20 66 72 65 65 20 61 6e 79 20 73 74 72  not free any str
8b00: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d 65 6d 6f  ing or blob memo
8b10: 72 79 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ry associated wi
8b20: 74 68 0a 2a 2a 20 74 68 65 20 72 65 67 69 73 74  th.** the regist
8b30: 65 72 2c 20 73 6f 20 74 68 61 74 20 69 66 20 74  er, so that if t
8b40: 68 65 20 76 61 6c 75 65 20 77 61 73 20 61 20 73  he value was a s
8b50: 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 68  tring or blob th
8b60: 61 74 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f  at was.** previo
8b70: 75 73 6c 79 20 63 6f 70 69 65 64 20 75 73 69 6e  usly copied usin
8b80: 67 20 4f 50 5f 53 43 6f 70 79 2c 20 74 68 65 20  g OP_SCopy, the 
8b90: 63 6f 70 69 65 73 20 77 69 6c 6c 20 63 6f 6e 74  copies will cont
8ba0: 69 6e 75 65 20 74 6f 20 62 65 20 76 61 6c 69 64  inue to be valid
8bb0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 66  ..*/.case OP_Sof
8bc0: 74 4e 75 6c 6c 3a 20 7b 0a 20 20 61 73 73 65 72  tNull: {.  asser
8bd0: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20  t( pOp->p1>0 && 
8be0: 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p1<=(p->nMe
8bf0: 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
8c00: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
8c10: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74  pOp->p1];.  pOut
8c20: 2d 3e 66 6c 61 67 73 20 3d 20 28 70 4f 75 74 2d  ->flags = (pOut-
8c30: 3e 66 6c 61 67 73 7c 4d 45 4d 5f 4e 75 6c 6c 29  >flags|MEM_Null)
8c40: 26 7e 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b  &~MEM_Undefined;
8c50: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
8c60: 4f 70 63 6f 64 65 3a 20 42 6c 6f 62 20 50 31 20  Opcode: Blob P1 
8c70: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
8c80: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 20  opsis: r[P2]=P4 
8c90: 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 50  (len=P1).**.** P
8ca0: 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 62 6c  4 points to a bl
8cb0: 6f 62 20 6f 66 20 64 61 74 61 20 50 31 20 62 79  ob of data P1 by
8cc0: 74 65 73 20 6c 6f 6e 67 2e 20 20 53 74 6f 72 65  tes long.  Store
8cd0: 20 74 68 69 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e   this.** blob in
8ce0: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
8cf0: 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b  .case OP_Blob: {
8d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d10: 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
8d20: 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  se */.  assert( 
8d30: 70 4f 70 2d 3e 70 31 20 3c 3d 20 53 51 4c 49 54  pOp->p1 <= SQLIT
8d40: 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 20 29 3b 0a  E_MAX_LENGTH );.
8d50: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
8d60: 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70  SetStr(pOut, pOp
8d70: 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c  ->p4.z, pOp->p1,
8d80: 20 30 2c 20 30 29 3b 0a 20 20 70 4f 75 74 2d 3e   0, 0);.  pOut->
8d90: 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
8da0: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
8db0: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
8dc0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
8dd0: 64 65 3a 20 56 61 72 69 61 62 6c 65 20 50 31 20  de: Variable P1 
8de0: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
8df0: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 70 61 72  opsis: r[P2]=par
8e00: 61 6d 65 74 65 72 28 50 31 2c 50 34 29 0a 2a 2a  ameter(P1,P4).**
8e10: 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20 74 68 65  .** Transfer the
8e20: 20 76 61 6c 75 65 73 20 6f 66 20 62 6f 75 6e 64   values of bound
8e30: 20 70 61 72 61 6d 65 74 65 72 20 50 31 20 69 6e   parameter P1 in
8e40: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  to register P2.*
8e50: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 70 61 72 61  *.** If the para
8e60: 6d 65 74 65 72 20 69 73 20 6e 61 6d 65 64 2c 20  meter is named, 
8e70: 74 68 65 6e 20 69 74 73 20 6e 61 6d 65 20 61 70  then its name ap
8e80: 70 65 61 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 20  pears in P4..** 
8e90: 54 68 65 20 50 34 20 76 61 6c 75 65 20 69 73 20  The P4 value is 
8ea0: 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  used by sqlite3_
8eb0: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e  bind_parameter_n
8ec0: 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ame()..*/.case O
8ed0: 50 5f 56 61 72 69 61 62 6c 65 3a 20 7b 20 20 20  P_Variable: {   
8ee0: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
8ef0: 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
8f00: 20 4d 65 6d 20 2a 70 56 61 72 3b 20 20 20 20 20   Mem *pVar;     
8f10: 20 20 2f 2a 20 56 61 6c 75 65 20 62 65 69 6e 67    /* Value being
8f20: 20 74 72 61 6e 73 66 65 72 72 65 64 20 2a 2f 0a   transferred */.
8f30: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
8f40: 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  p1>0 && pOp->p1<
8f50: 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 61 73  =p->nVar );.  as
8f60: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d  sert( pOp->p4.z=
8f70: 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d  =0 || pOp->p4.z=
8f80: 3d 70 2d 3e 61 7a 56 61 72 5b 70 4f 70 2d 3e 70  =p->azVar[pOp->p
8f90: 31 2d 31 5d 20 29 3b 0a 20 20 70 56 61 72 20 3d  1-1] );.  pVar =
8fa0: 20 26 70 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e 70   &p->aVar[pOp->p
8fb0: 31 20 2d 20 31 5d 3b 0a 20 20 69 66 28 20 73 71  1 - 1];.  if( sq
8fc0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42  lite3VdbeMemTooB
8fd0: 69 67 28 70 56 61 72 29 20 29 7b 0a 20 20 20 20  ig(pVar) ){.    
8fe0: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
8ff0: 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  }.  sqlite3VdbeM
9000: 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
9010: 75 74 2c 20 70 56 61 72 2c 20 4d 45 4d 5f 53 74  ut, pVar, MEM_St
9020: 61 74 69 63 29 3b 0a 20 20 55 50 44 41 54 45 5f  atic);.  UPDATE_
9030: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
9040: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
9050: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20  /* Opcode: Move 
9060: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
9070: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 32 40  Synopsis:  r[P2@
9080: 50 33 5d 3d 72 5b 50 31 40 50 33 5d 0a 2a 2a 0a  P3]=r[P1@P3].**.
9090: 2a 2a 20 4d 6f 76 65 20 74 68 65 20 50 33 20 76  ** Move the P3 v
90a0: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
90b0: 72 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 6f 76  r P1..P1+P3-1 ov
90c0: 65 72 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73  er into.** regis
90d0: 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2d 31  ters P2..P2+P3-1
90e0: 2e 20 20 52 65 67 69 73 74 65 72 73 20 50 31 2e  .  Registers P1.
90f0: 2e 50 31 2b 50 33 2d 31 20 61 72 65 0a 2a 2a 20  .P1+P3-1 are.** 
9100: 6c 65 66 74 20 68 6f 6c 64 69 6e 67 20 61 20 4e  left holding a N
9110: 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 6e 20 65  ULL.  It is an e
9120: 72 72 6f 72 20 66 6f 72 20 72 65 67 69 73 74 65  rror for registe
9130: 72 20 72 61 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e  r ranges.** P1..
9140: 50 31 2b 50 33 2d 31 20 61 6e 64 20 50 32 2e 2e  P1+P3-1 and P2..
9150: 50 32 2b 50 33 2d 31 20 74 6f 20 6f 76 65 72 6c  P2+P3-1 to overl
9160: 61 70 2e 20 20 49 74 20 69 73 20 61 6e 20 65 72  ap.  It is an er
9170: 72 6f 72 0a 2a 2a 20 66 6f 72 20 50 33 20 74 6f  ror.** for P3 to
9180: 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20 31 2e   be less than 1.
9190: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65  .*/.case OP_Move
91a0: 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4d 61 6c  : {.  char *zMal
91b0: 6c 6f 63 3b 20 20 20 2f 2a 20 48 6f 6c 64 69 6e  loc;   /* Holdin
91c0: 67 20 76 61 72 69 61 62 6c 65 20 66 6f 72 20 61  g variable for a
91d0: 6c 6c 6f 63 61 74 65 64 20 6d 65 6d 6f 72 79 20  llocated memory 
91e0: 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20  */.  int n;     
91f0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
9200: 6f 66 20 72 65 67 69 73 74 65 72 73 20 6c 65 66  of registers lef
9210: 74 20 74 6f 20 63 6f 70 79 20 2a 2f 0a 20 20 69  t to copy */.  i
9220: 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20 20 20  nt p1;          
9230: 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 63  /* Register to c
9240: 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e  opy from */.  in
9250: 74 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 2f  t p2;          /
9260: 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f  * Register to co
9270: 70 79 20 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20  py to */..  n = 
9280: 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 31 20 3d 20  pOp->p3;.  p1 = 
9290: 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20  pOp->p1;.  p2 = 
92a0: 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
92b0: 74 28 20 6e 3e 30 20 26 26 20 70 31 3e 30 20 26  t( n>0 && p1>0 &
92c0: 26 20 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65  & p2>0 );.  asse
92d0: 72 74 28 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20  rt( p1+n<=p2 || 
92e0: 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20 70  p2+n<=p1 );..  p
92f0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b  In1 = &aMem[p1];
9300: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
9310: 70 32 5d 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61  p2];.  do{.    a
9320: 73 73 65 72 74 28 20 70 4f 75 74 3c 3d 26 61 4d  ssert( pOut<=&aM
9330: 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  em[(p->nMem-p->n
9340: 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20  Cursor)] );.    
9350: 61 73 73 65 72 74 28 20 70 49 6e 31 3c 3d 26 61  assert( pIn1<=&a
9360: 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  Mem[(p->nMem-p->
9370: 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20  nCursor)] );.   
9380: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
9390: 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20  lid(pIn1) );.   
93a0: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
93b0: 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  e(p, pOut);.    
93c0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
93d0: 6c 65 61 73 65 28 70 4f 75 74 29 3b 0a 20 20 20  lease(pOut);.   
93e0: 20 7a 4d 61 6c 6c 6f 63 20 3d 20 70 4f 75 74 2d   zMalloc = pOut-
93f0: 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 6d 65  >zMalloc;.    me
9400: 6d 63 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c  mcpy(pOut, pIn1,
9410: 20 73 69 7a 65 6f 66 28 4d 65 6d 29 29 3b 0a 23   sizeof(Mem));.#
9420: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
9430: 55 47 0a 20 20 20 20 69 66 28 20 70 4f 75 74 2d  UG.    if( pOut-
9440: 3e 70 53 63 6f 70 79 46 72 6f 6d 3e 3d 26 61 4d  >pScopyFrom>=&aM
9450: 65 6d 5b 70 31 5d 20 26 26 20 70 4f 75 74 2d 3e  em[p1] && pOut->
9460: 70 53 63 6f 70 79 46 72 6f 6d 3c 26 61 4d 65 6d  pScopyFrom<&aMem
9470: 5b 70 31 2b 70 4f 70 2d 3e 70 33 5d 20 29 7b 0a  [p1+pOp->p3] ){.
9480: 20 20 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f        pOut->pSco
9490: 70 79 46 72 6f 6d 20 2b 3d 20 70 31 20 2d 20 70  pyFrom += p1 - p
94a0: 4f 70 2d 3e 70 32 3b 0a 20 20 20 20 7d 0a 23 65  Op->p2;.    }.#e
94b0: 6e 64 69 66 0a 20 20 20 20 70 49 6e 31 2d 3e 66  ndif.    pIn1->f
94c0: 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66  lags = MEM_Undef
94d0: 69 6e 65 64 3b 0a 20 20 20 20 70 49 6e 31 2d 3e  ined;.    pIn1->
94e0: 78 44 65 6c 20 3d 20 30 3b 0a 20 20 20 20 70 49  xDel = 0;.    pI
94f0: 6e 31 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 7a 4d  n1->zMalloc = zM
9500: 61 6c 6c 6f 63 3b 0a 20 20 20 20 52 45 47 49 53  alloc;.    REGIS
9510: 54 45 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c 20  TER_TRACE(p2++, 
9520: 70 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e 31 2b  pOut);.    pIn1+
9530: 2b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20  +;.    pOut++;. 
9540: 20 7d 77 68 69 6c 65 28 20 2d 2d 6e 20 29 3b 0a   }while( --n );.
9550: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
9560: 70 63 6f 64 65 3a 20 43 6f 70 79 20 50 31 20 50  pcode: Copy P1 P
9570: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
9580: 70 73 69 73 3a 20 72 5b 50 32 40 50 33 2b 31 5d  psis: r[P2@P3+1]
9590: 3d 72 5b 50 31 40 50 33 2b 31 5d 0a 2a 2a 0a 2a  =r[P1@P3+1].**.*
95a0: 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66  * Make a copy of
95b0: 20 72 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50   registers P1..P
95c0: 31 2b 50 33 20 69 6e 74 6f 20 72 65 67 69 73 74  1+P3 into regist
95d0: 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2e 0a 2a  ers P2..P2+P3..*
95e0: 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
95f0: 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65  ction makes a de
9600: 65 70 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76  ep copy of the v
9610: 61 6c 75 65 2e 20 20 41 20 64 75 70 6c 69 63 61  alue.  A duplica
9620: 74 65 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66  te.** is made of
9630: 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62   any string or b
9640: 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53  lob constant.  S
9650: 65 65 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79  ee also OP_SCopy
9660: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70  ..*/.case OP_Cop
9670: 79 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20  y: {.  int n;.. 
9680: 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20   n = pOp->p3;.  
9690: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
96a0: 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p1];.  pOut = 
96b0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
96c0: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d    assert( pOut!=
96d0: 70 49 6e 31 20 29 3b 0a 20 20 77 68 69 6c 65 28  pIn1 );.  while(
96e0: 20 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65   1 ){.    sqlite
96f0: 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
9700: 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20  opy(pOut, pIn1, 
9710: 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 20 20  MEM_Ephem);.    
9720: 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70  Deephemeralize(p
9730: 4f 75 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  Out);.#ifdef SQL
9740: 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 70 4f  ITE_DEBUG.    pO
9750: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d  ut->pScopyFrom =
9760: 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 52   0;.#endif.    R
9770: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
9780: 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 2d 6e 2c  p->p2+pOp->p3-n,
9790: 20 70 4f 75 74 29 3b 0a 20 20 20 20 69 66 28 20   pOut);.    if( 
97a0: 28 6e 2d 2d 29 3d 3d 30 20 29 20 62 72 65 61 6b  (n--)==0 ) break
97b0: 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20  ;.    pOut++;.  
97c0: 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20    pIn1++;.  }.  
97d0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
97e0: 6f 64 65 3a 20 53 43 6f 70 79 20 50 31 20 50 32  ode: SCopy P1 P2
97f0: 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
9800: 69 73 3a 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 0a  is: r[P2]=r[P1].
9810: 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68 61  **.** Make a sha
9820: 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72 65 67  llow copy of reg
9830: 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65  ister P1 into re
9840: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
9850: 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
9860: 6e 20 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c 6f  n makes a shallo
9870: 77 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61  w copy of the va
9880: 6c 75 65 2e 20 20 49 66 20 74 68 65 20 76 61 6c  lue.  If the val
9890: 75 65 0a 2a 2a 20 69 73 20 61 20 73 74 72 69 6e  ue.** is a strin
98a0: 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e 20  g or blob, then 
98b0: 74 68 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c 79  the copy is only
98c0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
98d0: 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61 6e  e.** original an
98e0: 64 20 68 65 6e 63 65 20 69 66 20 74 68 65 20 6f  d hence if the o
98f0: 72 69 67 69 6e 61 6c 20 63 68 61 6e 67 65 73 20  riginal changes 
9900: 73 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f 70 79  so will the copy
9910: 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20 74  ..** Worse, if t
9920: 68 65 20 6f 72 69 67 69 6e 61 6c 20 69 73 20 64  he original is d
9930: 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 20  eallocated, the 
9940: 63 6f 70 79 20 62 65 63 6f 6d 65 73 20 69 6e 76  copy becomes inv
9950: 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74 68  alid..** Thus th
9960: 65 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20 67  e program must g
9970: 75 61 72 61 6e 74 65 65 20 74 68 61 74 20 74 68  uarantee that th
9980: 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c 20  e original will 
9990: 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64 75  not change.** du
99a0: 72 69 6e 67 20 74 68 65 20 6c 69 66 65 74 69 6d  ring the lifetim
99b0: 65 20 6f 66 20 74 68 65 20 63 6f 70 79 2e 20 20  e of the copy.  
99c0: 55 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20 6d  Use OP_Copy to m
99d0: 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a 2a  ake a complete.*
99e0: 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20  * copy..*/.case 
99f0: 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20 20  OP_SCopy: {     
9a00: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
9a10: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
9a20: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
9a30: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
9a40: 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  2];.  assert( pO
9a50: 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71  ut!=pIn1 );.  sq
9a60: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
9a70: 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49  lowCopy(pOut, pI
9a80: 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a  n1, MEM_Ephem);.
9a90: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
9aa0: 42 55 47 0a 20 20 69 66 28 20 70 4f 75 74 2d 3e  BUG.  if( pOut->
9ab0: 70 53 63 6f 70 79 46 72 6f 6d 3d 3d 30 20 29 20  pScopyFrom==0 ) 
9ac0: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
9ad0: 20 3d 20 70 49 6e 31 3b 0a 23 65 6e 64 69 66 0a   = pIn1;.#endif.
9ae0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
9af0: 70 63 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f 77  pcode: ResultRow
9b00: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
9b10: 53 79 6e 6f 70 73 69 73 3a 20 20 6f 75 74 70 75  Synopsis:  outpu
9b20: 74 3d 72 5b 50 31 40 50 32 5d 0a 2a 2a 0a 2a 2a  t=r[P1@P2].**.**
9b30: 20 54 68 65 20 72 65 67 69 73 74 65 72 73 20 50   The registers P
9b40: 31 20 74 68 72 6f 75 67 68 20 50 31 2b 50 32 2d  1 through P1+P2-
9b50: 31 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67  1 contain a sing
9b60: 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72 65 73  le row of.** res
9b70: 75 6c 74 73 2e 20 54 68 69 73 20 6f 70 63 6f 64  ults. This opcod
9b80: 65 20 63 61 75 73 65 73 20 74 68 65 20 73 71 6c  e causes the sql
9b90: 69 74 65 33 5f 73 74 65 70 28 29 20 63 61 6c 6c  ite3_step() call
9ba0: 20 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a 2a 2a   to terminate.**
9bb0: 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f   with an SQLITE_
9bc0: 52 4f 57 20 72 65 74 75 72 6e 20 63 6f 64 65 20  ROW return code 
9bd0: 61 6e 64 20 69 74 20 73 65 74 73 20 75 70 20 74  and it sets up t
9be0: 68 65 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 0a  he sqlite3_stmt.
9bf0: 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74 6f 20  ** structure to 
9c00: 70 72 6f 76 69 64 65 20 61 63 63 65 73 73 20 74  provide access t
9c10: 6f 20 74 68 65 20 72 28 50 31 29 2e 2e 72 28 50  o the r(P1)..r(P
9c20: 31 2b 50 32 2d 31 29 20 76 61 6c 75 65 73 20 61  1+P2-1) values a
9c30: 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20  s.** the result 
9c40: 72 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  row..*/.case OP_
9c50: 52 65 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d  ResultRow: {.  M
9c60: 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74 20  em *pMem;.  int 
9c70: 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  i;.  assert( p->
9c80: 6e 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d  nResColumn==pOp-
9c90: 3e 70 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28  >p2 );.  assert(
9ca0: 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20   pOp->p1>0 );.  
9cb0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 2b  assert( pOp->p1+
9cc0: 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p2<=(p->nMe
9cd0: 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  m-p->nCursor)+1 
9ce0: 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
9cf0: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
9d00: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 52  _CALLBACK.  /* R
9d10: 75 6e 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  un the progress 
9d20: 63 6f 75 6e 74 65 72 20 6a 75 73 74 20 62 65 66  counter just bef
9d30: 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 2e 0a 20  ore returning.. 
9d40: 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50   */.  if( db->xP
9d50: 72 6f 67 72 65 73 73 21 3d 30 0a 20 20 20 26 26  rogress!=0.   &&
9d60: 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f 67 72   nVmStep>=nProgr
9d70: 65 73 73 4c 69 6d 69 74 0a 20 20 20 26 26 20 64  essLimit.   && d
9d80: 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d  b->xProgress(db-
9d90: 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29 21 3d  >pProgressArg)!=
9da0: 30 0a 20 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  0.  ){.    rc = 
9db0: 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54  SQLITE_INTERRUPT
9dc0: 3b 0a 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f  ;.    goto vdbe_
9dd0: 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 20 20 7d 0a  error_halt;.  }.
9de0: 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 49 66 20  #endif..  /* If 
9df0: 74 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 68  this statement h
9e00: 61 73 20 76 69 6f 6c 61 74 65 64 20 69 6d 6d 65  as violated imme
9e10: 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65  diate foreign ke
9e20: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 64  y constraints, d
9e30: 6f 0a 20 20 2a 2a 20 6e 6f 74 20 72 65 74 75 72  o.  ** not retur
9e40: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
9e50: 72 6f 77 73 20 6d 6f 64 69 66 69 65 64 2e 20 41  rows modified. A
9e60: 6e 64 20 64 6f 20 6e 6f 74 20 52 45 4c 45 41 53  nd do not RELEAS
9e70: 45 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a  E the statement.
9e80: 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e    ** transaction
9e90: 2e 20 49 74 20 6e 65 65 64 73 20 74 6f 20 62 65  . It needs to be
9ea0: 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 2a   rolled back.  *
9eb0: 2f 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f  /.  if( SQLITE_O
9ec0: 4b 21 3d 28 72 63 20 3d 20 73 71 6c 69 74 65 33  K!=(rc = sqlite3
9ed0: 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 30  VdbeCheckFk(p, 0
9ee0: 29 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  )) ){.    assert
9ef0: 28 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49  ( db->flags&SQLI
9f00: 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a  TE_CountRows );.
9f10: 20 20 20 20 61 73 73 65 72 74 28 20 70 2d 3e 75      assert( p->u
9f20: 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 29  sesStmtJournal )
9f30: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
9f40: 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 53 51  ..  /* If the SQ
9f50: 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 66  LITE_CountRows f
9f60: 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 73 71  lag is set in sq
9f70: 6c 69 74 65 33 2e 66 6c 61 67 73 20 6d 61 73 6b  lite3.flags mask
9f80: 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c  , then .  ** DML
9f90: 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 76 6f   statements invo
9fa0: 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20 74  ke this opcode t
9fb0: 6f 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d  o return the num
9fc0: 62 65 72 20 6f 66 20 72 6f 77 73 20 0a 20 20 2a  ber of rows .  *
9fd0: 2a 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 74 68  * modified to th
9fe0: 65 20 75 73 65 72 2e 20 54 68 69 73 20 69 73 20  e user. This is 
9ff0: 74 68 65 20 6f 6e 6c 79 20 77 61 79 20 74 68 61  the only way tha
a000: 74 20 61 20 56 4d 20 74 68 61 74 0a 20 20 2a 2a  t a VM that.  **
a010: 20 6f 70 65 6e 73 20 61 20 73 74 61 74 65 6d 65   opens a stateme
a020: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d  nt transaction m
a030: 61 79 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f  ay invoke this o
a040: 70 63 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  pcode..  **.  **
a050: 20 49 6e 20 63 61 73 65 20 74 68 69 73 20 69 73   In case this is
a060: 20 73 75 63 68 20 61 20 73 74 61 74 65 6d 65 6e   such a statemen
a070: 74 2c 20 63 6c 6f 73 65 20 61 6e 79 20 73 74 61  t, close any sta
a080: 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
a090: 6f 6e 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20 62  on.  ** opened b
a0a0: 79 20 74 68 69 73 20 56 4d 20 62 65 66 6f 72 65  y this VM before
a0b0: 20 72 65 74 75 72 6e 69 6e 67 20 63 6f 6e 74 72   returning contr
a0c0: 6f 6c 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20  ol to the user. 
a0d0: 54 68 69 73 20 69 73 20 74 6f 0a 20 20 2a 2a 20  This is to.  ** 
a0e0: 65 6e 73 75 72 65 20 74 68 61 74 20 73 74 61 74  ensure that stat
a0f0: 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f  ement-transactio
a100: 6e 73 20 61 72 65 20 61 6c 77 61 79 73 20 6e 65  ns are always ne
a110: 73 74 65 64 2c 20 6e 6f 74 20 6f 76 65 72 6c 61  sted, not overla
a120: 70 70 69 6e 67 2e 0a 20 20 2a 2a 20 49 66 20 74  pping..  ** If t
a130: 68 65 20 6f 70 65 6e 20 73 74 61 74 65 6d 65 6e  he open statemen
a140: 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  t-transaction is
a150: 20 6e 6f 74 20 63 6c 6f 73 65 64 20 68 65 72 65   not closed here
a160: 2c 20 74 68 65 6e 20 74 68 65 20 75 73 65 72 0a  , then the user.
a170: 20 20 2a 2a 20 6d 61 79 20 73 74 65 70 20 61 6e    ** may step an
a180: 6f 74 68 65 72 20 56 4d 20 74 68 61 74 20 6f 70  other VM that op
a190: 65 6e 73 20 69 74 73 20 6f 77 6e 20 73 74 61 74  ens its own stat
a1a0: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
a1b0: 6e 2e 20 54 68 69 73 0a 20 20 2a 2a 20 6d 61 79  n. This.  ** may
a1c0: 20 6c 65 61 64 20 74 6f 20 6f 76 65 72 6c 61 70   lead to overlap
a1d0: 70 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 74  ping statement t
a1e0: 72 61 6e 73 61 63 74 69 6f 6e 73 2e 0a 20 20 2a  ransactions..  *
a1f0: 2a 0a 20 20 2a 2a 20 54 68 65 20 73 74 61 74 65  *.  ** The state
a200: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
a210: 20 69 73 20 6e 65 76 65 72 20 61 20 74 6f 70 2d   is never a top-
a220: 6c 65 76 65 6c 20 74 72 61 6e 73 61 63 74 69 6f  level transactio
a230: 6e 2e 20 20 48 65 6e 63 65 0a 20 20 2a 2a 20 74  n.  Hence.  ** t
a240: 68 65 20 52 45 4c 45 41 53 45 20 63 61 6c 6c 20  he RELEASE call 
a250: 62 65 6c 6f 77 20 63 61 6e 20 6e 65 76 65 72 20  below can never 
a260: 66 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73 73  fail..  */.  ass
a270: 65 72 74 28 20 70 2d 3e 69 53 74 61 74 65 6d 65  ert( p->iStateme
a280: 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c 61  nt==0 || db->fla
a290: 67 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52  gs&SQLITE_CountR
a2a0: 6f 77 73 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  ows );.  rc = sq
a2b0: 6c 69 74 65 33 56 64 62 65 43 6c 6f 73 65 53 74  lite3VdbeCloseSt
a2c0: 61 74 65 6d 65 6e 74 28 70 2c 20 53 41 56 45 50  atement(p, SAVEP
a2d0: 4f 49 4e 54 5f 52 45 4c 45 41 53 45 29 3b 0a 20  OINT_RELEASE);. 
a2e0: 20 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53   if( NEVER(rc!=S
a2f0: 51 4c 49 54 45 5f 4f 4b 29 20 29 7b 0a 20 20 20  QLITE_OK) ){.   
a300: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
a310: 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c  * Invalidate all
a320: 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f   ephemeral curso
a330: 72 20 72 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a  r row caches */.
a340: 20 20 70 2d 3e 63 61 63 68 65 43 74 72 20 3d 20    p->cacheCtr = 
a350: 28 70 2d 3e 63 61 63 68 65 43 74 72 20 2b 20 32  (p->cacheCtr + 2
a360: 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20  )|1;..  /* Make 
a370: 73 75 72 65 20 74 68 65 20 72 65 73 75 6c 74 73  sure the results
a380: 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
a390: 72 6f 77 20 61 72 65 20 5c 30 30 30 20 74 65 72  row are \000 ter
a3a0: 6d 69 6e 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64  minated.  ** and
a3b0: 20 68 61 76 65 20 61 6e 20 61 73 73 69 67 6e 65   have an assigne
a3c0: 64 20 74 79 70 65 2e 20 20 54 68 65 20 72 65 73  d type.  The res
a3d0: 75 6c 74 73 20 61 72 65 20 64 65 2d 65 70 68 65  ults are de-ephe
a3e0: 6d 65 72 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a  meralized as.  *
a3f0: 2a 20 61 20 73 69 64 65 20 65 66 66 65 63 74 2e  * a side effect.
a400: 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70  .  */.  pMem = p
a410: 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 26  ->pResultSet = &
a420: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
a430: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d   for(i=0; i<pOp-
a440: 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61  >p2; i++){.    a
a450: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
a460: 64 28 26 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20  d(&pMem[i]) );. 
a470: 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a     Deephemeraliz
a480: 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20  e(&pMem[i]);.   
a490: 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 5b 69   assert( (pMem[i
a4a0: 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 45 70  ].flags & MEM_Ep
a4b0: 68 65 6d 29 3d 3d 30 0a 20 20 20 20 20 20 20 20  hem)==0.        
a4c0: 20 20 20 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e      || (pMem[i].
a4d0: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72  flags & (MEM_Str
a4e0: 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29  |MEM_Blob))==0 )
a4f0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
a500: 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65  eMemNulTerminate
a510: 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20  (&pMem[i]);.    
a520: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
a530: 4f 70 2d 3e 70 31 2b 69 2c 20 26 70 4d 65 6d 5b  Op->p1+i, &pMem[
a540: 69 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64  i]);.  }.  if( d
a550: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
a560: 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a  ) goto no_mem;..
a570: 20 20 2f 2a 20 52 65 74 75 72 6e 20 53 51 4c 49    /* Return SQLI
a580: 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20 70 2d  TE_ROW.  */.  p-
a590: 3e 70 63 20 3d 20 70 63 20 2b 20 31 3b 0a 20 20  >pc = pc + 1;.  
a5a0: 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 4f 57 3b  rc = SQLITE_ROW;
a5b0: 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74  .  goto vdbe_ret
a5c0: 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  urn;.}../* Opcod
a5d0: 65 3a 20 43 6f 6e 63 61 74 20 50 31 20 50 32 20  e: Concat P1 P2 
a5e0: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
a5f0: 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2b  is: r[P3]=r[P2]+
a600: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20  r[P1].**.** Add 
a610: 74 68 65 20 74 65 78 74 20 69 6e 20 72 65 67 69  the text in regi
a620: 73 74 65 72 20 50 31 20 6f 6e 74 6f 20 74 68 65  ster P1 onto the
a630: 20 65 6e 64 20 6f 66 20 74 68 65 20 74 65 78 74   end of the text
a640: 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   in.** register 
a650: 50 32 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  P2 and store the
a660: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
a670: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
a680: 74 68 65 72 20 74 68 65 20 50 31 20 6f 72 20 50  ther the P1 or P
a690: 32 20 74 65 78 74 20 61 72 65 20 4e 55 4c 4c 20  2 text are NULL 
a6a0: 74 68 65 6e 20 73 74 6f 72 65 20 4e 55 4c 4c 20  then store NULL 
a6b0: 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50  in P3..**.**   P
a6c0: 33 20 3d 20 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a  3 = P2 || P1.**.
a6d0: 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c  ** It is illegal
a6e0: 20 66 6f 72 20 50 31 20 61 6e 64 20 50 33 20 74   for P1 and P3 t
a6f0: 6f 20 62 65 20 74 68 65 20 73 61 6d 65 20 72 65  o be the same re
a700: 67 69 73 74 65 72 2e 20 53 6f 6d 65 74 69 6d 65  gister. Sometime
a710: 73 2c 0a 2a 2a 20 69 66 20 50 33 20 69 73 20 74  s,.** if P3 is t
a720: 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65 72  he same register
a730: 20 61 73 20 50 32 2c 20 74 68 65 20 69 6d 70 6c   as P2, the impl
a740: 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73 20 61 62  ementation is ab
a750: 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 61  le.** to avoid a
a760: 20 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f 0a 63 61   memcpy()..*/.ca
a770: 73 65 20 4f 50 5f 43 6f 6e 63 61 74 3a 20 7b 20  se OP_Concat: { 
a780: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
a790: 65 20 61 73 20 54 4b 5f 43 4f 4e 43 41 54 2c 20  e as TK_CONCAT, 
a7a0: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
a7b0: 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 0a 0a  /.  i64 nByte;..
a7c0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
a7d0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20  Op->p1];.  pIn2 
a7e0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
a7f0: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
a800: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
a810: 65 72 74 28 20 70 49 6e 31 21 3d 70 4f 75 74 20  ert( pIn1!=pOut 
a820: 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
a830: 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c  flags | pIn2->fl
a840: 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  ags) & MEM_Null 
a850: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
a860: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
a870: 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  t);.    break;. 
a880: 20 7d 0a 20 20 69 66 28 20 45 78 70 61 6e 64 42   }.  if( ExpandB
a890: 6c 6f 62 28 70 49 6e 31 29 20 7c 7c 20 45 78 70  lob(pIn1) || Exp
a8a0: 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 20 29 20  andBlob(pIn2) ) 
a8b0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 53  goto no_mem;.  S
a8c0: 74 72 69 6e 67 69 66 79 28 70 49 6e 31 2c 20 65  tringify(pIn1, e
a8d0: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 53 74 72 69  ncoding);.  Stri
a8e0: 6e 67 69 66 79 28 70 49 6e 32 2c 20 65 6e 63 6f  ngify(pIn2, enco
a8f0: 64 69 6e 67 29 3b 0a 20 20 6e 42 79 74 65 20 3d  ding);.  nByte =
a900: 20 70 49 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32 2d   pIn1->n + pIn2-
a910: 3e 6e 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3e  >n;.  if( nByte>
a920: 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
a930: 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
a940: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
a950: 62 69 67 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73  big;.  }.  if( s
a960: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f  qlite3VdbeMemGro
a970: 77 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79  w(pOut, (int)nBy
a980: 74 65 2b 32 2c 20 70 4f 75 74 3d 3d 70 49 6e 32  te+2, pOut==pIn2
a990: 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  ) ){.    goto no
a9a0: 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53  _mem;.  }.  MemS
a9b0: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
a9c0: 20 4d 45 4d 5f 53 74 72 29 3b 0a 20 20 69 66 28   MEM_Str);.  if(
a9d0: 20 70 4f 75 74 21 3d 70 49 6e 32 20 29 7b 0a 20   pOut!=pIn2 ){. 
a9e0: 20 20 20 6d 65 6d 63 70 79 28 70 4f 75 74 2d 3e     memcpy(pOut->
a9f0: 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70 49 6e 32  z, pIn2->z, pIn2
aa00: 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63  ->n);.  }.  memc
aa10: 70 79 28 26 70 4f 75 74 2d 3e 7a 5b 70 49 6e 32  py(&pOut->z[pIn2
aa20: 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a 2c 20 70  ->n], pIn1->z, p
aa30: 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f 75 74 2d  In1->n);.  pOut-
aa40: 3e 7a 5b 6e 42 79 74 65 5d 3d 30 3b 0a 20 20 70  >z[nByte]=0;.  p
aa50: 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 2b 31 5d 20  Out->z[nByte+1] 
aa60: 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  = 0;.  pOut->fla
aa70: 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a  gs |= MEM_Term;.
aa80: 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74    pOut->n = (int
aa90: 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e  )nByte;.  pOut->
aaa0: 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
aab0: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
aac0: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
aad0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
aae0: 64 65 3a 20 41 64 64 20 50 31 20 50 32 20 50 33  de: Add P1 P2 P3
aaf0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
ab00: 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2b 72  :  r[P3]=r[P1]+r
ab10: 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74  [P2].**.** Add t
ab20: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
ab30: 73 74 65 72 20 50 31 20 74 6f 20 74 68 65 20 76  ster P1 to the v
ab40: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
ab50: 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65   P2.** and store
ab60: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
ab70: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
ab80: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
ab90: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
aba0: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
abb0: 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 6c 74 69 70  * Opcode: Multip
abc0: 6c 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ly P1 P2 P3 * *.
abd0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
abe0: 50 33 5d 3d 72 5b 50 31 5d 2a 72 5b 50 32 5d 0a  P3]=r[P1]*r[P2].
abf0: 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74 69 70 6c  **.**.** Multipl
ac00: 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  y the value in r
ac10: 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68  egister P1 by th
ac20: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
ac30: 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74  ter P2.** and st
ac40: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
ac50: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
ac60: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
ac70: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
ac80: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
ac90: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 75 62  /./* Opcode: Sub
aca0: 74 72 61 63 74 20 50 31 20 50 32 20 50 33 20 2a  tract P1 P2 P3 *
acb0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
acc0: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2d 72 5b 50   r[P3]=r[P2]-r[P
acd0: 31 5d 0a 2a 2a 0a 2a 2a 20 53 75 62 74 72 61 63  1].**.** Subtrac
ace0: 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  t the value in r
acf0: 65 67 69 73 74 65 72 20 50 31 20 66 72 6f 6d 20  egister P1 from 
ad00: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
ad10: 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20  ister P2.** and 
ad20: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
ad30: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
ad40: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
ad50: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
ad60: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
ad70: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .*/./* Opcode: D
ad80: 69 76 69 64 65 20 50 31 20 50 32 20 50 33 20 2a  ivide P1 P2 P3 *
ad90: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
ada0: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2f 72 5b 50   r[P3]=r[P2]/r[P
adb0: 31 5d 0a 2a 2a 0a 2a 2a 20 44 69 76 69 64 65 20  1].**.** Divide 
adc0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
add0: 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65 20  ister P1 by the 
ade0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
adf0: 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72  r P2.** and stor
ae00: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
ae10: 72 65 67 69 73 74 65 72 20 50 33 20 28 50 33 3d  register P3 (P3=
ae20: 50 32 2f 50 31 29 2e 20 49 66 20 74 68 65 20 76  P2/P1). If the v
ae30: 61 6c 75 65 20 69 6e 20 0a 2a 2a 20 72 65 67 69  alue in .** regi
ae40: 73 74 65 72 20 50 31 20 69 73 20 7a 65 72 6f 2c  ster P1 is zero,
ae50: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
ae60: 20 69 73 20 4e 55 4c 4c 2e 20 49 66 20 65 69 74   is NULL. If eit
ae70: 68 65 72 20 69 6e 70 75 74 20 69 73 20 0a 2a 2a  her input is .**
ae80: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
ae90: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
aea0: 20 4f 70 63 6f 64 65 3a 20 52 65 6d 61 69 6e 64   Opcode: Remaind
aeb0: 65 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  er P1 P2 P3 * *.
aec0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
aed0: 50 33 5d 3d 72 5b 50 32 5d 25 72 5b 50 31 5d 0a  P3]=r[P2]%r[P1].
aee0: 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65 20 74 68  **.** Compute th
aef0: 65 20 72 65 6d 61 69 6e 64 65 72 20 61 66 74 65  e remainder afte
af00: 72 20 69 6e 74 65 67 65 72 20 72 65 67 69 73 74  r integer regist
af10: 65 72 20 50 32 20 69 73 20 64 69 76 69 64 65 64  er P2 is divided
af20: 20 62 79 20 0a 2a 2a 20 72 65 67 69 73 74 65 72   by .** register
af30: 20 50 31 20 61 6e 64 20 73 74 6f 72 65 20 74 68   P1 and store th
af40: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
af50: 73 74 65 72 20 50 33 2e 20 0a 2a 2a 20 49 66 20  ster P3. .** If 
af60: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
af70: 69 73 74 65 72 20 50 31 20 69 73 20 7a 65 72 6f  ister P1 is zero
af80: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
af90: 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65  ULL..** If eithe
afa0: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
afb0: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
afc0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
afd0: 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20 20  P_Add:          
afe0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
aff0: 20 61 73 20 54 4b 5f 50 4c 55 53 2c 20 69 6e 31   as TK_PLUS, in1
b000: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
b010: 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a  ase OP_Subtract:
b020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b030: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4d 49 4e 55   same as TK_MINU
b040: 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  S, in1, in2, out
b050: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 6c  3 */.case OP_Mul
b060: 74 69 70 6c 79 3a 20 20 20 20 20 20 20 20 20 20  tiply:          
b070: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b080: 4b 5f 53 54 41 52 2c 20 69 6e 31 2c 20 69 6e 32  K_STAR, in1, in2
b090: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
b0a0: 50 5f 44 69 76 69 64 65 3a 20 20 20 20 20 20 20  P_Divide:       
b0b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
b0c0: 20 61 73 20 54 4b 5f 53 4c 41 53 48 2c 20 69 6e   as TK_SLASH, in
b0d0: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
b0e0: 63 61 73 65 20 4f 50 5f 52 65 6d 61 69 6e 64 65  case OP_Remainde
b0f0: 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  r: {           /
b100: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 45 4d  * same as TK_REM
b110: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
b120: 20 2a 2f 0a 20 20 63 68 61 72 20 62 49 6e 74 69   */.  char bInti
b130: 6e 74 3b 20 20 20 2f 2a 20 53 74 61 72 74 65 64  nt;   /* Started
b140: 20 6f 75 74 20 61 73 20 74 77 6f 20 69 6e 74 65   out as two inte
b150: 67 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a  ger operands */.
b160: 20 20 75 31 36 20 66 6c 61 67 73 3b 20 20 20 20    u16 flags;    
b170: 20 20 2f 2a 20 43 6f 6d 62 69 6e 65 64 20 4d 45    /* Combined ME
b180: 4d 5f 2a 20 66 6c 61 67 73 20 66 72 6f 6d 20 62  M_* flags from b
b190: 6f 74 68 20 69 6e 70 75 74 73 20 2a 2f 0a 20 20  oth inputs */.  
b1a0: 75 31 36 20 74 79 70 65 31 3b 20 20 20 20 20 20  u16 type1;      
b1b0: 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79 70 65 20  /* Numeric type 
b1c0: 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20  of left operand 
b1d0: 2a 2f 0a 20 20 75 31 36 20 74 79 70 65 32 3b 20  */.  u16 type2; 
b1e0: 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20       /* Numeric 
b1f0: 74 79 70 65 20 6f 66 20 72 69 67 68 74 20 6f 70  type of right op
b200: 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69  erand */.  i64 i
b210: 41 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  A;         /* In
b220: 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20 6c  teger value of l
b230: 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  eft operand */. 
b240: 20 69 36 34 20 69 42 3b 20 20 20 20 20 20 20 20   i64 iB;        
b250: 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75   /* Integer valu
b260: 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61  e of right opera
b270: 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72  nd */.  double r
b280: 41 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20  A;      /* Real 
b290: 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70  value of left op
b2a0: 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c  erand */.  doubl
b2b0: 65 20 72 42 3b 20 20 20 20 20 20 2f 2a 20 52 65  e rB;      /* Re
b2c0: 61 6c 20 76 61 6c 75 65 20 6f 66 20 72 69 67 68  al value of righ
b2d0: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a 20 20  t operand */..  
b2e0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
b2f0: 2d 3e 70 31 5d 3b 0a 20 20 74 79 70 65 31 20 3d  ->p1];.  type1 =
b300: 20 6e 75 6d 65 72 69 63 54 79 70 65 28 70 49 6e   numericType(pIn
b310: 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1);.  pIn2 = &aM
b320: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 74  em[pOp->p2];.  t
b330: 79 70 65 32 20 3d 20 6e 75 6d 65 72 69 63 54 79  ype2 = numericTy
b340: 70 65 28 70 49 6e 32 29 3b 0a 20 20 70 4f 75 74  pe(pIn2);.  pOut
b350: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
b360: 5d 3b 0a 20 20 66 6c 61 67 73 20 3d 20 70 49 6e  ];.  flags = pIn
b370: 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d  1->flags | pIn2-
b380: 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66  >flags;.  if( (f
b390: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
b3a0: 21 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  !=0 ) goto arith
b3b0: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
b3c0: 6e 75 6c 6c 3b 0a 20 20 69 66 28 20 28 74 79 70  null;.  if( (typ
b3d0: 65 31 20 26 20 74 79 70 65 32 20 26 20 4d 45 4d  e1 & type2 & MEM
b3e0: 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20 20 20 20  _Int)!=0 ){.    
b3f0: 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a  iA = pIn1->u.i;.
b400: 20 20 20 20 69 42 20 3d 20 70 49 6e 32 2d 3e 75      iB = pIn2->u
b410: 2e 69 3b 0a 20 20 20 20 62 49 6e 74 69 6e 74 20  .i;.    bIntint 
b420: 3d 20 31 3b 0a 20 20 20 20 73 77 69 74 63 68 28  = 1;.    switch(
b430: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a   pOp->opcode ){.
b440: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64        case OP_Ad
b450: 64 3a 20 20 20 20 20 20 20 69 66 28 20 73 71 6c  d:       if( sql
b460: 69 74 65 33 41 64 64 49 6e 74 36 34 28 26 69 42  ite3AddInt64(&iB
b470: 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d  ,iA) ) goto fp_m
b480: 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20  ath;  break;.   
b490: 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72     case OP_Subtr
b4a0: 61 63 74 3a 20 20 69 66 28 20 73 71 6c 69 74 65  act:  if( sqlite
b4b0: 33 53 75 62 49 6e 74 36 34 28 26 69 42 2c 69 41  3SubInt64(&iB,iA
b4c0: 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68  ) ) goto fp_math
b4d0: 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20  ;  break;.      
b4e0: 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79  case OP_Multiply
b4f0: 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33 4d 75  :  if( sqlite3Mu
b500: 6c 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29  lInt64(&iB,iA) )
b510: 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20   goto fp_math;  
b520: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
b530: 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20  e OP_Divide: {. 
b540: 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30         if( iA==0
b550: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
b560: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
b570: 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  l;.        if( i
b580: 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d 53 4d 41  A==-1 && iB==SMA
b590: 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 67 6f  LLEST_INT64 ) go
b5a0: 74 6f 20 66 70 5f 6d 61 74 68 3b 0a 20 20 20 20  to fp_math;.    
b5b0: 20 20 20 20 69 42 20 2f 3d 20 69 41 3b 0a 20 20      iB /= iA;.  
b5c0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
b5d0: 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75     }.      defau
b5e0: 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66  lt: {.        if
b5f0: 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61  ( iA==0 ) goto a
b600: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
b610: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20  _is_null;.      
b620: 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20 69    if( iA==-1 ) i
b630: 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69  A = 1;.        i
b640: 42 20 25 3d 20 69 41 3b 0a 20 20 20 20 20 20 20  B %= iA;.       
b650: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
b660: 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e      }.    pOut->
b670: 75 2e 69 20 3d 20 69 42 3b 0a 20 20 20 20 4d 65  u.i = iB;.    Me
b680: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
b690: 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d  t, MEM_Int);.  }
b6a0: 65 6c 73 65 7b 0a 20 20 20 20 62 49 6e 74 69 6e  else{.    bIntin
b6b0: 74 20 3d 20 30 3b 0a 66 70 5f 6d 61 74 68 3a 0a  t = 0;.fp_math:.
b6c0: 20 20 20 20 72 41 20 3d 20 73 71 6c 69 74 65 33      rA = sqlite3
b6d0: 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49  VdbeRealValue(pI
b6e0: 6e 31 29 3b 0a 20 20 20 20 72 42 20 3d 20 73 71  n1);.    rB = sq
b6f0: 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c  lite3VdbeRealVal
b700: 75 65 28 70 49 6e 32 29 3b 0a 20 20 20 20 73 77  ue(pIn2);.    sw
b710: 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  itch( pOp->opcod
b720: 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20  e ){.      case 
b730: 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20  OP_Add:         
b740: 72 42 20 2b 3d 20 72 41 3b 20 20 20 20 20 20 20  rB += rA;       
b750: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
b760: 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20  e OP_Subtract:  
b770: 20 20 72 42 20 2d 3d 20 72 41 3b 20 20 20 20 20    rB -= rA;     
b780: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
b790: 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a  ase OP_Multiply:
b7a0: 20 20 20 20 72 42 20 2a 3d 20 72 41 3b 20 20 20      rB *= rA;   
b7b0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
b7c0: 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a   case OP_Divide:
b7d0: 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 28 64   {.        /* (d
b7e0: 6f 75 62 6c 65 29 30 20 49 6e 20 63 61 73 65 20  ouble)0 In case 
b7f0: 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  of SQLITE_OMIT_F
b800: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e  LOATING_POINT...
b810: 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
b820: 72 41 3d 3d 28 64 6f 75 62 6c 65 29 30 20 29 20  rA==(double)0 ) 
b830: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
b840: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
b850: 20 20 20 20 20 20 20 20 72 42 20 2f 3d 20 72 41          rB /= rA
b860: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
b870: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64  .      }.      d
b880: 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20  efault: {.      
b890: 20 20 69 41 20 3d 20 28 69 36 34 29 72 41 3b 0a    iA = (i64)rA;.
b8a0: 20 20 20 20 20 20 20 20 69 42 20 3d 20 28 69 36          iB = (i6
b8b0: 34 29 72 42 3b 0a 20 20 20 20 20 20 20 20 69 66  4)rB;.        if
b8c0: 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61  ( iA==0 ) goto a
b8d0: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
b8e0: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20  _is_null;.      
b8f0: 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20 69    if( iA==-1 ) i
b900: 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 72  A = 1;.        r
b910: 42 20 3d 20 28 64 6f 75 62 6c 65 29 28 69 42 20  B = (double)(iB 
b920: 25 20 69 41 29 3b 0a 20 20 20 20 20 20 20 20 62  % iA);.        b
b930: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
b940: 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54    }.#ifdef SQLIT
b950: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
b960: 50 4f 49 4e 54 0a 20 20 20 20 70 4f 75 74 2d 3e  POINT.    pOut->
b970: 75 2e 69 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65  u.i = rB;.    Me
b980: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
b990: 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65 6c  t, MEM_Int);.#el
b9a0: 73 65 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  se.    if( sqlit
b9b0: 65 33 49 73 4e 61 4e 28 72 42 29 20 29 7b 0a 20  e3IsNaN(rB) ){. 
b9c0: 20 20 20 20 20 67 6f 74 6f 20 61 72 69 74 68 6d       goto arithm
b9d0: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
b9e0: 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  ull;.    }.    p
b9f0: 4f 75 74 2d 3e 72 20 3d 20 72 42 3b 0a 20 20 20  Out->r = rB;.   
ba00: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
ba10: 70 4f 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b  pOut, MEM_Real);
ba20: 0a 20 20 20 20 69 66 28 20 28 28 74 79 70 65 31  .    if( ((type1
ba30: 7c 74 79 70 65 32 29 26 4d 45 4d 5f 52 65 61 6c  |type2)&MEM_Real
ba40: 29 3d 3d 30 20 26 26 20 21 62 49 6e 74 69 6e 74  )==0 && !bIntint
ba50: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
ba60: 33 56 64 62 65 49 6e 74 65 67 65 72 41 66 66 69  3VdbeIntegerAffi
ba70: 6e 69 74 79 28 70 4f 75 74 29 3b 0a 20 20 20 20  nity(pOut);.    
ba80: 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62  }.#endif.  }.  b
ba90: 72 65 61 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69  reak;..arithmeti
baa0: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
bab0: 3a 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  :.  sqlite3VdbeM
bac0: 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
bad0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
bae0: 4f 70 63 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20  Opcode: CollSeq 
baf0: 50 31 20 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20  P1 * * P4.**.** 
bb00: 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
bb10: 74 6f 20 61 20 43 6f 6c 6c 53 65 71 20 73 74 72  to a CollSeq str
bb20: 75 63 74 2e 20 49 66 20 74 68 65 20 6e 65 78 74  uct. If the next
bb30: 20 63 61 6c 6c 20 74 6f 20 61 20 75 73 65 72 20   call to a user 
bb40: 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61  function.** or a
bb50: 67 67 72 65 67 61 74 65 20 63 61 6c 6c 73 20 73  ggregate calls s
bb60: 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c  qlite3GetFuncCol
bb70: 6c 53 65 71 28 29 2c 20 74 68 69 73 20 63 6f 6c  lSeq(), this col
bb80: 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
bb90: 77 69 6c 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72  will.** be retur
bba0: 6e 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65  ned. This is use
bbb0: 64 20 62 79 20 74 68 65 20 62 75 69 6c 74 2d 69  d by the built-i
bbc0: 6e 20 6d 69 6e 28 29 2c 20 6d 61 78 28 29 20 61  n min(), max() a
bbd0: 6e 64 20 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66  nd nullif().** f
bbe0: 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  unctions..**.** 
bbf0: 49 66 20 50 31 20 69 73 20 6e 6f 74 20 7a 65 72  If P1 is not zer
bc00: 6f 2c 20 74 68 65 6e 20 69 74 20 69 73 20 61 20  o, then it is a 
bc10: 72 65 67 69 73 74 65 72 20 74 68 61 74 20 61 20  register that a 
bc20: 73 75 62 73 65 71 75 65 6e 74 20 6d 69 6e 28 29  subsequent min()
bc30: 20 6f 72 0a 2a 2a 20 6d 61 78 28 29 20 61 67 67   or.** max() agg
bc40: 72 65 67 61 74 65 20 77 69 6c 6c 20 73 65 74 20  regate will set 
bc50: 74 6f 20 31 20 69 66 20 74 68 65 20 63 75 72 72  to 1 if the curr
bc60: 65 6e 74 20 72 6f 77 20 69 73 20 6e 6f 74 20 74  ent row is not t
bc70: 68 65 20 6d 69 6e 69 6d 75 6d 20 6f 72 0a 2a 2a  he minimum or.**
bc80: 20 6d 61 78 69 6d 75 6d 2e 20 20 54 68 65 20 50   maximum.  The P
bc90: 31 20 72 65 67 69 73 74 65 72 20 69 73 20 69 6e  1 register is in
bca0: 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 30 20 62  itialized to 0 b
bcb0: 79 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  y this instructi
bcc0: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e  on..**.** The in
bcd0: 74 65 72 66 61 63 65 20 75 73 65 64 20 62 79 20  terface used by 
bce0: 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
bcf0: 6f 6e 20 6f 66 20 74 68 65 20 61 66 6f 72 65 6d  on of the aforem
bd00: 65 6e 74 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f  entioned functio
bd10: 6e 73 0a 2a 2a 20 74 6f 20 72 65 74 72 69 65 76  ns.** to retriev
bd20: 65 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20  e the collation 
bd30: 73 65 71 75 65 6e 63 65 20 73 65 74 20 62 79 20  sequence set by 
bd40: 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e  this opcode is n
bd50: 6f 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20  ot available.** 
bd60: 70 75 62 6c 69 63 6c 79 2c 20 6f 6e 6c 79 20 74  publicly, only t
bd70: 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 73  o user functions
bd80: 20 64 65 66 69 6e 65 64 20 69 6e 20 66 75 6e 63   defined in func
bd90: 2e 63 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  .c..*/.case OP_C
bda0: 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73 73 65  ollSeq: {.  asse
bdb0: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
bdc0: 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20  =P4_COLLSEQ );. 
bdd0: 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a   if( pOp->p1 ){.
bde0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
bdf0: 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d  emSetInt64(&aMem
be00: 5b 70 4f 70 2d 3e 70 31 5d 2c 20 30 29 3b 0a 20  [pOp->p1], 0);. 
be10: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
be20: 2a 20 4f 70 63 6f 64 65 3a 20 46 75 6e 63 74 69  * Opcode: Functi
be30: 6f 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50  on P1 P2 P3 P4 P
be40: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  5.** Synopsis: r
be50: 5b 50 33 5d 3d 66 75 6e 63 28 72 5b 50 32 40 50  [P3]=func(r[P2@P
be60: 35 5d 29 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65  5]).**.** Invoke
be70: 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e   a user function
be80: 20 28 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65   (P4 is a pointe
be90: 72 20 74 6f 20 61 20 46 75 6e 63 74 69 6f 6e 20  r to a Function 
bea0: 73 74 72 75 63 74 75 72 65 20 74 68 61 74 0a 2a  structure that.*
beb0: 2a 20 64 65 66 69 6e 65 73 20 74 68 65 20 66 75  * defines the fu
bec0: 6e 63 74 69 6f 6e 29 20 77 69 74 68 20 50 35 20  nction) with P5 
bed0: 61 72 67 75 6d 65 6e 74 73 20 74 61 6b 65 6e 20  arguments taken 
bee0: 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32  from register P2
bef0: 20 61 6e 64 0a 2a 2a 20 73 75 63 63 65 73 73 6f   and.** successo
bf00: 72 73 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20  rs.  The result 
bf10: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  of the function 
bf20: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
bf30: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 52 65 67  ister P3..** Reg
bf40: 69 73 74 65 72 20 50 33 20 6d 75 73 74 20 6e 6f  ister P3 must no
bf50: 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20  t be one of the 
bf60: 66 75 6e 63 74 69 6f 6e 20 69 6e 70 75 74 73 2e  function inputs.
bf70: 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 33  .**.** P1 is a 3
bf80: 32 2d 62 69 74 20 62 69 74 6d 61 73 6b 20 69 6e  2-bit bitmask in
bf90: 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65 72  dicating whether
bfa0: 20 6f 72 20 6e 6f 74 20 65 61 63 68 20 61 72 67   or not each arg
bfb0: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 0a 2a 2a  ument to the .**
bfc0: 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 64 65   function was de
bfd0: 74 65 72 6d 69 6e 65 64 20 74 6f 20 62 65 20 63  termined to be c
bfe0: 6f 6e 73 74 61 6e 74 20 61 74 20 63 6f 6d 70 69  onstant at compi
bff0: 6c 65 20 74 69 6d 65 2e 20 49 66 20 74 68 65 20  le time. If the 
c000: 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e  first.** argumen
c010: 74 20 77 61 73 20 63 6f 6e 73 74 61 6e 74 20 74  t was constant t
c020: 68 65 6e 20 62 69 74 20 30 20 6f 66 20 50 31 20  hen bit 0 of P1 
c030: 69 73 20 73 65 74 2e 20 54 68 69 73 20 69 73 20  is set. This is 
c040: 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e  used to determin
c050: 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6d 65 74  e.** whether met
c060: 61 20 64 61 74 61 20 61 73 73 6f 63 69 61 74 65  a data associate
c070: 64 20 77 69 74 68 20 61 20 75 73 65 72 20 66 75  d with a user fu
c080: 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20  nction argument 
c090: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 73 71 6c  using the.** sql
c0a0: 69 74 65 33 5f 73 65 74 5f 61 75 78 64 61 74 61  ite3_set_auxdata
c0b0: 28 29 20 41 50 49 20 6d 61 79 20 62 65 20 73 61  () API may be sa
c0c0: 66 65 6c 79 20 72 65 74 61 69 6e 65 64 20 75 6e  fely retained un
c0d0: 74 69 6c 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20  til the next.** 
c0e0: 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68  invocation of th
c0f0: 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  is opcode..**.**
c100: 20 53 65 65 20 61 6c 73 6f 3a 20 41 67 67 53 74   See also: AggSt
c110: 65 70 20 61 6e 64 20 41 67 67 46 69 6e 61 6c 0a  ep and AggFinal.
c120: 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 75 6e 63 74  */.case OP_Funct
c130: 69 6f 6e 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a  ion: {.  int i;.
c140: 20 20 4d 65 6d 20 2a 70 41 72 67 3b 0a 20 20 73    Mem *pArg;.  s
c150: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 63  qlite3_context c
c160: 74 78 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  tx;.  sqlite3_va
c170: 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a 20 20 69  lue **apVal;.  i
c180: 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70  nt n;..  n = pOp
c190: 2d 3e 70 35 3b 0a 20 20 61 70 56 61 6c 20 3d 20  ->p5;.  apVal = 
c1a0: 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65  p->apArg;.  asse
c1b0: 72 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d  rt( apVal || n==
c1c0: 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
c1d0: 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d  Op->p3>0 && pOp-
c1e0: 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p3<=(p->nMem-p-
c1f0: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 63  >nCursor) );.  c
c200: 74 78 2e 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  tx.pOut = &aMem[
c210: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41  pOp->p3];.  memA
c220: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
c230: 63 74 78 2e 70 4f 75 74 29 3b 0a 0a 20 20 61 73  ctx.pOut);..  as
c240: 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70  sert( n==0 || (p
c250: 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d  Op->p2>0 && pOp-
c260: 3e 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  >p2+n<=(p->nMem-
c270: 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 29 20 29  p->nCursor)+1) )
c280: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
c290: 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70  >p3<pOp->p2 || p
c2a0: 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b  Op->p3>=pOp->p2+
c2b0: 6e 20 29 3b 0a 20 20 70 41 72 67 20 3d 20 26 61  n );.  pArg = &a
c2c0: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
c2d0: 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b  for(i=0; i<n; i+
c2e0: 2b 2c 20 70 41 72 67 2b 2b 29 7b 0a 20 20 20 20  +, pArg++){.    
c2f0: 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
c300: 69 64 28 70 41 72 67 29 20 29 3b 0a 20 20 20 20  id(pArg) );.    
c310: 61 70 56 61 6c 5b 69 5d 20 3d 20 70 41 72 67 3b  apVal[i] = pArg;
c320: 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c  .    Deephemeral
c330: 69 7a 65 28 70 41 72 67 29 3b 0a 20 20 20 20 52  ize(pArg);.    R
c340: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
c350: 70 2d 3e 70 32 2b 69 2c 20 70 41 72 67 29 3b 0a  p->p2+i, pArg);.
c360: 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70    }..  assert( p
c370: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46  Op->p4type==P4_F
c380: 55 4e 43 44 45 46 20 29 3b 0a 20 20 63 74 78 2e  UNCDEF );.  ctx.
c390: 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e  pFunc = pOp->p4.
c3a0: 70 46 75 6e 63 3b 0a 20 20 63 74 78 2e 69 4f 70  pFunc;.  ctx.iOp
c3b0: 20 3d 20 70 63 3b 0a 20 20 63 74 78 2e 70 56 64   = pc;.  ctx.pVd
c3c0: 62 65 20 3d 20 70 3b 0a 20 20 4d 65 6d 53 65 74  be = p;.  MemSet
c3d0: 54 79 70 65 46 6c 61 67 28 63 74 78 2e 70 4f 75  TypeFlag(ctx.pOu
c3e0: 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20  t, MEM_Null);.. 
c3f0: 20 63 74 78 2e 66 45 72 72 6f 72 4f 72 41 75 78   ctx.fErrorOrAux
c400: 20 3d 20 30 3b 0a 20 20 69 66 28 20 63 74 78 2e   = 0;.  if( ctx.
c410: 70 46 75 6e 63 2d 3e 66 75 6e 63 46 6c 61 67 73  pFunc->funcFlags
c420: 20 26 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e   & SQLITE_FUNC_N
c430: 45 45 44 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61  EEDCOLL ){.    a
c440: 73 73 65 72 74 28 20 70 4f 70 3e 61 4f 70 20 29  ssert( pOp>aOp )
c450: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
c460: 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34  p[-1].p4type==P4
c470: 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20  _COLLSEQ );.    
c480: 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
c490: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53  opcode==OP_CollS
c4a0: 65 71 20 29 3b 0a 20 20 20 20 63 74 78 2e 70 43  eq );.    ctx.pC
c4b0: 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34  oll = pOp[-1].p4
c4c0: 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 64 62  .pColl;.  }.  db
c4d0: 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61  ->lastRowid = la
c4e0: 73 74 52 6f 77 69 64 3b 0a 20 20 28 2a 63 74 78  stRowid;.  (*ctx
c4f0: 2e 70 46 75 6e 63 2d 3e 78 46 75 6e 63 29 28 26  .pFunc->xFunc)(&
c500: 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 20  ctx, n, apVal); 
c510: 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d  /* IMP: R-24505-
c520: 32 33 32 33 30 20 2a 2f 0a 20 20 6c 61 73 74 52  23230 */.  lastR
c530: 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52  owid = db->lastR
c540: 6f 77 69 64 3b 0a 0a 20 20 2f 2a 20 49 66 20 74  owid;..  /* If t
c550: 68 65 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  he function retu
c560: 72 6e 65 64 20 61 6e 20 65 72 72 6f 72 2c 20 74  rned an error, t
c570: 68 72 6f 77 20 61 6e 20 65 78 63 65 70 74 69 6f  hrow an exceptio
c580: 6e 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 66  n */.  if( ctx.f
c590: 45 72 72 6f 72 4f 72 41 75 78 20 29 7b 0a 20 20  ErrorOrAux ){.  
c5a0: 20 20 69 66 28 20 63 74 78 2e 69 73 45 72 72 6f    if( ctx.isErro
c5b0: 72 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  r ){.      sqlit
c5c0: 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
c5d0: 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73  zErrMsg, db, "%s
c5e0: 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ", sqlite3_value
c5f0: 5f 74 65 78 74 28 63 74 78 2e 70 4f 75 74 29 29  _text(ctx.pOut))
c600: 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 63 74 78  ;.      rc = ctx
c610: 2e 69 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  .isError;.    }.
c620: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 44      sqlite3VdbeD
c630: 65 6c 65 74 65 41 75 78 44 61 74 61 28 70 2c 20  eleteAuxData(p, 
c640: 70 63 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20  pc, pOp->p1);.  
c650: 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68 65  }..  /* Copy the
c660: 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66   result of the f
c670: 75 6e 63 74 69 6f 6e 20 69 6e 74 6f 20 72 65 67  unction into reg
c680: 69 73 74 65 72 20 50 33 20 2a 2f 0a 20 20 73 71  ister P3 */.  sq
c690: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
c6a0: 6e 63 6f 64 69 6e 67 28 63 74 78 2e 70 4f 75 74  ncoding(ctx.pOut
c6b0: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 69  , encoding);.  i
c6c0: 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
c6d0: 6d 54 6f 6f 42 69 67 28 63 74 78 2e 70 4f 75 74  mTooBig(ctx.pOut
c6e0: 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ) ){.    goto to
c6f0: 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 52 45  o_big;.  }..  RE
c700: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
c710: 2d 3e 70 33 2c 20 63 74 78 2e 70 4f 75 74 29 3b  ->p3, ctx.pOut);
c720: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
c730: 4f 42 53 49 5a 45 28 63 74 78 2e 70 4f 75 74 29  OBSIZE(ctx.pOut)
c740: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
c750: 20 4f 70 63 6f 64 65 3a 20 42 69 74 41 6e 64 20   Opcode: BitAnd 
c760: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
c770: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
c780: 3d 72 5b 50 31 5d 26 72 5b 50 32 5d 0a 2a 2a 0a  =r[P1]&r[P2].**.
c790: 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d  ** Take the bit-
c7a0: 77 69 73 65 20 41 4e 44 20 6f 66 20 74 68 65 20  wise AND of the 
c7b0: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
c7c0: 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64  er P1 and P2 and
c7d0: 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65  .** store the re
c7e0: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
c7f0: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
c800: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
c810: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
c820: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
c830: 65 3a 20 42 69 74 4f 72 20 50 31 20 50 32 20 50  e: BitOr P1 P2 P
c840: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
c850: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 7c  s:  r[P3]=r[P1]|
c860: 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65  r[P2].**.** Take
c870: 20 74 68 65 20 62 69 74 2d 77 69 73 65 20 4f 52   the bit-wise OR
c880: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69   of the values i
c890: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
c8a0: 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72  d P2 and.** stor
c8b0: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
c8c0: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
c8d0: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
c8e0: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
c8f0: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
c900: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74  /* Opcode: Shift
c910: 4c 65 66 74 20 50 31 20 50 32 20 50 33 20 2a 20  Left P1 P2 P3 * 
c920: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
c930: 72 5b 50 33 5d 3d 72 5b 50 32 5d 3c 3c 72 5b 50  r[P3]=r[P2]<<r[P
c940: 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74  1].**.** Shift t
c950: 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  he integer value
c960: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20   in register P2 
c970: 74 6f 20 74 68 65 20 6c 65 66 74 20 62 79 20 74  to the left by t
c980: 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  he.** number of 
c990: 62 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62  bits specified b
c9a0: 79 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e  y the integer in
c9b0: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
c9c0: 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   Store the resul
c9d0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
c9e0: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
c9f0: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
ca00: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
ca10: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
ca20: 53 68 69 66 74 52 69 67 68 74 20 50 31 20 50 32  ShiftRight P1 P2
ca30: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
ca40: 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32  sis:  r[P3]=r[P2
ca50: 5d 3e 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53  ]>>r[P1].**.** S
ca60: 68 69 66 74 20 74 68 65 20 69 6e 74 65 67 65 72  hift the integer
ca70: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
ca80: 65 72 20 50 32 20 74 6f 20 74 68 65 20 72 69 67  er P2 to the rig
ca90: 68 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d  ht by the.** num
caa0: 62 65 72 20 6f 66 20 62 69 74 73 20 73 70 65 63  ber of bits spec
cab0: 69 66 69 65 64 20 62 79 20 74 68 65 20 69 6e 74  ified by the int
cac0: 65 67 65 72 20 69 6e 20 72 65 67 69 73 74 65 72  eger in register
cad0: 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68   P1..** Store th
cae0: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
caf0: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
cb00: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
cb10: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
cb20: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  is NULL..*/.case
cb30: 20 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20 20 20   OP_BitAnd:     
cb40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
cb50: 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 41 4e 44  ame as TK_BITAND
cb60: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
cb70: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f   */.case OP_BitO
cb80: 72 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r:              
cb90: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
cba0: 4b 5f 42 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e  K_BITOR, in1, in
cbb0: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
cbc0: 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a 20 20 20  OP_ShiftLeft:   
cbd0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
cbe0: 6d 65 20 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c  me as TK_LSHIFT,
cbf0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
cc00: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74  */.case OP_Shift
cc10: 52 69 67 68 74 3a 20 7b 20 20 20 20 20 20 20 20  Right: {        
cc20: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
cc30: 5f 52 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e  _RSHIFT, in1, in
cc40: 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34  2, out3 */.  i64
cc50: 20 69 41 3b 0a 20 20 75 36 34 20 75 41 3b 0a 20   iA;.  u64 uA;. 
cc60: 20 69 36 34 20 69 42 3b 0a 20 20 75 38 20 6f 70   i64 iB;.  u8 op
cc70: 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  ;..  pIn1 = &aMe
cc80: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
cc90: 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
cca0: 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p2];.  pOut = &a
ccb0: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
ccc0: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
ccd0: 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20   | pIn2->flags) 
cce0: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
ccf0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
cd00: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
cd10: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
cd20: 69 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  iA = sqlite3Vdbe
cd30: 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a  IntValue(pIn2);.
cd40: 20 20 69 42 20 3d 20 73 71 6c 69 74 65 33 56 64    iB = sqlite3Vd
cd50: 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
cd60: 3b 0a 20 20 6f 70 20 3d 20 70 4f 70 2d 3e 6f 70  ;.  op = pOp->op
cd70: 63 6f 64 65 3b 0a 20 20 69 66 28 20 6f 70 3d 3d  code;.  if( op==
cd80: 4f 50 5f 42 69 74 41 6e 64 20 29 7b 0a 20 20 20  OP_BitAnd ){.   
cd90: 20 69 41 20 26 3d 20 69 42 3b 0a 20 20 7d 65 6c   iA &= iB;.  }el
cda0: 73 65 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69  se if( op==OP_Bi
cdb0: 74 4f 72 20 29 7b 0a 20 20 20 20 69 41 20 7c 3d  tOr ){.    iA |=
cdc0: 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28   iB;.  }else if(
cdd0: 20 69 42 21 3d 30 20 29 7b 0a 20 20 20 20 61 73   iB!=0 ){.    as
cde0: 73 65 72 74 28 20 6f 70 3d 3d 4f 50 5f 53 68 69  sert( op==OP_Shi
cdf0: 66 74 52 69 67 68 74 20 7c 7c 20 6f 70 3d 3d 4f  ftRight || op==O
ce00: 50 5f 53 68 69 66 74 4c 65 66 74 20 29 3b 0a 0a  P_ShiftLeft );..
ce10: 20 20 20 20 2f 2a 20 49 66 20 73 68 69 66 74 69      /* If shifti
ce20: 6e 67 20 62 79 20 61 20 6e 65 67 61 74 69 76 65  ng by a negative
ce30: 20 61 6d 6f 75 6e 74 2c 20 73 68 69 66 74 20 69   amount, shift i
ce40: 6e 20 74 68 65 20 6f 74 68 65 72 20 64 69 72 65  n the other dire
ce50: 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 66 28  ction */.    if(
ce60: 20 69 42 3c 30 20 29 7b 0a 20 20 20 20 20 20 61   iB<0 ){.      a
ce70: 73 73 65 72 74 28 20 4f 50 5f 53 68 69 66 74 52  ssert( OP_ShiftR
ce80: 69 67 68 74 3d 3d 4f 50 5f 53 68 69 66 74 4c 65  ight==OP_ShiftLe
ce90: 66 74 2b 31 20 29 3b 0a 20 20 20 20 20 20 6f 70  ft+1 );.      op
cea0: 20 3d 20 32 2a 4f 50 5f 53 68 69 66 74 4c 65 66   = 2*OP_ShiftLef
ceb0: 74 20 2b 20 31 20 2d 20 6f 70 3b 0a 20 20 20 20  t + 1 - op;.    
cec0: 20 20 69 42 20 3d 20 69 42 3e 28 2d 36 34 29 20    iB = iB>(-64) 
ced0: 3f 20 2d 69 42 20 3a 20 36 34 3b 0a 20 20 20 20  ? -iB : 64;.    
cee0: 7d 0a 0a 20 20 20 20 69 66 28 20 69 42 3e 3d 36  }..    if( iB>=6
cef0: 34 20 29 7b 0a 20 20 20 20 20 20 69 41 20 3d 20  4 ){.      iA = 
cf00: 28 69 41 3e 3d 30 20 7c 7c 20 6f 70 3d 3d 4f 50  (iA>=0 || op==OP
cf10: 5f 53 68 69 66 74 4c 65 66 74 29 20 3f 20 30 20  _ShiftLeft) ? 0 
cf20: 3a 20 2d 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  : -1;.    }else{
cf30: 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26 75  .      memcpy(&u
cf40: 41 2c 20 26 69 41 2c 20 73 69 7a 65 6f 66 28 75  A, &iA, sizeof(u
cf50: 41 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6f  A));.      if( o
cf60: 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 20  p==OP_ShiftLeft 
cf70: 29 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3c 3c  ){.        uA <<
cf80: 3d 20 69 42 3b 0a 20 20 20 20 20 20 7d 65 6c 73  = iB;.      }els
cf90: 65 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3e 3e  e{.        uA >>
cfa0: 3d 20 69 42 3b 0a 20 20 20 20 20 20 20 20 2f 2a  = iB;.        /*
cfb0: 20 53 69 67 6e 2d 65 78 74 65 6e 64 20 6f 6e 20   Sign-extend on 
cfc0: 61 20 72 69 67 68 74 20 73 68 69 66 74 20 6f 66  a right shift of
cfd0: 20 61 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62   a negative numb
cfe0: 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  er */.        if
cff0: 28 20 69 41 3c 30 20 29 20 75 41 20 7c 3d 20 28  ( iA<0 ) uA |= (
d000: 28 28 28 75 36 34 29 30 78 66 66 66 66 66 66 66  (((u64)0xfffffff
d010: 66 29 3c 3c 33 32 29 7c 30 78 66 66 66 66 66 66  f)<<32)|0xffffff
d020: 66 66 29 20 3c 3c 20 28 36 34 2d 69 42 29 3b 0a  ff) << (64-iB);.
d030: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6d 65        }.      me
d040: 6d 63 70 79 28 26 69 41 2c 20 26 75 41 2c 20 73  mcpy(&iA, &uA, s
d050: 69 7a 65 6f 66 28 69 41 29 29 3b 0a 20 20 20 20  izeof(iA));.    
d060: 7d 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e  }.  }.  pOut->u.
d070: 69 20 3d 20 69 41 3b 0a 20 20 4d 65 6d 53 65 74  i = iA;.  MemSet
d080: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
d090: 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b  EM_Int);.  break
d0a0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
d0b0: 41 64 64 49 6d 6d 20 20 50 31 20 50 32 20 2a 20  AddImm  P1 P2 * 
d0c0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
d0d0: 20 20 72 5b 50 31 5d 3d 72 5b 50 31 5d 2b 50 32    r[P1]=r[P1]+P2
d0e0: 0a 2a 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65 20  .** .** Add the 
d0f0: 63 6f 6e 73 74 61 6e 74 20 50 32 20 74 6f 20 74  constant P2 to t
d100: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
d110: 73 74 65 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20  ster P1..** The 
d120: 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73  result is always
d130: 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a   an integer..**.
d140: 2a 2a 20 54 6f 20 66 6f 72 63 65 20 61 6e 79 20  ** To force any 
d150: 72 65 67 69 73 74 65 72 20 74 6f 20 62 65 20 61  register to be a
d160: 6e 20 69 6e 74 65 67 65 72 2c 20 6a 75 73 74 20  n integer, just 
d170: 61 64 64 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f  add 0..*/.case O
d180: 50 5f 41 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20  P_AddImm: {     
d190: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
d1a0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
d1b0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41  pOp->p1];.  memA
d1c0: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
d1d0: 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33  pIn1);.  sqlite3
d1e0: 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
d1f0: 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d  y(pIn1);.  pIn1-
d200: 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b  >u.i += pOp->p2;
d210: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
d220: 4f 70 63 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e  Opcode: MustBeIn
d230: 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
d240: 20 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76   .** Force the v
d250: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
d260: 20 50 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74   P1 to be an int
d270: 65 67 65 72 2e 20 20 49 66 20 74 68 65 20 76 61  eger.  If the va
d280: 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20  lue.** in P1 is 
d290: 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61  not an integer a
d2a0: 6e 64 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e  nd cannot be con
d2b0: 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69  verted into an i
d2c0: 6e 74 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75  nteger.** withou
d2d0: 74 20 64 61 74 61 20 6c 6f 73 73 2c 20 74 68 65  t data loss, the
d2e0: 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  n jump immediate
d2f0: 6c 79 20 74 6f 20 50 32 2c 20 6f 72 20 69 66 20  ly to P2, or if 
d300: 50 32 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61  P2==0.** raise a
d310: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43  n SQLITE_MISMATC
d320: 48 20 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a  H exception..*/.
d330: 63 61 73 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e  case OP_MustBeIn
d340: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
d350: 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
d360: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
d370: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28  Op->p1];.  if( (
d380: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
d390: 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20  M_Int)==0 ){.   
d3a0: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
d3b0: 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f  In1, SQLITE_AFF_
d3c0: 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e  NUMERIC, encodin
d3d0: 67 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e  g);.    VdbeBran
d3e0: 63 68 54 61 6b 65 6e 28 28 70 49 6e 31 2d 3e 66  chTaken((pIn1->f
d3f0: 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29 3d 3d 30  lags&MEM_Int)==0
d400: 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20 28 70  , 2);.    if( (p
d410: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
d420: 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  _Int)==0 ){.    
d430: 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30    if( pOp->p2==0
d440: 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
d450: 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48   SQLITE_MISMATCH
d460: 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  ;.        goto a
d470: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
d480: 72 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  r;.      }else{.
d490: 20 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70          pc = pOp
d4a0: 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20  ->p2 - 1;.      
d4b0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
d4c0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 4d 65 6d  .    }.  }.  Mem
d4d0: 53 65 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31  SetTypeFlag(pIn1
d4e0: 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72  , MEM_Int);.  br
d4f0: 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
d500: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
d510: 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70  TING_POINT./* Op
d520: 63 6f 64 65 3a 20 52 65 61 6c 41 66 66 69 6e 69  code: RealAffini
d530: 74 79 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ty P1 * * * *.**
d540: 0a 2a 2a 20 49 66 20 72 65 67 69 73 74 65 72 20  .** If register 
d550: 50 31 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65  P1 holds an inte
d560: 67 65 72 20 63 6f 6e 76 65 72 74 20 69 74 20 74  ger convert it t
d570: 6f 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a  o a real value..
d580: 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
d590: 65 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 65  e is used when e
d5a0: 78 74 72 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d  xtracting inform
d5b0: 61 74 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c  ation from a col
d5c0: 75 6d 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73 20  umn that.** has 
d5d0: 52 45 41 4c 20 61 66 66 69 6e 69 74 79 2e 20 20  REAL affinity.  
d5e0: 53 75 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75  Such column valu
d5f0: 65 73 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20  es may still be 
d600: 73 74 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74  stored as.** int
d610: 65 67 65 72 73 2c 20 66 6f 72 20 73 70 61 63 65  egers, for space
d620: 20 65 66 66 69 63 69 65 6e 63 79 2c 20 62 75 74   efficiency, but
d630: 20 61 66 74 65 72 20 65 78 74 72 61 63 74 69 6f   after extractio
d640: 6e 20 77 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a  n we want them.*
d650: 2a 20 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61  * to have only a
d660: 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a   real value..*/.
d670: 63 61 73 65 20 4f 50 5f 52 65 61 6c 41 66 66 69  case OP_RealAffi
d680: 6e 69 74 79 3a 20 7b 20 20 20 20 20 20 20 20 20  nity: {         
d690: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20           /* in1 
d6a0: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
d6b0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  m[pOp->p1];.  if
d6c0: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
d6d0: 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73  MEM_Int ){.    s
d6e0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61  qlite3VdbeMemRea
d6f0: 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a  lify(pIn1);.  }.
d700: 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
d710: 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
d720: 45 5f 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f  E_OMIT_CAST./* O
d730: 70 63 6f 64 65 3a 20 43 61 73 74 20 50 31 20 50  pcode: Cast P1 P
d740: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
d750: 73 69 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b  sis: affinity(r[
d760: 50 31 5d 29 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65  P1]).**.** Force
d770: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
d780: 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20  gister P1 to be 
d790: 74 68 65 20 74 79 70 65 20 64 65 66 69 6e 65 64  the type defined
d7a0: 20 62 79 20 50 32 2e 0a 2a 2a 20 0a 2a 2a 20 3c   by P2..** .** <
d7b0: 75 6c 3e 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65  ul>.** <li value
d7c0: 3d 22 39 37 22 3e 20 54 45 58 54 0a 2a 2a 20 3c  ="97"> TEXT.** <
d7d0: 6c 69 20 76 61 6c 75 65 3d 22 39 38 22 3e 20 42  li value="98"> B
d7e0: 4c 4f 42 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65  LOB.** <li value
d7f0: 3d 22 39 39 22 3e 20 4e 55 4d 45 52 49 43 0a 2a  ="99"> NUMERIC.*
d800: 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 31 30 30  * <li value="100
d810: 22 3e 20 49 4e 54 45 47 45 52 0a 2a 2a 20 3c 6c  "> INTEGER.** <l
d820: 69 20 76 61 6c 75 65 3d 22 31 30 31 22 3e 20 52  i value="101"> R
d830: 45 41 4c 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a  EAL.** </ul>.**.
d840: 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20  ** A NULL value 
d850: 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62  is not changed b
d860: 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20  y this routine. 
d870: 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c   It remains NULL
d880: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 61 73  ..*/.case OP_Cas
d890: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
d8a0: 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
d8b0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
d8c0: 32 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  2>=SQLITE_AFF_TE
d8d0: 58 54 20 26 26 20 70 4f 70 2d 3e 70 32 3c 3d 53  XT && pOp->p2<=S
d8e0: 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 29  QLITE_AFF_REAL )
d8f0: 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f  ;.  testcase( pO
d900: 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46  p->p2==SQLITE_AF
d910: 46 5f 54 45 58 54 20 29 3b 0a 20 20 74 65 73 74  F_TEXT );.  test
d920: 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53  case( pOp->p2==S
d930: 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 29  QLITE_AFF_NONE )
d940: 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f  ;.  testcase( pO
d950: 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46  p->p2==SQLITE_AF
d960: 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20 74  F_NUMERIC );.  t
d970: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32  estcase( pOp->p2
d980: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  ==SQLITE_AFF_INT
d990: 45 47 45 52 20 29 3b 0a 20 20 74 65 73 74 63 61  EGER );.  testca
d9a0: 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c  se( pOp->p2==SQL
d9b0: 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a  ITE_AFF_REAL );.
d9c0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
d9d0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p1];.  memAb
d9e0: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
d9f0: 49 6e 31 29 3b 0a 20 20 72 63 20 3d 20 45 78 70  In1);.  rc = Exp
da00: 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20  andBlob(pIn1);. 
da10: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
da20: 61 73 74 28 70 49 6e 31 2c 20 70 4f 70 2d 3e 70  ast(pIn1, pOp->p
da30: 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  2, encoding);.  
da40: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
da50: 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65  IZE(pIn1);.  bre
da60: 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
da70: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54  SQLITE_OMIT_CAST
da80: 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
da90: 4c 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Lt P1 P2 P3 P4 P
daa0: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  5.** Synopsis: i
dab0: 66 20 72 5b 50 31 5d 3c 72 5b 50 33 5d 20 67 6f  f r[P1]<r[P3] go
dac0: 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70  to P2.**.** Comp
dad0: 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 69  are the values i
dae0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
daf0: 64 20 50 33 2e 20 20 49 66 20 72 65 67 28 50 33  d P3.  If reg(P3
db00: 29 3c 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a  )<reg(P1) then.*
db10: 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  * jump to addres
db20: 73 20 50 32 2e 20 20 0a 2a 2a 0a 2a 2a 20 49 66  s P2.  .**.** If
db30: 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50   the SQLITE_JUMP
db40: 49 46 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50 35  IFNULL bit of P5
db50: 20 69 73 20 73 65 74 20 61 6e 64 20 65 69 74 68   is set and eith
db60: 65 72 20 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a  er reg(P1) or.**
db70: 20 72 65 67 28 50 33 29 20 69 73 20 4e 55 4c 4c   reg(P3) is NULL
db80: 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a   then take the j
db90: 75 6d 70 2e 20 20 49 66 20 74 68 65 20 53 51 4c  ump.  If the SQL
dba0: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a  ITE_JUMPIFNULL .
dbb0: 2a 2a 20 62 69 74 20 69 73 20 63 6c 65 61 72 20  ** bit is clear 
dbc0: 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
dbd0: 68 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72  h if either oper
dbe0: 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a  and is NULL..**.
dbf0: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46  ** The SQLITE_AF
dc00: 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f  F_MASK portion o
dc10: 66 20 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20  f P5 must be an 
dc20: 61 66 66 69 6e 69 74 79 20 63 68 61 72 61 63 74  affinity charact
dc30: 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  er -.** SQLITE_A
dc40: 46 46 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f  FF_TEXT, SQLITE_
dc50: 41 46 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64  AFF_INTEGER, and
dc60: 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74   so forth. An at
dc70: 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a  tempt is made .*
dc80: 2a 20 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68  * to coerce both
dc90: 20 69 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e   inputs accordin
dca0: 67 20 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69  g to this affini
dcb0: 74 79 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a  ty before the.**
dcc0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d   comparison is m
dcd0: 61 64 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49  ade. If the SQLI
dce0: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30  TE_AFF_MASK is 0
dcf0: 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69  x00, then numeri
dd00: 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73  c.** affinity is
dd10: 20 75 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74   used. Note that
dd20: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f   the affinity co
dd30: 6e 76 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74  nversions are st
dd40: 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74  ored.** back int
dd50: 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69  o the input regi
dd60: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e  sters P1 and P3.
dd70: 20 20 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65    So this opcode
dd80: 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65   can cause.** pe
dd90: 72 73 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73  rsistent changes
dda0: 20 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 31   to registers P1
ddb0: 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f   and P3..**.** O
ddc0: 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69  nce any conversi
ddd0: 6f 6e 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70  ons have taken p
dde0: 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65  lace, and neithe
ddf0: 72 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c  r value is NULL,
de00: 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20   .** the values 
de10: 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66  are compared. If
de20: 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65   both values are
de30: 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63   blobs then memc
de40: 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20  mp() is.** used 
de50: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
de60: 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20   results of the 
de70: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20  comparison.  If 
de80: 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61  both values.** a
de90: 72 65 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68  re text, then th
dea0: 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f  e appropriate co
deb0: 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
dec0: 20 73 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a   specified in.**
ded0: 20 50 34 20 69 73 20 20 75 73 65 64 20 74 6f 20   P4 is  used to 
dee0: 64 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  do the compariso
def0: 6e 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74  n.  If P4 is not
df00: 20 73 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a   specified then.
df10: 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75  ** memcmp() is u
df20: 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74  sed to compare t
df30: 65 78 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20  ext string.  If 
df40: 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a  both values are.
df50: 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e  ** numeric, then
df60: 20 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61   a numeric compa
df70: 72 69 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49  rison is used. I
df80: 66 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73  f the two values
df90: 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65  .** are of diffe
dfa0: 72 65 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e  rent types, then
dfb0: 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e   numbers are con
dfc0: 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61  sidered less tha
dfd0: 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64  n.** strings and
dfe0: 20 73 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e   strings are con
dff0: 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61  sidered less tha
e000: 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49  n blobs..**.** I
e010: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f  f the SQLITE_STO
e020: 52 45 50 32 20 62 69 74 20 6f 66 20 50 35 20 69  REP2 bit of P5 i
e030: 73 20 73 65 74 2c 20 74 68 65 6e 20 64 6f 20 6e  s set, then do n
e040: 6f 74 20 6a 75 6d 70 2e 20 20 49 6e 73 74 65 61  ot jump.  Instea
e050: 64 2c 0a 2a 2a 20 73 74 6f 72 65 20 61 20 62 6f  d,.** store a bo
e060: 6f 6c 65 61 6e 20 72 65 73 75 6c 74 20 28 65 69  olean result (ei
e070: 74 68 65 72 20 30 2c 20 6f 72 20 31 2c 20 6f 72  ther 0, or 1, or
e080: 20 4e 55 4c 4c 29 20 69 6e 20 72 65 67 69 73 74   NULL) in regist
e090: 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P2..**.** If 
e0a0: 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  the SQLITE_NULLE
e0b0: 51 20 62 69 74 20 69 73 20 73 65 74 20 69 6e 20  Q bit is set in 
e0c0: 50 35 2c 20 74 68 65 6e 20 4e 55 4c 4c 20 76 61  P5, then NULL va
e0d0: 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65  lues are conside
e0e0: 72 65 64 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 20  red.** equal to 
e0f0: 6f 6e 65 20 61 6e 6f 74 68 65 72 2c 20 70 72 6f  one another, pro
e100: 76 69 64 65 64 20 74 68 61 74 20 74 68 65 79 20  vided that they 
e110: 64 6f 20 6e 6f 74 20 68 61 76 65 20 74 68 65 69  do not have thei
e120: 72 20 4d 45 4d 5f 43 6c 65 61 72 65 64 0a 2a 2a  r MEM_Cleared.**
e130: 20 62 69 74 20 73 65 74 2e 0a 2a 2f 0a 2f 2a 20   bit set..*/./* 
e140: 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31 20 50 32  Opcode: Ne P1 P2
e150: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
e160: 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21  opsis: if r[P1]!
e170: 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a  =r[P3] goto P2.*
e180: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
e190: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74  just like the Lt
e1a0: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
e1b0: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
e1c0: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
e1d0: 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69  operands in regi
e1e0: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 20  sters P1 and P3 
e1f0: 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20  are not equal.  
e200: 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  See the Lt opcod
e210: 65 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f  e for.** additio
e220: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
e230: 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  .**.** If SQLITE
e240: 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69  _NULLEQ is set i
e250: 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20 72 65  n P5 then the re
e260: 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73  sult of comparis
e270: 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69 74  on is always eit
e280: 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66  her.** true or f
e290: 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65  alse and is neve
e2a0: 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68  r NULL.  If both
e2b0: 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55   operands are NU
e2c0: 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  LL then the resu
e2d0: 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69  lt.** of compari
e2e0: 73 6f 6e 20 69 73 20 66 61 6c 73 65 2e 20 20 49  son is false.  I
e2f0: 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
e300: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68   is NULL then th
e310: 65 20 72 65 73 75 6c 74 20 69 73 20 74 72 75 65  e result is true
e320: 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20  ..** If neither 
e330: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
e340: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68  the result is th
e350: 65 20 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75  e same as it wou
e360: 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20  ld be if.** the 
e370: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c  SQLITE_NULLEQ fl
e380: 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20  ag were omitted 
e390: 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f  from P5..*/./* O
e3a0: 70 63 6f 64 65 3a 20 45 71 20 50 31 20 50 32 20  pcode: Eq P1 P2 
e3b0: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
e3c0: 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3d 3d  psis: if r[P1]==
e3d0: 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a  r[P3] goto P2.**
e3e0: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
e3f0: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
e400: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
e410: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
e420: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f  aken if.** the o
e430: 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73  perands in regis
e440: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61  ters P1 and P3 a
e450: 72 65 20 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65  re equal..** See
e460: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
e470: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
e480: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  formation..**.**
e490: 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45   If SQLITE_NULLE
e4a0: 51 20 69 73 20 73 65 74 20 69 6e 20 50 35 20 74  Q is set in P5 t
e4b0: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f  hen the result o
e4c0: 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  f comparison is 
e4d0: 61 6c 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a  always either.**
e4e0: 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61   true or false a
e4f0: 6e 64 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c  nd is never NULL
e500: 2e 20 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61  .  If both opera
e510: 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65  nds are NULL the
e520: 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20  n the result.** 
e530: 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  of comparison is
e540: 20 74 72 75 65 2e 20 20 49 66 20 65 69 74 68 65   true.  If eithe
e550: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
e560: 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  L then the resul
e570: 74 20 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49  t is false..** I
e580: 66 20 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e  f neither operan
e590: 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 20 72 65  d is NULL the re
e5a0: 73 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65  sult is the same
e5b0: 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20   as it would be 
e5c0: 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45  if.** the SQLITE
e5d0: 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72  _NULLEQ flag wer
e5e0: 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50  e omitted from P
e5f0: 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  5..*/./* Opcode:
e600: 20 4c 65 20 50 31 20 50 32 20 50 33 20 50 34 20   Le P1 P2 P3 P4 
e610: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
e620: 69 66 20 72 5b 50 31 5d 3c 3d 72 5b 50 33 5d 20  if r[P1]<=r[P3] 
e630: 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  goto P2.**.** Th
e640: 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  is works just li
e650: 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ke the Lt opcode
e660: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
e670: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
e680: 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74  f.** the content
e690: 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20   of register P3 
e6a0: 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20  is less than or 
e6b0: 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e  equal to the con
e6c0: 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73  tent of.** regis
e6d0: 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65  ter P1.  See the
e6e0: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61   Lt opcode for a
e6f0: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
e700: 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ation..*/./* Opc
e710: 6f 64 65 3a 20 47 74 20 50 31 20 50 32 20 50 33  ode: Gt P1 P2 P3
e720: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
e730: 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 72 5b 50  is: if r[P1]>r[P
e740: 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  3] goto P2.**.**
e750: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
e760: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
e770: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
e780: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
e790: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  n if.** the cont
e7a0: 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
e7b0: 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68  P3 is greater th
e7c0: 61 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  an the content o
e7d0: 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  f.** register P1
e7e0: 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70  .  See the Lt op
e7f0: 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
e800: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
e810: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47  .*/./* Opcode: G
e820: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
e830: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
e840: 20 72 5b 50 31 5d 3e 3d 72 5b 50 33 5d 20 67 6f   r[P1]>=r[P3] go
e850: 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73  to P2.**.** This
e860: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
e870: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65   the Lt opcode e
e880: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a  xcept that the j
e890: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a  ump is taken if.
e8a0: 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** the content o
e8b0: 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  f register P3 is
e8c0: 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72   greater than or
e8d0: 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f   equal to the co
e8e0: 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69  ntent of.** regi
e8f0: 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68  ster P1.  See th
e900: 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20  e Lt opcode for 
e910: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
e920: 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  mation..*/.case 
e930: 4f 50 5f 45 71 3a 20 20 20 20 20 20 20 20 20 20  OP_Eq:          
e940: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
e950: 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_EQ, jump, in1
e960: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
e970: 5f 4e 65 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Ne:            
e980: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
e990: 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _NE, jump, in1, 
e9a0: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c  in3 */.case OP_L
e9b0: 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t:              
e9c0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c   /* same as TK_L
e9d0: 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  T, jump, in1, in
e9e0: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a  3 */.case OP_Le:
e9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ea00: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c  * same as TK_LE,
ea10: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
ea20: 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20 20  */.case OP_Gt:  
ea30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ea40: 73 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a  same as TK_GT, j
ea50: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
ea60: 0a 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20  .case OP_Ge: {  
ea70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
ea80: 6d 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d  me as TK_GE, jum
ea90: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20  p, in1, in3 */. 
eaa0: 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20   int res;       
eab0: 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f       /* Result o
eac0: 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  f the comparison
ead0: 20 6f 66 20 70 49 6e 31 20 61 67 61 69 6e 73 74   of pIn1 against
eae0: 20 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20   pIn3 */.  char 
eaf0: 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 2f  affinity;      /
eb00: 2a 20 41 66 66 69 6e 69 74 79 20 74 6f 20 75 73  * Affinity to us
eb10: 65 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e  e for comparison
eb20: 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 31   */.  u16 flags1
eb30: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70  ;         /* Cop
eb40: 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c  y of initial val
eb50: 75 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67  ue of pIn1->flag
eb60: 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73  s */.  u16 flags
eb70: 33 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  3;         /* Co
eb80: 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61  py of initial va
eb90: 6c 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61  lue of pIn3->fla
eba0: 67 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20  gs */..  pIn1 = 
ebb0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
ebc0: 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
ebd0: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73  Op->p3];.  flags
ebe0: 31 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b  1 = pIn1->flags;
ebf0: 0a 20 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33  .  flags3 = pIn3
ec00: 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28  ->flags;.  if( (
ec10: 66 6c 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29  flags1 | flags3)
ec20: 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20  &MEM_Null ){.   
ec30: 20 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20   /* One or both 
ec40: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c  operands are NUL
ec50: 4c 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70  L */.    if( pOp
ec60: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55  ->p5 & SQLITE_NU
ec70: 4c 4c 45 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a  LLEQ ){.      /*
ec80: 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45   If SQLITE_NULLE
ec90: 51 20 69 73 20 73 65 74 20 28 77 68 69 63 68 20  Q is set (which 
eca0: 77 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e  will only happen
ecb0: 20 69 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72   if the operator
ecc0: 20 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f   is.      ** OP_
ecd0: 45 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65  Eq or OP_Ne) the
ece0: 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20  n take the jump 
ecf0: 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67  or not depending
ed00: 20 6f 6e 20 77 68 65 74 68 65 72 0a 20 20 20 20   on whether.    
ed10: 20 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68    ** or not both
ed20: 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 75   operands are nu
ed30: 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  ll..      */.   
ed40: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
ed50: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c  opcode==OP_Eq ||
ed60: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
ed70: 5f 4e 65 20 29 3b 0a 20 20 20 20 20 20 61 73 73  _Ne );.      ass
ed80: 65 72 74 28 20 28 66 6c 61 67 73 31 20 26 20 4d  ert( (flags1 & M
ed90: 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30 20 29  EM_Cleared)==0 )
eda0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
edb0: 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54  (pOp->p5 & SQLIT
edc0: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 29 3d 3d 30  E_JUMPIFNULL)==0
edd0: 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 28 66   );.      if( (f
ede0: 6c 61 67 73 31 26 4d 45 4d 5f 4e 75 6c 6c 29 21  lags1&MEM_Null)!
edf0: 3d 30 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c  =0.       && (fl
ee00: 61 67 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  ags3&MEM_Null)!=
ee10: 30 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c 61  0.       && (fla
ee20: 67 73 33 26 4d 45 4d 5f 43 6c 65 61 72 65 64 29  gs3&MEM_Cleared)
ee30: 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20  ==0.      ){.   
ee40: 20 20 20 20 20 72 65 73 20 3d 20 30 3b 20 20 2f       res = 0;  /
ee50: 2a 20 52 65 73 75 6c 74 73 20 61 72 65 20 65 71  * Results are eq
ee60: 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c  ual */.      }el
ee70: 73 65 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20  se{.        res 
ee80: 3d 20 31 3b 20 20 2f 2a 20 52 65 73 75 6c 74 73  = 1;  /* Results
ee90: 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a   are not equal *
eea0: 2f 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  /.      }.    }e
eeb0: 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 53 51  lse{.      /* SQ
eec0: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 63  LITE_NULLEQ is c
eed0: 6c 65 61 72 20 61 6e 64 20 61 74 20 6c 65 61 73  lear and at leas
eee0: 74 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69 73  t one operand is
eef0: 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a 20   NULL,.      ** 
ef00: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
ef10: 69 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a  is always NULL..
ef20: 20 20 20 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d        ** The jum
ef30: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68  p is taken if th
ef40: 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  e SQLITE_JUMPIFN
ef50: 55 4c 4c 20 62 69 74 20 69 73 20 73 65 74 2e 0a  ULL bit is set..
ef60: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
ef70: 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  f( pOp->p5 & SQL
ef80: 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20  ITE_STOREP2 ){. 
ef90: 20 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61         pOut = &a
efa0: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
efb0: 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65        MemSetType
efc0: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e  Flag(pOut, MEM_N
efd0: 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20 52 45  ull);.        RE
efe0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
eff0: 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20  ->p2, pOut);.   
f000: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
f010: 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
f020: 6e 28 32 2c 33 29 3b 0a 20 20 20 20 20 20 20 20  n(2,3);.        
f030: 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  if( pOp->p5 & SQ
f040: 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20  LITE_JUMPIFNULL 
f050: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 63 20  ){.          pc 
f060: 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 20  = pOp->p2-1;.   
f070: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
f080: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
f090: 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  }.  }else{.    /
f0a0: 2a 20 4e 65 69 74 68 65 72 20 6f 70 65 72 61 6e  * Neither operan
f0b0: 64 20 69 73 20 4e 55 4c 4c 2e 20 20 44 6f 20 61  d is NULL.  Do a
f0c0: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a   comparison. */.
f0d0: 20 20 20 20 61 66 66 69 6e 69 74 79 20 3d 20 70      affinity = p
f0e0: 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
f0f0: 41 46 46 5f 4d 41 53 4b 3b 0a 20 20 20 20 69 66  AFF_MASK;.    if
f100: 28 20 61 66 66 69 6e 69 74 79 20 29 7b 0a 20 20  ( affinity ){.  
f110: 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74      applyAffinit
f120: 79 28 70 49 6e 31 2c 20 61 66 66 69 6e 69 74 79  y(pIn1, affinity
f130: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
f140: 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
f150: 28 70 49 6e 33 2c 20 61 66 66 69 6e 69 74 79 2c  (pIn3, affinity,
f160: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
f170: 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63    if( db->malloc
f180: 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f  Failed ) goto no
f190: 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  _mem;.    }..   
f1a0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
f1b0: 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51  type==P4_COLLSEQ
f1c0: 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c   || pOp->p4.pCol
f1d0: 6c 3d 3d 30 20 29 3b 0a 20 20 20 20 45 78 70 61  l==0 );.    Expa
f1e0: 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20  ndBlob(pIn1);.  
f1f0: 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e    ExpandBlob(pIn
f200: 33 29 3b 0a 20 20 20 20 72 65 73 20 3d 20 73 71  3);.    res = sq
f210: 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28  lite3MemCompare(
f220: 70 49 6e 33 2c 20 70 49 6e 31 2c 20 70 4f 70 2d  pIn3, pIn1, pOp-
f230: 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a  >p4.pColl);.  }.
f240: 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f    switch( pOp->o
f250: 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 63 61 73  pcode ){.    cas
f260: 65 20 4f 50 5f 45 71 3a 20 20 20 20 72 65 73 20  e OP_Eq:    res 
f270: 3d 20 72 65 73 3d 3d 30 3b 20 20 20 20 20 62 72  = res==0;     br
f280: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50  eak;.    case OP
f290: 5f 4e 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65  _Ne:    res = re
f2a0: 73 21 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b  s!=0;     break;
f2b0: 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 74 3a  .    case OP_Lt:
f2c0: 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c 30 3b      res = res<0;
f2d0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
f2e0: 20 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20   case OP_Le:    
f2f0: 72 65 73 20 3d 20 72 65 73 3c 3d 30 3b 20 20 20  res = res<=0;   
f300: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
f310: 65 20 4f 50 5f 47 74 3a 20 20 20 20 72 65 73 20  e OP_Gt:    res 
f320: 3d 20 72 65 73 3e 30 3b 20 20 20 20 20 20 62 72  = res>0;      br
f330: 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74  eak;.    default
f340: 3a 20 20 20 20 20 20 20 72 65 73 20 3d 20 72 65  :       res = re
f350: 73 3e 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b  s>=0;     break;
f360: 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d  .  }..  if( pOp-
f370: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f  >p5 & SQLITE_STO
f380: 52 45 50 32 20 29 7b 0a 20 20 20 20 70 4f 75 74  REP2 ){.    pOut
f390: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
f3a0: 5d 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  ];.    memAboutT
f3b0: 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
f3c0: 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
f3d0: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
f3e0: 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  nt);.    pOut->u
f3f0: 2e 69 20 3d 20 72 65 73 3b 0a 20 20 20 20 52 45  .i = res;.    RE
f400: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
f410: 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 7d  ->p2, pOut);.  }
f420: 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72  else{.    VdbeBr
f430: 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
f440: 2c 20 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  , (pOp->p5 & SQL
f450: 49 54 45 5f 4e 55 4c 4c 45 51 29 3f 32 3a 33 29  ITE_NULLEQ)?2:3)
f460: 3b 0a 20 20 20 20 69 66 28 20 72 65 73 20 29 7b  ;.    if( res ){
f470: 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
f480: 3e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  >p2-1;.    }.  }
f490: 0a 20 20 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63  .  /* Undo any c
f4a0: 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 61  hanges made by a
f4b0: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 20 74  pplyAffinity() t
f4c0: 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69  o the input regi
f4d0: 73 74 65 72 73 2e 20 2a 2f 0a 20 20 70 49 6e 31  sters. */.  pIn1
f4e0: 2d 3e 66 6c 61 67 73 20 3d 20 28 70 49 6e 31 2d  ->flags = (pIn1-
f4f0: 3e 66 6c 61 67 73 26 7e 4d 45 4d 5f 54 79 70 65  >flags&~MEM_Type
f500: 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73 31 26  Mask) | (flags1&
f510: 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20  MEM_TypeMask);. 
f520: 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 3d 20 28   pIn3->flags = (
f530: 70 49 6e 33 2d 3e 66 6c 61 67 73 26 7e 4d 45 4d  pIn3->flags&~MEM
f540: 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c  _TypeMask) | (fl
f550: 61 67 73 33 26 4d 45 4d 5f 54 79 70 65 4d 61 73  ags3&MEM_TypeMas
f560: 6b 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  k);.  break;.}..
f570: 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75  /* Opcode: Permu
f580: 74 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20  tation * * * P4 
f590: 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  *.**.** Set the 
f5a0: 70 65 72 6d 75 74 61 74 69 6f 6e 20 75 73 65 64  permutation used
f5b0: 20 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61   by the OP_Compa
f5c0: 72 65 20 6f 70 65 72 61 74 6f 72 20 74 6f 20 62  re operator to b
f5d0: 65 20 74 68 65 20 61 72 72 61 79 0a 2a 2a 20 6f  e the array.** o
f5e0: 66 20 69 6e 74 65 67 65 72 73 20 69 6e 20 50 34  f integers in P4
f5f0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d  ..**.** The perm
f600: 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  utation is only 
f610: 76 61 6c 69 64 20 75 6e 74 69 6c 20 74 68 65 20  valid until the 
f620: 6e 65 78 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20  next OP_Compare 
f630: 74 68 61 74 20 68 61 73 0a 2a 2a 20 74 68 65 20  that has.** the 
f640: 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62  OPFLAG_PERMUTE b
f650: 69 74 20 73 65 74 20 69 6e 20 50 35 2e 20 54 79  it set in P5. Ty
f660: 70 69 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50  pically the OP_P
f670: 65 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c  ermutation shoul
f680: 64 20 0a 2a 2a 20 6f 63 63 75 72 20 69 6d 6d 65  d .** occur imme
f690: 64 69 61 74 65 6c 79 20 70 72 69 6f 72 20 74 6f  diately prior to
f6a0: 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e   the OP_Compare.
f6b0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d  .*/.case OP_Perm
f6c0: 75 74 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73  utation: {.  ass
f6d0: 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
f6e0: 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b  ==P4_INTARRAY );
f6f0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
f700: 70 34 2e 61 69 20 29 3b 0a 20 20 61 50 65 72 6d  p4.ai );.  aPerm
f710: 75 74 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69  ute = pOp->p4.ai
f720: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
f730: 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65   Opcode: Compare
f740: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
f750: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
f760: 31 40 50 33 5d 20 3c 2d 3e 20 72 5b 50 32 40 50  1@P3] <-> r[P2@P
f770: 33 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65  3].**.** Compare
f780: 20 74 77 6f 20 76 65 63 74 6f 72 73 20 6f 66 20   two vectors of 
f790: 72 65 67 69 73 74 65 72 73 20 69 6e 20 72 65 67  registers in reg
f7a0: 28 50 31 29 2e 2e 72 65 67 28 50 31 2b 50 33 2d  (P1)..reg(P1+P3-
f7b0: 31 29 20 28 63 61 6c 6c 20 74 68 69 73 0a 2a 2a  1) (call this.**
f7c0: 20 76 65 63 74 6f 72 20 22 41 22 29 20 61 6e 64   vector "A") and
f7d0: 20 69 6e 20 72 65 67 28 50 32 29 2e 2e 72 65 67   in reg(P2)..reg
f7e0: 28 50 32 2b 50 33 2d 31 29 20 28 22 42 22 29 2e  (P2+P3-1) ("B").
f7f0: 20 20 53 61 76 65 20 74 68 65 20 72 65 73 75 6c    Save the resul
f800: 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6d 70  t of.** the comp
f810: 61 72 69 73 6f 6e 20 66 6f 72 20 75 73 65 20 62  arison for use b
f820: 79 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 4a 75  y the next OP_Ju
f830: 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a  mp instruct..**.
f840: 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68 65  ** If P5 has the
f850: 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20   OPFLAG_PERMUTE 
f860: 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68  bit set, then th
f870: 65 20 6f 72 64 65 72 20 6f 66 20 63 6f 6d 70 61  e order of compa
f880: 72 69 73 6f 6e 20 69 73 0a 2a 2a 20 64 65 74 65  rison is.** dete
f890: 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 6d 6f  rmined by the mo
f8a0: 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 50 65 72  st recent OP_Per
f8b0: 6d 75 74 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f  mutation operato
f8c0: 72 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 4f 50  r.  If the.** OP
f8d0: 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74  FLAG_PERMUTE bit
f8e0: 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20   is clear, then 
f8f0: 72 65 67 69 73 74 65 72 20 61 72 65 20 63 6f 6d  register are com
f900: 70 61 72 65 64 20 69 6e 20 73 65 71 75 65 6e 74  pared in sequent
f910: 69 61 6c 0a 2a 2a 20 6f 72 64 65 72 2e 0a 2a 2a  ial.** order..**
f920: 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b 65 79 49  .** P4 is a KeyI
f930: 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 74 68  nfo structure th
f940: 61 74 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c 61  at defines colla
f950: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 61  ting sequences a
f960: 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65 72  nd sort.** order
f970: 73 20 66 6f 72 20 74 68 65 20 63 6f 6d 70 61 72  s for the compar
f980: 69 73 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d 75  ison.  The permu
f990: 74 61 74 69 6f 6e 20 61 70 70 6c 69 65 73 20 74  tation applies t
f9a0: 6f 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 6f  o registers.** o
f9b0: 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79 49 6e 66  nly.  The KeyInf
f9c0: 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 75  o elements are u
f9d0: 73 65 64 20 73 65 71 75 65 6e 74 69 61 6c 6c 79  sed sequentially
f9e0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 70  ..**.** The comp
f9f0: 61 72 69 73 6f 6e 20 69 73 20 61 20 73 6f 72 74  arison is a sort
fa00: 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f 20   comparison, so 
fa10: 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65 71  NULLs compare eq
fa20: 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72  ual,.** NULLs ar
fa30: 65 20 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d 62  e less than numb
fa40: 65 72 73 2c 20 6e 75 6d 62 65 72 73 20 61 72 65  ers, numbers are
fa50: 20 6c 65 73 73 20 74 68 61 6e 20 73 74 72 69 6e   less than strin
fa60: 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69 6e  gs,.** and strin
fa70: 67 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e  gs are less than
fa80: 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65 20   blobs..*/.case 
fa90: 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20  OP_Compare: {.  
faa0: 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a  int n;.  int i;.
fab0: 20 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74 20    int p1;.  int 
fac0: 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79 49  p2;.  const KeyI
fad0: 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20  nfo *pKeyInfo;. 
fae0: 20 69 6e 74 20 69 64 78 3b 0a 20 20 43 6f 6c 6c   int idx;.  Coll
faf0: 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f  Seq *pColl;    /
fb00: 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
fb10: 65 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e 20 74  ence to use on t
fb20: 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20 69 6e  his term */.  in
fb30: 74 20 62 52 65 76 3b 20 20 20 20 20 20 20 20 20  t bRev;         
fb40: 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 44 45 53   /* True for DES
fb50: 43 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72 64  CENDING sort ord
fb60: 65 72 20 2a 2f 0a 0a 20 20 69 66 28 20 28 70 4f  er */..  if( (pO
fb70: 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50  p->p5 & OPFLAG_P
fb80: 45 52 4d 55 54 45 29 3d 3d 30 20 29 20 61 50 65  ERMUTE)==0 ) aPe
fb90: 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 6e 20 3d  rmute = 0;.  n =
fba0: 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65 79   pOp->p3;.  pKey
fbb0: 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
fbc0: 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72  KeyInfo;.  asser
fbd0: 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65  t( n>0 );.  asse
fbe0: 72 74 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30 20  rt( pKeyInfo!=0 
fbf0: 29 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70  );.  p1 = pOp->p
fc00: 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70  1;.  p2 = pOp->p
fc10: 32 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45  2;.#if SQLITE_DE
fc20: 42 55 47 0a 20 20 69 66 28 20 61 50 65 72 6d 75  BUG.  if( aPermu
fc30: 74 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b 2c  te ){.    int k,
fc40: 20 6d 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72   mx = 0;.    for
fc50: 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20  (k=0; k<n; k++) 
fc60: 69 66 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3e  if( aPermute[k]>
fc70: 6d 78 20 29 20 6d 78 20 3d 20 61 50 65 72 6d 75  mx ) mx = aPermu
fc80: 74 65 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65 72  te[k];.    asser
fc90: 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6d 78  t( p1>0 && p1+mx
fca0: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
fcb0: 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20  ursor)+1 );.    
fcc0: 61 73 73 65 72 74 28 20 70 32 3e 30 20 26 26 20  assert( p2>0 && 
fcd0: 70 32 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p2+mx<=(p->nMem-
fce0: 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
fcf0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
fd00: 73 65 72 74 28 20 70 31 3e 30 20 26 26 20 70 31  sert( p1>0 && p1
fd10: 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  +n<=(p->nMem-p->
fd20: 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
fd30: 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 26    assert( p2>0 &
fd40: 26 20 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d  & p2+n<=(p->nMem
fd50: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29  -p->nCursor)+1 )
fd60: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ;.  }.#endif /* 
fd70: 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a  SQLITE_DEBUG */.
fd80: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20    for(i=0; i<n; 
fd90: 69 2b 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d 20  i++){.    idx = 
fda0: 61 50 65 72 6d 75 74 65 20 3f 20 61 50 65 72 6d  aPermute ? aPerm
fdb0: 75 74 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20  ute[i] : i;.    
fdc0: 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
fdd0: 69 64 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d  id(&aMem[p1+idx]
fde0: 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ) );.    assert(
fdf0: 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
fe00: 6d 5b 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20 20  m[p2+idx]) );.  
fe10: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
fe20: 28 70 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70  (p1+idx, &aMem[p
fe30: 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52 45 47  1+idx]);.    REG
fe40: 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 69  ISTER_TRACE(p2+i
fe50: 64 78 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78  dx, &aMem[p2+idx
fe60: 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  ]);.    assert( 
fe70: 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65  i<pKeyInfo->nFie
fe80: 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c 20  ld );.    pColl 
fe90: 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c  = pKeyInfo->aCol
fea0: 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76 20 3d  l[i];.    bRev =
feb0: 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72 74   pKeyInfo->aSort
fec0: 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69 43  Order[i];.    iC
fed0: 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69 74 65 33  ompare = sqlite3
fee0: 4d 65 6d 43 6f 6d 70 61 72 65 28 26 61 4d 65 6d  MemCompare(&aMem
fef0: 5b 70 31 2b 69 64 78 5d 2c 20 26 61 4d 65 6d 5b  [p1+idx], &aMem[
ff00: 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b  p2+idx], pColl);
ff10: 0a 20 20 20 20 69 66 28 20 69 43 6f 6d 70 61 72  .    if( iCompar
ff20: 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 62  e ){.      if( b
ff30: 52 65 76 20 29 20 69 43 6f 6d 70 61 72 65 20 3d  Rev ) iCompare =
ff40: 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20 20   -iCompare;.    
ff50: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
ff60: 20 7d 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20   }.  aPermute = 
ff70: 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  0;.  break;.}../
ff80: 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20 50  * Opcode: Jump P
ff90: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
ffa0: 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 69 6e  * Jump to the in
ffb0: 73 74 72 75 63 74 69 6f 6e 20 61 74 20 61 64 64  struction at add
ffc0: 72 65 73 73 20 50 31 2c 20 50 32 2c 20 6f 72 20  ress P1, P2, or 
ffd0: 50 33 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  P3 depending on 
ffe0: 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74 68  whether.** in th
fff0: 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50  e most recent OP
10000 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74 72 75 63  _Compare instruc
10010 74 69 6f 6e 20 74 68 65 20 50 31 20 76 65 63 74  tion the P1 vect
10020 6f 72 20 77 61 73 20 6c 65 73 73 20 74 68 61 6e  or was less than
10030 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f 72  .** equal to, or
10040 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
10050 65 20 50 32 20 76 65 63 74 6f 72 2c 20 72 65 73  e P2 vector, res
10060 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61  pectively..*/.ca
10070 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20 20  se OP_Jump: {   
10080 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
10090 70 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d 70  p */.  if( iComp
100a0 61 72 65 3c 30 20 29 7b 0a 20 20 20 20 70 63 20  are<0 ){.    pc 
100b0 3d 20 70 4f 70 2d 3e 70 31 20 2d 20 31 3b 20 20  = pOp->p1 - 1;  
100c0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
100d0 30 2c 33 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  0,3);.  }else if
100e0 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30 20 29 7b  ( iCompare==0 ){
100f0 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
10100 32 20 2d 20 31 3b 20 20 56 64 62 65 42 72 61 6e  2 - 1;  VdbeBran
10110 63 68 54 61 6b 65 6e 28 31 2c 33 29 3b 0a 20 20  chTaken(1,3);.  
10120 7d 65 6c 73 65 7b 0a 20 20 20 20 70 63 20 3d 20  }else{.    pc = 
10130 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 20 20 56 64  pOp->p3 - 1;  Vd
10140 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c  beBranchTaken(2,
10150 33 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  3);.  }.  break;
10160 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
10170 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  nd P1 P2 P3 * *.
10180 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
10190 33 5d 3d 28 72 5b 50 31 5d 20 26 26 20 72 5b 50  3]=(r[P1] && r[P
101a0 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74  2]).**.** Take t
101b0 68 65 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20 6f  he logical AND o
101c0 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  f the values in 
101d0 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
101e0 20 50 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74 65   P2 and.** write
101f0 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 74 6f   the result into
10200 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
10210 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 31  .** If either P1
10220 20 6f 72 20 50 32 20 69 73 20 30 20 28 66 61 6c   or P2 is 0 (fal
10230 73 65 29 20 74 68 65 6e 20 74 68 65 20 72 65 73  se) then the res
10240 75 6c 74 20 69 73 20 30 20 65 76 65 6e 20 69 66  ult is 0 even if
10250 0a 2a 2a 20 74 68 65 20 6f 74 68 65 72 20 69 6e  .** the other in
10260 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20  put is NULL.  A 
10270 4e 55 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f 72  NULL and true or
10280 20 74 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65 0a   two NULLs give.
10290 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74  ** a NULL output
102a0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
102b0 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  Or P1 P2 P3 * *.
102c0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
102d0 33 5d 3d 28 72 5b 50 31 5d 20 7c 7c 20 72 5b 50  3]=(r[P1] || r[P
102e0 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74  2]).**.** Take t
102f0 68 65 20 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66  he logical OR of
10300 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
10310 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50  egister P1 and P
10320 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74  2 and.** store t
10330 68 65 20 61 6e 73 77 65 72 20 69 6e 20 72 65 67  he answer in reg
10340 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  ister P3..**.** 
10350 49 66 20 65 69 74 68 65 72 20 50 31 20 6f 72 20  If either P1 or 
10360 50 32 20 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74  P2 is nonzero (t
10370 72 75 65 29 20 74 68 65 6e 20 74 68 65 20 72 65  rue) then the re
10380 73 75 6c 74 20 69 73 20 31 20 28 74 72 75 65 29  sult is 1 (true)
10390 0a 2a 2a 20 65 76 65 6e 20 69 66 20 74 68 65 20  .** even if the 
103a0 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  other input is N
103b0 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64  ULL.  A NULL and
103c0 20 66 61 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55   false or two NU
103d0 4c 4c 73 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55  LLs.** give a NU
103e0 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61  LL output..*/.ca
103f0 73 65 20 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20  se OP_And:      
10400 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
10410 61 73 20 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20  as TK_AND, in1, 
10420 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
10430 65 20 4f 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20  e OP_Or: {      
10440 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
10450 73 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e  s TK_OR, in1, in
10460 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74  2, out3 */.  int
10470 20 76 31 3b 20 20 20 20 2f 2a 20 4c 65 66 74 20   v1;    /* Left 
10480 6f 70 65 72 61 6e 64 3a 20 20 30 3d 3d 46 41 4c  operand:  0==FAL
10490 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d  SE, 1==TRUE, 2==
104a0 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20  UNKNOWN or NULL 
104b0 2a 2f 0a 20 20 69 6e 74 20 76 32 3b 20 20 20 20  */.  int v2;    
104c0 2f 2a 20 52 69 67 68 74 20 6f 70 65 72 61 6e 64  /* Right operand
104d0 3a 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54  : 0==FALSE, 1==T
104e0 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20  RUE, 2==UNKNOWN 
104f0 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 70 49  or NULL */..  pI
10500 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
10510 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  p1];.  if( pIn1-
10520 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
10530 6c 20 29 7b 0a 20 20 20 20 76 31 20 3d 20 32 3b  l ){.    v1 = 2;
10540 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 31  .  }else{.    v1
10550 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
10560 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b  tValue(pIn1)!=0;
10570 0a 20 20 7d 0a 20 20 70 49 6e 32 20 3d 20 26 61  .  }.  pIn2 = &a
10580 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
10590 69 66 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20  if( pIn2->flags 
105a0 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
105b0 20 20 76 32 20 3d 20 32 3b 0a 20 20 7d 65 6c 73    v2 = 2;.  }els
105c0 65 7b 0a 20 20 20 20 76 32 20 3d 20 73 71 6c 69  e{.    v2 = sqli
105d0 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
105e0 70 49 6e 32 29 21 3d 30 3b 0a 20 20 7d 0a 20 20  pIn2)!=0;.  }.  
105f0 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
10600 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20 20 20 20 73  =OP_And ){.    s
10610 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69  tatic const unsi
10620 67 6e 65 64 20 63 68 61 72 20 61 6e 64 5f 6c 6f  gned char and_lo
10630 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c 20  gic[] = { 0, 0, 
10640 30 2c 20 30 2c 20 31 2c 20 32 2c 20 30 2c 20 32  0, 0, 1, 2, 0, 2
10650 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20  , 2 };.    v1 = 
10660 61 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76  and_logic[v1*3+v
10670 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  2];.  }else{.   
10680 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e   static const un
10690 73 69 67 6e 65 64 20 63 68 61 72 20 6f 72 5f 6c  signed char or_l
106a0 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c  ogic[] = { 0, 1,
106b0 20 32 2c 20 31 2c 20 31 2c 20 31 2c 20 32 2c 20   2, 1, 1, 1, 2, 
106c0 31 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d  1, 2 };.    v1 =
106d0 20 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76   or_logic[v1*3+v
106e0 32 5d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d  2];.  }.  pOut =
106f0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
10700 0a 20 20 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a  .  if( v1==2 ){.
10710 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
10720 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c  ag(pOut, MEM_Nul
10730 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  l);.  }else{.   
10740 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b   pOut->u.i = v1;
10750 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
10760 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
10770 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  t);.  }.  break;
10780 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
10790 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ot P1 P2 * * *.*
107a0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
107b0 5d 3d 20 21 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  ]= !r[P1].**.** 
107c0 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 76 61  Interpret the va
107d0 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
107e0 50 31 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20  P1 as a boolean 
107f0 76 61 6c 75 65 2e 20 20 53 74 6f 72 65 20 74 68  value.  Store th
10800 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d  e.** boolean com
10810 70 6c 65 6d 65 6e 74 20 69 6e 20 72 65 67 69 73  plement in regis
10820 74 65 72 20 50 32 2e 20 20 49 66 20 74 68 65 20  ter P2.  If the 
10830 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
10840 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c  r P1 is .** NULL
10850 2c 20 74 68 65 6e 20 61 20 4e 55 4c 4c 20 69 73  , then a NULL is
10860 20 73 74 6f 72 65 64 20 69 6e 20 50 32 2e 0a 2a   stored in P2..*
10870 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b  /.case OP_Not: {
10880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10890 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f  /* same as TK_NO
108a0 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a  T, in1, out2 */.
108b0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
108c0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Op->p1];.  pOut 
108d0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
108e0 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  ;.  if( pIn1->fl
108f0 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
10900 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
10910 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
10920 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
10930 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
10940 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 21 73 71  tInt64(pOut, !sq
10950 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
10960 65 28 70 49 6e 31 29 29 3b 0a 20 20 7d 0a 20 20  e(pIn1));.  }.  
10970 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
10980 6f 64 65 3a 20 42 69 74 4e 6f 74 20 50 31 20 50  ode: BitNot P1 P
10990 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
109a0 73 69 73 3a 20 72 5b 50 31 5d 3d 20 7e 72 5b 50  sis: r[P1]= ~r[P
109b0 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  1].**.** Interpr
109c0 65 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  et the content o
109d0 66 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73  f register P1 as
109e0 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 53 74   an integer.  St
109f0 6f 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d  ore the.** ones-
10a00 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68  complement of th
10a10 65 20 50 31 20 76 61 6c 75 65 20 69 6e 74 6f 20  e P1 value into 
10a20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66  register P2.  If
10a30 20 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e   P1 holds.** a N
10a40 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 61  ULL then store a
10a50 20 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a   NULL in P2..*/.
10a60 63 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20  case OP_BitNot: 
10a70 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
10a80 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e   same as TK_BITN
10a90 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f  OT, in1, out2 */
10aa0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
10ab0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74  pOp->p1];.  pOut
10ac0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
10ad0 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
10ae0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
10af0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
10b00 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
10b10 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  t);.  }else{.   
10b20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
10b30 65 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 7e 73  etInt64(pOut, ~s
10b40 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
10b50 75 65 28 70 49 6e 31 29 29 3b 0a 20 20 7d 0a 20  ue(pIn1));.  }. 
10b60 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
10b70 63 6f 64 65 3a 20 4f 6e 63 65 20 50 31 20 50 32  code: Once P1 P2
10b80 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65   * * *.**.** Che
10b90 63 6b 20 74 68 65 20 22 6f 6e 63 65 22 20 66 6c  ck the "once" fl
10ba0 61 67 20 6e 75 6d 62 65 72 20 50 31 2e 20 49 66  ag number P1. If
10bb0 20 69 74 20 69 73 20 73 65 74 2c 20 6a 75 6d 70   it is set, jump
10bc0 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
10bd0 50 32 2e 20 0a 2a 2a 20 4f 74 68 65 72 77 69 73  P2. .** Otherwis
10be0 65 2c 20 73 65 74 20 74 68 65 20 66 6c 61 67 20  e, set the flag 
10bf0 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  and fall through
10c00 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
10c10 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 20 49 6e 20  truction..** In 
10c20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 69  other words, thi
10c30 73 20 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20  s opcode causes 
10c40 61 6c 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 70  all following op
10c50 63 6f 64 65 73 20 75 70 20 74 68 72 6f 75 67 68  codes up through
10c60 20 50 32 0a 2a 2a 20 28 62 75 74 20 6e 6f 74 20   P2.** (but not 
10c70 69 6e 63 6c 75 64 69 6e 67 20 50 32 29 20 74 6f  including P2) to
10c80 20 72 75 6e 20 6a 75 73 74 20 6f 6e 63 65 20 61   run just once a
10c90 6e 64 20 74 6f 20 62 65 20 73 6b 69 70 70 65 64  nd to be skipped
10ca0 20 6f 6e 20 73 75 62 73 65 71 75 65 6e 74 0a 2a   on subsequent.*
10cb0 2a 20 74 69 6d 65 73 20 74 68 72 6f 75 67 68 20  * times through 
10cc0 74 68 65 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20  the loop..**.** 
10cd0 41 6c 6c 20 22 6f 6e 63 65 22 20 66 6c 61 67 73  All "once" flags
10ce0 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 63   are initially c
10cf0 6c 65 61 72 65 64 20 77 68 65 6e 65 76 65 72 20  leared whenever 
10d00 61 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  a prepared state
10d10 6d 65 6e 74 0a 2a 2a 20 66 69 72 73 74 20 62 65  ment.** first be
10d20 67 69 6e 73 20 74 6f 20 72 75 6e 2e 0a 2a 2f 0a  gins to run..*/.
10d30 63 61 73 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20  case OP_Once: { 
10d40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
10d50 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ump */.  assert(
10d60 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 4f 6e 63   pOp->p1<p->nOnc
10d70 65 46 6c 61 67 20 29 3b 0a 20 20 56 64 62 65 42  eFlag );.  VdbeB
10d80 72 61 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 61 4f  ranchTaken(p->aO
10d90 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d  nceFlag[pOp->p1]
10da0 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70  !=0, 2);.  if( p
10db0 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d  ->aOnceFlag[pOp-
10dc0 3e 70 31 5d 20 29 7b 0a 20 20 20 20 70 63 20 3d  >p1] ){.    pc =
10dd0 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65   pOp->p2-1;.  }e
10de0 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 61 4f 6e 63  lse{.    p->aOnc
10df0 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 3d  eFlag[pOp->p1] =
10e00 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
10e10 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
10e20 66 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  f P1 P2 P3 * *.*
10e30 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20  *.** Jump to P2 
10e40 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  if the value in 
10e50 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 74  register P1 is t
10e60 72 75 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a  rue.  The value.
10e70 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  ** is considered
10e80 20 74 72 75 65 20 69 66 20 69 74 20 69 73 20 6e   true if it is n
10e90 75 6d 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a  umeric and non-z
10ea0 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c  ero.  If the val
10eb0 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e  ue.** in P1 is N
10ec0 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68  ULL then take th
10ed0 65 20 6a 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e  e jump if and on
10ee0 6c 79 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d  ly if P3 is non-
10ef0 7a 65 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  zero..*/./* Opco
10f00 64 65 3a 20 49 66 4e 6f 74 20 50 31 20 50 32 20  de: IfNot P1 P2 
10f10 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d  P3 * *.**.** Jum
10f20 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76  p to P2 if the v
10f30 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
10f40 20 50 31 20 69 73 20 46 61 6c 73 65 2e 20 20 54   P1 is False.  T
10f50 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63  he value.** is c
10f60 6f 6e 73 69 64 65 72 65 64 20 66 61 6c 73 65 20  onsidered false 
10f70 69 66 20 69 74 20 68 61 73 20 61 20 6e 75 6d 65  if it has a nume
10f80 72 69 63 20 76 61 6c 75 65 20 6f 66 20 7a 65 72  ric value of zer
10f90 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  o.  If the value
10fa0 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c  .** in P1 is NUL
10fb0 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  L then take the 
10fc0 6a 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79  jump if and only
10fd0 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65   if P3 is non-ze
10fe0 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ro..*/.case OP_I
10ff0 66 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  f:              
11000 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
11010 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74  */.case OP_IfNot
11020 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
11030 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
11040 20 69 6e 74 20 63 3b 0a 20 20 70 49 6e 31 20 3d   int c;.  pIn1 =
11050 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
11060 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
11070 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
11080 0a 20 20 20 20 63 20 3d 20 70 4f 70 2d 3e 70 33  .    c = pOp->p3
11090 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23 69 66 64 65  ;.  }else{.#ifde
110a0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
110b0 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20  OATING_POINT.   
110c0 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65   c = sqlite3Vdbe
110d0 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d  IntValue(pIn1)!=
110e0 30 3b 0a 23 65 6c 73 65 0a 20 20 20 20 63 20 3d  0;.#else.    c =
110f0 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c   sqlite3VdbeReal
11100 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 2e 30  Value(pIn1)!=0.0
11110 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28  ;.#endif.    if(
11120 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
11130 5f 49 66 4e 6f 74 20 29 20 63 20 3d 20 21 63 3b  _IfNot ) c = !c;
11140 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63  .  }.  VdbeBranc
11150 68 54 61 6b 65 6e 28 63 21 3d 30 2c 20 32 29 3b  hTaken(c!=0, 2);
11160 0a 20 20 69 66 28 20 63 20 29 7b 0a 20 20 20 20  .  if( c ){.    
11170 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a  pc = pOp->p2-1;.
11180 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
11190 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c  /* Opcode: IsNul
111a0 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  l P1 P2 * * *.**
111b0 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 66 20 72   Synopsis:  if r
111c0 5b 50 31 5d 3d 3d 4e 55 4c 4c 20 67 6f 74 6f 20  [P1]==NULL goto 
111d0 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f  P2.**.** Jump to
111e0 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65   P2 if the value
111f0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
11200 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  is NULL..*/.case
11210 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20   OP_IsNull: {   
11220 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
11230 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a   as TK_ISNULL, j
11240 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
11250 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
11260 70 31 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  p1];.  VdbeBranc
11270 68 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66  hTaken( (pIn1->f
11280 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
11290 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28  !=0, 2);.  if( (
112a0 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
112b0 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20  M_Null)!=0 ){.  
112c0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
112d0 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
112e0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
112f0 6f 74 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a  otNull P1 P2 * *
11300 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
11310 69 66 20 72 5b 50 31 5d 21 3d 4e 55 4c 4c 20 67  if r[P1]!=NULL g
11320 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d  oto P2.**.** Jum
11330 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76  p to P2 if the v
11340 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
11350 20 50 31 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e   P1 is not NULL.
11360 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f    .*/.case OP_No
11370 74 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20  tNull: {        
11380 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
11390 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c  K_NOTNULL, jump,
113a0 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
113b0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
113c0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
113d0 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  en( (pIn1->flags
113e0 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 2c   & MEM_Null)==0,
113f0 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31   2);.  if( (pIn1
11400 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
11410 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63  ll)==0 ){.    pc
11420 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
11430 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
11440 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d  /* Opcode: Colum
11450 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  n P1 P2 P3 P4 P5
11460 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
11470 5b 50 33 5d 3d 50 58 0a 2a 2a 0a 2a 2a 20 49 6e  [P3]=PX.**.** In
11480 74 65 72 70 72 65 74 20 74 68 65 20 64 61 74 61  terpret the data
11490 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20   that cursor P1 
114a0 70 6f 69 6e 74 73 20 74 6f 20 61 73 20 61 20 73  points to as a s
114b0 74 72 75 63 74 75 72 65 20 62 75 69 6c 74 20 75  tructure built u
114c0 73 69 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65  sing.** the Make
114d0 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69  Record instructi
114e0 6f 6e 2e 20 20 28 53 65 65 20 74 68 65 20 4d 61  on.  (See the Ma
114f0 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20  keRecord opcode 
11500 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a  for additional.*
11510 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * information ab
11520 6f 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f  out the format o
11530 66 20 74 68 65 20 64 61 74 61 2e 29 20 20 45 78  f the data.)  Ex
11540 74 72 61 63 74 20 74 68 65 20 50 32 2d 74 68 20  tract the P2-th 
11550 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74  column.** from t
11560 68 69 73 20 72 65 63 6f 72 64 2e 20 20 49 66 20  his record.  If 
11570 74 68 65 72 65 20 61 72 65 20 6c 65 73 73 20 74  there are less t
11580 68 61 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76  hat (P2+1) .** v
11590 61 6c 75 65 73 20 69 6e 20 74 68 65 20 72 65 63  alues in the rec
115a0 6f 72 64 2c 20 65 78 74 72 61 63 74 20 61 20 4e  ord, extract a N
115b0 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76  ULL..**.** The v
115c0 61 6c 75 65 20 65 78 74 72 61 63 74 65 64 20 69  alue extracted i
115d0 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
115e0 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49  ster P3..**.** I
115f0 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e  f the column con
11600 74 61 69 6e 73 20 66 65 77 65 72 20 74 68 61 6e  tains fewer than
11610 20 50 32 20 66 69 65 6c 64 73 2c 20 74 68 65 6e   P2 fields, then
11620 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e   extract a NULL.
11630 20 20 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20    Or,.** if the 
11640 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61  P4 argument is a
11650 20 50 34 5f 4d 45 4d 20 75 73 65 20 74 68 65 20   P4_MEM use the 
11660 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 34 20  value of the P4 
11670 61 72 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74  argument as.** t
11680 68 65 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a  he result..**.**
11690 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 43   If the OPFLAG_C
116a0 4c 45 41 52 43 41 43 48 45 20 62 69 74 20 69 73  LEARCACHE bit is
116b0 20 73 65 74 20 6f 6e 20 50 35 20 61 6e 64 20 50   set on P5 and P
116c0 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d 74 61  1 is a pseudo-ta
116d0 62 6c 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74  ble cursor,.** t
116e0 68 65 6e 20 74 68 65 20 63 61 63 68 65 20 6f 66  hen the cache of
116f0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 72   the cursor is r
11700 65 73 65 74 20 70 72 69 6f 72 20 74 6f 20 65 78  eset prior to ex
11710 74 72 61 63 74 69 6e 67 20 74 68 65 20 63 6f 6c  tracting the col
11720 75 6d 6e 2e 0a 2a 2a 20 54 68 65 20 66 69 72 73  umn..** The firs
11730 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20 61 67 61 69  t OP_Column agai
11740 6e 73 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  nst a pseudo-tab
11750 6c 65 20 61 66 74 65 72 20 74 68 65 20 76 61 6c  le after the val
11760 75 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e  ue of the conten
11770 74 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 68 61  t.** register ha
11780 73 20 63 68 61 6e 67 65 64 20 73 68 6f 75 6c 64  s changed should
11790 20 68 61 76 65 20 74 68 69 73 20 62 69 74 20 73   have this bit s
117a0 65 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  et..**.** If the
117b0 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52   OPFLAG_LENGTHAR
117c0 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50  G and OPFLAG_TYP
117d0 45 4f 46 41 52 47 20 62 69 74 73 20 61 72 65 20  EOFARG bits are 
117e0 73 65 74 20 6f 6e 20 50 35 20 77 68 65 6e 0a 2a  set on P5 when.*
117f0 2a 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  * the result is 
11800 67 75 61 72 61 6e 74 65 65 64 20 74 6f 20 6f 6e  guaranteed to on
11810 6c 79 20 62 65 20 75 73 65 64 20 61 73 20 74 68  ly be used as th
11820 65 20 61 72 67 75 6d 65 6e 74 20 6f 66 20 61 20  e argument of a 
11830 6c 65 6e 67 74 68 28 29 0a 2a 2a 20 6f 72 20 74  length().** or t
11840 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e  ypeof() function
11850 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
11860 20 54 68 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20   The loading of 
11870 6c 61 72 67 65 20 62 6c 6f 62 73 20 63 61 6e 20  large blobs can 
11880 62 65 0a 2a 2a 20 73 6b 69 70 70 65 64 20 66 6f  be.** skipped fo
11890 72 20 6c 65 6e 67 74 68 28 29 20 61 6e 64 20 61  r length() and a
118a0 6c 6c 20 63 6f 6e 74 65 6e 74 20 6c 6f 61 64 69  ll content loadi
118b0 6e 67 20 63 61 6e 20 62 65 20 73 6b 69 70 70 65  ng can be skippe
118c0 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29 2e 0a  d for typeof()..
118d0 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d  */.case OP_Colum
118e0 6e 3a 20 7b 0a 20 20 69 36 34 20 70 61 79 6c 6f  n: {.  i64 paylo
118f0 61 64 53 69 7a 65 36 34 3b 20 2f 2a 20 4e 75 6d  adSize64; /* Num
11900 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
11910 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
11920 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20 20  int p2;         
11930 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d     /* column num
11940 62 65 72 20 74 6f 20 72 65 74 72 69 65 76 65 20  ber to retrieve 
11950 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
11960 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68 65 20 56  *pC;    /* The V
11970 44 42 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20  DBE cursor */.  
11980 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
11990 20 20 20 2f 2a 20 54 68 65 20 42 54 72 65 65 20     /* The BTree 
119a0 63 75 72 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20  cursor */.  u32 
119b0 2a 61 54 79 70 65 3b 20 20 20 20 20 20 20 20 2f  *aType;        /
119c0 2a 20 61 54 79 70 65 5b 69 5d 20 68 6f 6c 64 73  * aType[i] holds
119d0 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70   the numeric typ
119e0 65 20 6f 66 20 74 68 65 20 69 2d 74 68 20 63 6f  e of the i-th co
119f0 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 2a 61  lumn */.  u32 *a
11a00 4f 66 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20  Offset;      /* 
11a10 61 4f 66 66 73 65 74 5b 69 5d 20 69 73 20 6f 66  aOffset[i] is of
11a20 66 73 65 74 20 74 6f 20 73 74 61 72 74 20 6f 66  fset to start of
11a30 20 64 61 74 61 20 66 6f 72 20 69 2d 74 68 20 63   data for i-th c
11a40 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c  olumn */.  int l
11a50 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  en;           /*
11a60 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74   The length of t
11a70 68 65 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61  he serialized da
11a80 74 61 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  ta for the colum
11a90 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20  n */.  int i;   
11aa0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
11ab0 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4d  p counter */.  M
11ac0 65 6d 20 2a 70 44 65 73 74 3b 20 20 20 20 20 20  em *pDest;      
11ad0 20 20 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72    /* Where to wr
11ae0 69 74 65 20 74 68 65 20 65 78 74 72 61 63 74 65  ite the extracte
11af0 64 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d  d value */.  Mem
11b00 20 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   sMem;          
11b10 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74  /* For storing t
11b20 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20  he record being 
11b30 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e  decoded */.  con
11b40 73 74 20 75 38 20 2a 7a 44 61 74 61 3b 20 20 20  st u8 *zData;   
11b50 2f 2a 20 50 61 72 74 20 6f 66 20 74 68 65 20 72  /* Part of the r
11b60 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f  ecord being deco
11b70 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75  ded */.  const u
11b80 38 20 2a 7a 48 64 72 3b 20 20 20 20 2f 2a 20 4e  8 *zHdr;    /* N
11b90 65 78 74 20 75 6e 70 61 72 73 65 64 20 62 79 74  ext unparsed byt
11ba0 65 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20  e of the header 
11bb0 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a  */.  const u8 *z
11bc0 45 6e 64 48 64 72 3b 20 2f 2a 20 50 6f 69 6e 74  EndHdr; /* Point
11bd0 65 72 20 74 6f 20 66 69 72 73 74 20 62 79 74 65  er to first byte
11be0 20 61 66 74 65 72 20 74 68 65 20 68 65 61 64 65   after the heade
11bf0 72 20 2a 2f 0a 20 20 75 33 32 20 6f 66 66 73 65  r */.  u32 offse
11c00 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 66  t;        /* Off
11c10 73 65 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74  set into the dat
11c20 61 20 2a 2f 0a 20 20 75 33 32 20 73 7a 46 69 65  a */.  u32 szFie
11c30 6c 64 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ld;       /* Num
11c40 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
11c50 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61  the content of a
11c60 20 66 69 65 6c 64 20 2a 2f 0a 20 20 75 33 32 20   field */.  u32 
11c70 61 76 61 69 6c 3b 20 20 20 20 20 20 20 20 20 2f  avail;         /
11c80 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
11c90 73 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 64  s of available d
11ca0 61 74 61 20 2a 2f 0a 20 20 75 33 32 20 74 3b 20  ata */.  u32 t; 
11cb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
11cc0 20 74 79 70 65 20 63 6f 64 65 20 66 72 6f 6d 20   type code from 
11cd0 74 68 65 20 72 65 63 6f 72 64 20 68 65 61 64 65  the record heade
11ce0 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 67  r */.  Mem *pReg
11cf0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50 73 65  ;         /* Pse
11d00 75 64 6f 54 61 62 6c 65 20 69 6e 70 75 74 20 72  udoTable input r
11d10 65 67 69 73 74 65 72 20 2a 2f 0a 0a 20 20 70 32  egister */..  p2
11d20 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73   = pOp->p2;.  as
11d30 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
11d40 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  && pOp->p3<=(p->
11d50 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
11d60 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61   );.  pDest = &a
11d70 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
11d80 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
11d90 28 70 2c 20 70 44 65 73 74 29 3b 0a 20 20 61 73  (p, pDest);.  as
11da0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
11db0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
11dc0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
11dd0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
11de0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
11df0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
11e00 20 70 32 3c 70 43 2d 3e 6e 46 69 65 6c 64 20 29   p2<pC->nField )
11e10 3b 0a 20 20 61 54 79 70 65 20 3d 20 70 43 2d 3e  ;.  aType = pC->
11e20 61 54 79 70 65 3b 0a 20 20 61 4f 66 66 73 65 74  aType;.  aOffset
11e30 20 3d 20 61 54 79 70 65 20 2b 20 70 43 2d 3e 6e   = aType + pC->n
11e40 46 69 65 6c 64 3b 0a 23 69 66 6e 64 65 66 20 53  Field;.#ifndef S
11e50 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
11e60 41 4c 54 41 42 4c 45 0a 20 20 61 73 73 65 72 74  ALTABLE.  assert
11e70 28 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f  ( pC->pVtabCurso
11e80 72 3d 3d 30 20 29 3b 20 2f 2a 20 4f 50 5f 43 6f  r==0 ); /* OP_Co
11e90 6c 75 6d 6e 20 6e 65 76 65 72 20 63 61 6c 6c 65  lumn never calle
11ea0 64 20 6f 6e 20 76 69 72 74 75 61 6c 20 74 61 62  d on virtual tab
11eb0 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 70  le */.#endif.  p
11ec0 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
11ed0 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  or;.  assert( pC
11ee0 72 73 72 21 3d 30 20 7c 7c 20 70 43 2d 3e 70 73  rsr!=0 || pC->ps
11ef0 65 75 64 6f 54 61 62 6c 65 52 65 67 3e 30 20 29  eudoTableReg>0 )
11f00 3b 20 2f 2a 20 70 43 72 73 72 20 4e 55 4c 4c 20  ; /* pCrsr NULL 
11f10 6f 6e 20 50 73 65 75 64 6f 54 61 62 6c 65 73 20  on PseudoTables 
11f20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43 72  */.  assert( pCr
11f30 73 72 21 3d 30 20 7c 7c 20 70 43 2d 3e 6e 75 6c  sr!=0 || pC->nul
11f40 6c 52 6f 77 20 29 3b 20 20 20 20 20 20 20 20 20  lRow );         
11f50 20 2f 2a 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20   /* pC->nullRow 
11f60 6f 6e 20 50 73 65 75 64 6f 54 61 62 6c 65 73 20  on PseudoTables 
11f70 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  */..  /* If the 
11f80 63 75 72 73 6f 72 20 63 61 63 68 65 20 69 73 20  cursor cache is 
11f90 73 74 61 6c 65 2c 20 62 72 69 6e 67 20 69 74 20  stale, bring it 
11fa0 75 70 2d 74 6f 2d 64 61 74 65 20 2a 2f 0a 20 20  up-to-date */.  
11fb0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
11fc0 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29  CursorMoveto(pC)
11fd0 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
11fe0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
11ff0 72 72 6f 72 3b 0a 20 20 69 66 28 20 70 43 2d 3e  rror;.  if( pC->
12000 63 61 63 68 65 53 74 61 74 75 73 21 3d 70 2d 3e  cacheStatus!=p->
12010 63 61 63 68 65 43 74 72 20 7c 7c 20 28 70 4f 70  cacheCtr || (pOp
12020 2d 3e 70 35 26 4f 50 46 4c 41 47 5f 43 4c 45 41  ->p5&OPFLAG_CLEA
12030 52 43 41 43 48 45 29 21 3d 30 20 29 7b 0a 20 20  RCACHE)!=0 ){.  
12040 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f    if( pC->nullRo
12050 77 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70  w ){.      if( p
12060 43 72 73 72 3d 3d 30 20 29 7b 0a 20 20 20 20 20  Crsr==0 ){.     
12070 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70     assert( pC->p
12080 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3e 30 20  seudoTableReg>0 
12090 29 3b 0a 20 20 20 20 20 20 20 20 70 52 65 67 20  );.        pReg 
120a0 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e 70 73 65 75  = &aMem[pC->pseu
120b0 64 6f 54 61 62 6c 65 52 65 67 5d 3b 0a 20 20 20  doTableReg];.   
120c0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 52 65       assert( pRe
120d0 67 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  g->flags & MEM_B
120e0 6c 6f 62 20 29 3b 0a 20 20 20 20 20 20 20 20 61  lob );.        a
120f0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
12100 64 28 70 52 65 67 29 20 29 3b 0a 20 20 20 20 20  d(pReg) );.     
12110 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69     pC->payloadSi
12120 7a 65 20 3d 20 70 43 2d 3e 73 7a 52 6f 77 20 3d  ze = pC->szRow =
12130 20 61 76 61 69 6c 20 3d 20 70 52 65 67 2d 3e 6e   avail = pReg->n
12140 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52  ;.        pC->aR
12150 6f 77 20 3d 20 28 75 38 2a 29 70 52 65 67 2d 3e  ow = (u8*)pReg->
12160 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  z;.      }else{.
12170 20 20 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79          MemSetTy
12180 70 65 46 6c 61 67 28 70 44 65 73 74 2c 20 4d 45  peFlag(pDest, ME
12190 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20  M_Null);.       
121a0 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
121b0 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  out;.      }.   
121c0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73   }else{.      as
121d0 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20  sert( pCrsr );. 
121e0 20 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73 54       if( pC->isT
121f0 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20  able==0 ){.     
12200 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
12210 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56  e3BtreeCursorIsV
12220 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20  alid(pCrsr) );. 
12230 20 20 20 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28         VVA_ONLY(
12240 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72  rc =) sqlite3Btr
12250 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73 72 2c  eeKeySize(pCrsr,
12260 20 26 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 29   &payloadSize64)
12270 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
12280 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
12290 29 3b 20 2f 2a 20 54 72 75 65 20 62 65 63 61 75  ); /* True becau
122a0 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65  se of CursorMove
122b0 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 20  to() call above 
122c0 2a 2f 0a 20 20 20 20 20 20 20 20 2f 2a 20 73 71  */.        /* sq
122d0 6c 69 74 65 33 42 74 72 65 65 50 61 72 73 65 43  lite3BtreeParseC
122e0 65 6c 6c 50 74 72 28 29 20 75 73 65 73 20 67 65  ellPtr() uses ge
122f0 74 56 61 72 69 6e 74 33 32 28 29 20 74 6f 20 65  tVarint32() to e
12300 78 74 72 61 63 74 20 74 68 65 0a 20 20 20 20 20  xtract the.     
12310 20 20 20 2a 2a 20 70 61 79 6c 6f 61 64 20 73 69     ** payload si
12320 7a 65 2c 20 73 6f 20 69 74 20 69 73 20 69 6d 70  ze, so it is imp
12330 6f 73 73 69 62 6c 65 20 66 6f 72 20 70 61 79 6c  ossible for payl
12340 6f 61 64 53 69 7a 65 36 34 20 74 6f 20 62 65 0a  oadSize64 to be.
12350 20 20 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65          ** large
12360 72 20 74 68 61 6e 20 33 32 20 62 69 74 73 2e 20  r than 32 bits. 
12370 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  */.        asser
12380 74 28 20 28 70 61 79 6c 6f 61 64 53 69 7a 65 36  t( (payloadSize6
12390 34 20 26 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55  4 & SQLITE_MAX_U
123a0 33 32 29 3d 3d 28 75 36 34 29 70 61 79 6c 6f 61  32)==(u64)payloa
123b0 64 53 69 7a 65 36 34 20 29 3b 0a 20 20 20 20 20  dSize64 );.     
123c0 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71     pC->aRow = sq
123d0 6c 69 74 65 33 42 74 72 65 65 4b 65 79 46 65 74  lite3BtreeKeyFet
123e0 63 68 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c  ch(pCrsr, &avail
123f0 29 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70  );.        pC->p
12400 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 28 75 33  ayloadSize = (u3
12410 32 29 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b  2)payloadSize64;
12420 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
12430 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
12440 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
12450 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29  IsValid(pCrsr) )
12460 3b 0a 20 20 20 20 20 20 20 20 56 56 41 5f 4f 4e  ;.        VVA_ON
12470 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33  LY(rc =) sqlite3
12480 42 74 72 65 65 44 61 74 61 53 69 7a 65 28 70 43  BtreeDataSize(pC
12490 72 73 72 2c 20 26 70 43 2d 3e 70 61 79 6c 6f 61  rsr, &pC->payloa
124a0 64 53 69 7a 65 29 3b 0a 20 20 20 20 20 20 20 20  dSize);.        
124b0 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
124c0 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 44 61  TE_OK );   /* Da
124d0 74 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20  taSize() cannot 
124e0 66 61 69 6c 20 2a 2f 0a 20 20 20 20 20 20 20 20  fail */.        
124f0 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71 6c 69 74  pC->aRow = sqlit
12500 65 33 42 74 72 65 65 44 61 74 61 46 65 74 63 68  e3BtreeDataFetch
12510 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b  (pCrsr, &avail);
12520 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61  .      }.      a
12530 73 73 65 72 74 28 20 61 76 61 69 6c 3c 3d 36 35  ssert( avail<=65
12540 35 33 36 20 29 3b 20 20 2f 2a 20 4d 61 78 69 6d  536 );  /* Maxim
12550 75 6d 20 70 61 67 65 20 73 69 7a 65 20 69 73 20  um page size is 
12560 36 34 4b 69 42 20 2a 2f 0a 20 20 20 20 20 20 69  64KiB */.      i
12570 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69  f( pC->payloadSi
12580 7a 65 20 3c 3d 20 28 75 33 32 29 61 76 61 69 6c  ze <= (u32)avail
12590 20 29 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e   ){.        pC->
125a0 73 7a 52 6f 77 20 3d 20 70 43 2d 3e 70 61 79 6c  szRow = pC->payl
125b0 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20 20 20 7d  oadSize;.      }
125c0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 43  else{.        pC
125d0 2d 3e 73 7a 52 6f 77 20 3d 20 61 76 61 69 6c 3b  ->szRow = avail;
125e0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
125f0 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69  f( pC->payloadSi
12600 7a 65 20 3e 20 28 75 33 32 29 64 62 2d 3e 61 4c  ze > (u32)db->aL
12610 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
12620 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
12630 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69       goto too_bi
12640 67 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  g;.      }.    }
12650 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
12660 61 74 75 73 20 3d 20 70 2d 3e 63 61 63 68 65 43  atus = p->cacheC
12670 74 72 3b 0a 20 20 20 20 70 43 2d 3e 69 48 64 72  tr;.    pC->iHdr
12680 4f 66 66 73 65 74 20 3d 20 67 65 74 56 61 72 69  Offset = getVari
12690 6e 74 33 32 28 70 43 2d 3e 61 52 6f 77 2c 20 6f  nt32(pC->aRow, o
126a0 66 66 73 65 74 29 3b 0a 20 20 20 20 70 43 2d 3e  ffset);.    pC->
126b0 6e 48 64 72 50 61 72 73 65 64 20 3d 20 30 3b 0a  nHdrParsed = 0;.
126c0 20 20 20 20 61 4f 66 66 73 65 74 5b 30 5d 20 3d      aOffset[0] =
126d0 20 6f 66 66 73 65 74 3b 0a 20 20 20 20 69 66 28   offset;.    if(
126e0 20 61 76 61 69 6c 3c 6f 66 66 73 65 74 20 29 7b   avail<offset ){
126f0 0a 20 20 20 20 20 20 2f 2a 20 70 43 2d 3e 61 52  .      /* pC->aR
12700 6f 77 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65  ow does not have
12710 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 65 6e 74   to hold the ent
12720 69 72 65 20 72 6f 77 2c 20 62 75 74 20 69 74 20  ire row, but it 
12730 64 6f 65 73 20 61 74 20 6c 65 61 73 74 0a 20 20  does at least.  
12740 20 20 20 20 2a 2a 20 6e 65 65 64 20 74 6f 20 63      ** need to c
12750 6f 76 65 72 20 74 68 65 20 68 65 61 64 65 72 20  over the header 
12760 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2e 20 20  of the record.  
12770 49 66 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73  If pC->aRow does
12780 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 0a 20 20 20   not contain.   
12790 20 20 20 2a 2a 20 74 68 65 20 63 6f 6d 70 6c 65     ** the comple
127a0 74 65 20 68 65 61 64 65 72 2c 20 74 68 65 6e 20  te header, then 
127b0 73 65 74 20 69 74 20 74 6f 20 7a 65 72 6f 2c 20  set it to zero, 
127c0 66 6f 72 63 69 6e 67 20 74 68 65 20 68 65 61 64  forcing the head
127d0 65 72 20 74 6f 20 62 65 0a 20 20 20 20 20 20 2a  er to be.      *
127e0 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  * dynamically al
127f0 6c 6f 63 61 74 65 64 2e 20 2a 2f 0a 20 20 20 20  located. */.    
12800 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a    pC->aRow = 0;.
12810 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20        pC->szRow 
12820 3d 20 30 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  = 0;.    }..    
12830 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 20 63  /* Make sure a c
12840 6f 72 72 75 70 74 20 64 61 74 61 62 61 73 65 20  orrupt database 
12850 68 61 73 20 6e 6f 74 20 67 69 76 65 6e 20 75 73  has not given us
12860 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 68 65 61   an oversize hea
12870 64 65 72 2e 0a 20 20 20 20 2a 2a 20 44 6f 20 74  der..    ** Do t
12880 68 69 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64  his now to avoid
12890 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d   an oversize mem
128a0 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a  ory allocation..
128b0 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 79      **.    ** Ty
128c0 70 65 20 65 6e 74 72 69 65 73 20 63 61 6e 20 62  pe entries can b
128d0 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20  e between 1 and 
128e0 35 20 62 79 74 65 73 20 65 61 63 68 2e 20 20 42  5 bytes each.  B
128f0 75 74 20 34 20 61 6e 64 20 35 20 62 79 74 65 0a  ut 4 and 5 byte.
12900 20 20 20 20 2a 2a 20 74 79 70 65 73 20 75 73 65      ** types use
12910 20 73 6f 20 6d 75 63 68 20 64 61 74 61 20 73 70   so much data sp
12920 61 63 65 20 74 68 61 74 20 74 68 65 72 65 20 63  ace that there c
12930 61 6e 20 6f 6e 6c 79 20 62 65 20 34 30 39 36 20  an only be 4096 
12940 61 6e 64 20 33 32 20 6f 66 0a 20 20 20 20 2a 2a  and 32 of.    **
12950 20 74 68 65 6d 2c 20 72 65 73 70 65 63 74 69 76   them, respectiv
12960 65 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d 61 78  ely.  So the max
12970 69 6d 75 6d 20 68 65 61 64 65 72 20 6c 65 6e 67  imum header leng
12980 74 68 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20  th results from 
12990 61 0a 20 20 20 20 2a 2a 20 33 2d 62 79 74 65 20  a.    ** 3-byte 
129a0 74 79 70 65 20 66 6f 72 20 65 61 63 68 20 6f 66  type for each of
129b0 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20   the maximum of 
129c0 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c  32768 columns pl
129d0 75 73 20 74 68 72 65 65 0a 20 20 20 20 2a 2a 20  us three.    ** 
129e0 65 78 74 72 61 20 62 79 74 65 73 20 66 6f 72 20  extra bytes for 
129f0 74 68 65 20 68 65 61 64 65 72 20 6c 65 6e 67 74  the header lengt
12a00 68 20 69 74 73 65 6c 66 2e 20 20 33 32 37 36 38  h itself.  32768
12a10 2a 33 20 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a  *3 + 3 = 98307..
12a20 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 6f      */.    if( o
12a30 66 66 73 65 74 20 3e 20 39 38 33 30 37 20 7c 7c  ffset > 98307 ||
12a40 20 6f 66 66 73 65 74 20 3e 20 70 43 2d 3e 70 61   offset > pC->pa
12a50 79 6c 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20 20  yloadSize ){.   
12a60 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43     rc = SQLITE_C
12a70 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20  ORRUPT_BKPT;.   
12a80 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d     goto op_colum
12a90 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  n_error;.    }. 
12aa0 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75   }..  /* Make su
12ab0 72 65 20 61 74 20 6c 65 61 73 74 20 74 68 65 20  re at least the 
12ac0 66 69 72 73 74 20 70 32 2b 31 20 65 6e 74 72 69  first p2+1 entri
12ad0 65 73 20 6f 66 20 74 68 65 20 68 65 61 64 65 72  es of the header
12ae0 20 68 61 76 65 20 62 65 65 6e 0a 20 20 2a 2a 20   have been.  ** 
12af0 70 61 72 73 65 64 20 61 6e 64 20 76 61 6c 69 64  parsed and valid
12b00 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
12b10 69 6e 20 61 4f 66 66 73 65 74 5b 5d 20 61 6e 64  in aOffset[] and
12b20 20 61 54 79 70 65 5b 5d 2e 0a 20 20 2a 2f 0a 20   aType[]..  */. 
12b30 20 69 66 28 20 70 43 2d 3e 6e 48 64 72 50 61 72   if( pC->nHdrPar
12b40 73 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20 2f  sed<=p2 ){.    /
12b50 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f  * If there is mo
12b60 72 65 20 68 65 61 64 65 72 20 61 76 61 69 6c 61  re header availa
12b70 62 6c 65 20 66 6f 72 20 70 61 72 73 69 6e 67 20  ble for parsing 
12b80 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20 74  in the record, t
12b90 72 79 0a 20 20 20 20 2a 2a 20 74 6f 20 65 78 74  ry.    ** to ext
12ba0 72 61 63 74 20 61 64 64 69 74 69 6f 6e 61 6c 20  ract additional 
12bb0 66 69 65 6c 64 73 20 75 70 20 74 68 72 6f 75 67  fields up throug
12bc0 68 20 74 68 65 20 70 32 2b 31 2d 74 68 20 66 69  h the p2+1-th fi
12bd0 65 6c 64 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20  eld .    */.    
12be0 69 66 28 20 70 43 2d 3e 69 48 64 72 4f 66 66 73  if( pC->iHdrOffs
12bf0 65 74 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b  et<aOffset[0] ){
12c00 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73  .      /* Make s
12c10 75 72 65 20 7a 44 61 74 61 20 70 6f 69 6e 74 73  ure zData points
12c20 20 74 6f 20 65 6e 6f 75 67 68 20 6f 66 20 74 68   to enough of th
12c30 65 20 72 65 63 6f 72 64 20 74 6f 20 63 6f 76 65  e record to cove
12c40 72 20 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f  r the header. */
12c50 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61  .      if( pC->a
12c60 52 6f 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Row==0 ){.      
12c70 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20    memset(&sMem, 
12c80 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29  0, sizeof(sMem))
12c90 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  ;.        rc = s
12ca0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f  qlite3VdbeMemFro
12cb0 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 30 2c  mBtree(pCrsr, 0,
12cc0 20 61 4f 66 66 73 65 74 5b 30 5d 2c 20 0a 20 20   aOffset[0], .  
12cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12cf0 20 20 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 2c     !pC->isTable,
12d00 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20   &sMem);.       
12d10 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
12d20 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  OK ){.          
12d30 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65  goto op_column_e
12d40 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a  rror;.        }.
12d50 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20          zData = 
12d60 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20  (u8*)sMem.z;.   
12d70 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
12d80 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61 52    zData = pC->aR
12d90 6f 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20  ow;.      }.  . 
12da0 20 20 20 20 20 2f 2a 20 46 69 6c 6c 20 69 6e 20       /* Fill in 
12db0 61 54 79 70 65 5b 69 5d 20 61 6e 64 20 61 4f 66  aType[i] and aOf
12dc0 66 73 65 74 5b 69 5d 20 76 61 6c 75 65 73 20 74  fset[i] values t
12dd0 68 72 6f 75 67 68 20 74 68 65 20 70 32 2d 74 68  hrough the p2-th
12de0 20 66 69 65 6c 64 2e 20 2a 2f 0a 20 20 20 20 20   field. */.     
12df0 20 69 20 3d 20 70 43 2d 3e 6e 48 64 72 50 61 72   i = pC->nHdrPar
12e00 73 65 64 3b 0a 20 20 20 20 20 20 6f 66 66 73 65  sed;.      offse
12e10 74 20 3d 20 61 4f 66 66 73 65 74 5b 69 5d 3b 0a  t = aOffset[i];.
12e20 20 20 20 20 20 20 7a 48 64 72 20 3d 20 7a 44 61        zHdr = zDa
12e30 74 61 20 2b 20 70 43 2d 3e 69 48 64 72 4f 66 66  ta + pC->iHdrOff
12e40 73 65 74 3b 0a 20 20 20 20 20 20 7a 45 6e 64 48  set;.      zEndH
12e50 64 72 20 3d 20 7a 44 61 74 61 20 2b 20 61 4f 66  dr = zData + aOf
12e60 66 73 65 74 5b 30 5d 3b 0a 20 20 20 20 20 20 61  fset[0];.      a
12e70 73 73 65 72 74 28 20 69 3c 3d 70 32 20 26 26 20  ssert( i<=p2 && 
12e80 7a 48 64 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a  zHdr<zEndHdr );.
12e90 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20        do{.      
12ea0 20 20 69 66 28 20 7a 48 64 72 5b 30 5d 3c 30 78    if( zHdr[0]<0x
12eb0 38 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  80 ){.          
12ec0 74 20 3d 20 7a 48 64 72 5b 30 5d 3b 0a 20 20 20  t = zHdr[0];.   
12ed0 20 20 20 20 20 20 20 7a 48 64 72 2b 2b 3b 0a 20         zHdr++;. 
12ee0 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
12ef0 20 20 20 20 20 20 20 20 7a 48 64 72 20 2b 3d 20          zHdr += 
12f00 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
12f10 33 32 28 7a 48 64 72 2c 20 26 74 29 3b 0a 20 20  32(zHdr, &t);.  
12f20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
12f30 61 54 79 70 65 5b 69 5d 20 3d 20 74 3b 0a 20 20  aType[i] = t;.  
12f40 20 20 20 20 20 20 73 7a 46 69 65 6c 64 20 3d 20        szField = 
12f50 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
12f60 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20  lTypeLen(t);.   
12f70 20 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 73       offset += s
12f80 7a 46 69 65 6c 64 3b 0a 20 20 20 20 20 20 20 20  zField;.        
12f90 69 66 28 20 6f 66 66 73 65 74 3c 73 7a 46 69 65  if( offset<szFie
12fa0 6c 64 20 29 7b 20 20 2f 2a 20 54 72 75 65 20 69  ld ){  /* True i
12fb0 66 20 6f 66 66 73 65 74 20 6f 76 65 72 66 6c 6f  f offset overflo
12fc0 77 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  ws */.          
12fd0 7a 48 64 72 20 3d 20 26 7a 45 6e 64 48 64 72 5b  zHdr = &zEndHdr[
12fe0 31 5d 3b 20 20 2f 2a 20 46 6f 72 63 65 73 20 53  1];  /* Forces S
12ff0 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 72 65  QLITE_CORRUPT re
13000 74 75 72 6e 20 62 65 6c 6f 77 20 2a 2f 0a 20 20  turn below */.  
13010 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
13020 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
13030 20 69 2b 2b 3b 0a 20 20 20 20 20 20 20 20 61 4f   i++;.        aO
13040 66 66 73 65 74 5b 69 5d 20 3d 20 6f 66 66 73 65  ffset[i] = offse
13050 74 3b 0a 20 20 20 20 20 20 7d 77 68 69 6c 65 28  t;.      }while(
13060 20 69 3c 3d 70 32 20 26 26 20 7a 48 64 72 3c 7a   i<=p2 && zHdr<z
13070 45 6e 64 48 64 72 20 29 3b 0a 20 20 20 20 20 20  EndHdr );.      
13080 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 3d  pC->nHdrParsed =
13090 20 69 3b 0a 20 20 20 20 20 20 70 43 2d 3e 69 48   i;.      pC->iH
130a0 64 72 4f 66 66 73 65 74 20 3d 20 28 75 33 32 29  drOffset = (u32)
130b0 28 7a 48 64 72 20 2d 20 7a 44 61 74 61 29 3b 0a  (zHdr - zData);.
130c0 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52        if( pC->aR
130d0 6f 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ow==0 ){.       
130e0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
130f0 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20  elease(&sMem);. 
13100 20 20 20 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67         sMem.flag
13110 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
13120 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f      }.  .      /
13130 2a 20 49 66 20 77 65 20 68 61 76 65 20 72 65 61  * If we have rea
13140 64 20 6d 6f 72 65 20 68 65 61 64 65 72 20 64 61  d more header da
13150 74 61 20 74 68 61 6e 20 77 61 73 20 63 6f 6e 74  ta than was cont
13160 61 69 6e 65 64 20 69 6e 20 74 68 65 20 68 65 61  ained in the hea
13170 64 65 72 2c 0a 20 20 20 20 20 20 2a 2a 20 6f 72  der,.      ** or
13180 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66 20 74   if the end of t
13190 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20 61 70  he last field ap
131a0 70 65 61 72 73 20 74 6f 20 62 65 20 70 61 73 74  pears to be past
131b0 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 0a   the end of the.
131c0 20 20 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 2c        ** record,
131d0 20 6f 72 20 69 66 20 74 68 65 20 65 6e 64 20 6f   or if the end o
131e0 66 20 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64  f the last field
131f0 20 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 62   appears to be b
13200 65 66 6f 72 65 20 74 68 65 20 65 6e 64 0a 20 20  efore the end.  
13210 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65      ** of the re
13220 63 6f 72 64 20 28 77 68 65 6e 20 61 6c 6c 20 66  cord (when all f
13230 69 65 6c 64 73 20 70 72 65 73 65 6e 74 29 2c 20  ields present), 
13240 74 68 65 6e 20 77 65 20 6d 75 73 74 20 62 65 20  then we must be 
13250 64 65 61 6c 69 6e 67 20 0a 20 20 20 20 20 20 2a  dealing .      *
13260 2a 20 77 69 74 68 20 61 20 63 6f 72 72 75 70 74  * with a corrupt
13270 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20 20 20   database..     
13280 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28 7a   */.      if( (z
13290 48 64 72 20 3e 20 7a 45 6e 64 48 64 72 29 0a 20  Hdr > zEndHdr). 
132a0 20 20 20 20 20 20 7c 7c 20 28 6f 66 66 73 65 74        || (offset
132b0 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69   > pC->payloadSi
132c0 7a 65 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 7a  ze).       || (z
132d0 48 64 72 3d 3d 7a 45 6e 64 48 64 72 20 26 26 20  Hdr==zEndHdr && 
132e0 6f 66 66 73 65 74 21 3d 70 43 2d 3e 70 61 79 6c  offset!=pC->payl
132f0 6f 61 64 53 69 7a 65 29 0a 20 20 20 20 20 20 29  oadSize).      )
13300 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
13310 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b  QLITE_CORRUPT_BK
13320 50 54 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f  PT;.        goto
13330 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72   op_column_error
13340 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
13350 0a 20 20 20 20 2f 2a 20 49 66 20 61 66 74 65 72  .    /* If after
13360 20 74 72 79 69 6e 67 20 74 6f 20 65 78 74 72 61   trying to extra
13370 20 6e 65 77 20 65 6e 74 72 69 65 73 20 66 72 6f   new entries fro
13380 6d 20 74 68 65 20 68 65 61 64 65 72 2c 20 6e 48  m the header, nH
13390 64 72 50 61 72 73 65 64 20 69 73 0a 20 20 20 20  drParsed is.    
133a0 2a 2a 20 73 74 69 6c 6c 20 6e 6f 74 20 75 70 20  ** still not up 
133b0 74 6f 20 70 32 2c 20 74 68 61 74 20 6d 65 61 6e  to p2, that mean
133c0 73 20 74 68 61 74 20 74 68 65 20 72 65 63 6f 72  s that the recor
133d0 64 20 68 61 73 20 66 65 77 65 72 20 74 68 61 6e  d has fewer than
133e0 20 70 32 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d   p2.    ** colum
133f0 6e 73 2e 20 20 53 6f 20 74 68 65 20 72 65 73 75  ns.  So the resu
13400 6c 74 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65  lt will be eithe
13410 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61  r the default va
13420 6c 75 65 20 6f 72 20 61 20 4e 55 4c 4c 2e 0a 20  lue or a NULL.. 
13430 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 43     */.    if( pC
13440 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32  ->nHdrParsed<=p2
13450 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f   ){.      if( pO
13460 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45  p->p4type==P4_ME
13470 4d 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  M ){.        sql
13480 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
13490 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20 70 4f  owCopy(pDest, pO
134a0 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f  p->p4.pMem, MEM_
134b0 53 74 61 74 69 63 29 3b 0a 20 20 20 20 20 20 7d  Static);.      }
134c0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 4d 65  else{.        Me
134d0 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 44 65  mSetTypeFlag(pDe
134e0 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  st, MEM_Null);. 
134f0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 67 6f 74       }.      got
13500 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b  o op_column_out;
13510 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a  .    }.  }..  /*
13520 20 45 78 74 72 61 63 74 20 74 68 65 20 63 6f 6e   Extract the con
13530 74 65 6e 74 20 66 6f 72 20 74 68 65 20 70 32 2b  tent for the p2+
13540 31 2d 74 68 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f  1-th column.  Co
13550 6e 74 72 6f 6c 20 63 61 6e 20 6f 6e 6c 79 0a 20  ntrol can only. 
13560 20 2a 2a 20 72 65 61 63 68 20 74 68 69 73 20 70   ** reach this p
13570 6f 69 6e 74 20 69 66 20 61 4f 66 66 73 65 74 5b  oint if aOffset[
13580 70 32 5d 2c 20 61 4f 66 66 73 65 74 5b 70 32 2b  p2], aOffset[p2+
13590 31 5d 2c 20 61 6e 64 20 61 54 79 70 65 5b 70 32  1], and aType[p2
135a0 5d 20 61 72 65 0a 20 20 2a 2a 20 61 6c 6c 20 76  ] are.  ** all v
135b0 61 6c 69 64 2e 0a 20 20 2a 2f 0a 20 20 61 73 73  alid..  */.  ass
135c0 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e 48 64 72  ert( p2<pC->nHdr
135d0 50 61 72 73 65 64 20 29 3b 0a 20 20 61 73 73 65  Parsed );.  asse
135e0 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
135f0 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73  K );.  assert( s
13600 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d  qlite3VdbeCheckM
13610 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 70 44 65  emInvariants(pDe
13620 73 74 29 20 29 3b 0a 20 20 69 66 28 20 70 43 2d  st) );.  if( pC-
13630 3e 73 7a 52 6f 77 3e 3d 61 4f 66 66 73 65 74 5b  >szRow>=aOffset[
13640 70 32 2b 31 5d 20 29 7b 0a 20 20 20 20 2f 2a 20  p2+1] ){.    /* 
13650 54 68 69 73 20 69 73 20 74 68 65 20 63 6f 6d 6d  This is the comm
13660 6f 6e 20 63 61 73 65 20 77 68 65 72 65 20 74 68  on case where th
13670 65 20 64 65 73 69 72 65 64 20 63 6f 6e 74 65 6e  e desired conten
13680 74 20 66 69 74 73 20 6f 6e 20 74 68 65 20 6f 72  t fits on the or
13690 69 67 69 6e 61 6c 0a 20 20 20 20 2a 2a 20 70 61  iginal.    ** pa
136a0 67 65 20 2d 20 77 68 65 72 65 20 74 68 65 20 63  ge - where the c
136b0 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20 6f 6e  ontent is not on
136c0 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67   an overflow pag
136d0 65 20 2a 2f 0a 20 20 20 20 56 64 62 65 4d 65 6d  e */.    VdbeMem
136e0 52 65 6c 65 61 73 65 45 78 74 65 72 6e 28 70 44  ReleaseExtern(pD
136f0 65 73 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  est);.    sqlite
13700 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 70  3VdbeSerialGet(p
13710 43 2d 3e 61 52 6f 77 2b 61 4f 66 66 73 65 74 5b  C->aRow+aOffset[
13720 70 32 5d 2c 20 61 54 79 70 65 5b 70 32 5d 2c 20  p2], aType[p2], 
13730 70 44 65 73 74 29 3b 0a 20 20 7d 65 6c 73 65 7b  pDest);.  }else{
13740 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 62 72 61  .    /* This bra
13750 6e 63 68 20 68 61 70 70 65 6e 73 20 6f 6e 6c 79  nch happens only
13760 20 77 68 65 6e 20 63 6f 6e 74 65 6e 74 20 69 73   when content is
13770 20 6f 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67   on overflow pag
13780 65 73 20 2a 2f 0a 20 20 20 20 74 20 3d 20 61 54  es */.    t = aT
13790 79 70 65 5b 70 32 5d 3b 0a 20 20 20 20 69 66 28  ype[p2];.    if(
137a0 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50   ((pOp->p5 & (OP
137b0 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 7c 4f  FLAG_LENGTHARG|O
137c0 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29  PFLAG_TYPEOFARG)
137d0 29 21 3d 30 0a 20 20 20 20 20 20 20 20 20 20 26  )!=0.          &
137e0 26 20 28 28 74 3e 3d 31 32 20 26 26 20 28 74 26  & ((t>=12 && (t&
137f0 31 29 3d 3d 30 29 20 7c 7c 20 28 70 4f 70 2d 3e  1)==0) || (pOp->
13800 70 35 20 26 20 4f 50 46 4c 41 47 5f 54 59 50 45  p5 & OPFLAG_TYPE
13810 4f 46 41 52 47 29 21 3d 30 29 29 0a 20 20 20 20  OFARG)!=0)).    
13820 20 7c 7c 20 28 6c 65 6e 20 3d 20 73 71 6c 69 74   || (len = sqlit
13830 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
13840 4c 65 6e 28 74 29 29 3d 3d 30 0a 20 20 20 20 29  Len(t))==0.    )
13850 7b 0a 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65  {.      /* Conte
13860 6e 74 20 69 73 20 69 72 72 65 6c 65 76 61 6e 74  nt is irrelevant
13870 20 66 6f 72 20 74 68 65 20 74 79 70 65 6f 66 28   for the typeof(
13880 29 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 66  ) function and f
13890 6f 72 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20  or.      ** the 
138a0 6c 65 6e 67 74 68 28 58 29 20 66 75 6e 63 74 69  length(X) functi
138b0 6f 6e 20 69 66 20 58 20 69 73 20 61 20 62 6c 6f  on if X is a blo
138c0 62 2e 20 20 53 6f 20 77 65 20 6d 69 67 68 74 20  b.  So we might 
138d0 61 73 20 77 65 6c 6c 20 75 73 65 0a 20 20 20 20  as well use.    
138e0 20 20 2a 2a 20 62 6f 67 75 73 20 63 6f 6e 74 65    ** bogus conte
138f0 6e 74 20 72 61 74 68 65 72 20 74 68 61 6e 20 72  nt rather than r
13900 65 61 64 69 6e 67 20 63 6f 6e 74 65 6e 74 20 66  eading content f
13910 72 6f 6d 20 64 69 73 6b 2e 20 20 4e 55 4c 4c 20  rom disk.  NULL 
13920 77 6f 72 6b 73 0a 20 20 20 20 20 20 2a 2a 20 66  works.      ** f
13930 6f 72 20 74 65 78 74 20 61 6e 64 20 62 6c 6f 62  or text and blob
13940 20 61 6e 64 20 77 68 61 74 65 76 65 72 20 69 73   and whatever is
13950 20 69 6e 20 74 68 65 20 70 61 79 6c 6f 61 64 53   in the payloadS
13960 69 7a 65 36 34 20 76 61 72 69 61 62 6c 65 0a 20  ize64 variable. 
13970 20 20 20 20 20 2a 2a 20 77 69 6c 6c 20 77 6f 72       ** will wor
13980 6b 20 66 6f 72 20 65 76 65 72 79 74 68 69 6e 67  k for everything
13990 20 65 6c 73 65 2e 20 20 43 6f 6e 74 65 6e 74 20   else.  Content 
139a0 69 73 20 61 6c 73 6f 20 69 72 72 65 6c 65 76 61  is also irreleva
139b0 6e 74 20 69 66 0a 20 20 20 20 20 20 2a 2a 20 74  nt if.      ** t
139c0 68 65 20 63 6f 6e 74 65 6e 74 20 6c 65 6e 67 74  he content lengt
139d0 68 20 69 73 20 30 2e 20 2a 2f 0a 20 20 20 20 20  h is 0. */.     
139e0 20 7a 44 61 74 61 20 3d 20 74 3c 3d 31 33 20 3f   zData = t<=13 ?
139f0 20 28 75 38 2a 29 26 70 61 79 6c 6f 61 64 53 69   (u8*)&payloadSi
13a00 7a 65 36 34 20 3a 20 30 3b 0a 20 20 20 20 20 20  ze64 : 0;.      
13a10 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30  sMem.zMalloc = 0
13a20 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
13a30 20 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c     memset(&sMem,
13a40 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29   0, sizeof(sMem)
13a50 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
13a60 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 73 4d 65  VdbeMemMove(&sMe
13a70 6d 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20  m, pDest);.     
13a80 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
13a90 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43  eMemFromBtree(pC
13aa0 72 73 72 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d  rsr, aOffset[p2]
13ab0 2c 20 6c 65 6e 2c 20 21 70 43 2d 3e 69 73 54 61  , len, !pC->isTa
13ac0 62 6c 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ble,.           
13ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ae0 20 20 20 20 20 20 20 20 26 73 4d 65 6d 29 3b 0a          &sMem);.
13af0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
13b00 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
13b10 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d     goto op_colum
13b20 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  n_error;.      }
13b30 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 28  .      zData = (
13b40 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20  u8*)sMem.z;.    
13b50 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  }.    sqlite3Vdb
13b60 65 53 65 72 69 61 6c 47 65 74 28 7a 44 61 74 61  eSerialGet(zData
13b70 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20  , t, pDest);.   
13b80 20 2f 2a 20 49 66 20 77 65 20 64 79 6e 61 6d 69   /* If we dynami
13b90 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20  cally allocated 
13ba0 73 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68  space to hold th
13bb0 65 20 64 61 74 61 20 28 69 6e 20 74 68 65 0a 20  e data (in the. 
13bc0 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62     ** sqlite3Vdb
13bd0 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 29 20  eMemFromBtree() 
13be0 63 61 6c 6c 20 61 62 6f 76 65 29 20 74 68 65 6e  call above) then
13bf0 20 74 72 61 6e 73 66 65 72 20 63 6f 6e 74 72 6f   transfer contro
13c00 6c 20 6f 66 20 74 68 61 74 0a 20 20 20 20 2a 2a  l of that.    **
13c10 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c   dynamically all
13c20 6f 63 61 74 65 64 20 73 70 61 63 65 20 6f 76 65  ocated space ove
13c30 72 20 74 6f 20 74 68 65 20 70 44 65 73 74 20 73  r to the pDest s
13c40 74 72 75 63 74 75 72 65 2e 0a 20 20 20 20 2a 2a  tructure..    **
13c50 20 54 68 69 73 20 70 72 65 76 65 6e 74 73 20 61   This prevents a
13c60 20 6d 65 6d 6f 72 79 20 63 6f 70 79 2e 20 2a 2f   memory copy. */
13c70 0a 20 20 20 20 69 66 28 20 73 4d 65 6d 2e 7a 4d  .    if( sMem.zM
13c80 61 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 20 20 61  alloc ){.      a
13c90 73 73 65 72 74 28 20 73 4d 65 6d 2e 7a 3d 3d 73  ssert( sMem.z==s
13ca0 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 3b 0a 20  Mem.zMalloc );. 
13cb0 20 20 20 20 20 61 73 73 65 72 74 28 20 56 64 62       assert( Vdb
13cc0 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 44 65 73  eMemDynamic(pDes
13cd0 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 61  t)==0 );.      a
13ce0 73 73 65 72 74 28 20 28 70 44 65 73 74 2d 3e 66  ssert( (pDest->f
13cf0 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62  lags & (MEM_Blob
13d00 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 30 20 7c 7c  |MEM_Str))==0 ||
13d10 20 70 44 65 73 74 2d 3e 7a 3d 3d 73 4d 65 6d 2e   pDest->z==sMem.
13d20 7a 20 29 3b 0a 20 20 20 20 20 20 70 44 65 73 74  z );.      pDest
13d30 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d  ->flags &= ~(MEM
13d40 5f 45 70 68 65 6d 7c 4d 45 4d 5f 53 74 61 74 69  _Ephem|MEM_Stati
13d50 63 29 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d  c);.      pDest-
13d60 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65  >flags |= MEM_Te
13d70 72 6d 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d  rm;.      pDest-
13d80 3e 7a 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20  >z = sMem.z;.   
13d90 20 20 20 70 44 65 73 74 2d 3e 7a 4d 61 6c 6c 6f     pDest->zMallo
13da0 63 20 3d 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63  c = sMem.zMalloc
13db0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 44  ;.    }.  }.  pD
13dc0 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  est->enc = encod
13dd0 69 6e 67 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f  ing;..op_column_
13de0 6f 75 74 3a 0a 20 20 44 65 65 70 68 65 6d 65 72  out:.  Deephemer
13df0 61 6c 69 7a 65 28 70 44 65 73 74 29 3b 0a 6f 70  alize(pDest);.op
13e00 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3a 0a 20  _column_error:. 
13e10 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
13e20 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 20 20 52  SIZE(pDest);.  R
13e30 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
13e40 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20  p->p3, pDest);. 
13e50 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
13e60 63 6f 64 65 3a 20 41 66 66 69 6e 69 74 79 20 50  code: Affinity P
13e70 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  1 P2 * P4 *.** S
13e80 79 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e 69 74  ynopsis: affinit
13e90 79 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a  y(r[P1@P2]).**.*
13ea0 2a 20 41 70 70 6c 79 20 61 66 66 69 6e 69 74 69  * Apply affiniti
13eb0 65 73 20 74 6f 20 61 20 72 61 6e 67 65 20 6f 66  es to a range of
13ec0 20 50 32 20 72 65 67 69 73 74 65 72 73 20 73 74   P2 registers st
13ed0 61 72 74 69 6e 67 20 77 69 74 68 20 50 31 2e 0a  arting with P1..
13ee0 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 73 74  **.** P4 is a st
13ef0 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32 20  ring that is P2 
13f00 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e  characters long.
13f10 20 54 68 65 20 6e 74 68 20 63 68 61 72 61 63 74   The nth charact
13f20 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72  er of the.** str
13f30 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74 68  ing indicates th
13f40 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74  e column affinit
13f50 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65  y that should be
13f60 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 6e 74   used for the nt
13f70 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  h.** memory cell
13f80 20 69 6e 20 74 68 65 20 72 61 6e 67 65 2e 0a 2a   in the range..*
13f90 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66 69 6e 69  /.case OP_Affini
13fa0 74 79 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68  ty: {.  const ch
13fb0 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20  ar *zAffinity;  
13fc0 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79   /* The affinity
13fd0 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a   to be applied *
13fe0 2f 0a 20 20 63 68 61 72 20 63 41 66 66 3b 20 20  /.  char cAff;  
13ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14000 41 20 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74  A single charact
14010 65 72 20 6f 66 20 61 66 66 69 6e 69 74 79 20 2a  er of affinity *
14020 2f 0a 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d  /..  zAffinity =
14030 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73   pOp->p4.z;.  as
14040 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79 21  sert( zAffinity!
14050 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
14060 7a 41 66 66 69 6e 69 74 79 5b 70 4f 70 2d 3e 70  zAffinity[pOp->p
14070 32 5d 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20  2]==0 );.  pIn1 
14080 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
14090 3b 0a 20 20 77 68 69 6c 65 28 20 28 63 41 66 66  ;.  while( (cAff
140a0 20 3d 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b   = *(zAffinity++
140b0 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73  ))!=0 ){.    ass
140c0 65 72 74 28 20 70 49 6e 31 20 3c 3d 20 26 70 2d  ert( pIn1 <= &p-
140d0 3e 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d 70  >aMem[(p->nMem-p
140e0 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20  ->nCursor)] );. 
140f0 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
14100 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20  Valid(pIn1) );. 
14110 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
14120 28 70 49 6e 31 2c 20 63 41 66 66 2c 20 65 6e 63  (pIn1, cAff, enc
14130 6f 64 69 6e 67 29 3b 0a 20 20 20 20 70 49 6e 31  oding);.    pIn1
14140 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ++;.  }.  break;
14150 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .}../* Opcode: M
14160 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50 32 20  akeRecord P1 P2 
14170 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
14180 73 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b 72 65 63  sis: r[P3]=mkrec
14190 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a  (r[P1@P2]).**.**
141a0 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65 67 69   Convert P2 regi
141b0 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20  sters beginning 
141c0 77 69 74 68 20 50 31 20 69 6e 74 6f 20 74 68 65  with P1 into the
141d0 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 5d   [record format]
141e0 0a 2a 2a 20 75 73 65 20 61 73 20 61 20 64 61 74  .** use as a dat
141f0 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20 64 61  a record in a da
14200 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
14210 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e 20 61  as a key.** in a
14220 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20 4f 50  n index.  The OP
14230 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 63  _Column opcode c
14240 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20 72 65  an decode the re
14250 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a  cord later..**.*
14260 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 73 74  * P4 may be a st
14270 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32 20  ring that is P2 
14280 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e  characters long.
14290 20 20 54 68 65 20 6e 74 68 20 63 68 61 72 61 63    The nth charac
142a0 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74  ter of the.** st
142b0 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74  ring indicates t
142c0 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  he column affini
142d0 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62  ty that should b
142e0 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 6e  e used for the n
142f0 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66 20 74  th.** field of t
14300 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a  he index key..**
14310 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e 67 20  .** The mapping 
14320 66 72 6f 6d 20 63 68 61 72 61 63 74 65 72 20 74  from character t
14330 6f 20 61 66 66 69 6e 69 74 79 20 69 73 20 67 69  o affinity is gi
14340 76 65 6e 20 62 79 20 74 68 65 20 53 51 4c 49 54  ven by the SQLIT
14350 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73  E_AFF_.** macros
14360 20 64 65 66 69 6e 65 64 20 69 6e 20 73 71 6c 69   defined in sqli
14370 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49  teInt.h..**.** I
14380 66 20 50 34 20 69 73 20 4e 55 4c 4c 20 74 68 65  f P4 is NULL the
14390 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66 69 65 6c  n all index fiel
143a0 64 73 20 68 61 76 65 20 74 68 65 20 61 66 66 69  ds have the affi
143b0 6e 69 74 79 20 4e 4f 4e 45 2e 0a 2a 2f 0a 63 61  nity NONE..*/.ca
143c0 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64  se OP_MakeRecord
143d0 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65 77 52 65  : {.  u8 *zNewRe
143e0 63 6f 72 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  cord;        /* 
143f0 41 20 62 75 66 66 65 72 20 74 6f 20 68 6f 6c 64  A buffer to hold
14400 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 74 68   the data for th
14410 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a  e new record */.
14420 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20 20 20    Mem *pRec;    
14430 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
14440 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  new record */.  
14450 75 36 34 20 6e 44 61 74 61 3b 20 20 20 20 20 20  u64 nData;      
14460 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
14470 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74   of bytes of dat
14480 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74  a space */.  int
14490 20 6e 48 64 72 3b 20 20 20 20 20 20 20 20 20 20   nHdr;          
144a0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
144b0 20 62 79 74 65 73 20 6f 66 20 68 65 61 64 65 72   bytes of header
144c0 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 36 34 20   space */.  i64 
144d0 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20 20 20  nByte;          
144e0 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61 63 65     /* Data space
144f0 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68   required for th
14500 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  is record */.  i
14510 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20  nt nZero;       
14520 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
14530 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74  of zero bytes at
14540 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
14550 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
14560 6e 56 61 72 69 6e 74 3b 20 20 20 20 20 20 20 20  nVarint;        
14570 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
14580 62 79 74 65 73 20 69 6e 20 61 20 76 61 72 69 6e  bytes in a varin
14590 74 20 2a 2f 0a 20 20 75 33 32 20 73 65 72 69 61  t */.  u32 seria
145a0 6c 5f 74 79 70 65 3b 20 20 20 20 20 20 20 2f 2a  l_type;       /*
145b0 20 54 79 70 65 20 66 69 65 6c 64 20 2a 2f 0a 20   Type field */. 
145c0 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20 20 20   Mem *pData0;   
145d0 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
145e0 20 66 69 65 6c 64 20 74 6f 20 62 65 20 63 6f 6d   field to be com
145f0 62 69 6e 65 64 20 69 6e 74 6f 20 74 68 65 20 72  bined into the r
14600 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  ecord */.  Mem *
14610 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20 20 20  pLast;          
14620 20 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c 64 20    /* Last field 
14630 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  of the record */
14640 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20  .  int nField;  
14650 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
14660 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e  ber of fields in
14670 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
14680 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79   char *zAffinity
14690 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61  ;       /* The a
146a0 66 66 69 6e 69 74 79 20 73 74 72 69 6e 67 20 66  ffinity string f
146b0 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  or the record */
146c0 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f 72 6d  .  int file_form
146d0 61 74 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 6c  at;       /* Fil
146e0 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73 65 20  e format to use 
146f0 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a  for encoding */.
14700 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20    int i;        
14710 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63           /* Spac
14720 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65  e used in zNewRe
14730 63 6f 72 64 5b 5d 20 68 65 61 64 65 72 20 2a 2f  cord[] header */
14740 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20  .  int j;       
14750 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61            /* Spa
14760 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77 52  ce used in zNewR
14770 65 63 6f 72 64 5b 5d 20 63 6f 6e 74 65 6e 74 20  ecord[] content 
14780 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20  */.  int len;   
14790 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
147a0 65 6e 67 74 68 20 6f 66 20 61 20 66 69 65 6c 64  ength of a field
147b0 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75 6d 69   */..  /* Assumi
147c0 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 63 6f  ng the record co
147d0 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64 73 2c  ntains N fields,
147e0 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d   the record form
147f0 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69  at looks.  ** li
14800 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a 20 20  ke this:.  **.  
14810 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ** -------------
14820 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14830 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14840 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14850 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a  -----------.  **
14860 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20 74 79   | hdr-size | ty
14870 70 65 20 30 20 7c 20 74 79 70 65 20 31 20 7c 20  pe 0 | type 1 | 
14880 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31 20 7c  ... | type N-1 |
14890 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c 20 64   data0 | ... | d
148a0 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20  ata N-1 | .  ** 
148b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
148c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
148d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
148e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
148f0 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20 20  --------.  **.  
14900 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20 74 61  ** Data(0) is ta
14910 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65  ken from registe
14920 72 20 50 31 2e 20 20 44 61 74 61 28 31 29 20 63  r P1.  Data(1) c
14930 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69 73 74  omes from regist
14940 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61 6e 64  er P1+1.  ** and
14950 20 73 6f 20 66 72 6f 74 68 2e 0a 20 20 2a 2a 0a   so froth..  **.
14960 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65 20 66    ** Each type f
14970 69 65 6c 64 20 69 73 20 61 20 76 61 72 69 6e 74  ield is a varint
14980 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68   representing th
14990 65 20 73 65 72 69 61 6c 20 74 79 70 65 20 6f 66  e serial type of
149a0 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72 72 65   the .  ** corre
149b0 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20 65 6c  sponding data el
149c0 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c 69 74  ement (see sqlit
149d0 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
149e0 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20 68 64  ()). The.  ** hd
149f0 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69 73 20  r-size field is 
14a00 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20 77 68  also a varint wh
14a10 69 63 68 20 69 73 20 74 68 65 20 6f 66 66 73 65  ich is the offse
14a20 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  t from the begin
14a30 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74 68 65  ning.  ** of the
14a40 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74 61 30   record to data0
14a50 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61 20 3d  ..  */.  nData =
14a60 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e   0;         /* N
14a70 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
14a80 66 20 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a  f data space */.
14a90 20 20 6e 48 64 72 20 3d 20 30 3b 20 20 20 20 20    nHdr = 0;     
14aa0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
14ab0 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64 65  f bytes of heade
14ac0 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 5a 65  r space */.  nZe
14ad0 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  ro = 0;         
14ae0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72  /* Number of zer
14af0 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20 65  o bytes at the e
14b00 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  nd of the record
14b10 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70   */.  nField = p
14b20 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69 6e  Op->p1;.  zAffin
14b30 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  ity = pOp->p4.z;
14b40 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c  .  assert( nFiel
14b50 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30  d>0 && pOp->p2>0
14b60 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69 65   && pOp->p2+nFie
14b70 6c 64 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  ld<=(p->nMem-p->
14b80 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
14b90 70 44 61 74 61 30 20 3d 20 26 61 4d 65 6d 5b 6e  pData0 = &aMem[n
14ba0 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65 6c 64  Field];.  nField
14bb0 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 4c   = pOp->p2;.  pL
14bc0 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b 6e 46  ast = &pData0[nF
14bd0 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c 65 5f  ield-1];.  file_
14be0 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69 6e 57  format = p->minW
14bf0 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 3b 0a  riteFileFormat;.
14c00 0a 20 20 2f 2a 20 49 64 65 6e 74 69 66 79 20 74  .  /* Identify t
14c10 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74  he output regist
14c20 65 72 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  er */.  assert( 
14c30 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 31 20  pOp->p3<pOp->p1 
14c40 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d  || pOp->p3>=pOp-
14c50 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b 0a 20  >p1+pOp->p2 );. 
14c60 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
14c70 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p3];.  memAbo
14c80 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
14c90 75 74 29 3b 0a 0a 20 20 2f 2a 20 41 70 70 6c 79  ut);..  /* Apply
14ca0 20 74 68 65 20 72 65 71 75 65 73 74 65 64 20 61   the requested a
14cb0 66 66 69 6e 69 74 79 20 74 6f 20 61 6c 6c 20 69  ffinity to all i
14cc0 6e 70 75 74 73 0a 20 20 2a 2f 0a 20 20 61 73 73  nputs.  */.  ass
14cd0 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70 4c 61  ert( pData0<=pLa
14ce0 73 74 20 29 3b 0a 20 20 69 66 28 20 7a 41 66 66  st );.  if( zAff
14cf0 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 70 52 65  inity ){.    pRe
14d00 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20 20 20  c = pData0;.    
14d10 64 6f 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41  do{.      applyA
14d20 66 66 69 6e 69 74 79 28 70 52 65 63 2b 2b 2c 20  ffinity(pRec++, 
14d30 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 2c 20  *(zAffinity++), 
14d40 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20  encoding);.     
14d50 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69   assert( zAffini
14d60 74 79 5b 30 5d 3d 3d 30 20 7c 7c 20 70 52 65 63  ty[0]==0 || pRec
14d70 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 20 20 7d  <=pLast );.    }
14d80 77 68 69 6c 65 28 20 7a 41 66 66 69 6e 69 74 79  while( zAffinity
14d90 5b 30 5d 20 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  [0] );.  }..  /*
14da0 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20 74 68   Loop through th
14db0 65 20 65 6c 65 6d 65 6e 74 73 20 74 68 61 74 20  e elements that 
14dc0 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68 65  will make up the
14dd0 20 72 65 63 6f 72 64 20 74 6f 20 66 69 67 75 72   record to figur
14de0 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d  e.  ** out how m
14df0 75 63 68 20 73 70 61 63 65 20 69 73 20 72 65 71  uch space is req
14e00 75 69 72 65 64 20 66 6f 72 20 74 68 65 20 6e 65  uired for the ne
14e10 77 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20  w record..  */. 
14e20 20 70 52 65 63 20 3d 20 70 4c 61 73 74 3b 0a 20   pRec = pLast;. 
14e30 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74 28   do{.    assert(
14e40 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65 63   memIsValid(pRec
14e50 29 20 29 3b 0a 20 20 20 20 73 65 72 69 61 6c 5f  ) );.    serial_
14e60 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64  type = sqlite3Vd
14e70 62 65 53 65 72 69 61 6c 54 79 70 65 28 70 52 65  beSerialType(pRe
14e80 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b  c, file_format);
14e90 0a 20 20 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74  .    len = sqlit
14ea0 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
14eb0 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29  Len(serial_type)
14ec0 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e  ;.    if( pRec->
14ed0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f  flags & MEM_Zero
14ee0 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e 44   ){.      if( nD
14ef0 61 74 61 20 29 7b 0a 20 20 20 20 20 20 20 20 73  ata ){.        s
14f00 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70  qlite3VdbeMemExp
14f10 61 6e 64 42 6c 6f 62 28 70 52 65 63 29 3b 0a 20  andBlob(pRec);. 
14f20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
14f30 20 20 20 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65      nZero += pRe
14f40 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20  c->u.nZero;.    
14f50 20 20 20 20 6c 65 6e 20 2d 3d 20 70 52 65 63 2d      len -= pRec-
14f60 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20  >u.nZero;.      
14f70 7d 0a 20 20 20 20 7d 0a 20 20 20 20 6e 44 61 74  }.    }.    nDat
14f80 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20 74 65  a += len;.    te
14f90 73 74 63 61 73 65 28 20 73 65 72 69 61 6c 5f 74  stcase( serial_t
14fa0 79 70 65 3d 3d 31 32 37 20 29 3b 0a 20 20 20 20  ype==127 );.    
14fb0 74 65 73 74 63 61 73 65 28 20 73 65 72 69 61 6c  testcase( serial
14fc0 5f 74 79 70 65 3d 3d 31 32 38 20 29 3b 0a 20 20  _type==128 );.  
14fd0 20 20 6e 48 64 72 20 2b 3d 20 73 65 72 69 61 6c    nHdr += serial
14fe0 5f 74 79 70 65 3c 3d 31 32 37 20 3f 20 31 20 3a  _type<=127 ? 1 :
14ff0 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65   sqlite3VarintLe
15000 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a  n(serial_type);.
15010 20 20 7d 77 68 69 6c 65 28 20 28 2d 2d 70 52 65    }while( (--pRe
15020 63 29 3e 3d 70 44 61 74 61 30 20 29 3b 0a 0a 20  c)>=pData0 );.. 
15030 20 2f 2a 20 41 64 64 20 74 68 65 20 69 6e 69 74   /* Add the init
15040 69 61 6c 20 68 65 61 64 65 72 20 76 61 72 69 6e  ial header varin
15050 74 20 61 6e 64 20 74 6f 74 61 6c 20 74 68 65 20  t and total the 
15060 73 69 7a 65 20 2a 2f 0a 20 20 74 65 73 74 63 61  size */.  testca
15070 73 65 28 20 6e 48 64 72 3d 3d 31 32 36 20 29 3b  se( nHdr==126 );
15080 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 48 64  .  testcase( nHd
15090 72 3d 3d 31 32 37 20 29 3b 0a 20 20 69 66 28 20  r==127 );.  if( 
150a0 6e 48 64 72 3c 3d 31 32 36 20 29 7b 0a 20 20 20  nHdr<=126 ){.   
150b0 20 2f 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63   /* The common c
150c0 61 73 65 20 2a 2f 0a 20 20 20 20 6e 48 64 72 20  ase */.    nHdr 
150d0 2b 3d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  += 1;.  }else{. 
150e0 20 20 20 2f 2a 20 52 61 72 65 20 63 61 73 65 20     /* Rare case 
150f0 6f 66 20 61 20 72 65 61 6c 6c 79 20 6c 61 72 67  of a really larg
15100 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 20 20  e header */.    
15110 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c 69 74 65  nVarint = sqlite
15120 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29  3VarintLen(nHdr)
15130 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 6e 56  ;.    nHdr += nV
15140 61 72 69 6e 74 3b 0a 20 20 20 20 69 66 28 20 6e  arint;.    if( n
15150 56 61 72 69 6e 74 3c 73 71 6c 69 74 65 33 56 61  Varint<sqlite3Va
15160 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29 20  rintLen(nHdr) ) 
15170 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42  nHdr++;.  }.  nB
15180 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61  yte = nHdr+nData
15190 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62  ;.  if( nByte>db
151a0 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
151b0 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
151c0 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
151d0 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b  g;.  }..  /* Mak
151e0 65 20 73 75 72 65 20 74 68 65 20 6f 75 74 70 75  e sure the outpu
151f0 74 20 72 65 67 69 73 74 65 72 20 68 61 73 20 61  t register has a
15200 20 62 75 66 66 65 72 20 6c 61 72 67 65 20 65 6e   buffer large en
15210 6f 75 67 68 20 74 6f 20 73 74 6f 72 65 20 0a 20  ough to store . 
15220 20 2a 2a 20 74 68 65 20 6e 65 77 20 72 65 63 6f   ** the new reco
15230 72 64 2e 20 54 68 65 20 6f 75 74 70 75 74 20 72  rd. The output r
15240 65 67 69 73 74 65 72 20 28 70 4f 70 2d 3e 70 33  egister (pOp->p3
15250 29 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  ) is not allowed
15260 20 74 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20   to.  ** be one 
15270 6f 66 20 74 68 65 20 69 6e 70 75 74 20 72 65 67  of the input reg
15280 69 73 74 65 72 73 20 28 62 65 63 61 75 73 65 20  isters (because 
15290 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61  the following ca
152a0 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74  ll to.  ** sqlit
152b0 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 29 20  e3VdbeMemGrow() 
152c0 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72 20 74 68  could clobber th
152d0 65 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 69  e value before i
152e0 74 20 69 73 20 75 73 65 64 29 2e 0a 20 20 2a 2f  t is used)..  */
152f0 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
15300 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20  beMemGrow(pOut, 
15310 28 69 6e 74 29 6e 42 79 74 65 2c 20 30 29 20 29  (int)nByte, 0) )
15320 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
15330 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65 77 52 65 63  m;.  }.  zNewRec
15340 6f 72 64 20 3d 20 28 75 38 20 2a 29 70 4f 75 74  ord = (u8 *)pOut
15350 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57 72 69 74 65  ->z;..  /* Write
15360 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
15370 20 69 20 3d 20 70 75 74 56 61 72 69 6e 74 33 32   i = putVarint32
15380 28 7a 4e 65 77 52 65 63 6f 72 64 2c 20 6e 48 64  (zNewRecord, nHd
15390 72 29 3b 0a 20 20 6a 20 3d 20 6e 48 64 72 3b 0a  r);.  j = nHdr;.
153a0 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61 30    assert( pData0
153b0 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 70 52 65  <=pLast );.  pRe
153c0 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20 64 6f  c = pData0;.  do
153d0 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70  {.    serial_typ
153e0 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  e = sqlite3VdbeS
153f0 65 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20  erialType(pRec, 
15400 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20  file_format);.  
15410 20 20 69 20 2b 3d 20 70 75 74 56 61 72 69 6e 74    i += putVarint
15420 33 32 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69  32(&zNewRecord[i
15430 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b  ], serial_type);
15440 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
15450 65 72 69 61 6c 20 74 79 70 65 20 2a 2f 0a 20 20  erial type */.  
15460 20 20 6a 20 2b 3d 20 73 71 6c 69 74 65 33 56 64    j += sqlite3Vd
15470 62 65 53 65 72 69 61 6c 50 75 74 28 26 7a 4e 65  beSerialPut(&zNe
15480 77 52 65 63 6f 72 64 5b 6a 5d 2c 20 70 52 65 63  wRecord[j], pRec
15490 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20  , serial_type); 
154a0 2f 2a 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20  /* content */.  
154b0 7d 77 68 69 6c 65 28 20 28 2b 2b 70 52 65 63 29  }while( (++pRec)
154c0 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 61 73 73  <=pLast );.  ass
154d0 65 72 74 28 20 69 3d 3d 6e 48 64 72 20 29 3b 0a  ert( i==nHdr );.
154e0 20 20 61 73 73 65 72 74 28 20 6a 3d 3d 6e 42 79    assert( j==nBy
154f0 74 65 20 29 3b 0a 0a 20 20 61 73 73 65 72 74 28  te );..  assert(
15500 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
15510 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p3<=(p->nMem-
15520 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
15530 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29   pOut->n = (int)
15540 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66  nByte;.  pOut->f
15550 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 3b  lags = MEM_Blob;
15560 0a 20 20 70 4f 75 74 2d 3e 78 44 65 6c 20 3d 20  .  pOut->xDel = 
15570 30 3b 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20 29  0;.  if( nZero )
15580 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a  {.    pOut->u.nZ
15590 65 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20  ero = nZero;.   
155a0 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20   pOut->flags |= 
155b0 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20  MEM_Zero;.  }.  
155c0 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49  pOut->enc = SQLI
155d0 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20  TE_UTF8;  /* In 
155e0 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73  case the blob is
155f0 20 65 76 65 72 20 63 6f 6e 76 65 72 74 65 64 20   ever converted 
15600 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20 52 45 47  to text */.  REG
15610 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
15620 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50  >p3, pOut);.  UP
15630 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
15640 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
15650 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
15660 43 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20  Count P1 P2 * * 
15670 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
15680 5b 50 32 5d 3d 63 6f 75 6e 74 28 29 0a 2a 2a 0a  [P2]=count().**.
15690 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d  ** Store the num
156a0 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28  ber of entries (
156b0 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
156c0 29 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f  ) in the table o
156d0 72 20 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e  r index .** open
156e0 65 64 20 62 79 20 63 75 72 73 6f 72 20 50 31 20  ed by cursor P1 
156f0 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
15700 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
15710 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54  _OMIT_BTREECOUNT
15720 0a 63 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20  .case OP_Count: 
15730 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74  {         /* out
15740 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
15750 20 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20    i64 nEntry;.  
15760 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
15770 0a 0a 20 20 70 43 72 73 72 20 3d 20 70 2d 3e 61  ..  pCrsr = p->a
15780 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 70  pCsr[pOp->p1]->p
15790 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74  Cursor;.  assert
157a0 28 20 70 43 72 73 72 20 29 3b 0a 20 20 6e 45 6e  ( pCrsr );.  nEn
157b0 74 72 79 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74  try = 0;  /* Not
157c0 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75   needed.  Only u
157d0 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61  sed to silence a
157e0 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72   warning. */.  r
157f0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
15800 43 6f 75 6e 74 28 70 43 72 73 72 2c 20 26 6e 45  Count(pCrsr, &nE
15810 6e 74 72 79 29 3b 0a 20 20 70 4f 75 74 2d 3e 75  ntry);.  pOut->u
15820 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20 62  .i = nEntry;.  b
15830 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
15840 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76 65 70  /* Opcode: Savep
15850 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20 2a  oint P1 * * P4 *
15860 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c  .**.** Open, rel
15870 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63 6b  ease or rollback
15880 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 6e   the savepoint n
15890 61 6d 65 64 20 62 79 20 70 61 72 61 6d 65 74 65  amed by paramete
158a0 72 20 50 34 2c 20 64 65 70 65 6e 64 69 6e 67 0a  r P4, depending.
158b0 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 20  ** on the value 
158c0 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20 61  of P1. To open a
158d0 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 2c 20   new savepoint, 
158e0 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61 73  P1==0. To releas
158f0 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a  e (commit) an.**
15900 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f   existing savepo
15910 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20 74  int, P1==1, or t
15920 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65 78  o rollback an ex
15930 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74  isting savepoint
15940 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20   P1==2..*/.case 
15950 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b 0a  OP_Savepoint: {.
15960 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20    int p1;       
15970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15980 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50 31    /* Value of P1
15990 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63 68   operand */.  ch
159a0 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
159b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
159c0 20 4e 61 6d 65 20 6f 66 20 73 61 76 65 70 6f 69   Name of savepoi
159d0 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d  nt */.  int nNam
159e0 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  e;.  Savepoint *
159f0 70 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f 69 6e  pNew;.  Savepoin
15a00 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20  t *pSavepoint;. 
15a10 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d 70   Savepoint *pTmp
15a20 3b 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69  ;.  int iSavepoi
15a30 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a 20  nt;.  int ii;.. 
15a40 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20   p1 = pOp->p1;. 
15a50 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70 34   zName = pOp->p4
15a60 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72 74  .z;..  /* Assert
15a70 20 74 68 61 74 20 74 68 65 20 70 31 20 70 61 72   that the p1 par
15a80 61 6d 65 74 65 72 20 69 73 20 76 61 6c 69 64 2e  ameter is valid.
15a90 20 41 6c 73 6f 20 74 68 61 74 20 69 66 20 74 68   Also that if th
15aa0 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a 20  ere is no open. 
15ab0 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c   ** transaction,
15ac0 20 74 68 65 6e 20 74 68 65 72 65 20 63 61 6e 6e   then there cann
15ad0 6f 74 20 62 65 20 61 6e 79 20 73 61 76 65 70 6f  ot be any savepo
15ae0 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61 73  ints. .  */.  as
15af0 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70  sert( db->pSavep
15b00 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61  oint==0 || db->a
15b10 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a  utoCommit==0 );.
15b20 20 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53 41    assert( p1==SA
15b30 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c 70  VEPOINT_BEGIN||p
15b40 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  1==SAVEPOINT_REL
15b50 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50 4f  EASE||p1==SAVEPO
15b60 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a  INT_ROLLBACK );.
15b70 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53    assert( db->pS
15b80 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e  avepoint || db->
15b90 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
15ba0 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20 61  epoint==0 );.  a
15bb0 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76 65  ssert( checkSave
15bc0 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29  pointCount(db) )
15bd0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ;.  assert( p->b
15be0 49 73 52 65 61 64 65 72 20 29 3b 0a 0a 20 20 69  IsReader );..  i
15bf0 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  f( p1==SAVEPOINT
15c00 5f 42 45 47 49 4e 20 29 7b 0a 20 20 20 20 69 66  _BEGIN ){.    if
15c10 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65  ( db->nVdbeWrite
15c20 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41  >0 ){.      /* A
15c30 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 63   new savepoint c
15c40 61 6e 6e 6f 74 20 62 65 20 63 72 65 61 74 65 64  annot be created
15c50 20 69 66 20 74 68 65 72 65 20 61 72 65 20 61 63   if there are ac
15c60 74 69 76 65 20 77 72 69 74 65 20 0a 20 20 20 20  tive write .    
15c70 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 20    ** statements 
15c80 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64 2f  (i.e. open read/
15c90 77 72 69 74 65 20 69 6e 63 72 65 6d 65 6e 74 61  write incrementa
15ca0 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29 2e  l blob handles).
15cb0 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
15cc0 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
15cd0 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
15ce0 2c 20 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 73  , "cannot open s
15cf0 61 76 65 70 6f 69 6e 74 20 2d 20 22 0a 20 20 20  avepoint - ".   
15d00 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d       "SQL statem
15d10 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73  ents in progress
15d20 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53  ");.      rc = S
15d30 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
15d40 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4e 61  }else{.      nNa
15d50 6d 65 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  me = sqlite3Strl
15d60 65 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a 0a 23 69  en30(zName);..#i
15d70 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
15d80 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
15d90 20 20 20 20 20 2f 2a 20 54 68 69 73 20 63 61 6c       /* This cal
15da0 6c 20 69 73 20 4f 6b 20 65 76 65 6e 20 69 66 20  l is Ok even if 
15db0 74 68 69 73 20 73 61 76 65 70 6f 69 6e 74 20 69  this savepoint i
15dc0 73 20 61 63 74 75 61 6c 6c 79 20 61 20 74 72 61  s actually a tra
15dd0 6e 73 61 63 74 69 6f 6e 0a 20 20 20 20 20 20 2a  nsaction.      *
15de0 2a 20 73 61 76 65 70 6f 69 6e 74 20 28 61 6e 64  * savepoint (and
15df0 20 74 68 65 72 65 66 6f 72 65 20 73 68 6f 75 6c   therefore shoul
15e00 64 20 6e 6f 74 20 70 72 6f 6d 70 74 20 78 53 61  d not prompt xSa
15e10 76 65 70 6f 69 6e 74 28 29 29 20 63 61 6c 6c 62  vepoint()) callb
15e20 61 63 6b 73 2e 0a 20 20 20 20 20 20 2a 2a 20 49  acks..      ** I
15e30 66 20 74 68 69 73 20 69 73 20 61 20 74 72 61 6e  f this is a tran
15e40 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e  saction savepoin
15e50 74 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2c 20  t being opened, 
15e60 69 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64  it is guaranteed
15e70 0a 20 20 20 20 20 20 2a 2a 20 74 68 61 74 20 74  .      ** that t
15e80 68 65 20 64 62 2d 3e 61 56 54 72 61 6e 73 5b 5d  he db->aVTrans[]
15e90 20 61 72 72 61 79 20 69 73 20 65 6d 70 74 79 2e   array is empty.
15ea0 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72    */.      asser
15eb0 74 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  t( db->autoCommi
15ec0 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 54 72  t==0 || db->nVTr
15ed0 61 6e 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  ans==0 );.      
15ee0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
15ef0 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53 41  Savepoint(db, SA
15f00 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 0a 20  VEPOINT_BEGIN,. 
15f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
15f30 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 64 62  b->nStatement+db
15f40 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20  ->nSavepoint);. 
15f50 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
15f60 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
15f70 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
15f80 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20  ;.#endif..      
15f90 2f 2a 20 43 72 65 61 74 65 20 61 20 6e 65 77 20  /* Create a new 
15fa0 73 61 76 65 70 6f 69 6e 74 20 73 74 72 75 63 74  savepoint struct
15fb0 75 72 65 2e 20 2a 2f 0a 20 20 20 20 20 20 70 4e  ure. */.      pN
15fc0 65 77 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61  ew = sqlite3DbMa
15fd0 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73 69 7a 65  llocRaw(db, size
15fe0 6f 66 28 53 61 76 65 70 6f 69 6e 74 29 2b 6e 4e  of(Savepoint)+nN
15ff0 61 6d 65 2b 31 29 3b 0a 20 20 20 20 20 20 69 66  ame+1);.      if
16000 28 20 70 4e 65 77 20 29 7b 0a 20 20 20 20 20 20  ( pNew ){.      
16010 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20    pNew->zName = 
16020 28 63 68 61 72 20 2a 29 26 70 4e 65 77 5b 31 5d  (char *)&pNew[1]
16030 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 63 70 79  ;.        memcpy
16040 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e  (pNew->zName, zN
16050 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20  ame, nName+1);. 
16060 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20 49     .        /* I
16070 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70  f there is no op
16080 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  en transaction, 
16090 74 68 65 6e 20 6d 61 72 6b 20 74 68 69 73 20 61  then mark this a
160a0 73 20 61 20 73 70 65 63 69 61 6c 0a 20 20 20 20  s a special.    
160b0 20 20 20 20 2a 2a 20 22 74 72 61 6e 73 61 63 74      ** "transact
160c0 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 22 2e 20  ion savepoint". 
160d0 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 64  */.        if( d
160e0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b  b->autoCommit ){
160f0 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61  .          db->a
16100 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20  utoCommit = 0;. 
16110 20 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54           db->isT
16120 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
16130 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  int = 1;.       
16140 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
16150 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74    db->nSavepoint
16160 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ++;.        }.  
16170 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20 4c 69    .        /* Li
16180 6e 6b 20 74 68 65 20 6e 65 77 20 73 61 76 65 70  nk the new savep
16190 6f 69 6e 74 20 69 6e 74 6f 20 74 68 65 20 64 61  oint into the da
161a0 74 61 62 61 73 65 20 68 61 6e 64 6c 65 27 73 20  tabase handle's 
161b0 6c 69 73 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20  list. */.       
161c0 20 70 4e 65 77 2d 3e 70 4e 65 78 74 20 3d 20 64   pNew->pNext = d
161d0 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20  b->pSavepoint;. 
161e0 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65         db->pSave
161f0 70 6f 69 6e 74 20 3d 20 70 4e 65 77 3b 0a 20 20  point = pNew;.  
16200 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66        pNew->nDef
16210 65 72 72 65 64 43 6f 6e 73 20 3d 20 64 62 2d 3e  erredCons = db->
16220 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20  nDeferredCons;. 
16230 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65         pNew->nDe
16240 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20  ferredImmCons = 
16250 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
16260 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Cons;.      }.  
16270 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
16280 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b   iSavepoint = 0;
16290 0a 0a 20 20 20 20 2f 2a 20 46 69 6e 64 20 74 68  ..    /* Find th
162a0 65 20 6e 61 6d 65 64 20 73 61 76 65 70 6f 69 6e  e named savepoin
162b0 74 2e 20 49 66 20 74 68 65 72 65 20 69 73 20 6e  t. If there is n
162c0 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74  o such savepoint
162d0 2c 20 74 68 65 6e 20 61 6e 0a 20 20 20 20 2a 2a  , then an.    **
162e0 20 61 6e 20 65 72 72 6f 72 20 69 73 20 72 65 74   an error is ret
162f0 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73 65  urned to the use
16300 72 2e 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28 0a  r.  */.    for(.
16310 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74        pSavepoint
16320 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e   = db->pSavepoin
16330 74 3b 20 0a 20 20 20 20 20 20 70 53 61 76 65 70  t; .      pSavep
16340 6f 69 6e 74 20 26 26 20 73 71 6c 69 74 65 33 53  oint && sqlite3S
16350 74 72 49 43 6d 70 28 70 53 61 76 65 70 6f 69 6e  trICmp(pSavepoin
16360 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 29  t->zName, zName)
16370 3b 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69  ;.      pSavepoi
16380 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d  nt = pSavepoint-
16390 3e 70 4e 65 78 74 0a 20 20 20 20 29 7b 0a 20 20  >pNext.    ){.  
163a0 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 2b 2b      iSavepoint++
163b0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
163c0 21 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20  !pSavepoint ){. 
163d0 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
163e0 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
163f0 67 2c 20 64 62 2c 20 22 6e 6f 20 73 75 63 68 20  g, db, "no such 
16400 73 61 76 65 70 6f 69 6e 74 3a 20 25 73 22 2c 20  savepoint: %s", 
16410 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 72 63  zName);.      rc
16420 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
16430 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 64  .    }else if( d
16440 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20  b->nVdbeWrite>0 
16450 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  && p1==SAVEPOINT
16460 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20  _RELEASE ){.    
16470 20 20 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20 70    /* It is not p
16480 6f 73 73 69 62 6c 65 20 74 6f 20 72 65 6c 65 61  ossible to relea
16490 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 20 73 61  se (commit) a sa
164a0 76 65 70 6f 69 6e 74 20 69 66 20 74 68 65 72 65  vepoint if there
164b0 20 61 72 65 20 0a 20 20 20 20 20 20 2a 2a 20 61   are .      ** a
164c0 63 74 69 76 65 20 77 72 69 74 65 20 73 74 61 74  ctive write stat
164d0 65 6d 65 6e 74 73 2e 0a 20 20 20 20 20 20 2a 2f  ements..      */
164e0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65  .      sqlite3Se
164f0 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
16500 4d 73 67 2c 20 64 62 2c 20 0a 20 20 20 20 20 20  Msg, db, .      
16510 20 20 22 63 61 6e 6e 6f 74 20 72 65 6c 65 61 73    "cannot releas
16520 65 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 53 51  e savepoint - SQ
16530 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
16540 70 72 6f 67 72 65 73 73 22 0a 20 20 20 20 20 20  progress".      
16550 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  );.      rc = SQ
16560 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d  LITE_BUSY;.    }
16570 65 6c 73 65 7b 0a 0a 20 20 20 20 20 20 2f 2a 20  else{..      /* 
16580 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65  Determine whethe
16590 72 20 6f 72 20 6e 6f 74 20 74 68 69 73 20 69 73  r or not this is
165a0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73   a transaction s
165b0 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 73 6f 2c  avepoint. If so,
165c0 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 74 68  .      ** and th
165d0 69 73 20 69 73 20 61 20 52 45 4c 45 41 53 45 20  is is a RELEASE 
165e0 63 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e 20 74 68  command, then th
165f0 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61  e current transa
16600 63 74 69 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20  ction .      ** 
16610 69 73 20 63 6f 6d 6d 69 74 74 65 64 2e 20 0a 20  is committed. . 
16620 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 6e       */.      in
16630 74 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20  t isTransaction 
16640 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e  = pSavepoint->pN
16650 65 78 74 3d 3d 30 20 26 26 20 64 62 2d 3e 69 73  ext==0 && db->is
16660 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
16670 6f 69 6e 74 3b 0a 20 20 20 20 20 20 69 66 28 20  oint;.      if( 
16680 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 26 26  isTransaction &&
16690 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
166a0 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20  ELEASE ){.      
166b0 20 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69    if( (rc = sqli
166c0 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70  te3VdbeCheckFk(p
166d0 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b  , 1))!=SQLITE_OK
166e0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f   ){.          go
166f0 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
16700 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
16710 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
16720 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66   = 1;.        if
16730 28 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c  ( sqlite3VdbeHal
16740 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53  t(p)==SQLITE_BUS
16750 59 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70  Y ){.          p
16760 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20  ->pc = pc;.     
16770 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
16780 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  mit = 0;.       
16790 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20     p->rc = rc = 
167a0 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20  SQLITE_BUSY;.   
167b0 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65         goto vdbe
167c0 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20  _return;.       
167d0 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 69   }.        db->i
167e0 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
167f0 70 6f 69 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20  point = 0;.     
16800 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 3b 0a 20     rc = p->rc;. 
16810 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
16820 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d      iSavepoint =
16830 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20   db->nSavepoint 
16840 2d 20 69 53 61 76 65 70 6f 69 6e 74 20 2d 20 31  - iSavepoint - 1
16850 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 31  ;.        if( p1
16860 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  ==SAVEPOINT_ROLL
16870 42 41 43 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  BACK ){.        
16880 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64    for(ii=0; ii<d
16890 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20  b->nDb; ii++){. 
168a0 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
168b0 65 33 42 74 72 65 65 54 72 69 70 41 6c 6c 43 75  e3BtreeTripAllCu
168c0 72 73 6f 72 73 28 64 62 2d 3e 61 44 62 5b 69 69  rsors(db->aDb[ii
168d0 5d 2e 70 42 74 2c 20 53 51 4c 49 54 45 5f 41 42  ].pBt, SQLITE_AB
168e0 4f 52 54 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ORT);.          
168f0 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
16900 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69      for(ii=0; ii
16910 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b  <db->nDb; ii++){
16920 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
16930 73 71 6c 69 74 65 33 42 74 72 65 65 53 61 76 65  sqlite3BtreeSave
16940 70 6f 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69  point(db->aDb[ii
16950 5d 2e 70 42 74 2c 20 70 31 2c 20 69 53 61 76 65  ].pBt, p1, iSave
16960 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  point);.        
16970 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
16980 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  _OK ){.         
16990 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
169a0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
169b0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
169c0 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 31  }.        if( p1
169d0 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  ==SAVEPOINT_ROLL
169e0 42 41 43 4b 20 26 26 20 28 64 62 2d 3e 66 6c 61  BACK && (db->fla
169f0 67 73 26 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e  gs&SQLITE_Intern
16a00 43 68 61 6e 67 65 73 29 21 3d 30 20 29 7b 0a 20  Changes)!=0 ){. 
16a10 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
16a20 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74  ExpirePreparedSt
16a30 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20  atements(db);.  
16a40 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 52          sqlite3R
16a50 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66  esetAllSchemasOf
16a60 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a  Connection(db);.
16a70 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c            db->fl
16a80 61 67 73 20 3d 20 28 64 62 2d 3e 66 6c 61 67 73  ags = (db->flags
16a90 20 7c 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e   | SQLITE_Intern
16aa0 43 68 61 6e 67 65 73 29 3b 0a 20 20 20 20 20 20  Changes);.      
16ab0 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20    }.      }.  . 
16ac0 20 20 20 20 20 2f 2a 20 52 65 67 61 72 64 6c 65       /* Regardle
16ad0 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 74 68  ss of whether th
16ae0 69 73 20 69 73 20 61 20 52 45 4c 45 41 53 45 20  is is a RELEASE 
16af0 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65 73  or ROLLBACK, des
16b00 74 72 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20 20  troy all .      
16b10 2a 2a 20 73 61 76 65 70 6f 69 6e 74 73 20 6e 65  ** savepoints ne
16b20 73 74 65 64 20 69 6e 73 69 64 65 20 6f 66 20 74  sted inside of t
16b30 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69  he savepoint bei
16b40 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e 20  ng operated on. 
16b50 2a 2f 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20  */.      while( 
16b60 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21 3d  db->pSavepoint!=
16b70 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20  pSavepoint ){.  
16b80 20 20 20 20 20 20 70 54 6d 70 20 3d 20 64 62 2d        pTmp = db-
16b90 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20  >pSavepoint;.   
16ba0 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f       db->pSavepo
16bb0 69 6e 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65 78  int = pTmp->pNex
16bc0 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  t;.        sqlit
16bd0 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 54 6d  e3DbFree(db, pTm
16be0 70 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  p);.        db->
16bf0 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20  nSavepoint--;.  
16c00 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20      }..      /* 
16c10 49 66 20 69 74 20 69 73 20 61 20 52 45 4c 45 41  If it is a RELEA
16c20 53 45 2c 20 74 68 65 6e 20 64 65 73 74 72 6f 79  SE, then destroy
16c30 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62   the savepoint b
16c40 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e  eing operated on
16c50 20 0a 20 20 20 20 20 20 2a 2a 20 74 6f 6f 2e 20   .      ** too. 
16c60 49 66 20 69 74 20 69 73 20 61 20 52 4f 4c 4c 42  If it is a ROLLB
16c70 41 43 4b 20 54 4f 2c 20 74 68 65 6e 20 73 65 74  ACK TO, then set
16c80 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64   the number of d
16c90 65 66 65 72 72 65 64 20 0a 20 20 20 20 20 20 2a  eferred .      *
16ca0 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  * constraint vio
16cb0 6c 61 74 69 6f 6e 73 20 70 72 65 73 65 6e 74 20  lations present 
16cc0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
16cd0 74 6f 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f  to the value sto
16ce0 72 65 64 0a 20 20 20 20 20 20 2a 2a 20 77 68 65  red.      ** whe
16cf0 6e 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  n the savepoint 
16d00 77 61 73 20 63 72 65 61 74 65 64 2e 20 20 2a 2f  was created.  */
16d10 0a 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53  .      if( p1==S
16d20 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
16d30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
16d40 72 74 28 20 70 53 61 76 65 70 6f 69 6e 74 3d 3d  rt( pSavepoint==
16d50 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 29  db->pSavepoint )
16d60 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53  ;.        db->pS
16d70 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65  avepoint = pSave
16d80 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20 20  point->pNext;.  
16d90 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
16da0 72 65 65 28 64 62 2c 20 70 53 61 76 65 70 6f 69  ree(db, pSavepoi
16db0 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  nt);.        if(
16dc0 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20   !isTransaction 
16dd0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  ){.          db-
16de0 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20  >nSavepoint--;. 
16df0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
16e00 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 64 62  else{.        db
16e10 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20  ->nDeferredCons 
16e20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44  = pSavepoint->nD
16e30 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20  eferredCons;.   
16e40 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72       db->nDeferr
16e50 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 70 53 61 76  edImmCons = pSav
16e60 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65  epoint->nDeferre
16e70 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20  dImmCons;.      
16e80 7d 0a 0a 20 20 20 20 20 20 69 66 28 20 21 69 73  }..      if( !is
16e90 54 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20  Transaction ){. 
16ea0 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
16eb0 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74  te3VtabSavepoint
16ec0 28 64 62 2c 20 70 31 2c 20 69 53 61 76 65 70 6f  (db, p1, iSavepo
16ed0 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66  int);.        if
16ee0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
16ef0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
16f00 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
16f10 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20   }.    }.  }..  
16f20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
16f30 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20  ode: AutoCommit 
16f40 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
16f50 2a 20 53 65 74 20 74 68 65 20 64 61 74 61 62 61  * Set the databa
16f60 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66  se auto-commit f
16f70 6c 61 67 20 74 6f 20 50 31 20 28 31 20 6f 72 20  lag to P1 (1 or 
16f80 30 29 2e 20 49 66 20 50 32 20 69 73 20 74 72 75  0). If P2 is tru
16f90 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20  e, roll.** back 
16fa0 61 6e 79 20 63 75 72 72 65 6e 74 6c 79 20 61 63  any currently ac
16fb0 74 69 76 65 20 62 74 72 65 65 20 74 72 61 6e 73  tive btree trans
16fc0 61 63 74 69 6f 6e 73 2e 20 49 66 20 74 68 65 72  actions. If ther
16fd0 65 20 61 72 65 20 61 6e 79 20 61 63 74 69 76 65  e are any active
16fe0 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72 74 20 66  .** VMs (apart f
16ff0 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20 74  rom this one), t
17000 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66  hen a ROLLBACK f
17010 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20  ails.  A COMMIT 
17020 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72  fails if.** ther
17030 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69  e are active wri
17040 74 69 6e 67 20 56 4d 73 20 6f 72 20 61 63 74 69  ting VMs or acti
17050 76 65 20 56 4d 73 20 74 68 61 74 20 75 73 65 20  ve VMs that use 
17060 73 68 61 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a  shared cache..**
17070 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
17080 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65 20  tion causes the 
17090 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63  VM to halt..*/.c
170a0 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69  ase OP_AutoCommi
170b0 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73 69 72  t: {.  int desir
170c0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20  edAutoCommit;.  
170d0 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a 20  int iRollback;. 
170e0 20 69 6e 74 20 74 75 72 6e 4f 6e 41 43 3b 0a 0a   int turnOnAC;..
170f0 20 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d    desiredAutoCom
17100 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  mit = pOp->p1;. 
17110 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f 70   iRollback = pOp
17120 2d 3e 70 32 3b 0a 20 20 74 75 72 6e 4f 6e 41 43  ->p2;.  turnOnAC
17130 20 3d 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f   = desiredAutoCo
17140 6d 6d 69 74 20 26 26 20 21 64 62 2d 3e 61 75 74  mmit && !db->aut
17150 6f 43 6f 6d 6d 69 74 3b 0a 20 20 61 73 73 65 72  oCommit;.  asser
17160 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  t( desiredAutoCo
17170 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72  mmit==1 || desir
17180 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  edAutoCommit==0 
17190 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73  );.  assert( des
171a0 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
171b0 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d  1 || iRollback==
171c0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  0 );.  assert( d
171d0 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65 3e 30  b->nVdbeActive>0
171e0 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73 74   );  /* At least
171f0 20 74 68 69 73 20 6f 6e 65 20 56 4d 20 69 73 20   this one VM is 
17200 61 63 74 69 76 65 20 2a 2f 0a 20 20 61 73 73 65  active */.  asse
17210 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
17220 20 29 3b 0a 0a 23 69 66 20 30 0a 20 20 69 66 28   );..#if 0.  if(
17230 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 69 52 6f   turnOnAC && iRo
17240 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e 6e 56  llback && db->nV
17250 64 62 65 41 63 74 69 76 65 3e 31 20 29 7b 0a 20  dbeActive>1 ){. 
17260 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e     /* If this in
17270 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d  struction implem
17280 65 6e 74 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20  ents a ROLLBACK 
17290 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72  and other VMs ar
172a0 65 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 72  e.    ** still r
172b0 75 6e 6e 69 6e 67 2c 20 61 6e 64 20 61 20 74 72  unning, and a tr
172c0 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74  ansaction is act
172d0 69 76 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65  ive, return an e
172e0 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 0a  rror indicating.
172f0 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20      ** that the 
17300 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63  other VMs must c
17310 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a  omplete first. .
17320 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74      */.    sqlit
17330 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
17340 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61  zErrMsg, db, "ca
17350 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 72  nnot rollback tr
17360 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20  ansaction - ".  
17370 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65        "SQL state
17380 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73  ments in progres
17390 73 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51  s");.    rc = SQ
173a0 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c  LITE_BUSY;.  }el
173b0 73 65 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20  se.#endif.  if( 
173c0 74 75 72 6e 4f 6e 41 43 20 26 26 20 21 69 52 6f  turnOnAC && !iRo
173d0 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e 6e 56  llback && db->nV
173e0 64 62 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20  dbeWrite>0 ){.  
173f0 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73    /* If this ins
17400 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  truction impleme
17410 6e 74 73 20 61 20 43 4f 4d 4d 49 54 20 61 6e 64  nts a COMMIT and
17420 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65 20 77   other VMs are w
17430 72 69 74 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65  riting.    ** re
17440 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e  turn an error in
17450 64 69 63 61 74 69 6e 67 20 74 68 61 74 20 74 68  dicating that th
17460 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74  e other VMs must
17470 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e   complete first.
17480 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c   .    */.    sql
17490 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
174a0 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
174b0 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72  cannot commit tr
174c0 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20  ansaction - ".  
174d0 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65        "SQL state
174e0 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73  ments in progres
174f0 73 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51  s");.    rc = SQ
17500 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c  LITE_BUSY;.  }el
17510 73 65 20 69 66 28 20 64 65 73 69 72 65 64 41 75  se if( desiredAu
17520 74 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75  toCommit!=db->au
17530 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20  toCommit ){.    
17540 69 66 28 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b  if( iRollback ){
17550 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64  .      assert( d
17560 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
17570 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 73 71 6c  ==1 );.      sql
17580 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28  ite3RollbackAll(
17590 64 62 2c 20 53 51 4c 49 54 45 5f 41 42 4f 52 54  db, SQLITE_ABORT
175a0 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20 20 20  _ROLLBACK);.    
175b0 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
175c0 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20   = 1;.    }else 
175d0 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65  if( (rc = sqlite
175e0 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20  3VdbeCheckFk(p, 
175f0 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  1))!=SQLITE_OK )
17600 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62  {.      goto vdb
17610 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 65  e_return;.    }e
17620 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 61  lse{.      db->a
17630 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29  utoCommit = (u8)
17640 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
17650 74 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c  t;.      if( sql
17660 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d  ite3VdbeHalt(p)=
17670 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
17680 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20          p->pc = 
17690 70 63 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  pc;.        db->
176a0 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38  autoCommit = (u8
176b0 29 28 31 2d 64 65 73 69 72 65 64 41 75 74 6f 43  )(1-desiredAutoC
176c0 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20 20 20 20  ommit);.        
176d0 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c  p->rc = rc = SQL
176e0 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20  ITE_BUSY;.      
176f0 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
17700 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  rn;.      }.    
17710 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62  }.    assert( db
17720 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20  ->nStatement==0 
17730 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6c  );.    sqlite3Cl
17740 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28 64 62  oseSavepoints(db
17750 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 72 63  );.    if( p->rc
17760 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
17770 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
17780 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c 73 65  _DONE;.    }else
17790 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
177a0 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  ITE_ERROR;.    }
177b0 0a 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72  .    goto vdbe_r
177c0 65 74 75 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a  eturn;.  }else{.
177d0 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
177e0 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
177f0 2c 20 64 62 2c 0a 20 20 20 20 20 20 20 20 28 21  , db,.        (!
17800 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
17810 74 29 3f 22 63 61 6e 6e 6f 74 20 73 74 61 72 74  t)?"cannot start
17820 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77   a transaction w
17830 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74  ithin a transact
17840 69 6f 6e 22 3a 28 0a 20 20 20 20 20 20 20 20 28  ion":(.        (
17850 69 52 6f 6c 6c 62 61 63 6b 29 3f 22 63 61 6e 6e  iRollback)?"cann
17860 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f  ot rollback - no
17870 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
17880 61 63 74 69 76 65 22 3a 0a 20 20 20 20 20 20 20  active":.       
17890 20 20 20 20 20 20 20 20 20 20 20 20 22 63 61 6e              "can
178a0 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20  not commit - no 
178b0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61  transaction is a
178c0 63 74 69 76 65 22 29 29 3b 0a 20 20 20 20 20 20  ctive"));.      
178d0 20 20 20 0a 20 20 20 20 72 63 20 3d 20 53 51 4c     .    rc = SQL
178e0 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  ITE_ERROR;.  }. 
178f0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
17900 63 6f 64 65 3a 20 54 72 61 6e 73 61 63 74 69 6f  code: Transactio
17910 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  n P1 P2 P3 P4 P5
17920 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 20 74  .**.** Begin a t
17930 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 64 61  ransaction on da
17940 74 61 62 61 73 65 20 50 31 20 69 66 20 61 20 74  tabase P1 if a t
17950 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f  ransaction is no
17960 74 20 61 6c 72 65 61 64 79 0a 2a 2a 20 61 63 74  t already.** act
17970 69 76 65 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73  ive..** If P2 is
17980 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
17990 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74  a write-transact
179a0 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2c 20  ion is started, 
179b0 6f 72 20 69 66 20 61 20 0a 2a 2a 20 72 65 61 64  or if a .** read
179c0 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
179d0 61 6c 72 65 61 64 79 20 61 63 74 69 76 65 2c 20  already active, 
179e0 69 74 20 69 73 20 75 70 67 72 61 64 65 64 20 74  it is upgraded t
179f0 6f 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61  o a write-transa
17a00 63 74 69 6f 6e 2e 0a 2a 2a 20 49 66 20 50 32 20  ction..** If P2 
17a10 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20  is zero, then a 
17a20 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e  read-transaction
17a30 20 69 73 20 73 74 61 72 74 65 64 2e 0a 2a 2a 0a   is started..**.
17a40 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64  ** P1 is the ind
17a50 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ex of the databa
17a60 73 65 20 66 69 6c 65 20 6f 6e 20 77 68 69 63 68  se file on which
17a70 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
17a80 20 69 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e 20   is.** started. 
17a90 20 49 6e 64 65 78 20 30 20 69 73 20 74 68 65 20   Index 0 is the 
17aa0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
17ab0 6c 65 20 61 6e 64 20 69 6e 64 65 78 20 31 20 69  le and index 1 i
17ac0 73 20 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75 73  s the.** file us
17ad0 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79  ed for temporary
17ae0 20 74 61 62 6c 65 73 2e 20 20 49 6e 64 69 63 65   tables.  Indice
17af0 73 20 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20 61  s of 2 or more a
17b00 72 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61  re used for.** a
17b10 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
17b20 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20 77 72  s..**.** If a wr
17b30 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite-transaction 
17b40 69 73 20 73 74 61 72 74 65 64 20 61 6e 64 20 74  is started and t
17b50 68 65 20 56 64 62 65 2e 75 73 65 73 53 74 6d 74  he Vdbe.usesStmt
17b60 4a 6f 75 72 6e 61 6c 20 66 6c 61 67 20 69 73 0a  Journal flag is.
17b70 2a 2a 20 74 72 75 65 20 28 74 68 69 73 20 66 6c  ** true (this fl
17b80 61 67 20 69 73 20 73 65 74 20 69 66 20 74 68 65  ag is set if the
17b90 20 56 64 62 65 20 6d 61 79 20 6d 6f 64 69 66 79   Vdbe may modify
17ba0 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 72   more than one r
17bb0 6f 77 20 61 6e 64 20 6d 61 79 0a 2a 2a 20 74 68  ow and may.** th
17bc0 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63  row an ABORT exc
17bd0 65 70 74 69 6f 6e 29 2c 20 61 20 73 74 61 74 65  eption), a state
17be0 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
17bf0 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 6f 70 65   may also be ope
17c00 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70 65  ned..** More spe
17c10 63 69 66 69 63 61 6c 6c 79 2c 20 61 20 73 74 61  cifically, a sta
17c20 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
17c30 6f 6e 20 69 73 20 6f 70 65 6e 65 64 20 69 66 66  on is opened iff
17c40 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
17c50 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63   connection is c
17c60 75 72 72 65 6e 74 6c 79 20 6e 6f 74 20 69 6e 20  urrently not in 
17c70 61 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c  autocommit mode,
17c80 20 6f 72 20 69 66 20 74 68 65 72 65 20 61 72 65   or if there are
17c90 20 6f 74 68 65 72 0a 2a 2a 20 61 63 74 69 76 65   other.** active
17ca0 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 41 20 73   statements. A s
17cb0 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
17cc0 74 69 6f 6e 20 61 6c 6c 6f 77 73 20 74 68 65 20  tion allows the 
17cd0 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20  changes made by 
17ce0 74 68 69 73 0a 2a 2a 20 56 44 42 45 20 74 6f 20  this.** VDBE to 
17cf0 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61  be rolled back a
17d00 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 77 69  fter an error wi
17d10 74 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f 20  thout having to 
17d20 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65 0a 2a 2a  roll back the.**
17d30 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63 74   entire transact
17d40 69 6f 6e 2e 20 49 66 20 6e 6f 20 65 72 72 6f 72  ion. If no error
17d50 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2c   is encountered,
17d60 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74   the statement t
17d70 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 77 69  ransaction.** wi
17d80 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ll automatically
17d90 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68 65   commit when the
17da0 20 56 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a   VDBE halts..**.
17db0 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e  ** If P5!=0 then
17dc0 20 74 68 69 73 20 6f 70 63 6f 64 65 20 61 6c 73   this opcode als
17dd0 6f 20 63 68 65 63 6b 73 20 74 68 65 20 73 63 68  o checks the sch
17de0 65 6d 61 20 63 6f 6f 6b 69 65 20 61 67 61 69 6e  ema cookie again
17df0 73 74 20 50 33 0a 2a 2a 20 61 6e 64 20 74 68 65  st P3.** and the
17e00 20 73 63 68 65 6d 61 20 67 65 6e 65 72 61 74 69   schema generati
17e10 6f 6e 20 63 6f 75 6e 74 65 72 20 61 67 61 69 6e  on counter again
17e20 73 74 20 50 34 2e 0a 2a 2a 20 54 68 65 20 63 6f  st P4..** The co
17e30 6f 6b 69 65 20 63 68 61 6e 67 65 73 20 69 74 73  okie changes its
17e40 20 76 61 6c 75 65 20 77 68 65 6e 65 76 65 72 20   value whenever 
17e50 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
17e60 65 6d 61 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20  ema changes..** 
17e70 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 69  This operation i
17e80 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 63 74  s used to detect
17e90 20 77 68 65 6e 20 74 68 61 74 20 74 68 65 20 63   when that the c
17ea0 6f 6f 6b 69 65 20 68 61 73 20 63 68 61 6e 67 65  ookie has change
17eb0 64 0a 2a 2a 20 61 6e 64 20 74 68 61 74 20 74 68  d.** and that th
17ec0 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73  e current proces
17ed0 73 20 6e 65 65 64 73 20 74 6f 20 72 65 72 65 61  s needs to rerea
17ee0 64 20 74 68 65 20 73 63 68 65 6d 61 2e 20 20 49  d the schema.  I
17ef0 66 20 74 68 65 20 73 63 68 65 6d 61 0a 2a 2a 20  f the schema.** 
17f00 63 6f 6f 6b 69 65 20 69 6e 20 50 33 20 64 69 66  cookie in P3 dif
17f10 66 65 72 73 20 66 72 6f 6d 20 74 68 65 20 73 63  fers from the sc
17f20 68 65 6d 61 20 63 6f 6f 6b 69 65 20 69 6e 20 74  hema cookie in t
17f30 68 65 20 64 61 74 61 62 61 73 65 20 68 65 61 64  he database head
17f40 65 72 20 6f 72 0a 2a 2a 20 69 66 20 74 68 65 20  er or.** if the 
17f50 73 63 68 65 6d 61 20 67 65 6e 65 72 61 74 69 6f  schema generatio
17f60 6e 20 63 6f 75 6e 74 65 72 20 69 6e 20 50 34 20  n counter in P4 
17f70 64 69 66 66 65 72 73 20 66 72 6f 6d 20 74 68 65  differs from the
17f80 20 63 75 72 72 65 6e 74 0a 2a 2a 20 67 65 6e 65   current.** gene
17f90 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2c 20  ration counter, 
17fa0 74 68 65 6e 20 61 6e 20 53 51 4c 49 54 45 5f 53  then an SQLITE_S
17fb0 43 48 45 4d 41 20 65 72 72 6f 72 20 69 73 20 72  CHEMA error is r
17fc0 61 69 73 65 64 20 61 6e 64 20 65 78 65 63 75 74  aised and execut
17fd0 69 6f 6e 0a 2a 2a 20 68 61 6c 74 73 2e 20 20 54  ion.** halts.  T
17fe0 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  he sqlite3_step(
17ff0 29 20 77 72 61 70 70 65 72 20 66 75 6e 63 74 69  ) wrapper functi
18000 6f 6e 20 6d 69 67 68 74 20 74 68 65 6e 20 72 65  on might then re
18010 70 72 65 70 61 72 65 20 74 68 65 0a 2a 2a 20 73  prepare the.** s
18020 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 72 65 72  tatement and rer
18030 75 6e 20 69 74 20 66 72 6f 6d 20 74 68 65 20 62  un it from the b
18040 65 67 69 6e 6e 69 6e 67 2e 0a 2a 2f 0a 63 61 73  eginning..*/.cas
18050 65 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e  e OP_Transaction
18060 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a 70 42 74  : {.  Btree *pBt
18070 3b 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20  ;.  int iMeta;. 
18080 20 69 6e 74 20 69 47 65 6e 3b 0a 0a 20 20 61 73   int iGen;..  as
18090 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
180a0 65 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  er );.  assert( 
180b0 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 7c  p->readOnly==0 |
180c0 7c 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a  | pOp->p2==0 );.
180d0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
180e0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
180f0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
18100 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
18110 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f  p->btreeMask, pO
18120 70 2d 3e 70 31 29 20 29 3b 0a 20 20 69 66 28 20  p->p1) );.  if( 
18130 70 4f 70 2d 3e 70 32 20 26 26 20 28 64 62 2d 3e  pOp->p2 && (db->
18140 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 51  flags & SQLITE_Q
18150 75 65 72 79 4f 6e 6c 79 29 21 3d 30 20 29 7b 0a  ueryOnly)!=0 ){.
18160 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
18170 52 45 41 44 4f 4e 4c 59 3b 0a 20 20 20 20 67 6f  READONLY;.    go
18180 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
18190 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 42 74  error;.  }.  pBt
181a0 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
181b0 70 31 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20  p1].pBt;..  if( 
181c0 70 42 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  pBt ){.    rc = 
181d0 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69  sqlite3BtreeBegi
181e0 6e 54 72 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d  nTrans(pBt, pOp-
181f0 3e 70 32 29 3b 0a 20 20 20 20 69 66 28 20 72 63  >p2);.    if( rc
18200 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b  ==SQLITE_BUSY ){
18210 0a 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70  .      p->pc = p
18220 63 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20 3d  c;.      p->rc =
18230 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
18240 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64  Y;.      goto vd
18250 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d  be_return;.    }
18260 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c  .    if( rc!=SQL
18270 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
18280 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
18290 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a  o_error;.    }..
182a0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20      if( pOp->p2 
182b0 26 26 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f  && p->usesStmtJo
182c0 75 72 6e 61 6c 20 0a 20 20 20 20 20 26 26 20 28  urnal .     && (
182d0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d  db->autoCommit==
182e0 30 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65  0 || db->nVdbeRe
182f0 61 64 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20 20  ad>1) .    ){.  
18300 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
18310 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e  te3BtreeIsInTran
18320 73 28 70 42 74 29 20 29 3b 0a 20 20 20 20 20 20  s(pBt) );.      
18330 69 66 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e  if( p->iStatemen
18340 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  t==0 ){.        
18350 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61  assert( db->nSta
18360 74 65 6d 65 6e 74 3e 3d 30 20 26 26 20 64 62 2d  tement>=0 && db-
18370 3e 6e 53 61 76 65 70 6f 69 6e 74 3e 3d 30 20 29  >nSavepoint>=0 )
18380 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53  ;.        db->nS
18390 74 61 74 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20 20  tatement++; .   
183a0 20 20 20 20 20 70 2d 3e 69 53 74 61 74 65 6d 65       p->iStateme
183b0 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f  nt = db->nSavepo
183c0 69 6e 74 20 2b 20 64 62 2d 3e 6e 53 74 61 74 65  int + db->nState
183d0 6d 65 6e 74 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  ment;.      }.. 
183e0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
183f0 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64  3VtabSavepoint(d
18400 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  b, SAVEPOINT_BEG
18410 49 4e 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e  IN, p->iStatemen
18420 74 2d 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20  t-1);.      if( 
18430 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
18440 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
18450 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 53  lite3BtreeBeginS
18460 74 6d 74 28 70 42 74 2c 20 70 2d 3e 69 53 74 61  tmt(pBt, p->iSta
18470 74 65 6d 65 6e 74 29 3b 0a 20 20 20 20 20 20 7d  tement);.      }
18480 0a 0a 20 20 20 20 20 20 2f 2a 20 53 74 6f 72 65  ..      /* Store
18490 20 74 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c   the current val
184a0 75 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ue of the databa
184b0 73 65 20 68 61 6e 64 6c 65 73 20 64 65 66 65 72  se handles defer
184c0 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 0a 20  red constraint. 
184d0 20 20 20 20 20 2a 2a 20 63 6f 75 6e 74 65 72 2e       ** counter.
184e0 20 49 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e   If the statemen
184f0 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65  t transaction ne
18500 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64  eds to be rolled
18510 20 62 61 63 6b 2c 0a 20 20 20 20 20 20 2a 2a 20   back,.      ** 
18520 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 69  the value of thi
18530 73 20 63 6f 75 6e 74 65 72 20 6e 65 65 64 73 20  s counter needs 
18540 74 6f 20 62 65 20 72 65 73 74 6f 72 65 64 20 74  to be restored t
18550 6f 6f 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 2d  oo.  */.      p-
18560 3e 6e 53 74 6d 74 44 65 66 43 6f 6e 73 20 3d 20  >nStmtDefCons = 
18570 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
18580 73 3b 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d  s;.      p->nStm
18590 74 44 65 66 49 6d 6d 43 6f 6e 73 20 3d 20 64 62  tDefImmCons = db
185a0 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
185b0 6e 73 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  ns;.    }..    /
185c0 2a 20 47 61 74 68 65 72 20 74 68 65 20 73 63 68  * Gather the sch
185d0 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62  ema version numb
185e0 65 72 20 66 6f 72 20 63 68 65 63 6b 69 6e 67 20  er for checking 
185f0 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74  */.    sqlite3Bt
18600 72 65 65 47 65 74 4d 65 74 61 28 70 42 74 2c 20  reeGetMeta(pBt, 
18610 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52  BTREE_SCHEMA_VER
18620 53 49 4f 4e 2c 20 28 75 33 32 20 2a 29 26 69 4d  SION, (u32 *)&iM
18630 65 74 61 29 3b 0a 20 20 20 20 69 47 65 6e 20 3d  eta);.    iGen =
18640 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
18650 5d 2e 70 53 63 68 65 6d 61 2d 3e 69 47 65 6e 65  ].pSchema->iGene
18660 72 61 74 69 6f 6e 3b 0a 20 20 7d 65 6c 73 65 7b  ration;.  }else{
18670 0a 20 20 20 20 69 47 65 6e 20 3d 20 69 4d 65 74  .    iGen = iMet
18680 61 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 61 73 73  a = 0;.  }.  ass
18690 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  ert( pOp->p5==0 
186a0 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  || pOp->p4type==
186b0 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 69 66  P4_INT32 );.  if
186c0 28 20 70 4f 70 2d 3e 70 35 20 26 26 20 28 69 4d  ( pOp->p5 && (iM
186d0 65 74 61 21 3d 70 4f 70 2d 3e 70 33 20 7c 7c 20  eta!=pOp->p3 || 
186e0 69 47 65 6e 21 3d 70 4f 70 2d 3e 70 34 2e 69 29  iGen!=pOp->p4.i)
186f0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44   ){.    sqlite3D
18700 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72  bFree(db, p->zEr
18710 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45  rMsg);.    p->zE
18720 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 44  rrMsg = sqlite3D
18730 62 53 74 72 44 75 70 28 64 62 2c 20 22 64 61 74  bStrDup(db, "dat
18740 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73  abase schema has
18750 20 63 68 61 6e 67 65 64 22 29 3b 0a 20 20 20 20   changed");.    
18760 2f 2a 20 49 66 20 74 68 65 20 73 63 68 65 6d 61  /* If the schema
18770 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65  -cookie from the
18780 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d   database file m
18790 61 74 63 68 65 73 20 74 68 65 20 63 6f 6f 6b 69  atches the cooki
187a0 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f 72 65 64  e .    ** stored
187b0 20 77 69 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d   with the in-mem
187c0 6f 72 79 20 72 65 70 72 65 73 65 6e 74 61 74 69  ory representati
187d0 6f 6e 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61  on of the schema
187e0 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20  , do.    ** not 
187f0 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68 65 6d  reload the schem
18800 61 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  a from the datab
18810 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a  ase file..    **
18820 0a 20 20 20 20 2a 2a 20 49 66 20 76 69 72 74 75  .    ** If virtu
18830 61 6c 2d 74 61 62 6c 65 73 20 61 72 65 20 69 6e  al-tables are in
18840 20 75 73 65 2c 20 74 68 69 73 20 69 73 20 6e 6f   use, this is no
18850 74 20 6a 75 73 74 20 61 6e 20 6f 70 74 69 6d 69  t just an optimi
18860 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f  zation..    ** O
18870 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73  ften, v-tables s
18880 74 6f 72 65 20 74 68 65 69 72 20 64 61 74 61 20  tore their data 
18890 69 6e 20 6f 74 68 65 72 20 53 51 4c 69 74 65 20  in other SQLite 
188a0 74 61 62 6c 65 73 2c 20 77 68 69 63 68 0a 20 20  tables, which.  
188b0 20 20 2a 2a 20 61 72 65 20 71 75 65 72 69 65 64    ** are queried
188c0 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65   from within xNe
188d0 78 74 28 29 20 61 6e 64 20 6f 74 68 65 72 20 76  xt() and other v
188e0 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 20 75  -table methods u
188f0 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70 72 65 70  sing.    ** prep
18900 61 72 65 64 20 71 75 65 72 69 65 73 2e 20 49 66  ared queries. If
18910 20 73 75 63 68 20 61 20 71 75 65 72 79 20 69 73   such a query is
18920 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65   out-of-date, we
18930 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a   do not want to.
18940 20 20 20 20 2a 2a 20 64 69 73 63 61 72 64 20 74      ** discard t
18950 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
18960 6d 61 2c 20 61 73 20 74 68 65 20 75 73 65 72 20  ma, as the user 
18970 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e  code implementin
18980 67 20 74 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74  g the.    ** v-t
18990 61 62 6c 65 20 77 6f 75 6c 64 20 68 61 76 65 20  able would have 
189a0 74 6f 20 62 65 20 72 65 61 64 79 20 66 6f 72 20  to be ready for 
189b0 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
189c0 20 73 74 72 75 63 74 75 72 65 20 69 74 73 65 6c   structure itsel
189d0 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65 20 69  f.    ** to be i
189e0 6e 76 61 6c 69 64 61 74 65 64 20 77 68 65 6e 65  nvalidated whene
189f0 76 65 72 20 73 71 6c 69 74 65 33 5f 73 74 65 70  ver sqlite3_step
18a00 28 29 20 69 73 20 63 61 6c 6c 65 64 20 66 72 6f  () is called fro
18a10 6d 20 77 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a  m within .    **
18a20 20 61 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f   a v-table metho
18a30 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  d..    */.    if
18a40 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  ( db->aDb[pOp->p
18a50 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  1].pSchema->sche
18a60 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61  ma_cookie!=iMeta
18a70 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
18a80 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28  3ResetOneSchema(
18a90 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20  db, pOp->p1);.  
18aa0 20 20 7d 0a 20 20 20 20 70 2d 3e 65 78 70 69 72    }.    p->expir
18ab0 65 64 20 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d  ed = 1;.    rc =
18ac0 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a   SQLITE_SCHEMA;.
18ad0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
18ae0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 64 43  /* Opcode: ReadC
18af0 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a  ookie P1 P2 P3 *
18b00 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f   *.**.** Read co
18b10 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 33 20 66  okie number P3 f
18b20 72 6f 6d 20 64 61 74 61 62 61 73 65 20 50 31 20  rom database P1 
18b30 61 6e 64 20 77 72 69 74 65 20 69 74 20 69 6e 74  and write it int
18b40 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
18b50 2a 20 50 33 3d 3d 31 20 69 73 20 74 68 65 20 73  * P3==1 is the s
18b60 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20  chema version.  
18b70 50 33 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74  P3==2 is the dat
18b80 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a  abase format..**
18b90 20 50 33 3d 3d 33 20 69 73 20 74 68 65 20 72 65   P3==3 is the re
18ba0 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20  commended pager 
18bb0 63 61 63 68 65 20 73 69 7a 65 2c 20 61 6e 64 20  cache size, and 
18bc0 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30  so forth.  P1==0
18bd0 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20   is.** the main 
18be0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
18bf0 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20 64  d P1==1 is the d
18c00 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65  atabase file use
18c10 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65  d to store.** te
18c20 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a  mporary tables..
18c30 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73 74  **.** There must
18c40 20 62 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20   be a read-lock 
18c50 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
18c60 28 65 69 74 68 65 72 20 61 20 74 72 61 6e 73 61  (either a transa
18c70 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65  ction.** must be
18c80 20 73 74 61 72 74 65 64 20 6f 72 20 74 68 65 72   started or ther
18c90 65 20 6d 75 73 74 20 62 65 20 61 6e 20 6f 70 65  e must be an ope
18ca0 6e 20 63 75 72 73 6f 72 29 20 62 65 66 6f 72 65  n cursor) before
18cb0 0a 2a 2a 20 65 78 65 63 75 74 69 6e 67 20 74 68  .** executing th
18cc0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  is instruction..
18cd0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 64 43  */.case OP_ReadC
18ce0 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 20  ookie: {        
18cf0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
18d00 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
18d10 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20  nt iMeta;.  int 
18d20 69 44 62 3b 0a 20 20 69 6e 74 20 69 43 6f 6f 6b  iDb;.  int iCook
18d30 69 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  ie;..  assert( p
18d40 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20  ->bIsReader );. 
18d50 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a   iDb = pOp->p1;.
18d60 20 20 69 43 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d    iCookie = pOp-
18d70 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p3;.  assert( p
18d80 4f 70 2d 3e 70 33 3c 53 51 4c 49 54 45 5f 4e 5f  Op->p3<SQLITE_N_
18d90 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20  BTREE_META );.  
18da0 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26  assert( iDb>=0 &
18db0 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b  & iDb<db->nDb );
18dc0 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61  .  assert( db->a
18dd0 44 62 5b 69 44 62 5d 2e 70 42 74 21 3d 30 20 29  Db[iDb].pBt!=0 )
18de0 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61  ;.  assert( DbMa
18df0 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
18e00 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 0a 20 20  ask, iDb) );..  
18e10 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d  sqlite3BtreeGetM
18e20 65 74 61 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d  eta(db->aDb[iDb]
18e30 2e 70 42 74 2c 20 69 43 6f 6f 6b 69 65 2c 20 28  .pBt, iCookie, (
18e40 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20  u32 *)&iMeta);. 
18e50 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 65   pOut->u.i = iMe
18e60 74 61 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ta;.  break;.}..
18e70 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 74 43 6f  /* Opcode: SetCo
18e80 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a 20  okie P1 P2 P3 * 
18e90 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68  *.**.** Write th
18ea0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
18eb0 69 73 74 65 72 20 50 33 20 28 69 6e 74 65 72 70  ister P3 (interp
18ec0 72 65 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65  reted as an inte
18ed0 67 65 72 29 0a 2a 2a 20 69 6e 74 6f 20 63 6f 6f  ger).** into coo
18ee0 6b 69 65 20 6e 75 6d 62 65 72 20 50 32 20 6f 66  kie number P2 of
18ef0 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 50   database P1.  P
18f00 32 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68 65  2==1 is the sche
18f10 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 0a 2a 2a  ma version.  .**
18f20 20 50 32 3d 3d 32 20 69 73 20 74 68 65 20 64 61   P2==2 is the da
18f30 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 20 50  tabase format. P
18f40 32 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f  2==3 is the reco
18f50 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63 61  mmended pager ca
18f60 63 68 65 20 0a 2a 2a 20 73 69 7a 65 2c 20 61 6e  che .** size, an
18f70 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d  d so forth.  P1=
18f80 3d 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64  =0 is the main d
18f90 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
18fa0 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20 0a 2a   P1==1 is the .*
18fb0 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  * database file 
18fc0 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 65  used to store te
18fd0 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a  mporary tables..
18fe0 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73 61 63 74  **.** A transact
18ff0 69 6f 6e 20 6d 75 73 74 20 62 65 20 73 74 61 72  ion must be star
19000 74 65 64 20 62 65 66 6f 72 65 20 65 78 65 63 75  ted before execu
19010 74 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65  ting this opcode
19020 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74  ..*/.case OP_Set
19030 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20  Cookie: {       
19040 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 44 62 20 2a  /* in3 */.  Db *
19050 70 44 62 3b 0a 20 20 61 73 73 65 72 74 28 20 70  pDb;.  assert( p
19060 4f 70 2d 3e 70 32 3c 53 51 4c 49 54 45 5f 4e 5f  Op->p2<SQLITE_N_
19070 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20  BTREE_META );.  
19080 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
19090 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
190a0 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
190b0 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
190c0 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d  >btreeMask, pOp-
190d0 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74  >p1) );.  assert
190e0 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
190f0 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d   );.  pDb = &db-
19100 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  >aDb[pOp->p1];. 
19110 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42   assert( pDb->pB
19120 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  t!=0 );.  assert
19130 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d  ( sqlite3SchemaM
19140 75 74 65 78 48 65 6c 64 28 64 62 2c 20 70 4f 70  utexHeld(db, pOp
19150 2d 3e 70 31 2c 20 30 29 20 29 3b 0a 20 20 70 49  ->p1, 0) );.  pI
19160 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
19170 70 33 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  p3];.  sqlite3Vd
19180 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
19190 70 49 6e 33 29 3b 0a 20 20 2f 2a 20 53 65 65 20  pIn3);.  /* See 
191a0 6e 6f 74 65 20 61 62 6f 75 74 20 69 6e 64 65 78  note about index
191b0 20 73 68 69 66 74 69 6e 67 20 6f 6e 20 4f 50 5f   shifting on OP_
191c0 52 65 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20  ReadCookie */.  
191d0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
191e0 65 55 70 64 61 74 65 4d 65 74 61 28 70 44 62 2d  eUpdateMeta(pDb-
191f0 3e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 28  >pBt, pOp->p2, (
19200 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a  int)pIn3->u.i);.
19210 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42    if( pOp->p2==B
19220 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53  TREE_SCHEMA_VERS
19230 49 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68  ION ){.    /* Wh
19240 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f  en the schema co
19250 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c 20 72 65  okie changes, re
19260 63 6f 72 64 20 74 68 65 20 6e 65 77 20 63 6f 6f  cord the new coo
19270 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a  kie internally *
19280 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65  /.    pDb->pSche
19290 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69  ma->schema_cooki
192a0 65 20 3d 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75  e = (int)pIn3->u
192b0 2e 69 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67  .i;.    db->flag
192c0 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65  s |= SQLITE_Inte
192d0 72 6e 43 68 61 6e 67 65 73 3b 0a 20 20 7d 65 6c  rnChanges;.  }el
192e0 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d  se if( pOp->p2==
192f0 42 54 52 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41  BTREE_FILE_FORMA
19300 54 20 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f  T ){.    /* Reco
19310 72 64 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68  rd changes in th
19320 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f  e file format */
19330 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d  .    pDb->pSchem
19340 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d  a->file_format =
19350 20 28 75 38 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a   (u8)pIn3->u.i;.
19360 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70    }.  if( pOp->p
19370 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49  1==1 ){.    /* I
19380 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 70 72  nvalidate all pr
19390 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
193a0 73 20 77 68 65 6e 65 76 65 72 20 74 68 65 20 54  s whenever the T
193b0 45 4d 50 20 64 61 74 61 62 61 73 65 0a 20 20 20  EMP database.   
193c0 20 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 63 68   ** schema is ch
193d0 61 6e 67 65 64 2e 20 20 54 69 63 6b 65 74 20 23  anged.  Ticket #
193e0 31 36 34 34 20 2a 2f 0a 20 20 20 20 73 71 6c 69  1644 */.    sqli
193f0 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65  te3ExpirePrepare
19400 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b  dStatements(db);
19410 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20  .    p->expired 
19420 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  = 0;.  }.  break
19430 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
19440 4f 70 65 6e 52 65 61 64 20 50 31 20 50 32 20 50  OpenRead P1 P2 P
19450 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
19460 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62  sis: root=P2 iDb
19470 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61  =P3.**.** Open a
19480 20 72 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f   read-only curso
19490 72 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61  r for the databa
194a0 73 65 20 74 61 62 6c 65 20 77 68 6f 73 65 20 72  se table whose r
194b0 6f 6f 74 20 70 61 67 65 20 69 73 0a 2a 2a 20 50  oot page is.** P
194c0 32 20 69 6e 20 61 20 64 61 74 61 62 61 73 65 20  2 in a database 
194d0 66 69 6c 65 2e 20 20 54 68 65 20 64 61 74 61 62  file.  The datab
194e0 61 73 65 20 66 69 6c 65 20 69 73 20 64 65 74 65  ase file is dete
194f0 72 6d 69 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a  rmined by P3. .*
19500 2a 20 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68  * P3==0 means th
19510 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c  e main database,
19520 20 50 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65   P3==1 means the
19530 20 64 61 74 61 62 61 73 65 20 75 73 65 64 20 66   database used f
19540 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79  or .** temporary
19550 20 74 61 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e   tables, and P3>
19560 31 20 6d 65 61 6e 73 20 75 73 65 64 20 74 68 65  1 means used the
19570 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 61   corresponding a
19580 74 74 61 63 68 65 64 0a 2a 2a 20 64 61 74 61 62  ttached.** datab
19590 61 73 65 2e 20 20 47 69 76 65 20 74 68 65 20 6e  ase.  Give the n
195a0 65 77 20 63 75 72 73 6f 72 20 61 6e 20 69 64 65  ew cursor an ide
195b0 6e 74 69 66 69 65 72 20 6f 66 20 50 31 2e 20 20  ntifier of P1.  
195c0 54 68 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73  The P1.** values
195d0 20 6e 65 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e   need not be con
195e0 74 69 67 75 6f 75 73 20 62 75 74 20 61 6c 6c 20  tiguous but all 
195f0 50 31 20 76 61 6c 75 65 73 20 73 68 6f 75 6c 64  P1 values should
19600 20 62 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65   be small intege
19610 72 73 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20  rs..** It is an 
19620 65 72 72 6f 72 20 66 6f 72 20 50 31 20 74 6f 20  error for P1 to 
19630 62 65 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a  be negative..**.
19640 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e  ** If P5!=0 then
19650 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74   use the content
19660 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20   of register P2 
19670 61 73 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  as the root page
19680 2c 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 76 61 6c  , not.** the val
19690 75 65 20 6f 66 20 50 32 20 69 74 73 65 6c 66 2e  ue of P2 itself.
196a0 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 69 6c  .**.** There wil
196b0 6c 20 62 65 20 61 20 72 65 61 64 20 6c 6f 63 6b  l be a read lock
196c0 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
196d0 20 77 68 65 6e 65 76 65 72 20 74 68 65 72 65 20   whenever there 
196e0 69 73 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75  is an.** open cu
196f0 72 73 6f 72 2e 20 20 49 66 20 74 68 65 20 64 61  rsor.  If the da
19700 74 61 62 61 73 65 20 77 61 73 20 75 6e 6c 6f 63  tabase was unloc
19710 6b 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69  ked prior to thi
19720 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a  s instruction.**
19730 20 74 68 65 6e 20 61 20 72 65 61 64 20 6c 6f 63   then a read loc
19740 6b 20 69 73 20 61 63 71 75 69 72 65 64 20 61 73  k is acquired as
19750 20 70 61 72 74 20 6f 66 20 74 68 69 73 20 69 6e   part of this in
19760 73 74 72 75 63 74 69 6f 6e 2e 20 20 41 20 72 65  struction.  A re
19770 61 64 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77  ad.** lock allow
19780 73 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 65  s other processe
19790 73 20 74 6f 20 72 65 61 64 20 74 68 65 20 64 61  s to read the da
197a0 74 61 62 61 73 65 20 62 75 74 20 70 72 6f 68 69  tabase but prohi
197b0 62 69 74 73 0a 2a 2a 20 61 6e 79 20 6f 74 68 65  bits.** any othe
197c0 72 20 70 72 6f 63 65 73 73 20 66 72 6f 6d 20 6d  r process from m
197d0 6f 64 69 66 79 69 6e 67 20 74 68 65 20 64 61 74  odifying the dat
197e0 61 62 61 73 65 2e 20 20 54 68 65 20 72 65 61 64  abase.  The read
197f0 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 72 65 6c 65   lock is.** rele
19800 61 73 65 64 20 77 68 65 6e 20 61 6c 6c 20 63 75  ased when all cu
19810 72 73 6f 72 73 20 61 72 65 20 63 6c 6f 73 65 64  rsors are closed
19820 2e 20 20 49 66 20 74 68 69 73 20 69 6e 73 74 72  .  If this instr
19830 75 63 74 69 6f 6e 20 61 74 74 65 6d 70 74 73 0a  uction attempts.
19840 2a 2a 20 74 6f 20 67 65 74 20 61 20 72 65 61 64  ** to get a read
19850 20 6c 6f 63 6b 20 62 75 74 20 66 61 69 6c 73 2c   lock but fails,
19860 20 74 68 65 20 73 63 72 69 70 74 20 74 65 72 6d   the script term
19870 69 6e 61 74 65 73 20 77 69 74 68 20 61 6e 0a 2a  inates with an.*
19880 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20 65 72  * SQLITE_BUSY er
19890 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  ror code..**.** 
198a0 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79  The P4 value may
198b0 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e   be either an in
198c0 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29  teger (P4_INT32)
198d0 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   or a pointer to
198e0 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74  .** a KeyInfo st
198f0 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49  ructure (P4_KEYI
19900 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61  NFO). If it is a
19910 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65   pointer to a Ke
19920 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74  yInfo .** struct
19930 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73  ure, then said s
19940 74 72 75 63 74 75 72 65 20 64 65 66 69 6e 65 73  tructure defines
19950 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64   the content and
19960 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73   collating .** s
19970 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69  equence of the i
19980 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65  ndex being opene
19990 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66  d. Otherwise, if
199a0 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65   P4 is an intege
199b0 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20  r .** value, it 
199c0 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75  is set to the nu
199d0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
199e0 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a 2a  in the table..**
199f0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4f 70  .** See also: Op
19a00 65 6e 57 72 69 74 65 2c 20 52 65 6f 70 65 6e 49  enWrite, ReopenI
19a10 64 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  dx.*/./* Opcode:
19a20 20 52 65 6f 70 65 6e 49 64 78 20 50 31 20 50 32   ReopenIdx P1 P2
19a30 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
19a40 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69  opsis: root=P2 i
19a50 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20  Db=P3.**.** The 
19a60 52 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64 65  ReopenIdx opcode
19a70 20 77 6f 72 6b 73 20 65 78 61 63 74 6c 79 20 6c   works exactly l
19a80 69 6b 65 20 52 65 61 64 4f 70 65 6e 20 65 78 63  ike ReadOpen exc
19a90 65 70 74 20 74 68 61 74 20 69 74 20 66 69 72 73  ept that it firs
19aa0 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20 73  t.** checks to s
19ab0 65 65 20 69 66 20 74 68 65 20 63 75 72 73 6f 72  ee if the cursor
19ac0 20 6f 6e 20 50 31 20 69 73 20 61 6c 72 65 61 64   on P1 is alread
19ad0 79 20 6f 70 65 6e 20 77 69 74 68 20 61 20 72 6f  y open with a ro
19ae0 6f 74 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65  ot page.** numbe
19af0 72 20 6f 66 20 50 32 20 61 6e 64 20 69 66 20 69  r of P2 and if i
19b00 74 20 69 73 20 74 68 69 73 20 6f 70 63 6f 64 65  t is this opcode
19b10 20 62 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70   becomes a no-op
19b20 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
19b30 73 2c 0a 2a 2a 20 69 66 20 74 68 65 20 63 75 72  s,.** if the cur
19b40 73 6f 72 20 69 73 20 61 6c 72 65 61 64 79 20 6f  sor is already o
19b50 70 65 6e 2c 20 64 6f 20 6e 6f 74 20 72 65 6f 70  pen, do not reop
19b60 65 6e 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  en it..**.** The
19b70 20 52 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64   ReopenIdx opcod
19b80 65 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75 73  e may only be us
19b90 65 64 20 77 69 74 68 20 50 35 3d 3d 30 20 61 6e  ed with P5==0 an
19ba0 64 20 77 69 74 68 20 50 34 20 62 65 69 6e 67 0a  d with P4 being.
19bb0 2a 2a 20 61 20 50 34 5f 4b 45 59 49 4e 46 4f 20  ** a P4_KEYINFO 
19bc0 6f 62 6a 65 63 74 2e 20 20 46 75 72 74 68 65 72  object.  Further
19bd0 6d 6f 72 65 2c 20 74 68 65 20 50 33 20 76 61 6c  more, the P3 val
19be0 75 65 20 6d 75 73 74 20 62 65 20 74 68 65 20 73  ue must be the s
19bf0 61 6d 65 20 61 73 0a 2a 2a 20 65 76 65 72 79 20  ame as.** every 
19c00 6f 74 68 65 72 20 52 65 6f 70 65 6e 49 64 78 20  other ReopenIdx 
19c10 6f 72 20 4f 70 65 6e 52 65 61 64 20 66 6f 72 20  or OpenRead for 
19c20 74 68 65 20 73 61 6d 65 20 63 75 72 73 6f 72 20  the same cursor 
19c30 6e 75 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 53 65  number..**.** Se
19c40 65 20 74 68 65 20 4f 70 65 6e 52 65 61 64 20 6f  e the OpenRead o
19c50 70 63 6f 64 65 20 64 6f 63 75 6d 65 6e 74 61 74  pcode documentat
19c60 69 6f 6e 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ion for addition
19c70 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
19c80 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  */./* Opcode: Op
19c90 65 6e 57 72 69 74 65 20 50 31 20 50 32 20 50 33  enWrite P1 P2 P3
19ca0 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
19cb0 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d  is: root=P2 iDb=
19cc0 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20  P3.**.** Open a 
19cd0 72 65 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f  read/write curso
19ce0 72 20 6e 61 6d 65 64 20 50 31 20 6f 6e 20 74 68  r named P1 on th
19cf0 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
19d00 20 77 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20 70   whose root.** p
19d10 61 67 65 20 69 73 20 50 32 2e 20 20 4f 72 20 69  age is P2.  Or i
19d20 66 20 50 35 21 3d 30 20 75 73 65 20 74 68 65 20  f P5!=0 use the 
19d30 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
19d40 74 65 72 20 50 32 20 74 6f 20 66 69 6e 64 20 74  ter P2 to find t
19d50 68 65 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 2e  he.** root page.
19d60 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61  .**.** The P4 va
19d70 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68 65  lue may be eithe
19d80 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34  r an integer (P4
19d90 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69  _INT32) or a poi
19da0 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79  nter to.** a Key
19db0 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 28  Info structure (
19dc0 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20  P4_KEYINFO). If 
19dd0 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  it is a pointer 
19de0 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a  to a KeyInfo .**
19df0 20 73 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e   structure, then
19e00 20 73 61 69 64 20 73 74 72 75 63 74 75 72 65 20   said structure 
19e10 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74  defines the cont
19e20 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e  ent and collatin
19e30 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f  g .** sequence o
19e40 66 20 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e  f the index bein
19e50 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77  g opened. Otherw
19e60 69 73 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e  ise, if P4 is an
19e70 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c   integer .** val
19e80 75 65 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f  ue, it is set to
19e90 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
19ea0 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61  olumns in the ta
19eb0 62 6c 65 2c 20 6f 72 20 74 6f 20 74 68 65 0a 2a  ble, or to the.*
19ec0 2a 20 6c 61 72 67 65 73 74 20 69 6e 64 65 78 20  * largest index 
19ed0 6f 66 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 6f 66  of any column of
19ee0 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
19ef0 69 73 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64  is actually used
19f00 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ..**.** This ins
19f10 74 72 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6a  truction works j
19f20 75 73 74 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61  ust like OpenRea
19f30 64 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74  d except that it
19f40 20 6f 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f   opens the curso
19f50 72 0a 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72 69  r.** in read/wri
19f60 74 65 20 6d 6f 64 65 2e 20 20 46 6f 72 20 61 20  te mode.  For a 
19f70 67 69 76 65 6e 20 74 61 62 6c 65 2c 20 74 68 65  given table, the
19f80 72 65 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f 72  re can be one or
19f90 20 6d 6f 72 65 20 72 65 61 64 2d 6f 6e 6c 79 0a   more read-only.
19fa0 2a 2a 20 63 75 72 73 6f 72 73 20 6f 72 20 61 20  ** cursors or a 
19fb0 73 69 6e 67 6c 65 20 72 65 61 64 2f 77 72 69 74  single read/writ
19fc0 65 20 63 75 72 73 6f 72 20 62 75 74 20 6e 6f 74  e cursor but not
19fd0 20 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65   both..**.** See
19fe0 20 61 6c 73 6f 20 4f 70 65 6e 52 65 61 64 2e 0a   also OpenRead..
19ff0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6f 70 65  */.case OP_Reope
1a000 6e 49 64 78 3a 20 7b 0a 20 20 56 64 62 65 43 75  nIdx: {.  VdbeCu
1a010 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a 20 20 61  rsor *pCur;..  a
1a020 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d  ssert( pOp->p5==
1a030 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1a040 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b  Op->p4type==P4_K
1a050 45 59 49 4e 46 4f 20 29 3b 0a 20 20 70 43 75 72  EYINFO );.  pCur
1a060 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1a070 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 43 75 72  >p1];.  if( pCur
1a080 20 26 26 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f   && pCur->pgnoRo
1a090 6f 74 3d 3d 28 75 33 32 29 70 4f 70 2d 3e 70 32  ot==(u32)pOp->p2
1a0a0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
1a0b0 70 43 75 72 2d 3e 69 44 62 3d 3d 70 4f 70 2d 3e  pCur->iDb==pOp->
1a0c0 70 33 20 29 3b 20 20 20 20 20 20 2f 2a 20 47 75  p3 );      /* Gu
1a0d0 61 72 61 6e 74 65 65 64 20 62 79 20 74 68 65 20  aranteed by the 
1a0e0 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a  code generator *
1a0f0 2f 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  /.    break;.  }
1a100 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63 75 72  .  /* If the cur
1a110 73 6f 72 20 69 73 20 6e 6f 74 20 63 75 72 72 65  sor is not curre
1a120 6e 74 6c 79 20 6f 70 65 6e 20 6f 72 20 69 73 20  ntly open or is 
1a130 6f 70 65 6e 20 6f 6e 20 61 20 64 69 66 66 65 72  open on a differ
1a140 65 6e 74 0a 20 20 2a 2a 20 69 6e 64 65 78 2c 20  ent.  ** index, 
1a150 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
1a160 68 20 69 6e 74 6f 20 4f 50 5f 4f 70 65 6e 52 65  h into OP_OpenRe
1a170 61 64 20 74 6f 20 66 6f 72 63 65 20 61 20 72 65  ad to force a re
1a180 6f 70 65 6e 20 2a 2f 0a 7d 0a 63 61 73 65 20 4f  open */.}.case O
1a190 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73 65  P_OpenRead:.case
1a1a0 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a 20 7b   OP_OpenWrite: {
1a1b0 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20  .  int nField;. 
1a1c0 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
1a1d0 66 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20  fo;.  int p2;.  
1a1e0 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 77  int iDb;.  int w
1a1f0 72 46 6c 61 67 3b 0a 20 20 42 74 72 65 65 20 2a  rFlag;.  Btree *
1a200 70 58 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  pX;.  VdbeCursor
1a210 20 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a 70 44   *pCur;.  Db *pD
1a220 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 28 70  b;..  assert( (p
1a230 4f 70 2d 3e 70 35 26 28 4f 50 46 4c 41 47 5f 50  Op->p5&(OPFLAG_P
1a240 32 49 53 52 45 47 7c 4f 50 46 4c 41 47 5f 42 55  2ISREG|OPFLAG_BU
1a250 4c 4b 43 53 52 29 29 3d 3d 70 4f 70 2d 3e 70 35  LKCSR))==pOp->p5
1a260 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1a270 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70  p->opcode==OP_Op
1a280 65 6e 57 72 69 74 65 20 7c 7c 20 70 4f 70 2d 3e  enWrite || pOp->
1a290 70 35 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  p5==0 );.  asser
1a2a0 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
1a2b0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1a2c0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65  ->opcode==OP_Ope
1a2d0 6e 52 65 61 64 20 7c 7c 20 70 4f 70 2d 3e 6f 70  nRead || pOp->op
1a2e0 63 6f 64 65 3d 3d 4f 50 5f 52 65 6f 70 65 6e 49  code==OP_ReopenI
1a2f0 64 78 0a 20 20 20 20 20 20 20 20 20 20 7c 7c 20  dx.          || 
1a300 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
1a310 3b 0a 0a 20 20 69 66 28 20 70 2d 3e 65 78 70 69  ;..  if( p->expi
1a320 72 65 64 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  red ){.    rc = 
1a330 53 51 4c 49 54 45 5f 41 42 4f 52 54 3b 0a 20 20  SQLITE_ABORT;.  
1a340 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
1a350 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20 70 4b  nField = 0;.  pK
1a360 65 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20 70 32  eyInfo = 0;.  p2
1a370 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 44   = pOp->p2;.  iD
1a380 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61  b = pOp->p3;.  a
1a390 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26  ssert( iDb>=0 &&
1a3a0 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a   iDb<db->nDb );.
1a3b0 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
1a3c0 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
1a3d0 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20 70 44 62  k, iDb) );.  pDb
1a3e0 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d   = &db->aDb[iDb]
1a3f0 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e 70 42  ;.  pX = pDb->pB
1a400 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 58 21  t;.  assert( pX!
1a410 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  =0 );.  if( pOp-
1a420 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e  >opcode==OP_Open
1a430 57 72 69 74 65 20 29 7b 0a 20 20 20 20 77 72 46  Write ){.    wrF
1a440 6c 61 67 20 3d 20 31 3b 0a 20 20 20 20 61 73 73  lag = 1;.    ass
1a450 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65  ert( sqlite3Sche
1a460 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20  maMutexHeld(db, 
1a470 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69  iDb, 0) );.    i
1a480 66 28 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d  f( pDb->pSchema-
1a490 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20 70  >file_format < p
1a4a0 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
1a4b0 72 6d 61 74 20 29 7b 0a 20 20 20 20 20 20 70 2d  rmat ){.      p-
1a4c0 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72  >minWriteFileFor
1a4d0 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53 63 68 65  mat = pDb->pSche
1a4e0 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3b  ma->file_format;
1a4f0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
1a500 20 20 20 20 77 72 46 6c 61 67 20 3d 20 30 3b 0a      wrFlag = 0;.
1a510 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70    }.  if( pOp->p
1a520 35 20 26 20 4f 50 46 4c 41 47 5f 50 32 49 53 52  5 & OPFLAG_P2ISR
1a530 45 47 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  EG ){.    assert
1a540 28 20 70 32 3e 30 20 29 3b 0a 20 20 20 20 61 73  ( p2>0 );.    as
1a550 73 65 72 74 28 20 70 32 3c 3d 28 70 2d 3e 6e 4d  sert( p2<=(p->nM
1a560 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
1a570 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26 61 4d  ;.    pIn2 = &aM
1a580 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 61 73 73 65  em[p2];.    asse
1a590 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
1a5a0 49 6e 32 29 20 29 3b 0a 20 20 20 20 61 73 73 65  In2) );.    asse
1a5b0 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73  rt( (pIn2->flags
1a5c0 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
1a5d0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
1a5e0 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
1a5f0 49 6e 32 29 3b 0a 20 20 20 20 70 32 20 3d 20 28  In2);.    p2 = (
1a600 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  int)pIn2->u.i;. 
1a610 20 20 20 2f 2a 20 54 68 65 20 70 32 20 76 61 6c     /* The p2 val
1a620 75 65 20 61 6c 77 61 79 73 20 63 6f 6d 65 73 20  ue always comes 
1a630 66 72 6f 6d 20 61 20 70 72 69 6f 72 20 4f 50 5f  from a prior OP_
1a640 43 72 65 61 74 65 54 61 62 6c 65 20 6f 70 63 6f  CreateTable opco
1a650 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a 20 74 68  de and.    ** th
1a660 61 74 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61  at opcode will a
1a670 6c 77 61 79 73 20 73 65 74 20 74 68 65 20 70 32  lways set the p2
1a680 20 76 61 6c 75 65 20 74 6f 20 32 20 6f 72 20 6d   value to 2 or m
1a690 6f 72 65 20 6f 72 20 65 6c 73 65 20 66 61 69 6c  ore or else fail
1a6a0 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68 65 72  ..    ** If ther
1a6b0 65 20 77 65 72 65 20 61 20 66 61 69 6c 75 72 65  e were a failure
1a6c0 2c 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  , the prepared s
1a6d0 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68  tatement would h
1a6e0 61 76 65 20 68 61 6c 74 65 64 0a 20 20 20 20 2a  ave halted.    *
1a6f0 2a 20 62 65 66 6f 72 65 20 72 65 61 63 68 69 6e  * before reachin
1a700 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  g this instructi
1a710 6f 6e 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 4e  on. */.    if( N
1a720 45 56 45 52 28 70 32 3c 32 29 20 29 20 7b 0a 20  EVER(p2<2) ) {. 
1a730 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
1a740 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20  _CORRUPT_BKPT;. 
1a750 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
1a760 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1a770 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f    }.  }.  if( pO
1a780 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45  p->p4type==P4_KE
1a790 59 49 4e 46 4f 20 29 7b 0a 20 20 20 20 70 4b 65  YINFO ){.    pKe
1a7a0 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
1a7b0 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 61 73  pKeyInfo;.    as
1a7c0 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e  sert( pKeyInfo->
1a7d0 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a  enc==ENC(db) );.
1a7e0 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79      assert( pKey
1a7f0 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a  Info->db==db );.
1a800 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65      nField = pKe
1a810 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b 70 4b  yInfo->nField+pK
1a820 65 79 49 6e 66 6f 2d 3e 6e 58 46 69 65 6c 64 3b  eyInfo->nXField;
1a830 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70  .  }else if( pOp
1a840 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
1a850 33 32 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64  32 ){.    nField
1a860 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20   = pOp->p4.i;.  
1a870 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  }.  assert( pOp-
1a880 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p1>=0 );.  asse
1a890 72 74 28 20 6e 46 69 65 6c 64 3e 3d 30 20 29 3b  rt( nField>=0 );
1a8a0 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 46 69  .  testcase( nFi
1a8b0 65 6c 64 3d 3d 30 20 29 3b 20 20 2f 2a 20 54 61  eld==0 );  /* Ta
1a8c0 62 6c 65 20 77 69 74 68 20 49 4e 54 45 47 45 52  ble with INTEGER
1a8d0 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 6e 64   PRIMARY KEY and
1a8e0 20 6e 6f 74 68 69 6e 67 20 65 6c 73 65 20 2a 2f   nothing else */
1a8f0 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61  .  pCur = alloca
1a900 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
1a910 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44 62  >p1, nField, iDb
1a920 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 75 72  , 1);.  if( pCur
1a930 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
1a940 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52  m;.  pCur->nullR
1a950 6f 77 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e  ow = 1;.  pCur->
1a960 69 73 4f 72 64 65 72 65 64 20 3d 20 31 3b 0a 20  isOrdered = 1;. 
1a970 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74 20   pCur->pgnoRoot 
1a980 3d 20 70 32 3b 0a 20 20 72 63 20 3d 20 73 71 6c  = p2;.  rc = sql
1a990 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28  ite3BtreeCursor(
1a9a0 70 58 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c 20  pX, p2, wrFlag, 
1a9b0 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e  pKeyInfo, pCur->
1a9c0 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 75 72  pCursor);.  pCur
1a9d0 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65  ->pKeyInfo = pKe
1a9e0 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28  yInfo;.  assert(
1a9f0 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 3d   OPFLAG_BULKCSR=
1aa00 3d 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 20  =BTREE_BULKLOAD 
1aa10 29 3b 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65  );.  sqlite3Btre
1aa20 65 43 75 72 73 6f 72 48 69 6e 74 73 28 70 43 75  eCursorHints(pCu
1aa30 72 2d 3e 70 43 75 72 73 6f 72 2c 20 28 70 4f 70  r->pCursor, (pOp
1aa40 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 42 55  ->p5 & OPFLAG_BU
1aa50 4c 4b 43 53 52 29 29 3b 0a 0a 20 20 2f 2a 20 53  LKCSR));..  /* S
1aa60 69 6e 63 65 20 69 74 20 70 65 72 66 6f 72 6d 73  ince it performs
1aa70 20 6e 6f 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63   no memory alloc
1aa80 61 74 69 6f 6e 20 6f 72 20 49 4f 2c 20 74 68 65  ation or IO, the
1aa90 20 6f 6e 6c 79 20 76 61 6c 75 65 20 74 68 61 74   only value that
1aaa0 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72  .  ** sqlite3Btr
1aab0 65 65 43 75 72 73 6f 72 28 29 20 6d 61 79 20 72  eeCursor() may r
1aac0 65 74 75 72 6e 20 69 73 20 53 51 4c 49 54 45 5f  eturn is SQLITE_
1aad0 4f 4b 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  OK. */.  assert(
1aae0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
1aaf0 3b 0a 0a 20 20 2f 2a 20 53 65 74 20 74 68 65 20  ;..  /* Set the 
1ab00 56 64 62 65 43 75 72 73 6f 72 2e 69 73 54 61 62  VdbeCursor.isTab
1ab10 6c 65 20 76 61 72 69 61 62 6c 65 2e 20 50 72 65  le variable. Pre
1ab20 76 69 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f  vious versions o
1ab30 66 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 75 73  f.  ** SQLite us
1ab40 65 64 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74  ed to check if t
1ab50 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 66 6c 61  he root-page fla
1ab60 67 73 20 77 65 72 65 20 73 61 6e 65 20 61 74 20  gs were sane at 
1ab70 74 68 69 73 20 70 6f 69 6e 74 0a 20 20 2a 2a 20  this point.  ** 
1ab80 61 6e 64 20 72 65 70 6f 72 74 20 64 61 74 61 62  and report datab
1ab90 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 20 69  ase corruption i
1aba0 66 20 74 68 65 79 20 77 65 72 65 20 6e 6f 74 2c  f they were not,
1abb0 20 62 75 74 20 74 68 69 73 20 63 68 65 63 6b 20   but this check 
1abc0 68 61 73 0a 20 20 2a 2a 20 73 69 6e 63 65 20 6d  has.  ** since m
1abd0 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20 62 74  oved into the bt
1abe0 72 65 65 20 6c 61 79 65 72 2e 20 20 2a 2f 20 20  ree layer.  */  
1abf0 0a 20 20 70 43 75 72 2d 3e 69 73 54 61 62 6c 65  .  pCur->isTable
1ac00 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d   = pOp->p4type!=
1ac10 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 20 20 62 72  P4_KEYINFO;.  br
1ac20 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1ac30 65 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  e: OpenEphemeral
1ac40 20 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a 2a   P1 P2 * P4 P5.*
1ac50 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c  * Synopsis: nCol
1ac60 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 4f 70 65  umn=P2.**.** Ope
1ac70 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 50  n a new cursor P
1ac80 31 20 74 6f 20 61 20 74 72 61 6e 73 69 65 6e 74  1 to a transient
1ac90 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63   table..** The c
1aca0 75 72 73 6f 72 20 69 73 20 61 6c 77 61 79 73 20  ursor is always 
1acb0 6f 70 65 6e 65 64 20 72 65 61 64 2f 77 72 69 74  opened read/writ
1acc0 65 20 65 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68  e even if .** th
1acd0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
1ace0 69 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54  is read-only.  T
1acf0 68 65 20 65 70 68 65 6d 65 72 61 6c 0a 2a 2a 20  he ephemeral.** 
1ad00 74 61 62 6c 65 20 69 73 20 64 65 6c 65 74 65 64  table is deleted
1ad10 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77   automatically w
1ad20 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69  hen the cursor i
1ad30 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  s closed..**.** 
1ad40 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72  P2 is the number
1ad50 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
1ad60 68 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62  he ephemeral tab
1ad70 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f  le..** The curso
1ad80 72 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 42 54  r points to a BT
1ad90 72 65 65 20 74 61 62 6c 65 20 69 66 20 50 34 3d  ree table if P4=
1ada0 3d 30 20 61 6e 64 20 74 6f 20 61 20 42 54 72 65  =0 and to a BTre
1adb0 65 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34  e index.** if P4
1adc0 20 69 73 20 6e 6f 74 20 30 2e 20 20 49 66 20 50   is not 0.  If P
1add0 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69  4 is not NULL, i
1ade0 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65  t points to a Ke
1adf0 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 0a  yInfo structure.
1ae00 2a 2a 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  ** that defines 
1ae10 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65  the format of ke
1ae20 79 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e  ys in the index.
1ae30 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 70 61  .**.** The P5 pa
1ae40 72 61 6d 65 74 65 72 20 63 61 6e 20 62 65 20 61  rameter can be a
1ae50 20 6d 61 73 6b 20 6f 66 20 74 68 65 20 42 54 52   mask of the BTR
1ae60 45 45 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e  EE_* flags defin
1ae70 65 64 0a 2a 2a 20 69 6e 20 62 74 72 65 65 2e 68  ed.** in btree.h
1ae80 2e 20 20 54 68 65 73 65 20 66 6c 61 67 73 20 63  .  These flags c
1ae90 6f 6e 74 72 6f 6c 20 61 73 70 65 63 74 73 20 6f  ontrol aspects o
1aea0 66 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  f the operation 
1aeb0 6f 66 0a 2a 2a 20 74 68 65 20 62 74 72 65 65 2e  of.** the btree.
1aec0 20 20 54 68 65 20 42 54 52 45 45 5f 4f 4d 49 54    The BTREE_OMIT
1aed0 5f 4a 4f 55 52 4e 41 4c 20 61 6e 64 20 42 54 52  _JOURNAL and BTR
1aee0 45 45 5f 53 49 4e 47 4c 45 20 66 6c 61 67 73 20  EE_SINGLE flags 
1aef0 61 72 65 0a 2a 2a 20 61 64 64 65 64 20 61 75 74  are.** added aut
1af00 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f  omatically..*/./
1af10 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 41 75  * Opcode: OpenAu
1af20 74 6f 69 6e 64 65 78 20 50 31 20 50 32 20 2a 20  toindex P1 P2 * 
1af30 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
1af40 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a  : nColumn=P2.**.
1af50 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  ** This opcode w
1af60 6f 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61 73  orks the same as
1af70 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1af80 6c 2e 20 20 49 74 20 68 61 73 20 61 0a 2a 2a 20  l.  It has a.** 
1af90 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 74  different name t
1afa0 6f 20 64 69 73 74 69 6e 67 75 69 73 68 20 69 74  o distinguish it
1afb0 73 20 75 73 65 2e 20 20 54 61 62 6c 65 73 20 63  s use.  Tables c
1afc0 72 65 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20  reated using.** 
1afd0 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77  by this opcode w
1afe0 69 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20  ill be used for 
1aff0 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72  automatically cr
1b000 65 61 74 65 64 20 74 72 61 6e 73 69 65 6e 74 0a  eated transient.
1b010 2a 2a 20 69 6e 64 69 63 65 73 20 69 6e 20 6a 6f  ** indices in jo
1b020 69 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ins..*/.case OP_
1b030 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 3a 20 0a  OpenAutoindex: .
1b040 63 61 73 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65  case OP_OpenEphe
1b050 6d 65 72 61 6c 3a 20 7b 0a 20 20 56 64 62 65 43  meral: {.  VdbeC
1b060 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 4b 65  ursor *pCx;.  Ke
1b070 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
1b080 0a 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74  ..  static const
1b090 20 69 6e 74 20 76 66 73 46 6c 61 67 73 20 3d 20   int vfsFlags = 
1b0a0 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
1b0b0 45 4e 5f 52 45 41 44 57 52 49 54 45 20 7c 0a 20  EN_READWRITE |. 
1b0c0 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
1b0d0 5f 43 52 45 41 54 45 20 7c 0a 20 20 20 20 20 20  _CREATE |.      
1b0e0 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c  SQLITE_OPEN_EXCL
1b0f0 55 53 49 56 45 20 7c 0a 20 20 20 20 20 20 53 51  USIVE |.      SQ
1b100 4c 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45  LITE_OPEN_DELETE
1b110 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20  ONCLOSE |.      
1b120 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e  SQLITE_OPEN_TRAN
1b130 53 49 45 4e 54 5f 44 42 3b 0a 20 20 61 73 73 65  SIENT_DB;.  asse
1b140 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
1b150 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1b160 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20  >p2>=0 );.  pCx 
1b170 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
1b180 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  (p, pOp->p1, pOp
1b190 2d 3e 70 32 2c 20 2d 31 2c 20 31 29 3b 0a 20 20  ->p2, -1, 1);.  
1b1a0 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74  if( pCx==0 ) got
1b1b0 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d  o no_mem;.  pCx-
1b1c0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
1b1d0 70 43 78 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c  pCx->isEphemeral
1b1e0 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c   = 1;.  rc = sql
1b1f0 69 74 65 33 42 74 72 65 65 4f 70 65 6e 28 64 62  ite3BtreeOpen(db
1b200 2d 3e 70 56 66 73 2c 20 30 2c 20 64 62 2c 20 26  ->pVfs, 0, db, &
1b210 70 43 78 2d 3e 70 42 74 2c 20 0a 20 20 20 20 20  pCx->pBt, .     
1b220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b230 20 20 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f     BTREE_OMIT_JO
1b240 55 52 4e 41 4c 20 7c 20 42 54 52 45 45 5f 53 49  URNAL | BTREE_SI
1b250 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e 70 35 2c 20  NGLE | pOp->p5, 
1b260 76 66 73 46 6c 61 67 73 29 3b 0a 20 20 69 66 28  vfsFlags);.  if(
1b270 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
1b280 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
1b290 65 33 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e  e3BtreeBeginTran
1b2a0 73 28 70 43 78 2d 3e 70 42 74 2c 20 31 29 3b 0a  s(pCx->pBt, 1);.
1b2b0 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51    }.  if( rc==SQ
1b2c0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f  LITE_OK ){.    /
1b2d0 2a 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74  * If a transient
1b2e0 20 69 6e 64 65 78 20 69 73 20 72 65 71 75 69 72   index is requir
1b2f0 65 64 2c 20 63 72 65 61 74 65 20 69 74 20 62 79  ed, create it by
1b300 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a 20   calling.    ** 
1b310 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61  sqlite3BtreeCrea
1b320 74 65 54 61 62 6c 65 28 29 20 77 69 74 68 20 74  teTable() with t
1b330 68 65 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59  he BTREE_BLOBKEY
1b340 20 66 6c 61 67 20 62 65 66 6f 72 65 0a 20 20 20   flag before.   
1b350 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20   ** opening it. 
1b360 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74  If a transient t
1b370 61 62 6c 65 20 69 73 20 72 65 71 75 69 72 65 64  able is required
1b380 2c 20 6a 75 73 74 20 75 73 65 20 74 68 65 0a 20  , just use the. 
1b390 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61     ** automatica
1b3a0 6c 6c 79 20 63 72 65 61 74 65 64 20 74 61 62 6c  lly created tabl
1b3b0 65 20 77 69 74 68 20 72 6f 6f 74 2d 70 61 67 65  e with root-page
1b3c0 20 31 20 28 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b   1 (an BLOB_INTK
1b3d0 45 59 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a  EY table)..    *
1b3e0 2f 0a 20 20 20 20 69 66 28 20 28 70 4b 65 79 49  /.    if( (pKeyI
1b3f0 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b  nfo = pOp->p4.pK
1b400 65 79 49 6e 66 6f 29 21 3d 30 20 29 7b 0a 20 20  eyInfo)!=0 ){.  
1b410 20 20 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20      int pgno;.  
1b420 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
1b430 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49  >p4type==P4_KEYI
1b440 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20 72 63 20  NFO );.      rc 
1b450 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72  = sqlite3BtreeCr
1b460 65 61 74 65 54 61 62 6c 65 28 70 43 78 2d 3e 70  eateTable(pCx->p
1b470 42 74 2c 20 26 70 67 6e 6f 2c 20 42 54 52 45 45  Bt, &pgno, BTREE
1b480 5f 42 4c 4f 42 4b 45 59 20 7c 20 70 4f 70 2d 3e  _BLOBKEY | pOp->
1b490 70 35 29 3b 20 0a 20 20 20 20 20 20 69 66 28 20  p5); .      if( 
1b4a0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
1b4b0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1b4c0 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f   pgno==MASTER_RO
1b4d0 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20 20 20 20  OT+1 );.        
1b4e0 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f  assert( pKeyInfo
1b4f0 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20  ->db==db );.    
1b500 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79      assert( pKey
1b510 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64  Info->enc==ENC(d
1b520 62 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70 43  b) );.        pC
1b530 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b  x->pKeyInfo = pK
1b540 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20 20 20  eyInfo;.        
1b550 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1b560 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74  eCursor(pCx->pBt
1b570 2c 20 70 67 6e 6f 2c 20 31 2c 20 70 4b 65 79 49  , pgno, 1, pKeyI
1b580 6e 66 6f 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f  nfo, pCx->pCurso
1b590 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  r);.      }.    
1b5a0 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d    pCx->isTable =
1b5b0 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   0;.    }else{. 
1b5c0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1b5d0 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43 78  3BtreeCursor(pCx
1b5e0 2d 3e 70 42 74 2c 20 4d 41 53 54 45 52 5f 52 4f  ->pBt, MASTER_RO
1b5f0 4f 54 2c 20 31 2c 20 30 2c 20 70 43 78 2d 3e 70  OT, 1, 0, pCx->p
1b600 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 70  Cursor);.      p
1b610 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b  Cx->isTable = 1;
1b620 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 78  .    }.  }.  pCx
1b630 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 28 70  ->isOrdered = (p
1b640 4f 70 2d 3e 70 35 21 3d 42 54 52 45 45 5f 55 4e  Op->p5!=BTREE_UN
1b650 4f 52 44 45 52 45 44 29 3b 0a 20 20 62 72 65 61  ORDERED);.  brea
1b660 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1b670 20 53 6f 72 74 65 72 4f 70 65 6e 20 50 31 20 50   SorterOpen P1 P
1b680 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
1b690 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b  This opcode work
1b6a0 73 20 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e 45 70  s like OP_OpenEp
1b6b0 68 65 6d 65 72 61 6c 20 65 78 63 65 70 74 20 74  hemeral except t
1b6c0 68 61 74 20 69 74 20 6f 70 65 6e 73 0a 2a 2a 20  hat it opens.** 
1b6d0 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65  a transient inde
1b6e0 78 20 74 68 61 74 20 69 73 20 73 70 65 63 69 66  x that is specif
1b6f0 69 63 61 6c 6c 79 20 64 65 73 69 67 6e 65 64 20  ically designed 
1b700 74 6f 20 73 6f 72 74 20 6c 61 72 67 65 0a 2a 2a  to sort large.**
1b710 20 74 61 62 6c 65 73 20 75 73 69 6e 67 20 61 6e   tables using an
1b720 20 65 78 74 65 72 6e 61 6c 20 6d 65 72 67 65 2d   external merge-
1b730 73 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d 2e 0a  sort algorithm..
1b740 2a 2a 0a 2a 2a 20 49 66 20 61 72 67 75 6d 65 6e  **.** If argumen
1b750 74 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  t P3 is non-zero
1b760 2c 20 74 68 65 6e 20 69 74 20 69 6e 64 69 63 61  , then it indica
1b770 74 65 73 20 74 68 61 74 20 74 68 65 20 73 6f 72  tes that the sor
1b780 74 65 72 20 6d 61 79 0a 2a 2a 20 61 73 73 75 6d  ter may.** assum
1b790 65 20 74 68 61 74 20 61 20 73 74 61 62 6c 65 20  e that a stable 
1b7a0 73 6f 72 74 20 63 6f 6e 73 69 64 65 72 69 6e 67  sort considering
1b7b0 20 74 68 65 20 66 69 72 73 74 20 50 33 20 66 69   the first P3 fi
1b7c0 65 6c 64 73 20 6f 66 20 65 61 63 68 0a 2a 2a 20  elds of each.** 
1b7d0 6b 65 79 20 69 73 20 73 75 66 66 69 63 69 65 6e  key is sufficien
1b7e0 74 20 74 6f 20 70 72 6f 64 75 63 65 20 74 68 65  t to produce the
1b7f0 20 72 65 71 75 69 72 65 64 20 72 65 73 75 6c 74   required result
1b800 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  s..*/.case OP_So
1b810 72 74 65 72 4f 70 65 6e 3a 20 7b 0a 20 20 56 64  rterOpen: {.  Vd
1b820 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a  beCursor *pCx;..
1b830 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1b840 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  1>=0 );.  assert
1b850 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a  ( pOp->p2>=0 );.
1b860 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65    pCx = allocate
1b870 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
1b880 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20  1, pOp->p2, -1, 
1b890 31 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30  1);.  if( pCx==0
1b8a0 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
1b8b0 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20    pCx->pKeyInfo 
1b8c0 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  = pOp->p4.pKeyIn
1b8d0 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  fo;.  assert( pC
1b8e0 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d  x->pKeyInfo->db=
1b8f0 3d 64 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  =db );.  assert(
1b900 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e   pCx->pKeyInfo->
1b910 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a  enc==ENC(db) );.
1b920 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
1b930 62 65 53 6f 72 74 65 72 49 6e 69 74 28 64 62 2c  beSorterInit(db,
1b940 20 70 4f 70 2d 3e 70 33 2c 20 70 43 78 29 3b 0a   pOp->p3, pCx);.
1b950 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1b960 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63 65 54  pcode: SequenceT
1b970 65 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  est P1 P2 * * *.
1b980 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 28  ** Synopsis: if(
1b990 20 63 75 72 73 6f 72 5b 50 31 5d 2e 63 74 72 2b   cursor[P1].ctr+
1b9a0 2b 20 29 20 70 63 20 3d 20 50 32 0a 2a 2a 0a 2a  + ) pc = P2.**.*
1b9b0 2a 20 50 31 20 69 73 20 61 20 73 6f 72 74 65 72  * P1 is a sorter
1b9c0 20 63 75 72 73 6f 72 2e 20 49 66 20 74 68 65 20   cursor. If the 
1b9d0 73 65 71 75 65 6e 63 65 20 63 6f 75 6e 74 65 72  sequence counter
1b9e0 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 7a 65   is currently ze
1b9f0 72 6f 2c 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50  ro, jump.** to P
1ba00 32 2e 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66  2. Regardless of
1ba10 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
1ba20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
1ba30 6e 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 65  n, increment the
1ba40 0a 2a 2a 20 74 68 65 20 73 65 71 75 65 6e 63 65  .** the sequence
1ba50 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20   value..*/.case 
1ba60 4f 50 5f 53 65 71 75 65 6e 63 65 54 65 73 74 3a  OP_SequenceTest:
1ba70 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
1ba80 2a 70 43 3b 0a 20 20 61 73 73 65 72 74 28 20 70  *pC;.  assert( p
1ba90 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1baa0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1bab0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1bac0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1bad0 73 73 65 72 74 28 20 70 43 2d 3e 70 53 6f 72 74  ssert( pC->pSort
1bae0 65 72 20 29 3b 0a 20 20 69 66 28 20 28 70 43 2d  er );.  if( (pC-
1baf0 3e 73 65 71 43 6f 75 6e 74 2b 2b 29 3d 3d 30 20  >seqCount++)==0 
1bb00 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
1bb10 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
1bb20 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1bb30 64 65 3a 20 4f 70 65 6e 50 73 65 75 64 6f 20 50  de: OpenPseudo P
1bb40 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
1bb50 79 6e 6f 70 73 69 73 3a 20 50 33 20 63 6f 6c 75  ynopsis: P3 colu
1bb60 6d 6e 73 20 69 6e 20 72 5b 50 32 5d 0a 2a 2a 0a  mns in r[P2].**.
1bb70 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75  ** Open a new cu
1bb80 72 73 6f 72 20 74 68 61 74 20 70 6f 69 6e 74 73  rsor that points
1bb90 20 74 6f 20 61 20 66 61 6b 65 20 74 61 62 6c 65   to a fake table
1bba0 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61   that contains a
1bbb0 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f   single.** row o
1bbc0 66 20 64 61 74 61 2e 20 20 54 68 65 20 63 6f 6e  f data.  The con
1bbd0 74 65 6e 74 20 6f 66 20 74 68 61 74 20 6f 6e 65  tent of that one
1bbe0 20 72 6f 77 20 69 73 20 74 68 65 20 63 6f 6e 74   row is the cont
1bbf0 65 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a  ent of memory.**
1bc00 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49   register P2.  I
1bc10 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 63  n other words, c
1bc20 75 72 73 6f 72 20 50 31 20 62 65 63 6f 6d 65 73  ursor P1 becomes
1bc30 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68   an alias for th
1bc40 65 20 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f 62 20 63  e .** MEM_Blob c
1bc50 6f 6e 74 65 6e 74 20 63 6f 6e 74 61 69 6e 65 64  ontent contained
1bc60 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
1bc70 0a 2a 2a 0a 2a 2a 20 41 20 70 73 65 75 64 6f 2d  .**.** A pseudo-
1bc80 74 61 62 6c 65 20 63 72 65 61 74 65 64 20 62 79  table created by
1bc90 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   this opcode is 
1bca0 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 73  used to hold a s
1bcb0 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75 74  ingle.** row out
1bcc0 70 75 74 20 66 72 6f 6d 20 74 68 65 20 73 6f 72  put from the sor
1bcd0 74 65 72 20 73 6f 20 74 68 61 74 20 74 68 65 20  ter so that the 
1bce0 72 6f 77 20 63 61 6e 20 62 65 20 64 65 63 6f 6d  row can be decom
1bcf0 70 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e  posed into.** in
1bd00 64 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e 73  dividual columns
1bd10 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 43 6f   using the OP_Co
1bd20 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 20 20 54 68  lumn opcode.  Th
1bd30 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f  e OP_Column opco
1bd40 64 65 0a 2a 2a 20 69 73 20 74 68 65 20 6f 6e 6c  de.** is the onl
1bd50 79 20 63 75 72 73 6f 72 20 6f 70 63 6f 64 65 20  y cursor opcode 
1bd60 74 68 61 74 20 77 6f 72 6b 73 20 77 69 74 68 20  that works with 
1bd70 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  a pseudo-table..
1bd80 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 74 68 65 20  **.** P3 is the 
1bd90 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  number of fields
1bda0 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 73 20   in the records 
1bdb0 74 68 61 74 20 77 69 6c 6c 20 62 65 20 73 74 6f  that will be sto
1bdc0 72 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 70 73  red by.** the ps
1bdd0 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63  eudo-table..*/.c
1bde0 61 73 65 20 4f 50 5f 4f 70 65 6e 50 73 65 75 64  ase OP_OpenPseud
1bdf0 6f 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  o: {.  VdbeCurso
1be00 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65 72  r *pCx;..  asser
1be10 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b  t( pOp->p1>=0 );
1be20 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1be30 70 33 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d  p3>=0 );.  pCx =
1be40 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
1be50 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  p, pOp->p1, pOp-
1be60 3e 70 33 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 69  >p3, -1, 0);.  i
1be70 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f  f( pCx==0 ) goto
1be80 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e   no_mem;.  pCx->
1be90 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70  nullRow = 1;.  p
1bea0 43 78 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52  Cx->pseudoTableR
1beb0 65 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  eg = pOp->p2;.  
1bec0 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31  pCx->isTable = 1
1bed0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1bee0 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 62 72 65 61  >p5==0 );.  brea
1bef0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1bf00 20 43 6c 6f 73 65 20 50 31 20 2a 20 2a 20 2a 20   Close P1 * * * 
1bf10 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 20  *.**.** Close a 
1bf20 63 75 72 73 6f 72 20 70 72 65 76 69 6f 75 73 6c  cursor previousl
1bf30 79 20 6f 70 65 6e 65 64 20 61 73 20 50 31 2e 20  y opened as P1. 
1bf40 20 49 66 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a   If P1 is not.**
1bf50 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c   currently open,
1bf60 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
1bf70 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f  n is a no-op..*/
1bf80 0a 63 61 73 65 20 4f 50 5f 43 6c 6f 73 65 3a 20  .case OP_Close: 
1bf90 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  {.  assert( pOp-
1bfa0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1bfb0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1bfc0 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65    sqlite3VdbeFre
1bfd0 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70  eCursor(p, p->ap
1bfe0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20  Csr[pOp->p1]);. 
1bff0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1c000 31 5d 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b  1] = 0;.  break;
1c010 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
1c020 65 65 6b 47 45 20 50 31 20 50 32 20 50 33 20 50  eekGE P1 P2 P3 P
1c030 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
1c040 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
1c050 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
1c060 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
1c070 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
1c080 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
1c090 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
1c0a0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
1c0b0 67 69 73 74 65 72 20 50 33 20 61 73 20 74 68 65  gister P3 as the
1c0c0 20 6b 65 79 2e 20 20 49 66 20 63 75 72 73 6f 72   key.  If cursor
1c0d0 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74   P1 refers .** t
1c0e0 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20  o an SQL index, 
1c0f0 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66  then P3 is the f
1c100 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79  irst in an array
1c110 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
1c120 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73   .** that are us
1c130 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65  ed as an unpacke
1c140 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a  d index key. .**
1c150 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63  .** Reposition c
1c160 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
1c170 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74    it points to t
1c180 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72  he smallest entr
1c190 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72  y that .** is gr
1c1a0 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
1c1b0 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76  ual to the key v
1c1c0 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
1c1d0 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a  re no records .*
1c1e0 2a 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  * greater than o
1c1f0 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
1c200 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74  ey and P2 is not
1c210 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70   zero, then jump
1c220 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68   to P2..**.** Th
1c230 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
1c240 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66   the cursor conf
1c250 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69  igured to move i
1c260 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c  n forward order,
1c270 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67  .** from the beg
1c280 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68  inning toward th
1c290 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72  e end.  In other
1c2a0 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73   words, the curs
1c2b0 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  or is.** configu
1c2c0 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c  red to use Next,
1c2d0 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a   not Prev..**.**
1c2e0 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
1c2f0 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b  , NotFound, Seek
1c300 4c 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b  Lt, SeekGt, Seek
1c310 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  Le.*/./* Opcode:
1c320 20 53 65 65 6b 47 54 20 50 31 20 50 32 20 50 33   SeekGT P1 P2 P3
1c330 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
1c340 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
1c350 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
1c360 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
1c370 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
1c380 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
1c390 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
1c3a0 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  se the value in 
1c3b0 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61  register P3 as a
1c3c0 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20   key. If cursor 
1c3d0 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f  P1 refers .** to
1c3e0 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74   an SQL index, t
1c3f0 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69  hen P3 is the fi
1c400 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20  rst in an array 
1c410 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
1c420 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65  .** that are use
1c430 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64  d as an unpacked
1c440 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a   index key. .**.
1c450 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75  ** Reposition cu
1c460 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
1c470 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
1c480 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79  e smallest entry
1c490 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65   that .** is gre
1c4a0 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65  ater than the ke
1c4b0 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72  y value. If ther
1c4c0 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73  e are no records
1c4d0 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 0a 2a   greater than .*
1c4e0 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32  * the key and P2
1c4f0 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
1c500 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
1c510 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
1c520 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
1c530 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  or configured to
1c540 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64   move in forward
1c550 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20   order,.** from 
1c560 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f  the beginning to
1c570 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49  ward the end.  I
1c580 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
1c590 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20  he cursor is.** 
1c5a0 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73  configured to us
1c5b0 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76  e Next, not Prev
1c5c0 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1c5d0 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
1c5e0 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47  d, SeekLt, SeekG
1c5f0 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20  e, SeekLe.*/./* 
1c600 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c 54 20 50  Opcode: SeekLT P
1c610 31 20 50 32 20 50 33 20 50 34 20 2a 20 0a 2a 2a  1 P2 P3 P4 * .**
1c620 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
1c630 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
1c640 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1c650 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c  s to an SQL tabl
1c660 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75  e (B-Tree that u
1c670 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73  ses integer keys
1c680 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76  ), .** use the v
1c690 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
1c6a0 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66   P3 as a key. If
1c6b0 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1c6c0 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20  s .** to an SQL 
1c6d0 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69  index, then P3 i
1c6e0 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61  s the first in a
1c6f0 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65  n array of P4 re
1c700 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74  gisters .** that
1c710 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20   are used as an 
1c720 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
1c730 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73  ey. .**.** Repos
1c740 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ition cursor P1 
1c750 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e  so that  it poin
1c760 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73  ts to the larges
1c770 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  t entry that .**
1c780 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68   is less than th
1c790 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20  e key value. If 
1c7a0 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
1c7b0 6f 72 64 73 20 6c 65 73 73 20 74 68 61 6e 20 0a  ords less than .
1c7c0 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  ** the key and P
1c7d0 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
1c7e0 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
1c7f0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
1c800 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  e leaves the cur
1c810 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74  sor configured t
1c820 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72 73  o move in revers
1c830 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d  e order,.** from
1c840 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64 20   the end toward 
1c850 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20  the beginning.  
1c860 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
1c870 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a  the cursor is.**
1c880 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75   configured to u
1c890 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78  se Prev, not Nex
1c8a0 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  t..**.** See als
1c8b0 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
1c8c0 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b  nd, SeekGt, Seek
1c8d0 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a  Ge, SeekLe.*/./*
1c8e0 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c 45 20   Opcode: SeekLE 
1c8f0 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1c900 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
1c910 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
1c920 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1c930 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c  s to an SQL tabl
1c940 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75  e (B-Tree that u
1c950 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73  ses integer keys
1c960 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76  ), .** use the v
1c970 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
1c980 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66   P3 as a key. If
1c990 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1c9a0 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20  s .** to an SQL 
1c9b0 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69  index, then P3 i
1c9c0 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61  s the first in a
1c9d0 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65  n array of P4 re
1c9e0 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74  gisters .** that
1c9f0 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20   are used as an 
1ca00 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
1ca10 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73  ey. .**.** Repos
1ca20 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ition cursor P1 
1ca30 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74  so that it point
1ca40 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74  s to the largest
1ca50 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20   entry that .** 
1ca60 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20  is less than or 
1ca70 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
1ca80 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65   value. If there
1ca90 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
1caa0 0a 2a 2a 20 6c 65 73 73 20 74 68 61 6e 20 6f 72  .** less than or
1cab0 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
1cac0 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20  y and P2 is not 
1cad0 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20  zero, then jump 
1cae0 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  to P2..**.** Thi
1caf0 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20  s opcode leaves 
1cb00 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69  the cursor confi
1cb10 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e  gured to move in
1cb20 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a   reverse order,.
1cb30 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20  ** from the end 
1cb40 74 6f 77 61 72 64 20 74 68 65 20 62 65 67 69 6e  toward the begin
1cb50 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20  ning.  In other 
1cb60 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f  words, the curso
1cb70 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72  r is.** configur
1cb80 65 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20  ed to use Prev, 
1cb90 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20  not Next..**.** 
1cba0 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
1cbb0 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 47   NotFound, SeekG
1cbc0 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c  t, SeekGe, SeekL
1cbd0 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  t.*/.case OP_See
1cbe0 6b 4c 54 3a 20 20 20 20 20 20 20 20 20 2f 2a 20  kLT:         /* 
1cbf0 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
1cc00 65 20 4f 50 5f 53 65 65 6b 4c 45 3a 20 20 20 20  e OP_SeekLE:    
1cc10 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1cc20 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  3 */.case OP_See
1cc30 6b 47 45 3a 20 20 20 20 20 20 20 20 20 2f 2a 20  kGE:         /* 
1cc40 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
1cc50 65 20 4f 50 5f 53 65 65 6b 47 54 3a 20 7b 20 20  e OP_SeekGT: {  
1cc60 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1cc70 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 0a  3 */.  int res;.
1cc80 20 20 69 6e 74 20 6f 63 3b 0a 20 20 56 64 62 65    int oc;.  Vdbe
1cc90 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 55 6e  Cursor *pC;.  Un
1cca0 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a  packedRecord r;.
1ccb0 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20    int nField;.  
1ccc0 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20 2f  i64 iKey;      /
1ccd0 2a 20 54 68 65 20 72 6f 77 69 64 20 77 65 20 61  * The rowid we a
1cce0 72 65 20 74 6f 20 73 65 65 6b 20 74 6f 20 2a 2f  re to seek to */
1ccf0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
1cd00 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1cd10 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1cd20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1cd30 32 21 3d 30 20 29 3b 0a 20 20 70 43 20 3d 20 70  2!=0 );.  pC = p
1cd40 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1cd50 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1cd60 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1cd70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
1cd80 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  g==0 );.  assert
1cd90 28 20 4f 50 5f 53 65 65 6b 4c 45 20 3d 3d 20 4f  ( OP_SeekLE == O
1cda0 50 5f 53 65 65 6b 4c 54 2b 31 20 29 3b 0a 20 20  P_SeekLT+1 );.  
1cdb0 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47  assert( OP_SeekG
1cdc0 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 32  E == OP_SeekLT+2
1cdd0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50   );.  assert( OP
1cde0 5f 53 65 65 6b 47 54 20 3d 3d 20 4f 50 5f 53 65  _SeekGT == OP_Se
1cdf0 65 6b 4c 54 2b 33 20 29 3b 0a 20 20 61 73 73 65  ekLT+3 );.  asse
1ce00 72 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65  rt( pC->isOrdere
1ce10 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  d );.  assert( p
1ce20 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  C->pCursor!=0 );
1ce30 0a 20 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70 63  .  oc = pOp->opc
1ce40 6f 64 65 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  ode;.  pC->nullR
1ce50 6f 77 20 3d 20 30 3b 0a 23 69 66 64 65 66 20 53  ow = 0;.#ifdef S
1ce60 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43  QLITE_DEBUG.  pC
1ce70 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e  ->seekOp = pOp->
1ce80 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 20  opcode;.#endif. 
1ce90 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65   if( pC->isTable
1cea0 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 69   ){.    /* The i
1ceb0 6e 70 75 74 20 76 61 6c 75 65 20 69 6e 20 50 33  nput value in P3
1cec0 20 6d 69 67 68 74 20 62 65 20 6f 66 20 61 6e 79   might be of any
1ced0 20 74 79 70 65 3a 20 69 6e 74 65 67 65 72 2c 20   type: integer, 
1cee0 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c 0a 20 20  real, string,.  
1cef0 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e 55    ** blob, or NU
1cf00 4c 4c 2e 20 20 42 75 74 20 69 74 20 6e 65 65 64  LL.  But it need
1cf10 73 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  s to be an integ
1cf20 65 72 20 62 65 66 6f 72 65 20 77 65 20 63 61 6e  er before we can
1cf30 20 64 6f 0a 20 20 20 20 2a 2a 20 74 68 65 20 73   do.    ** the s
1cf40 65 65 6b 2c 20 73 6f 20 63 6f 76 65 72 74 20 69  eek, so covert i
1cf50 74 2e 20 2a 2f 0a 20 20 20 20 70 49 6e 33 20 3d  t. */.    pIn3 =
1cf60 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
1cf70 0a 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e  .    if( (pIn3->
1cf80 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74  flags & (MEM_Int
1cf90 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d 3d 30 20 29  |MEM_Real))==0 )
1cfa0 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d  {.      applyNum
1cfb0 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e  ericAffinity(pIn
1cfc0 33 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20  3, 0);.    }.   
1cfd0 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56   iKey = sqlite3V
1cfe0 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 33  dbeIntValue(pIn3
1cff0 29 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64  );.    pC->rowid
1d000 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 0a 20 20  IsValid = 0;..  
1d010 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76    /* If the P3 v
1d020 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62  alue could not b
1d030 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  e converted into
1d040 20 61 6e 20 69 6e 74 65 67 65 72 20 77 69 74 68   an integer with
1d050 6f 75 74 0a 20 20 20 20 2a 2a 20 6c 6f 73 73 20  out.    ** loss 
1d060 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20  of information, 
1d070 74 68 65 6e 20 73 70 65 63 69 61 6c 20 70 72 6f  then special pro
1d080 63 65 73 73 69 6e 67 20 69 73 20 72 65 71 75 69  cessing is requi
1d090 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20 69 66  red... */.    if
1d0a0 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
1d0b0 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a   MEM_Int)==0 ){.
1d0c0 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d        if( (pIn3-
1d0d0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61  >flags & MEM_Rea
1d0e0 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  l)==0 ){.       
1d0f0 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76 61   /* If the P3 va
1d100 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f  lue cannot be co
1d110 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 79  nverted into any
1d120 20 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65   kind of a numbe
1d130 72 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68  r,.        ** th
1d140 65 6e 20 74 68 65 20 73 65 65 6b 20 69 73 20 6e  en the seek is n
1d150 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20  ot possible, so 
1d160 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20  jump to P2 */.  
1d170 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
1d180 70 32 20 2d 20 31 3b 20 20 56 64 62 65 42 72 61  p2 - 1;  VdbeBra
1d190 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20  nchTaken(1,2);. 
1d1a0 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
1d1b0 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20      }..      /* 
1d1c0 49 66 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61  If the approxima
1d1d0 74 69 6f 6e 20 69 4b 65 79 20 69 73 20 6c 61 72  tion iKey is lar
1d1e0 67 65 72 20 74 68 61 6e 20 74 68 65 20 61 63 74  ger than the act
1d1f0 75 61 6c 20 72 65 61 6c 20 73 65 61 72 63 68 0a  ual real search.
1d200 20 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73        ** term, s
1d210 75 62 73 74 69 74 75 74 65 20 3e 3d 20 66 6f 72  ubstitute >= for
1d220 20 3e 20 61 6e 64 20 3c 20 66 6f 72 20 3c 3d 2e   > and < for <=.
1d230 20 65 2e 67 2e 20 69 66 20 74 68 65 20 73 65 61   e.g. if the sea
1d240 72 63 68 20 74 65 72 6d 0a 20 20 20 20 20 20 2a  rch term.      *
1d250 2a 20 69 73 20 34 2e 39 20 61 6e 64 20 74 68 65  * is 4.9 and the
1d260 20 69 6e 74 65 67 65 72 20 61 70 70 72 6f 78 69   integer approxi
1d270 6d 61 74 69 6f 6e 20 35 3a 0a 20 20 20 20 20 20  mation 5:.      
1d280 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20  **.      **     
1d290 20 20 20 28 78 20 3e 20 20 34 2e 39 29 20 20 20     (x >  4.9)   
1d2a0 20 2d 3e 20 20 20 20 20 28 78 20 3e 3d 20 35 29   ->     (x >= 5)
1d2b0 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20  .      **       
1d2c0 20 28 78 20 3c 3d 20 34 2e 39 29 20 20 20 20 2d   (x <= 4.9)    -
1d2d0 3e 20 20 20 20 20 28 78 20 3c 20 20 35 29 0a 20  >     (x <  5). 
1d2e0 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66       */.      if
1d2f0 28 20 70 49 6e 33 2d 3e 72 3c 28 64 6f 75 62 6c  ( pIn3->r<(doubl
1d300 65 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20  e)iKey ){.      
1d310 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
1d320 6b 47 45 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 2d  kGE==(OP_SeekGT-
1d330 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  1) );.        as
1d340 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 54 3d  sert( OP_SeekLT=
1d350 3d 28 4f 50 5f 53 65 65 6b 4c 45 2d 31 29 20 29  =(OP_SeekLE-1) )
1d360 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
1d370 28 20 28 4f 50 5f 53 65 65 6b 4c 45 20 26 20 30  ( (OP_SeekLE & 0
1d380 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b  x0001)==(OP_Seek
1d390 47 54 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a  GT & 0x0001) );.
1d3a0 20 20 20 20 20 20 20 20 69 66 28 20 28 6f 63 20          if( (oc 
1d3b0 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53  & 0x0001)==(OP_S
1d3c0 65 65 6b 47 54 20 26 20 30 78 30 30 30 31 29 20  eekGT & 0x0001) 
1d3d0 29 20 6f 63 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a  ) oc--;.      }.
1d3e0 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65  .      /* If the
1d3f0 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69   approximation i
1d400 4b 65 79 20 69 73 20 73 6d 61 6c 6c 65 72 20 74  Key is smaller t
1d410 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72  han the actual r
1d420 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20  eal search.     
1d430 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69   ** term, substi
1d440 74 75 74 65 20 3c 3d 20 66 6f 72 20 3c 20 61 6e  tute <= for < an
1d450 64 20 3e 20 66 6f 72 20 3e 3d 2e 20 20 2a 2f 0a  d > for >=.  */.
1d460 20 20 20 20 20 20 65 6c 73 65 20 69 66 28 20 70        else if( p
1d470 49 6e 33 2d 3e 72 3e 28 64 6f 75 62 6c 65 29 69  In3->r>(double)i
1d480 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61  Key ){.        a
1d490 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45  ssert( OP_SeekLE
1d4a0 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 2b 31 29 20  ==(OP_SeekLT+1) 
1d4b0 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
1d4c0 74 28 20 4f 50 5f 53 65 65 6b 47 54 3d 3d 28 4f  t( OP_SeekGT==(O
1d4d0 50 5f 53 65 65 6b 47 45 2b 31 29 20 29 3b 0a 20  P_SeekGE+1) );. 
1d4e0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28         assert( (
1d4f0 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30 78 30 30  OP_SeekLT & 0x00
1d500 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 20  01)==(OP_SeekGE 
1d510 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20  & 0x0001) );.   
1d520 20 20 20 20 20 69 66 28 20 28 6f 63 20 26 20 30       if( (oc & 0
1d530 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b  x0001)==(OP_Seek
1d540 4c 54 20 26 20 30 78 30 30 30 31 29 20 29 20 6f  LT & 0x0001) ) o
1d550 63 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  c++;.      }.   
1d560 20 7d 20 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   } .    rc = sql
1d570 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
1d580 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72  npacked(pC->pCur
1d590 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 69 4b 65  sor, 0, (u64)iKe
1d5a0 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20  y, 0, &res);.   
1d5b0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1d5c0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  OK ){.      goto
1d5d0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1d5e0 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  ror;.    }.    i
1d5f0 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  f( res==0 ){.   
1d600 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61     pC->rowidIsVa
1d610 6c 69 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 70  lid = 1;.      p
1d620 43 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 69  C->lastRowid = i
1d630 4b 65 79 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  Key;.    }.  }el
1d640 73 65 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d  se{.    nField =
1d650 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20   pOp->p4.i;.    
1d660 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
1d670 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
1d680 0a 20 20 20 20 61 73 73 65 72 74 28 20 6e 46 69  .    assert( nFi
1d690 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20 72 2e 70  eld>0 );.    r.p
1d6a0 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b  KeyInfo = pC->pK
1d6b0 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46  eyInfo;.    r.nF
1d6c0 69 65 6c 64 20 3d 20 28 75 31 36 29 6e 46 69 65  ield = (u16)nFie
1d6d0 6c 64 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20  ld;..    /* The 
1d6e0 6e 65 78 74 20 6c 69 6e 65 20 6f 66 20 63 6f 64  next line of cod
1d6f0 65 20 63 6f 6d 70 75 74 65 73 20 61 73 20 66 6f  e computes as fo
1d700 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66 61 73 74  llows, only fast
1d710 65 72 3a 0a 20 20 20 20 2a 2a 20 20 20 69 66 28  er:.    **   if(
1d720 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c   oc==OP_SeekGT |
1d730 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20  | oc==OP_SeekLE 
1d740 29 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e  ){.    **     r.
1d750 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b  default_rc = -1;
1d760 0a 20 20 20 20 2a 2a 20 20 20 7d 65 6c 73 65 7b  .    **   }else{
1d770 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65  .    **     r.de
1d780 66 61 75 6c 74 5f 72 63 20 3d 20 2b 31 3b 0a 20  fault_rc = +1;. 
1d790 20 20 20 2a 2a 20 20 20 7d 0a 20 20 20 20 2a 2f     **   }.    */
1d7a0 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72  .    r.default_r
1d7b0 63 20 3d 20 28 28 31 20 26 20 28 6f 63 20 2d 20  c = ((1 & (oc - 
1d7c0 4f 50 5f 53 65 65 6b 4c 54 29 29 20 3f 20 2d 31  OP_SeekLT)) ? -1
1d7d0 20 3a 20 2b 31 29 3b 0a 20 20 20 20 61 73 73 65   : +1);.    asse
1d7e0 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47  rt( oc!=OP_SeekG
1d7f0 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72  T || r.default_r
1d800 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73 73  c==-1 );.    ass
1d810 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b  ert( oc!=OP_Seek
1d820 4c 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f  LE || r.default_
1d830 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73  rc==-1 );.    as
1d840 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65  sert( oc!=OP_See
1d850 6b 47 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74  kGE || r.default
1d860 5f 72 63 3d 3d 2b 31 20 29 3b 0a 20 20 20 20 61  _rc==+1 );.    a
1d870 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65  ssert( oc!=OP_Se
1d880 65 6b 4c 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c  ekLT || r.defaul
1d890 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 0a 20 20 20  t_rc==+1 );..   
1d8a0 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b   r.aMem = &aMem[
1d8b0 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66  pOp->p3];.#ifdef
1d8c0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
1d8d0 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69    { int i; for(i
1d8e0 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20  =0; i<r.nField; 
1d8f0 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d  i++) assert( mem
1d900 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b  IsValid(&r.aMem[
1d910 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a  i]) ); }.#endif.
1d920 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 72      ExpandBlob(r
1d930 2e 61 4d 65 6d 29 3b 0a 20 20 20 20 72 63 20 3d  .aMem);.    rc =
1d940 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
1d950 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e  etoUnpacked(pC->
1d960 70 43 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c 20  pCursor, &r, 0, 
1d970 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66  0, &res);.    if
1d980 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1d990 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  ){.      goto ab
1d9a0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1d9b0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e  ;.    }.    pC->
1d9c0 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
1d9d0 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 64 65 66 65  ;.  }.  pC->defe
1d9e0 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
1d9f0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
1da00 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
1da10 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
1da20 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 65  EST.  sqlite3_se
1da30 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65  arch_count++;.#e
1da40 6e 64 69 66 0a 20 20 69 66 28 20 6f 63 3e 3d 4f  ndif.  if( oc>=O
1da50 50 5f 53 65 65 6b 47 45 20 29 7b 20 20 61 73 73  P_SeekGE ){  ass
1da60 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  ert( oc==OP_Seek
1da70 47 45 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  GE || oc==OP_See
1da80 6b 47 54 20 29 3b 0a 20 20 20 20 69 66 28 20 72  kGT );.    if( r
1da90 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20  es<0 || (res==0 
1daa0 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54  && oc==OP_SeekGT
1dab0 29 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d  ) ){.      res =
1dac0 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   0;.      rc = s
1dad0 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 28  qlite3BtreeNext(
1dae0 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65  pC->pCursor, &re
1daf0 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  s);.      if( rc
1db00 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
1db10 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1db20 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 70 43 2d  error;.      pC-
1db30 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
1db40 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  0;.    }else{.  
1db50 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20      res = 0;.   
1db60 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
1db70 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53  assert( oc==OP_S
1db80 65 65 6b 4c 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekLT || oc==OP_
1db90 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20 69 66  SeekLE );.    if
1dba0 28 20 72 65 73 3e 30 20 7c 7c 20 28 72 65 73 3d  ( res>0 || (res=
1dbb0 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65  =0 && oc==OP_See
1dbc0 6b 4c 54 29 20 29 7b 0a 20 20 20 20 20 20 72 65  kLT) ){.      re
1dbd0 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20  s = 0;.      rc 
1dbe0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72  = sqlite3BtreePr
1dbf0 65 76 69 6f 75 73 28 70 43 2d 3e 70 43 75 72 73  evious(pC->pCurs
1dc00 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20  or, &res);.     
1dc10 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1dc20 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
1dc30 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1dc40 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56      pC->rowidIsV
1dc50 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 7d 65  alid = 0;.    }e
1dc60 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 72 65  lse{.      /* re
1dc70 73 20 6d 69 67 68 74 20 62 65 20 6e 65 67 61 74  s might be negat
1dc80 69 76 65 20 62 65 63 61 75 73 65 20 74 68 65 20  ive because the 
1dc90 74 61 62 6c 65 20 69 73 20 65 6d 70 74 79 2e 20  table is empty. 
1dca0 20 43 68 65 63 6b 20 74 6f 0a 20 20 20 20 20 20   Check to.      
1dcb0 2a 2a 20 73 65 65 20 69 66 20 74 68 69 73 20 69  ** see if this i
1dcc0 73 20 74 68 65 20 63 61 73 65 2e 0a 20 20 20 20  s the case..    
1dcd0 20 20 2a 2f 0a 20 20 20 20 20 20 72 65 73 20 3d    */.      res =
1dce0 20 73 71 6c 69 74 65 33 42 74 72 65 65 45 6f 66   sqlite3BtreeEof
1dcf0 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20  (pC->pCursor);. 
1dd00 20 20 20 7d 0a 20 20 7d 0a 20 20 61 73 73 65 72     }.  }.  asser
1dd10 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a  t( pOp->p2>0 );.
1dd20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
1dd30 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69  n(res!=0,2);.  i
1dd40 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63  f( res ){.    pc
1dd50 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1dd60 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
1dd70 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 20  /* Opcode: Seek 
1dd80 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
1dd90 79 6e 6f 70 73 69 73 3a 20 20 69 6e 74 6b 65 79  ynopsis:  intkey
1dda0 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 31 20  =r[P2].**.** P1 
1ddb0 69 73 20 61 6e 20 6f 70 65 6e 20 74 61 62 6c 65  is an open table
1ddc0 20 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69   cursor and P2 i
1ddd0 73 20 61 20 72 6f 77 69 64 20 69 6e 74 65 67 65  s a rowid intege
1dde0 72 2e 20 20 41 72 72 61 6e 67 65 0a 2a 2a 20 66  r.  Arrange.** f
1ddf0 6f 72 20 50 31 20 74 6f 20 6d 6f 76 65 20 73 6f  or P1 to move so
1de00 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
1de10 74 6f 20 74 68 65 20 72 6f 77 69 64 20 67 69 76  to the rowid giv
1de20 65 6e 20 62 79 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  en by P2..**.** 
1de30 54 68 69 73 20 69 73 20 61 63 74 75 61 6c 6c 79  This is actually
1de40 20 61 20 64 65 66 65 72 72 65 64 20 73 65 65 6b   a deferred seek
1de50 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63 74 75 61  .  Nothing actua
1de60 6c 6c 79 20 68 61 70 70 65 6e 73 20 75 6e 74 69  lly happens unti
1de70 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20  l.** the cursor 
1de80 69 73 20 75 73 65 64 20 74 6f 20 72 65 61 64 20  is used to read 
1de90 61 20 72 65 63 6f 72 64 2e 20 20 54 68 61 74 20  a record.  That 
1dea0 77 61 79 2c 20 69 66 20 6e 6f 20 72 65 61 64 73  way, if no reads
1deb0 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75 6e  .** occur, no un
1dec0 6e 65 63 65 73 73 61 72 79 20 49 2f 4f 20 68 61  necessary I/O ha
1ded0 70 70 65 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ppens..*/.case O
1dee0 50 5f 53 65 65 6b 3a 20 7b 20 20 20 20 2f 2a 20  P_Seek: {    /* 
1def0 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  in2 */.  VdbeCur
1df00 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65  sor *pC;..  asse
1df10 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1df20 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1df30 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
1df40 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1df50 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1df60 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1df70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  C->pCursor!=0 );
1df80 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
1df90 73 54 61 62 6c 65 20 29 3b 0a 20 20 70 43 2d 3e  sTable );.  pC->
1dfa0 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 70  nullRow = 0;.  p
1dfb0 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
1dfc0 3e 70 32 5d 3b 0a 20 20 70 43 2d 3e 6d 6f 76 65  >p2];.  pC->move
1dfd0 74 6f 54 61 72 67 65 74 20 3d 20 73 71 6c 69 74  toTarget = sqlit
1dfe0 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
1dff0 49 6e 32 29 3b 0a 20 20 70 43 2d 3e 72 6f 77 69  In2);.  pC->rowi
1e000 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
1e010 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
1e020 74 6f 20 3d 20 31 3b 0a 20 20 62 72 65 61 6b 3b  to = 1;.  break;
1e030 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f 70 63 6f 64 65  .}.  ../* Opcode
1e040 3a 20 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33  : Found P1 P2 P3
1e050 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
1e060 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
1e070 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74  **.** If P4==0 t
1e080 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
1e090 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e  holds a blob con
1e0a0 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65  structed by Make
1e0b0 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50  Record.  If.** P
1e0c0 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  4>0 then registe
1e0d0 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  r P3 is the firs
1e0e0 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  t of P4 register
1e0f0 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75  s that form an u
1e100 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72  npacked.** recor
1e110 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20  d..**.** Cursor 
1e120 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65  P1 is on an inde
1e130 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65  x btree.  If the
1e140 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69   record identifi
1e150 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a  ed by P3 and P4.
1e160 2a 2a 20 69 73 20 61 20 70 72 65 66 69 78 20 6f  ** is a prefix o
1e170 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50  f any entry in P
1e180 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73  1 then a jump is
1e190 20 6d 61 64 65 20 74 6f 20 50 32 20 61 6e 64 0a   made to P2 and.
1e1a0 2a 2a 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f  ** P1 is left po
1e1b0 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6d 61  inting at the ma
1e1c0 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a  tching entry..**
1e1d0 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69  .** This operati
1e1e0 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  on leaves the cu
1e1f0 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20  rsor in a state 
1e200 77 68 65 72 65 20 69 74 20 63 61 6e 20 62 65 0a  where it can be.
1e210 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20 74  ** advanced in t
1e220 68 65 20 66 6f 72 77 61 72 64 20 64 69 72 65 63  he forward direc
1e230 74 69 6f 6e 2e 20 20 54 68 65 20 4e 65 78 74 20  tion.  The Next 
1e240 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c  instruction will
1e250 20 77 6f 72 6b 2c 0a 2a 2a 20 62 75 74 20 6e 6f   work,.** but no
1e260 74 20 74 68 65 20 50 72 65 76 20 69 6e 73 74 72  t the Prev instr
1e270 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65  uction..**.** Se
1e280 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64  e also: NotFound
1e290 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 4e 6f  , NoConflict, No
1e2a0 74 45 78 69 73 74 73 2e 20 53 65 65 6b 47 65 0a  tExists. SeekGe.
1e2b0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  */./* Opcode: No
1e2c0 74 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20  tFound P1 P2 P3 
1e2d0 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
1e2e0 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
1e2f0 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68  *.** If P4==0 th
1e300 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 68  en register P3 h
1e310 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73  olds a blob cons
1e320 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52  tructed by MakeR
1e330 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34  ecord.  If.** P4
1e340 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  >0 then register
1e350 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
1e360 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
1e370 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e   that form an un
1e380 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64  packed.** record
1e390 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20  ..** .** Cursor 
1e3a0 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65  P1 is on an inde
1e3b0 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65  x btree.  If the
1e3c0 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69   record identifi
1e3d0 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a  ed by P3 and P4.
1e3e0 2a 2a 20 69 73 20 6e 6f 74 20 74 68 65 20 70 72  ** is not the pr
1e3f0 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72  efix of any entr
1e400 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a  y in P1 then a j
1e410 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50  ump is made to P
1e420 32 2e 20 20 49 66 20 50 31 20 0a 2a 2a 20 64 6f  2.  If P1 .** do
1e430 65 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20 65 6e  es contain an en
1e440 74 72 79 20 77 68 6f 73 65 20 70 72 65 66 69 78  try whose prefix
1e450 20 6d 61 74 63 68 65 73 20 74 68 65 20 50 33 2f   matches the P3/
1e460 50 34 20 72 65 63 6f 72 64 20 74 68 65 6e 20 63  P4 record then c
1e470 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20  ontrol.** falls 
1e480 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
1e490 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
1e4a0 61 6e 64 20 50 31 20 69 73 20 6c 65 66 74 20 70  and P1 is left p
1e4b0 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 0a 2a  ointing at the.*
1e4c0 2a 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79  * matching entry
1e4d0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65  ..**.** This ope
1e4e0 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68  ration leaves th
1e4f0 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74  e cursor in a st
1e500 61 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e  ate where it can
1e510 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63  not be.** advanc
1e520 65 64 20 69 6e 20 65 69 74 68 65 72 20 64 69 72  ed in either dir
1e530 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65  ection.  In othe
1e540 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78  r words, the Nex
1e550 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70  t and Prev.** op
1e560 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72  codes do not wor
1e570 6b 20 61 66 74 65 72 20 74 68 69 73 20 6f 70 65  k after this ope
1e580 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65  ration..**.** Se
1e590 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
1e5a0 6f 74 45 78 69 73 74 73 2c 20 4e 6f 43 6f 6e 66  otExists, NoConf
1e5b0 6c 69 63 74 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  lict.*/./* Opcod
1e5c0 65 3a 20 4e 6f 43 6f 6e 66 6c 69 63 74 20 50 31  e: NoConflict P1
1e5d0 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
1e5e0 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
1e5f0 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50  3@P4].**.** If P
1e600 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74  4==0 then regist
1e610 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c  er P3 holds a bl
1e620 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ob constructed b
1e630 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49  y MakeRecord.  I
1e640 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72  f.** P4>0 then r
1e650 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68  egister P3 is th
1e660 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65  e first of P4 re
1e670 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72  gisters that for
1e680 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a  m an unpacked.**
1e690 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20   record..** .** 
1e6a0 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20  Cursor P1 is on 
1e6b0 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20  an index btree. 
1e6c0 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69   If the record i
1e6d0 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20  dentified by P3 
1e6e0 61 6e 64 20 50 34 0a 2a 2a 20 63 6f 6e 74 61 69  and P4.** contai
1e6f0 6e 73 20 61 6e 79 20 4e 55 4c 4c 20 76 61 6c 75  ns any NULL valu
1e700 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  e, jump immediat
1e710 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20 61  ely to P2.  If a
1e720 6c 6c 20 74 65 72 6d 73 20 6f 66 20 74 68 65 0a  ll terms of the.
1e730 2a 2a 20 72 65 63 6f 72 64 20 61 72 65 20 6e 6f  ** record are no
1e740 74 2d 4e 55 4c 4c 20 74 68 65 6e 20 61 20 63 68  t-NULL then a ch
1e750 65 63 6b 20 69 73 20 64 6f 6e 65 20 74 6f 20 64  eck is done to d
1e760 65 74 65 72 6d 69 6e 65 20 69 66 20 61 6e 79 20  etermine if any 
1e770 72 6f 77 20 69 6e 20 74 68 65 0a 2a 2a 20 50 31  row in the.** P1
1e780 20 69 6e 64 65 78 20 62 74 72 65 65 20 68 61 73   index btree has
1e790 20 61 20 6d 61 74 63 68 69 6e 67 20 6b 65 79 20   a matching key 
1e7a0 70 72 65 66 69 78 2e 20 20 49 66 20 74 68 65 72  prefix.  If ther
1e7b0 65 20 61 72 65 20 6e 6f 20 6d 61 74 63 68 65 73  e are no matches
1e7c0 2c 20 6a 75 6d 70 0a 2a 2a 20 69 6d 6d 65 64 69  , jump.** immedi
1e7d0 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66  ately to P2.  If
1e7e0 20 74 68 65 72 65 20 69 73 20 61 20 6d 61 74 63   there is a matc
1e7f0 68 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  h, fall through 
1e800 61 6e 64 20 6c 65 61 76 65 20 74 68 65 20 50 31  and leave the P1
1e810 0a 2a 2a 20 63 75 72 73 6f 72 20 70 6f 69 6e 74  .** cursor point
1e820 69 6e 67 20 74 6f 20 74 68 65 20 6d 61 74 63 68  ing to the match
1e830 69 6e 67 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 54  ing row..**.** T
1e840 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 73 69  his opcode is si
1e850 6d 69 6c 61 72 20 74 6f 20 4f 50 5f 4e 6f 74 46  milar to OP_NotF
1e860 6f 75 6e 64 20 77 69 74 68 20 74 68 65 20 65 78  ound with the ex
1e870 63 65 70 74 69 6f 6e 73 20 74 68 61 74 20 74 68  ceptions that th
1e880 65 0a 2a 2a 20 62 72 61 6e 63 68 20 69 73 20 61  e.** branch is a
1e890 6c 77 61 79 73 20 74 61 6b 65 6e 20 69 66 20 61  lways taken if a
1e8a0 6e 79 20 70 61 72 74 20 6f 66 20 74 68 65 20 73  ny part of the s
1e8b0 65 61 72 63 68 20 6b 65 79 20 69 6e 70 75 74 20  earch key input 
1e8c0 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54  is NULL..**.** T
1e8d0 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65  his operation le
1e8e0 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
1e8f0 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65  in a state where
1e900 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a   it cannot be.**
1e910 20 61 64 76 61 6e 63 65 64 20 69 6e 20 65 69 74   advanced in eit
1e920 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20  her direction.  
1e930 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
1e940 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65  the Next and Pre
1e950 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f 20  v.** opcodes do 
1e960 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65 72 20 74  not work after t
1e970 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a  his operation..*
1e980 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e  *.** See also: N
1e990 6f 74 46 6f 75 6e 64 2c 20 46 6f 75 6e 64 2c 20  otFound, Found, 
1e9a0 4e 6f 74 45 78 69 73 74 73 0a 2a 2f 0a 63 61 73  NotExists.*/.cas
1e9b0 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 3a  e OP_NoConflict:
1e9c0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1e9d0 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74  3 */.case OP_Not
1e9e0 46 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f 2a 20  Found:       /* 
1e9f0 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
1ea00 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20 20 20  e OP_Found: {   
1ea10 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1ea20 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c 72 65 61  3 */.  int alrea
1ea30 64 79 45 78 69 73 74 73 3b 0a 20 20 69 6e 74 20  dyExists;.  int 
1ea40 69 69 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  ii;.  VdbeCursor
1ea50 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b   *pC;.  int res;
1ea60 0a 20 20 63 68 61 72 20 2a 70 46 72 65 65 3b 0a  .  char *pFree;.
1ea70 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
1ea80 20 2a 70 49 64 78 4b 65 79 3b 0a 20 20 55 6e 70   *pIdxKey;.  Unp
1ea90 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20  ackedRecord r;. 
1eaa0 20 63 68 61 72 20 61 54 65 6d 70 52 65 63 5b 52   char aTempRec[R
1eab0 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 55 6e 70  OUND8(sizeof(Unp
1eac0 61 63 6b 65 64 52 65 63 6f 72 64 29 29 20 2b 20  ackedRecord)) + 
1ead0 73 69 7a 65 6f 66 28 4d 65 6d 29 2a 34 20 2b 20  sizeof(Mem)*4 + 
1eae0 37 5d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  7];..#ifdef SQLI
1eaf0 54 45 5f 54 45 53 54 0a 20 20 69 66 28 20 70 4f  TE_TEST.  if( pO
1eb00 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 6f  p->opcode!=OP_No
1eb10 43 6f 6e 66 6c 69 63 74 20 29 20 73 71 6c 69 74  Conflict ) sqlit
1eb20 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b  e3_found_count++
1eb30 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 61 73 73 65  ;.#endif..  asse
1eb40 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1eb50 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1eb60 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
1eb70 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
1eb80 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70 43 20  4_INT32 );.  pC 
1eb90 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1eba0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1ebb0 43 21 3d 30 20 29 3b 0a 23 69 66 64 65 66 20 53  C!=0 );.#ifdef S
1ebc0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43  QLITE_DEBUG.  pC
1ebd0 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e  ->seekOp = pOp->
1ebe0 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 20  opcode;.#endif. 
1ebf0 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
1ec00 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74  p->p3];.  assert
1ec10 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
1ec20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1ec30 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a  ->isTable==0 );.
1ec40 20 20 70 46 72 65 65 20 3d 20 30 3b 20 20 2f 2a    pFree = 0;  /*
1ec50 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e   Not needed.  On
1ec60 6c 79 20 75 73 65 64 20 74 6f 20 73 75 70 70 72  ly used to suppr
1ec70 65 73 73 20 61 20 63 6f 6d 70 69 6c 65 72 20 77  ess a compiler w
1ec80 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 69 66 28  arning. */.  if(
1ec90 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a   pOp->p4.i>0 ){.
1eca0 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d      r.pKeyInfo =
1ecb0 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20   pC->pKeyInfo;. 
1ecc0 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75     r.nField = (u
1ecd0 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20  16)pOp->p4.i;.  
1ece0 20 20 72 2e 61 4d 65 6d 20 3d 20 70 49 6e 33 3b    r.aMem = pIn3;
1ecf0 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69  .    for(ii=0; i
1ed00 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b  i<r.nField; ii++
1ed10 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
1ed20 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61   memIsValid(&r.a
1ed30 4d 65 6d 5b 69 69 5d 29 20 29 3b 0a 20 20 20 20  Mem[ii]) );.    
1ed40 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 26 72 2e    ExpandBlob(&r.
1ed50 61 4d 65 6d 5b 69 69 5d 29 3b 0a 23 69 66 64 65  aMem[ii]);.#ifde
1ed60 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
1ed70 20 20 20 20 20 69 66 28 20 69 69 20 29 20 52 45       if( ii ) RE
1ed80 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
1ed90 2d 3e 70 33 2b 69 69 2c 20 26 72 2e 61 4d 65 6d  ->p3+ii, &r.aMem
1eda0 5b 69 69 5d 29 3b 0a 23 65 6e 64 69 66 0a 20 20  [ii]);.#endif.  
1edb0 20 20 7d 0a 20 20 20 20 70 49 64 78 4b 65 79 20    }.    pIdxKey 
1edc0 3d 20 26 72 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  = &r;.  }else{. 
1edd0 20 20 20 70 49 64 78 4b 65 79 20 3d 20 73 71 6c     pIdxKey = sql
1ede0 69 74 65 33 56 64 62 65 41 6c 6c 6f 63 55 6e 70  ite3VdbeAllocUnp
1edf0 61 63 6b 65 64 52 65 63 6f 72 64 28 0a 20 20 20  ackedRecord(.   
1ee00 20 20 20 20 20 70 43 2d 3e 70 4b 65 79 49 6e 66       pC->pKeyInf
1ee10 6f 2c 20 61 54 65 6d 70 52 65 63 2c 20 73 69 7a  o, aTempRec, siz
1ee20 65 6f 66 28 61 54 65 6d 70 52 65 63 29 2c 20 26  eof(aTempRec), &
1ee30 70 46 72 65 65 0a 20 20 20 20 29 3b 20 0a 20 20  pFree.    ); .  
1ee40 20 20 69 66 28 20 70 49 64 78 4b 65 79 3d 3d 30    if( pIdxKey==0
1ee50 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
1ee60 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 33      assert( pIn3
1ee70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
1ee80 6f 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ob );.    assert
1ee90 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
1eea0 20 4d 45 4d 5f 5a 65 72 6f 29 3d 3d 30 20 29 3b   MEM_Zero)==0 );
1eeb0 20 20 2f 2a 20 7a 65 72 6f 62 6c 6f 62 73 20 61    /* zeroblobs a
1eec0 6c 72 65 61 64 79 20 65 78 70 61 6e 64 65 64 20  lready expanded 
1eed0 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  */.    sqlite3Vd
1eee0 62 65 52 65 63 6f 72 64 55 6e 70 61 63 6b 28 70  beRecordUnpack(p
1eef0 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 49 6e  C->pKeyInfo, pIn
1ef00 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 20 70  3->n, pIn3->z, p
1ef10 49 64 78 4b 65 79 29 3b 0a 20 20 7d 0a 20 20 70  IdxKey);.  }.  p
1ef20 49 64 78 4b 65 79 2d 3e 64 65 66 61 75 6c 74 5f  IdxKey->default_
1ef30 72 63 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f  rc = 0;.  if( pO
1ef40 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f  p->opcode==OP_No
1ef50 43 6f 6e 66 6c 69 63 74 20 29 7b 0a 20 20 20 20  Conflict ){.    
1ef60 2f 2a 20 46 6f 72 20 74 68 65 20 4f 50 5f 4e 6f  /* For the OP_No
1ef70 43 6f 6e 66 6c 69 63 74 20 6f 70 63 6f 64 65 2c  Conflict opcode,
1ef80 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69   take the jump i
1ef90 66 20 61 6e 79 20 6f 66 20 74 68 65 0a 20 20 20  f any of the.   
1efa0 20 2a 2a 20 69 6e 70 75 74 20 66 69 65 6c 64 73   ** input fields
1efb0 20 61 72 65 20 4e 55 4c 4c 2c 20 73 69 6e 63 65   are NULL, since
1efc0 20 61 6e 79 20 6b 65 79 20 77 69 74 68 20 61 20   any key with a 
1efd0 4e 55 4c 4c 20 77 69 6c 6c 20 6e 6f 74 0a 20 20  NULL will not.  
1efe0 20 20 2a 2a 20 63 6f 6e 66 6c 69 63 74 20 2a 2f    ** conflict */
1eff0 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69  .    for(ii=0; i
1f000 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b  i<r.nField; ii++
1f010 29 7b 0a 20 20 20 20 20 20 69 66 28 20 72 2e 61  ){.      if( r.a
1f020 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20  Mem[ii].flags & 
1f030 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
1f040 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
1f050 20 2d 20 31 3b 20 56 64 62 65 42 72 61 6e 63 68   - 1; VdbeBranch
1f060 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 20 20  Taken(1,2);.    
1f070 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
1f080 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72   }.    }.  }.  r
1f090 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1f0a0 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
1f0b0 43 2d 3e 70 43 75 72 73 6f 72 2c 20 70 49 64 78  C->pCursor, pIdx
1f0c0 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72 65 73 29  Key, 0, 0, &res)
1f0d0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e  ;.  if( pOp->p4.
1f0e0 69 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  i==0 ){.    sqli
1f0f0 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 46  te3DbFree(db, pF
1f100 72 65 65 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  ree);.  }.  if( 
1f110 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
1f120 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
1f130 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74    pC->seekResult
1f140 20 3d 20 72 65 73 3b 0a 20 20 61 6c 72 65 61 64   = res;.  alread
1f150 79 45 78 69 73 74 73 20 3d 20 28 72 65 73 3d 3d  yExists = (res==
1f160 30 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  0);.  pC->nullRo
1f170 77 20 3d 20 31 2d 61 6c 72 65 61 64 79 45 78 69  w = 1-alreadyExi
1f180 73 74 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72  sts;.  pC->defer
1f190 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
1f1a0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
1f1b0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
1f1c0 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
1f1d0 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a 20  e==OP_Found ){. 
1f1e0 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
1f1f0 65 6e 28 61 6c 72 65 61 64 79 45 78 69 73 74 73  en(alreadyExists
1f200 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20  !=0,2);.    if( 
1f210 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29 20  alreadyExists ) 
1f220 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1f230 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56  ;.  }else{.    V
1f240 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 61  dbeBranchTaken(a
1f250 6c 72 65 61 64 79 45 78 69 73 74 73 3d 3d 30 2c  lreadyExists==0,
1f260 32 29 3b 0a 20 20 20 20 69 66 28 20 21 61 6c 72  2);.    if( !alr
1f270 65 61 64 79 45 78 69 73 74 73 20 29 20 70 63 20  eadyExists ) pc 
1f280 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1f290 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
1f2a0 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69  * Opcode: NotExi
1f2b0 73 74 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a  sts P1 P2 P3 * *
1f2c0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e  .** Synopsis: in
1f2d0 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a  tkey=r[P3].**.**
1f2e0 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78   P1 is the index
1f2f0 20 6f 66 20 61 20 63 75 72 73 6f 72 20 6f 70 65   of a cursor ope
1f300 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c  n on an SQL tabl
1f310 65 20 62 74 72 65 65 20 28 77 69 74 68 20 69 6e  e btree (with in
1f320 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29 2e 20  teger.** keys). 
1f330 20 50 33 20 69 73 20 61 6e 20 69 6e 74 65 67 65   P3 is an intege
1f340 72 20 72 6f 77 69 64 2e 20 20 49 66 20 50 31 20  r rowid.  If P1 
1f350 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e  does not contain
1f360 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 0a 2a   a record with.*
1f370 2a 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20  * rowid P3 then 
1f380 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
1f390 20 74 6f 20 50 32 2e 20 20 49 66 20 50 31 20 64   to P2.  If P1 d
1f3a0 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 20 72 65  oes contain a re
1f3b0 63 6f 72 64 0a 2a 2a 20 77 69 74 68 20 72 6f 77  cord.** with row
1f3c0 69 64 20 50 33 20 74 68 65 6e 20 6c 65 61 76 65  id P3 then leave
1f3d0 20 74 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e   the cursor poin
1f3e0 74 69 6e 67 20 61 74 20 74 68 61 74 20 72 65 63  ting at that rec
1f3f0 6f 72 64 20 61 6e 64 20 66 61 6c 6c 0a 2a 2a 20  ord and fall.** 
1f400 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
1f410 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
1f420 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f  .**.** The OP_No
1f430 74 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70 65  tFound opcode pe
1f440 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20  rforms the same 
1f450 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64  operation on ind
1f460 65 78 20 62 74 72 65 65 73 0a 2a 2a 20 28 77 69  ex btrees.** (wi
1f470 74 68 20 61 72 62 69 74 72 61 72 79 20 6d 75 6c  th arbitrary mul
1f480 74 69 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a  ti-value keys)..
1f490 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
1f4a0 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  e leaves the cur
1f4b0 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77  sor in a state w
1f4c0 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62  here it cannot b
1f4d0 65 20 61 64 76 61 6e 63 65 64 0a 2a 2a 20 69 6e  e advanced.** in
1f4e0 20 65 69 74 68 65 72 20 64 69 72 65 63 74 69 6f   either directio
1f4f0 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  n.  In other wor
1f500 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64  ds, the Next and
1f510 20 50 72 65 76 20 6f 70 63 6f 64 65 73 20 77 69   Prev opcodes wi
1f520 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20 66  ll.** not work f
1f530 6f 6c 6c 6f 77 69 6e 67 20 74 68 69 73 20 6f 70  ollowing this op
1f540 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  code..**.** See 
1f550 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
1f560 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63  Found, NoConflic
1f570 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74  t.*/.case OP_Not
1f580 45 78 69 73 74 73 3a 20 7b 20 20 20 20 20 20 20  Exists: {       
1f590 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1f5a0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1f5b0 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
1f5c0 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
1f5d0 0a 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20  .  u64 iKey;..  
1f5e0 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
1f5f0 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
1f600 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
1f610 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65  EM_Int );.  asse
1f620 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1f630 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1f640 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
1f650 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1f660 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1f670 30 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  0 );.#ifdef SQLI
1f680 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73  TE_DEBUG.  pC->s
1f690 65 65 6b 4f 70 20 3d 20 30 3b 0a 23 65 6e 64 69  eekOp = 0;.#endi
1f6a0 66 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  f.  assert( pC->
1f6b0 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73  isTable );.  ass
1f6c0 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54  ert( pC->pseudoT
1f6d0 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20  ableReg==0 );.  
1f6e0 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
1f6f0 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  sor;.  assert( p
1f700 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 72 65 73  Crsr!=0 );.  res
1f710 20 3d 20 30 3b 0a 20 20 69 4b 65 79 20 3d 20 70   = 0;.  iKey = p
1f720 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 72 63 20 3d  In3->u.i;.  rc =
1f730 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
1f740 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73  etoUnpacked(pCrs
1f750 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20 26  r, 0, iKey, 0, &
1f760 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6c 61 73 74  res);.  pC->last
1f770 52 6f 77 69 64 20 3d 20 70 49 6e 33 2d 3e 75 2e  Rowid = pIn3->u.
1f780 69 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  i;.  pC->rowidIs
1f790 56 61 6c 69 64 20 3d 20 72 65 73 3d 3d 30 20 3f  Valid = res==0 ?
1f7a0 31 3a 30 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  1:0;.  pC->nullR
1f7b0 6f 77 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  ow = 0;.  pC->ca
1f7c0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
1f7d0 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 64  E_STALE;.  pC->d
1f7e0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
1f7f0 30 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  0;.  VdbeBranchT
1f800 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a  aken(res!=0,2);.
1f810 20 20 69 66 28 20 72 65 73 21 3d 30 20 29 7b 0a    if( res!=0 ){.
1f820 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
1f830 20 2d 20 31 3b 0a 20 20 20 20 61 73 73 65 72 74   - 1;.    assert
1f840 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c  ( pC->rowidIsVal
1f850 69 64 3d 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 70  id==0 );.  }.  p
1f860 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  C->seekResult = 
1f870 72 65 73 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  res;.  break;.}.
1f880 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75  ./* Opcode: Sequ
1f890 65 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a  ence P1 P2 * * *
1f8a0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
1f8b0 50 32 5d 3d 63 75 72 73 6f 72 5b 50 31 5d 2e 63  P2]=cursor[P1].c
1f8c0 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20 46 69 6e 64 20  tr++.**.** Find 
1f8d0 74 68 65 20 6e 65 78 74 20 61 76 61 69 6c 61 62  the next availab
1f8e0 6c 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62  le sequence numb
1f8f0 65 72 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31  er for cursor P1
1f900 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 73  ..** Write the s
1f910 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 69  equence number i
1f920 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
1f930 0a 2a 2a 20 54 68 65 20 73 65 71 75 65 6e 63 65  .** The sequence
1f940 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65 20 63   number on the c
1f950 75 72 73 6f 72 20 69 73 20 69 6e 63 72 65 6d 65  ursor is increme
1f960 6e 74 65 64 20 61 66 74 65 72 20 74 68 69 73 0a  nted after this.
1f970 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  ** instruction. 
1f980 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71   .*/.case OP_Seq
1f990 75 65 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20  uence: {        
1f9a0 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
1f9b0 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72  lease */.  asser
1f9c0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1f9d0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
1f9e0 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
1f9f0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1fa00 31 5d 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d  1]!=0 );.  pOut-
1fa10 3e 75 2e 69 20 3d 20 70 2d 3e 61 70 43 73 72 5b  >u.i = p->apCsr[
1fa20 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f 75  pOp->p1]->seqCou
1fa30 6e 74 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  nt++;.  break;.}
1fa40 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65  .../* Opcode: Ne
1fa50 77 52 6f 77 69 64 20 50 31 20 50 32 20 50 33 20  wRowid P1 P2 P3 
1fa60 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
1fa70 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a   r[P2]=rowid.**.
1fa80 2a 2a 20 47 65 74 20 61 20 6e 65 77 20 69 6e 74  ** Get a new int
1fa90 65 67 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62  eger record numb
1faa0 65 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64  er (a.k.a "rowid
1fab0 22 29 20 75 73 65 64 20 61 73 20 74 68 65 20 6b  ") used as the k
1fac0 65 79 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a  ey to a table..*
1fad0 2a 20 54 68 65 20 72 65 63 6f 72 64 20 6e 75 6d  * The record num
1fae0 62 65 72 20 69 73 20 6e 6f 74 20 70 72 65 76 69  ber is not previ
1faf0 6f 75 73 6c 79 20 75 73 65 64 20 61 73 20 61 20  ously used as a 
1fb00 6b 65 79 20 69 6e 20 74 68 65 20 64 61 74 61 62  key in the datab
1fb10 61 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61  ase.** table tha
1fb20 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e  t cursor P1 poin
1fb30 74 73 20 74 6f 2e 20 20 54 68 65 20 6e 65 77 20  ts to.  The new 
1fb40 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73  record number is
1fb50 20 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74   written.** writ
1fb60 74 65 6e 20 74 6f 20 72 65 67 69 73 74 65 72 20  ten to register 
1fb70 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e  P2..**.** If P3>
1fb80 30 20 74 68 65 6e 20 50 33 20 69 73 20 61 20 72  0 then P3 is a r
1fb90 65 67 69 73 74 65 72 20 69 6e 20 74 68 65 20 72  egister in the r
1fba0 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69  oot frame of thi
1fbb0 73 20 56 44 42 45 20 74 68 61 74 20 68 6f 6c 64  s VDBE that hold
1fbc0 73 20 0a 2a 2a 20 74 68 65 20 6c 61 72 67 65 73  s .** the larges
1fbd0 74 20 70 72 65 76 69 6f 75 73 6c 79 20 67 65 6e  t previously gen
1fbe0 65 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75  erated record nu
1fbf0 6d 62 65 72 2e 20 4e 6f 20 6e 65 77 20 72 65 63  mber. No new rec
1fc00 6f 72 64 20 6e 75 6d 62 65 72 73 20 61 72 65 0a  ord numbers are.
1fc10 2a 2a 20 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65  ** allowed to be
1fc20 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20   less than this 
1fc30 76 61 6c 75 65 2e 20 57 68 65 6e 20 74 68 69 73  value. When this
1fc40 20 76 61 6c 75 65 20 72 65 61 63 68 65 73 20 69   value reaches i
1fc50 74 73 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20  ts maximum, .** 
1fc60 61 6e 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20 65  an SQLITE_FULL e
1fc70 72 72 6f 72 20 69 73 20 67 65 6e 65 72 61 74 65  rror is generate
1fc80 64 2e 20 54 68 65 20 50 33 20 72 65 67 69 73 74  d. The P3 regist
1fc90 65 72 20 69 73 20 75 70 64 61 74 65 64 20 77 69  er is updated wi
1fca0 74 68 20 74 68 65 20 27 0a 2a 2a 20 67 65 6e 65  th the '.** gene
1fcb0 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d  rated record num
1fcc0 62 65 72 2e 20 54 68 69 73 20 50 33 20 6d 65 63  ber. This P3 mec
1fcd0 68 61 6e 69 73 6d 20 69 73 20 75 73 65 64 20 74  hanism is used t
1fce0 6f 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74  o help implement
1fcf0 20 74 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43 52   the.** AUTOINCR
1fd00 45 4d 45 4e 54 20 66 65 61 74 75 72 65 2e 0a 2a  EMENT feature..*
1fd10 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f 77  /.case OP_NewRow
1fd20 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  id: {           
1fd30 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
1fd40 73 65 20 2a 2f 0a 20 20 69 36 34 20 76 3b 20 20  se */.  i64 v;  
1fd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1fd60 2a 20 54 68 65 20 6e 65 77 20 72 6f 77 69 64 20  * The new rowid 
1fd70 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
1fd80 2a 70 43 3b 20 20 20 20 20 20 20 20 2f 2a 20 43  *pC;        /* C
1fd90 75 72 73 6f 72 20 6f 66 20 74 61 62 6c 65 20 74  ursor of table t
1fda0 6f 20 67 65 74 20 74 68 65 20 6e 65 77 20 72 6f  o get the new ro
1fdb0 77 69 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73  wid */.  int res
1fdc0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1fdd0 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 61 6e 20  /* Result of an 
1fde0 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74  sqlite3BtreeLast
1fdf0 28 29 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b  () */.  int cnt;
1fe00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1fe10 2a 20 43 6f 75 6e 74 65 72 20 74 6f 20 6c 69 6d  * Counter to lim
1fe20 69 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  it the number of
1fe30 20 73 65 61 72 63 68 65 73 20 2a 2f 0a 20 20 4d   searches */.  M
1fe40 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20  em *pMem;       
1fe50 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
1fe60 72 20 68 6f 6c 64 69 6e 67 20 6c 61 72 67 65 73  r holding larges
1fe70 74 20 72 6f 77 69 64 20 66 6f 72 20 41 55 54 4f  t rowid for AUTO
1fe80 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 56  INCREMENT */.  V
1fe90 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
1fea0 3b 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 66 72  ;     /* Root fr
1feb0 61 6d 65 20 6f 66 20 56 44 42 45 20 2a 2f 0a 0a  ame of VDBE */..
1fec0 20 20 76 20 3d 20 30 3b 0a 20 20 72 65 73 20 3d    v = 0;.  res =
1fed0 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   0;.  assert( pO
1fee0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1fef0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1ff00 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1ff10 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
1ff20 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
1ff30 20 69 66 28 20 4e 45 56 45 52 28 70 43 2d 3e 70   if( NEVER(pC->p
1ff40 43 75 72 73 6f 72 3d 3d 30 29 20 29 7b 0a 20 20  Cursor==0) ){.  
1ff50 20 20 2f 2a 20 54 68 65 20 7a 65 72 6f 20 69 6e    /* The zero in
1ff60 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 61 62 6f  itialization abo
1ff70 76 65 20 69 73 20 61 6c 6c 20 74 68 61 74 20 69  ve is all that i
1ff80 73 20 6e 65 65 64 65 64 20 2a 2f 0a 20 20 7d 65  s needed */.  }e
1ff90 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20  lse{.    /* The 
1ffa0 6e 65 78 74 20 72 6f 77 69 64 20 6f 72 20 72 65  next rowid or re
1ffb0 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 64 69 66  cord number (dif
1ffc0 66 65 72 65 6e 74 20 74 65 72 6d 73 20 66 6f 72  ferent terms for
1ffd0 20 74 68 65 20 73 61 6d 65 0a 20 20 20 20 2a 2a   the same.    **
1ffe0 20 74 68 69 6e 67 29 20 69 73 20 6f 62 74 61 69   thing) is obtai
1fff0 6e 65 64 20 69 6e 20 61 20 74 77 6f 2d 73 74 65  ned in a two-ste
20000 70 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20 20  p algorithm..   
20010 20 2a 2a 0a 20 20 20 20 2a 2a 20 46 69 72 73 74   **.    ** First
20020 20 77 65 20 61 74 74 65 6d 70 74 20 74 6f 20 66   we attempt to f
20030 69 6e 64 20 74 68 65 20 6c 61 72 67 65 73 74 20  ind the largest 
20040 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20 61  existing rowid a
20050 6e 64 20 61 64 64 20 6f 6e 65 0a 20 20 20 20 2a  nd add one.    *
20060 2a 20 74 6f 20 74 68 61 74 2e 20 20 42 75 74 20  * to that.  But 
20070 69 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 65  if the largest e
20080 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20 69 73  xisting rowid is
20090 20 61 6c 72 65 61 64 79 20 74 68 65 20 6d 61 78   already the max
200a0 69 6d 75 6d 0a 20 20 20 20 2a 2a 20 70 6f 73 69  imum.    ** posi
200b0 74 69 76 65 20 69 6e 74 65 67 65 72 2c 20 77 65  tive integer, we
200c0 20 68 61 76 65 20 74 6f 20 66 61 6c 6c 20 74 68   have to fall th
200d0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 73 65 63  rough to the sec
200e0 6f 6e 64 0a 20 20 20 20 2a 2a 20 70 72 6f 62 61  ond.    ** proba
200f0 62 69 6c 69 73 74 69 63 20 61 6c 67 6f 72 69 74  bilistic algorit
20100 68 6d 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  hm.    **.    **
20110 20 54 68 65 20 73 65 63 6f 6e 64 20 61 6c 67 6f   The second algo
20120 72 69 74 68 6d 20 69 73 20 74 6f 20 73 65 6c 65  rithm is to sele
20130 63 74 20 61 20 72 6f 77 69 64 20 61 74 20 72 61  ct a rowid at ra
20140 6e 64 6f 6d 20 61 6e 64 20 73 65 65 20 69 66 0a  ndom and see if.
20150 20 20 20 20 2a 2a 20 69 74 20 61 6c 72 65 61 64      ** it alread
20160 79 20 65 78 69 73 74 73 20 69 6e 20 74 68 65 20  y exists in the 
20170 74 61 62 6c 65 2e 20 20 49 66 20 69 74 20 64 6f  table.  If it do
20180 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 77 65  es not exist, we
20190 20 68 61 76 65 0a 20 20 20 20 2a 2a 20 73 75 63   have.    ** suc
201a0 63 65 65 64 65 64 2e 20 20 49 66 20 74 68 65 20  ceeded.  If the 
201b0 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 64 6f 65  random rowid doe
201c0 73 20 65 78 69 73 74 2c 20 77 65 20 73 65 6c 65  s exist, we sele
201d0 63 74 20 61 20 6e 65 77 20 6f 6e 65 0a 20 20 20  ct a new one.   
201e0 20 2a 2a 20 61 6e 64 20 74 72 79 20 61 67 61 69   ** and try agai
201f0 6e 2c 20 75 70 20 74 6f 20 31 30 30 20 74 69 6d  n, up to 100 tim
20200 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61  es..    */.    a
20210 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
20220 6c 65 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  le );..#ifdef SQ
20230 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f 57 49 44  LITE_32BIT_ROWID
20240 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f  .#   define MAX_
20250 52 4f 57 49 44 20 30 78 37 66 66 66 66 66 66 66  ROWID 0x7fffffff
20260 0a 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53 6f  .#else.    /* So
20270 6d 65 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f 6d  me compilers com
20280 70 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e 73  plain about cons
20290 74 61 6e 74 73 20 6f 66 20 74 68 65 20 66 6f 72  tants of the for
202a0 6d 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66  m 0x7fffffffffff
202b0 66 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74 68  ffff..    ** Oth
202c0 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f  ers complain abo
202d0 75 74 20 30 78 37 66 66 66 66 66 66 66 66 66 66  ut 0x7ffffffffff
202e0 66 66 66 66 66 66 4c 4c 2e 20 20 54 68 65 20 66  ffffffLL.  The f
202f0 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 73  ollowing macro s
20300 65 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20 70  eems.    ** to p
20310 72 6f 76 69 64 65 20 74 68 65 20 63 6f 6e 73 74  rovide the const
20320 61 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e 67  ant while making
20330 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20 68   all compilers h
20340 61 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20 20  appy..    */.#  
20350 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49   define MAX_ROWI
20360 44 20 20 28 69 36 34 29 28 20 28 28 28 75 36 34  D  (i64)( (((u64
20370 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32  )0x7fffffff)<<32
20380 29 20 7c 20 28 75 36 34 29 30 78 66 66 66 66 66  ) | (u64)0xfffff
20390 66 66 66 20 29 0a 23 65 6e 64 69 66 0a 0a 20 20  fff ).#endif..  
203a0 20 20 69 66 28 20 21 70 43 2d 3e 75 73 65 52 61    if( !pC->useRa
203b0 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20  ndomRowid ){.   
203c0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
203d0 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 70 43 75  treeLast(pC->pCu
203e0 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20  rsor, &res);.   
203f0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
20400 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
20410 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
20420 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
20430 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 20 29  .      if( res )
20440 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20 31 3b  {.        v = 1;
20450 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 36 31 39     /* IMP: R-619
20460 31 34 2d 34 38 30 37 34 20 2a 2f 0a 20 20 20 20  14-48074 */.    
20470 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
20480 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
20490 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c  BtreeCursorIsVal
204a0 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 20  id(pC->pCursor) 
204b0 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  );.        rc = 
204c0 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
204d0 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ize(pC->pCursor,
204e0 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20 61 73   &v);.        as
204f0 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
20500 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 43 61 6e 6e  _OK );   /* Cann
20510 6f 74 20 66 61 69 6c 20 66 6f 6c 6c 6f 77 69 6e  ot fail followin
20520 67 20 42 74 72 65 65 4c 61 73 74 28 29 20 2a 2f  g BtreeLast() */
20530 0a 20 20 20 20 20 20 20 20 69 66 28 20 76 3e 3d  .        if( v>=
20540 4d 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20  MAX_ROWID ){.   
20550 20 20 20 20 20 20 20 70 43 2d 3e 75 73 65 52 61         pC->useRa
20560 6e 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20  ndomRowid = 1;. 
20570 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
20580 20 20 20 20 20 20 20 20 76 2b 2b 3b 20 20 20 2f          v++;   /
20590 2a 20 49 4d 50 3a 20 52 2d 32 39 35 33 38 2d 33  * IMP: R-29538-3
205a0 34 39 38 37 20 2a 2f 0a 20 20 20 20 20 20 20 20  4987 */.        
205b0 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  }.      }.    }.
205c0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
205d0 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
205e0 4e 54 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  NT.    if( pOp->
205f0 70 33 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41  p3 ){.      /* A
20600 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73  ssert that P3 is
20610 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20   a valid memory 
20620 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 61  cell. */.      a
20630 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
20640 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d   );.      if( p-
20650 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20  >pFrame ){.     
20660 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d     for(pFrame=p-
20670 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d  >pFrame; pFrame-
20680 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65  >pParent; pFrame
20690 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74  =pFrame->pParent
206a0 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73  );.        /* As
206b0 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20  sert that P3 is 
206c0 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63  a valid memory c
206d0 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  ell. */.        
206e0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
206f0 3d 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b  =pFrame->nMem );
20700 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20  .        pMem = 
20710 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f  &pFrame->aMem[pO
20720 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 7d 65  p->p3];.      }e
20730 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  lse{.        /* 
20740 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69  Assert that P3 i
20750 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79  s a valid memory
20760 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20   cell. */.      
20770 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
20780 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  3<=(p->nMem-p->n
20790 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
207a0 20 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b     pMem = &aMem[
207b0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20  pOp->p3];.      
207c0 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
207d0 67 65 28 70 2c 20 70 4d 65 6d 29 3b 0a 20 20 20  ge(p, pMem);.   
207e0 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72     }.      asser
207f0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4d  t( memIsValid(pM
20800 65 6d 29 20 29 3b 0a 0a 20 20 20 20 20 20 52 45  em) );..      RE
20810 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
20820 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20  ->p3, pMem);.   
20830 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
20840 6d 49 6e 74 65 67 65 72 69 66 79 28 70 4d 65 6d  mIntegerify(pMem
20850 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
20860 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20   (pMem->flags & 
20870 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20  MEM_Int)!=0 );  
20880 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73  /* mem(P3) holds
20890 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20   an integer */. 
208a0 20 20 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e 75       if( pMem->u
208b0 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 7c 7c  .i==MAX_ROWID ||
208c0 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f   pC->useRandomRo
208d0 77 69 64 20 29 7b 0a 20 20 20 20 20 20 20 20 72  wid ){.        r
208e0 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b  c = SQLITE_FULL;
208f0 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 31 32 32     /* IMP: R-122
20900 37 35 2d 36 31 33 33 38 20 2a 2f 0a 20 20 20 20  75-61338 */.    
20910 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
20920 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
20930 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 76     }.      if( v
20940 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a  <pMem->u.i+1 ){.
20950 20 20 20 20 20 20 20 20 76 20 3d 20 70 4d 65 6d          v = pMem
20960 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20  ->u.i + 1;.     
20970 20 7d 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75   }.      pMem->u
20980 2e 69 20 3d 20 76 3b 0a 20 20 20 20 7d 0a 23 65  .i = v;.    }.#e
20990 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70 43 2d  ndif.    if( pC-
209a0 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
209b0 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50 4c  ){.      /* IMPL
209c0 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52  EMENTATION-OF: R
209d0 2d 30 37 36 37 37 2d 34 31 38 38 31 20 49 66 20  -07677-41881 If 
209e0 74 68 65 20 6c 61 72 67 65 73 74 20 52 4f 57 49  the largest ROWI
209f0 44 20 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68  D is equal to th
20a00 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65  e.      ** large
20a10 73 74 20 70 6f 73 73 69 62 6c 65 20 69 6e 74 65  st possible inte
20a20 67 65 72 20 28 39 32 32 33 33 37 32 30 33 36 38  ger (92233720368
20a30 35 34 37 37 35 38 30 37 29 20 74 68 65 6e 20 74  54775807) then t
20a40 68 65 20 64 61 74 61 62 61 73 65 0a 20 20 20 20  he database.    
20a50 20 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61 72    ** engine star
20a60 74 73 20 70 69 63 6b 69 6e 67 20 70 6f 73 69 74  ts picking posit
20a70 69 76 65 20 63 61 6e 64 69 64 61 74 65 20 52 4f  ive candidate RO
20a80 57 49 44 73 20 61 74 20 72 61 6e 64 6f 6d 20 75  WIDs at random u
20a90 6e 74 69 6c 0a 20 20 20 20 20 20 2a 2a 20 69 74  ntil.      ** it
20aa0 20 66 69 6e 64 73 20 6f 6e 65 20 74 68 61 74 20   finds one that 
20ab0 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c  is not previousl
20ac0 79 20 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20 20  y used. */.     
20ad0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
20ae0 3d 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20 63 61  ==0 );  /* We ca
20af0 6e 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e 64 6f  nnot be in rando
20b00 6d 20 72 6f 77 69 64 20 6d 6f 64 65 20 69 66 20  m rowid mode if 
20b10 74 68 69 73 20 69 73 0a 20 20 20 20 20 20 20 20  this is.        
20b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b30 20 20 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f 49       ** an AUTOI
20b40 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e 20  NCREMENT table. 
20b50 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 6f 6e 20 74  */.      /* on t
20b60 68 65 20 66 69 72 73 74 20 61 74 74 65 6d 70 74  he first attempt
20b70 2c 20 73 69 6d 70 6c 79 20 64 6f 20 6f 6e 65 20  , simply do one 
20b80 6d 6f 72 65 20 74 68 61 6e 20 70 72 65 76 69 6f  more than previo
20b90 75 73 20 2a 2f 0a 20 20 20 20 20 20 76 20 3d 20  us */.      v = 
20ba0 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 20 20 20  lastRowid;.     
20bb0 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49 44   v &= (MAX_ROWID
20bc0 3e 3e 31 29 3b 20 2f 2a 20 65 6e 73 75 72 65 20  >>1); /* ensure 
20bd0 64 6f 65 73 6e 27 74 20 67 6f 20 6e 65 67 61 74  doesn't go negat
20be0 69 76 65 20 2a 2f 0a 20 20 20 20 20 20 76 2b 2b  ive */.      v++
20bf0 3b 20 2f 2a 20 65 6e 73 75 72 65 20 6e 6f 6e 2d  ; /* ensure non-
20c00 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20 63 6e  zero */.      cn
20c10 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 77 68 69  t = 0;.      whi
20c20 6c 65 28 20 20 20 28 28 72 63 20 3d 20 73 71 6c  le(   ((rc = sql
20c30 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
20c40 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72  npacked(pC->pCur
20c50 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 76 2c 0a  sor, 0, (u64)v,.
20c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c90 20 30 2c 20 26 72 65 73 29 29 3d 3d 53 51 4c 49   0, &res))==SQLI
20ca0 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20 20 20 20  TE_OK).         
20cb0 20 20 20 26 26 20 28 72 65 73 3d 3d 30 29 0a 20     && (res==0). 
20cc0 20 20 20 20 20 20 20 20 20 20 20 26 26 20 28 2b             && (+
20cd0 2b 63 6e 74 3c 31 30 30 29 29 7b 0a 20 20 20 20  +cnt<100)){.    
20ce0 20 20 20 20 2f 2a 20 63 6f 6c 6c 69 73 69 6f 6e      /* collision
20cf0 20 2d 20 74 72 79 20 61 6e 6f 74 68 65 72 20 72   - try another r
20d00 61 6e 64 6f 6d 20 72 6f 77 69 64 20 2a 2f 0a 20  andom rowid */. 
20d10 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72         sqlite3_r
20d20 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f 66  andomness(sizeof
20d30 28 76 29 2c 20 26 76 29 3b 0a 20 20 20 20 20 20  (v), &v);.      
20d40 20 20 69 66 28 20 63 6e 74 3c 35 20 29 7b 0a 20    if( cnt<5 ){. 
20d50 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72 79 20           /* try 
20d60 22 73 6d 61 6c 6c 22 20 72 61 6e 64 6f 6d 20 72  "small" random r
20d70 6f 77 69 64 73 20 66 6f 72 20 74 68 65 20 69 6e  owids for the in
20d80 69 74 69 61 6c 20 61 74 74 65 6d 70 74 73 20 2a  itial attempts *
20d90 2f 0a 20 20 20 20 20 20 20 20 20 20 76 20 26 3d  /.          v &=
20da0 20 30 78 66 66 66 66 66 66 3b 0a 20 20 20 20 20   0xffffff;.     
20db0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
20dc0 20 20 20 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f      v &= (MAX_RO
20dd0 57 49 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e 73 75  WID>>1); /* ensu
20de0 72 65 20 64 6f 65 73 6e 27 74 20 67 6f 20 6e 65  re doesn't go ne
20df0 67 61 74 69 76 65 20 2a 2f 0a 20 20 20 20 20 20  gative */.      
20e00 20 20 7d 0a 20 20 20 20 20 20 20 20 76 2b 2b 3b    }.        v++;
20e10 20 2f 2a 20 65 6e 73 75 72 65 20 6e 6f 6e 2d 7a   /* ensure non-z
20e20 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20 7d 0a 20  ero */.      }. 
20e30 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
20e40 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30  ITE_OK && res==0
20e50 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
20e60 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20   SQLITE_FULL;   
20e70 2f 2a 20 49 4d 50 3a 20 52 2d 33 38 32 31 39 2d  /* IMP: R-38219-
20e80 35 33 30 30 32 20 2a 2f 0a 20 20 20 20 20 20 20  53002 */.       
20e90 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
20ea0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
20eb0 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  }.      assert( 
20ec0 76 3e 30 20 29 3b 20 20 2f 2a 20 45 56 3a 20 52  v>0 );  /* EV: R
20ed0 2d 34 30 38 31 32 2d 30 33 35 37 30 20 2a 2f 0a  -40812-03570 */.
20ee0 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 72 6f      }.    pC->ro
20ef0 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
20f00 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64      pC->deferred
20f10 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20  Moveto = 0;.    
20f20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
20f30 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
20f40 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d   }.  pOut->u.i =
20f50 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   v;.  break;.}..
20f60 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72  /* Opcode: Inser
20f70 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
20f80 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e  .** Synopsis: in
20f90 74 6b 65 79 3d 72 5b 50 33 5d 20 64 61 74 61 3d  tkey=r[P3] data=
20fa0 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 57 72 69 74  r[P2].**.** Writ
20fb0 65 20 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20  e an entry into 
20fc0 74 68 65 20 74 61 62 6c 65 20 6f 66 20 63 75 72  the table of cur
20fd0 73 6f 72 20 50 31 2e 20 20 41 20 6e 65 77 20 65  sor P1.  A new e
20fe0 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72 65 61 74  ntry is.** creat
20ff0 65 64 20 69 66 20 69 74 20 64 6f 65 73 6e 27 74  ed if it doesn't
21000 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 20 6f   already exist o
21010 72 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 61  r the data for a
21020 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e  n existing.** en
21030 74 72 79 20 69 73 20 6f 76 65 72 77 72 69 74 74  try is overwritt
21040 65 6e 2e 20 20 54 68 65 20 64 61 74 61 20 69 73  en.  The data is
21050 20 74 68 65 20 76 61 6c 75 65 20 4d 45 4d 5f 42   the value MEM_B
21060 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e 20 72 65  lob stored in re
21070 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72  gister.** number
21080 20 50 32 2e 20 54 68 65 20 6b 65 79 20 69 73 20   P2. The key is 
21090 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
210a0 65 72 20 50 33 2e 20 54 68 65 20 6b 65 79 20 6d  er P3. The key m
210b0 75 73 74 0a 2a 2a 20 62 65 20 61 20 4d 45 4d 5f  ust.** be a MEM_
210c0 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  Int..**.** If th
210d0 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
210e0 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73   flag of P5 is s
210f0 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77  et, then the row
21100 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73   change count is
21110 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20  .** incremented 
21120 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e  (otherwise not).
21130 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f    If the OPFLAG_
21140 4c 41 53 54 52 4f 57 49 44 20 66 6c 61 67 20 6f  LASTROWID flag o
21150 66 20 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20  f P5 is set,.** 
21160 74 68 65 6e 20 72 6f 77 69 64 20 69 73 20 73 74  then rowid is st
21170 6f 72 65 64 20 66 6f 72 20 73 75 62 73 65 71 75  ored for subsequ
21180 65 6e 74 20 72 65 74 75 72 6e 20 62 79 20 74 68  ent return by th
21190 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73  e.** sqlite3_las
211a0 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
211b0 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72   function (other
211c0 77 69 73 65 20 69 74 20 69 73 20 75 6e 6d 6f 64  wise it is unmod
211d0 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66  ified)..**.** If
211e0 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53   the OPFLAG_USES
211f0 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6f  EEKRESULT flag o
21200 66 20 50 35 20 69 73 20 73 65 74 20 61 6e 64 20  f P5 is set and 
21210 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  if the result of
21220 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 73 65 65  .** the last see
21230 6b 20 6f 70 65 72 61 74 69 6f 6e 20 28 4f 50 5f  k operation (OP_
21240 4e 6f 74 45 78 69 73 74 73 29 20 77 61 73 20 61  NotExists) was a
21250 20 73 75 63 63 65 73 73 2c 20 74 68 65 6e 20 74   success, then t
21260 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e  his.** operation
21270 20 77 69 6c 6c 20 6e 6f 74 20 61 74 74 65 6d 70   will not attemp
21280 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 61 70  t to find the ap
21290 70 72 6f 70 72 69 61 74 65 20 72 6f 77 20 62 65  propriate row be
212a0 66 6f 72 65 20 64 6f 69 6e 67 0a 2a 2a 20 74 68  fore doing.** th
212b0 65 20 69 6e 73 65 72 74 20 62 75 74 20 77 69 6c  e insert but wil
212c0 6c 20 69 6e 73 74 65 61 64 20 6f 76 65 72 77 72  l instead overwr
212d0 69 74 65 20 74 68 65 20 72 6f 77 20 74 68 61 74  ite the row that
212e0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
212f0 2a 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  * currently poin
21300 74 69 6e 67 20 74 6f 2e 20 20 50 72 65 73 75 6d  ting to.  Presum
21310 61 62 6c 79 2c 20 74 68 65 20 70 72 69 6f 72 20  ably, the prior 
21320 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70 63  OP_NotExists opc
21330 6f 64 65 0a 2a 2a 20 68 61 73 20 61 6c 72 65 61  ode.** has alrea
21340 64 79 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68  dy positioned th
21350 65 20 63 75 72 73 6f 72 20 63 6f 72 72 65 63 74  e cursor correct
21360 6c 79 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20  ly.  This is an 
21370 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 2a 2a 20  optimization.** 
21380 74 68 61 74 20 62 6f 6f 73 74 73 20 70 65 72 66  that boosts perf
21390 6f 72 6d 61 6e 63 65 20 62 79 20 61 76 6f 69 64  ormance by avoid
213a0 69 6e 67 20 72 65 64 75 6e 64 61 6e 74 20 73 65  ing redundant se
213b0 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  eks..**.** If th
213c0 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  e OPFLAG_ISUPDAT
213d0 45 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74  E flag is set, t
213e0 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20  hen this opcode 
213f0 69 73 20 70 61 72 74 20 6f 66 20 61 6e 0a 2a 2a  is part of an.**
21400 20 55 50 44 41 54 45 20 6f 70 65 72 61 74 69 6f   UPDATE operatio
21410 6e 2e 20 20 4f 74 68 65 72 77 69 73 65 20 28 69  n.  Otherwise (i
21420 66 20 74 68 65 20 66 6c 61 67 20 69 73 20 63 6c  f the flag is cl
21430 65 61 72 29 20 74 68 65 6e 20 74 68 69 73 20 6f  ear) then this o
21440 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70 61 72 74  pcode.** is part
21450 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 6f 70   of an INSERT op
21460 65 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 64 69  eration.  The di
21470 66 66 65 72 65 6e 63 65 20 69 73 20 6f 6e 6c 79  fference is only
21480 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 2a 2a   important to.**
21490 20 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b   the update hook
214a0 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65  ..**.** Paramete
214b0 72 20 50 34 20 6d 61 79 20 70 6f 69 6e 74 20 74  r P4 may point t
214c0 6f 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61  o a string conta
214d0 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65 2d  ining the table-
214e0 6e 61 6d 65 2c 20 6f 72 0a 2a 2a 20 6d 61 79 20  name, or.** may 
214f0 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69  be NULL. If it i
21500 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e  s not NULL, then
21510 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   the update-hook
21520 20 0a 2a 2a 20 28 73 71 6c 69 74 65 33 2e 78 55   .** (sqlite3.xU
21530 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 20 69  pdateCallback) i
21540 73 20 69 6e 76 6f 6b 65 64 20 66 6f 6c 6c 6f 77  s invoked follow
21550 69 6e 67 20 61 20 73 75 63 63 65 73 73 66 75 6c  ing a successful
21560 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28   insert..**.** (
21570 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49 66  WARNING/TODO: If
21580 20 50 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d   P1 is a pseudo-
21590 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73  cursor and P2 is
215a0 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20   dynamically.** 
215b0 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e 20  allocated, then 
215c0 6f 77 6e 65 72 73 68 69 70 20 6f 66 20 50 32 20  ownership of P2 
215d0 69 73 20 74 72 61 6e 73 66 65 72 72 65 64 20 74  is transferred t
215e0 6f 20 74 68 65 20 70 73 65 75 64 6f 2d 63 75 72  o the pseudo-cur
215f0 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69 73  sor.** and regis
21600 74 65 72 20 50 32 20 62 65 63 6f 6d 65 73 20 65  ter P2 becomes e
21610 70 68 65 6d 65 72 61 6c 2e 20 20 49 66 20 74 68  phemeral.  If th
21620 65 20 63 75 72 73 6f 72 20 69 73 20 63 68 61 6e  e cursor is chan
21630 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c 75  ged, the.** valu
21640 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32  e of register P2
21650 20 77 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e 67   will then chang
21660 65 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74 68  e.  Make sure th
21670 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63  is does not.** c
21680 61 75 73 65 20 61 6e 79 20 70 72 6f 62 6c 65 6d  ause any problem
21690 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  s.).**.** This i
216a0 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20  nstruction only 
216b0 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73 2e  works on tables.
216c0 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74    The equivalent
216d0 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20   instruction.** 
216e0 66 6f 72 20 69 6e 64 69 63 65 73 20 69 73 20 4f  for indices is O
216f0 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a  P_IdxInsert..*/.
21700 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72  /* Opcode: Inser
21710 74 49 6e 74 20 50 31 20 50 32 20 50 33 20 50 34  tInt P1 P2 P3 P4
21720 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
21730 20 20 69 6e 74 6b 65 79 3d 50 33 20 64 61 74 61    intkey=P3 data
21740 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 69  =r[P2].**.** Thi
21750 73 20 77 6f 72 6b 73 20 65 78 61 63 74 6c 79 20  s works exactly 
21760 6c 69 6b 65 20 4f 50 5f 49 6e 73 65 72 74 20 65  like OP_Insert e
21770 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6b  xcept that the k
21780 65 79 20 69 73 20 74 68 65 0a 2a 2a 20 69 6e 74  ey is the.** int
21790 65 67 65 72 20 76 61 6c 75 65 20 50 33 2c 20 6e  eger value P3, n
217a0 6f 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ot the value of 
217b0 74 68 65 20 69 6e 74 65 67 65 72 20 73 74 6f 72  the integer stor
217c0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
217d0 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  3..*/.case OP_In
217e0 73 65 72 74 3a 20 0a 63 61 73 65 20 4f 50 5f 49  sert: .case OP_I
217f0 6e 73 65 72 74 49 6e 74 3a 20 7b 0a 20 20 4d 65  nsertInt: {.  Me
21800 6d 20 2a 70 44 61 74 61 3b 20 20 20 20 20 20 20  m *pData;       
21810 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64  /* MEM cell hold
21820 69 6e 67 20 64 61 74 61 20 66 6f 72 20 74 68 65  ing data for the
21830 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e   record to be in
21840 73 65 72 74 65 64 20 2a 2f 0a 20 20 4d 65 6d 20  serted */.  Mem 
21850 2a 70 4b 65 79 3b 20 20 20 20 20 20 20 20 2f 2a  *pKey;        /*
21860 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e   MEM cell holdin
21870 67 20 6b 65 79 20 20 66 6f 72 20 74 68 65 20 72  g key  for the r
21880 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20 69  ecord */.  i64 i
21890 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Key;         /* 
218a0 54 68 65 20 69 6e 74 65 67 65 72 20 52 4f 57 49  The integer ROWI
218b0 44 20 6f 72 20 6b 65 79 20 66 6f 72 20 74 68 65  D or key for the
218c0 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e   record to be in
218d0 73 65 72 74 65 64 20 2a 2f 0a 20 20 56 64 62 65  serted */.  Vdbe
218e0 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 2f 2a  Cursor *pC;   /*
218f0 20 43 75 72 73 6f 72 20 74 6f 20 74 61 62 6c 65   Cursor to table
21900 20 69 6e 74 6f 20 77 68 69 63 68 20 69 6e 73 65   into which inse
21910 72 74 20 69 73 20 77 72 69 74 74 65 6e 20 2a 2f  rt is written */
21920 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20  .  int nZero;   
21930 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
21940 66 20 7a 65 72 6f 2d 62 79 74 65 73 20 74 6f 20  f zero-bytes to 
21950 61 70 70 65 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  append */.  int 
21960 73 65 65 6b 52 65 73 75 6c 74 3b 20 20 20 2f 2a  seekResult;   /*
21970 20 52 65 73 75 6c 74 20 6f 66 20 70 72 69 6f 72   Result of prior
21980 20 73 65 65 6b 20 6f 72 20 30 20 69 66 20 6e 6f   seek or 0 if no
21990 20 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66   USESEEKRESULT f
219a0 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  lag */.  const c
219b0 68 61 72 20 2a 7a 44 62 3b 20 20 2f 2a 20 64 61  har *zDb;  /* da
219c0 74 61 62 61 73 65 20 6e 61 6d 65 20 2d 20 75 73  tabase name - us
219d0 65 64 20 62 79 20 74 68 65 20 75 70 64 61 74 65  ed by the update
219e0 20 68 6f 6f 6b 20 2a 2f 0a 20 20 63 6f 6e 73 74   hook */.  const
219f0 20 63 68 61 72 20 2a 7a 54 62 6c 3b 20 2f 2a 20   char *zTbl; /* 
21a00 54 61 62 6c 65 20 6e 61 6d 65 20 2d 20 75 73 65  Table name - use
21a10 64 20 62 79 20 74 68 65 20 6f 70 64 61 74 65 20  d by the opdate 
21a20 68 6f 6f 6b 20 2a 2f 0a 20 20 69 6e 74 20 6f 70  hook */.  int op
21a30 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  ;           /* O
21a40 70 63 6f 64 65 20 66 6f 72 20 75 70 64 61 74 65  pcode for update
21a50 20 68 6f 6f 6b 3a 20 53 51 4c 49 54 45 5f 55 50   hook: SQLITE_UP
21a60 44 41 54 45 20 6f 72 20 53 51 4c 49 54 45 5f 49  DATE or SQLITE_I
21a70 4e 53 45 52 54 20 2a 2f 0a 0a 20 20 70 44 61 74  NSERT */..  pDat
21a80 61 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  a = &aMem[pOp->p
21a90 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  2];.  assert( pO
21aa0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
21ab0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
21ac0 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ;.  assert( memI
21ad0 73 56 61 6c 69 64 28 70 44 61 74 61 29 20 29 3b  sValid(pData) );
21ae0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
21af0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
21b00 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
21b10 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
21b20 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  sor!=0 );.  asse
21b30 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61  rt( pC->pseudoTa
21b40 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61  bleReg==0 );.  a
21b50 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
21b60 6c 65 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52  le );.  REGISTER
21b70 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
21b80 70 44 61 74 61 29 3b 0a 0a 20 20 69 66 28 20 70  pData);..  if( p
21b90 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
21ba0 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 70 4b 65  nsert ){.    pKe
21bb0 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  y = &aMem[pOp->p
21bc0 33 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  3];.    assert( 
21bd0 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pKey->flags & ME
21be0 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 61 73 73  M_Int );.    ass
21bf0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
21c00 70 4b 65 79 29 20 29 3b 0a 20 20 20 20 52 45 47  pKey) );.    REG
21c10 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
21c20 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 20 20 20 20  >p3, pKey);.    
21c30 69 4b 65 79 20 3d 20 70 4b 65 79 2d 3e 75 2e 69  iKey = pKey->u.i
21c40 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
21c50 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
21c60 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 49 6e 74  de==OP_InsertInt
21c70 20 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70   );.    iKey = p
21c80 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69  Op->p3;.  }..  i
21c90 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  f( pOp->p5 & OPF
21ca0 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d  LAG_NCHANGE ) p-
21cb0 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66  >nChange++;.  if
21cc0 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ( pOp->p5 & OPFL
21cd0 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 29 20 64  AG_LASTROWID ) d
21ce0 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c  b->lastRowid = l
21cf0 61 73 74 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b  astRowid = iKey;
21d00 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c  .  if( pData->fl
21d10 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
21d20 7b 0a 20 20 20 20 70 44 61 74 61 2d 3e 7a 20 3d  {.    pData->z =
21d30 20 30 3b 0a 20 20 20 20 70 44 61 74 61 2d 3e 6e   0;.    pData->n
21d40 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 0;.  }else{. 
21d50 20 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61     assert( pData
21d60 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42  ->flags & (MEM_B
21d70 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a  lob|MEM_Str) );.
21d80 20 20 7d 0a 20 20 73 65 65 6b 52 65 73 75 6c 74    }.  seekResult
21d90 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f   = ((pOp->p5 & O
21da0 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
21db0 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52  ULT) ? pC->seekR
21dc0 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20 69 66  esult : 0);.  if
21dd0 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26  ( pData->flags &
21de0 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
21df0 20 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d 3e   nZero = pData->
21e00 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73 65  u.nZero;.  }else
21e10 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30 3b  {.    nZero = 0;
21e20 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
21e30 74 65 33 42 74 72 65 65 49 6e 73 65 72 74 28 70  te3BtreeInsert(p
21e40 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 69  C->pCursor, 0, i
21e50 4b 65 79 2c 0a 20 20 20 20 20 20 20 20 20 20 20  Key,.           
21e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
21e70 44 61 74 61 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e  Data->z, pData->
21e80 6e 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20 20 20 20  n, nZero,.      
21e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ea0 20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f      (pOp->p5 & O
21eb0 50 46 4c 41 47 5f 41 50 50 45 4e 44 29 21 3d 30  PFLAG_APPEND)!=0
21ec0 2c 20 73 65 65 6b 52 65 73 75 6c 74 0a 20 20 29  , seekResult.  )
21ed0 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  ;.  pC->rowidIsV
21ee0 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  alid = 0;.  pC->
21ef0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
21f00 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
21f10 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
21f20 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  ALE;..  /* Invok
21f30 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  e the update-hoo
21f40 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a  k if required. *
21f50 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  /.  if( rc==SQLI
21f60 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70  TE_OK && db->xUp
21f70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20  dateCallback && 
21f80 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20  pOp->p4.z ){.   
21f90 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70   zDb = db->aDb[p
21fa0 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20  C->iDb].zName;. 
21fb0 20 20 20 7a 54 62 6c 20 3d 20 70 4f 70 2d 3e 70     zTbl = pOp->p
21fc0 34 2e 7a 3b 0a 20 20 20 20 6f 70 20 3d 20 28 28  4.z;.    op = ((
21fd0 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
21fe0 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c  _ISUPDATE) ? SQL
21ff0 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c  ITE_UPDATE : SQL
22000 49 54 45 5f 49 4e 53 45 52 54 29 3b 0a 20 20 20  ITE_INSERT);.   
22010 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
22020 61 62 6c 65 20 29 3b 0a 20 20 20 20 64 62 2d 3e  able );.    db->
22030 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28  xUpdateCallback(
22040 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20  db->pUpdateArg, 
22050 6f 70 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c 20 69  op, zDb, zTbl, i
22060 4b 65 79 29 3b 0a 20 20 20 20 61 73 73 65 72 74  Key);.    assert
22070 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a  ( pC->iDb>=0 );.
22080 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
22090 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 6c 65 74  /* Opcode: Delet
220a0 65 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  e P1 P2 * P4 *.*
220b0 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68 65 20  *.** Delete the 
220c0 72 65 63 6f 72 64 20 61 74 20 77 68 69 63 68 20  record at which 
220d0 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 69 73  the P1 cursor is
220e0 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
220f0 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  ing..**.** The c
22100 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 20 6c 65  ursor will be le
22110 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 65  ft pointing at e
22120 69 74 68 65 72 20 74 68 65 20 6e 65 78 74 20 6f  ither the next o
22130 72 20 74 68 65 20 70 72 65 76 69 6f 75 73 0a 2a  r the previous.*
22140 2a 20 72 65 63 6f 72 64 20 69 6e 20 74 68 65 20  * record in the 
22150 74 61 62 6c 65 2e 20 49 66 20 69 74 20 69 73 20  table. If it is 
22160 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
22170 20 74 68 65 20 6e 65 78 74 20 72 65 63 6f 72 64   the next record
22180 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 6e 65  , then.** the ne
22190 78 74 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74  xt Next instruct
221a0 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61 20 6e 6f  ion will be a no
221b0 2d 6f 70 2e 20 20 48 65 6e 63 65 20 69 74 20 69  -op.  Hence it i
221c0 73 20 4f 4b 20 74 6f 20 64 65 6c 65 74 65 0a 2a  s OK to delete.*
221d0 2a 20 61 20 72 65 63 6f 72 64 20 66 72 6f 6d 20  * a record from 
221e0 77 69 74 68 69 6e 20 61 20 4e 65 78 74 20 6c 6f  within a Next lo
221f0 6f 70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  op..**.** If the
22200 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
22210 66 6c 61 67 20 6f 66 20 50 32 20 69 73 20 73 65  flag of P2 is se
22220 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20  t, then the row 
22230 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a  change count is.
22240 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28  ** incremented (
22250 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a  otherwise not)..
22260 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f  **.** P1 must no
22270 74 20 62 65 20 70 73 65 75 64 6f 2d 74 61 62 6c  t be pseudo-tabl
22280 65 2e 20 20 49 74 20 68 61 73 20 74 6f 20 62 65  e.  It has to be
22290 20 61 20 72 65 61 6c 20 74 61 62 6c 65 20 77 69   a real table wi
222a0 74 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72  th.** multiple r
222b0 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  ows..**.** If P4
222c0 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68   is not NULL, th
222d0 65 6e 20 69 74 20 69 73 20 74 68 65 20 6e 61 6d  en it is the nam
222e0 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
222f0 68 61 74 20 50 31 20 69 73 0a 2a 2a 20 70 6f 69  hat P1 is.** poi
22300 6e 74 69 6e 67 20 74 6f 2e 20 20 54 68 65 20 75  nting to.  The u
22310 70 64 61 74 65 20 68 6f 6f 6b 20 77 69 6c 6c 20  pdate hook will 
22320 62 65 20 69 6e 76 6f 6b 65 64 2c 20 69 66 20 69  be invoked, if i
22330 74 20 65 78 69 73 74 73 2e 0a 2a 2a 20 49 66 20  t exists..** If 
22340 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74  P4 is not NULL t
22350 68 65 6e 20 74 68 65 20 50 31 20 63 75 72 73 6f  hen the P1 curso
22360 72 20 6d 75 73 74 20 68 61 76 65 20 62 65 65 6e  r must have been
22370 20 70 6f 73 69 74 69 6f 6e 65 64 0a 2a 2a 20 75   positioned.** u
22380 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64  sing OP_NotFound
22390 20 70 72 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69   prior to invoki
223a0 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  ng this opcode..
223b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 6c 65 74  */.case OP_Delet
223c0 65 3a 20 7b 0a 20 20 69 36 34 20 69 4b 65 79 3b  e: {.  i64 iKey;
223d0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
223e0 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  C;..  assert( pO
223f0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
22400 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
22410 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
22420 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
22430 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
22440 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
22450 72 73 6f 72 21 3d 30 20 29 3b 20 20 2f 2a 20 4f  rsor!=0 );  /* O
22460 6e 6c 79 20 76 61 6c 69 64 20 66 6f 72 20 72 65  nly valid for re
22470 61 6c 20 74 61 62 6c 65 73 2c 20 6e 6f 20 70 73  al tables, no ps
22480 65 75 64 6f 74 61 62 6c 65 73 20 2a 2f 0a 20 20  eudotables */.  
22490 69 4b 65 79 20 3d 20 70 43 2d 3e 6c 61 73 74 52  iKey = pC->lastR
224a0 6f 77 69 64 3b 20 20 20 20 20 20 2f 2a 20 4f 6e  owid;      /* On
224b0 6c 79 20 75 73 65 64 20 66 6f 72 20 74 68 65 20  ly used for the 
224c0 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 0a  update hook */..
224d0 20 20 2f 2a 20 54 68 65 20 4f 50 5f 44 65 6c 65    /* The OP_Dele
224e0 74 65 20 6f 70 63 6f 64 65 20 61 6c 77 61 79 73  te opcode always
224f0 20 66 6f 6c 6c 6f 77 73 20 61 6e 20 4f 50 5f 4e   follows an OP_N
22500 6f 74 45 78 69 73 74 73 20 6f 72 20 4f 50 5f 4c  otExists or OP_L
22510 61 73 74 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 43  ast or.  ** OP_C
22520 6f 6c 75 6d 6e 20 6f 6e 20 74 68 65 20 73 61 6d  olumn on the sam
22530 65 20 74 61 62 6c 65 20 77 69 74 68 6f 75 74 20  e table without 
22540 61 6e 79 20 69 6e 74 65 72 76 65 6e 69 6e 67 20  any intervening 
22550 6f 70 65 72 61 74 69 6f 6e 73 20 74 68 61 74 0a  operations that.
22560 20 20 2a 2a 20 6d 69 67 68 74 20 6d 6f 76 65 20    ** might move 
22570 6f 72 20 69 6e 76 61 6c 69 64 61 74 65 20 74 68  or invalidate th
22580 65 20 63 75 72 73 6f 72 2e 20 20 48 65 6e 63 65  e cursor.  Hence
22590 20 63 75 72 73 6f 72 20 70 43 20 69 73 20 61 6c   cursor pC is al
225a0 77 61 79 73 20 70 6f 69 6e 74 69 6e 67 0a 20 20  ways pointing.  
225b0 2a 2a 20 74 6f 20 74 68 65 20 72 6f 77 20 74 6f  ** to the row to
225c0 20 62 65 20 64 65 6c 65 74 65 64 20 61 6e 64 20   be deleted and 
225d0 74 68 65 20 73 71 6c 69 74 65 33 56 64 62 65 43  the sqlite3VdbeC
225e0 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 6f 70  ursorMoveto() op
225f0 65 72 61 74 69 6f 6e 0a 20 20 2a 2a 20 62 65 6c  eration.  ** bel
22600 6f 77 20 69 73 20 61 6c 77 61 79 73 20 61 20 6e  ow is always a n
22610 6f 2d 6f 70 20 61 6e 64 20 63 61 6e 6e 6f 74 20  o-op and cannot 
22620 66 61 69 6c 2e 20 20 57 65 20 77 69 6c 6c 20 72  fail.  We will r
22630 75 6e 20 69 74 20 61 6e 79 68 6f 77 2c 20 74 68  un it anyhow, th
22640 6f 75 67 68 2c 0a 20 20 2a 2a 20 74 6f 20 67 75  ough,.  ** to gu
22650 61 72 64 20 61 67 61 69 6e 73 74 20 66 75 74 75  ard against futu
22660 72 65 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68  re changes to th
22670 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  e code generator
22680 2e 0a 20 20 2a 2a 2f 0a 20 20 61 73 73 65 72 74  ..  **/.  assert
22690 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
226a0 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72 63 20  veto==0 );.  rc 
226b0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
226c0 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20  sorMoveto(pC);. 
226d0 20 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53   if( NEVER(rc!=S
226e0 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f  QLITE_OK) ) goto
226f0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
22700 72 6f 72 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c  ror;..  rc = sql
22710 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28  ite3BtreeDelete(
22720 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  pC->pCursor);.  
22730 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
22740 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a  = CACHE_STALE;..
22750 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
22760 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72  update-hook if r
22770 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66  equired. */.  if
22780 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
22790 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61  && db->xUpdateCa
227a0 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70  llback && pOp->p
227b0 34 2e 7a 20 26 26 20 70 43 2d 3e 69 73 54 61 62  4.z && pC->isTab
227c0 6c 65 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78 55  le ){.    db->xU
227d0 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62  pdateCallback(db
227e0 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20 53 51  ->pUpdateArg, SQ
227f0 4c 49 54 45 5f 44 45 4c 45 54 45 2c 0a 20 20 20  LITE_DELETE,.   
22800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22810 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 70 43 2d       db->aDb[pC-
22820 3e 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 70 4f 70  >iDb].zName, pOp
22830 2d 3e 70 34 2e 7a 2c 20 69 4b 65 79 29 3b 0a 20  ->p4.z, iKey);. 
22840 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
22850 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 69  Db>=0 );.  }.  i
22860 66 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46  f( pOp->p2 & OPF
22870 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d  LAG_NCHANGE ) p-
22880 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 62 72  >nChange++;.  br
22890 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65  eak;.}./* Opcode
228a0 3a 20 52 65 73 65 74 43 6f 75 6e 74 20 2a 20 2a  : ResetCount * *
228b0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
228c0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 68   value of the ch
228d0 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20  ange counter is 
228e0 63 6f 70 69 65 64 20 74 6f 20 74 68 65 20 64 61  copied to the da
228f0 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a  tabase handle.**
22900 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
22910 28 72 65 74 75 72 6e 65 64 20 62 79 20 73 75 62  (returned by sub
22920 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20 74 6f  sequent calls to
22930 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73   sqlite3_changes
22940 28 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74 68 65  ())..** Then the
22950 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20 63 68   VMs internal ch
22960 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 72 65 73  ange counter res
22970 65 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54 68 69  ets to 0..** Thi
22980 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72 69  s is used by tri
22990 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a 2a  gger programs..*
229a0 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74 43  /.case OP_ResetC
229b0 6f 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69 74 65  ount: {.  sqlite
229c0 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28  3VdbeSetChanges(
229d0 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b  db, p->nChange);
229e0 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20  .  p->nChange = 
229f0 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  0;.  break;.}../
22a00 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72  * Opcode: Sorter
22a10 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50 33  Compare P1 P2 P3
22a20 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P4.** Synopsis:
22a30 20 20 69 66 20 6b 65 79 28 50 31 29 21 3d 74 72    if key(P1)!=tr
22a40 69 6d 28 72 5b 50 33 5d 2c 50 34 29 20 67 6f 74  im(r[P3],P4) got
22a50 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  o P2.**.** P1 is
22a60 20 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72   a sorter cursor
22a70 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  . This instructi
22a80 6f 6e 20 63 6f 6d 70 61 72 65 73 20 61 20 70 72  on compares a pr
22a90 65 66 69 78 20 6f 66 20 74 68 65 0a 2a 2a 20 72  efix of the.** r
22aa0 65 63 6f 72 64 20 62 6c 6f 62 20 69 6e 20 72 65  ecord blob in re
22ab0 67 69 73 74 65 72 20 50 33 20 61 67 61 69 6e 73  gister P3 agains
22ac0 74 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68  t a prefix of th
22ad0 65 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  e entry that .**
22ae0 20 74 68 65 20 73 6f 72 74 65 72 20 63 75 72 73   the sorter curs
22af0 6f 72 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  or currently poi
22b00 6e 74 73 20 74 6f 2e 20 20 4f 6e 6c 79 20 74 68  nts to.  Only th
22b10 65 20 66 69 72 73 74 20 50 34 20 66 69 65 6c 64  e first P4 field
22b20 73 0a 2a 2a 20 6f 66 20 72 5b 50 33 5d 20 61 6e  s.** of r[P3] an
22b30 64 20 74 68 65 20 73 6f 72 74 65 72 20 72 65 63  d the sorter rec
22b40 6f 72 64 20 61 72 65 20 63 6f 6d 70 61 72 65 64  ord are compared
22b50 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65  ..**.** If eithe
22b60 72 20 50 33 20 6f 72 20 74 68 65 20 73 6f 72 74  r P3 or the sort
22b70 65 72 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e 55  er contains a NU
22b80 4c 4c 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65  LL in one of the
22b90 69 72 20 73 69 67 6e 69 66 69 63 61 6e 74 0a 2a  ir significant.*
22ba0 2a 20 66 69 65 6c 64 73 20 28 6e 6f 74 20 63 6f  * fields (not co
22bb0 75 6e 74 69 6e 67 20 74 68 65 20 50 34 20 66 69  unting the P4 fi
22bc0 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 20  elds at the end 
22bd0 77 68 69 63 68 20 61 72 65 20 69 67 6e 6f 72 65  which are ignore
22be0 64 29 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63  d) then.** the c
22bf0 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 73 73  omparison is ass
22c00 75 6d 65 64 20 74 6f 20 62 65 20 65 71 75 61 6c  umed to be equal
22c10 2e 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68 72  ..**.** Fall thr
22c20 6f 75 67 68 20 74 6f 20 6e 65 78 74 20 69 6e 73  ough to next ins
22c30 74 72 75 63 74 69 6f 6e 20 69 66 20 74 68 65 20  truction if the 
22c40 74 77 6f 20 72 65 63 6f 72 64 73 20 63 6f 6d 70  two records comp
22c50 61 72 65 20 65 71 75 61 6c 20 74 6f 0a 2a 2a 20  are equal to.** 
22c60 65 61 63 68 20 6f 74 68 65 72 2e 20 20 4a 75 6d  each other.  Jum
22c70 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 79 20  p to P2 if they 
22c80 61 72 65 20 64 69 66 66 65 72 65 6e 74 2e 0a 2a  are different..*
22c90 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
22ca0 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 56 64 62  Compare: {.  Vdb
22cb0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
22cc0 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6e 4b  nt res;.  int nK
22cd0 65 79 43 6f 6c 3b 0a 0a 20 20 70 43 20 3d 20 70  eyCol;..  pC = p
22ce0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
22cf0 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f  ;.  assert( isSo
22d00 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 61 73  rter(pC) );.  as
22d10 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
22d20 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
22d30 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
22d40 70 2d 3e 70 33 5d 3b 0a 20 20 6e 4b 65 79 43 6f  p->p3];.  nKeyCo
22d50 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  l = pOp->p4.i;. 
22d60 20 72 65 73 20 3d 20 30 3b 0a 20 20 72 63 20 3d   res = 0;.  rc =
22d70 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
22d80 65 72 43 6f 6d 70 61 72 65 28 70 43 2c 20 70 49  erCompare(pC, pI
22d90 6e 33 2c 20 6e 4b 65 79 43 6f 6c 2c 20 26 72 65  n3, nKeyCol, &re
22da0 73 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  s);.  VdbeBranch
22db0 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b  Taken(res!=0,2);
22dc0 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20  .  if( res ){.  
22dd0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31    pc = pOp->p2-1
22de0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
22df0 3b 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  ;../* Opcode: So
22e00 72 74 65 72 44 61 74 61 20 50 31 20 50 32 20 2a  rterData P1 P2 *
22e10 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
22e20 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a  : r[P2]=data.**.
22e30 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65  ** Write into re
22e40 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63 75  gister P2 the cu
22e50 72 72 65 6e 74 20 73 6f 72 74 65 72 20 64 61 74  rrent sorter dat
22e60 61 20 66 6f 72 20 73 6f 72 74 65 72 20 63 75 72  a for sorter cur
22e70 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20  sor P1..*/.case 
22e80 4f 50 5f 53 6f 72 74 65 72 44 61 74 61 3a 20 7b  OP_SorterData: {
22e90 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
22ea0 43 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  C;..  pOut = &aM
22eb0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
22ec0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
22ed0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
22ee0 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b   isSorter(pC) );
22ef0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
22f00 64 62 65 53 6f 72 74 65 72 52 6f 77 6b 65 79 28  dbeSorterRowkey(
22f10 70 43 2c 20 70 4f 75 74 29 3b 0a 20 20 61 73 73  pC, pOut);.  ass
22f20 65 72 74 28 20 72 63 21 3d 53 51 4c 49 54 45 5f  ert( rc!=SQLITE_
22f30 4f 4b 20 7c 7c 20 28 70 4f 75 74 2d 3e 66 6c 61  OK || (pOut->fla
22f40 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 20 29  gs & MEM_Blob) )
22f50 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
22f60 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61   Opcode: RowData
22f70 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
22f80 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
22f90 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  data.**.** Write
22fa0 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
22fb0 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72  2 the complete r
22fc0 6f 77 20 64 61 74 61 20 66 6f 72 20 63 75 72 73  ow data for curs
22fd0 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20  or P1..** There 
22fe0 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61  is no interpreta
22ff0 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61  tion of the data
23000 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73  .  .** It is jus
23010 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68  t copied onto th
23020 65 20 50 32 20 72 65 67 69 73 74 65 72 20 65 78  e P2 register ex
23030 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20  actly as .** it 
23040 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20  is found in the 
23050 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
23060 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63  *.** If the P1 c
23070 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f  ursor must be po
23080 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69  inting to a vali
23090 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c  d row (not a NUL
230a0 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72  L row).** of a r
230b0 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  eal table, not a
230c0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a   pseudo-table..*
230d0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  /./* Opcode: Row
230e0 4b 65 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Key P1 P2 * * *.
230f0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
23100 32 5d 3d 6b 65 79 0a 2a 2a 0a 2a 2a 20 57 72 69  2]=key.**.** Wri
23110 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  te into register
23120 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65   P2 the complete
23130 20 72 6f 77 20 6b 65 79 20 66 6f 72 20 63 75 72   row key for cur
23140 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65  sor P1..** There
23150 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74   is no interpret
23160 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74  ation of the dat
23170 61 2e 20 20 0a 2a 2a 20 54 68 65 20 6b 65 79 20  a.  .** The key 
23180 69 73 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74  is copied onto t
23190 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20 65  he P2 register e
231a0 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74  xactly as .** it
231b0 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65   is found in the
231c0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
231d0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
231e0 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70  cursor must be p
231f0 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c  ointing to a val
23200 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55  id row (not a NU
23210 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20  LL row).** of a 
23220 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
23230 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  a pseudo-table..
23240 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 4b 65  */.case OP_RowKe
23250 79 3a 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44 61  y:.case OP_RowDa
23260 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  ta: {.  VdbeCurs
23270 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
23280 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 75 33 32  or *pCrsr;.  u32
23290 20 6e 3b 0a 20 20 69 36 34 20 6e 36 34 3b 0a 0a   n;.  i64 n64;..
232a0 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
232b0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p2];.  memAb
232c0 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
232d0 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 4e 6f 74 65  Out);..  /* Note
232e0 20 74 68 61 74 20 52 6f 77 4b 65 79 20 61 6e 64   that RowKey and
232f0 20 52 6f 77 44 61 74 61 20 61 72 65 20 72 65 61   RowData are rea
23300 6c 6c 79 20 65 78 61 63 74 6c 79 20 74 68 65 20  lly exactly the 
23310 73 61 6d 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  same instruction
23320 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
23330 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
23340 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
23350 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
23360 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
23370 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
23380 43 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  C)==0 );.  asser
23390 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 7c  t( pC->isTable |
233a0 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  | pOp->opcode!=O
233b0 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61  P_RowData );.  a
233c0 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
233d0 6c 65 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 6f 70  le==0 || pOp->op
233e0 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44 61 74 61  code==OP_RowData
233f0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
23400 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
23410 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20   pC->nullRow==0 
23420 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
23430 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d  >pseudoTableReg=
23440 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
23450 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
23460 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
23470 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72  pCursor;.  asser
23480 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  t( sqlite3BtreeC
23490 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72  ursorIsValid(pCr
234a0 73 72 29 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 65  sr) );..  /* The
234b0 20 4f 50 5f 52 6f 77 4b 65 79 20 61 6e 64 20 4f   OP_RowKey and O
234c0 50 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f 64 65  P_RowData opcode
234d0 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20  s always follow 
234e0 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a  OP_NotExists or.
234f0 20 20 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 2f 4f    ** OP_Rewind/O
23500 70 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f 20 69  p_Next with no i
23510 6e 74 65 72 76 65 6e 69 6e 67 20 69 6e 73 74 72  ntervening instr
23520 75 63 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67  uctions that mig
23530 68 74 20 69 6e 76 61 6c 69 64 61 74 65 0a 20 20  ht invalidate.  
23540 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20  ** the cursor.  
23550 48 65 6e 63 65 20 74 68 65 20 66 6f 6c 6c 6f 77  Hence the follow
23560 69 6e 67 20 73 71 6c 69 74 65 33 56 64 62 65 43  ing sqlite3VdbeC
23570 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61  ursorMoveto() ca
23580 6c 6c 20 69 73 20 61 6c 77 61 79 73 0a 20 20 2a  ll is always.  *
23590 2a 20 61 20 6e 6f 2d 6f 70 20 61 6e 64 20 63 61  * a no-op and ca
235a0 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e 20 20 42  n never fail.  B
235b0 75 74 20 77 65 20 6c 65 61 76 65 20 69 74 20 69  ut we leave it i
235c0 6e 20 70 6c 61 63 65 20 61 73 20 61 20 73 61 66  n place as a saf
235d0 65 74 79 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65  ety..  */.  asse
235e0 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
235f0 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72  Moveto==0 );.  r
23600 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
23610 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b  ursorMoveto(pC);
23620 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63 21  .  if( NEVER(rc!
23630 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f  =SQLITE_OK) ) go
23640 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
23650 65 72 72 6f 72 3b 0a 0a 20 20 69 66 28 20 70 43  error;..  if( pC
23660 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a  ->isTable==0 ){.
23670 20 20 20 20 61 73 73 65 72 74 28 20 21 70 43 2d      assert( !pC-
23680 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20  >isTable );.    
23690 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73  VVA_ONLY(rc =) s
236a0 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69  qlite3BtreeKeySi
236b0 7a 65 28 70 43 72 73 72 2c 20 26 6e 36 34 29 3b  ze(pCrsr, &n64);
236c0 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d  .    assert( rc=
236d0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20  =SQLITE_OK );   
236e0 20 2f 2a 20 54 72 75 65 20 62 65 63 61 75 73 65   /* True because
236f0 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f   of CursorMoveto
23700 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f  () call above */
23710 0a 20 20 20 20 69 66 28 20 6e 36 34 3e 64 62 2d  .    if( n64>db-
23720 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
23730 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
23740 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62        goto too_b
23750 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e 20  ig;.    }.    n 
23760 3d 20 28 75 33 32 29 6e 36 34 3b 0a 20 20 7d 65  = (u32)n64;.  }e
23770 6c 73 65 7b 0a 20 20 20 20 56 56 41 5f 4f 4e 4c  lse{.    VVA_ONL
23780 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42  Y(rc =) sqlite3B
23790 74 72 65 65 44 61 74 61 53 69 7a 65 28 70 43 72  treeDataSize(pCr
237a0 73 72 2c 20 26 6e 29 3b 0a 20 20 20 20 61 73 73  sr, &n);.    ass
237b0 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
237c0 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 44 61 74 61  OK );    /* Data
237d0 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66 61  Size() cannot fa
237e0 69 6c 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e 3e  il */.    if( n>
237f0 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b  (u32)db->aLimit[
23800 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
23810 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f  GTH] ){.      go
23820 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20  to too_big;.    
23830 7d 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69  }.  }.  if( sqli
23840 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
23850 4f 75 74 2c 20 6e 2c 20 30 29 20 29 7b 0a 20 20  Out, n, 0) ){.  
23860 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
23870 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e   }.  pOut->n = n
23880 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
23890 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f  ag(pOut, MEM_Blo
238a0 62 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69 73  b);.  if( pC->is
238b0 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20  Table==0 ){.    
238c0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
238d0 65 4b 65 79 28 70 43 72 73 72 2c 20 30 2c 20 6e  eKey(pCrsr, 0, n
238e0 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65  , pOut->z);.  }e
238f0 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  lse{.    rc = sq
23900 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 28 70  lite3BtreeData(p
23910 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74  Crsr, 0, n, pOut
23920 2d 3e 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  ->z);.  }.  pOut
23930 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55  ->enc = SQLITE_U
23940 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65  TF8;  /* In case
23950 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65   the blob is eve
23960 72 20 63 61 73 74 20 74 6f 20 74 65 78 74 20 2a  r cast to text *
23970 2f 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  /.  UPDATE_MAX_B
23980 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
23990 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
239a0 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a  pOp->p2, pOut);.
239b0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
239c0 70 63 6f 64 65 3a 20 52 6f 77 69 64 20 50 31 20  pcode: Rowid P1 
239d0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
239e0 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69  psis: r[P2]=rowi
239f0 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e  d.**.** Store in
23a00 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20   register P2 an 
23a10 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73  integer which is
23a20 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65 20   the key of the 
23a30 74 61 62 6c 65 20 65 6e 74 72 79 20 74 68 61 74  table entry that
23a40 0a 2a 2a 20 50 31 20 69 73 20 63 75 72 72 65 6e  .** P1 is curren
23a50 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a  tly point to..**
23a60 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65 20 65 69  .** P1 can be ei
23a70 74 68 65 72 20 61 6e 20 6f 72 64 69 6e 61 72 79  ther an ordinary
23a80 20 74 61 62 6c 65 20 6f 72 20 61 20 76 69 72 74   table or a virt
23a90 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65 72  ual table.  Ther
23aa0 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20  e used to.** be 
23ab0 61 20 73 65 70 61 72 61 74 65 20 4f 50 5f 56 52  a separate OP_VR
23ac0 6f 77 69 64 20 6f 70 63 6f 64 65 20 66 6f 72 20  owid opcode for 
23ad0 75 73 65 20 77 69 74 68 20 76 69 72 74 75 61 6c  use with virtual
23ae0 20 74 61 62 6c 65 73 2c 20 62 75 74 20 74 68 69   tables, but thi
23af0 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65 20  s.** one opcode 
23b00 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f  now works for bo
23b10 74 68 20 74 61 62 6c 65 20 74 79 70 65 73 2e 0a  th table types..
23b20 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69 64  */.case OP_Rowid
23b30 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
23b40 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
23b50 65 6c 65 61 73 65 20 2a 2f 0a 20 20 56 64 62 65  elease */.  Vdbe
23b60 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36  Cursor *pC;.  i6
23b70 34 20 76 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  4 v;.  sqlite3_v
23b80 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
23b90 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
23ba0 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20  le *pModule;..  
23bb0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
23bc0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
23bd0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
23be0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
23bf0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
23c00 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
23c10 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  t( pC->pseudoTab
23c20 6c 65 52 65 67 3d 3d 30 20 7c 7c 20 70 43 2d 3e  leReg==0 || pC->
23c30 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 69 66 28  nullRow );.  if(
23c40 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a   pC->nullRow ){.
23c50 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
23c60 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20  = MEM_Null;.    
23c70 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69  break;.  }else i
23c80 66 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  f( pC->deferredM
23c90 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d  oveto ){.    v =
23ca0 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65   pC->movetoTarge
23cb0 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  t;.#ifndef SQLIT
23cc0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
23cd0 42 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  BLE.  }else if( 
23ce0 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20  pC->pVtabCursor 
23cf0 29 7b 0a 20 20 20 20 70 56 74 61 62 20 3d 20 70  ){.    pVtab = p
23d00 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e  C->pVtabCursor->
23d10 70 56 74 61 62 3b 0a 20 20 20 20 70 4d 6f 64 75  pVtab;.    pModu
23d20 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  le = pVtab->pMod
23d30 75 6c 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ule;.    assert(
23d40 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64   pModule->xRowid
23d50 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f   );.    rc = pMo
23d60 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70 43 2d  dule->xRowid(pC-
23d70 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26 76  >pVtabCursor, &v
23d80 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74  );.    sqlite3Vt
23d90 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
23da0 2c 20 70 56 74 61 62 29 3b 0a 23 65 6e 64 69 66  , pVtab);.#endif
23db0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
23dc0 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
23dd0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
23de0 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
23df0 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  !=0 );.    rc = 
23e00 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
23e10 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 20  rMoveto(pC);.   
23e20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
23e30 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
23e40 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 72  r;.    if( pC->r
23e50 6f 77 69 64 49 73 56 61 6c 69 64 20 29 7b 0a 20  owidIsValid ){. 
23e60 20 20 20 20 20 76 20 3d 20 70 43 2d 3e 6c 61 73       v = pC->las
23e70 74 52 6f 77 69 64 3b 0a 20 20 20 20 7d 65 6c 73  tRowid;.    }els
23e80 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  e{.      rc = sq
23e90 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a  lite3BtreeKeySiz
23ea0 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  e(pC->pCursor, &
23eb0 76 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  v);.      assert
23ec0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
23ed0 29 3b 20 20 2f 2a 20 41 6c 77 61 79 73 20 73 6f  );  /* Always so
23ee0 20 62 65 63 61 75 73 65 20 6f 66 20 43 75 72 73   because of Curs
23ef0 6f 72 4d 6f 76 65 74 6f 28 29 20 61 62 6f 76 65  orMoveto() above
23f00 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   */.    }.  }.  
23f10 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20  pOut->u.i = v;. 
23f20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
23f30 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31  code: NullRow P1
23f40 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d   * * * *.**.** M
23f50 6f 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 50  ove the cursor P
23f60 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e  1 to a null row.
23f70 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20    Any OP_Column 
23f80 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68  operations.** th
23f90 61 74 20 6f 63 63 75 72 20 77 68 69 6c 65 20 74  at occur while t
23fa0 68 65 20 63 75 72 73 6f 72 20 69 73 20 6f 6e 20  he cursor is on 
23fb0 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c  the null row wil
23fc0 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74  l always.** writ
23fd0 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  e a NULL..*/.cas
23fe0 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a  e OP_NullRow: {.
23ff0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
24000 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
24010 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
24020 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
24030 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
24040 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
24050 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
24060 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  pC->nullRow = 1;
24070 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  .  pC->rowidIsVa
24080 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  lid = 0;.  pC->c
24090 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
240a0 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20  HE_STALE;.  if( 
240b0 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b 0a 20  pC->pCursor ){. 
240c0 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43     sqlite3BtreeC
240d0 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e 70  learCursor(pC->p
240e0 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62  Cursor);.  }.  b
240f0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
24100 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20 2a  de: Last P1 P2 *
24110 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e   * *.**.** The n
24120 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52  ext use of the R
24130 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f  owid or Column o
24140 72 20 50 72 65 76 20 69 6e 73 74 72 75 63 74 69  r Prev instructi
24150 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69  on for P1 .** wi
24160 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20  ll refer to the 
24170 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  last entry in th
24180 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
24190 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66   or index..** If
241a0 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
241b0 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64  dex is empty and
241c0 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70   P2>0, then jump
241d0 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
241e0 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  P2..** If P2 is 
241f0 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c  0 or if the tabl
24200 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f  e or index is no
24210 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68  t empty, fall th
24220 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
24230 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
24240 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ction..**.** Thi
24250 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20  s opcode leaves 
24260 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69  the cursor confi
24270 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e  gured to move in
24280 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a   reverse order,.
24290 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20  ** from the end 
242a0 74 6f 77 61 72 64 20 74 68 65 20 62 65 67 69 6e  toward the begin
242b0 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20  ning.  In other 
242c0 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f  words, the curso
242d0 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72  r is.** configur
242e0 65 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20  ed to use Prev, 
242f0 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2f 0a 63 61 73  not Next..*/.cas
24300 65 20 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20  e OP_Last: {    
24310 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
24320 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
24330 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
24340 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a  sr;.  int res;..
24350 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
24360 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
24370 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
24380 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
24390 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
243a0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72  ( pC!=0 );.  pCr
243b0 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
243c0 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61  ;.  res = 0;.  a
243d0 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20  ssert( pCrsr!=0 
243e0 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
243f0 33 42 74 72 65 65 4c 61 73 74 28 70 43 72 73 72  3BtreeLast(pCrsr
24400 2c 20 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6e  , &res);.  pC->n
24410 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73  ullRow = (u8)res
24420 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64  ;.  pC->deferred
24430 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43  Moveto = 0;.  pC
24440 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
24450 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
24460 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
24470 41 4c 45 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  ALE;.#ifdef SQLI
24480 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73  TE_DEBUG.  pC->s
24490 65 65 6b 4f 70 20 3d 20 4f 50 5f 4c 61 73 74 3b  eekOp = OP_Last;
244a0 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70 4f  .#endif.  if( pO
244b0 70 2d 3e 70 32 3e 30 20 29 7b 0a 20 20 20 20 56  p->p2>0 ){.    V
244c0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
244d0 65 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66  es!=0,2);.    if
244e0 28 20 72 65 73 20 29 20 70 63 20 3d 20 70 4f 70  ( res ) pc = pOp
244f0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
24500 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
24510 63 6f 64 65 3a 20 53 6f 72 74 20 50 31 20 50 32  code: Sort P1 P2
24520 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69   * * *.**.** Thi
24530 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 65 78  s opcode does ex
24540 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 74  actly the same t
24550 68 69 6e 67 20 61 73 20 4f 50 5f 52 65 77 69 6e  hing as OP_Rewin
24560 64 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a  d except that.**
24570 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73 20 61   it increments a
24580 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20 67  n undocumented g
24590 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 75  lobal variable u
245a0 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67 2e  sed for testing.
245b0 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20 69  .**.** Sorting i
245c0 73 20 61 63 63 6f 6d 70 6c 69 73 68 65 64 20 62  s accomplished b
245d0 79 20 77 72 69 74 69 6e 67 20 72 65 63 6f 72 64  y writing record
245e0 73 20 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e 67  s into a sorting
245f0 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e 20   index,.** then 
24600 72 65 77 69 6e 64 69 6e 67 20 74 68 61 74 20 69  rewinding that i
24610 6e 64 65 78 20 61 6e 64 20 70 6c 61 79 69 6e 67  ndex and playing
24620 20 69 74 20 62 61 63 6b 20 66 72 6f 6d 20 62 65   it back from be
24630 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e  ginning to.** en
24640 64 2e 20 20 57 65 20 75 73 65 20 74 68 65 20 4f  d.  We use the O
24650 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20 69 6e  P_Sort opcode in
24660 73 74 65 61 64 20 6f 66 20 4f 50 5f 52 65 77 69  stead of OP_Rewi
24670 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a 20  nd to do the.** 
24680 72 65 77 69 6e 64 69 6e 67 20 73 6f 20 74 68 61  rewinding so tha
24690 74 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72  t the global var
246a0 69 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 69 6e  iable will be in
246b0 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a 2a  cremented and.**
246c0 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74   regression test
246d0 73 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65 20  s can determine 
246e0 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
246f0 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 0a  he optimizer is.
24700 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f 70 74  ** correctly opt
24710 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72 74  imizing out sort
24720 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  s..*/.case OP_So
24730 72 74 65 72 53 6f 72 74 3a 20 20 20 20 2f 2a 20  rterSort:    /* 
24740 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
24750 53 6f 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f  Sort: {        /
24760 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66  * jump */.#ifdef
24770 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73   SQLITE_TEST.  s
24780 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e  qlite3_sort_coun
24790 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73  t++;.  sqlite3_s
247a0 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23  earch_count--;.#
247b0 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e  endif.  p->aCoun
247c0 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53  ter[SQLITE_STMTS
247d0 54 41 54 55 53 5f 53 4f 52 54 5d 2b 2b 3b 0a 20  TATUS_SORT]++;. 
247e0 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
247f0 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64 20   into OP_Rewind 
24800 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  */.}./* Opcode: 
24810 52 65 77 69 6e 64 20 50 31 20 50 32 20 2a 20 2a  Rewind P1 P2 * *
24820 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78   *.**.** The nex
24830 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77  t use of the Row
24840 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20  id or Column or 
24850 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  Next instruction
24860 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c   for P1 .** will
24870 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 66 69   refer to the fi
24880 72 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65  rst entry in the
24890 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
248a0 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20  or index..** If 
248b0 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
248c0 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64 20  ex is empty and 
248d0 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20  P2>0, then jump 
248e0 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
248f0 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 30  2..** If P2 is 0
24900 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c 65   or if the table
24910 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74   or index is not
24920 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72   empty, fall thr
24930 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66  ough.** to the f
24940 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63  ollowing instruc
24950 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  tion..**.** This
24960 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74   opcode leaves t
24970 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67  he cursor config
24980 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20  ured to move in 
24990 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a  forward order,.*
249a0 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  * from the begin
249b0 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20  ning toward the 
249c0 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  end.  In other w
249d0 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72  ords, the cursor
249e0 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65   is.** configure
249f0 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e  d to use Next, n
24a00 6f 74 20 50 72 65 76 2e 0a 2a 2f 0a 63 61 73 65  ot Prev..*/.case
24a10 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20 20   OP_Rewind: {   
24a20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
24a30 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
24a40 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
24a50 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
24a60 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
24a70 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
24a80 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
24a90 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
24aa0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
24ab0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
24ac0 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
24ad0 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65  C)==(pOp->opcode
24ae0 3d 3d 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 29  ==OP_SorterSort)
24af0 20 29 3b 0a 20 20 72 65 73 20 3d 20 31 3b 0a 23   );.  res = 1;.#
24b00 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
24b10 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20  UG.  pC->seekOp 
24b20 3d 20 4f 50 5f 52 65 77 69 6e 64 3b 0a 23 65 6e  = OP_Rewind;.#en
24b30 64 69 66 0a 20 20 69 66 28 20 69 73 53 6f 72 74  dif.  if( isSort
24b40 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20 72 63  er(pC) ){.    rc
24b50 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f   = sqlite3VdbeSo
24b60 72 74 65 72 52 65 77 69 6e 64 28 70 43 2c 20 26  rterRewind(pC, &
24b70 72 65 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  res);.  }else{. 
24b80 20 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70     pCrsr = pC->p
24b90 43 75 72 73 6f 72 3b 0a 20 20 20 20 61 73 73 65  Cursor;.    asse
24ba0 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20  rt( pCrsr );.   
24bb0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
24bc0 65 65 46 69 72 73 74 28 70 43 72 73 72 2c 20 26  eeFirst(pCrsr, &
24bd0 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 64 65  res);.    pC->de
24be0 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
24bf0 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  ;.    pC->cacheS
24c00 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
24c10 41 4c 45 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77  ALE;.    pC->row
24c20 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
24c30 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77   }.  pC->nullRow
24c40 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 61 73   = (u8)res;.  as
24c50 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
24c60 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f  && pOp->p2<p->nO
24c70 70 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  p );.  VdbeBranc
24c80 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29  hTaken(res!=0,2)
24c90 3b 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20  ;.  if( res ){. 
24ca0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
24cb0 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
24cc0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
24cd0 4e 65 78 74 20 50 31 20 50 32 20 50 33 20 50 34  Next P1 P2 P3 P4
24ce0 20 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63   P5.**.** Advanc
24cf0 65 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  e cursor P1 so t
24d00 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  hat it points to
24d10 20 74 68 65 20 6e 65 78 74 20 6b 65 79 2f 64 61   the next key/da
24d20 74 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a  ta pair in its.*
24d30 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  * table or index
24d40 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20  .  If there are 
24d50 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61 6c 75  no more key/valu
24d60 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c  e pairs then fal
24d70 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20  l through.** to 
24d80 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e  the following in
24d90 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20  struction.  But 
24da0 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 61 64  if the cursor ad
24db0 76 61 6e 63 65 20 77 61 73 20 73 75 63 63 65 73  vance was succes
24dc0 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d  sful,.** jump im
24dd0 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
24de0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4e 65 78 74 20  .**.** The Next 
24df0 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76  opcode is only v
24e00 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61  alid following a
24e10 6e 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45  n SeekGT, SeekGE
24e20 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 52 65 77 69 6e  , or.** OP_Rewin
24e30 64 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74 6f  d opcode used to
24e40 20 70 6f 73 69 74 69 6f 6e 20 74 68 65 20 63 75   position the cu
24e50 72 73 6f 72 2e 20 20 4e 65 78 74 20 69 73 20 6e  rsor.  Next is n
24e60 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f  ot allowed.** to
24e70 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 4c 54 2c 20   follow SeekLT, 
24e80 53 65 65 6b 4c 45 2c 20 6f 72 20 4f 50 5f 4c 61  SeekLE, or OP_La
24e90 73 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31  st..**.** The P1
24ea0 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
24eb0 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65  for a real table
24ec0 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74  , not a pseudo-t
24ed0 61 62 6c 65 2e 20 20 50 31 20 6d 75 73 74 20 68  able.  P1 must h
24ee0 61 76 65 0a 2a 2a 20 62 65 65 6e 20 6f 70 65 6e  ave.** been open
24ef0 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73  ed prior to this
24f00 20 6f 70 63 6f 64 65 20 6f 72 20 74 68 65 20 70   opcode or the p
24f10 72 6f 67 72 61 6d 20 77 69 6c 6c 20 73 65 67 66  rogram will segf
24f20 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ault..**.** The 
24f30 50 33 20 76 61 6c 75 65 20 69 73 20 61 20 68 69  P3 value is a hi
24f40 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65 65 20  nt to the btree 
24f50 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20  implementation. 
24f60 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a  If P3==1, that.*
24f70 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20 61 6e  * means P1 is an
24f80 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64 20 74   SQL index and t
24f90 68 61 74 20 74 68 69 73 20 69 6e 73 74 72 75 63  hat this instruc
24fa0 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65 20  tion could have 
24fb0 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20  been.** omitted 
24fc0 69 66 20 74 68 61 74 20 69 6e 64 65 78 20 68 61  if that index ha
24fd0 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e 20 20  d been unique.  
24fe0 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e  P3 is usually 0.
24ff0 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79    P3 is.** alway
25000 73 20 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e  s either 0 or 1.
25010 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77  .**.** P4 is alw
25020 61 79 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41  ays of type P4_A
25030 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63  DVANCE. The func
25040 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69  tion pointer poi
25050 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65  nts to.** sqlite
25060 33 42 74 72 65 65 4e 65 78 74 28 29 2e 0a 2a 2a  3BtreeNext()..**
25070 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73  .** If P5 is pos
25080 69 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75  itive and the ju
25090 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65  mp is taken, the
250a0 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a  n event counter.
250b0 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69  ** number P5-1 i
250c0 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  n the prepared s
250d0 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72  tatement is incr
250e0 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53  emented..**.** S
250f0 65 65 20 61 6c 73 6f 3a 20 50 72 65 76 2c 20 4e  ee also: Prev, N
25100 65 78 74 49 66 4f 70 65 6e 0a 2a 2f 0a 2f 2a 20  extIfOpen.*/./* 
25110 4f 70 63 6f 64 65 3a 20 4e 65 78 74 49 66 4f 70  Opcode: NextIfOp
25120 65 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50  en P1 P2 P3 P4 P
25130 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  5.**.** This opc
25140 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  ode works just l
25150 69 6b 65 20 4e 65 78 74 20 65 78 63 65 70 74 20  ike Next except 
25160 74 68 61 74 20 69 66 20 63 75 72 73 6f 72 20 50  that if cursor P
25170 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70 65 6e  1 is not.** open
25180 20 69 74 20 62 65 68 61 76 65 73 20 61 20 6e 6f   it behaves a no
25190 2d 6f 70 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  -op..*/./* Opcod
251a0 65 3a 20 50 72 65 76 20 50 31 20 50 32 20 50 33  e: Prev P1 P2 P3
251b0 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 61 63   P4 P5.**.** Bac
251c0 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31 20 73  k up cursor P1 s
251d0 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73  o that it points
251e0 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73   to the previous
251f0 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20 69   key/data pair i
25200 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f  n its.** table o
25210 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65  r index.  If the
25220 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69 6f 75  re is no previou
25230 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72  s key/value pair
25240 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  s then fall thro
25250 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f  ugh.** to the fo
25260 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74  llowing instruct
25270 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65  ion.  But if the
25280 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70 20 77   cursor backup w
25290 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a  as successful,.*
252a0 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  * jump immediate
252b0 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 0a  ly to P2..**.**.
252c0 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70 63 6f  ** The Prev opco
252d0 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  de is only valid
252e0 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53 65   following an Se
252f0 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f 72  ekLT, SeekLE, or
25300 0a 2a 2a 20 4f 50 5f 4c 61 73 74 20 6f 70 63 6f  .** OP_Last opco
25310 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73 69 74  de used to posit
25320 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 2e 20  ion the cursor. 
25330 20 50 72 65 76 20 69 73 20 6e 6f 74 20 61 6c 6c   Prev is not all
25340 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f  owed.** to follo
25350 77 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45  w SeekGT, SeekGE
25360 2c 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64 2e 0a  , or OP_Rewind..
25370 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72  **.** The P1 cur
25380 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20  sor must be for 
25390 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
253a0 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
253b0 2e 20 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 6e  .  If P1 is.** n
253c0 6f 74 20 6f 70 65 6e 20 74 68 65 6e 20 74 68 65  ot open then the
253d0 20 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64   behavior is und
253e0 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  efined..**.** Th
253f0 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 61 20  e P3 value is a 
25400 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65  hint to the btre
25410 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
25420 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74  . If P3==1, that
25430 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20  .** means P1 is 
25440 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64  an SQL index and
25450 20 74 68 61 74 20 74 68 69 73 20 69 6e 73 74 72   that this instr
25460 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76  uction could hav
25470 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65  e been.** omitte
25480 64 20 69 66 20 74 68 61 74 20 69 6e 64 65 78 20  d if that index 
25490 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e  had been unique.
254a0 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20    P3 is usually 
254b0 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77  0.  P3 is.** alw
254c0 61 79 73 20 65 69 74 68 65 72 20 30 20 6f 72 20  ays either 0 or 
254d0 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  1..**.** P4 is a
254e0 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50 34  lways of type P4
254f0 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75  _ADVANCE. The fu
25500 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70  nction pointer p
25510 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69  oints to.** sqli
25520 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73  te3BtreePrevious
25530 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  ()..**.** If P5 
25540 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20  is positive and 
25550 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
25560 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f  n, then event co
25570 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20  unter.** number 
25580 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70  P5-1 in the prep
25590 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69  ared statement i
255a0 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a  s incremented..*
255b0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65  /./* Opcode: Pre
255c0 76 49 66 4f 70 65 6e 20 50 31 20 50 32 20 50 33  vIfOpen P1 P2 P3
255d0 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69   P4 P5.**.** Thi
255e0 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a  s opcode works j
255f0 75 73 74 20 6c 69 6b 65 20 50 72 65 76 20 65 78  ust like Prev ex
25600 63 65 70 74 20 74 68 61 74 20 69 66 20 63 75 72  cept that if cur
25610 73 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a  sor P1 is not.**
25620 20 6f 70 65 6e 20 69 74 20 62 65 68 61 76 65 73   open it behaves
25630 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73   a no-op..*/.cas
25640 65 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 3a  e OP_SorterNext:
25650 20 7b 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20   {  /* jump */. 
25660 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
25670 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 70  .  int res;..  p
25680 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
25690 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
256a0 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b   isSorter(pC) );
256b0 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 72 63  .  res = 0;.  rc
256c0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f   = sqlite3VdbeSo
256d0 72 74 65 72 4e 65 78 74 28 64 62 2c 20 70 43 2c  rterNext(db, pC,
256e0 20 26 72 65 73 29 3b 0a 20 20 67 6f 74 6f 20 6e   &res);.  goto n
256f0 65 78 74 5f 74 61 69 6c 3b 0a 63 61 73 65 20 4f  ext_tail;.case O
25700 50 5f 50 72 65 76 49 66 4f 70 65 6e 3a 20 20 20  P_PrevIfOpen:   
25710 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
25720 20 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 3a 20   OP_NextIfOpen: 
25730 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
25740 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  if( p->apCsr[pOp
25750 2d 3e 70 31 5d 3d 3d 30 20 29 20 62 72 65 61 6b  ->p1]==0 ) break
25760 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  ;.  /* Fall thro
25770 75 67 68 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  ugh */.case OP_P
25780 72 65 76 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  rev:          /*
25790 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
257a0 5f 4e 65 78 74 3a 20 20 20 20 20 20 20 20 20 20  _Next:          
257b0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73  /* jump */.  ass
257c0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
257d0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
257e0 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
257f0 74 28 20 70 4f 70 2d 3e 70 35 3c 41 72 72 61 79  t( pOp->p5<Array
25800 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e 74 65 72  Size(p->aCounter
25810 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  ) );.  pC = p->a
25820 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
25830 20 72 65 73 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a   res = pOp->p3;.
25840 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
25850 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
25860 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
25870 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
25880 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 3b 0a 20  pC->pCursor );. 
25890 20 61 73 73 65 72 74 28 20 72 65 73 3d 3d 30 20   assert( res==0 
258a0 7c 7c 20 28 72 65 73 3d 3d 31 20 26 26 20 70 43  || (res==1 && pC
258b0 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 29 20 29 3b  ->isTable==0) );
258c0 0a 20 20 74 65 73 74 63 61 73 65 28 20 72 65 73  .  testcase( res
258d0 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==1 );.  assert(
258e0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
258f0 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 70 34  _Next || pOp->p4
25900 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74  .xAdvance==sqlit
25910 65 33 42 74 72 65 65 4e 65 78 74 20 29 3b 0a 20  e3BtreeNext );. 
25920 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
25930 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c  code!=OP_Prev ||
25940 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63   pOp->p4.xAdvanc
25950 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 50  e==sqlite3BtreeP
25960 72 65 76 69 6f 75 73 20 29 3b 0a 20 20 61 73 73  revious );.  ass
25970 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
25980 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 20  !=OP_NextIfOpen 
25990 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61  || pOp->p4.xAdva
259a0 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  nce==sqlite3Btre
259b0 65 4e 65 78 74 20 29 3b 0a 20 20 61 73 73 65 72  eNext );.  asser
259c0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
259d0 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 20 7c 7c  OP_PrevIfOpen ||
259e0 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63   pOp->p4.xAdvanc
259f0 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 50  e==sqlite3BtreeP
25a00 72 65 76 69 6f 75 73 29 3b 0a 0a 20 20 2f 2a 20  revious);..  /* 
25a10 54 68 65 20 4e 65 78 74 20 6f 70 63 6f 64 65 20  The Next opcode 
25a20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 61 66 74  is only used aft
25a30 65 72 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47  er SeekGT, SeekG
25a40 45 2c 20 61 6e 64 20 52 65 77 69 6e 64 2e 0a 20  E, and Rewind.. 
25a50 20 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70 63   ** The Prev opc
25a60 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73 65 64  ode is only used
25a70 20 61 66 74 65 72 20 53 65 65 6b 4c 54 2c 20 53   after SeekLT, S
25a80 65 65 6b 4c 45 2c 20 61 6e 64 20 4c 61 73 74 2e  eekLE, and Last.
25a90 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
25aa0 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65  p->opcode!=OP_Ne
25ab0 78 74 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  xt || pOp->opcod
25ac0 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e  e!=OP_NextIfOpen
25ad0 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73  .       || pC->s
25ae0 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 54  eekOp==OP_SeekGT
25af0 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
25b00 4f 50 5f 53 65 65 6b 47 45 0a 20 20 20 20 20 20  OP_SeekGE.      
25b10 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
25b20 4f 50 5f 52 65 77 69 6e 64 20 7c 7c 20 70 43 2d  OP_Rewind || pC-
25b30 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 46 6f 75 6e  >seekOp==OP_Foun
25b40 64 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  d);.  assert( pO
25b50 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72  p->opcode!=OP_Pr
25b60 65 76 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  ev || pOp->opcod
25b70 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e  e!=OP_PrevIfOpen
25b80 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73  .       || pC->s
25b90 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c 54  eekOp==OP_SeekLT
25ba0 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
25bb0 4f 50 5f 53 65 65 6b 4c 45 0a 20 20 20 20 20 20  OP_SeekLE.      
25bc0 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
25bd0 4f 50 5f 4c 61 73 74 20 29 3b 0a 0a 20 20 72 63  OP_Last );..  rc
25be0 20 3d 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61   = pOp->p4.xAdva
25bf0 6e 63 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  nce(pC->pCursor,
25c00 20 26 72 65 73 29 3b 0a 6e 65 78 74 5f 74 61 69   &res);.next_tai
25c10 6c 3a 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  l:.  pC->cacheSt
25c20 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
25c30 4c 45 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  LE;.  VdbeBranch
25c40 54 61 6b 65 6e 28 72 65 73 3d 3d 30 2c 32 29 3b  Taken(res==0,2);
25c50 0a 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b  .  if( res==0 ){
25c60 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  .    pC->nullRow
25c70 20 3d 20 30 3b 0a 20 20 20 20 70 63 20 3d 20 70   = 0;.    pc = p
25c80 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
25c90 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d  p->aCounter[pOp-
25ca0 3e 70 35 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53  >p5]++;.#ifdef S
25cb0 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73  QLITE_TEST.    s
25cc0 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f  qlite3_search_co
25cd0 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20  unt++;.#endif.  
25ce0 7d 65 6c 73 65 7b 0a 20 20 20 20 70 43 2d 3e 6e  }else{.    pC->n
25cf0 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 7d 0a  ullRow = 1;.  }.
25d00 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
25d10 69 64 20 3d 20 30 3b 0a 20 20 67 6f 74 6f 20 63  id = 0;.  goto c
25d20 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
25d30 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  pt;.}../* Opcode
25d40 3a 20 49 64 78 49 6e 73 65 72 74 20 50 31 20 50  : IdxInsert P1 P
25d50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 20 53 79 6e  2 P3 * P5.** Syn
25d60 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32 5d  opsis: key=r[P2]
25d70 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
25d80 50 32 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c 20  P2 holds an SQL 
25d90 69 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75  index key made u
25da0 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65  sing the.** Make
25db0 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69  Record instructi
25dc0 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ons.  This opcod
25dd0 65 20 77 72 69 74 65 73 20 74 68 61 74 20 6b 65  e writes that ke
25de0 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e  y.** into the in
25df0 64 65 78 20 50 31 2e 20 20 44 61 74 61 20 66 6f  dex P1.  Data fo
25e00 72 20 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e  r the entry is n
25e10 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20  il..**.** P3 is 
25e20 61 20 66 6c 61 67 20 74 68 61 74 20 70 72 6f 76  a flag that prov
25e30 69 64 65 73 20 61 20 68 69 6e 74 20 74 6f 20 74  ides a hint to t
25e40 68 65 20 62 2d 74 72 65 65 20 6c 61 79 65 72 20  he b-tree layer 
25e50 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 69 6e 73  that this.** ins
25e60 65 72 74 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f  ert is likely to
25e70 20 62 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a 2a   be an append..*
25e80 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74  *.** If P5 has t
25e90 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47  he OPFLAG_NCHANG
25ea0 45 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20  E bit set, then 
25eb0 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  the change count
25ec0 65 72 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65  er is.** increme
25ed0 6e 74 65 64 20 62 79 20 74 68 69 73 20 69 6e 73  nted by this ins
25ee0 74 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68  truction.  If th
25ef0 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
25f00 20 62 69 74 20 69 73 20 63 6c 65 61 72 2c 0a 2a   bit is clear,.*
25f10 2a 20 74 68 65 6e 20 74 68 65 20 63 68 61 6e 67  * then the chang
25f20 65 20 63 6f 75 6e 74 65 72 20 69 73 20 75 6e 63  e counter is unc
25f30 68 61 6e 67 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  hanged..**.** If
25f40 20 50 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c   P5 has the OPFL
25f50 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
25f60 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74   bit set, then t
25f70 68 65 20 63 75 72 73 6f 72 20 6d 75 73 74 20 68  he cursor must h
25f80 61 76 65 0a 2a 2a 20 6a 75 73 74 20 64 6f 6e 65  ave.** just done
25f90 20 61 20 73 65 65 6b 20 74 6f 20 74 68 65 20 73   a seek to the s
25fa0 70 6f 74 20 77 68 65 72 65 20 74 68 65 20 6e 65  pot where the ne
25fb0 77 20 65 6e 74 72 79 20 69 73 20 74 6f 20 62 65  w entry is to be
25fc0 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2a 20 54 68   inserted..** Th
25fd0 69 73 20 66 6c 61 67 20 61 76 6f 69 64 73 20 64  is flag avoids d
25fe0 6f 69 6e 67 20 61 6e 20 65 78 74 72 61 20 73 65  oing an extra se
25ff0 65 6b 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  ek..**.** This i
26000 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20  nstruction only 
26010 77 6f 72 6b 73 20 66 6f 72 20 69 6e 64 69 63 65  works for indice
26020 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65  s.  The equivale
26030 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a  nt instruction.*
26040 2a 20 66 6f 72 20 74 61 62 6c 65 73 20 69 73 20  * for tables is 
26050 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a 63 61  OP_Insert..*/.ca
26060 73 65 20 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65  se OP_SorterInse
26070 72 74 3a 20 20 20 20 20 20 20 2f 2a 20 69 6e 32  rt:       /* in2
26080 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 49   */.case OP_IdxI
26090 6e 73 65 72 74 3a 20 7b 20 20 20 20 20 20 20 20  nsert: {        
260a0 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65  /* in2 */.  Vdbe
260b0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
260c0 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
260d0 20 69 6e 74 20 6e 4b 65 79 3b 0a 20 20 63 6f 6e   int nKey;.  con
260e0 73 74 20 63 68 61 72 20 2a 7a 4b 65 79 3b 0a 0a  st char *zKey;..
260f0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
26100 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
26110 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
26120 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
26130 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
26140 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
26150 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
26160 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  )==(pOp->opcode=
26170 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74  =OP_SorterInsert
26180 29 20 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  ) );.  pIn2 = &a
26190 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
261a0 61 73 73 65 72 74 28 20 70 49 6e 32 2d 3e 66 6c  assert( pIn2->fl
261b0 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29  ags & MEM_Blob )
261c0 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
261d0 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70  pCursor;.  if( p
261e0 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
261f0 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68  NCHANGE ) p->nCh
26200 61 6e 67 65 2b 2b 3b 0a 20 20 61 73 73 65 72 74  ange++;.  assert
26210 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20  ( pCrsr!=0 );.  
26220 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
26230 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d  ble==0 );.  rc =
26240 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32   ExpandBlob(pIn2
26250 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
26260 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 66  ITE_OK ){.    if
26270 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
26280 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
26290 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 57 72  ite3VdbeSorterWr
262a0 69 74 65 28 70 43 2c 20 70 49 6e 32 29 3b 0a 20  ite(pC, pIn2);. 
262b0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
262c0 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a  nKey = pIn2->n;.
262d0 20 20 20 20 20 20 7a 4b 65 79 20 3d 20 70 49 6e        zKey = pIn
262e0 32 2d 3e 7a 3b 0a 20 20 20 20 20 20 72 63 20 3d  2->z;.      rc =
262f0 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73   sqlite3BtreeIns
26300 65 72 74 28 70 43 72 73 72 2c 20 7a 4b 65 79 2c  ert(pCrsr, zKey,
26310 20 6e 4b 65 79 2c 20 22 22 2c 20 30 2c 20 30 2c   nKey, "", 0, 0,
26320 20 70 4f 70 2d 3e 70 33 2c 20 0a 20 20 20 20 20   pOp->p3, .     
26330 20 20 20 20 20 28 28 70 4f 70 2d 3e 70 35 20 26       ((pOp->p5 &
26340 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
26350 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65  ESULT) ? pC->see
26360 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a 20 20 20  kResult : 0).   
26370 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20         );.      
26380 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
26390 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
263a0 0a 20 20 20 20 20 20 70 43 2d 3e 63 61 63 68 65  .      pC->cache
263b0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
263c0 54 41 4c 45 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  TALE;.    }.  }.
263d0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
263e0 70 63 6f 64 65 3a 20 49 64 78 44 65 6c 65 74 65  pcode: IdxDelete
263f0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
26400 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
26410 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 54 68  [P2@P3].**.** Th
26420 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20  e content of P3 
26430 72 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69  registers starti
26440 6e 67 20 61 74 20 72 65 67 69 73 74 65 72 20 50  ng at register P
26450 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70  2 form.** an unp
26460 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
26470 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 6d   This opcode rem
26480 6f 76 65 73 20 74 68 61 74 20 65 6e 74 72 79 20  oves that entry 
26490 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64  from the .** ind
264a0 65 78 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72  ex opened by cur
264b0 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20  sor P1..*/.case 
264c0 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a  OP_IdxDelete: {.
264d0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
264e0 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
264f0 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
26500 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
26510 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70   r;..  assert( p
26520 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 61 73  Op->p3>0 );.  as
26530 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
26540 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e  && pOp->p2+pOp->
26550 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
26560 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
26570 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
26580 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
26590 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
265a0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
265b0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
265c0 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  pC!=0 );.  pCrsr
265d0 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
265e0 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21    assert( pCrsr!
265f0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
26600 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20  pOp->p5==0 );.  
26610 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d  r.pKeyInfo = pC-
26620 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e  >pKeyInfo;.  r.n
26630 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70  Field = (u16)pOp
26640 2d 3e 70 33 3b 0a 20 20 72 2e 64 65 66 61 75 6c  ->p3;.  r.defaul
26650 74 5f 72 63 20 3d 20 30 3b 0a 20 20 72 2e 61 4d  t_rc = 0;.  r.aM
26660 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
26670 70 32 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  p2];.#ifdef SQLI
26680 54 45 5f 44 45 42 55 47 0a 20 20 7b 20 69 6e 74  TE_DEBUG.  { int
26690 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72   i; for(i=0; i<r
266a0 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73  .nField; i++) as
266b0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
266c0 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20  (&r.aMem[i]) ); 
266d0 7d 0a 23 65 6e 64 69 66 0a 20 20 72 63 20 3d 20  }.#endif.  rc = 
266e0 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
266f0 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72  toUnpacked(pCrsr
26700 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73  , &r, 0, 0, &res
26710 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
26720 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30  ITE_OK && res==0
26730 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
26740 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28  ite3BtreeDelete(
26750 70 43 72 73 72 29 3b 0a 20 20 7d 0a 20 20 61 73  pCrsr);.  }.  as
26760 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
26770 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
26780 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
26790 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
267a0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
267b0 70 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64 20  pcode: IdxRowid 
267c0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
267d0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
267e0 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  owid.**.** Write
267f0 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
26800 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69  2 an integer whi
26810 63 68 20 69 73 20 74 68 65 20 6c 61 73 74 20 65  ch is the last e
26820 6e 74 72 79 20 69 6e 20 74 68 65 20 72 65 63 6f  ntry in the reco
26830 72 64 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64  rd at.** the end
26840 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65   of the index ke
26850 79 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20  y pointed to by 
26860 63 75 72 73 6f 72 20 50 31 2e 20 20 54 68 69 73  cursor P1.  This
26870 20 69 6e 74 65 67 65 72 20 73 68 6f 75 6c 64 20   integer should 
26880 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64 20  be.** the rowid 
26890 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74  of the table ent
268a0 72 79 20 74 6f 20 77 68 69 63 68 20 74 68 69 73  ry to which this
268b0 20 69 6e 64 65 78 20 65 6e 74 72 79 20 70 6f 69   index entry poi
268c0 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  nts..**.** See a
268d0 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65  lso: Rowid, Make
268e0 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65 20  Record..*/.case 
268f0 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b 20 20  OP_IdxRowid: {  
26900 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
26910 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
26920 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  /.  BtCursor *pC
26930 72 73 72 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  rsr;.  VdbeCurso
26940 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 72 6f 77  r *pC;.  i64 row
26950 69 64 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  id;..  assert( p
26960 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
26970 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
26980 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
26990 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
269a0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
269b0 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
269c0 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28  ursor;.  assert(
269d0 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 70   pCrsr!=0 );.  p
269e0 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
269f0 5f 4e 75 6c 6c 3b 0a 20 20 72 63 20 3d 20 73 71  _Null;.  rc = sq
26a00 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
26a10 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28  oveto(pC);.  if(
26a20 20 4e 45 56 45 52 28 72 63 29 20 29 20 67 6f 74   NEVER(rc) ) got
26a30 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
26a40 72 72 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rror;.  assert( 
26a50 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
26a60 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  to==0 );.  asser
26a70 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  t( pC->isTable==
26a80 30 20 29 3b 0a 20 20 69 66 28 20 21 70 43 2d 3e  0 );.  if( !pC->
26a90 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 72  nullRow ){.    r
26aa0 6f 77 69 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f  owid = 0;  /* No
26ab0 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20  t needed.  Only 
26ac0 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20  used to silence 
26ad0 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  a warning. */.  
26ae0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
26af0 62 65 49 64 78 52 6f 77 69 64 28 64 62 2c 20 70  beIdxRowid(db, p
26b00 43 72 73 72 2c 20 26 72 6f 77 69 64 29 3b 0a 20  Crsr, &rowid);. 
26b10 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
26b20 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f  E_OK ){.      go
26b30 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
26b40 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20  error;.    }.   
26b50 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77   pOut->u.i = row
26b60 69 64 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c  id;.    pOut->fl
26b70 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
26b80 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
26b90 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 45 20  * Opcode: IdxGE 
26ba0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
26bb0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
26bc0 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54  r[P3@P4].**.** T
26bd0 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76  he P4 register v
26be0 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20  alues beginning 
26bf0 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20  with P3 form an 
26c00 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a  unpacked index .
26c10 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74  ** key that omit
26c20 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
26c30 59 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73  Y.  Compare this
26c40 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e   key value again
26c50 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a  st the index .**
26c60 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72   that P1 is curr
26c70 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74  ently pointing t
26c80 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20  o, ignoring the 
26c90 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52  PRIMARY KEY or R
26ca0 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20  OWID .** fields 
26cb0 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a  at the end..**.*
26cc0 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65  * If the P1 inde
26cd0 78 20 65 6e 74 72 79 20 69 73 20 67 72 65 61 74  x entry is great
26ce0 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
26cf0 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75   to the key valu
26d00 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74  e.** then jump t
26d10 6f 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65  o P2.  Otherwise
26d20 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
26d30 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
26d40 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ction..*/./* Opc
26d50 6f 64 65 3a 20 49 64 78 47 54 20 50 31 20 50 32  ode: IdxGT P1 P2
26d60 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
26d70 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
26d80 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  P4].**.** The P4
26d90 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73   register values
26da0 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
26db0 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  P3 form an unpac
26dc0 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65  ked index .** ke
26dd0 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65  y that omits the
26de0 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 43   PRIMARY KEY.  C
26df0 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
26e00 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68  value against th
26e10 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74  e index .** that
26e20 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
26e30 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
26e40 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41  noring the PRIMA
26e50 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 20  RY KEY or ROWID 
26e60 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74 20 74 68  .** fields at th
26e70 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  e end..**.** If 
26e80 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74  the P1 index ent
26e90 72 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ry is greater th
26ea0 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  an the key value
26eb0 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  .** then jump to
26ec0 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20   P2.  Otherwise 
26ed0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
26ee0 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
26ef0 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
26f00 64 65 3a 20 49 64 78 4c 54 20 50 31 20 50 32 20  de: IdxLT P1 P2 
26f10 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
26f20 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
26f30 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  4].**.** The P4 
26f40 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20  register values 
26f50 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
26f60 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  3 form an unpack
26f70 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79  ed index .** key
26f80 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20   that omits the 
26f90 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52  PRIMARY KEY or R
26fa0 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74  OWID.  Compare t
26fb0 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67  his key value ag
26fc0 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64  ainst.** the ind
26fd0 65 78 20 74 68 61 74 20 50 31 20 69 73 20 63 75  ex that P1 is cu
26fe0 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
26ff0 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68   to, ignoring th
27000 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72  e PRIMARY KEY or
27010 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20 74 68 65  .** ROWID on the
27020 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a   P1 index..**.**
27030 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
27040 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74   entry is less t
27050 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
27060 65 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  e then jump to P
27070 32 2e 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 20  2..** Otherwise 
27080 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
27090 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
270a0 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
270b0 64 65 3a 20 49 64 78 4c 45 20 50 31 20 50 32 20  de: IdxLE P1 P2 
270c0 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
270d0 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
270e0 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  4].**.** The P4 
270f0 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20  register values 
27100 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
27110 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  3 form an unpack
27120 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79  ed index .** key
27130 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20   that omits the 
27140 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52  PRIMARY KEY or R
27150 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74  OWID.  Compare t
27160 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67  his key value ag
27170 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64  ainst.** the ind
27180 65 78 20 74 68 61 74 20 50 31 20 69 73 20 63 75  ex that P1 is cu
27190 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
271a0 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68   to, ignoring th
271b0 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72  e PRIMARY KEY or
271c0 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20 74 68 65  .** ROWID on the
271d0 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a   P1 index..**.**
271e0 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
271f0 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74   entry is less t
27200 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
27210 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68  the key value th
27220 65 6e 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32  en jump.** to P2
27230 2e 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c  . Otherwise fall
27240 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
27250 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
27260 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  ..*/.case OP_Idx
27270 4c 45 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  LE:          /* 
27280 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
27290 49 64 78 47 54 3a 20 20 20 20 20 20 20 20 20 20  IdxGT:          
272a0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
272b0 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20 20 20 20  OP_IdxLT:       
272c0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
272d0 73 65 20 4f 50 5f 49 64 78 47 45 3a 20 20 7b 20  se OP_IdxGE:  { 
272e0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
272f0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
27300 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  C;.  int res;.  
27310 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
27320 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
27330 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
27340 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
27350 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
27360 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
27370 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
27380 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72  assert( pC->isOr
27390 64 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72  dered );.  asser
273a0 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  t( pC->pCursor!=
273b0 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  0);.  assert( pC
273c0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
273d0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
273e0 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70   pOp->p5==0 || p
273f0 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 61  Op->p5==1 );.  a
27400 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
27410 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
27420 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
27430 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72  C->pKeyInfo;.  r
27440 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70  .nField = (u16)p
27450 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 69 66 28 20  Op->p4.i;.  if( 
27460 70 4f 70 2d 3e 6f 70 63 6f 64 65 3c 4f 50 5f 49  pOp->opcode<OP_I
27470 64 78 4c 54 20 29 7b 0a 20 20 20 20 61 73 73 65  dxLT ){.    asse
27480 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
27490 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f 70  =OP_IdxLE || pOp
274a0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
274b0 47 54 20 29 3b 0a 20 20 20 20 72 2e 64 65 66 61  GT );.    r.defa
274c0 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20 7d  ult_rc = -1;.  }
274d0 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
274e0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
274f0 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e  P_IdxGE || pOp->
27500 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54  opcode==OP_IdxLT
27510 20 29 3b 0a 20 20 20 20 72 2e 64 65 66 61 75 6c   );.    r.defaul
27520 74 5f 72 63 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  t_rc = 0;.  }.  
27530 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  r.aMem = &aMem[p
27540 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20  Op->p3];.#ifdef 
27550 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 7b  SQLITE_DEBUG.  {
27560 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b   int i; for(i=0;
27570 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b   i<r.nField; i++
27580 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56  ) assert( memIsV
27590 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29  alid(&r.aMem[i])
275a0 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72   ); }.#endif.  r
275b0 65 73 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  es = 0;  /* Not 
275c0 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73  needed.  Only us
275d0 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20  ed to silence a 
275e0 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63  warning. */.  rc
275f0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64   = sqlite3VdbeId
27600 78 4b 65 79 43 6f 6d 70 61 72 65 28 70 43 2c 20  xKeyCompare(pC, 
27610 26 72 2c 20 26 72 65 73 29 3b 0a 20 20 61 73 73  &r, &res);.  ass
27620 65 72 74 28 20 28 4f 50 5f 49 64 78 4c 45 26 31  ert( (OP_IdxLE&1
27630 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29 20  )==(OP_IdxLT&1) 
27640 26 26 20 28 4f 50 5f 49 64 78 47 45 26 31 29 3d  && (OP_IdxGE&1)=
27650 3d 28 4f 50 5f 49 64 78 47 54 26 31 29 20 29 3b  =(OP_IdxGT&1) );
27660 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 63  .  if( (pOp->opc
27670 6f 64 65 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c  ode&1)==(OP_IdxL
27680 54 26 31 29 20 29 7b 0a 20 20 20 20 61 73 73 65  T&1) ){.    asse
27690 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
276a0 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f 70  =OP_IdxLE || pOp
276b0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
276c0 4c 54 20 29 3b 0a 20 20 20 20 72 65 73 20 3d 20  LT );.    res = 
276d0 2d 72 65 73 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  -res;.  }else{. 
276e0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
276f0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45  opcode==OP_IdxGE
27700 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
27710 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20  =OP_IdxGT );.   
27720 20 72 65 73 2b 2b 3b 0a 20 20 7d 0a 20 20 56 64   res++;.  }.  Vd
27730 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
27740 73 3e 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65  s>0,2);.  if( re
27750 73 3e 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  s>0 ){.    pc = 
27760 70 4f 70 2d 3e 70 32 20 2d 20 31 20 3b 0a 20 20  pOp->p2 - 1 ;.  
27770 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
27780 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72 6f 79   Opcode: Destroy
27790 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
277a0 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20 65 6e  .** Delete an en
277b0 74 69 72 65 20 64 61 74 61 62 61 73 65 20 74 61  tire database ta
277c0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f  ble or index who
277d0 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20  se root page in 
277e0 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
277f0 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79  file is given by
27800 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74   P1..**.** The t
27810 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73 74 72  able being destr
27820 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65 20 6d  oyed is in the m
27830 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
27840 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49 66 0a  e if P3==0.  If.
27850 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20 74 68  ** P3==1 then th
27860 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c  e table to be cl
27870 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75  ear is in the au
27880 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
27890 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73   file.** that is
278a0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
278b0 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69  ables create usi
278c0 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52  ng CREATE TEMPOR
278d0 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a  ARY TABLE..**.**
278e0 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69   If AUTOVACUUM i
278f0 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e 20 69  s enabled then i
27900 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 68  t is possible th
27910 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74 20  at another root 
27920 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62 65  page.** might be
27930 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20   moved into the 
27940 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20 72 6f  newly deleted ro
27950 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64 65 72  ot page in order
27960 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20   to keep all.** 
27970 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e 74 69  root pages conti
27980 67 75 6f 75 73 20 61 74 20 74 68 65 20 62 65 67  guous at the beg
27990 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64 61  inning of the da
279a0 74 61 62 61 73 65 2e 20 20 54 68 65 20 66 6f 72  tabase.  The for
279b0 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20  mer.** value of 
279c0 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 74 68  the root page th
279d0 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73 20 76  at moved - its v
279e0 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68 65 20  alue before the 
279f0 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20 2d 0a  move occurred -.
27a00 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ** is stored in 
27a10 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66  register P2.  If
27a20 20 6e 6f 20 70 61 67 65 20 0a 2a 2a 20 6d 6f 76   no page .** mov
27a30 65 6d 65 6e 74 20 77 61 73 20 72 65 71 75 69 72  ement was requir
27a40 65 64 20 28 62 65 63 61 75 73 65 20 74 68 65 20  ed (because the 
27a50 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72 6f 70  table being drop
27a60 70 65 64 20 77 61 73 20 61 6c 72 65 61 64 79 20  ped was already 
27a70 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 6f 6e 65  .** the last one
27a80 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
27a90 29 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73  ) then a zero is
27aa0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
27ab0 74 65 72 20 50 32 2e 0a 2a 2a 20 49 66 20 41 55  ter P2..** If AU
27ac0 54 4f 56 41 43 55 55 4d 20 69 73 20 64 69 73 61  TOVACUUM is disa
27ad0 62 6c 65 64 20 74 68 65 6e 20 61 20 7a 65 72 6f  bled then a zero
27ae0 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
27af0 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
27b00 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61 72   See also: Clear
27b10 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73 74  .*/.case OP_Dest
27b20 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f 75  roy: {     /* ou
27b30 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
27b40 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64 3b 0a 20  .  int iMoved;. 
27b50 20 69 6e 74 20 69 43 6e 74 3b 0a 20 20 56 64 62   int iCnt;.  Vdb
27b60 65 20 2a 70 56 64 62 65 3b 0a 20 20 69 6e 74 20  e *pVdbe;.  int 
27b70 69 44 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  iDb;..  assert( 
27b80 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
27b90 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
27ba0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
27bb0 4c 45 0a 20 20 69 43 6e 74 20 3d 20 30 3b 0a 20  LE.  iCnt = 0;. 
27bc0 20 66 6f 72 28 70 56 64 62 65 3d 64 62 2d 3e 70   for(pVdbe=db->p
27bd0 56 64 62 65 3b 20 70 56 64 62 65 3b 20 70 56 64  Vdbe; pVdbe; pVd
27be0 62 65 20 3d 20 70 56 64 62 65 2d 3e 70 4e 65 78  be = pVdbe->pNex
27bf0 74 29 7b 0a 20 20 20 20 69 66 28 20 70 56 64 62  t){.    if( pVdb
27c00 65 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d  e->magic==VDBE_M
27c10 41 47 49 43 5f 52 55 4e 20 26 26 20 70 56 64 62  AGIC_RUN && pVdb
27c20 65 2d 3e 62 49 73 52 65 61 64 65 72 20 0a 20 20  e->bIsReader .  
27c30 20 20 20 26 26 20 70 56 64 62 65 2d 3e 69 6e 56     && pVdbe->inV
27c40 74 61 62 4d 65 74 68 6f 64 3c 32 20 26 26 20 70  tabMethod<2 && p
27c50 56 64 62 65 2d 3e 70 63 3e 3d 30 20 0a 20 20 20  Vdbe->pc>=0 .   
27c60 20 29 7b 0a 20 20 20 20 20 20 69 43 6e 74 2b 2b   ){.      iCnt++
27c70 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6c 73  ;.    }.  }.#els
27c80 65 0a 20 20 69 43 6e 74 20 3d 20 64 62 2d 3e 6e  e.  iCnt = db->n
27c90 56 64 62 65 52 65 61 64 3b 0a 23 65 6e 64 69 66  VdbeRead;.#endif
27ca0 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
27cb0 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28   MEM_Null;.  if(
27cc0 20 69 43 6e 74 3e 31 20 29 7b 0a 20 20 20 20 72   iCnt>1 ){.    r
27cd0 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  c = SQLITE_LOCKE
27ce0 44 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72 41  D;.    p->errorA
27cf0 63 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74  ction = OE_Abort
27d00 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  ;.  }else{.    i
27d10 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  Db = pOp->p3;.  
27d20 20 20 61 73 73 65 72 74 28 20 69 43 6e 74 3d 3d    assert( iCnt==
27d30 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  1 );.    assert(
27d40 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
27d50 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29  treeMask, iDb) )
27d60 3b 0a 20 20 20 20 69 4d 6f 76 65 64 20 3d 20 30  ;.    iMoved = 0
27d70 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64  ;  /* Not needed
27d80 2e 20 20 4f 6e 6c 79 20 74 6f 20 73 69 6c 65 6e  .  Only to silen
27d90 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f  ce a warning. */
27da0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
27db0 33 42 74 72 65 65 44 72 6f 70 54 61 62 6c 65 28  3BtreeDropTable(
27dc0 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
27dd0 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f 76  , pOp->p1, &iMov
27de0 65 64 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  ed);.    pOut->f
27df0 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
27e00 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
27e10 69 4d 6f 76 65 64 3b 0a 23 69 66 6e 64 65 66 20  iMoved;.#ifndef 
27e20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
27e30 56 41 43 55 55 4d 0a 20 20 20 20 69 66 28 20 72  VACUUM.    if( r
27e40 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
27e50 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20 20 20  iMoved!=0 ){.   
27e60 20 20 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61     sqlite3RootPa
27e70 67 65 4d 6f 76 65 64 28 64 62 2c 20 69 44 62 2c  geMoved(db, iDb,
27e80 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31   iMoved, pOp->p1
27e90 29 3b 0a 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  );.      /* All 
27ea0 4f 50 5f 44 65 73 74 72 6f 79 20 6f 70 65 72 61  OP_Destroy opera
27eb0 74 69 6f 6e 73 20 6f 63 63 75 72 20 6f 6e 20 74  tions occur on t
27ec0 68 65 20 73 61 6d 65 20 62 74 72 65 65 20 2a 2f  he same btree */
27ed0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72  .      assert( r
27ee0 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c  esetSchemaOnFaul
27ef0 74 3d 3d 30 20 7c 7c 20 72 65 73 65 74 53 63 68  t==0 || resetSch
27f00 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69 44 62 2b  emaOnFault==iDb+
27f10 31 20 29 3b 0a 20 20 20 20 20 20 72 65 73 65 74  1 );.      reset
27f20 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20  SchemaOnFault = 
27f30 69 44 62 2b 31 3b 0a 20 20 20 20 7d 0a 23 65 6e  iDb+1;.    }.#en
27f40 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  dif.  }.  break;
27f50 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
27f60 6c 65 61 72 20 50 31 20 50 32 20 50 33 0a 2a 2a  lear P1 P2 P3.**
27f70 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63  .** Delete all c
27f80 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20 64  ontents of the d
27f90 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72  atabase table or
27fa0 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f   index whose roo
27fb0 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74 68 65  t page.** in the
27fc0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
27fd0 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e 20 20  s given by P1.  
27fe0 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65 73 74  But, unlike Dest
27ff0 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72  roy, do not.** r
28000 65 6d 6f 76 65 20 74 68 65 20 74 61 62 6c 65 20  emove the table 
28010 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d 20 74 68  or index from th
28020 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
28030 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65  .**.** The table
28040 20 62 65 69 6e 67 20 63 6c 65 61 72 20 69 73 20   being clear is 
28050 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
28060 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 32 3d  base file if P2=
28070 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d 3d 31  =0.  If.** P2==1
28080 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
28090 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20 69  to be clear is i
280a0 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20  n the auxiliary 
280b0 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a  database file.**
280c0 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f   that is used to
280d0 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72   store tables cr
280e0 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41 54  eate using CREAT
280f0 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c  E TEMPORARY TABL
28100 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  E..**.** If the 
28110 50 33 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d  P3 value is non-
28120 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 74  zero, then the t
28130 61 62 6c 65 20 72 65 66 65 72 72 65 64 20 74 6f  able referred to
28140 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a 2a 20 69   must be an.** i
28150 6e 74 6b 65 79 20 74 61 62 6c 65 20 28 61 6e 20  ntkey table (an 
28160 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  SQL table, not a
28170 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20 74 68 69  n index). In thi
28180 73 20 63 61 73 65 20 74 68 65 20 72 6f 77 20 63  s case the row c
28190 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e 74 20  hange .** count 
281a0 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62  is incremented b
281b0 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  y the number of 
281c0 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c  rows in the tabl
281d0 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e  e being cleared.
281e0 20 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 67 72   .** If P3 is gr
281f0 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c  eater than zero,
28200 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20   then the value 
28210 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
28220 65 72 20 50 33 20 69 73 0a 2a 2a 20 61 6c 73 6f  er P3 is.** also
28230 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20   incremented by 
28240 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
28250 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ws in the table 
28260 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 0a 2a  being cleared..*
28270 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 44  *.** See also: D
28280 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f  estroy.*/.case O
28290 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20 69 6e 74  P_Clear: {.  int
282a0 20 6e 43 68 61 6e 67 65 3b 0a 20 0a 20 20 6e 43   nChange;. .  nC
282b0 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61 73 73  hange = 0;.  ass
282c0 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
282d0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
282e0 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
282f0 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70  treeMask, pOp->p
28300 32 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  2) );.  rc = sql
28310 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 54 61  ite3BtreeClearTa
28320 62 6c 65 28 0a 20 20 20 20 20 20 64 62 2d 3e 61  ble(.      db->a
28330 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c  Db[pOp->p2].pBt,
28340 20 70 4f 70 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e   pOp->p1, (pOp->
28350 70 33 20 3f 20 26 6e 43 68 61 6e 67 65 20 3a 20  p3 ? &nChange : 
28360 30 29 0a 20 20 29 3b 0a 20 20 69 66 28 20 70 4f  0).  );.  if( pO
28370 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 70 2d 3e  p->p3 ){.    p->
28380 6e 43 68 61 6e 67 65 20 2b 3d 20 6e 43 68 61 6e  nChange += nChan
28390 67 65 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  ge;.    if( pOp-
283a0 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20 20 20 61  >p3>0 ){.      a
283b0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
283c0 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  d(&aMem[pOp->p3]
283d0 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62  ) );.      memAb
283e0 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26  outToChange(p, &
283f0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a  aMem[pOp->p3]);.
28400 20 20 20 20 20 20 61 4d 65 6d 5b 70 4f 70 2d 3e        aMem[pOp->
28410 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68 61 6e  p3].u.i += nChan
28420 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ge;.    }.  }.  
28430 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
28440 6f 64 65 3a 20 52 65 73 65 74 53 6f 72 74 65 72  ode: ResetSorter
28450 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
28460 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e  * Delete all con
28470 74 65 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 65  tents from the e
28480 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 6f  phemeral table o
28490 72 20 73 6f 72 74 65 72 0a 2a 2a 20 74 68 61 74  r sorter.** that
284a0 20 69 73 20 6f 70 65 6e 20 6f 6e 20 63 75 72 73   is open on curs
284b0 6f 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  or P1..**.** Thi
284c0 73 20 6f 70 63 6f 64 65 20 6f 6e 6c 79 20 77 6f  s opcode only wo
284d0 72 6b 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20  rks for cursors 
284e0 75 73 65 64 20 66 6f 72 20 73 6f 72 74 69 6e 67  used for sorting
284f0 20 61 6e 64 0a 2a 2a 20 6f 70 65 6e 65 64 20 77   and.** opened w
28500 69 74 68 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d  ith OP_OpenEphem
28510 65 72 61 6c 20 6f 72 20 4f 50 5f 53 6f 72 74 65  eral or OP_Sorte
28520 72 4f 70 65 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  rOpen..*/.case O
28530 50 5f 52 65 73 65 74 53 6f 72 74 65 72 3a 20 7b  P_ResetSorter: {
28540 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
28550 43 3b 0a 20 0a 20 20 61 73 73 65 72 74 28 20 70  C;. .  assert( p
28560 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
28570 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
28580 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
28590 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
285a0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
285b0 20 20 69 66 28 20 70 43 2d 3e 70 53 6f 72 74 65    if( pC->pSorte
285c0 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  r ){.    sqlite3
285d0 56 64 62 65 53 6f 72 74 65 72 52 65 73 65 74 28  VdbeSorterReset(
285e0 64 62 2c 20 70 43 2d 3e 70 53 6f 72 74 65 72 29  db, pC->pSorter)
285f0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
28600 73 73 65 72 74 28 20 70 43 2d 3e 69 73 45 70 68  ssert( pC->isEph
28610 65 6d 65 72 61 6c 20 29 3b 0a 20 20 20 20 72 63  emeral );.    rc
28620 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
28630 6c 65 61 72 54 61 62 6c 65 4f 66 43 75 72 73 6f  learTableOfCurso
28640 72 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a  r(pC->pCursor);.
28650 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
28660 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74  /* Opcode: Creat
28670 65 54 61 62 6c 65 20 50 31 20 50 32 20 2a 20 2a  eTable P1 P2 * *
28680 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
28690 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50  r[P2]=root iDb=P
286a0 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65  1.**.** Allocate
286b0 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20   a new table in 
286c0 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
286d0 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20  e file if P1==0 
286e0 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78  or in the.** aux
286f0 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20  iliary database 
28700 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72  file if P1==1 or
28710 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20   in an attached 
28720 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50  database if.** P
28730 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65 20  1>1.  Write the 
28740 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
28750 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c   of the new tabl
28760 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74  e into.** regist
28770 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20  er P2.**.** The 
28780 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
28790 65 6e 20 61 20 74 61 62 6c 65 20 61 6e 64 20 61  en a table and a
287a0 6e 20 69 6e 64 65 78 20 69 73 20 74 68 69 73 3a  n index is this:
287b0 20 20 41 20 74 61 62 6c 65 20 6d 75 73 74 0a 2a    A table must.*
287c0 2a 20 68 61 76 65 20 61 20 34 2d 62 79 74 65 20  * have a 4-byte 
287d0 69 6e 74 65 67 65 72 20 6b 65 79 20 61 6e 64 20  integer key and 
287e0 63 61 6e 20 68 61 76 65 20 61 72 62 69 74 72 61  can have arbitra
287f0 72 79 20 64 61 74 61 2e 20 20 41 6e 20 69 6e 64  ry data.  An ind
28800 65 78 0a 2a 2a 20 68 61 73 20 61 6e 20 61 72 62  ex.** has an arb
28810 69 74 72 61 72 79 20 6b 65 79 20 62 75 74 20 6e  itrary key but n
28820 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65  o data..**.** Se
28830 65 20 61 6c 73 6f 3a 20 43 72 65 61 74 65 49 6e  e also: CreateIn
28840 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  dex.*/./* Opcode
28850 3a 20 43 72 65 61 74 65 49 6e 64 65 78 20 50 31  : CreateIndex P1
28860 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
28870 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f  opsis: r[P2]=roo
28880 74 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41  t iDb=P1.**.** A
28890 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 69 6e  llocate a new in
288a0 64 65 78 20 69 6e 20 74 68 65 20 6d 61 69 6e 20  dex in the main 
288b0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
288c0 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65   P1==0 or in the
288d0 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61  .** auxiliary da
288e0 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
288f0 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74  1==1 or in an at
28900 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20  tached database 
28910 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69  if.** P1>1.  Wri
28920 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  te the root page
28930 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e   number of the n
28940 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a  ew table into.**
28950 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
28960 0a 2a 2a 20 53 65 65 20 64 6f 63 75 6d 65 6e 74  .** See document
28970 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65 61  ation on OP_Crea
28980 74 65 54 61 62 6c 65 20 66 6f 72 20 61 64 64 69  teTable for addi
28990 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
289a0 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  on..*/.case OP_C
289b0 72 65 61 74 65 49 6e 64 65 78 3a 20 20 20 20 20  reateIndex:     
289c0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
289d0 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 63 61 73  rerelease */.cas
289e0 65 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65  e OP_CreateTable
289f0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  : {          /* 
28a00 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
28a10 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20  */.  int pgno;. 
28a20 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20 44 62   int flags;.  Db
28a30 20 2a 70 44 62 3b 0a 0a 20 20 70 67 6e 6f 20 3d   *pDb;..  pgno =
28a40 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   0;.  assert( pO
28a50 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
28a60 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
28a70 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
28a80 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
28a90 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20  , pOp->p1) );.  
28aa0 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
28ab0 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20  nly==0 );.  pDb 
28ac0 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  = &db->aDb[pOp->
28ad0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
28ae0 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20  Db->pBt!=0 );.  
28af0 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
28b00 3d 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20  =OP_CreateTable 
28b10 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61 67 73 20  ){.    /* flags 
28b20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 20  = BTREE_INTKEY; 
28b30 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42  */.    flags = B
28b40 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20 20 7d  TREE_INTKEY;.  }
28b50 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67 73 20  else{.    flags 
28b60 3d 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 3b  = BTREE_BLOBKEY;
28b70 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
28b80 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61  te3BtreeCreateTa
28b90 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20 26 70  ble(pDb->pBt, &p
28ba0 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a 20 20 70  gno, flags);.  p
28bb0 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b  Out->u.i = pgno;
28bc0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
28bd0 4f 70 63 6f 64 65 3a 20 50 61 72 73 65 53 63 68  Opcode: ParseSch
28be0 65 6d 61 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ema P1 * * P4 *.
28bf0 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e 64 20 70  **.** Read and p
28c00 61 72 73 65 20 61 6c 6c 20 65 6e 74 72 69 65 73  arse all entries
28c10 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54 45   from the SQLITE
28c20 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20 6f 66  _MASTER table of
28c30 20 64 61 74 61 62 61 73 65 20 50 31 0a 2a 2a 20   database P1.** 
28c40 74 68 61 74 20 6d 61 74 63 68 20 74 68 65 20 57  that match the W
28c50 48 45 52 45 20 63 6c 61 75 73 65 20 50 34 2e 20  HERE clause P4. 
28c60 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
28c70 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 70  de invokes the p
28c80 61 72 73 65 72 20 74 6f 20 63 72 65 61 74 65 20  arser to create 
28c90 61 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61  a new virtual ma
28ca0 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72  chine,.** then r
28cb0 75 6e 73 20 74 68 65 20 6e 65 77 20 76 69 72 74  uns the new virt
28cc0 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 74  ual machine.  It
28cd0 20 69 73 20 74 68 75 73 20 61 20 72 65 2d 65 6e   is thus a re-en
28ce0 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f  trant opcode..*/
28cf0 0a 63 61 73 65 20 4f 50 5f 50 61 72 73 65 53 63  .case OP_ParseSc
28d00 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20 69 44  hema: {.  int iD
28d10 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  b;.  const char 
28d20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68 61 72  *zMaster;.  char
28d30 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74 44 61   *zSql;.  InitDa
28d40 74 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20  ta initData;..  
28d50 2f 2a 20 41 6e 79 20 70 72 65 70 61 72 65 64 20  /* Any prepared 
28d60 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 69  statement that i
28d70 6e 76 6f 6b 65 73 20 74 68 69 73 20 6f 70 63 6f  nvokes this opco
28d80 64 65 20 77 69 6c 6c 20 68 6f 6c 64 20 6d 75 74  de will hold mut
28d90 65 78 65 73 0a 20 20 2a 2a 20 6f 6e 20 65 76 65  exes.  ** on eve
28da0 72 79 20 62 74 72 65 65 2e 20 20 54 68 69 73 20  ry btree.  This 
28db0 69 73 20 61 20 70 72 65 72 65 71 75 69 73 69 74  is a prerequisit
28dc0 65 20 66 6f 72 20 69 6e 76 6f 6b 69 6e 67 20 0a  e for invoking .
28dd0 20 20 2a 2a 20 73 71 6c 69 74 65 33 49 6e 69 74    ** sqlite3Init
28de0 43 61 6c 6c 62 61 63 6b 28 29 2e 0a 20 20 2a 2f  Callback()..  */
28df0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
28e00 45 42 55 47 0a 20 20 66 6f 72 28 69 44 62 3d 30  EBUG.  for(iDb=0
28e10 3b 20 69 44 62 3c 64 62 2d 3e 6e 44 62 3b 20 69  ; iDb<db->nDb; i
28e20 44 62 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72  Db++){.    asser
28e30 74 28 20 69 44 62 3d 3d 31 20 7c 7c 20 73 71 6c  t( iDb==1 || sql
28e40 69 74 65 33 42 74 72 65 65 48 6f 6c 64 73 4d 75  ite3BtreeHoldsMu
28e50 74 65 78 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d  tex(db->aDb[iDb]
28e60 2e 70 42 74 29 20 29 3b 0a 20 20 7d 0a 23 65 6e  .pBt) );.  }.#en
28e70 64 69 66 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70  dif..  iDb = pOp
28e80 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p1;.  assert( 
28e90 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62  iDb>=0 && iDb<db
28ea0 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
28eb0 74 28 20 44 62 48 61 73 50 72 6f 70 65 72 74 79  t( DbHasProperty
28ec0 28 64 62 2c 20 69 44 62 2c 20 44 42 5f 53 63 68  (db, iDb, DB_Sch
28ed0 65 6d 61 4c 6f 61 64 65 64 29 20 29 3b 0a 20 20  emaLoaded) );.  
28ee0 2f 2a 20 55 73 65 64 20 74 6f 20 62 65 20 61 20  /* Used to be a 
28ef0 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 2a 2f 20 7b  conditional */ {
28f00 0a 20 20 20 20 7a 4d 61 73 74 65 72 20 3d 20 53  .    zMaster = S
28f10 43 48 45 4d 41 5f 54 41 42 4c 45 28 69 44 62 29  CHEMA_TABLE(iDb)
28f20 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 64  ;.    initData.d
28f30 62 20 3d 20 64 62 3b 0a 20 20 20 20 69 6e 69 74  b = db;.    init
28f40 44 61 74 61 2e 69 44 62 20 3d 20 70 4f 70 2d 3e  Data.iDb = pOp->
28f50 70 31 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61  p1;.    initData
28f60 2e 70 7a 45 72 72 4d 73 67 20 3d 20 26 70 2d 3e  .pzErrMsg = &p->
28f70 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 7a 53 71  zErrMsg;.    zSq
28f80 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e  l = sqlite3MPrin
28f90 74 66 28 64 62 2c 0a 20 20 20 20 20 20 20 22 53  tf(db,.       "S
28fa0 45 4c 45 43 54 20 6e 61 6d 65 2c 20 72 6f 6f 74  ELECT name, root
28fb0 70 61 67 65 2c 20 73 71 6c 20 46 52 4f 4d 20 27  page, sql FROM '
28fc0 25 71 27 2e 25 73 20 57 48 45 52 45 20 25 73 20  %q'.%s WHERE %s 
28fd0 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 22 2c  ORDER BY rowid",
28fe0 0a 20 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b  .       db->aDb[
28ff0 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d 61 73  iDb].zName, zMas
29000 74 65 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  ter, pOp->p4.z);
29010 0a 20 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30  .    if( zSql==0
29020 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
29030 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20  QLITE_NOMEM;.   
29040 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73   }else{.      as
29050 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62  sert( db->init.b
29060 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  usy==0 );.      
29070 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20  db->init.busy = 
29080 31 3b 0a 20 20 20 20 20 20 69 6e 69 74 44 61 74  1;.      initDat
29090 61 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  a.rc = SQLITE_OK
290a0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
290b0 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65  !db->mallocFaile
290c0 64 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  d );.      rc = 
290d0 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c  sqlite3_exec(db,
290e0 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33 49 6e   zSql, sqlite3In
290f0 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69  itCallback, &ini
29100 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 20  tData, 0);.     
29110 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
29120 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69 74 44 61  OK ) rc = initDa
29130 74 61 2e 72 63 3b 0a 20 20 20 20 20 20 73 71 6c  ta.rc;.      sql
29140 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a  ite3DbFree(db, z
29150 53 71 6c 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  Sql);.      db->
29160 69 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20  init.busy = 0;. 
29170 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72     }.  }.  if( r
29180 63 20 29 20 73 71 6c 69 74 65 33 52 65 73 65 74  c ) sqlite3Reset
29190 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e  AllSchemasOfConn
291a0 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 69 66  ection(db);.  if
291b0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d  ( rc==SQLITE_NOM
291c0 45 4d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e  EM ){.    goto n
291d0 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 62 72 65  o_mem;.  }.  bre
291e0 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20 21 64 65  ak;  .}..#if !de
291f0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
29200 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a 20 4f 70  T_ANALYZE)./* Op
29210 63 6f 64 65 3a 20 4c 6f 61 64 41 6e 61 6c 79 73  code: LoadAnalys
29220 69 73 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  is P1 * * * *.**
29230 0a 2a 2a 20 52 65 61 64 20 74 68 65 20 73 71 6c  .** Read the sql
29240 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20  ite_stat1 table 
29250 66 6f 72 20 64 61 74 61 62 61 73 65 20 50 31 20  for database P1 
29260 61 6e 64 20 6c 6f 61 64 20 74 68 65 20 63 6f 6e  and load the con
29270 74 65 6e 74 0a 2a 2a 20 6f 66 20 74 68 61 74 20  tent.** of that 
29280 74 61 62 6c 65 20 69 6e 74 6f 20 74 68 65 20 69  table into the i
29290 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 20 68 61  nternal index ha
292a0 73 68 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20  sh table.  This 
292b0 77 69 6c 6c 20 63 61 75 73 65 0a 2a 2a 20 74 68  will cause.** th
292c0 65 20 61 6e 61 6c 79 73 69 73 20 74 6f 20 62 65  e analysis to be
292d0 20 75 73 65 64 20 77 68 65 6e 20 70 72 65 70 61   used when prepa
292e0 72 69 6e 67 20 61 6c 6c 20 73 75 62 73 65 71 75  ring all subsequ
292f0 65 6e 74 20 71 75 65 72 69 65 73 2e 0a 2a 2f 0a  ent queries..*/.
29300 63 61 73 65 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c  case OP_LoadAnal
29310 79 73 69 73 3a 20 7b 0a 20 20 61 73 73 65 72 74  ysis: {.  assert
29320 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
29330 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
29340 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
29350 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 64 62  3AnalysisLoad(db
29360 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 62 72  , pOp->p1);.  br
29370 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69 66 20  eak;  .}.#endif 
29380 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  /* !defined(SQLI
29390 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29  TE_OMIT_ANALYZE)
293a0 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
293b0 44 72 6f 70 54 61 62 6c 65 20 50 31 20 2a 20 2a  DropTable P1 * *
293c0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f   P4 *.**.** Remo
293d0 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ve the internal 
293e0 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61  (in-memory) data
293f0 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74   structures that
29400 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65   describe.** the
29410 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 50 34 20   table named P4 
29420 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
29430 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20   This is called 
29440 61 66 74 65 72 20 61 20 74 61 62 6c 65 0a 2a 2a  after a table.**
29450 20 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d   is dropped from
29460 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65   disk (using the
29470 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29   Destroy opcode)
29480 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
29490 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e  p .** the intern
294a0 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  al representatio
294b0 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65  n of the.** sche
294c0 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69  ma consistent wi
294d0 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69  th what is on di
294e0 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  sk..*/.case OP_D
294f0 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20 73 71  ropTable: {.  sq
29500 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
29510 6c 65 74 65 54 61 62 6c 65 28 64 62 2c 20 70 4f  leteTable(db, pO
29520 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
29530 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
29540 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49 6e  * Opcode: DropIn
29550 64 65 78 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  dex P1 * * P4 *.
29560 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65  **.** Remove the
29570 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65   internal (in-me
29580 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63  mory) data struc
29590 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72  tures that descr
295a0 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78  ibe.** the index
295b0 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74   named P4 in dat
295c0 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20  abase P1.  This 
295d0 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20  is called after 
295e0 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20 64  an index.** is d
295f0 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b  ropped from disk
29600 20 28 75 73 69 6e 67 20 74 68 65 20 44 65 73 74   (using the Dest
29610 72 6f 79 20 6f 70 63 6f 64 65 29 0a 2a 2a 20 69  roy opcode).** i
29620 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20  n order to keep 
29630 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70  the internal rep
29640 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
29650 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e  he.** schema con
29660 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61  sistent with wha
29670 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f  t is on disk..*/
29680 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 49 6e 64  .case OP_DropInd
29690 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55  ex: {.  sqlite3U
296a0 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e  nlinkAndDeleteIn
296b0 64 65 78 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  dex(db, pOp->p1,
296c0 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62   pOp->p4.z);.  b
296d0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
296e0 64 65 3a 20 44 72 6f 70 54 72 69 67 67 65 72 20  de: DropTrigger 
296f0 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
29700 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74  * Remove the int
29710 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79  ernal (in-memory
29720 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  ) data structure
29730 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a  s that describe.
29740 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72 20 6e  ** the trigger n
29750 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62  amed P4 in datab
29760 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73  ase P1.  This is
29770 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20   called after a 
29780 74 72 69 67 67 65 72 0a 2a 2a 20 69 73 20 64 72  trigger.** is dr
29790 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20  opped from disk 
297a0 28 75 73 69 6e 67 20 74 68 65 20 44 65 73 74 72  (using the Destr
297b0 6f 79 20 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72  oy opcode) in or
297c0 64 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20  der to keep .** 
297d0 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70  the internal rep
297e0 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
297f0 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e  he.** schema con
29800 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61  sistent with wha
29810 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f  t is on disk..*/
29820 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 72 69  .case OP_DropTri
29830 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65  gger: {.  sqlite
29840 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
29850 54 72 69 67 67 65 72 28 64 62 2c 20 70 4f 70 2d  Trigger(db, pOp-
29860 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  >p1, pOp->p4.z);
29870 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69  .  break;.}...#i
29880 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
29890 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  T_INTEGRITY_CHEC
298a0 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74  K./* Opcode: Int
298b0 65 67 72 69 74 79 43 6b 20 50 31 20 50 32 20 50  egrityCk P1 P2 P
298c0 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20  3 * P5.**.** Do 
298d0 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66 20 74  an analysis of t
298e0 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  he currently ope
298f0 6e 20 64 61 74 61 62 61 73 65 2e 20 20 53 74 6f  n database.  Sto
29900 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65  re in.** registe
29910 72 20 50 31 20 74 68 65 20 74 65 78 74 20 6f 66  r P1 the text of
29920 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
29930 65 20 64 65 73 63 72 69 62 69 6e 67 20 61 6e 79  e describing any
29940 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66   problems..** If
29950 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61 72 65   no problems are
29960 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20 61 20   found, store a 
29970 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73 74 65 72  NULL in register
29980 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72   P1..**.** The r
29990 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61  egister P3 conta
299a0 69 6e 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  ins the maximum 
299b0 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65  number of allowe
299c0 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74 20  d errors..** At 
299d0 6d 6f 73 74 20 72 65 67 28 50 33 29 20 65 72 72  most reg(P3) err
299e0 6f 72 73 20 77 69 6c 6c 20 62 65 20 72 65 70 6f  ors will be repo
299f0 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65  rted..** In othe
29a00 72 20 77 6f 72 64 73 2c 20 74 68 65 20 61 6e 61  r words, the ana
29a10 6c 79 73 69 73 20 73 74 6f 70 73 20 61 73 20 73  lysis stops as s
29a20 6f 6f 6e 20 61 73 20 72 65 67 28 50 31 29 20 65  oon as reg(P1) e
29a30 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73 65  rrors are .** se
29a40 65 6e 2e 20 20 52 65 67 28 50 31 29 20 69 73 20  en.  Reg(P1) is 
29a50 75 70 64 61 74 65 64 20 77 69 74 68 20 74 68 65  updated with the
29a60 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   number of error
29a70 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a  s remaining..**.
29a80 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67 65  ** The root page
29a90 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20   numbers of all 
29aa0 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64 61  tables in the da
29ab0 74 61 62 61 73 65 20 61 72 65 20 69 6e 74 65 67  tabase are integ
29ac0 65 72 0a 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20  er.** stored in 
29ad0 72 65 67 28 50 31 29 2c 20 72 65 67 28 50 31 2b  reg(P1), reg(P1+
29ae0 31 29 2c 20 72 65 67 28 50 31 2b 32 29 2c 20 2e  1), reg(P1+2), .
29af0 2e 2e 2e 20 20 54 68 65 72 65 20 61 72 65 20 50  ...  There are P
29b00 32 20 74 61 62 6c 65 73 0a 2a 2a 20 74 6f 74 61  2 tables.** tota
29b10 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  l..**.** If P5 i
29b20 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 20  s not zero, the 
29b30 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 6f 6e  check is done on
29b40 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64   the auxiliary d
29b50 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 2c  atabase.** file,
29b60 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20 64 61   not the main da
29b70 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a  tabase file..**.
29b80 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
29b90 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d  s used to implem
29ba0 65 6e 74 20 74 68 65 20 69 6e 74 65 67 72 69 74  ent the integrit
29bb0 79 5f 63 68 65 63 6b 20 70 72 61 67 6d 61 2e 0a  y_check pragma..
29bc0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67  */.case OP_Integ
29bd0 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e 74 20  rityCk: {.  int 
29be0 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20 4e  nRoot;      /* N
29bf0 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20  umber of tables 
29c00 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75 6d 62  to check.  (Numb
29c10 65 72 20 6f 66 20 72 6f 6f 74 20 70 61 67 65 73  er of root pages
29c20 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 52 6f  .) */.  int *aRo
29c30 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79  ot;     /* Array
29c40 20 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e 75 6d   of rootpage num
29c50 62 65 72 73 20 66 6f 72 20 74 61 62 6c 65 73 20  bers for tables 
29c60 74 6f 20 62 65 20 63 68 65 63 6b 65 64 20 2a 2f  to be checked */
29c70 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20  .  int j;       
29c80 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
29c90 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  er */.  int nErr
29ca0 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ;       /* Numbe
29cb0 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 70 6f  r of errors repo
29cc0 72 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  rted */.  char *
29cd0 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78  z;        /* Tex
29ce0 74 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20 72  t of the error r
29cf0 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a  eport */.  Mem *
29d00 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20 52 65  pnErr;     /* Re
29d10 67 69 73 74 65 72 20 6b 65 65 70 69 6e 67 20 74  gister keeping t
29d20 72 61 63 6b 20 6f 66 20 65 72 72 6f 72 73 20 72  rack of errors r
29d30 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 0a 20 20 61  emaining */..  a
29d40 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
29d50 64 65 72 20 29 3b 0a 20 20 6e 52 6f 6f 74 20 3d  der );.  nRoot =
29d60 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65   pOp->p2;.  asse
29d70 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a 20  rt( nRoot>0 );. 
29d80 20 61 52 6f 6f 74 20 3d 20 73 71 6c 69 74 65 33   aRoot = sqlite3
29d90 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20  DbMallocRaw(db, 
29da0 73 69 7a 65 6f 66 28 69 6e 74 29 2a 28 6e 52 6f  sizeof(int)*(nRo
29db0 6f 74 2b 31 29 20 29 3b 0a 20 20 69 66 28 20 61  ot+1) );.  if( a
29dc0 52 6f 6f 74 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  Root==0 ) goto n
29dd0 6f 5f 6d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28  o_mem;.  assert(
29de0 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
29df0 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p3<=(p->nMem-
29e00 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
29e10 20 70 6e 45 72 72 20 3d 20 26 61 4d 65 6d 5b 70   pnErr = &aMem[p
29e20 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
29e30 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73  t( (pnErr->flags
29e40 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
29e50 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45  ;.  assert( (pnE
29e60 72 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  rr->flags & (MEM
29e70 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d  _Str|MEM_Blob))=
29e80 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26  =0 );.  pIn1 = &
29e90 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
29ea0 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f   for(j=0; j<nRoo
29eb0 74 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 61 52 6f  t; j++){.    aRo
29ec0 6f 74 5b 6a 5d 20 3d 20 28 69 6e 74 29 73 71 6c  ot[j] = (int)sql
29ed0 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
29ee0 28 26 70 49 6e 31 5b 6a 5d 29 3b 0a 20 20 7d 0a  (&pIn1[j]);.  }.
29ef0 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 30 3b 0a    aRoot[j] = 0;.
29f00 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
29f10 35 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  5<db->nDb );.  a
29f20 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
29f30 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
29f40 70 4f 70 2d 3e 70 35 29 20 29 3b 0a 20 20 7a 20  pOp->p5) );.  z 
29f50 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
29f60 74 65 67 72 69 74 79 43 68 65 63 6b 28 64 62 2d  tegrityCheck(db-
29f70 3e 61 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42  >aDb[pOp->p5].pB
29f80 74 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f 6f 74 2c  t, aRoot, nRoot,
29f90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29fb0 20 20 28 69 6e 74 29 70 6e 45 72 72 2d 3e 75 2e    (int)pnErr->u.
29fc0 69 2c 20 26 6e 45 72 72 29 3b 0a 20 20 73 71 6c  i, &nErr);.  sql
29fd0 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 61  ite3DbFree(db, a
29fe0 52 6f 6f 74 29 3b 0a 20 20 70 6e 45 72 72 2d 3e  Root);.  pnErr->
29ff0 75 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a 20 20 73  u.i -= nErr;.  s
2a000 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
2a010 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 69 66  Null(pIn1);.  if
2a020 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20 20 20  ( nErr==0 ){.   
2a030 20 61 73 73 65 72 74 28 20 7a 3d 3d 30 20 29 3b   assert( z==0 );
2a040 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 3d 3d  .  }else if( z==
2a050 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  0 ){.    goto no
2a060 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  _mem;.  }else{. 
2a070 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2a080 6d 53 65 74 53 74 72 28 70 49 6e 31 2c 20 7a 2c  mSetStr(pIn1, z,
2a090 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38   -1, SQLITE_UTF8
2a0a0 2c 20 73 71 6c 69 74 65 33 5f 66 72 65 65 29 3b  , sqlite3_free);
2a0b0 0a 20 20 7d 0a 20 20 55 50 44 41 54 45 5f 4d 41  .  }.  UPDATE_MA
2a0c0 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29  X_BLOBSIZE(pIn1)
2a0d0 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43  ;.  sqlite3VdbeC
2a0e0 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 49  hangeEncoding(pI
2a0f0 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  n1, encoding);. 
2a100 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2a110 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2a120 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 20  INTEGRITY_CHECK 
2a130 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  */../* Opcode: R
2a140 6f 77 53 65 74 41 64 64 20 50 31 20 50 32 20 2a  owSetAdd P1 P2 *
2a150 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2a160 3a 20 20 72 6f 77 73 65 74 28 50 31 29 3d 72 5b  :  rowset(P1)=r[
2a170 50 32 5d 0a 2a 2a 0a 2a 2a 20 49 6e 73 65 72 74  P2].**.** Insert
2a180 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
2a190 75 65 20 68 65 6c 64 20 62 79 20 72 65 67 69 73  ue held by regis
2a1a0 74 65 72 20 50 32 20 69 6e 74 6f 20 61 20 62 6f  ter P2 into a bo
2a1b0 6f 6c 65 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 68  olean index.** h
2a1c0 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  eld in register 
2a1d0 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 61 73 73  P1..**.** An ass
2a1e0 65 72 74 69 6f 6e 20 66 61 69 6c 73 20 69 66 20  ertion fails if 
2a1f0 50 32 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74  P2 is not an int
2a200 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  eger..*/.case OP
2a210 5f 52 6f 77 53 65 74 41 64 64 3a 20 7b 20 20 20  _RowSetAdd: {   
2a220 20 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e 32 20      /* in1, in2 
2a230 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
2a240 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
2a250 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
2a260 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28  p2];.  assert( (
2a270 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
2a280 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 69  M_Int)!=0 );.  i
2a290 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
2a2a0 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
2a2b0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
2a2c0 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28  dbeMemSetRowSet(
2a2d0 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28 20 28  pIn1);.    if( (
2a2e0 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
2a2f0 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67  M_RowSet)==0 ) g
2a300 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
2a310 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49    sqlite3RowSetI
2a320 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e 70 52  nsert(pIn1->u.pR
2a330 6f 77 53 65 74 2c 20 70 49 6e 32 2d 3e 75 2e 69  owSet, pIn2->u.i
2a340 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
2a350 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74  * Opcode: RowSet
2a360 52 65 61 64 20 50 31 20 50 32 20 50 33 20 2a 20  Read P1 P2 P3 * 
2a370 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
2a380 72 5b 50 33 5d 3d 72 6f 77 73 65 74 28 50 31 29  r[P3]=rowset(P1)
2a390 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61 63 74 20 74  .**.** Extract t
2a3a0 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75  he smallest valu
2a3b0 65 20 66 72 6f 6d 20 62 6f 6f 6c 65 61 6e 20 69  e from boolean i
2a3c0 6e 64 65 78 20 50 31 20 61 6e 64 20 70 75 74 20  ndex P1 and put 
2a3d0 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 0a  that value into.
2a3e0 2a 2a 20 72 65 67 69 73 74 65 72 20 50 33 2e 20  ** register P3. 
2a3f0 20 4f 72 2c 20 69 66 20 62 6f 6f 6c 65 61 6e 20   Or, if boolean 
2a400 69 6e 64 65 78 20 50 31 20 69 73 20 69 6e 69 74  index P1 is init
2a410 69 61 6c 6c 79 20 65 6d 70 74 79 2c 20 6c 65 61  ially empty, lea
2a420 76 65 20 50 33 0a 2a 2a 20 75 6e 63 68 61 6e 67  ve P3.** unchang
2a430 65 64 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 69  ed and jump to i
2a440 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a  nstruction P2..*
2a450 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74  /.case OP_RowSet
2a460 52 65 61 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a  Read: {       /*
2a470 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 6f 75 74 33   jump, in1, out3
2a480 20 2a 2f 0a 20 20 69 36 34 20 76 61 6c 3b 0a 0a   */.  i64 val;..
2a490 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
2a4a0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28  Op->p1];.  if( (
2a4b0 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
2a4c0 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 0a 20 20  M_RowSet)==0 .  
2a4d0 20 7c 7c 20 73 71 6c 69 74 65 33 52 6f 77 53 65   || sqlite3RowSe
2a4e0 74 4e 65 78 74 28 70 49 6e 31 2d 3e 75 2e 70 52  tNext(pIn1->u.pR
2a4f0 6f 77 53 65 74 2c 20 26 76 61 6c 29 3d 3d 30 0a  owSet, &val)==0.
2a500 20 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20    ){.    /* The 
2a510 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 69 73  boolean index is
2a520 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20 73 71   empty */.    sq
2a530 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
2a540 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 20 20 70  ull(pIn1);.    p
2a550 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
2a560 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
2a570 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 7d 65 6c  aken(1,2);.  }el
2a580 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76 61 6c  se{.    /* A val
2a590 75 65 20 77 61 73 20 70 75 6c 6c 65 64 20 66 72  ue was pulled fr
2a5a0 6f 6d 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a  om the index */.
2a5b0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2a5c0 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d  emSetInt64(&aMem
2a5d0 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c 29 3b  [pOp->p3], val);
2a5e0 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
2a5f0 61 6b 65 6e 28 30 2c 32 29 3b 0a 20 20 7d 0a 20  aken(0,2);.  }. 
2a600 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f   goto check_for_
2a610 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a  interrupt;.}../*
2a620 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 54   Opcode: RowSetT
2a630 65 73 74 20 50 31 20 50 32 20 50 33 20 50 34 0a  est P1 P2 P3 P4.
2a640 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
2a650 72 5b 50 33 5d 20 69 6e 20 72 6f 77 73 65 74 28  r[P3] in rowset(
2a660 50 31 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  P1) goto P2.**.*
2a670 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 69 73  * Register P3 is
2a680 20 61 73 73 75 6d 65 64 20 74 6f 20 68 6f 6c 64   assumed to hold
2a690 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65   a 64-bit intege
2a6a0 72 20 76 61 6c 75 65 2e 20 49 66 20 72 65 67 69  r value. If regi
2a6b0 73 74 65 72 20 50 31 0a 2a 2a 20 63 6f 6e 74 61  ster P1.** conta
2a6c0 69 6e 73 20 61 20 52 6f 77 53 65 74 20 6f 62 6a  ins a RowSet obj
2a6d0 65 63 74 20 61 6e 64 20 74 68 61 74 20 52 6f 77  ect and that Row
2a6e0 53 65 74 20 6f 62 6a 65 63 74 20 63 6f 6e 74 61  Set object conta
2a6f0 69 6e 73 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  ins.** the value
2a700 20 68 65 6c 64 20 69 6e 20 50 33 2c 20 6a 75 6d   held in P3, jum
2a710 70 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  p to register P2
2a720 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 6e 73  . Otherwise, ins
2a730 65 72 74 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67  ert the.** integ
2a740 65 72 20 69 6e 20 50 33 20 69 6e 74 6f 20 74 68  er in P3 into th
2a750 65 20 52 6f 77 53 65 74 20 61 6e 64 20 63 6f 6e  e RowSet and con
2a760 74 69 6e 75 65 20 6f 6e 20 74 6f 20 74 68 65 0a  tinue on to the.
2a770 2a 2a 20 6e 65 78 74 20 6f 70 63 6f 64 65 2e 0a  ** next opcode..
2a780 2a 2a 0a 2a 2a 20 54 68 65 20 52 6f 77 53 65 74  **.** The RowSet
2a790 20 6f 62 6a 65 63 74 20 69 73 20 6f 70 74 69 6d   object is optim
2a7a0 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63 61 73  ized for the cas
2a7b0 65 20 77 68 65 72 65 20 73 75 63 63 65 73 73 69  e where successi
2a7c0 76 65 20 73 65 74 73 0a 2a 2a 20 6f 66 20 69 6e  ve sets.** of in
2a7d0 74 65 67 65 72 73 2c 20 77 68 65 72 65 20 65 61  tegers, where ea
2a7e0 63 68 20 73 65 74 20 63 6f 6e 74 61 69 6e 73 20  ch set contains 
2a7f0 6e 6f 20 64 75 70 6c 69 63 61 74 65 73 2e 20 45  no duplicates. E
2a800 61 63 68 20 73 65 74 0a 2a 2a 20 6f 66 20 76 61  ach set.** of va
2a810 6c 75 65 73 20 69 73 20 69 64 65 6e 74 69 66 69  lues is identifi
2a820 65 64 20 62 79 20 61 20 75 6e 69 71 75 65 20 50  ed by a unique P
2a830 34 20 76 61 6c 75 65 2e 20 54 68 65 20 66 69 72  4 value. The fir
2a840 73 74 20 73 65 74 0a 2a 2a 20 6d 75 73 74 20 68  st set.** must h
2a850 61 76 65 20 50 34 3d 3d 30 2c 20 74 68 65 20 66  ave P4==0, the f
2a860 69 6e 61 6c 20 73 65 74 20 50 34 3d 2d 31 2e 20  inal set P4=-1. 
2a870 20 50 34 20 6d 75 73 74 20 62 65 20 65 69 74 68   P4 must be eith
2a880 65 72 20 2d 31 20 6f 72 0a 2a 2a 20 6e 6f 6e 2d  er -1 or.** non-
2a890 6e 65 67 61 74 69 76 65 2e 20 20 46 6f 72 20 6e  negative.  For n
2a8a0 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76 61 6c 75  on-negative valu
2a8b0 65 73 20 6f 66 20 50 34 20 6f 6e 6c 79 20 74 68  es of P4 only th
2a8c0 65 20 6c 6f 77 65 72 20 34 0a 2a 2a 20 62 69 74  e lower 4.** bit
2a8d0 73 20 61 72 65 20 73 69 67 6e 69 66 69 63 61 6e  s are significan
2a8e0 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 61 6c  t..**.** This al
2a8f0 6c 6f 77 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f  lows optimizatio
2a900 6e 73 3a 20 28 61 29 20 77 68 65 6e 20 50 34 3d  ns: (a) when P4=
2a910 3d 30 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e  =0 there is no n
2a920 65 65 64 20 74 6f 20 74 65 73 74 0a 2a 2a 20 74  eed to test.** t
2a930 68 65 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74  he rowset object
2a940 20 66 6f 72 20 50 33 2c 20 61 73 20 69 74 20 69   for P3, as it i
2a950 73 20 67 75 61 72 61 6e 74 65 65 64 20 6e 6f 74  s guaranteed not
2a960 20 74 6f 20 63 6f 6e 74 61 69 6e 20 69 74 2c 0a   to contain it,.
2a970 2a 2a 20 28 62 29 20 77 68 65 6e 20 50 34 3d 3d  ** (b) when P4==
2a980 2d 31 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e  -1 there is no n
2a990 65 65 64 20 74 6f 20 69 6e 73 65 72 74 20 74 68  eed to insert th
2a9a0 65 20 76 61 6c 75 65 2c 20 61 73 20 69 74 20 77  e value, as it w
2a9b0 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20 62 65 20  ill.** never be 
2a9c0 74 65 73 74 65 64 20 66 6f 72 2c 20 61 6e 64 20  tested for, and 
2a9d0 28 63 29 20 77 68 65 6e 20 61 20 76 61 6c 75 65  (c) when a value
2a9e0 20 74 68 61 74 20 69 73 20 70 61 72 74 20 6f 66   that is part of
2a9f0 20 73 65 74 20 58 20 69 73 0a 2a 2a 20 69 6e 73   set X is.** ins
2aa00 65 72 74 65 64 2c 20 74 68 65 72 65 20 69 73 20  erted, there is 
2aa10 6e 6f 20 6e 65 65 64 20 74 6f 20 73 65 61 72 63  no need to searc
2aa20 68 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20  h to see if the 
2aa30 73 61 6d 65 20 76 61 6c 75 65 20 77 61 73 0a 2a  same value was.*
2aa40 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 69 6e 73  * previously ins
2aa50 65 72 74 65 64 20 61 73 20 70 61 72 74 20 6f 66  erted as part of
2aa60 20 73 65 74 20 58 20 28 6f 6e 6c 79 20 69 66 20   set X (only if 
2aa70 69 74 20 77 61 73 20 70 72 65 76 69 6f 75 73 6c  it was previousl
2aa80 79 0a 2a 2a 20 69 6e 73 65 72 74 65 64 20 61 73  y.** inserted as
2aa90 20 70 61 72 74 20 6f 66 20 73 6f 6d 65 20 6f 74   part of some ot
2aaa0 68 65 72 20 73 65 74 29 2e 0a 2a 2f 0a 63 61 73  her set)..*/.cas
2aab0 65 20 4f 50 5f 52 6f 77 53 65 74 54 65 73 74 3a  e OP_RowSetTest:
2aac0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
2aad0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
2aae0 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e  in1, in3 */.  in
2aaf0 74 20 69 53 65 74 3b 0a 20 20 69 6e 74 20 65 78  t iSet;.  int ex
2ab00 69 73 74 73 3b 0a 0a 20 20 70 49 6e 31 20 3d 20  ists;..  pIn1 = 
2ab10 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
2ab20 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
2ab30 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 53 65 74 20  Op->p3];.  iSet 
2ab40 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 61  = pOp->p4.i;.  a
2ab50 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61  ssert( pIn3->fla
2ab60 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 0a 20  gs&MEM_Int );.. 
2ab70 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20   /* If there is 
2ab80 61 6e 79 74 68 69 6e 67 20 6f 74 68 65 72 20 74  anything other t
2ab90 68 61 6e 20 61 20 72 6f 77 73 65 74 20 6f 62 6a  han a rowset obj
2aba0 65 63 74 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65  ect in memory ce
2abb0 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20 64 65 6c 65  ll P1,.  ** dele
2abc0 74 65 20 69 74 20 6e 6f 77 20 61 6e 64 20 69 6e  te it now and in
2abd0 69 74 69 61 6c 69 7a 65 20 50 31 20 77 69 74 68  itialize P1 with
2abe0 20 61 6e 20 65 6d 70 74 79 20 72 6f 77 73 65 74   an empty rowset
2abf0 0a 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e  .  */.  if( (pIn
2ac00 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
2ac10 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20  owSet)==0 ){.   
2ac20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2ac30 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a  etRowSet(pIn1);.
2ac40 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66      if( (pIn1->f
2ac50 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
2ac60 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  t)==0 ) goto no_
2ac70 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65  mem;.  }..  asse
2ac80 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
2ac90 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61  =P4_INT32 );.  a
2aca0 73 73 65 72 74 28 20 69 53 65 74 3d 3d 2d 31 20  ssert( iSet==-1 
2acb0 7c 7c 20 69 53 65 74 3e 3d 30 20 29 3b 0a 20 20  || iSet>=0 );.  
2acc0 69 66 28 20 69 53 65 74 20 29 7b 0a 20 20 20 20  if( iSet ){.    
2acd0 65 78 69 73 74 73 20 3d 20 73 71 6c 69 74 65 33  exists = sqlite3
2ace0 52 6f 77 53 65 74 54 65 73 74 28 70 49 6e 31 2d  RowSetTest(pIn1-
2acf0 3e 75 2e 70 52 6f 77 53 65 74 2c 20 69 53 65 74  >u.pRowSet, iSet
2ad00 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20  , pIn3->u.i);.  
2ad10 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
2ad20 6e 28 65 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a  n(exists!=0,2);.
2ad30 20 20 20 20 69 66 28 20 65 78 69 73 74 73 20 29      if( exists )
2ad40 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70  {.      pc = pOp
2ad50 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20  ->p2 - 1;.      
2ad60 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d  break;.    }.  }
2ad70 0a 20 20 69 66 28 20 69 53 65 74 3e 3d 30 20 29  .  if( iSet>=0 )
2ad80 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 6f 77  {.    sqlite3Row
2ad90 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e  SetInsert(pIn1->
2ada0 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 33 2d  u.pRowSet, pIn3-
2adb0 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72 65  >u.i);.  }.  bre
2adc0 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20  ak;.}...#ifndef 
2add0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
2ade0 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  GER../* Opcode: 
2adf0 50 72 6f 67 72 61 6d 20 50 31 20 50 32 20 50 33  Program P1 P2 P3
2ae00 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65   P4 P5.**.** Exe
2ae10 63 75 74 65 20 74 68 65 20 74 72 69 67 67 65 72  cute the trigger
2ae20 20 70 72 6f 67 72 61 6d 20 70 61 73 73 65 64 20   program passed 
2ae30 61 73 20 50 34 20 28 74 79 70 65 20 50 34 5f 53  as P4 (type P4_S
2ae40 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a 0a  UBPROGRAM). .**.
2ae50 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 74  ** P1 contains t
2ae60 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68  he address of th
2ae70 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68  e memory cell th
2ae80 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  at contains the 
2ae90 66 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a 2a 2a  first memory .**
2aea0 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72 72 61   cell in an arra
2aeb0 79 20 6f 66 20 76 61 6c 75 65 73 20 75 73 65 64  y of values used
2aec0 20 61 73 20 61 72 67 75 6d 65 6e 74 73 20 74 6f   as arguments to
2aed0 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
2aee0 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61 69 6e  . P2 .** contain
2aef0 73 20 74 68 65 20 61 64 64 72 65 73 73 20 74 6f  s the address to
2af00 20 6a 75 6d 70 20 74 6f 20 69 66 20 74 68 65 20   jump to if the 
2af10 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 72 6f  sub-program thro
2af20 77 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a 2a 2a  ws an IGNORE .**
2af30 20 65 78 63 65 70 74 69 6f 6e 20 75 73 69 6e 67   exception using
2af40 20 74 68 65 20 52 41 49 53 45 28 29 20 66 75 6e   the RAISE() fun
2af50 63 74 69 6f 6e 2e 20 52 65 67 69 73 74 65 72 20  ction. Register 
2af60 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  P3 contains the 
2af70 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66 20 61  address .** of a
2af80 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20   memory cell in 
2af90 74 68 69 73 20 28 74 68 65 20 70 61 72 65 6e 74  this (the parent
2afa0 29 20 56 4d 20 74 68 61 74 20 69 73 20 75 73 65  ) VM that is use
2afb0 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74 68  d to allocate th
2afc0 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72 65 71  e .** memory req
2afd0 75 69 72 65 64 20 62 79 20 74 68 65 20 73 75 62  uired by the sub
2afe0 2d 76 64 62 65 20 61 74 20 72 75 6e 74 69 6d 65  -vdbe at runtime
2aff0 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  ..**.** P4 is a 
2b000 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 56  pointer to the V
2b010 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  M containing the
2b020 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
2b030 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  ..**.** If P5 is
2b040 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
2b050 72 65 63 75 72 73 69 76 65 20 70 72 6f 67 72 61  recursive progra
2b060 6d 20 69 6e 76 6f 63 61 74 69 6f 6e 20 69 73 20  m invocation is 
2b070 65 6e 61 62 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65  enabled..*/.case
2b080 20 4f 50 5f 50 72 6f 67 72 61 6d 3a 20 7b 20 20   OP_Program: {  
2b090 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
2b0a0 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20  .  int nMem;    
2b0b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
2b0c0 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 72  mber of memory r
2b0d0 65 67 69 73 74 65 72 73 20 66 6f 72 20 73 75 62  egisters for sub
2b0e0 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e  -program */.  in
2b0f0 74 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20  t nByte;        
2b100 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f        /* Bytes o
2b110 66 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20  f runtime space 
2b120 72 65 71 75 69 72 65 64 20 66 6f 72 20 73 75 62  required for sub
2b130 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d 65  -program */.  Me
2b140 6d 20 2a 70 52 74 3b 20 20 20 20 20 20 20 20 20  m *pRt;         
2b150 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
2b160 72 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 72 75  r to allocate ru
2b170 6e 74 69 6d 65 20 73 70 61 63 65 20 2a 2f 0a 20  ntime space */. 
2b180 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20   Mem *pMem;     
2b190 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64           /* Used
2b1a0 20 74 6f 20 69 74 65 72 61 74 65 20 74 68 72 6f   to iterate thro
2b1b0 75 67 68 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73  ugh memory cells
2b1c0 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e 64 3b   */.  Mem *pEnd;
2b1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2b1e0 20 4c 61 73 74 20 6d 65 6d 6f 72 79 20 63 65 6c   Last memory cel
2b1f0 6c 20 69 6e 20 6e 65 77 20 61 72 72 61 79 20 2a  l in new array *
2b200 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70  /.  VdbeFrame *p
2b210 46 72 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e  Frame;      /* N
2b220 65 77 20 76 64 62 65 20 66 72 61 6d 65 20 74 6f  ew vdbe frame to
2b230 20 65 78 65 63 75 74 65 20 69 6e 20 2a 2f 0a 20   execute in */. 
2b240 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72   SubProgram *pPr
2b250 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 53 75 62 2d  ogram;   /* Sub-
2b260 70 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63 75  program to execu
2b270 74 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 74 3b  te */.  void *t;
2b280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b290 2f 2a 20 54 6f 6b 65 6e 20 69 64 65 6e 74 69 66  /* Token identif
2b2a0 79 69 6e 67 20 74 72 69 67 67 65 72 20 2a 2f 0a  ying trigger */.
2b2b0 0a 20 20 70 50 72 6f 67 72 61 6d 20 3d 20 70 4f  .  pProgram = pO
2b2c0 70 2d 3e 70 34 2e 70 50 72 6f 67 72 61 6d 3b 0a  p->p4.pProgram;.
2b2d0 20 20 70 52 74 20 3d 20 26 61 4d 65 6d 5b 70 4f    pRt = &aMem[pO
2b2e0 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74  p->p3];.  assert
2b2f0 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3e  ( pProgram->nOp>
2b300 30 20 29 3b 0a 20 20 0a 20 20 2f 2a 20 49 66 20  0 );.  .  /* If 
2b310 74 68 65 20 70 35 20 66 6c 61 67 20 69 73 20 63  the p5 flag is c
2b320 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 63 75 72  lear, then recur
2b330 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20  sive invocation 
2b340 6f 66 20 74 72 69 67 67 65 72 73 20 69 73 20 0a  of triggers is .
2b350 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 20 66 6f    ** disabled fo
2b360 72 20 62 61 63 6b 77 61 72 64 73 20 63 6f 6d 70  r backwards comp
2b370 61 74 69 62 69 6c 69 74 79 20 28 70 35 20 69 73  atibility (p5 is
2b380 20 73 65 74 20 69 66 20 74 68 69 73 20 73 75 62   set if this sub
2b390 2d 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 69 73  -program.  ** is
2b3a0 20 72 65 61 6c 6c 79 20 61 20 74 72 69 67 67 65   really a trigge
2b3b0 72 2c 20 6e 6f 74 20 61 20 66 6f 72 65 69 67 6e  r, not a foreign
2b3c0 20 6b 65 79 20 61 63 74 69 6f 6e 2c 20 61 6e 64   key action, and
2b3d0 20 74 68 65 20 66 6c 61 67 20 73 65 74 0a 20 20   the flag set.  
2b3e0 2a 2a 20 61 6e 64 20 63 6c 65 61 72 65 64 20 62  ** and cleared b
2b3f0 79 20 74 68 65 20 22 50 52 41 47 4d 41 20 72 65  y the "PRAGMA re
2b400 63 75 72 73 69 76 65 5f 74 72 69 67 67 65 72 73  cursive_triggers
2b410 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 63 6c 65  " command is cle
2b420 61 72 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20  ar)..  ** .  ** 
2b430 49 74 20 69 73 20 72 65 63 75 72 73 69 76 65 20  It is recursive 
2b440 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72  invocation of tr
2b450 69 67 67 65 72 73 2c 20 61 74 20 74 68 65 20 53  iggers, at the S
2b460 51 4c 20 6c 65 76 65 6c 2c 20 74 68 61 74 20 69  QL level, that i
2b470 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64  s .  ** disabled
2b480 2e 20 49 6e 20 73 6f 6d 65 20 63 61 73 65 73 20  . In some cases 
2b490 61 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72  a single trigger
2b4a0 20 6d 61 79 20 67 65 6e 65 72 61 74 65 20 6d 6f   may generate mo
2b4b0 72 65 20 74 68 61 6e 20 6f 6e 65 20 0a 20 20 2a  re than one .  *
2b4c0 2a 20 53 75 62 50 72 6f 67 72 61 6d 20 28 69 66  * SubProgram (if
2b4d0 20 74 68 65 20 74 72 69 67 67 65 72 20 6d 61 79   the trigger may
2b4e0 20 62 65 20 65 78 65 63 75 74 65 64 20 77 69 74   be executed wit
2b4f0 68 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  h more than one 
2b500 64 69 66 66 65 72 65 6e 74 20 0a 20 20 2a 2a 20  different .  ** 
2b510 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f  ON CONFLICT algo
2b520 72 69 74 68 6d 29 2e 20 53 75 62 50 72 6f 67 72  rithm). SubProgr
2b530 61 6d 20 73 74 72 75 63 74 75 72 65 73 20 61 73  am structures as
2b540 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 0a  sociated with a.
2b550 20 20 2a 2a 20 73 69 6e 67 6c 65 20 74 72 69 67    ** single trig
2b560 67 65 72 20 61 6c 6c 20 68 61 76 65 20 74 68 65  ger all have the
2b570 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20   same value for 
2b580 74 68 65 20 53 75 62 50 72 6f 67 72 61 6d 2e 74  the SubProgram.t
2b590 6f 6b 65 6e 20 0a 20 20 2a 2a 20 76 61 72 69 61  oken .  ** varia
2b5a0 62 6c 65 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70  ble.  */.  if( p
2b5b0 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 74 20  Op->p5 ){.    t 
2b5c0 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65  = pProgram->toke
2b5d0 6e 3b 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d  n;.    for(pFram
2b5e0 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72  e=p->pFrame; pFr
2b5f0 61 6d 65 20 26 26 20 70 46 72 61 6d 65 2d 3e 74  ame && pFrame->t
2b600 6f 6b 65 6e 21 3d 74 3b 20 70 46 72 61 6d 65 3d  oken!=t; pFrame=
2b610 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29  pFrame->pParent)
2b620 3b 0a 20 20 20 20 69 66 28 20 70 46 72 61 6d 65  ;.    if( pFrame
2b630 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20   ) break;.  }.. 
2b640 20 69 66 28 20 70 2d 3e 6e 46 72 61 6d 65 3e 3d   if( p->nFrame>=
2b650 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
2b660 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45 52 5f  E_LIMIT_TRIGGER_
2b670 44 45 50 54 48 5d 20 29 7b 0a 20 20 20 20 72 63  DEPTH] ){.    rc
2b680 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
2b690 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
2b6a0 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
2b6b0 67 2c 20 64 62 2c 20 22 74 6f 6f 20 6d 61 6e 79  g, db, "too many
2b6c0 20 6c 65 76 65 6c 73 20 6f 66 20 74 72 69 67 67   levels of trigg
2b6d0 65 72 20 72 65 63 75 72 73 69 6f 6e 22 29 3b 0a  er recursion");.
2b6e0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
2b6f0 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 70 52    /* Register pR
2b700 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  t is used to sto
2b710 72 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65  re the memory re
2b720 71 75 69 72 65 64 20 74 6f 20 73 61 76 65 20 74  quired to save t
2b730 68 65 20 73 74 61 74 65 0a 20 20 2a 2a 20 6f 66  he state.  ** of
2b740 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f   the current pro
2b750 67 72 61 6d 2c 20 61 6e 64 20 74 68 65 20 6d 65  gram, and the me
2b760 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 61 74  mory required at
2b770 20 72 75 6e 74 69 6d 65 20 74 6f 20 65 78 65 63   runtime to exec
2b780 75 74 65 0a 20 20 2a 2a 20 74 68 65 20 74 72 69  ute.  ** the tri
2b790 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 20 49 66  gger program. If
2b7a0 20 74 68 69 73 20 74 72 69 67 67 65 72 20 68 61   this trigger ha
2b7b0 73 20 62 65 65 6e 20 66 69 72 65 64 20 62 65 66  s been fired bef
2b7c0 6f 72 65 2c 20 74 68 65 6e 20 70 52 74 20 0a 20  ore, then pRt . 
2b7d0 20 2a 2a 20 69 73 20 61 6c 72 65 61 64 79 20 61   ** is already a
2b7e0 6c 6c 6f 63 61 74 65 64 2e 20 4f 74 68 65 72 77  llocated. Otherw
2b7f0 69 73 65 2c 20 69 74 20 6d 75 73 74 20 62 65 20  ise, it must be 
2b800 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 20 2a 2f  initialized.  */
2b810 0a 20 20 69 66 28 20 28 70 52 74 2d 3e 66 6c 61  .  if( (pRt->fla
2b820 67 73 26 4d 45 4d 5f 46 72 61 6d 65 29 3d 3d 30  gs&MEM_Frame)==0
2b830 20 29 7b 0a 20 20 20 20 2f 2a 20 53 75 62 50 72   ){.    /* SubPr
2b840 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69 73 20 73 65  ogram.nMem is se
2b850 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  t to the number 
2b860 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  of memory cells 
2b870 75 73 65 64 20 62 79 20 74 68 65 20 0a 20 20 20  used by the .   
2b880 20 2a 2a 20 70 72 6f 67 72 61 6d 20 73 74 6f 72   ** program stor
2b890 65 64 20 69 6e 20 53 75 62 50 72 6f 67 72 61 6d  ed in SubProgram
2b8a0 2e 61 4f 70 2e 20 41 73 20 77 65 6c 6c 20 61 73  .aOp. As well as
2b8b0 20 74 68 65 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f   these, one memo
2b8c0 72 79 0a 20 20 20 20 2a 2a 20 63 65 6c 6c 20 69  ry.    ** cell i
2b8d0 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 65  s required for e
2b8e0 61 63 68 20 63 75 72 73 6f 72 20 75 73 65 64 20  ach cursor used 
2b8f0 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20  by the program. 
2b900 53 65 74 20 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a  Set local.    **
2b910 20 76 61 72 69 61 62 6c 65 20 6e 4d 65 6d 20 28   variable nMem (
2b920 61 6e 64 20 6c 61 74 65 72 2c 20 56 64 62 65 46  and later, VdbeF
2b930 72 61 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d 29 20  rame.nChildMem) 
2b940 74 6f 20 74 68 69 73 20 76 61 6c 75 65 2e 0a 20  to this value.. 
2b950 20 20 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d     */.    nMem =
2b960 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20   pProgram->nMem 
2b970 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  + pProgram->nCsr
2b980 3b 0a 20 20 20 20 6e 42 79 74 65 20 3d 20 52 4f  ;.    nByte = RO
2b990 55 4e 44 38 28 73 69 7a 65 6f 66 28 56 64 62 65  UND8(sizeof(Vdbe
2b9a0 46 72 61 6d 65 29 29 0a 20 20 20 20 20 20 20 20  Frame)).        
2b9b0 20 20 20 20 20 20 2b 20 6e 4d 65 6d 20 2a 20 73        + nMem * s
2b9c0 69 7a 65 6f 66 28 4d 65 6d 29 0a 20 20 20 20 20  izeof(Mem).     
2b9d0 20 20 20 20 20 20 20 20 20 2b 20 70 50 72 6f 67           + pProg
2b9e0 72 61 6d 2d 3e 6e 43 73 72 20 2a 20 73 69 7a 65  ram->nCsr * size
2b9f0 6f 66 28 56 64 62 65 43 75 72 73 6f 72 20 2a 29  of(VdbeCursor *)
2ba00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b  .              +
2ba10 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 6e 63 65   pProgram->nOnce
2ba20 20 2a 20 73 69 7a 65 6f 66 28 75 38 29 3b 0a 20   * sizeof(u8);. 
2ba30 20 20 20 70 46 72 61 6d 65 20 3d 20 73 71 6c 69     pFrame = sqli
2ba40 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28  te3DbMallocZero(
2ba50 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20 20  db, nByte);.    
2ba60 69 66 28 20 21 70 46 72 61 6d 65 20 29 7b 0a 20  if( !pFrame ){. 
2ba70 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d       goto no_mem
2ba80 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
2ba90 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
2baa0 65 28 70 52 74 29 3b 0a 20 20 20 20 70 52 74 2d  e(pRt);.    pRt-
2bab0 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 46 72 61  >flags = MEM_Fra
2bac0 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e 75 2e 70  me;.    pRt->u.p
2bad0 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a  Frame = pFrame;.
2bae0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 76 20 3d  .    pFrame->v =
2baf0 20 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e   p;.    pFrame->
2bb00 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d  nChildMem = nMem
2bb10 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43  ;.    pFrame->nC
2bb20 68 69 6c 64 43 73 72 20 3d 20 70 50 72 6f 67 72  hildCsr = pProgr
2bb30 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 70 46  am->nCsr;.    pF
2bb40 72 61 6d 65 2d 3e 70 63 20 3d 20 70 63 3b 0a 20  rame->pc = pc;. 
2bb50 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 20     pFrame->aMem 
2bb60 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70  = p->aMem;.    p
2bb70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d  Frame->nMem = p-
2bb80 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d  >nMem;.    pFram
2bb90 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d 3e 61 70  e->apCsr = p->ap
2bba0 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Csr;.    pFrame-
2bbb0 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d 3e 6e 43  >nCursor = p->nC
2bbc0 75 72 73 6f 72 3b 0a 20 20 20 20 70 46 72 61 6d  ursor;.    pFram
2bbd0 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b  e->aOp = p->aOp;
2bbe0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 70  .    pFrame->nOp
2bbf0 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70   = p->nOp;.    p
2bc00 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70  Frame->token = p
2bc10 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a  Program->token;.
2bc20 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f 6e 63      pFrame->aOnc
2bc30 65 46 6c 61 67 20 3d 20 70 2d 3e 61 4f 6e 63 65  eFlag = p->aOnce
2bc40 46 6c 61 67 3b 0a 20 20 20 20 70 46 72 61 6d 65  Flag;.    pFrame
2bc50 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d 20 70 2d  ->nOnceFlag = p-
2bc60 3e 6e 4f 6e 63 65 46 6c 61 67 3b 0a 0a 20 20 20  >nOnceFlag;..   
2bc70 20 70 45 6e 64 20 3d 20 26 56 64 62 65 46 72 61   pEnd = &VdbeFra
2bc80 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70 46  meMem(pFrame)[pF
2bc90 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d  rame->nChildMem]
2bca0 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d 56  ;.    for(pMem=V
2bcb0 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61  dbeFrameMem(pFra
2bcc0 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64 3b  me); pMem!=pEnd;
2bcd0 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20 20   pMem++){.      
2bce0 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pMem->flags = ME
2bcf0 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 20  M_Undefined;.   
2bd00 20 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62     pMem->db = db
2bd10 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
2bd20 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 70 52  .    pFrame = pR
2bd30 74 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a 20 20 20  t->u.pFrame;.   
2bd40 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61   assert( pProgra
2bd50 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d  m->nMem+pProgram
2bd60 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e  ->nCsr==pFrame->
2bd70 6e 43 68 69 6c 64 4d 65 6d 20 29 3b 0a 20 20 20  nChildMem );.   
2bd80 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61   assert( pProgra
2bd90 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d  m->nCsr==pFrame-
2bda0 3e 6e 43 68 69 6c 64 43 73 72 20 29 3b 0a 20 20  >nChildCsr );.  
2bdb0 20 20 61 73 73 65 72 74 28 20 70 63 3d 3d 70 46    assert( pc==pF
2bdc0 72 61 6d 65 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a  rame->pc );.  }.
2bdd0 0a 20 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a  .  p->nFrame++;.
2bde0 20 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e    pFrame->pParen
2bdf0 74 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20  t = p->pFrame;. 
2be00 20 70 46 72 61 6d 65 2d 3e 6c 61 73 74 52 6f 77   pFrame->lastRow
2be10 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a  id = lastRowid;.
2be20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 61 6e 67    pFrame->nChang
2be30 65 20 3d 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a  e = p->nChange;.
2be40 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30    p->nChange = 0
2be50 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20  ;.  p->pFrame = 
2be60 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d 65  pFrame;.  p->aMe
2be70 6d 20 3d 20 61 4d 65 6d 20 3d 20 26 56 64 62 65  m = aMem = &Vdbe
2be80 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29  FrameMem(pFrame)
2be90 5b 2d 31 5d 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20  [-1];.  p->nMem 
2bea0 3d 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64  = pFrame->nChild
2beb0 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72 73 6f  Mem;.  p->nCurso
2bec0 72 20 3d 20 28 75 31 36 29 70 46 72 61 6d 65 2d  r = (u16)pFrame-
2bed0 3e 6e 43 68 69 6c 64 43 73 72 3b 0a 20 20 70 2d  >nChildCsr;.  p-
2bee0 3e 61 70 43 73 72 20 3d 20 28 56 64 62 65 43 75  >apCsr = (VdbeCu
2bef0 72 73 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d  rsor **)&aMem[p-
2bf00 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20 20 70 2d 3e 61  >nMem+1];.  p->a
2bf10 4f 70 20 3d 20 61 4f 70 20 3d 20 70 50 72 6f 67  Op = aOp = pProg
2bf20 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e 6e  ram->aOp;.  p->n
2bf30 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  Op = pProgram->n
2bf40 4f 70 3b 0a 20 20 70 2d 3e 61 4f 6e 63 65 46 6c  Op;.  p->aOnceFl
2bf50 61 67 20 3d 20 28 75 38 20 2a 29 26 70 2d 3e 61  ag = (u8 *)&p->a
2bf60 70 43 73 72 5b 70 2d 3e 6e 43 75 72 73 6f 72 5d  pCsr[p->nCursor]
2bf70 3b 0a 20 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67  ;.  p->nOnceFlag
2bf80 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 6e   = pProgram->nOn
2bf90 63 65 3b 0a 20 20 70 63 20 3d 20 2d 31 3b 0a 20  ce;.  pc = -1;. 
2bfa0 20 6d 65 6d 73 65 74 28 70 2d 3e 61 4f 6e 63 65   memset(p->aOnce
2bfb0 46 6c 61 67 2c 20 30 2c 20 70 2d 3e 6e 4f 6e 63  Flag, 0, p->nOnc
2bfc0 65 46 6c 61 67 29 3b 0a 0a 20 20 62 72 65 61 6b  eFlag);..  break
2bfd0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2bfe0 50 61 72 61 6d 20 50 31 20 50 32 20 2a 20 2a 20  Param P1 P2 * * 
2bff0 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  *.**.** This opc
2c000 6f 64 65 20 69 73 20 6f 6e 6c 79 20 65 76 65 72  ode is only ever
2c010 20 70 72 65 73 65 6e 74 20 69 6e 20 73 75 62 2d   present in sub-
2c020 70 72 6f 67 72 61 6d 73 20 63 61 6c 6c 65 64 20  programs called 
2c030 76 69 61 20 74 68 65 20 0a 2a 2a 20 4f 50 5f 50  via the .** OP_P
2c040 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69  rogram instructi
2c050 6f 6e 2e 20 43 6f 70 79 20 61 20 76 61 6c 75 65  on. Copy a value
2c060 20 63 75 72 72 65 6e 74 6c 79 20 73 74 6f 72 65   currently store
2c070 64 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 0a 2a  d in a memory .*
2c080 2a 20 63 65 6c 6c 20 6f 66 20 74 68 65 20 63 61  * cell of the ca
2c090 6c 6c 69 6e 67 20 28 70 61 72 65 6e 74 29 20 66  lling (parent) f
2c0a0 72 61 6d 65 20 74 6f 20 63 65 6c 6c 20 50 32 20  rame to cell P2 
2c0b0 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 66  in the current f
2c0c0 72 61 6d 65 73 20 0a 2a 2a 20 61 64 64 72 65 73  rames .** addres
2c0d0 73 20 73 70 61 63 65 2e 20 54 68 69 73 20 69 73  s space. This is
2c0e0 20 75 73 65 64 20 62 79 20 74 72 69 67 67 65 72   used by trigger
2c0f0 20 70 72 6f 67 72 61 6d 73 20 74 6f 20 61 63 63   programs to acc
2c100 65 73 73 20 74 68 65 20 6e 65 77 2e 2a 20 0a 2a  ess the new.* .*
2c110 2a 20 61 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c 75  * and old.* valu
2c120 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 64  es..**.** The ad
2c130 64 72 65 73 73 20 6f 66 20 74 68 65 20 63 65 6c  dress of the cel
2c140 6c 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20  l in the parent 
2c150 66 72 61 6d 65 20 69 73 20 64 65 74 65 72 6d 69  frame is determi
2c160 6e 65 64 20 62 79 20 61 64 64 69 6e 67 0a 2a 2a  ned by adding.**
2c170 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
2c180 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f  e P1 argument to
2c190 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
2c1a0 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f  e P1 argument to
2c1b0 20 74 68 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67 20   the.** calling 
2c1c0 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72  OP_Program instr
2c1d0 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
2c1e0 4f 50 5f 50 61 72 61 6d 3a 20 7b 20 20 20 20 20  OP_Param: {     
2c1f0 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
2c200 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 56 64  erelease */.  Vd
2c210 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
2c220 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20 70  .  Mem *pIn;.  p
2c230 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d  Frame = p->pFram
2c240 65 3b 0a 20 20 70 49 6e 20 3d 20 26 70 46 72 61  e;.  pIn = &pFra
2c250 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  me->aMem[pOp->p1
2c260 20 2b 20 70 46 72 61 6d 65 2d 3e 61 4f 70 5b 70   + pFrame->aOp[p
2c270 46 72 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20  Frame->pc].p1]; 
2c280 20 20 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65    .  sqlite3Vdbe
2c290 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
2c2a0 4f 75 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45 70  Out, pIn, MEM_Ep
2c2b0 68 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  hem);.  break;.}
2c2c0 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e  ..#endif /* #ifn
2c2d0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2c2e0 54 52 49 47 47 45 52 20 2a 2f 0a 0a 23 69 66 6e  TRIGGER */..#ifn
2c2f0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2c300 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f  FOREIGN_KEY./* O
2c310 70 63 6f 64 65 3a 20 46 6b 43 6f 75 6e 74 65 72  pcode: FkCounter
2c320 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
2c330 53 79 6e 6f 70 73 69 73 3a 20 66 6b 63 74 72 5b  Synopsis: fkctr[
2c340 50 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20 49 6e  P1]+=P2.**.** In
2c350 63 72 65 6d 65 6e 74 20 61 20 22 63 6f 6e 73 74  crement a "const
2c360 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 22 20 62  raint counter" b
2c370 79 20 50 32 20 28 50 32 20 6d 61 79 20 62 65 20  y P2 (P2 may be 
2c380 6e 65 67 61 74 69 76 65 20 6f 72 20 70 6f 73 69  negative or posi
2c390 74 69 76 65 29 2e 0a 2a 2a 20 49 66 20 50 31 20  tive)..** If P1 
2c3a0 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
2c3b0 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72   database constr
2c3c0 61 69 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20  aint counter is 
2c3d0 69 6e 63 72 65 6d 65 6e 74 65 64 20 0a 2a 2a 20  incremented .** 
2c3e0 28 64 65 66 65 72 72 65 64 20 66 6f 72 65 69 67  (deferred foreig
2c3f0 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
2c400 73 29 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  s). Otherwise, i
2c410 66 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68  f P1 is zero, th
2c420 65 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20  e .** statement 
2c430 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65  counter is incre
2c440 6d 65 6e 74 65 64 20 28 69 6d 6d 65 64 69 61 74  mented (immediat
2c450 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  e foreign key co
2c460 6e 73 74 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63  nstraints)..*/.c
2c470 61 73 65 20 4f 50 5f 46 6b 43 6f 75 6e 74 65 72  ase OP_FkCounter
2c480 3a 20 7b 0a 20 20 69 66 28 20 64 62 2d 3e 66 6c  : {.  if( db->fl
2c490 61 67 73 20 26 20 53 51 4c 49 54 45 5f 44 65 66  ags & SQLITE_Def
2c4a0 65 72 46 4b 73 20 29 7b 0a 20 20 20 20 64 62 2d  erFKs ){.    db-
2c4b0 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
2c4c0 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  s += pOp->p2;.  
2c4d0 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70  }else if( pOp->p
2c4e0 31 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65  1 ){.    db->nDe
2c4f0 66 65 72 72 65 64 43 6f 6e 73 20 2b 3d 20 70 4f  ferredCons += pO
2c500 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a  p->p2;.  }else{.
2c510 20 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72      p->nFkConstr
2c520 61 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b  aint += pOp->p2;
2c530 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2c540 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 49 66  ./* Opcode: FkIf
2c550 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a  Zero P1 P2 * * *
2c560 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
2c570 20 66 6b 63 74 72 5b 50 31 5d 3d 3d 30 20 67 6f   fkctr[P1]==0 go
2c580 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73  to P2.**.** This
2c590 20 6f 70 63 6f 64 65 20 74 65 73 74 73 20 69 66   opcode tests if
2c5a0 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63   a foreign key c
2c5b0 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65  onstraint-counte
2c5c0 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 7a  r is currently z
2c5d0 65 72 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20 6a  ero..** If so, j
2c5e0 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
2c5f0 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  on P2. Otherwise
2c600 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  , fall through t
2c610 6f 20 74 68 65 20 6e 65 78 74 20 0a 2a 2a 20 69  o the next .** i
2c620 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
2c630 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a  * If P1 is non-z
2c640 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 6a 75  ero, then the ju
2c650 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74  mp is taken if t
2c660 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73  he database cons
2c670 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 0a 2a  traint-counter.*
2c680 2a 20 69 73 20 7a 65 72 6f 20 28 74 68 65 20 6f  * is zero (the o
2c690 6e 65 20 74 68 61 74 20 63 6f 75 6e 74 73 20 64  ne that counts d
2c6a0 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69  eferred constrai
2c6b0 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 20  nt violations). 
2c6c0 49 66 20 50 31 20 69 73 0a 2a 2a 20 7a 65 72 6f  If P1 is.** zero
2c6d0 2c 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  , the jump is ta
2c6e0 6b 65 6e 20 69 66 20 74 68 65 20 73 74 61 74 65  ken if the state
2c6f0 6d 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74 2d  ment constraint-
2c700 63 6f 75 6e 74 65 72 20 69 73 20 7a 65 72 6f 0a  counter is zero.
2c710 2a 2a 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f  ** (immediate fo
2c720 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
2c730 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29  aint violations)
2c740 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 49  ..*/.case OP_FkI
2c750 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20  fZero: {        
2c760 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66   /* jump */.  if
2c770 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20  ( pOp->p1 ){.   
2c780 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
2c790 28 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f  (db->nDeferredCo
2c7a0 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65  ns==0 && db->nDe
2c7b0 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30  ferredImmCons==0
2c7c0 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20 64 62  , 2);.    if( db
2c7d0 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d  ->nDeferredCons=
2c7e0 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72  =0 && db->nDefer
2c7f0 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20  redImmCons==0 ) 
2c800 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a  pc = pOp->p2-1;.
2c810 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62    }else{.    Vdb
2c820 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 2d 3e  eBranchTaken(p->
2c830 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30  nFkConstraint==0
2c840 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   && db->nDeferre
2c850 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b  dImmCons==0, 2);
2c860 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e 46 6b 43  .    if( p->nFkC
2c870 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26 26 20  onstraint==0 && 
2c880 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
2c890 43 6f 6e 73 3d 3d 30 20 29 20 70 63 20 3d 20 70  Cons==0 ) pc = p
2c8a0 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20  Op->p2-1;.  }.  
2c8b0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
2c8c0 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /* #ifndef SQLIT
2c8d0 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
2c8e0 45 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  EY */..#ifndef S
2c8f0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
2c900 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f  NCREMENT./* Opco
2c910 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50 32  de: MemMax P1 P2
2c920 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
2c930 69 73 3a 20 72 5b 50 31 5d 3d 6d 61 78 28 72 5b  is: r[P1]=max(r[
2c940 50 31 5d 2c 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a  P1],r[P2]).**.**
2c950 20 50 31 20 69 73 20 61 20 72 65 67 69 73 74 65   P1 is a registe
2c960 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72  r in the root fr
2c970 61 6d 65 20 6f 66 20 74 68 69 73 20 56 4d 20 28  ame of this VM (
2c980 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 69  the root frame i
2c990 73 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 66  s.** different f
2c9a0 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74 20  rom the current 
2c9b0 66 72 61 6d 65 20 69 66 20 74 68 69 73 20 69 6e  frame if this in
2c9c0 73 74 72 75 63 74 69 6f 6e 20 69 73 20 62 65 69  struction is bei
2c9d0 6e 67 20 65 78 65 63 75 74 65 64 0a 2a 2a 20 77  ng executed.** w
2c9e0 69 74 68 69 6e 20 61 20 73 75 62 2d 70 72 6f 67  ithin a sub-prog
2c9f0 72 61 6d 29 2e 20 53 65 74 20 74 68 65 20 76 61  ram). Set the va
2ca00 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
2ca10 50 31 20 74 6f 20 74 68 65 20 6d 61 78 69 6d 75  P1 to the maximu
2ca20 6d 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63 75 72  m of .** its cur
2ca30 72 65 6e 74 20 76 61 6c 75 65 20 61 6e 64 20 74  rent value and t
2ca40 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
2ca50 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  ster P2..**.** T
2ca60 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
2ca70 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20  throws an error 
2ca80 69 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65  if the memory ce
2ca90 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61  ll is not initia
2caa0 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65  lly.** an intege
2cab0 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65  r..*/.case OP_Me
2cac0 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20 20 20 2f  mMax: {        /
2cad0 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 46  * in2 */.  VdbeF
2cae0 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20  rame *pFrame;.  
2caf0 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b  if( p->pFrame ){
2cb00 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d  .    for(pFrame=
2cb10 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d  p->pFrame; pFram
2cb20 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61  e->pParent; pFra
2cb30 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  me=pFrame->pPare
2cb40 6e 74 29 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20  nt);.    pIn1 = 
2cb50 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f  &pFrame->aMem[pO
2cb60 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b  p->p1];.  }else{
2cb70 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  .    pIn1 = &aMe
2cb80 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a  m[pOp->p1];.  }.
2cb90 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
2cba0 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20  alid(pIn1) );.  
2cbb0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
2cbc0 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a  tegerify(pIn1);.
2cbd0 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
2cbe0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74  Op->p2];.  sqlit
2cbf0 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
2cc00 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 69 66 28  ify(pIn2);.  if(
2cc10 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d   pIn1->u.i<pIn2-
2cc20 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d  >u.i){.    pIn1-
2cc30 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69  >u.i = pIn2->u.i
2cc40 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2cc50 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2cc60 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
2cc70 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  MENT */../* Opco
2cc80 64 65 3a 20 49 66 50 6f 73 20 50 31 20 50 32 20  de: IfPos P1 P2 
2cc90 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
2cca0 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20 67 6f  s: if r[P1]>0 go
2ccb0 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74  to P2.**.** If t
2ccc0 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  he value of regi
2ccd0 73 74 65 72 20 50 31 20 69 73 20 31 20 6f 72 20  ster P1 is 1 or 
2cce0 67 72 65 61 74 65 72 2c 20 6a 75 6d 70 20 74 6f  greater, jump to
2ccf0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73   P2..**.** It is
2cd00 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65 20   illegal to use 
2cd10 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
2cd20 20 6f 6e 20 61 20 72 65 67 69 73 74 65 72 20 74   on a register t
2cd30 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20  hat does.** not 
2cd40 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
2cd50 65 72 2e 20 20 41 6e 20 61 73 73 65 72 74 69 6f  er.  An assertio
2cd60 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20 72 65 73  n fault will res
2cd70 75 6c 74 20 69 66 20 79 6f 75 20 74 72 79 2e 0a  ult if you try..
2cd80 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f 73  */.case OP_IfPos
2cd90 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
2cda0 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
2cdb0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
2cdc0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
2cdd0 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
2cde0 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  t );.  VdbeBranc
2cdf0 68 54 61 6b 65 6e 28 20 70 49 6e 31 2d 3e 75 2e  hTaken( pIn1->u.
2ce00 69 3e 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70  i>0, 2);.  if( p
2ce10 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20 20  In1->u.i>0 ){.  
2ce20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
2ce30 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
2ce40 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2ce50 49 66 4e 65 67 20 50 31 20 50 32 20 50 33 20 2a  IfNeg P1 P2 P3 *
2ce60 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2ce70 72 5b 50 31 5d 2b 3d 50 33 2c 20 69 66 20 72 5b  r[P1]+=P3, if r[
2ce80 50 31 5d 3c 30 20 67 6f 74 6f 20 50 32 0a 2a 2a  P1]<0 goto P2.**
2ce90 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31 20  .** Register P1 
2cea0 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20  must contain an 
2ceb0 69 6e 74 65 67 65 72 2e 20 20 41 64 64 20 6c 69  integer.  Add li
2cec0 74 65 72 61 6c 20 50 33 20 74 6f 20 74 68 65 20  teral P3 to the 
2ced0 76 61 6c 75 65 20 69 6e 0a 2a 2a 20 72 65 67 69  value in.** regi
2cee0 73 74 65 72 20 50 31 20 74 68 65 6e 20 69 66 20  ster P1 then if 
2cef0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67  the value of reg
2cf00 69 73 74 65 72 20 50 31 20 69 73 20 6c 65 73 73  ister P1 is less
2cf10 20 74 68 61 6e 20 7a 65 72 6f 2c 20 6a 75 6d 70   than zero, jump
2cf20 20 74 6f 20 50 32 2e 20 0a 2a 2f 0a 63 61 73 65   to P2. .*/.case
2cf30 20 4f 50 5f 49 66 4e 65 67 3a 20 7b 20 20 20 20   OP_IfNeg: {    
2cf40 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
2cf50 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
2cf60 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
2cf70 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
2cf80 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  gs&MEM_Int );.  
2cf90 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70  pIn1->u.i += pOp
2cfa0 2d 3e 70 33 3b 0a 20 20 56 64 62 65 42 72 61 6e  ->p3;.  VdbeBran
2cfb0 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e  chTaken(pIn1->u.
2cfc0 69 3c 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70  i<0, 2);.  if( p
2cfd0 49 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b 0a 20 20  In1->u.i<0 ){.  
2cfe0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
2cff0 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
2d000 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2d010 49 66 5a 65 72 6f 20 50 31 20 50 32 20 50 33 20  IfZero P1 P2 P3 
2d020 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2d030 20 72 5b 50 31 5d 2b 3d 50 33 2c 20 69 66 20 72   r[P1]+=P3, if r
2d040 5b 50 31 5d 3d 3d 30 20 67 6f 74 6f 20 50 32 0a  [P1]==0 goto P2.
2d050 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74  **.** The regist
2d060 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61  er P1 must conta
2d070 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  in an integer.  
2d080 41 64 64 20 6c 69 74 65 72 61 6c 20 50 33 20 74  Add literal P3 t
2d090 6f 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69  o the.** value i
2d0a0 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  n register P1.  
2d0b0 49 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  If the result is
2d0c0 20 65 78 61 63 74 6c 79 20 30 2c 20 6a 75 6d 70   exactly 0, jump
2d0d0 20 74 6f 20 50 32 2e 20 0a 2a 2f 0a 63 61 73 65   to P2. .*/.case
2d0e0 20 4f 50 5f 49 66 5a 65 72 6f 3a 20 7b 20 20 20   OP_IfZero: {   
2d0f0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
2d100 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
2d110 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2d120 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
2d130 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  ags&MEM_Int );. 
2d140 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f   pIn1->u.i += pO
2d150 70 2d 3e 70 33 3b 0a 20 20 56 64 62 65 42 72 61  p->p3;.  VdbeBra
2d160 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75  nchTaken(pIn1->u
2d170 2e 69 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28  .i==0, 2);.  if(
2d180 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b   pIn1->u.i==0 ){
2d190 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  .     pc = pOp->
2d1a0 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
2d1b0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2d1c0 65 3a 20 41 67 67 53 74 65 70 20 2a 20 50 32 20  e: AggStep * P2 
2d1d0 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
2d1e0 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33  psis: accum=r[P3
2d1f0 5d 20 73 74 65 70 28 72 5b 50 32 40 50 35 5d 29  ] step(r[P2@P5])
2d200 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74  .**.** Execute t
2d210 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  he step function
2d220 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74   for an aggregat
2d230 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74  e.  The.** funct
2d240 69 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75 6d  ion has P5 argum
2d250 65 6e 74 73 2e 20 20 20 50 34 20 69 73 20 61 20  ents.   P4 is a 
2d260 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46  pointer to the F
2d270 75 6e 63 44 65 66 0a 2a 2a 20 73 74 72 75 63 74  uncDef.** struct
2d280 75 72 65 20 74 68 61 74 20 73 70 65 63 69 66 69  ure that specifi
2d290 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  es the function.
2d2a0 20 20 55 73 65 20 72 65 67 69 73 74 65 72 0a 2a    Use register.*
2d2b0 2a 20 50 33 20 61 73 20 74 68 65 20 61 63 63 75  * P3 as the accu
2d2c0 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54  mulator..**.** T
2d2d0 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20  he P5 arguments 
2d2e0 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72  are taken from r
2d2f0 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 69  egister P2 and i
2d300 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73  ts.** successors
2d310 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67  ..*/.case OP_Agg
2d320 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b  Step: {.  int n;
2d330 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20  .  int i;.  Mem 
2d340 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d 20 2a 70 52  *pMem;.  Mem *pR
2d350 65 63 3b 0a 20 20 4d 65 6d 20 74 3b 0a 20 20 73  ec;.  Mem t;.  s
2d360 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 63  qlite3_context c
2d370 74 78 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  tx;.  sqlite3_va
2d380 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a 0a 20 20  lue **apVal;..  
2d390 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61  n = pOp->p5;.  a
2d3a0 73 73 65 72 74 28 20 6e 3e 3d 30 20 29 3b 0a 20  ssert( n>=0 );. 
2d3b0 20 70 52 65 63 20 3d 20 26 61 4d 65 6d 5b 70 4f   pRec = &aMem[pO
2d3c0 70 2d 3e 70 32 5d 3b 0a 20 20 61 70 56 61 6c 20  p->p2];.  apVal 
2d3d0 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73  = p->apArg;.  as
2d3e0 73 65 72 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e  sert( apVal || n
2d3f0 3d 3d 30 20 29 3b 0a 20 20 66 6f 72 28 69 3d 30  ==0 );.  for(i=0
2d400 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 52 65 63  ; i<n; i++, pRec
2d410 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
2d420 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65 63   memIsValid(pRec
2d430 29 20 29 3b 0a 20 20 20 20 61 70 56 61 6c 5b 69  ) );.    apVal[i
2d440 5d 20 3d 20 70 52 65 63 3b 0a 20 20 20 20 6d 65  ] = pRec;.    me
2d450 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
2d460 2c 20 70 52 65 63 29 3b 0a 20 20 7d 0a 20 20 63  , pRec);.  }.  c
2d470 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e  tx.pFunc = pOp->
2d480 70 34 2e 70 46 75 6e 63 3b 0a 20 20 61 73 73 65  p4.pFunc;.  asse
2d490 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
2d4a0 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
2d4b0 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
2d4c0 3b 0a 20 20 63 74 78 2e 70 4d 65 6d 20 3d 20 70  ;.  ctx.pMem = p
2d4d0 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
2d4e0 3e 70 33 5d 3b 0a 20 20 70 4d 65 6d 2d 3e 6e 2b  >p3];.  pMem->n+
2d4f0 2b 3b 0a 20 20 74 2e 66 6c 61 67 73 20 3d 20 4d  +;.  t.flags = M
2d500 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 74 2e 7a 20 3d  EM_Null;.  t.z =
2d510 20 30 3b 0a 20 20 74 2e 7a 4d 61 6c 6c 6f 63 20   0;.  t.zMalloc 
2d520 3d 20 30 3b 0a 20 20 74 2e 78 44 65 6c 20 3d 20  = 0;.  t.xDel = 
2d530 30 3b 0a 20 20 74 2e 64 62 20 3d 20 64 62 3b 0a  0;.  t.db = db;.
2d540 20 20 63 74 78 2e 70 4f 75 74 20 3d 20 26 74 3b    ctx.pOut = &t;
2d550 0a 20 20 63 74 78 2e 69 73 45 72 72 6f 72 20 3d  .  ctx.isError =
2d560 20 30 3b 0a 20 20 63 74 78 2e 70 43 6f 6c 6c 20   0;.  ctx.pColl 
2d570 3d 20 30 3b 0a 20 20 63 74 78 2e 73 6b 69 70 46  = 0;.  ctx.skipF
2d580 6c 61 67 20 3d 20 30 3b 0a 20 20 69 66 28 20 63  lag = 0;.  if( c
2d590 74 78 2e 70 46 75 6e 63 2d 3e 66 75 6e 63 46 6c  tx.pFunc->funcFl
2d5a0 61 67 73 20 26 20 53 51 4c 49 54 45 5f 46 55 4e  ags & SQLITE_FUN
2d5b0 43 5f 4e 45 45 44 43 4f 4c 4c 20 29 7b 0a 20 20  C_NEEDCOLL ){.  
2d5c0 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e 70 2d    assert( pOp>p-
2d5d0 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61 73 73 65  >aOp );.    asse
2d5e0 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79  rt( pOp[-1].p4ty
2d5f0 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29  pe==P4_COLLSEQ )
2d600 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
2d610 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  p[-1].opcode==OP
2d620 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20  _CollSeq );.    
2d630 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f 70 5b  ctx.pColl = pOp[
2d640 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a 20 20  -1].p4.pColl;.  
2d650 7d 0a 20 20 28 63 74 78 2e 70 46 75 6e 63 2d 3e  }.  (ctx.pFunc->
2d660 78 53 74 65 70 29 28 26 63 74 78 2c 20 6e 2c 20  xStep)(&ctx, n, 
2d670 61 70 56 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a 20  apVal); /* IMP: 
2d680 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f  R-24505-23230 */
2d690 0a 20 20 69 66 28 20 63 74 78 2e 69 73 45 72 72  .  if( ctx.isErr
2d6a0 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  or ){.    sqlite
2d6b0 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
2d6c0 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22  ErrMsg, db, "%s"
2d6d0 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
2d6e0 74 65 78 74 28 26 74 29 29 3b 0a 20 20 20 20 72  text(&t));.    r
2d6f0 63 20 3d 20 63 74 78 2e 69 73 45 72 72 6f 72 3b  c = ctx.isError;
2d700 0a 20 20 7d 0a 20 20 69 66 28 20 63 74 78 2e 73  .  }.  if( ctx.s
2d710 6b 69 70 46 6c 61 67 20 29 7b 0a 20 20 20 20 61  kipFlag ){.    a
2d720 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f  ssert( pOp[-1].o
2d730 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65  pcode==OP_CollSe
2d740 71 20 29 3b 0a 20 20 20 20 69 20 3d 20 70 4f 70  q );.    i = pOp
2d750 5b 2d 31 5d 2e 70 31 3b 0a 20 20 20 20 69 66 28  [-1].p1;.    if(
2d760 20 69 20 29 20 73 71 6c 69 74 65 33 56 64 62 65   i ) sqlite3Vdbe
2d770 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65  MemSetInt64(&aMe
2d780 6d 5b 69 5d 2c 20 31 29 3b 0a 20 20 7d 0a 20 20  m[i], 1);.  }.  
2d790 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
2d7a0 6c 65 61 73 65 28 26 74 29 3b 0a 20 20 62 72 65  lease(&t);.  bre
2d7b0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2d7c0 3a 20 41 67 67 46 69 6e 61 6c 20 50 31 20 50 32  : AggFinal P1 P2
2d7d0 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
2d7e0 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 31 5d  sis: accum=r[P1]
2d7f0 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20 45 78 65 63   N=P2.**.** Exec
2d800 75 74 65 20 74 68 65 20 66 69 6e 61 6c 69 7a 65  ute the finalize
2d810 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61  r function for a
2d820 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 50 31  n aggregate.  P1
2d830 20 69 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72   is.** the memor
2d840 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20  y location that 
2d850 69 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74  is the accumulat
2d860 6f 72 20 66 6f 72 20 74 68 65 20 61 67 67 72 65  or for the aggre
2d870 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69  gate..**.** P2 i
2d880 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
2d890 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 74  arguments that t
2d8a0 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  he step function
2d8b0 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34   takes and.** P4
2d8c0 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
2d8d0 20 74 68 65 20 46 75 6e 63 44 65 66 20 66 6f 72   the FuncDef for
2d8e0 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20   this function. 
2d8f0 20 54 68 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d   The P2.** argum
2d900 65 6e 74 20 69 73 20 6e 6f 74 20 75 73 65 64 20  ent is not used 
2d910 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20  by this opcode. 
2d920 20 49 74 20 69 73 20 6f 6e 6c 79 20 74 68 65 72   It is only ther
2d930 65 20 74 6f 20 64 69 73 61 6d 62 69 67 75 61 74  e to disambiguat
2d940 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74  e.** functions t
2d950 68 61 74 20 63 61 6e 20 74 61 6b 65 20 76 61 72  hat can take var
2d960 79 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66 20  ying numbers of 
2d970 61 72 67 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a  arguments.  The.
2d980 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69  ** P4 argument i
2d990 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f  s only needed fo
2d9a0 72 20 74 68 65 20 64 65 67 65 6e 65 72 61 74 65  r the degenerate
2d9b0 20 63 61 73 65 20 77 68 65 72 65 0a 2a 2a 20 74   case where.** t
2d9c0 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  he step function
2d9d0 20 77 61 73 20 6e 6f 74 20 70 72 65 76 69 6f 75   was not previou
2d9e0 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63  sly called..*/.c
2d9f0 61 73 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a  ase OP_AggFinal:
2da00 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a   {.  Mem *pMem;.
2da10 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2da20 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d  1>0 && pOp->p1<=
2da30 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
2da40 73 6f 72 29 20 29 3b 0a 20 20 70 4d 65 6d 20 3d  sor) );.  pMem =
2da50 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2da60 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d  .  assert( (pMem
2da70 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f  ->flags & ~(MEM_
2da80 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d  Null|MEM_Agg))==
2da90 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  0 );.  rc = sqli
2daa0 74 65 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69  te3VdbeMemFinali
2dab0 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34  ze(pMem, pOp->p4
2dac0 2e 70 46 75 6e 63 29 3b 0a 20 20 69 66 28 20 72  .pFunc);.  if( r
2dad0 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  c ){.    sqlite3
2dae0 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
2daf0 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
2db00 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
2db10 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20 7d 0a  ext(pMem));.  }.
2db20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
2db30 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d  ngeEncoding(pMem
2db40 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55  , encoding);.  U
2db50 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
2db60 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20  ZE(pMem);.  if( 
2db70 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
2db80 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20  oBig(pMem) ){.  
2db90 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
2dba0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2dbb0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2dbc0 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64  MIT_WAL./* Opcod
2dbd0 65 3a 20 43 68 65 63 6b 70 6f 69 6e 74 20 50 31  e: Checkpoint P1
2dbe0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
2dbf0 20 43 68 65 63 6b 70 6f 69 6e 74 20 64 61 74 61   Checkpoint data
2dc00 62 61 73 65 20 50 31 2e 20 54 68 69 73 20 69 73  base P1. This is
2dc10 20 61 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20 69   a no-op if P1 i
2dc20 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20  s not currently 
2dc30 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e 20  in.** WAL mode. 
2dc40 50 61 72 61 6d 65 74 65 72 20 50 32 20 69 73 20  Parameter P2 is 
2dc50 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 43 48  one of SQLITE_CH
2dc60 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45  ECKPOINT_PASSIVE
2dc70 2c 20 46 55 4c 4c 0a 2a 2a 20 6f 72 20 52 45 53  , FULL.** or RES
2dc80 54 41 52 54 2e 20 20 57 72 69 74 65 20 31 20 6f  TART.  Write 1 o
2dc90 72 20 30 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 5d  r 0 into mem[P3]
2dca0 20 69 66 20 74 68 65 20 63 68 65 63 6b 70 6f 69   if the checkpoi
2dcb0 6e 74 20 72 65 74 75 72 6e 73 0a 2a 2a 20 53 51  nt returns.** SQ
2dcc0 4c 49 54 45 5f 42 55 53 59 20 6f 72 20 6e 6f 74  LITE_BUSY or not
2dcd0 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
2dce0 20 57 72 69 74 65 20 74 68 65 20 6e 75 6d 62 65   Write the numbe
2dcf0 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68  r of pages in th
2dd00 65 0a 2a 2a 20 57 41 4c 20 61 66 74 65 72 20 74  e.** WAL after t
2dd10 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 69 6e  he checkpoint in
2dd20 74 6f 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64  to mem[P3+1] and
2dd30 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   the number of p
2dd40 61 67 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 57  ages.** in the W
2dd50 41 4c 20 74 68 61 74 20 68 61 76 65 20 62 65 65  AL that have bee
2dd60 6e 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20 61  n checkpointed a
2dd70 66 74 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f  fter the checkpo
2dd80 69 6e 74 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 73  int.** completes
2dd90 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 32 5d 2e   into mem[P3+2].
2dda0 20 20 48 6f 77 65 76 65 72 20 6f 6e 20 61 6e 20    However on an 
2ddb0 65 72 72 6f 72 2c 20 6d 65 6d 5b 50 33 2b 31 5d  error, mem[P3+1]
2ddc0 20 61 6e 64 0a 2a 2a 20 6d 65 6d 5b 50 33 2b 32   and.** mem[P3+2
2ddd0 5d 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65  ] are initialize
2dde0 64 20 74 6f 20 2d 31 2e 0a 2a 2f 0a 63 61 73 65  d to -1..*/.case
2ddf0 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74 3a 20   OP_Checkpoint: 
2de00 7b 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  {.  int i;      
2de10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e      /* Loop coun
2de30 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 61 52 65  ter */.  int aRe
2de40 73 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20 20  s[3];           
2de50 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
2de60 6c 74 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d  lts */.  Mem *pM
2de70 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
2de80 20 20 20 20 20 20 20 20 20 2f 2a 20 57 72 69 74           /* Writ
2de90 65 20 72 65 73 75 6c 74 73 20 68 65 72 65 20 2a  e results here *
2dea0 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  /..  assert( p->
2deb0 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
2dec0 20 61 52 65 73 5b 30 5d 20 3d 20 30 3b 0a 20 20   aRes[0] = 0;.  
2ded0 61 52 65 73 5b 31 5d 20 3d 20 61 52 65 73 5b 32  aRes[1] = aRes[2
2dee0 5d 20 3d 20 2d 31 3b 0a 20 20 61 73 73 65 72 74  ] = -1;.  assert
2def0 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  ( pOp->p2==SQLIT
2df00 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53  E_CHECKPOINT_PAS
2df10 53 49 56 45 0a 20 20 20 20 20 20 20 7c 7c 20 70  SIVE.       || p
2df20 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43  Op->p2==SQLITE_C
2df30 48 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 0a 20  HECKPOINT_FULL. 
2df40 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32        || pOp->p2
2df50 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  ==SQLITE_CHECKPO
2df60 49 4e 54 5f 52 45 53 54 41 52 54 0a 20 20 29 3b  INT_RESTART.  );
2df70 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 43  .  rc = sqlite3C
2df80 68 65 63 6b 70 6f 69 6e 74 28 64 62 2c 20 70 4f  heckpoint(db, pO
2df90 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20  p->p1, pOp->p2, 
2dfa0 26 61 52 65 73 5b 31 5d 2c 20 26 61 52 65 73 5b  &aRes[1], &aRes[
2dfb0 32 5d 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  2]);.  if( rc==S
2dfc0 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
2dfd0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
2dfe0 3b 0a 20 20 20 20 61 52 65 73 5b 30 5d 20 3d 20  ;.    aRes[0] = 
2dff0 31 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30  1;.  }.  for(i=0
2e000 2c 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  , pMem = &aMem[p
2e010 4f 70 2d 3e 70 33 5d 3b 20 69 3c 33 3b 20 69 2b  Op->p3]; i<3; i+
2e020 2b 2c 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20  +, pMem++){.    
2e030 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2e040 74 49 6e 74 36 34 28 70 4d 65 6d 2c 20 28 69 36  tInt64(pMem, (i6
2e050 34 29 61 52 65 73 5b 69 5d 29 3b 0a 20 20 7d 20  4)aRes[i]);.  } 
2e060 20 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 20     .  break;.}; 
2e070 20 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65   .#endif..#ifnde
2e080 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
2e090 41 47 4d 41 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  AGMA./* Opcode: 
2e0a0 4a 6f 75 72 6e 61 6c 4d 6f 64 65 20 50 31 20 50  JournalMode P1 P
2e0b0 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43  2 P3 * *.**.** C
2e0c0 68 61 6e 67 65 20 74 68 65 20 6a 6f 75 72 6e 61  hange the journa
2e0d0 6c 20 6d 6f 64 65 20 6f 66 20 64 61 74 61 62 61  l mode of databa
2e0e0 73 65 20 50 31 20 74 6f 20 50 33 2e 20 50 33 20  se P1 to P3. P3 
2e0f0 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f 66 20 74  must be one of t
2e100 68 65 0a 2a 2a 20 50 41 47 45 52 5f 4a 4f 55 52  he.** PAGER_JOUR
2e110 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 76 61 6c 75  NALMODE_XXX valu
2e120 65 73 2e 20 49 66 20 63 68 61 6e 67 69 6e 67 20  es. If changing 
2e130 62 65 74 77 65 65 6e 20 74 68 65 20 76 61 72 69  between the vari
2e140 6f 75 73 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20  ous rollback.** 
2e150 6d 6f 64 65 73 20 28 64 65 6c 65 74 65 2c 20 74  modes (delete, t
2e160 72 75 6e 63 61 74 65 2c 20 70 65 72 73 69 73 74  runcate, persist
2e170 2c 20 6f 66 66 20 61 6e 64 20 6d 65 6d 6f 72 79  , off and memory
2e180 29 2c 20 74 68 69 73 20 69 73 20 61 20 73 69 6d  ), this is a sim
2e190 70 6c 65 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e  ple.** operation
2e1a0 2e 20 4e 6f 20 49 4f 20 69 73 20 72 65 71 75 69  . No IO is requi
2e1b0 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 68  red..**.** If ch
2e1c0 61 6e 67 69 6e 67 20 69 6e 74 6f 20 6f 72 20 6f  anging into or o
2e1d0 75 74 20 6f 66 20 57 41 4c 20 6d 6f 64 65 20 74  ut of WAL mode t
2e1e0 68 65 20 70 72 6f 63 65 64 75 72 65 20 69 73 20  he procedure is 
2e1f0 6d 6f 72 65 20 63 6f 6d 70 6c 69 63 61 74 65 64  more complicated
2e200 2e 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20  ..**.** Write a 
2e210 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e  string containin
2e220 67 20 74 68 65 20 66 69 6e 61 6c 20 6a 6f 75 72  g the final jour
2e230 6e 61 6c 2d 6d 6f 64 65 20 74 6f 20 72 65 67 69  nal-mode to regi
2e240 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
2e250 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 3a   OP_JournalMode:
2e260 20 7b 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72   {    /* out2-pr
2e270 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 42 74  erelease */.  Bt
2e280 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20  ree *pBt;       
2e290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2e2a0 20 42 74 72 65 65 20 74 6f 20 63 68 61 6e 67 65   Btree to change
2e2b0 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66   journal mode of
2e2c0 20 2a 2f 0a 20 20 50 61 67 65 72 20 2a 70 50 61   */.  Pager *pPa
2e2d0 67 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ger;            
2e2e0 20 20 20 20 20 20 2f 2a 20 50 61 67 65 72 20 61        /* Pager a
2e2f0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 70  ssociated with p
2e300 42 74 20 2a 2f 0a 20 20 69 6e 74 20 65 4e 65 77  Bt */.  int eNew
2e310 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2e320 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 6a          /* New j
2e330 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20  ournal mode */. 
2e340 20 69 6e 74 20 65 4f 6c 64 3b 20 20 20 20 20 20   int eOld;      
2e350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e360 20 2f 2a 20 54 68 65 20 6f 6c 64 20 6a 6f 75 72   /* The old jour
2e370 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 23 69 66 6e  nal mode */.#ifn
2e380 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2e390 57 41 4c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  WAL.  const char
2e3a0 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 20 20 20 20   *zFilename;    
2e3b0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
2e3c0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 66   database file f
2e3d0 6f 72 20 70 50 61 67 65 72 20 2a 2f 0a 23 65 6e  or pPager */.#en
2e3e0 64 69 66 0a 0a 20 20 65 4e 65 77 20 3d 20 70 4f  dif..  eNew = pO
2e3f0 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28  p->p3;.  assert(
2e400 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2e410 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45 54 45 20  RNALMODE_DELETE 
2e420 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
2e430 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2e440 44 45 5f 54 52 55 4e 43 41 54 45 20 0a 20 20 20  DE_TRUNCATE .   
2e450 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
2e460 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50  ER_JOURNALMODE_P
2e470 45 52 53 49 53 54 20 0a 20 20 20 20 20 20 20 7c  ERSIST .       |
2e480 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
2e490 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20 20  URNALMODE_OFF.  
2e4a0 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
2e4b0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2e4c0 4d 45 4d 4f 52 59 0a 20 20 20 20 20 20 20 7c 7c  MEMORY.       ||
2e4d0 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2e4e0 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20  RNALMODE_WAL.   
2e4f0 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
2e500 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51  ER_JOURNALMODE_Q
2e510 55 45 52 59 0a 20 20 29 3b 0a 20 20 61 73 73 65  UERY.  );.  asse
2e520 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
2e530 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
2e540 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  b );.  assert( p
2e550 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
2e560 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44  ..  pBt = db->aD
2e570 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a  b[pOp->p1].pBt;.
2e580 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74    pPager = sqlit
2e590 65 33 42 74 72 65 65 50 61 67 65 72 28 70 42 74  e3BtreePager(pBt
2e5a0 29 3b 0a 20 20 65 4f 6c 64 20 3d 20 73 71 6c 69  );.  eOld = sqli
2e5b0 74 65 33 50 61 67 65 72 47 65 74 4a 6f 75 72 6e  te3PagerGetJourn
2e5c0 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 3b 0a  alMode(pPager);.
2e5d0 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45    if( eNew==PAGE
2e5e0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55  R_JOURNALMODE_QU
2e5f0 45 52 59 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c  ERY ) eNew = eOl
2e600 64 3b 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65  d;.  if( !sqlite
2e610 33 50 61 67 65 72 4f 6b 54 6f 43 68 61 6e 67 65  3PagerOkToChange
2e620 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67  JournalMode(pPag
2e630 65 72 29 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c  er) ) eNew = eOl
2e640 64 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  d;..#ifndef SQLI
2e650 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 7a 46  TE_OMIT_WAL.  zF
2e660 69 6c 65 6e 61 6d 65 20 3d 20 73 71 6c 69 74 65  ilename = sqlite
2e670 33 50 61 67 65 72 46 69 6c 65 6e 61 6d 65 28 70  3PagerFilename(p
2e680 50 61 67 65 72 2c 20 31 29 3b 0a 0a 20 20 2f 2a  Pager, 1);..  /*
2e690 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 61 20   Do not allow a 
2e6a0 74 72 61 6e 73 69 74 69 6f 6e 20 74 6f 20 6a 6f  transition to jo
2e6b0 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20 66  urnal_mode=WAL f
2e6c0 6f 72 20 61 20 64 61 74 61 62 61 73 65 0a 20 20  or a database.  
2e6d0 2a 2a 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20  ** in temporary 
2e6e0 73 74 6f 72 61 67 65 20 6f 72 20 69 66 20 74 68  storage or if th
2e6f0 65 20 56 46 53 20 64 6f 65 73 20 6e 6f 74 20 73  e VFS does not s
2e700 75 70 70 6f 72 74 20 73 68 61 72 65 64 20 6d 65  upport shared me
2e710 6d 6f 72 79 20 0a 20 20 2a 2f 0a 20 20 69 66 28  mory .  */.  if(
2e720 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2e730 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20  RNALMODE_WAL.   
2e740 26 26 20 28 73 71 6c 69 74 65 33 53 74 72 6c 65  && (sqlite3Strle
2e750 6e 33 30 28 7a 46 69 6c 65 6e 61 6d 65 29 3d 3d  n30(zFilename)==
2e760 30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  0           /* T
2e770 65 6d 70 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20  emp file */.    
2e780 20 20 20 7c 7c 20 21 73 71 6c 69 74 65 33 50 61     || !sqlite3Pa
2e790 67 65 72 57 61 6c 53 75 70 70 6f 72 74 65 64 28  gerWalSupported(
2e7a0 70 50 61 67 65 72 29 29 20 20 20 2f 2a 20 4e 6f  pPager))   /* No
2e7b0 20 73 68 61 72 65 64 2d 6d 65 6d 6f 72 79 20 73   shared-memory s
2e7c0 75 70 70 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a 20  upport */.  ){. 
2e7d0 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a     eNew = eOld;.
2e7e0 20 20 7d 0a 0a 20 20 69 66 28 20 28 65 4e 65 77    }..  if( (eNew
2e7f0 21 3d 65 4f 6c 64 29 0a 20 20 20 26 26 20 28 65  !=eOld).   && (e
2e800 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  Old==PAGER_JOURN
2e810 41 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20 65 4e  ALMODE_WAL || eN
2e820 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2e830 4c 4d 4f 44 45 5f 57 41 4c 29 0a 20 20 29 7b 0a  LMODE_WAL).  ){.
2e840 20 20 20 20 69 66 28 20 21 64 62 2d 3e 61 75 74      if( !db->aut
2e850 6f 43 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e 6e  oCommit || db->n
2e860 56 64 62 65 52 65 61 64 3e 31 20 29 7b 0a 20 20  VdbeRead>1 ){.  
2e870 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
2e880 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 73 71 6c  ERROR;.      sql
2e890 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
2e8a0 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a  ->zErrMsg, db, .
2e8b0 20 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f            "canno
2e8c0 74 20 63 68 61 6e 67 65 20 25 73 20 77 61 6c 20  t change %s wal 
2e8d0 6d 6f 64 65 20 66 72 6f 6d 20 77 69 74 68 69 6e  mode from within
2e8e0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 2c   a transaction",
2e8f0 0a 20 20 20 20 20 20 20 20 20 20 28 65 4e 65 77  .          (eNew
2e900 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2e910 4f 44 45 5f 57 41 4c 20 3f 20 22 69 6e 74 6f 22  ODE_WAL ? "into"
2e920 20 3a 20 22 6f 75 74 20 6f 66 22 29 0a 20 20 20   : "out of").   
2e930 20 20 20 29 3b 0a 20 20 20 20 20 20 62 72 65 61     );.      brea
2e940 6b 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 0a  k;.    }else{. .
2e950 20 20 20 20 20 20 69 66 28 20 65 4f 6c 64 3d 3d        if( eOld==
2e960 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2e970 45 5f 57 41 4c 20 29 7b 0a 20 20 20 20 20 20 20  E_WAL ){.       
2e980 20 2f 2a 20 49 66 20 6c 65 61 76 69 6e 67 20 57   /* If leaving W
2e990 41 4c 20 6d 6f 64 65 2c 20 63 6c 6f 73 65 20 74  AL mode, close t
2e9a0 68 65 20 6c 6f 67 20 66 69 6c 65 2e 20 49 66 20  he log file. If 
2e9b0 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65 20  successful, the 
2e9c0 63 61 6c 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20  call.        ** 
2e9d0 74 6f 20 50 61 67 65 72 43 6c 6f 73 65 57 61 6c  to PagerCloseWal
2e9e0 28 29 20 63 68 65 63 6b 70 6f 69 6e 74 73 20 61  () checkpoints a
2e9f0 6e 64 20 64 65 6c 65 74 65 73 20 74 68 65 20 77  nd deletes the w
2ea00 72 69 74 65 2d 61 68 65 61 64 2d 6c 6f 67 20 0a  rite-ahead-log .
2ea10 20 20 20 20 20 20 20 20 2a 2a 20 66 69 6c 65 2e          ** file.
2ea20 20 41 6e 20 45 58 43 4c 55 53 49 56 45 20 6c 6f   An EXCLUSIVE lo
2ea30 63 6b 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20  ck may still be 
2ea40 68 65 6c 64 20 6f 6e 20 74 68 65 20 64 61 74 61  held on the data
2ea50 62 61 73 65 20 66 69 6c 65 20 0a 20 20 20 20 20  base file .     
2ea60 20 20 20 2a 2a 20 61 66 74 65 72 20 61 20 73 75     ** after a su
2ea70 63 63 65 73 73 66 75 6c 20 72 65 74 75 72 6e 2e  ccessful return.
2ea80 20 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20   .        */.   
2ea90 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
2eaa0 33 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 70  3PagerCloseWal(p
2eab0 50 61 67 65 72 29 3b 0a 20 20 20 20 20 20 20 20  Pager);.        
2eac0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
2ead0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  K ){.          s
2eae0 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f  qlite3PagerSetJo
2eaf0 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72  urnalMode(pPager
2eb00 2c 20 65 4e 65 77 29 3b 0a 20 20 20 20 20 20 20  , eNew);.       
2eb10 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69   }.      }else i
2eb20 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a  f( eOld==PAGER_J
2eb30 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52  OURNALMODE_MEMOR
2eb40 59 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  Y ){.        /* 
2eb50 43 61 6e 6e 6f 74 20 74 72 61 6e 73 69 74 69 6f  Cannot transitio
2eb60 6e 20 64 69 72 65 63 74 6c 79 20 66 72 6f 6d 20  n directly from 
2eb70 4d 45 4d 4f 52 59 20 74 6f 20 57 41 4c 2e 20 20  MEMORY to WAL.  
2eb80 55 73 65 20 6d 6f 64 65 20 4f 46 46 0a 20 20 20  Use mode OFF.   
2eb90 20 20 20 20 20 2a 2a 20 61 73 20 61 6e 20 69 6e       ** as an in
2eba0 74 65 72 6d 65 64 69 61 74 65 20 2a 2f 0a 20 20  termediate */.  
2ebb0 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 67        sqlite3Pag
2ebc0 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65  erSetJournalMode
2ebd0 28 70 50 61 67 65 72 2c 20 50 41 47 45 52 5f 4a  (pPager, PAGER_J
2ebe0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b  OURNALMODE_OFF);
2ebf0 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20  .      }.  .    
2ec00 20 20 2f 2a 20 4f 70 65 6e 20 61 20 74 72 61 6e    /* Open a tran
2ec10 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20 64  saction on the d
2ec20 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 52 65  atabase file. Re
2ec30 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20  gardless of the 
2ec40 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a  journal.      **
2ec50 20 6d 6f 64 65 2c 20 74 68 69 73 20 74 72 61 6e   mode, this tran
2ec60 73 61 63 74 69 6f 6e 20 61 6c 77 61 79 73 20 75  saction always u
2ec70 73 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a  ses a rollback j
2ec80 6f 75 72 6e 61 6c 2e 0a 20 20 20 20 20 20 2a 2f  ournal..      */
2ec90 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
2eca0 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e 54  qlite3BtreeIsInT
2ecb0 72 61 6e 73 28 70 42 74 29 3d 3d 30 20 29 3b 0a  rans(pBt)==0 );.
2ecc0 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
2ecd0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
2ece0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
2ecf0 74 72 65 65 53 65 74 56 65 72 73 69 6f 6e 28 70  treeSetVersion(p
2ed00 42 74 2c 20 28 65 4e 65 77 3d 3d 50 41 47 45 52  Bt, (eNew==PAGER
2ed10 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
2ed20 20 3f 20 32 20 3a 20 31 29 29 3b 0a 20 20 20 20   ? 2 : 1));.    
2ed30 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65    }.    }.  }.#e
2ed40 6e 64 69 66 20 2f 2a 20 69 66 6e 64 65 66 20 53  ndif /* ifndef S
2ed50 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a  QLITE_OMIT_WAL *
2ed60 2f 0a 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20  /..  if( rc ){. 
2ed70 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a     eNew = eOld;.
2ed80 20 20 7d 0a 20 20 65 4e 65 77 20 3d 20 73 71 6c    }.  eNew = sql
2ed90 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72  ite3PagerSetJour
2eda0 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20  nalMode(pPager, 
2edb0 65 4e 65 77 29 3b 0a 0a 20 20 70 4f 75 74 20 3d  eNew);..  pOut =
2edc0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
2edd0 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
2ede0 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61   MEM_Str|MEM_Sta
2edf0 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20  tic|MEM_Term;.  
2ee00 70 4f 75 74 2d 3e 7a 20 3d 20 28 63 68 61 72 20  pOut->z = (char 
2ee10 2a 29 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  *)sqlite3Journal
2ee20 4d 6f 64 65 6e 61 6d 65 28 65 4e 65 77 29 3b 0a  Modename(eNew);.
2ee30 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 73 71 6c 69    pOut->n = sqli
2ee40 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4f 75 74  te3Strlen30(pOut
2ee50 2d 3e 7a 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e  ->z);.  pOut->en
2ee60 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b  c = SQLITE_UTF8;
2ee70 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  .  sqlite3VdbeCh
2ee80 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75  angeEncoding(pOu
2ee90 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  t, encoding);.  
2eea0 62 72 65 61 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66  break;.};.#endif
2eeb0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2eec0 50 52 41 47 4d 41 20 2a 2f 0a 0a 23 69 66 20 21  PRAGMA */..#if !
2eed0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2eee0 4d 49 54 5f 56 41 43 55 55 4d 29 20 26 26 20 21  MIT_VACUUM) && !
2eef0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2ef00 4d 49 54 5f 41 54 54 41 43 48 29 0a 2f 2a 20 4f  MIT_ATTACH)./* O
2ef10 70 63 6f 64 65 3a 20 56 61 63 75 75 6d 20 2a 20  pcode: Vacuum * 
2ef20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61  * * * *.**.** Va
2ef30 63 75 75 6d 20 74 68 65 20 65 6e 74 69 72 65 20  cuum the entire 
2ef40 64 61 74 61 62 61 73 65 2e 20 20 54 68 69 73 20  database.  This 
2ef50 6f 70 63 6f 64 65 20 77 69 6c 6c 20 63 61 75 73  opcode will caus
2ef60 65 20 6f 74 68 65 72 20 76 69 72 74 75 61 6c 0a  e other virtual.
2ef70 2a 2a 20 6d 61 63 68 69 6e 65 73 20 74 6f 20 62  ** machines to b
2ef80 65 20 63 72 65 61 74 65 64 20 61 6e 64 20 72 75  e created and ru
2ef90 6e 2e 20 20 49 74 20 6d 61 79 20 6e 6f 74 20 62  n.  It may not b
2efa0 65 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69  e called from wi
2efb0 74 68 69 6e 0a 2a 2a 20 61 20 74 72 61 6e 73 61  thin.** a transa
2efc0 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
2efd0 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20 20 61 73  P_Vacuum: {.  as
2efe0 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
2eff0 79 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73  y==0 );.  rc = s
2f000 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28  qlite3RunVacuum(
2f010 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 29  &p->zErrMsg, db)
2f020 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
2f030 64 69 66 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  dif..#if !define
2f040 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  d(SQLITE_OMIT_AU
2f050 54 4f 56 41 43 55 55 4d 29 0a 2f 2a 20 4f 70 63  TOVACUUM)./* Opc
2f060 6f 64 65 3a 20 49 6e 63 72 56 61 63 75 75 6d 20  ode: IncrVacuum 
2f070 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
2f080 2a 20 50 65 72 66 6f 72 6d 20 61 20 73 69 6e 67  * Perform a sing
2f090 6c 65 20 73 74 65 70 20 6f 66 20 74 68 65 20 69  le step of the i
2f0a0 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63 75 75  ncremental vacuu
2f0b0 6d 20 70 72 6f 63 65 64 75 72 65 20 6f 6e 0a 2a  m procedure on.*
2f0c0 2a 20 74 68 65 20 50 31 20 64 61 74 61 62 61 73  * the P1 databas
2f0d0 65 2e 20 49 66 20 74 68 65 20 76 61 63 75 75 6d  e. If the vacuum
2f0e0 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20 6a   has finished, j
2f0f0 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
2f100 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68 65 72 77  on.** P2. Otherw
2f110 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  ise, fall throug
2f120 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
2f130 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
2f140 73 65 20 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d  se OP_IncrVacuum
2f150 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
2f160 6d 70 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70  mp */.  Btree *p
2f170 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Bt;..  assert( p
2f180 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
2f190 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
2f1a0 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
2f1b0 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
2f1c0 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20  k, pOp->p1) );. 
2f1d0 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
2f1e0 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 42 74  Only==0 );.  pBt
2f1f0 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
2f200 70 31 5d 2e 70 42 74 3b 0a 20 20 72 63 20 3d 20  p1].pBt;.  rc = 
2f210 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 63 72  sqlite3BtreeIncr
2f220 56 61 63 75 75 6d 28 70 42 74 29 3b 0a 20 20 56  Vacuum(pBt);.  V
2f230 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
2f240 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 2c 32  c==SQLITE_DONE,2
2f250 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
2f260 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20  ITE_DONE ){.    
2f270 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
2f280 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
2f290 45 5f 4f 4b 3b 0a 20 20 7d 0a 20 20 62 72 65 61  E_OK;.  }.  brea
2f2a0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  k;.}.#endif../* 
2f2b0 4f 70 63 6f 64 65 3a 20 45 78 70 69 72 65 20 50  Opcode: Expire P
2f2c0 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
2f2d0 43 61 75 73 65 20 70 72 65 63 6f 6d 70 69 6c 65  Cause precompile
2f2e0 64 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20  d statements to 
2f2f0 65 78 70 69 72 65 2e 20 20 57 68 65 6e 20 61 6e  expire.  When an
2f300 20 65 78 70 69 72 65 64 20 73 74 61 74 65 6d 65   expired stateme
2f310 6e 74 0a 2a 2a 20 69 73 20 65 78 65 63 75 74 65  nt.** is execute
2f320 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f  d using sqlite3_
2f330 73 74 65 70 28 29 20 69 74 20 77 69 6c 6c 20 65  step() it will e
2f340 69 74 68 65 72 20 61 75 74 6f 6d 61 74 69 63 61  ither automatica
2f350 6c 6c 79 0a 2a 2a 20 72 65 70 72 65 70 61 72 65  lly.** reprepare
2f360 20 69 74 73 65 6c 66 20 28 69 66 20 69 74 20 77   itself (if it w
2f370 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 63 72  as originally cr
2f380 65 61 74 65 64 20 75 73 69 6e 67 20 73 71 6c 69  eated using sqli
2f390 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 29  te3_prepare_v2()
2f3a0 29 0a 2a 2a 20 6f 72 20 69 74 20 77 69 6c 6c 20  ).** or it will 
2f3b0 66 61 69 6c 20 77 69 74 68 20 53 51 4c 49 54 45  fail with SQLITE
2f3c0 5f 53 43 48 45 4d 41 2e 0a 2a 2a 20 0a 2a 2a 20  _SCHEMA..** .** 
2f3d0 49 66 20 50 31 20 69 73 20 30 2c 20 74 68 65 6e  If P1 is 0, then
2f3e0 20 61 6c 6c 20 53 51 4c 20 73 74 61 74 65 6d 65   all SQL stateme
2f3f0 6e 74 73 20 62 65 63 6f 6d 65 20 65 78 70 69 72  nts become expir
2f400 65 64 2e 20 49 66 20 50 31 20 69 73 20 6e 6f 6e  ed. If P1 is non
2f410 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20 6f  -zero,.** then o
2f420 6e 6c 79 20 74 68 65 20 63 75 72 72 65 6e 74 6c  nly the currentl
2f430 79 20 65 78 65 63 75 74 69 6e 67 20 73 74 61 74  y executing stat
2f440 65 6d 65 6e 74 20 69 73 20 65 78 70 69 72 65 64  ement is expired
2f450 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 78 70  ..*/.case OP_Exp
2f460 69 72 65 3a 20 7b 0a 20 20 69 66 28 20 21 70 4f  ire: {.  if( !pO
2f470 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c  p->p1 ){.    sql
2f480 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72  ite3ExpirePrepar
2f490 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29  edStatements(db)
2f4a0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
2f4b0 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a 20  ->expired = 1;. 
2f4c0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23   }.  break;.}..#
2f4d0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2f4e0 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a  IT_SHARED_CACHE.
2f4f0 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 61 62 6c 65  /* Opcode: Table
2f500 4c 6f 63 6b 20 50 31 20 50 32 20 50 33 20 50 34  Lock P1 P2 P3 P4
2f510 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2f520 69 44 62 3d 50 31 20 72 6f 6f 74 3d 50 32 20 77  iDb=P1 root=P2 w
2f530 72 69 74 65 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 62  rite=P3.**.** Ob
2f540 74 61 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20 61  tain a lock on a
2f550 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c   particular tabl
2f560 65 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  e. This instruct
2f570 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65 64  ion is only used
2f580 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68 61   when.** the sha
2f590 72 65 64 2d 63 61 63 68 65 20 66 65 61 74 75 72  red-cache featur
2f5a0 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a 2a  e is enabled. .*
2f5b0 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69  *.** P1 is the i
2f5c0 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61  ndex of the data
2f5d0 62 61 73 65 20 69 6e 20 73 71 6c 69 74 65 33 2e  base in sqlite3.
2f5e0 61 44 62 5b 5d 20 6f 66 20 74 68 65 20 64 61 74  aDb[] of the dat
2f5f0 61 62 61 73 65 0a 2a 2a 20 6f 6e 20 77 68 69 63  abase.** on whic
2f600 68 20 74 68 65 20 6c 6f 63 6b 20 69 73 20 61 63  h the lock is ac
2f610 71 75 69 72 65 64 2e 20 20 41 20 72 65 61 64 6c  quired.  A readl
2f620 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64 20  ock is obtained 
2f630 69 66 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20 61  if P3==0 or.** a
2f640 20 77 72 69 74 65 20 6c 6f 63 6b 20 69 66 20 50   write lock if P
2f650 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 63  3==1..**.** P2 c
2f660 6f 6e 74 61 69 6e 73 20 74 68 65 20 72 6f 6f 74  ontains the root
2f670 2d 70 61 67 65 20 6f 66 20 74 68 65 20 74 61 62  -page of the tab
2f680 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a  le to lock..**.*
2f690 2a 20 50 34 20 63 6f 6e 74 61 69 6e 73 20 61 20  * P4 contains a 
2f6a0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6e  pointer to the n
2f6b0 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
2f6c0 20 62 65 69 6e 67 20 6c 6f 63 6b 65 64 2e 20 54   being locked. T
2f6d0 68 69 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75  his is only.** u
2f6e0 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20  sed to generate 
2f6f0 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an error message
2f700 20 69 66 20 74 68 65 20 6c 6f 63 6b 20 63 61 6e   if the lock can
2f710 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e 65 64 2e  not be obtained.
2f720 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 61 62 6c  .*/.case OP_Tabl
2f730 65 4c 6f 63 6b 3a 20 7b 0a 20 20 75 38 20 69 73  eLock: {.  u8 is
2f740 57 72 69 74 65 4c 6f 63 6b 20 3d 20 28 75 38 29  WriteLock = (u8)
2f750 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20 69  pOp->p3;.  if( i
2f760 73 57 72 69 74 65 4c 6f 63 6b 20 7c 7c 20 30 3d  sWriteLock || 0=
2f770 3d 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49  =(db->flags&SQLI
2f780 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74  TE_ReadUncommitt
2f790 65 64 29 20 29 7b 0a 20 20 20 20 69 6e 74 20 70  ed) ){.    int p
2f7a0 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20 20  1 = pOp->p1; .  
2f7b0 20 20 61 73 73 65 72 74 28 20 70 31 3e 3d 30 20    assert( p1>=0 
2f7c0 26 26 20 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  && p1<db->nDb );
2f7d0 0a 20 20 20 20 61 73 73 65 72 74 28 20 44 62 4d  .    assert( DbM
2f7e0 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
2f7f0 4d 61 73 6b 2c 20 70 31 29 20 29 3b 0a 20 20 20  Mask, p1) );.   
2f800 20 61 73 73 65 72 74 28 20 69 73 57 72 69 74 65   assert( isWrite
2f810 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72 69  Lock==0 || isWri
2f820 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20 20  teLock==1 );.   
2f830 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2f840 65 65 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e  eeLockTable(db->
2f850 61 44 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70  aDb[p1].pBt, pOp
2f860 2d 3e 70 32 2c 20 69 73 57 72 69 74 65 4c 6f 63  ->p2, isWriteLoc
2f870 6b 29 3b 0a 20 20 20 20 69 66 28 20 28 72 63 26  k);.    if( (rc&
2f880 30 78 46 46 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f  0xFF)==SQLITE_LO
2f890 43 4b 45 44 20 29 7b 0a 20 20 20 20 20 20 63 6f  CKED ){.      co
2f8a0 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 70 4f  nst char *z = pO
2f8b0 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 20 20 73  p->p4.z;.      s
2f8c0 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
2f8d0 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
2f8e0 20 22 64 61 74 61 62 61 73 65 20 74 61 62 6c 65   "database table
2f8f0 20 69 73 20 6c 6f 63 6b 65 64 3a 20 25 73 22 2c   is locked: %s",
2f900 20 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20   z);.    }.  }. 
2f910 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2f920 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2f930 53 48 41 52 45 44 5f 43 41 43 48 45 20 2a 2f 0a  SHARED_CACHE */.
2f940 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2f950 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2f960 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 42 65  E./* Opcode: VBe
2f970 67 69 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a  gin * * * P4 *.*
2f980 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61  *.** P4 may be a
2f990 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73   pointer to an s
2f9a0 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
2f9b0 63 74 75 72 65 2e 20 49 66 20 73 6f 2c 20 63 61  cture. If so, ca
2f9c0 6c 6c 20 74 68 65 20 0a 2a 2a 20 78 42 65 67 69  ll the .** xBegi
2f9d0 6e 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 61  n method for tha
2f9e0 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41  t table..**.** A
2f9f0 6c 73 6f 2c 20 77 68 65 74 68 65 72 20 6f 72 20  lso, whether or 
2fa00 6e 6f 74 20 50 34 20 69 73 20 73 65 74 2c 20 63  not P4 is set, c
2fa10 68 65 63 6b 20 74 68 61 74 20 74 68 69 73 20 69  heck that this i
2fa20 73 20 6e 6f 74 20 62 65 69 6e 67 20 63 61 6c 6c  s not being call
2fa30 65 64 20 66 72 6f 6d 0a 2a 2a 20 77 69 74 68 69  ed from.** withi
2fa40 6e 20 61 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20  n a callback to 
2fa50 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
2fa60 78 53 79 6e 63 28 29 20 6d 65 74 68 6f 64 2e 20  xSync() method. 
2fa70 49 66 20 69 74 20 69 73 2c 20 74 68 65 20 65 72  If it is, the er
2fa80 72 6f 72 0a 2a 2a 20 63 6f 64 65 20 77 69 6c 6c  ror.** code will
2fa90 20 62 65 20 73 65 74 20 74 6f 20 53 51 4c 49 54   be set to SQLIT
2faa0 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73  E_LOCKED..*/.cas
2fab0 65 20 4f 50 5f 56 42 65 67 69 6e 3a 20 7b 0a 20  e OP_VBegin: {. 
2fac0 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 3b 0a   VTable *pVTab;.
2fad0 20 20 70 56 54 61 62 20 3d 20 70 4f 70 2d 3e 70    pVTab = pOp->p
2fae0 34 2e 70 56 74 61 62 3b 0a 20 20 72 63 20 3d 20  4.pVtab;.  rc = 
2faf0 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e  sqlite3VtabBegin
2fb00 28 64 62 2c 20 70 56 54 61 62 29 3b 0a 20 20 69  (db, pVTab);.  i
2fb10 66 28 20 70 56 54 61 62 20 29 20 73 71 6c 69 74  f( pVTab ) sqlit
2fb20 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
2fb30 73 67 28 70 2c 20 70 56 54 61 62 2d 3e 70 56 74  sg(p, pVTab->pVt
2fb40 61 62 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ab);.  break;.}.
2fb50 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2fb60 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2fb70 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
2fb80 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2fb90 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
2fba0 65 3a 20 56 43 72 65 61 74 65 20 50 31 20 2a 20  e: VCreate P1 * 
2fbb0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
2fbc0 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  is the name of a
2fbd0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
2fbe0 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 43  n database P1. C
2fbf0 61 6c 6c 20 74 68 65 20 78 43 72 65 61 74 65 20  all the xCreate 
2fc00 6d 65 74 68 6f 64 0a 2a 2a 20 66 6f 72 20 74 68  method.** for th
2fc10 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73  at table..*/.cas
2fc20 65 20 4f 50 5f 56 43 72 65 61 74 65 3a 20 7b 0a  e OP_VCreate: {.
2fc30 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
2fc40 61 62 43 61 6c 6c 43 72 65 61 74 65 28 64 62 2c  abCallCreate(db,
2fc50 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
2fc60 34 2e 7a 2c 20 26 70 2d 3e 7a 45 72 72 4d 73 67  4.z, &p->zErrMsg
2fc70 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  );.  break;.}.#e
2fc80 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
2fc90 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2fca0 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
2fcb0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2fcc0 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
2fcd0 20 56 44 65 73 74 72 6f 79 20 50 31 20 2a 20 2a   VDestroy P1 * *
2fce0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69   P4 *.**.** P4 i
2fcf0 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  s the name of a 
2fd00 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e  virtual table in
2fd10 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 43   database P1.  C
2fd20 61 6c 6c 20 74 68 65 20 78 44 65 73 74 72 6f 79  all the xDestroy
2fd30 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20 74 68   method.** of th
2fd40 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73  at table..*/.cas
2fd50 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a 20 7b  e OP_VDestroy: {
2fd60 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68  .  p->inVtabMeth
2fd70 6f 64 20 3d 20 32 3b 0a 20 20 72 63 20 3d 20 73  od = 2;.  rc = s
2fd80 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65  qlite3VtabCallDe
2fd90 73 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e 70  stroy(db, pOp->p
2fda0 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  1, pOp->p4.z);. 
2fdb0 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64   p->inVtabMethod
2fdc0 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 0;.  break;.}
2fdd0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2fde0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2fdf0 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
2fe00 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2fe10 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
2fe20 64 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a 20 2a  de: VOpen P1 * *
2fe30 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69   P4 *.**.** P4 i
2fe40 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
2fe50 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f   virtual table o
2fe60 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65  bject, an sqlite
2fe70 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
2fe80 2e 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72  ..** P1 is a cur
2fe90 73 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54 68 69  sor number.  Thi
2fea0 73 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73 20 61  s opcode opens a
2feb0 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20 76   cursor to the v
2fec0 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20  irtual.** table 
2fed0 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61 74 20  and stores that 
2fee0 63 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f  cursor in P1..*/
2fef0 0a 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e 3a 20  .case OP_VOpen: 
2ff00 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
2ff10 70 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f  pCur;.  sqlite3_
2ff20 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74  vtab_cursor *pVt
2ff30 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69  abCursor;.  sqli
2ff40 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
2ff50 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  .  sqlite3_modul
2ff60 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61  e *pModule;..  a
2ff70 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
2ff80 64 65 72 20 29 3b 0a 20 20 70 43 75 72 20 3d 20  der );.  pCur = 
2ff90 30 3b 0a 20 20 70 56 74 61 62 43 75 72 73 6f 72  0;.  pVtabCursor
2ffa0 20 3d 20 30 3b 0a 20 20 70 56 74 61 62 20 3d 20   = 0;.  pVtab = 
2ffb0 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70  pOp->p4.pVtab->p
2ffc0 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20  Vtab;.  pModule 
2ffd0 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  = (sqlite3_modul
2ffe0 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e *)pVtab->pModu
2fff0 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 70 56 74  le;.  assert(pVt
30000 61 62 20 26 26 20 70 4d 6f 64 75 6c 65 29 3b 0a  ab && pModule);.
30010 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
30020 78 4f 70 65 6e 28 70 56 74 61 62 2c 20 26 70 56  xOpen(pVtab, &pV
30030 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 73 71  tabCursor);.  sq
30040 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
30050 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrmsg(p, pVtab);
30060 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b  .  if( SQLITE_OK
30070 3d 3d 72 63 20 29 7b 0a 20 20 20 20 2f 2a 20 49  ==rc ){.    /* I
30080 6e 69 74 69 61 6c 69 7a 65 20 73 71 6c 69 74 65  nitialize sqlite
30090 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 62 61  3_vtab_cursor ba
300a0 73 65 20 63 6c 61 73 73 20 2a 2f 0a 20 20 20 20  se class */.    
300b0 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74  pVtabCursor->pVt
300c0 61 62 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20 20  ab = pVtab;..   
300d0 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 76   /* Initialize v
300e0 64 62 65 20 63 75 72 73 6f 72 20 6f 62 6a 65 63  dbe cursor objec
300f0 74 20 2a 2f 0a 20 20 20 20 70 43 75 72 20 3d 20  t */.    pCur = 
30100 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
30110 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 2d 31  , pOp->p1, 0, -1
30120 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20 70 43  , 0);.    if( pC
30130 75 72 20 29 7b 0a 20 20 20 20 20 20 70 43 75 72  ur ){.      pCur
30140 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20  ->pVtabCursor = 
30150 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 20  pVtabCursor;.   
30160 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62   }else{.      db
30170 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d  ->mallocFailed =
30180 20 31 3b 0a 20 20 20 20 20 20 70 4d 6f 64 75 6c   1;.      pModul
30190 65 2d 3e 78 43 6c 6f 73 65 28 70 56 74 61 62 43  e->xClose(pVtabC
301a0 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20  ursor);.    }.  
301b0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
301c0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
301d0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
301e0 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
301f0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
30200 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
30210 56 46 69 6c 74 65 72 20 50 31 20 50 32 20 50 33  VFilter P1 P2 P3
30220 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
30230 73 3a 20 69 70 6c 61 6e 3d 72 5b 50 33 5d 20 7a  s: iplan=r[P3] z
30240 70 6c 61 6e 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20  plan='P4'.**.** 
30250 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f  P1 is a cursor o
30260 70 65 6e 65 64 20 75 73 69 6e 67 20 56 4f 70 65  pened using VOpe
30270 6e 2e 20 20 50 32 20 69 73 20 61 6e 20 61 64 64  n.  P2 is an add
30280 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20  ress to jump to 
30290 69 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65 72  if.** the filter
302a0 65 64 20 72 65 73 75 6c 74 20 73 65 74 20 69 73  ed result set is
302b0 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34   empty..**.** P4
302c0 20 69 73 20 65 69 74 68 65 72 20 4e 55 4c 4c 20   is either NULL 
302d0 6f 72 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  or a string that
302e0 20 77 61 73 20 67 65 6e 65 72 61 74 65 64 20 62   was generated b
302f0 79 20 74 68 65 20 78 42 65 73 74 49 6e 64 65 78  y the xBestIndex
30300 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74 68  .** method of th
30310 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20 69  e module.  The i
30320 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66  nterpretation of
30330 20 74 68 65 20 50 34 20 73 74 72 69 6e 67 20 69   the P4 string i
30340 73 20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68 65  s left.** to the
30350 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
30360 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  tation..**.** Th
30370 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
30380 73 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65  s the xFilter me
30390 74 68 6f 64 20 6f 6e 20 74 68 65 20 76 69 72 74  thod on the virt
303a0 75 61 6c 20 74 61 62 6c 65 20 73 70 65 63 69 66  ual table specif
303b0 69 65 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20 54  ied.** by P1.  T
303c0 68 65 20 69 6e 74 65 67 65 72 20 71 75 65 72 79  he integer query
303d0 20 70 6c 61 6e 20 70 61 72 61 6d 65 74 65 72 20   plan parameter 
303e0 74 6f 20 78 46 69 6c 74 65 72 20 69 73 20 73 74  to xFilter is st
303f0 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
30400 0a 2a 2a 20 50 33 2e 20 52 65 67 69 73 74 65 72  .** P3. Register
30410 20 50 33 2b 31 20 73 74 6f 72 65 73 20 74 68 65   P3+1 stores the
30420 20 61 72 67 63 20 70 61 72 61 6d 65 74 65 72 20   argc parameter 
30430 74 6f 20 62 65 20 70 61 73 73 65 64 20 74 6f 20  to be passed to 
30440 74 68 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20 6d  the.** xFilter m
30450 65 74 68 6f 64 2e 20 52 65 67 69 73 74 65 72 73  ethod. Registers
30460 20 50 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67 63   P3+2..P3+1+argc
30470 20 61 72 65 20 74 68 65 20 61 72 67 63 0a 2a 2a   are the argc.**
30480 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 72 61   additional para
30490 6d 65 74 65 72 73 20 77 68 69 63 68 20 61 72 65  meters which are
304a0 20 70 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78 46   passed to.** xF
304b0 69 6c 74 65 72 20 61 73 20 61 72 67 76 2e 20 52  ilter as argv. R
304c0 65 67 69 73 74 65 72 20 50 33 2b 32 20 62 65 63  egister P3+2 bec
304d0 6f 6d 65 73 20 61 72 67 76 5b 30 5d 20 77 68 65  omes argv[0] whe
304e0 6e 20 70 61 73 73 65 64 20 74 6f 20 78 46 69 6c  n passed to xFil
304f0 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d  ter..**.** A jum
30500 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20  p is made to P2 
30510 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  if the result se
30520 74 20 61 66 74 65 72 20 66 69 6c 74 65 72 69 6e  t after filterin
30530 67 20 77 6f 75 6c 64 20 62 65 20 65 6d 70 74 79  g would be empty
30540 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46 69  ..*/.case OP_VFi
30550 6c 74 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d  lter: {   /* jum
30560 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 3b  p */.  int nArg;
30570 0a 20 20 69 6e 74 20 69 51 75 65 72 79 3b 0a 20  .  int iQuery;. 
30580 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
30590 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
305a0 20 20 4d 65 6d 20 2a 70 51 75 65 72 79 3b 0a 20    Mem *pQuery;. 
305b0 20 4d 65 6d 20 2a 70 41 72 67 63 3b 0a 20 20 73   Mem *pArgc;.  s
305c0 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
305d0 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b  or *pVtabCursor;
305e0 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
305f0 2a 70 56 74 61 62 3b 0a 20 20 56 64 62 65 43 75  *pVtab;.  VdbeCu
30600 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 69 6e  rsor *pCur;.  in
30610 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 69 3b 0a  t res;.  int i;.
30620 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 0a    Mem **apArg;..
30630 20 20 70 51 75 65 72 79 20 3d 20 26 61 4d 65 6d    pQuery = &aMem
30640 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 41 72  [pOp->p3];.  pAr
30650 67 63 20 3d 20 26 70 51 75 65 72 79 5b 31 5d 3b  gc = &pQuery[1];
30660 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43  .  pCur = p->apC
30670 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
30680 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
30690 64 28 70 51 75 65 72 79 29 20 29 3b 0a 20 20 52  d(pQuery) );.  R
306a0 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
306b0 70 2d 3e 70 33 2c 20 70 51 75 65 72 79 29 3b 0a  p->p3, pQuery);.
306c0 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e    assert( pCur->
306d0 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20  pVtabCursor );. 
306e0 20 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20 70   pVtabCursor = p
306f0 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
30700 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 56 74 61  ;.  pVtab = pVta
30710 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a  bCursor->pVtab;.
30720 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
30730 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f  b->pModule;..  /
30740 2a 20 47 72 61 62 20 74 68 65 20 69 6e 64 65 78  * Grab the index
30750 20 6e 75 6d 62 65 72 20 61 6e 64 20 61 72 67 63   number and argc
30760 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20   parameters */. 
30770 20 61 73 73 65 72 74 28 20 28 70 51 75 65 72 79   assert( (pQuery
30780 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29  ->flags&MEM_Int)
30790 21 3d 30 20 26 26 20 70 41 72 67 63 2d 3e 66 6c  !=0 && pArgc->fl
307a0 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a  ags==MEM_Int );.
307b0 20 20 6e 41 72 67 20 3d 20 28 69 6e 74 29 70 41    nArg = (int)pA
307c0 72 67 63 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65  rgc->u.i;.  iQue
307d0 72 79 20 3d 20 28 69 6e 74 29 70 51 75 65 72 79  ry = (int)pQuery
307e0 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76  ->u.i;..  /* Inv
307f0 6f 6b 65 20 74 68 65 20 78 46 69 6c 74 65 72 20  oke the xFilter 
30800 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 7b 0a 20 20  method */.  {.  
30810 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 61    res = 0;.    a
30820 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b  pArg = p->apArg;
30830 0a 20 20 20 20 66 6f 72 28 69 20 3d 20 30 3b 20  .    for(i = 0; 
30840 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20  i<nArg; i++){.  
30850 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 26      apArg[i] = &
30860 70 41 72 67 63 5b 69 2b 31 5d 3b 0a 20 20 20 20  pArgc[i+1];.    
30870 7d 0a 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61 62  }..    p->inVtab
30880 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20 20 20  Method = 1;.    
30890 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 46  rc = pModule->xF
308a0 69 6c 74 65 72 28 70 56 74 61 62 43 75 72 73 6f  ilter(pVtabCurso
308b0 72 2c 20 69 51 75 65 72 79 2c 20 70 4f 70 2d 3e  r, iQuery, pOp->
308c0 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61 70 41 72  p4.z, nArg, apAr
308d0 67 29 3b 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61  g);.    p->inVta
308e0 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 20  bMethod = 0;.   
308f0 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
30900 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61  rtErrmsg(p, pVta
30910 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  b);.    if( rc==
30920 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
30930 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65     res = pModule
30940 2d 3e 78 45 6f 66 28 70 56 74 61 62 43 75 72 73  ->xEof(pVtabCurs
30950 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 56  or);.    }.    V
30960 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
30970 65 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66  es!=0,2);.    if
30980 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 70  ( res ){.      p
30990 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
309a0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 75  .    }.  }.  pCu
309b0 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  r->nullRow = 0;.
309c0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
309d0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
309e0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
309f0 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
30a00 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
30a10 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
30a20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20  Column P1 P2 P3 
30a30 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
30a40 20 72 5b 50 33 5d 3d 76 63 6f 6c 75 6d 6e 28 50   r[P3]=vcolumn(P
30a50 32 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74  2).**.** Store t
30a60 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
30a70 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a  P2-th column of.
30a80 2a 2a 20 74 68 65 20 72 6f 77 20 6f 66 20 74 68  ** the row of th
30a90 65 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20  e virtual-table 
30aa0 74 68 61 74 20 74 68 65 20 0a 2a 2a 20 50 31 20  that the .** P1 
30ab0 63 75 72 73 6f 72 20 69 73 20 70 6f 69 6e 74 69  cursor is pointi
30ac0 6e 67 20 74 6f 20 69 6e 74 6f 20 72 65 67 69 73  ng to into regis
30ad0 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20  ter P3..*/.case 
30ae0 4f 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20  OP_VColumn: {.  
30af0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
30b00 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  tab;.  const sql
30b10 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
30b20 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 44 65  dule;.  Mem *pDe
30b30 73 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  st;.  sqlite3_co
30b40 6e 74 65 78 74 20 73 43 6f 6e 74 65 78 74 3b 0a  ntext sContext;.
30b50 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
30b60 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
30b70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
30b80 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75  t( pCur->pVtabCu
30b90 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
30ba0 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
30bb0 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
30bc0 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
30bd0 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b    pDest = &aMem[
30be0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41  pOp->p3];.  memA
30bf0 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
30c00 70 44 65 73 74 29 3b 0a 20 20 69 66 28 20 70 43  pDest);.  if( pC
30c10 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  ur->nullRow ){. 
30c20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
30c30 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b  mSetNull(pDest);
30c40 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
30c50 20 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e    pVtab = pCur->
30c60 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74  pVtabCursor->pVt
30c70 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ab;.  pModule = 
30c80 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
30c90 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c    assert( pModul
30ca0 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20  e->xColumn );.  
30cb0 6d 65 6d 73 65 74 28 26 73 43 6f 6e 74 65 78 74  memset(&sContext
30cc0 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 43 6f 6e  , 0, sizeof(sCon
30cd0 74 65 78 74 29 29 3b 0a 20 20 73 43 6f 6e 74 65  text));.  sConte
30ce0 78 74 2e 70 4f 75 74 20 3d 20 70 44 65 73 74 3b  xt.pOut = pDest;
30cf0 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
30d00 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c  g(pDest, MEM_Nul
30d10 6c 29 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75  l);.  rc = pModu
30d20 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43 75 72  le->xColumn(pCur
30d30 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26  ->pVtabCursor, &
30d40 73 43 6f 6e 74 65 78 74 2c 20 70 4f 70 2d 3e 70  sContext, pOp->p
30d50 32 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61  2);.  sqlite3Vta
30d60 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c  bImportErrmsg(p,
30d70 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 73   pVtab);.  if( s
30d80 43 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f 72 20  Context.isError 
30d90 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 43 6f 6e  ){.    rc = sCon
30da0 74 65 78 74 2e 69 73 45 72 72 6f 72 3b 0a 20 20  text.isError;.  
30db0 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43  }.  sqlite3VdbeC
30dc0 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 44  hangeEncoding(pD
30dd0 65 73 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  est, encoding);.
30de0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
30df0 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29  (pOp->p3, pDest)
30e00 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
30e10 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a  LOBSIZE(pDest);.
30e20 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
30e30 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 44 65 73  beMemTooBig(pDes
30e40 74 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  t) ){.    goto t
30e50 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72  oo_big;.  }.  br
30e60 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
30e70 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
30e80 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
30e90 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
30ea0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
30eb0 2a 20 4f 70 63 6f 64 65 3a 20 56 4e 65 78 74 20  * Opcode: VNext 
30ec0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
30ed0 2a 20 41 64 76 61 6e 63 65 20 76 69 72 74 75 61  * Advance virtua
30ee0 6c 20 74 61 62 6c 65 20 50 31 20 74 6f 20 74 68  l table P1 to th
30ef0 65 20 6e 65 78 74 20 72 6f 77 20 69 6e 20 69 74  e next row in it
30f00 73 20 72 65 73 75 6c 74 20 73 65 74 20 61 6e 64  s result set and
30f10 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74  .** jump to inst
30f20 72 75 63 74 69 6f 6e 20 50 32 2e 20 20 4f 72 2c  ruction P2.  Or,
30f30 20 69 66 20 74 68 65 20 76 69 72 74 75 61 6c 20   if the virtual 
30f40 74 61 62 6c 65 20 68 61 73 20 72 65 61 63 68 65  table has reache
30f50 64 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20  d.** the end of 
30f60 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 2c 20  its result set, 
30f70 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
30f80 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
30f90 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
30fa0 73 65 20 4f 50 5f 56 4e 65 78 74 3a 20 7b 20 20  se OP_VNext: {  
30fb0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 73 71   /* jump */.  sq
30fc0 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
30fd0 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74  b;.  const sqlit
30fe0 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
30ff0 6c 65 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  le;.  int res;. 
31000 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
31010 72 3b 0a 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20  r;..  res = 0;. 
31020 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72   pCur = p->apCsr
31030 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
31040 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62  ert( pCur->pVtab
31050 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20  Cursor );.  if( 
31060 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  pCur->nullRow ){
31070 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
31080 20 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e    pVtab = pCur->
31090 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74  pVtabCursor->pVt
310a0 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ab;.  pModule = 
310b0 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
310c0 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c    assert( pModul
310d0 65 2d 3e 78 4e 65 78 74 20 29 3b 0a 0a 20 20 2f  e->xNext );..  /
310e0 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 4e 65  * Invoke the xNe
310f0 78 74 28 29 20 6d 65 74 68 6f 64 20 6f 66 20 74  xt() method of t
31100 68 65 20 6d 6f 64 75 6c 65 2e 20 54 68 65 72 65  he module. There
31110 20 69 73 20 6e 6f 20 77 61 79 20 66 6f 72 20 74   is no way for t
31120 68 65 0a 20 20 2a 2a 20 75 6e 64 65 72 6c 79 69  he.  ** underlyi
31130 6e 67 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ng implementatio
31140 6e 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 65  n to return an e
31150 72 72 6f 72 20 69 66 20 6f 6e 65 20 6f 63 63 75  rror if one occu
31160 72 73 20 64 75 72 69 6e 67 0a 20 20 2a 2a 20 78  rs during.  ** x
31170 4e 65 78 74 28 29 2e 20 49 6e 73 74 65 61 64 2c  Next(). Instead,
31180 20 69 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63   if an error occ
31190 75 72 73 2c 20 74 72 75 65 20 69 73 20 72 65 74  urs, true is ret
311a0 75 72 6e 65 64 20 28 69 6e 64 69 63 61 74 69 6e  urned (indicatin
311b0 67 20 74 68 61 74 20 0a 20 20 2a 2a 20 64 61 74  g that .  ** dat
311c0 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65 29 20  a is available) 
311d0 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20 63 6f  and the error co
311e0 64 65 20 72 65 74 75 72 6e 65 64 20 77 68 65 6e  de returned when
311f0 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a 2a   xColumn or.  **
31200 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65 74 68   some other meth
31210 6f 64 20 69 73 20 6e 65 78 74 20 69 6e 76 6f 6b  od is next invok
31220 65 64 20 6f 6e 20 74 68 65 20 73 61 76 65 20 76  ed on the save v
31230 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72  irtual table cur
31240 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 70 2d 3e 69  sor..  */.  p->i
31250 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 31 3b  nVtabMethod = 1;
31260 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d  .  rc = pModule-
31270 3e 78 4e 65 78 74 28 70 43 75 72 2d 3e 70 56 74  >xNext(pCur->pVt
31280 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 70 2d 3e  abCursor);.  p->
31290 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 30  inVtabMethod = 0
312a0 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 49  ;.  sqlite3VtabI
312b0 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
312c0 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72 63 3d  Vtab);.  if( rc=
312d0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
312e0 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d    res = pModule-
312f0 3e 78 45 6f 66 28 70 43 75 72 2d 3e 70 56 74 61  >xEof(pCur->pVta
31300 62 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20  bCursor);.  }.  
31310 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
31320 21 72 65 73 2c 32 29 3b 0a 20 20 69 66 28 20 21  !res,2);.  if( !
31330 72 65 73 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  res ){.    /* If
31340 20 74 68 65 72 65 20 69 73 20 64 61 74 61 2c 20   there is data, 
31350 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20  jump to P2 */.  
31360 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
31370 20 31 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63   1;.  }.  goto c
31380 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
31390 70 74 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  pt;.}.#endif /* 
313a0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
313b0 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
313c0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
313d0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
313e0 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61 6d 65   Opcode: VRename
313f0 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
31400 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
31410 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  er to a virtual 
31420 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e  table object, an
31430 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
31440 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73  ructure..** This
31450 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
31460 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
31470 67 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64  g xRename method
31480 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  . The value.** i
31490 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
314a0 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 7a   passed as the z
314b0 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 74 6f  Name argument to
314c0 20 74 68 65 20 78 52 65 6e 61 6d 65 20 6d 65 74   the xRename met
314d0 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  hod..*/.case OP_
314e0 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20 73 71 6c  VRename: {.  sql
314f0 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
31500 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d 65 3b 0a  ;.  Mem *pName;.
31510 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e  .  pVtab = pOp->
31520 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b  p4.pVtab->pVtab;
31530 0a 20 20 70 4e 61 6d 65 20 3d 20 26 61 4d 65 6d  .  pName = &aMem
31540 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
31550 65 72 74 28 20 70 56 74 61 62 2d 3e 70 4d 6f 64  ert( pVtab->pMod
31560 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 20 29 3b 0a  ule->xRename );.
31570 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
31580 61 6c 69 64 28 70 4e 61 6d 65 29 20 29 3b 0a 20  alid(pName) );. 
31590 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
315a0 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 52 45 47  Only==0 );.  REG
315b0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
315c0 3e 70 31 2c 20 70 4e 61 6d 65 29 3b 0a 20 20 61  >p1, pName);.  a
315d0 73 73 65 72 74 28 20 70 4e 61 6d 65 2d 3e 66 6c  ssert( pName->fl
315e0 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 29 3b  ags & MEM_Str );
315f0 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4e 61  .  testcase( pNa
31600 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f  me->enc==SQLITE_
31610 55 54 46 38 20 29 3b 0a 20 20 74 65 73 74 63 61  UTF8 );.  testca
31620 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d  se( pName->enc==
31630 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 29  SQLITE_UTF16BE )
31640 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4e  ;.  testcase( pN
31650 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45  ame->enc==SQLITE
31660 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20 20 72 63  _UTF16LE );.  rc
31670 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68   = sqlite3VdbeCh
31680 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4e 61  angeEncoding(pNa
31690 6d 65 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29  me, SQLITE_UTF8)
316a0 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
316b0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20  TE_OK ){.    rc 
316c0 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
316d0 2d 3e 78 52 65 6e 61 6d 65 28 70 56 74 61 62 2c  ->xRename(pVtab,
316e0 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20 20 20   pName->z);.    
316f0 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
31700 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62  tErrmsg(p, pVtab
31710 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65  );.    p->expire
31720 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65  d = 0;.  }.  bre
31730 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
31740 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
31750 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
31760 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70 64 61 74  * Opcode: VUpdat
31770 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
31780 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 64 61  .** Synopsis: da
31790 74 61 3d 72 5b 50 33 40 50 32 5d 0a 2a 2a 0a 2a  ta=r[P3@P2].**.*
317a0 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
317b0 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74  r to a virtual t
317c0 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20  able object, an 
317d0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
317e0 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20  ucture..** This 
317f0 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74  opcode invokes t
31800 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
31810 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64 2e   xUpdate method.
31820 20 50 32 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72   P2 values.** ar
31830 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 6d 65 6d  e contiguous mem
31840 6f 72 79 20 63 65 6c 6c 73 20 73 74 61 72 74 69  ory cells starti
31850 6e 67 20 61 74 20 50 33 20 74 6f 20 70 61 73 73  ng at P3 to pass
31860 20 74 6f 20 74 68 65 20 78 55 70 64 61 74 65 20   to the xUpdate 
31870 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 20  .** invocation. 
31880 54 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  The value in reg
31890 69 73 74 65 72 20 28 50 33 2b 50 32 2d 31 29 20  ister (P3+P2-1) 
318a0 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
318b0 68 65 20 0a 2a 2a 20 70 32 74 68 20 65 6c 65 6d  he .** p2th elem
318c0 65 6e 74 20 6f 66 20 74 68 65 20 61 72 67 76 20  ent of the argv 
318d0 61 72 72 61 79 20 70 61 73 73 65 64 20 74 6f 20  array passed to 
318e0 78 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 54  xUpdate..**.** T
318f0 68 65 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f  he xUpdate metho
31900 64 20 77 69 6c 6c 20 64 6f 20 61 20 44 45 4c 45  d will do a DELE
31910 54 45 20 6f 72 20 61 6e 20 49 4e 53 45 52 54 20  TE or an INSERT 
31920 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20 54 68 65 20  or both..** The 
31930 61 72 67 76 5b 30 5d 20 65 6c 65 6d 65 6e 74 20  argv[0] element 
31940 28 77 68 69 63 68 20 63 6f 72 72 65 73 70 6f 6e  (which correspon
31950 64 73 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c  ds to memory cel
31960 6c 20 50 33 29 0a 2a 2a 20 69 73 20 74 68 65 20  l P3).** is the 
31970 72 6f 77 69 64 20 6f 66 20 61 20 72 6f 77 20 74  rowid of a row t
31980 6f 20 64 65 6c 65 74 65 2e 20 20 49 66 20 61 72  o delete.  If ar
31990 67 76 5b 30 5d 20 69 73 20 4e 55 4c 4c 20 74 68  gv[0] is NULL th
319a0 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c 65 74 69  en no .** deleti
319b0 6f 6e 20 6f 63 63 75 72 73 2e 20 20 54 68 65 20  on occurs.  The 
319c0 61 72 67 76 5b 31 5d 20 65 6c 65 6d 65 6e 74 20  argv[1] element 
319d0 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  is the rowid of 
319e0 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 2e  the new .** row.
319f0 20 20 54 68 69 73 20 63 61 6e 20 62 65 20 4e 55    This can be NU
31a00 4c 4c 20 74 6f 20 68 61 76 65 20 74 68 65 20 76  LL to have the v
31a10 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 65 6c  irtual table sel
31a20 65 63 74 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20  ect the new .** 
31a30 72 6f 77 69 64 20 66 6f 72 20 69 74 73 65 6c 66  rowid for itself
31a40 2e 20 20 54 68 65 20 73 75 62 73 65 71 75 65 6e  .  The subsequen
31a50 74 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 74 68  t elements in th
31a60 65 20 61 72 72 61 79 20 61 72 65 20 0a 2a 2a 20  e array are .** 
31a70 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 63 6f  the values of co
31a80 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 6e 65 77  lumns in the new
31a90 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50   row..**.** If P
31aa0 32 3d 3d 31 20 74 68 65 6e 20 6e 6f 20 69 6e 73  2==1 then no ins
31ab0 65 72 74 20 69 73 20 70 65 72 66 6f 72 6d 65 64  ert is performed
31ac0 2e 20 20 61 72 67 76 5b 30 5d 20 69 73 20 74 68  .  argv[0] is th
31ad0 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a 20 61 20  e rowid of.** a 
31ae0 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 0a 2a  row to delete..*
31af0 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 62 6f 6f  *.** P1 is a boo
31b00 6c 65 61 6e 20 66 6c 61 67 2e 20 49 66 20 69 74  lean flag. If it
31b10 20 69 73 20 73 65 74 20 74 6f 20 74 72 75 65 20   is set to true 
31b20 61 6e 64 20 74 68 65 20 78 55 70 64 61 74 65 20  and the xUpdate 
31b30 63 61 6c 6c 0a 2a 2a 20 69 73 20 73 75 63 63 65  call.** is succe
31b40 73 73 66 75 6c 2c 20 74 68 65 6e 20 74 68 65 20  ssful, then the 
31b50 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62  value returned b
31b60 79 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69  y sqlite3_last_i
31b70 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 0a 2a  nsert_rowid() .*
31b80 2a 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  * is set to the 
31b90 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 77  value of the row
31ba0 69 64 20 66 6f 72 20 74 68 65 20 72 6f 77 20 6a  id for the row j
31bb0 75 73 74 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2a  ust inserted..**
31bc0 0a 2a 2a 20 50 35 20 69 73 20 74 68 65 20 65 72  .** P5 is the er
31bd0 72 6f 72 20 61 63 74 69 6f 6e 73 20 28 4f 45 5f  ror actions (OE_
31be0 52 65 70 6c 61 63 65 2c 20 4f 45 5f 46 61 69 6c  Replace, OE_Fail
31bf0 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 65 74 63  , OE_Ignore, etc
31c00 29 20 74 6f 0a 2a 2a 20 61 70 70 6c 79 20 69 6e  ) to.** apply in
31c10 20 74 68 65 20 63 61 73 65 20 6f 66 20 61 20 63   the case of a c
31c20 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 75 72  onstraint failur
31c30 65 20 6f 6e 20 61 6e 20 69 6e 73 65 72 74 20 6f  e on an insert o
31c40 72 20 75 70 64 61 74 65 2e 0a 2a 2f 0a 63 61 73  r update..*/.cas
31c50 65 20 4f 50 5f 56 55 70 64 61 74 65 3a 20 7b 0a  e OP_VUpdate: {.
31c60 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
31c70 70 56 74 61 62 3b 0a 20 20 73 71 6c 69 74 65 33  pVtab;.  sqlite3
31c80 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
31c90 3b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20  ;.  int nArg;.  
31ca0 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74 65 5f  int i;.  sqlite_
31cb0 69 6e 74 36 34 20 72 6f 77 69 64 3b 0a 20 20 4d  int64 rowid;.  M
31cc0 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 20 20 4d 65  em **apArg;.  Me
31cd0 6d 20 2a 70 58 3b 0a 0a 20 20 61 73 73 65 72 74  m *pX;..  assert
31ce0 28 20 70 4f 70 2d 3e 70 32 3d 3d 31 20 20 20 20  ( pOp->p2==1    
31cf0 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d      || pOp->p5==
31d00 4f 45 5f 46 61 69 6c 20 20 20 7c 7c 20 70 4f 70  OE_Fail   || pOp
31d10 2d 3e 70 35 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63  ->p5==OE_Rollbac
31d20 6b 20 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70  k .       || pOp
31d30 2d 3e 70 35 3d 3d 4f 45 5f 41 62 6f 72 74 20 7c  ->p5==OE_Abort |
31d40 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67  | pOp->p5==OE_Ig
31d50 6e 6f 72 65 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  nore || pOp->p5=
31d60 3d 4f 45 5f 52 65 70 6c 61 63 65 0a 20 20 29 3b  =OE_Replace.  );
31d70 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
31d80 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70  adOnly==0 );.  p
31d90 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Vtab = pOp->p4.p
31da0 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70  Vtab->pVtab;.  p
31db0 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69 74 65  Module = (sqlite
31dc0 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61 62  3_module *)pVtab
31dd0 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 6e 41 72  ->pModule;.  nAr
31de0 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  g = pOp->p2;.  a
31df0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
31e00 70 65 3d 3d 50 34 5f 56 54 41 42 20 29 3b 0a 20  pe==P4_VTAB );. 
31e10 20 69 66 28 20 41 4c 57 41 59 53 28 70 4d 6f 64   if( ALWAYS(pMod
31e20 75 6c 65 2d 3e 78 55 70 64 61 74 65 29 20 29 7b  ule->xUpdate) ){
31e30 0a 20 20 20 20 75 38 20 76 74 61 62 4f 6e 43 6f  .    u8 vtabOnCo
31e40 6e 66 6c 69 63 74 20 3d 20 64 62 2d 3e 76 74 61  nflict = db->vta
31e50 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20  bOnConflict;.   
31e60 20 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72   apArg = p->apAr
31e70 67 3b 0a 20 20 20 20 70 58 20 3d 20 26 61 4d 65  g;.    pX = &aMe
31e80 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
31e90 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b  for(i=0; i<nArg;
31ea0 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73 73   i++){.      ass
31eb0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
31ec0 70 58 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d  pX) );.      mem
31ed0 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
31ee0 20 70 58 29 3b 0a 20 20 20 20 20 20 61 70 41 72   pX);.      apAr
31ef0 67 5b 69 5d 20 3d 20 70 58 3b 0a 20 20 20 20 20  g[i] = pX;.     
31f00 20 70 58 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20   pX++;.    }.   
31f10 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c   db->vtabOnConfl
31f20 69 63 74 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20  ict = pOp->p5;. 
31f30 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d     rc = pModule-
31f40 3e 78 55 70 64 61 74 65 28 70 56 74 61 62 2c 20  >xUpdate(pVtab, 
31f50 6e 41 72 67 2c 20 61 70 41 72 67 2c 20 26 72 6f  nArg, apArg, &ro
31f60 77 69 64 29 3b 0a 20 20 20 20 64 62 2d 3e 76 74  wid);.    db->vt
31f70 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 76  abOnConflict = v
31f80 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20  tabOnConflict;. 
31f90 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d     sqlite3VtabIm
31fa0 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56  portErrmsg(p, pV
31fb0 74 61 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63  tab);.    if( rc
31fc0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70  ==SQLITE_OK && p
31fd0 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 20 20  Op->p1 ){.      
31fe0 61 73 73 65 72 74 28 20 6e 41 72 67 3e 31 20 26  assert( nArg>1 &
31ff0 26 20 61 70 41 72 67 5b 30 5d 20 26 26 20 28 61  & apArg[0] && (a
32000 70 41 72 67 5b 30 5d 2d 3e 66 6c 61 67 73 26 4d  pArg[0]->flags&M
32010 45 4d 5f 4e 75 6c 6c 29 20 29 3b 0a 20 20 20 20  EM_Null) );.    
32020 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20    db->lastRowid 
32030 3d 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 72 6f  = lastRowid = ro
32040 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  wid;.    }.    i
32050 66 28 20 28 72 63 26 30 78 66 66 29 3d 3d 53 51  f( (rc&0xff)==SQ
32060 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20  LITE_CONSTRAINT 
32070 26 26 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62  && pOp->p4.pVtab
32080 2d 3e 62 43 6f 6e 73 74 72 61 69 6e 74 20 29 7b  ->bConstraint ){
32090 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
320a0 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b  p5==OE_Ignore ){
320b0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51  .        rc = SQ
320c0 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 7d  LITE_OK;.      }
320d0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 2d  else{.        p-
320e0 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28  >errorAction = (
320f0 28 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70  (pOp->p5==OE_Rep
32100 6c 61 63 65 29 20 3f 20 4f 45 5f 41 62 6f 72 74  lace) ? OE_Abort
32110 20 3a 20 70 4f 70 2d 3e 70 35 29 3b 0a 20 20 20   : pOp->p5);.   
32120 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
32130 20 20 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65        p->nChange
32140 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ++;.    }.  }.  
32150 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
32160 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
32170 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
32180 23 69 66 6e 64 65 66 20 20 53 51 4c 49 54 45 5f  #ifndef  SQLITE_
32190 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d  OMIT_PAGER_PRAGM
321a0 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61  AS./* Opcode: Pa
321b0 67 65 63 6f 75 6e 74 20 50 31 20 50 32 20 2a 20  gecount P1 P2 * 
321c0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  * *.**.** Write 
321d0 74 68 65 20 63 75 72 72 65 6e 74 20 6e 75 6d 62  the current numb
321e0 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 64  er of pages in d
321f0 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 6d 65  atabase P1 to me
32200 6d 6f 72 79 20 63 65 6c 6c 20 50 32 2e 0a 2a 2f  mory cell P2..*/
32210 0a 63 61 73 65 20 4f 50 5f 50 61 67 65 63 6f 75  .case OP_Pagecou
32220 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  nt: {           
32230 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
32240 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75  ase */.  pOut->u
32250 2e 69 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  .i = sqlite3Btre
32260 65 4c 61 73 74 50 61 67 65 28 64 62 2d 3e 61 44  eLastPage(db->aD
32270 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 29 3b  b[pOp->p1].pBt);
32280 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
32290 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 20 53 51  if...#ifndef  SQ
322a0 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
322b0 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64  PRAGMAS./* Opcod
322c0 65 3a 20 4d 61 78 50 67 63 6e 74 20 50 31 20 50  e: MaxPgcnt P1 P
322d0 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  2 P3 * *.**.** T
322e0 72 79 20 74 6f 20 73 65 74 20 74 68 65 20 6d 61  ry to set the ma
322f0 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74  ximum page count
32300 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 50 31   for database P1
32310 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e   to the value in
32320 20 50 33 2e 0a 2a 2a 20 44 6f 20 6e 6f 74 20 6c   P3..** Do not l
32330 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70  et the maximum p
32340 61 67 65 20 63 6f 75 6e 74 20 66 61 6c 6c 20 62  age count fall b
32350 65 6c 6f 77 20 74 68 65 20 63 75 72 72 65 6e 74  elow the current
32360 20 70 61 67 65 20 63 6f 75 6e 74 20 61 6e 64 0a   page count and.
32370 2a 2a 20 64 6f 20 6e 6f 74 20 63 68 61 6e 67 65  ** do not change
32380 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67   the maximum pag
32390 65 20 63 6f 75 6e 74 20 76 61 6c 75 65 20 69 66  e count value if
323a0 20 50 33 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 53 74   P3==0..**.** St
323b0 6f 72 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  ore the maximum 
323c0 70 61 67 65 20 63 6f 75 6e 74 20 61 66 74 65 72  page count after
323d0 20 74 68 65 20 63 68 61 6e 67 65 20 69 6e 20 72   the change in r
323e0 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
323f0 61 73 65 20 4f 50 5f 4d 61 78 50 67 63 6e 74 3a  ase OP_MaxPgcnt:
32400 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
32410 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
32420 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
32430 6e 74 20 6e 65 77 4d 61 78 3b 0a 20 20 42 74 72  nt newMax;.  Btr
32440 65 65 20 2a 70 42 74 3b 0a 0a 20 20 70 42 74 20  ee *pBt;..  pBt 
32450 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  = db->aDb[pOp->p
32460 31 5d 2e 70 42 74 3b 0a 20 20 6e 65 77 4d 61 78  1].pBt;.  newMax
32470 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d   = 0;.  if( pOp-
32480 3e 70 33 20 29 7b 0a 20 20 20 20 6e 65 77 4d 61  >p3 ){.    newMa
32490 78 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  x = sqlite3Btree
324a0 4c 61 73 74 50 61 67 65 28 70 42 74 29 3b 0a 20  LastPage(pBt);. 
324b0 20 20 20 69 66 28 20 6e 65 77 4d 61 78 20 3c 20     if( newMax < 
324c0 28 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70  (unsigned)pOp->p
324d0 33 20 29 20 6e 65 77 4d 61 78 20 3d 20 28 75 6e  3 ) newMax = (un
324e0 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70 33 3b 0a  signed)pOp->p3;.
324f0 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20    }.  pOut->u.i 
32500 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 61  = sqlite3BtreeMa
32510 78 50 61 67 65 43 6f 75 6e 74 28 70 42 74 2c 20  xPageCount(pBt, 
32520 6e 65 77 4d 61 78 29 3b 0a 20 20 62 72 65 61 6b  newMax);.  break
32530 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20  ;.}.#endif.../* 
32540 4f 70 63 6f 64 65 3a 20 49 6e 69 74 20 2a 20 50  Opcode: Init * P
32550 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
32560 70 73 69 73 3a 20 20 53 74 61 72 74 20 61 74 20  psis:  Start at 
32570 50 32 0a 2a 2a 0a 2a 2a 20 50 72 6f 67 72 61 6d  P2.**.** Program
32580 73 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67  s contain a sing
32590 6c 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  le instance of t
325a0 68 69 73 20 6f 70 63 6f 64 65 20 61 73 20 74 68  his opcode as th
325b0 65 20 76 65 72 79 20 66 69 72 73 74 0a 2a 2a 20  e very first.** 
325c0 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  opcode..**.** If
325d0 20 74 72 61 63 69 6e 67 20 69 73 20 65 6e 61 62   tracing is enab
325e0 6c 65 64 20 28 62 79 20 74 68 65 20 73 71 6c 69  led (by the sqli
325f0 74 65 33 5f 74 72 61 63 65 28 29 29 20 69 6e 74  te3_trace()) int
32600 65 72 66 61 63 65 2c 20 74 68 65 6e 0a 2a 2a 20  erface, then.** 
32610 74 68 65 20 55 54 46 2d 38 20 73 74 72 69 6e 67  the UTF-8 string
32620 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 50 34   contained in P4
32630 20 69 73 20 65 6d 69 74 74 65 64 20 6f 6e 20 74   is emitted on t
32640 68 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61 63  he trace callbac
32650 6b 2e 0a 2a 2a 20 4f 72 20 69 66 20 50 34 20 69  k..** Or if P4 i
32660 73 20 62 6c 61 6e 6b 2c 20 75 73 65 20 74 68 65  s blank, use the
32670 20 73 74 72 69 6e 67 20 72 65 74 75 72 6e 65 64   string returned
32680 20 62 79 20 73 71 6c 69 74 65 33 5f 73 71 6c 28   by sqlite3_sql(
32690 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69  )..**.** If P2 i
326a0 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 6a 75 6d 70  s not zero, jump
326b0 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
326c0 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P2..*/.case OP_I
326d0 6e 69 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  nit: {          
326e0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 63 68 61  /* jump */.  cha
326f0 72 20 2a 7a 54 72 61 63 65 3b 0a 20 20 63 68 61  r *zTrace;.  cha
32700 72 20 2a 7a 3b 0a 0a 20 20 69 66 28 20 70 4f 70  r *z;..  if( pOp
32710 2d 3e 70 32 20 29 7b 0a 20 20 20 20 70 63 20 3d  ->p2 ){.    pc =
32720 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
32730 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  }.#ifndef SQLITE
32740 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 20 20 69 66  _OMIT_TRACE.  if
32750 28 20 64 62 2d 3e 78 54 72 61 63 65 0a 20 20 20  ( db->xTrace.   
32760 26 26 20 21 70 2d 3e 64 6f 69 6e 67 52 65 72 75  && !p->doingReru
32770 6e 0a 20 20 20 26 26 20 28 7a 54 72 61 63 65 20  n.   && (zTrace 
32780 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70  = (pOp->p4.z ? p
32790 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53  Op->p4.z : p->zS
327a0 71 6c 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20  ql))!=0.  ){.   
327b0 20 7a 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65   z = sqlite3Vdbe
327c0 45 78 70 61 6e 64 53 71 6c 28 70 2c 20 7a 54 72  ExpandSql(p, zTr
327d0 61 63 65 29 3b 0a 20 20 20 20 64 62 2d 3e 78 54  ace);.    db->xT
327e0 72 61 63 65 28 64 62 2d 3e 70 54 72 61 63 65 41  race(db->pTraceA
327f0 72 67 2c 20 7a 29 3b 0a 20 20 20 20 73 71 6c 69  rg, z);.    sqli
32800 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a 29  te3DbFree(db, z)
32810 3b 0a 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c  ;.  }.#ifdef SQL
32820 49 54 45 5f 55 53 45 5f 46 43 4e 54 4c 5f 54 52  ITE_USE_FCNTL_TR
32830 41 43 45 0a 20 20 7a 54 72 61 63 65 20 3d 20 28  ACE.  zTrace = (
32840 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d  pOp->p4.z ? pOp-
32850 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29  >p4.z : p->zSql)
32860 3b 0a 20 20 69 66 28 20 7a 54 72 61 63 65 20 29  ;.  if( zTrace )
32870 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20  {.    int i;.   
32880 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e   for(i=0; i<db->
32890 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  nDb; i++){.     
328a0 20 69 66 28 20 44 62 4d 61 73 6b 54 65 73 74 28   if( DbMaskTest(
328b0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 29  p->btreeMask, i)
328c0 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  ==0 ) continue;.
328d0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69        sqlite3_fi
328e0 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 64  le_control(db, d
328f0 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c  b->aDb[i].zName,
32900 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 54 52   SQLITE_FCNTL_TR
32910 41 43 45 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20  ACE, zTrace);.  
32920 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f    }.  }.#endif /
32930 2a 20 53 51 4c 49 54 45 5f 55 53 45 5f 46 43 4e  * SQLITE_USE_FCN
32940 54 4c 5f 54 52 41 43 45 20 2a 2f 0a 23 69 66 64  TL_TRACE */.#ifd
32950 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
32960 20 20 69 66 28 20 28 64 62 2d 3e 66 6c 61 67 73    if( (db->flags
32970 20 26 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61   & SQLITE_SqlTra
32980 63 65 29 21 3d 30 0a 20 20 20 26 26 20 28 7a 54  ce)!=0.   && (zT
32990 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e  race = (pOp->p4.
329a0 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20  z ? pOp->p4.z : 
329b0 70 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a 20 20 29  p->zSql))!=0.  )
329c0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 65 62  {.    sqlite3Deb
329d0 75 67 50 72 69 6e 74 66 28 22 53 51 4c 2d 74 72  ugPrintf("SQL-tr
329e0 61 63 65 3a 20 25 73 5c 6e 22 2c 20 7a 54 72 61  ace: %s\n", zTra
329f0 63 65 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20  ce);.  }.#endif 
32a00 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  /* SQLITE_DEBUG 
32a10 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  */.#endif /* SQL
32a20 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20 2a  ITE_OMIT_TRACE *
32a30 2f 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  /.  break;.}.../
32a40 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70 20 2a  * Opcode: Noop *
32a50 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44   * * * *.**.** D
32a60 6f 20 6e 6f 74 68 69 6e 67 2e 20 20 54 68 69 73  o nothing.  This
32a70 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
32a80 6f 66 74 65 6e 20 75 73 65 66 75 6c 20 61 73 20  often useful as 
32a90 61 20 6a 75 6d 70 0a 2a 2a 20 64 65 73 74 69 6e  a jump.** destin
32aa0 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20  ation..*/./*.** 
32ab0 54 68 65 20 6d 61 67 69 63 20 45 78 70 6c 61 69  The magic Explai
32ac0 6e 20 6f 70 63 6f 64 65 20 61 72 65 20 6f 6e 6c  n opcode are onl
32ad0 79 20 69 6e 73 65 72 74 65 64 20 77 68 65 6e 20  y inserted when 
32ae0 65 78 70 6c 61 69 6e 3d 3d 32 20 28 77 68 69 63  explain==2 (whic
32af0 68 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79 20 77  h.** is to say w
32b00 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20  hen the EXPLAIN 
32b10 51 55 45 52 59 20 50 4c 41 4e 20 73 79 6e 74 61  QUERY PLAN synta
32b20 78 20 69 73 20 75 73 65 64 2e 29 0a 2a 2a 20 54  x is used.).** T
32b30 68 69 73 20 6f 70 63 6f 64 65 20 72 65 63 6f 72  his opcode recor
32b40 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  ds information f
32b50 72 6f 6d 20 74 68 65 20 6f 70 74 69 6d 69 7a 65  rom the optimize
32b60 72 2e 20 20 49 74 20 69 73 20 74 68 65 0a 2a 2a  r.  It is the.**
32b70 20 74 68 65 20 73 61 6d 65 20 61 73 20 61 20 6e   the same as a n
32b80 6f 2d 6f 70 2e 20 20 54 68 69 73 20 6f 70 63 6f  o-op.  This opco
32b90 64 65 73 6e 65 76 65 72 20 61 70 70 65 61 72 73  desnever appears
32ba0 20 69 6e 20 61 20 72 65 61 6c 20 56 4d 20 70 72   in a real VM pr
32bb0 6f 67 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61 75 6c  ogram..*/.defaul
32bc0 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a  t: {          /*
32bd0 20 54 68 69 73 20 69 73 20 72 65 61 6c 6c 79 20   This is really 
32be0 4f 50 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50 5f 45  OP_Noop and OP_E
32bf0 78 70 6c 61 69 6e 20 2a 2f 0a 20 20 61 73 73 65  xplain */.  asse
32c00 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
32c10 3d 4f 50 5f 4e 6f 6f 70 20 7c 7c 20 70 4f 70 2d  =OP_Noop || pOp-
32c20 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c  >opcode==OP_Expl
32c30 61 69 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  ain );.  break;.
32c40 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  }../************
32c50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32c60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32c70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32c80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32c90 2a 0a 2a 2a 20 54 68 65 20 63 61 73 65 73 20 6f  *.** The cases o
32ca0 66 20 74 68 65 20 73 77 69 74 63 68 20 73 74 61  f the switch sta
32cb0 74 65 6d 65 6e 74 20 61 62 6f 76 65 20 74 68 69  tement above thi
32cc0 73 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 61 6c  s line should al
32cd0 6c 20 62 65 20 69 6e 64 65 6e 74 65 64 0a 2a 2a  l be indented.**
32ce0 20 62 79 20 36 20 73 70 61 63 65 73 2e 20 20 42   by 6 spaces.  B
32cf0 75 74 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74  ut the left-most
32d00 20 36 20 73 70 61 63 65 73 20 68 61 76 65 20 62   6 spaces have b
32d10 65 65 6e 20 72 65 6d 6f 76 65 64 20 74 6f 20 69  een removed to i
32d20 6d 70 72 6f 76 65 20 74 68 65 0a 2a 2a 20 72 65  mprove the.** re
32d30 61 64 61 62 69 6c 69 74 79 2e 20 20 46 72 6f 6d  adability.  From
32d40 20 74 68 69 73 20 70 6f 69 6e 74 20 6f 6e 20 64   this point on d
32d50 6f 77 6e 2c 20 74 68 65 20 6e 6f 72 6d 61 6c 20  own, the normal 
32d60 69 6e 64 65 6e 74 61 74 69 6f 6e 20 72 75 6c 65  indentation rule
32d70 73 20 61 72 65 0a 2a 2a 20 72 65 73 74 6f 72 65  s are.** restore
32d80 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  d..*************
32d90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32da0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32db0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32dc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32dd0 2f 0a 20 20 20 20 7d 0a 0a 23 69 66 64 65 66 20  /.    }..#ifdef 
32de0 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20  VDBE_PROFILE.   
32df0 20 7b 0a 20 20 20 20 20 20 75 36 34 20 65 6e 64   {.      u64 end
32e00 54 69 6d 65 20 3d 20 73 71 6c 69 74 65 33 48 77  Time = sqlite3Hw
32e10 74 69 6d 65 28 29 3b 0a 20 20 20 20 20 20 69 66  time();.      if
32e20 28 20 65 6e 64 54 69 6d 65 3e 73 74 61 72 74 20  ( endTime>start 
32e30 29 20 70 4f 70 2d 3e 63 79 63 6c 65 73 20 2b 3d  ) pOp->cycles +=
32e40 20 65 6e 64 54 69 6d 65 20 2d 20 73 74 61 72 74   endTime - start
32e50 3b 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63 6e 74  ;.      pOp->cnt
32e60 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  ++;.    }.#endif
32e70 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c  ..    /* The fol
32e80 6c 6f 77 69 6e 67 20 63 6f 64 65 20 61 64 64 73  lowing code adds
32e90 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68 65 20   nothing to the 
32ea0 61 63 74 75 61 6c 20 66 75 6e 63 74 69 6f 6e 61  actual functiona
32eb0 6c 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20 74  lity.    ** of t
32ec0 68 65 20 70 72 6f 67 72 61 6d 2e 20 20 49 74 20  he program.  It 
32ed0 69 73 20 6f 6e 6c 79 20 68 65 72 65 20 66 6f 72  is only here for
32ee0 20 74 65 73 74 69 6e 67 20 61 6e 64 20 64 65 62   testing and deb
32ef0 75 67 67 69 6e 67 2e 0a 20 20 20 20 2a 2a 20 4f  ugging..    ** O
32f00 6e 20 74 68 65 20 6f 74 68 65 72 20 68 61 6e 64  n the other hand
32f10 2c 20 69 74 20 64 6f 65 73 20 62 75 72 6e 20 43  , it does burn C
32f20 50 55 20 63 79 63 6c 65 73 20 65 76 65 72 79 20  PU cycles every 
32f30 74 69 6d 65 20 74 68 72 6f 75 67 68 0a 20 20 20  time through.   
32f40 20 2a 2a 20 74 68 65 20 65 76 61 6c 75 61 74 6f   ** the evaluato
32f50 72 20 6c 6f 6f 70 2e 20 20 53 6f 20 77 65 20 63  r loop.  So we c
32f60 61 6e 20 6c 65 61 76 65 20 69 74 20 6f 75 74 20  an leave it out 
32f70 77 68 65 6e 20 4e 44 45 42 55 47 20 69 73 20 64  when NDEBUG is d
32f80 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23  efined..    */.#
32f90 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20  ifndef NDEBUG.  
32fa0 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d 2d 31    assert( pc>=-1
32fb0 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b   && pc<p->nOp );
32fc0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
32fd0 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 64 62  DEBUG.    if( db
32fe0 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
32ff0 5f 56 64 62 65 54 72 61 63 65 20 29 7b 0a 20 20  _VdbeTrace ){.  
33000 20 20 20 20 69 66 28 20 72 63 21 3d 30 20 29 20      if( rc!=0 ) 
33010 70 72 69 6e 74 66 28 22 72 63 3d 25 64 5c 6e 22  printf("rc=%d\n"
33020 2c 72 63 29 3b 0a 20 20 20 20 20 20 69 66 28 20  ,rc);.      if( 
33030 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 28  pOp->opflags & (
33040 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45  OPFLG_OUT2_PRERE
33050 4c 45 41 53 45 7c 4f 50 46 4c 47 5f 4f 55 54 32  LEASE|OPFLG_OUT2
33060 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67  ) ){.        reg
33070 69 73 74 65 72 54 72 61 63 65 28 70 4f 70 2d 3e  isterTrace(pOp->
33080 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  p2, &aMem[pOp->p
33090 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  2]);.      }.   
330a0 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c     if( pOp->opfl
330b0 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33  ags & OPFLG_OUT3
330c0 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69   ){.        regi
330d0 73 74 65 72 54 72 61 63 65 28 70 4f 70 2d 3e 70  sterTrace(pOp->p
330e0 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  3, &aMem[pOp->p3
330f0 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ]);.      }.    
33100 7d 0a 23 65 6e 64 69 66 20 20 2f 2a 20 53 51 4c  }.#endif  /* SQL
33110 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23 65 6e  ITE_DEBUG */.#en
33120 64 69 66 20 20 2f 2a 20 4e 44 45 42 55 47 20 2a  dif  /* NDEBUG *
33130 2f 0a 20 20 7d 20 20 2f 2a 20 54 68 65 20 65 6e  /.  }  /* The en
33140 64 20 6f 66 20 74 68 65 20 66 6f 72 28 3b 3b 29  d of the for(;;)
33150 20 6c 6f 6f 70 20 74 68 65 20 6c 6f 6f 70 73 20   loop the loops 
33160 74 68 72 6f 75 67 68 20 6f 70 63 6f 64 65 73 20  through opcodes 
33170 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20 72  */..  /* If we r
33180 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74 2c  each this point,
33190 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 65   it means that e
331a0 78 65 63 75 74 69 6f 6e 20 69 73 20 66 69 6e 69  xecution is fini
331b0 73 68 65 64 20 77 69 74 68 0a 20 20 2a 2a 20 61  shed with.  ** a
331c0 6e 20 65 72 72 6f 72 20 6f 66 20 73 6f 6d 65 20  n error of some 
331d0 6b 69 6e 64 2e 0a 20 20 2a 2f 0a 76 64 62 65 5f  kind..  */.vdbe_
331e0 65 72 72 6f 72 5f 68 61 6c 74 3a 0a 20 20 61 73  error_halt:.  as
331f0 73 65 72 74 28 20 72 63 20 29 3b 0a 20 20 70 2d  sert( rc );.  p-
33200 3e 72 63 20 3d 20 72 63 3b 0a 20 20 74 65 73 74  >rc = rc;.  test
33210 63 61 73 65 28 20 73 71 6c 69 74 65 33 47 6c 6f  case( sqlite3Glo
33220 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d  balConfig.xLog!=
33230 30 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6c  0 );.  sqlite3_l
33240 6f 67 28 72 63 2c 20 22 73 74 61 74 65 6d 65 6e  og(rc, "statemen
33250 74 20 61 62 6f 72 74 73 20 61 74 20 25 64 3a 20  t aborts at %d: 
33260 5b 25 73 5d 20 25 73 22 2c 20 0a 20 20 20 20 20  [%s] %s", .     
33270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 63                pc
33280 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45  , p->zSql, p->zE
33290 72 72 4d 73 67 29 3b 0a 20 20 73 71 6c 69 74 65  rrMsg);.  sqlite
332a0 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20  3VdbeHalt(p);.  
332b0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 49  if( rc==SQLITE_I
332c0 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 20 64 62 2d  OERR_NOMEM ) db-
332d0 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20  >mallocFailed = 
332e0 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  1;.  rc = SQLITE
332f0 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 65  _ERROR;.  if( re
33300 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
33310 3e 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  >0 ){.    sqlite
33320 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28  3ResetOneSchema(
33330 64 62 2c 20 72 65 73 65 74 53 63 68 65 6d 61 4f  db, resetSchemaO
33340 6e 46 61 75 6c 74 2d 31 29 3b 0a 20 20 7d 0a 0a  nFault-1);.  }..
33350 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65    /* This is the
33360 20 6f 6e 6c 79 20 77 61 79 20 6f 75 74 20 6f 66   only way out of
33370 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 2e   this procedure.
33380 20 20 57 65 20 68 61 76 65 20 74 6f 0a 20 20 2a    We have to.  *
33390 2a 20 72 65 6c 65 61 73 65 20 74 68 65 20 6d 75  * release the mu
333a0 74 65 78 65 73 20 6f 6e 20 62 74 72 65 65 73 20  texes on btrees 
333b0 74 68 61 74 20 77 65 72 65 20 61 63 71 75 69 72  that were acquir
333c0 65 64 20 61 74 20 74 68 65 0a 20 20 2a 2a 20 74  ed at the.  ** t
333d0 6f 70 2e 20 2a 2f 0a 76 64 62 65 5f 72 65 74 75  op. */.vdbe_retu
333e0 72 6e 3a 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f  rn:.  db->lastRo
333f0 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b  wid = lastRowid;
33400 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 56 6d  .  testcase( nVm
33410 53 74 65 70 3e 30 20 29 3b 0a 20 20 70 2d 3e 61  Step>0 );.  p->a
33420 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53  Counter[SQLITE_S
33430 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f 53 54 45  TMTSTATUS_VM_STE
33440 50 5d 20 2b 3d 20 28 69 6e 74 29 6e 56 6d 53 74  P] += (int)nVmSt
33450 65 70 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  ep;.  sqlite3Vdb
33460 65 4c 65 61 76 65 28 70 29 3b 0a 20 20 72 65 74  eLeave(p);.  ret
33470 75 72 6e 20 72 63 3b 0a 0a 20 20 2f 2a 20 4a 75  urn rc;..  /* Ju
33480 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 61 20  mp to here if a 
33490 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6c  string or blob l
334a0 61 72 67 65 72 20 74 68 61 6e 20 53 51 4c 49 54  arger than SQLIT
334b0 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 0a 20 20 2a  E_MAX_LENGTH.  *
334c0 2a 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64  * is encountered
334d0 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f 62 69 67 3a 0a  ..  */.too_big:.
334e0 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
334f0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
33500 64 62 2c 20 22 73 74 72 69 6e 67 20 6f 72 20 62  db, "string or b
33510 6c 6f 62 20 74 6f 6f 20 62 69 67 22 29 3b 0a 20  lob too big");. 
33520 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 54 4f 4f   rc = SQLITE_TOO
33530 42 49 47 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65  BIG;.  goto vdbe
33540 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20  _error_halt;..  
33550 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20  /* Jump to here 
33560 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61  if a malloc() fa
33570 69 6c 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65 6d  ils..  */.no_mem
33580 3a 0a 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  :.  db->mallocFa
33590 69 6c 65 64 20 3d 20 31 3b 0a 20 20 73 71 6c 69  iled = 1;.  sqli
335a0 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
335b0 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 6f  >zErrMsg, db, "o
335c0 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22 29 3b 0a  ut of memory");.
335d0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f    rc = SQLITE_NO
335e0 4d 45 4d 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65  MEM;.  goto vdbe
335f0 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20  _error_halt;..  
33600 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20  /* Jump to here 
33610 66 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 6b 69  for any other ki
33620 6e 64 20 6f 66 20 66 61 74 61 6c 20 65 72 72 6f  nd of fatal erro
33630 72 2e 20 20 54 68 65 20 22 72 63 22 20 76 61 72  r.  The "rc" var
33640 69 61 62 6c 65 0a 20 20 2a 2a 20 73 68 6f 75 6c  iable.  ** shoul
33650 64 20 68 6f 6c 64 20 74 68 65 20 65 72 72 6f 72  d hold the error
33660 20 6e 75 6d 62 65 72 2e 0a 20 20 2a 2f 0a 61 62   number..  */.ab
33670 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
33680 3a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 7a  :.  assert( p->z
33690 45 72 72 4d 73 67 3d 3d 30 20 29 3b 0a 20 20 69  ErrMsg==0 );.  i
336a0 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
336b0 6c 65 64 20 29 20 72 63 20 3d 20 53 51 4c 49 54  led ) rc = SQLIT
336c0 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 69 66 28 20 72  E_NOMEM;.  if( r
336d0 63 21 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  c!=SQLITE_IOERR_
336e0 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 73 71 6c  NOMEM ){.    sql
336f0 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
33700 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
33710 25 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72 53  %s", sqlite3ErrS
33720 74 72 28 72 63 29 29 3b 0a 20 20 7d 0a 20 20 67  tr(rc));.  }.  g
33730 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68  oto vdbe_error_h
33740 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20  alt;..  /* Jump 
33750 74 6f 20 68 65 72 65 20 69 66 20 74 68 65 20 73  to here if the s
33760 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
33770 28 29 20 41 50 49 20 73 65 74 73 20 74 68 65 20  () API sets the 
33780 69 6e 74 65 72 72 75 70 74 0a 20 20 2a 2a 20 66  interrupt.  ** f
33790 6c 61 67 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f  lag..  */.abort_
337a0 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74  due_to_interrupt
337b0 3a 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  :.  assert( db->
337c0 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64  u1.isInterrupted
337d0 20 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54   );.  rc = SQLIT
337e0 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70  E_INTERRUPT;.  p
337f0 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 73 71 6c  ->rc = rc;.  sql
33800 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
33810 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
33820 25 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72 53  %s", sqlite3ErrS
33830 74 72 28 72 63 29 29 3b 0a 20 20 67 6f 74 6f 20  tr(rc));.  goto 
33840 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b  vdbe_error_halt;
33850 0a 7d 0a                                         .}.