/ Hex Artifact Content
Login

Artifact e9315575bed64f9aa559151283c873be34143914:


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 43 6c 65 61 72 41 6e 64  3VdbeMemClearAnd
1ef0: 52 65 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79  Resize(pMem, nBy
1f00: 74 65 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70  te) ){.    p->ap
1f10: 43 73 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20  Csr[iCur] = pCx 
1f20: 3d 20 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70  = (VdbeCursor*)p
1f30: 4d 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73  Mem->z;.    mems
1f40: 65 74 28 70 43 78 2c 20 30 2c 20 73 69 7a 65 6f  et(pCx, 0, sizeo
1f50: 66 28 56 64 62 65 43 75 72 73 6f 72 29 29 3b 0a  f(VdbeCursor));.
1f60: 20 20 20 20 70 43 78 2d 3e 69 44 62 20 3d 20 69      pCx->iDb = i
1f70: 44 62 3b 0a 20 20 20 20 70 43 78 2d 3e 6e 46 69  Db;.    pCx->nFi
1f80: 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b 0a 20 20  eld = nField;.  
1f90: 20 20 70 43 78 2d 3e 61 4f 66 66 73 65 74 20 3d    pCx->aOffset =
1fa0: 20 26 70 43 78 2d 3e 61 54 79 70 65 5b 6e 46 69   &pCx->aType[nFi
1fb0: 65 6c 64 5d 3b 0a 20 20 20 20 69 66 28 20 69 73  eld];.    if( is
1fc0: 42 74 72 65 65 43 75 72 73 6f 72 20 29 7b 0a 20  BtreeCursor ){. 
1fd0: 20 20 20 20 20 70 43 78 2d 3e 70 43 75 72 73 6f       pCx->pCurso
1fe0: 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29 0a  r = (BtCursor*).
1ff0: 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d 2d            &pMem-
2000: 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66  >z[ROUND8(sizeof
2010: 28 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32 2a  (VdbeCursor))+2*
2020: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
2030: 6c 64 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ld];.      sqlit
2040: 65 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65 72  e3BtreeCursorZer
2050: 6f 28 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b  o(pCx->pCursor);
2060: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
2070: 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a  urn pCx;.}../*.*
2080: 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74  * Try to convert
2090: 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20   a value into a 
20a0: 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e  numeric represen
20b0: 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61 6e  tation if we can
20c0: 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f 75  .** do so withou
20d0: 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  t loss of inform
20e0: 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ation.  In other
20f0: 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20 73   words, if the s
2100: 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c  tring.** looks l
2110: 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63 6f  ike a number, co
2120: 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61 20  nvert it into a 
2130: 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20 64  number.  If it d
2140: 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20  oes not.** look 
2150: 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 6c  like a number, l
2160: 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a  eave it alone..*
2170: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 62 54 72 79  *.** If the bTry
2180: 46 6f 72 49 6e 74 20 66 6c 61 67 20 69 73 20 74  ForInt flag is t
2190: 72 75 65 2c 20 74 68 65 6e 20 65 78 74 72 61 20  rue, then extra 
21a0: 65 66 66 6f 72 74 20 69 73 20 6d 61 64 65 20 74  effort is made t
21b0: 6f 20 67 69 76 65 0a 2a 2a 20 61 6e 20 69 6e 74  o give.** an int
21c0: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
21d0: 69 6f 6e 2e 20 20 53 74 72 69 6e 67 73 20 74 68  ion.  Strings th
21e0: 61 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 66 6c 6f  at look like flo
21f0: 61 74 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 76  ating point.** v
2200: 61 6c 75 65 73 20 62 75 74 20 77 68 69 63 68 20  alues but which 
2210: 68 61 76 65 20 6e 6f 20 66 72 61 63 74 69 6f 6e  have no fraction
2220: 61 6c 20 63 6f 6d 70 6f 6e 65 6e 74 20 28 65 78  al component (ex
2230: 61 6d 70 6c 65 3a 20 27 34 38 2e 30 30 27 29 0a  ample: '48.00').
2240: 2a 2a 20 77 69 6c 6c 20 68 61 76 65 20 61 20 4d  ** will have a M
2250: 45 4d 5f 49 6e 74 20 72 65 70 72 65 73 65 6e 74  EM_Int represent
2260: 61 74 69 6f 6e 20 77 68 65 6e 20 62 54 72 79 46  ation when bTryF
2270: 6f 72 49 6e 74 20 69 73 20 74 72 75 65 2e 0a 2a  orInt is true..*
2280: 2a 0a 2a 2a 20 49 66 20 62 54 72 79 46 6f 72 49  *.** If bTryForI
2290: 6e 74 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65  nt is false, the
22a0: 6e 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 73  n if the input s
22b0: 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 73 20 61  tring contains a
22c0: 20 64 65 63 69 6d 61 6c 0a 2a 2a 20 70 6f 69 6e   decimal.** poin
22d0: 74 20 6f 72 20 65 78 70 6f 6e 65 6e 74 69 61 6c  t or exponential
22e0: 20 6e 6f 74 61 74 69 6f 6e 2c 20 74 68 65 20 72   notation, the r
22f0: 65 73 75 6c 74 20 69 73 20 6f 6e 6c 79 20 4d 45  esult is only ME
2300: 4d 5f 52 65 61 6c 2c 20 65 76 65 6e 0a 2a 2a 20  M_Real, even.** 
2310: 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 65  if there is an e
2320: 78 61 63 74 20 69 6e 74 65 67 65 72 20 72 65 70  xact integer rep
2330: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
2340: 68 65 20 71 75 61 6e 74 69 74 79 2e 0a 2a 2f 0a  he quantity..*/.
2350: 73 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c  static void appl
2360: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
2370: 28 4d 65 6d 20 2a 70 52 65 63 2c 20 69 6e 74 20  (Mem *pRec, int 
2380: 62 54 72 79 46 6f 72 49 6e 74 29 7b 0a 20 20 64  bTryForInt){.  d
2390: 6f 75 62 6c 65 20 72 56 61 6c 75 65 3b 0a 20 20  ouble rValue;.  
23a0: 69 36 34 20 69 56 61 6c 75 65 3b 0a 20 20 75 38  i64 iValue;.  u8
23b0: 20 65 6e 63 20 3d 20 70 52 65 63 2d 3e 65 6e 63   enc = pRec->enc
23c0: 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 52 65  ;.  assert( (pRe
23d0: 63 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  c->flags & (MEM_
23e0: 53 74 72 7c 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  Str|MEM_Int|MEM_
23f0: 52 65 61 6c 29 29 3d 3d 4d 45 4d 5f 53 74 72 20  Real))==MEM_Str 
2400: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
2410: 41 74 6f 46 28 70 52 65 63 2d 3e 7a 2c 20 26 72  AtoF(pRec->z, &r
2420: 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20  Value, pRec->n, 
2430: 65 6e 63 29 3d 3d 30 20 29 20 72 65 74 75 72 6e  enc)==0 ) return
2440: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
2450: 65 33 41 74 6f 69 36 34 28 70 52 65 63 2d 3e 7a  e3Atoi64(pRec->z
2460: 2c 20 26 69 56 61 6c 75 65 2c 20 70 52 65 63 2d  , &iValue, pRec-
2470: 3e 6e 2c 20 65 6e 63 29 20 29 7b 0a 20 20 20 20  >n, enc) ){.    
2480: 70 52 65 63 2d 3e 75 2e 69 20 3d 20 69 56 61 6c  pRec->u.i = iVal
2490: 75 65 3b 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c  ue;.    pRec->fl
24a0: 61 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  ags |= MEM_Int;.
24b0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 52 65    }else{.    pRe
24c0: 63 2d 3e 75 2e 72 20 3d 20 72 56 61 6c 75 65 3b  c->u.r = rValue;
24d0: 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73  .    pRec->flags
24e0: 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20   |= MEM_Real;.  
24f0: 20 20 69 66 28 20 62 54 72 79 46 6f 72 49 6e 74    if( bTryForInt
2500: 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   ) sqlite3VdbeIn
2510: 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 52  tegerAffinity(pR
2520: 65 63 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a  ec);.  }.}../*.*
2530: 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 69 73 20  * Processing is 
2540: 64 65 74 65 72 6d 69 6e 65 20 62 79 20 74 68 65  determine by the
2550: 20 61 66 66 69 6e 69 74 79 20 70 61 72 61 6d 65   affinity parame
2560: 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54  ter:.**.** SQLIT
2570: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a  E_AFF_INTEGER:.*
2580: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  * SQLITE_AFF_REA
2590: 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  L:.** SQLITE_AFF
25a0: 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20  _NUMERIC:.**    
25b0: 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 70  Try to convert p
25c0: 52 65 63 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  Rec to an intege
25d0: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
25e0: 20 6f 72 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f   or a .**    flo
25f0: 61 74 69 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72  ating-point repr
2600: 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e  esentation if an
2610: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
2620: 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73  ntation.**    is
2630: 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2e 20 20   not possible.  
2640: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 69 6e  Note that the in
2650: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
2660: 74 69 6f 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c  tion is.**    al
2670: 77 61 79 73 20 70 72 65 66 65 72 72 65 64 2c 20  ways preferred, 
2680: 65 76 65 6e 20 69 66 20 74 68 65 20 61 66 66 69  even if the affi
2690: 6e 69 74 79 20 69 73 20 52 45 41 4c 2c 20 62 65  nity is REAL, be
26a0: 63 61 75 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69  cause.**    an i
26b0: 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74  nteger represent
26c0: 61 74 69 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70  ation is more sp
26d0: 61 63 65 20 65 66 66 69 63 69 65 6e 74 20 6f 6e  ace efficient on
26e0: 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c   disk..**.** SQL
26f0: 49 54 45 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a  ITE_AFF_TEXT:.**
2700: 20 20 20 20 43 6f 6e 76 65 72 74 20 70 52 65 63      Convert pRec
2710: 20 74 6f 20 61 20 74 65 78 74 20 72 65 70 72 65   to a text repre
2720: 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  sentation..**.**
2730: 20 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42   SQLITE_AFF_BLOB
2740: 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20  :.**    No-op.  
2750: 70 52 65 63 20 69 73 20 75 6e 63 68 61 6e 67 65  pRec is unchange
2760: 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  d..*/.static voi
2770: 64 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28  d applyAffinity(
2780: 0a 20 20 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20  .  Mem *pRec,   
2790: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76 61         /* The va
27a0: 6c 75 65 20 74 6f 20 61 70 70 6c 79 20 61 66 66  lue to apply aff
27b0: 69 6e 69 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68  inity to */.  ch
27c0: 61 72 20 61 66 66 69 6e 69 74 79 2c 20 20 20 20  ar affinity,    
27d0: 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
27e0: 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20  y to be applied 
27f0: 2a 2f 0a 20 20 75 38 20 65 6e 63 20 20 20 20 20  */.  u8 enc     
2800: 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20           /* Use 
2810: 74 68 69 73 20 74 65 78 74 20 65 6e 63 6f 64 69  this text encodi
2820: 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61  ng */.){.  if( a
2830: 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f  ffinity>=SQLITE_
2840: 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20  AFF_NUMERIC ){. 
2850: 20 20 20 61 73 73 65 72 74 28 20 61 66 66 69 6e     assert( affin
2860: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
2870: 49 4e 54 45 47 45 52 20 7c 7c 20 61 66 66 69 6e  INTEGER || affin
2880: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
2890: 52 45 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20  REAL.           
28a0: 20 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53    || affinity==S
28b0: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
28c0: 43 20 29 3b 0a 20 20 20 20 69 66 28 20 28 70 52  C );.    if( (pR
28d0: 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ec->flags & MEM_
28e0: 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  Int)==0 ){.     
28f0: 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67   if( (pRec->flag
2900: 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30  s & MEM_Real)==0
2910: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
2920: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pRec->flags & ME
2930: 4d 5f 53 74 72 20 29 20 61 70 70 6c 79 4e 75 6d  M_Str ) applyNum
2940: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 52 65  ericAffinity(pRe
2950: 63 2c 31 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  c,1);.      }els
2960: 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
2970: 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66 66  e3VdbeIntegerAff
2980: 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20 20  inity(pRec);.   
2990: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c     }.    }.  }el
29a0: 73 65 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d  se if( affinity=
29b0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54  =SQLITE_AFF_TEXT
29c0: 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20   ){.    /* Only 
29d0: 61 74 74 65 6d 70 74 20 74 68 65 20 63 6f 6e 76  attempt the conv
29e0: 65 72 73 69 6f 6e 20 74 6f 20 54 45 58 54 20 69  ersion to TEXT i
29f0: 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e  f there is an in
2a00: 74 65 67 65 72 20 6f 72 20 72 65 61 6c 0a 20 20  teger or real.  
2a10: 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74    ** representat
2a20: 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55  ion (blob and NU
2a30: 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f  LL do not get co
2a40: 6e 76 65 72 74 65 64 29 20 62 75 74 20 6e 6f 20  nverted) but no 
2a50: 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65  string.    ** re
2a60: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 20 20  presentation..  
2a70: 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d    */.    if( 0==
2a80: 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pRec->flags&MEM
2a90: 5f 53 74 72 29 20 26 26 20 28 70 52 65 63 2d 3e  _Str) && (pRec->
2aa0: 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61 6c 7c  flags&(MEM_Real|
2ab0: 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20 20 20  MEM_Int)) ){.   
2ac0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2ad0: 6d 53 74 72 69 6e 67 69 66 79 28 70 52 65 63 2c  mStringify(pRec,
2ae0: 20 65 6e 63 2c 20 31 29 3b 0a 20 20 20 20 7d 0a   enc, 1);.    }.
2af0: 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20      pRec->flags 
2b00: 26 3d 20 7e 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45  &= ~(MEM_Real|ME
2b10: 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f  M_Int);.  }.}../
2b20: 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76  *.** Try to conv
2b30: 65 72 74 20 74 68 65 20 74 79 70 65 20 6f 66 20  ert the type of 
2b40: 61 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d  a function argum
2b50: 65 6e 74 20 6f 72 20 61 20 72 65 73 75 6c 74 20  ent or a result 
2b60: 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61  column.** into a
2b70: 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65   numeric represe
2b80: 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65 20 65 69  ntation.  Use ei
2b90: 74 68 65 72 20 49 4e 54 45 47 45 52 20 6f 72 20  ther INTEGER or 
2ba0: 52 45 41 4c 20 77 68 69 63 68 65 76 65 72 0a 2a  REAL whichever.*
2bb0: 2a 20 69 73 20 61 70 70 72 6f 70 72 69 61 74 65  * is appropriate
2bc0: 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20 74  .  But only do t
2bd0: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 66  he conversion if
2be0: 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
2bf0: 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20  without.** loss 
2c00: 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  of information a
2c10: 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20 72 65  nd return the re
2c20: 76 69 73 65 64 20 74 79 70 65 20 6f 66 20 74 68  vised type of th
2c30: 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69  e argument..*/.i
2c40: 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt sqlite3_value
2c50: 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73 71  _numeric_type(sq
2c60: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
2c70: 6c 29 7b 0a 20 20 69 6e 74 20 65 54 79 70 65 20  l){.  int eType 
2c80: 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  = sqlite3_value_
2c90: 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 69 66  type(pVal);.  if
2ca0: 28 20 65 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f  ( eType==SQLITE_
2cb0: 54 45 58 54 20 29 7b 0a 20 20 20 20 4d 65 6d 20  TEXT ){.    Mem 
2cc0: 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70 56  *pMem = (Mem*)pV
2cd0: 61 6c 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75 6d  al;.    applyNum
2ce0: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d 65  ericAffinity(pMe
2cf0: 6d 2c 20 30 29 3b 0a 20 20 20 20 65 54 79 70 65  m, 0);.    eType
2d00: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
2d10: 5f 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 7d  _type(pVal);.  }
2d20: 0a 20 20 72 65 74 75 72 6e 20 65 54 79 70 65 3b  .  return eType;
2d30: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74  .}../*.** Export
2d40: 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61 70  ed version of ap
2d50: 70 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20 54  plyAffinity(). T
2d60: 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e  his one works on
2d70: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c   sqlite3_value*,
2d80: 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e 74   .** not the int
2d90: 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65 2e  ernal Mem* type.
2da0: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
2db0: 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69  ValueApplyAffini
2dc0: 74 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  ty(.  sqlite3_va
2dd0: 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75 38  lue *pVal, .  u8
2de0: 20 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75 38   affinity, .  u8
2df0: 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79 41   enc.){.  applyA
2e00: 66 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29 70  ffinity((Mem *)p
2e10: 56 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20 65  Val, affinity, e
2e20: 6e 63 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70 4d  nc);.}../*.** pM
2e30: 65 6d 20 63 75 72 72 65 6e 74 6c 79 20 6f 6e 6c  em currently onl
2e40: 79 20 68 6f 6c 64 73 20 61 20 73 74 72 69 6e 67  y holds a string
2e50: 20 74 79 70 65 20 28 6f 72 20 6d 61 79 62 65 20   type (or maybe 
2e60: 61 20 42 4c 4f 42 20 74 68 61 74 20 77 65 20 63  a BLOB that we c
2e70: 61 6e 0a 2a 2a 20 69 6e 74 65 72 70 72 65 74 20  an.** interpret 
2e80: 61 73 20 61 20 73 74 72 69 6e 67 20 69 66 20 77  as a string if w
2e90: 65 20 77 61 6e 74 20 74 6f 29 2e 20 20 43 6f 6d  e want to).  Com
2ea0: 70 75 74 65 20 69 74 73 20 63 6f 72 72 65 73 70  pute its corresp
2eb0: 6f 6e 64 69 6e 67 0a 2a 2a 20 6e 75 6d 65 72 69  onding.** numeri
2ec0: 63 20 74 79 70 65 2c 20 69 66 20 68 61 73 20 6f  c type, if has o
2ed0: 6e 65 2e 20 20 53 65 74 20 74 68 65 20 70 4d 65  ne.  Set the pMe
2ee0: 6d 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d 2d  m->u.r and pMem-
2ef0: 3e 75 2e 69 20 66 69 65 6c 64 73 0a 2a 2a 20 61  >u.i fields.** a
2f00: 63 63 6f 72 64 69 6e 67 6c 79 2e 0a 2a 2f 0a 73  ccordingly..*/.s
2f10: 74 61 74 69 63 20 75 31 36 20 53 51 4c 49 54 45  tatic u16 SQLITE
2f20: 5f 4e 4f 49 4e 4c 49 4e 45 20 63 6f 6d 70 75 74  _NOINLINE comput
2f30: 65 4e 75 6d 65 72 69 63 54 79 70 65 28 4d 65 6d  eNumericType(Mem
2f40: 20 2a 70 4d 65 6d 29 7b 0a 20 20 61 73 73 65 72   *pMem){.  asser
2f50: 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  t( (pMem->flags 
2f60: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
2f70: 65 61 6c 29 29 3d 3d 30 20 29 3b 0a 20 20 61 73  eal))==0 );.  as
2f80: 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61  sert( (pMem->fla
2f90: 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
2fa0: 4d 5f 42 6c 6f 62 29 29 21 3d 30 20 29 3b 0a 20  M_Blob))!=0 );. 
2fb0: 20 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 46   if( sqlite3AtoF
2fc0: 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d  (pMem->z, &pMem-
2fd0: 3e 75 2e 72 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70  >u.r, pMem->n, p
2fe0: 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a  Mem->enc)==0 ){.
2ff0: 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20      return 0;.  
3000: 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 41  }.  if( sqlite3A
3010: 74 6f 69 36 34 28 70 4d 65 6d 2d 3e 7a 2c 20 26  toi64(pMem->z, &
3020: 70 4d 65 6d 2d 3e 75 2e 69 2c 20 70 4d 65 6d 2d  pMem->u.i, pMem-
3030: 3e 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d  >n, pMem->enc)==
3040: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
3050: 20 72 65 74 75 72 6e 20 4d 45 4d 5f 49 6e 74 3b   return MEM_Int;
3060: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 4d 45  .  }.  return ME
3070: 4d 5f 52 65 61 6c 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  M_Real;.}../*.**
3080: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 65   Return the nume
3090: 72 69 63 20 74 79 70 65 20 66 6f 72 20 70 4d 65  ric type for pMe
30a0: 6d 2c 20 65 69 74 68 65 72 20 4d 45 4d 5f 49 6e  m, either MEM_In
30b0: 74 20 6f 72 20 4d 45 4d 5f 52 65 61 6c 20 6f 72  t or MEM_Real or
30c0: 20 62 6f 74 68 20 6f 72 0a 2a 2a 20 6e 6f 6e 65   both or.** none
30d0: 2e 20 20 0a 2a 2a 0a 2a 2a 20 55 6e 6c 69 6b 65  .  .**.** Unlike
30e0: 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   applyNumericAff
30f0: 69 6e 69 74 79 28 29 2c 20 74 68 69 73 20 72 6f  inity(), this ro
3100: 75 74 69 6e 65 20 64 6f 65 73 20 6e 6f 74 20 6d  utine does not m
3110: 6f 64 69 66 79 20 70 4d 65 6d 2d 3e 66 6c 61 67  odify pMem->flag
3120: 73 2e 0a 2a 2a 20 42 75 74 20 69 74 20 64 6f 65  s..** But it doe
3130: 73 20 73 65 74 20 70 4d 65 6d 2d 3e 75 2e 72 20  s set pMem->u.r 
3140: 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69 20 61 70  and pMem->u.i ap
3150: 70 72 6f 70 72 69 61 74 65 6c 79 2e 0a 2a 2f 0a  propriately..*/.
3160: 73 74 61 74 69 63 20 75 31 36 20 6e 75 6d 65 72  static u16 numer
3170: 69 63 54 79 70 65 28 4d 65 6d 20 2a 70 4d 65 6d  icType(Mem *pMem
3180: 29 7b 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e 66  ){.  if( pMem->f
3190: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c  lags & (MEM_Int|
31a0: 4d 45 4d 5f 52 65 61 6c 29 20 29 7b 0a 20 20 20  MEM_Real) ){.   
31b0: 20 72 65 74 75 72 6e 20 70 4d 65 6d 2d 3e 66 6c   return pMem->fl
31c0: 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  ags & (MEM_Int|M
31d0: 45 4d 5f 52 65 61 6c 29 3b 0a 20 20 7d 0a 20 20  EM_Real);.  }.  
31e0: 69 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  if( pMem->flags 
31f0: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
3200: 6c 6f 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75  lob) ){.    retu
3210: 72 6e 20 63 6f 6d 70 75 74 65 4e 75 6d 65 72 69  rn computeNumeri
3220: 63 54 79 70 65 28 70 4d 65 6d 29 3b 0a 20 20 7d  cType(pMem);.  }
3230: 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a  .  return 0;.}..
3240: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
3250: 42 55 47 0a 2f 2a 0a 2a 2a 20 57 72 69 74 65 20  BUG./*.** Write 
3260: 61 20 6e 69 63 65 20 73 74 72 69 6e 67 20 72 65  a nice string re
3270: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
3280: 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20  the contents of 
3290: 63 65 6c 6c 20 70 4d 65 6d 0a 2a 2a 20 69 6e 74  cell pMem.** int
32a0: 6f 20 62 75 66 66 65 72 20 7a 42 75 66 2c 20 6c  o buffer zBuf, l
32b0: 65 6e 67 74 68 20 6e 42 75 66 2e 0a 2a 2f 0a 76  ength nBuf..*/.v
32c0: 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 4d  oid sqlite3VdbeM
32d0: 65 6d 50 72 65 74 74 79 50 72 69 6e 74 28 4d 65  emPrettyPrint(Me
32e0: 6d 20 2a 70 4d 65 6d 2c 20 63 68 61 72 20 2a 7a  m *pMem, char *z
32f0: 42 75 66 29 7b 0a 20 20 63 68 61 72 20 2a 7a 43  Buf){.  char *zC
3300: 73 72 20 3d 20 7a 42 75 66 3b 0a 20 20 69 6e 74  sr = zBuf;.  int
3310: 20 66 20 3d 20 70 4d 65 6d 2d 3e 66 6c 61 67 73   f = pMem->flags
3320: 3b 0a 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73  ;..  static cons
3330: 74 20 63 68 61 72 20 2a 63 6f 6e 73 74 20 65 6e  t char *const en
3340: 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 22 28 58 29  cnames[] = {"(X)
3350: 22 2c 20 22 28 38 29 22 2c 20 22 28 31 36 4c 45  ", "(8)", "(16LE
3360: 29 22 2c 20 22 28 31 36 42 45 29 22 7d 3b 0a 0a  )", "(16BE)"};..
3370: 20 20 69 66 28 20 66 26 4d 45 4d 5f 42 6c 6f 62    if( f&MEM_Blob
3380: 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   ){.    int i;. 
3390: 20 20 20 63 68 61 72 20 63 3b 0a 20 20 20 20 69     char c;.    i
33a0: 66 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29  f( f & MEM_Dyn )
33b0: 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 7a 27 3b  {.      c = 'z';
33c0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
33d0: 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c  f & (MEM_Static|
33e0: 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29  MEM_Ephem))==0 )
33f0: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
3400: 66 20 26 20 4d 45 4d 5f 53 74 61 74 69 63 20 29  f & MEM_Static )
3410: 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 74 27 3b  {.      c = 't';
3420: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
3430: 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d  f & (MEM_Dyn|MEM
3440: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
3450: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
3460: 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20   MEM_Ephem ){.  
3470: 20 20 20 20 63 20 3d 20 27 65 27 3b 0a 20 20 20      c = 'e';.   
3480: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3490: 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  (MEM_Static|MEM_
34a0: 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  Dyn))==0 );.    
34b0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 63 20 3d  }else{.      c =
34c0: 20 27 73 27 3b 0a 20 20 20 20 7d 0a 0a 20 20 20   's';.    }..   
34d0: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
34e0: 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 63  f(100, zCsr, "%c
34f0: 22 2c 20 63 29 3b 0a 20 20 20 20 7a 43 73 72 20  ", c);.    zCsr 
3500: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3510: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 73 71  30(zCsr);.    sq
3520: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
3530: 30 30 2c 20 7a 43 73 72 2c 20 22 25 64 5b 22 2c  00, zCsr, "%d[",
3540: 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a   pMem->n);.    z
3550: 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74  Csr += sqlite3St
3560: 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20  rlen30(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 73 71 6c 69 74 65  +){.      sqlite
35a0: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
35b0: 7a 43 73 72 2c 20 22 25 30 32 58 22 2c 20 28 28  zCsr, "%02X", ((
35c0: 69 6e 74 29 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26  int)pMem->z[i] &
35d0: 20 30 78 46 46 29 29 3b 0a 20 20 20 20 20 20 7a   0xFF));.      z
35e0: 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74  Csr += sqlite3St
35f0: 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20  rlen30(zCsr);.  
3600: 20 20 7d 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b    }.    for(i=0;
3610: 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d   i<16 && i<pMem-
3620: 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  >n; i++){.      
3630: 63 68 61 72 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a  char z = pMem->z
3640: 5b 69 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 7a  [i];.      if( z
3650: 3c 33 32 20 7c 7c 20 7a 3e 31 32 36 20 29 20 2a  <32 || z>126 ) *
3660: 7a 43 73 72 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20  zCsr++ = '.';.  
3670: 20 20 20 20 65 6c 73 65 20 2a 7a 43 73 72 2b 2b      else *zCsr++
3680: 20 3d 20 7a 3b 0a 20 20 20 20 7d 0a 0a 20 20 20   = z;.    }..   
3690: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
36a0: 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 5d 25  f(100, zCsr, "]%
36b0: 73 22 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65  s", encnames[pMe
36c0: 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 7a 43  m->enc]);.    zC
36d0: 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72  sr += sqlite3Str
36e0: 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20  len30(zCsr);.   
36f0: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 5a 65 72   if( f & MEM_Zer
3700: 6f 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  o ){.      sqlit
3710: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
3720: 20 7a 43 73 72 2c 22 2b 25 64 7a 22 2c 70 4d 65   zCsr,"+%dz",pMe
3730: 6d 2d 3e 75 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20  m->u.nZero);.   
3740: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
3750: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
3760: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 7a 43 73  ;.    }.    *zCs
3770: 72 20 3d 20 27 5c 30 27 3b 0a 20 20 7d 65 6c 73  r = '\0';.  }els
3780: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74  e if( f & MEM_St
3790: 72 20 29 7b 0a 20 20 20 20 69 6e 74 20 6a 2c 20  r ){.    int j, 
37a0: 6b 3b 0a 20 20 20 20 7a 42 75 66 5b 30 5d 20 3d  k;.    zBuf[0] =
37b0: 20 27 20 27 3b 0a 20 20 20 20 69 66 28 20 66 20   ' ';.    if( f 
37c0: 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20  & MEM_Dyn ){.   
37d0: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 7a 27     zBuf[1] = 'z'
37e0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
37f0: 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63  (f & (MEM_Static
3800: 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20  |MEM_Ephem))==0 
3810: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
3820: 20 66 20 26 20 4d 45 4d 5f 53 74 61 74 69 63 20   f & MEM_Static 
3830: 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d  ){.      zBuf[1]
3840: 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61 73   = 't';.      as
3850: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
3860: 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  Dyn|MEM_Ephem))=
3870: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
3880: 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68 65  if( f & MEM_Ephe
3890: 6d 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b  m ){.      zBuf[
38a0: 31 5d 20 3d 20 27 65 27 3b 0a 20 20 20 20 20 20  1] = 'e';.      
38b0: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
38c0: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e  M_Static|MEM_Dyn
38d0: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
38e0: 73 65 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31  se{.      zBuf[1
38f0: 5d 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a 20  ] = 's';.    }. 
3900: 20 20 20 6b 20 3d 20 32 3b 0a 20 20 20 20 73 71     k = 2;.    sq
3910: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
3920: 30 30 2c 20 26 7a 42 75 66 5b 6b 5d 2c 20 22 25  00, &zBuf[k], "%
3930: 64 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20  d", pMem->n);.  
3940: 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33 53 74    k += sqlite3St
3950: 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29  rlen30(&zBuf[k])
3960: 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20  ;.    zBuf[k++] 
3970: 3d 20 27 5b 27 3b 0a 20 20 20 20 66 6f 72 28 6a  = '[';.    for(j
3980: 3d 30 3b 20 6a 3c 31 35 20 26 26 20 6a 3c 70 4d  =0; j<15 && j<pM
3990: 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20  em->n; j++){.   
39a0: 20 20 20 75 38 20 63 20 3d 20 70 4d 65 6d 2d 3e     u8 c = pMem->
39b0: 7a 5b 6a 5d 3b 0a 20 20 20 20 20 20 69 66 28 20  z[j];.      if( 
39c0: 63 3e 3d 30 78 32 30 20 26 26 20 63 3c 30 78 37  c>=0x20 && c<0x7
39d0: 66 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 42 75  f ){.        zBu
39e0: 66 5b 6b 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20 20  f[k++] = c;.    
39f0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
3a00: 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27   zBuf[k++] = '.'
3a10: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
3a20: 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20      zBuf[k++] = 
3a30: 27 5d 27 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ']';.    sqlite3
3a40: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 26 7a  _snprintf(100,&z
3a50: 42 75 66 5b 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73  Buf[k], encnames
3a60: 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20  [pMem->enc]);.  
3a70: 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33 53 74    k += sqlite3St
3a80: 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29  rlen30(&zBuf[k])
3a90: 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20  ;.    zBuf[k++] 
3aa0: 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69  = 0;.  }.}.#endi
3ab0: 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
3ac0: 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69  _DEBUG./*.** Pri
3ad0: 6e 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  nt the value of 
3ae0: 61 20 72 65 67 69 73 74 65 72 20 66 6f 72 20 74  a register for t
3af0: 72 61 63 69 6e 67 20 70 75 72 70 6f 73 65 73 3a  racing purposes:
3b00: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
3b10: 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28 4d 65  memTracePrint(Me
3b20: 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e  m *p){.  if( p->
3b30: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 55 6e 64 65  flags & MEM_Unde
3b40: 66 69 6e 65 64 20 29 7b 0a 20 20 20 20 70 72 69  fined ){.    pri
3b50: 6e 74 66 28 22 20 75 6e 64 65 66 69 6e 65 64 22  ntf(" undefined"
3b60: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  );.  }else if( p
3b70: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
3b80: 6c 6c 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66  ll ){.    printf
3b90: 28 22 20 4e 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c  (" NULL");.  }el
3ba0: 73 65 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  se if( (p->flags
3bb0: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
3bc0: 53 74 72 29 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c  Str))==(MEM_Int|
3bd0: 4d 45 4d 5f 53 74 72 29 20 29 7b 0a 20 20 20 20  MEM_Str) ){.    
3be0: 70 72 69 6e 74 66 28 22 20 73 69 3a 25 6c 6c 64  printf(" si:%lld
3bf0: 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65  ", p->u.i);.  }e
3c00: 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  lse if( p->flags
3c10: 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20   & MEM_Int ){.  
3c20: 20 20 70 72 69 6e 74 66 28 22 20 69 3a 25 6c 6c    printf(" i:%ll
3c30: 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 23 69 66  d", p->u.i);.#if
3c40: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
3c50: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
3c60: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66    }else if( p->f
3c70: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20  lags & MEM_Real 
3c80: 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20  ){.    printf(" 
3c90: 72 3a 25 67 22 2c 20 70 2d 3e 75 2e 72 29 3b 0a  r:%g", p->u.r);.
3ca0: 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65 20 69  #endif.  }else i
3cb0: 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  f( p->flags & ME
3cc0: 4d 5f 52 6f 77 53 65 74 20 29 7b 0a 20 20 20 20  M_RowSet ){.    
3cd0: 70 72 69 6e 74 66 28 22 20 28 72 6f 77 73 65 74  printf(" (rowset
3ce0: 29 22 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  )");.  }else{.  
3cf0: 20 20 63 68 61 72 20 7a 42 75 66 5b 32 30 30 5d    char zBuf[200]
3d00: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
3d10: 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74 28  eMemPrettyPrint(
3d20: 70 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20 70 72  p, zBuf);.    pr
3d30: 69 6e 74 66 28 22 20 25 73 22 2c 20 7a 42 75 66  intf(" %s", zBuf
3d40: 29 3b 0a 20 20 7d 0a 7d 0a 73 74 61 74 69 63 20  );.  }.}.static 
3d50: 76 6f 69 64 20 72 65 67 69 73 74 65 72 54 72 61  void registerTra
3d60: 63 65 28 69 6e 74 20 69 52 65 67 2c 20 4d 65 6d  ce(int iReg, Mem
3d70: 20 2a 70 29 7b 0a 20 20 70 72 69 6e 74 66 28 22   *p){.  printf("
3d80: 52 45 47 5b 25 64 5d 20 3d 20 22 2c 20 69 52 65  REG[%d] = ", iRe
3d90: 67 29 3b 0a 20 20 6d 65 6d 54 72 61 63 65 50 72  g);.  memTracePr
3da0: 69 6e 74 28 70 29 3b 0a 20 20 70 72 69 6e 74 66  int(p);.  printf
3db0: 28 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6e 64 69 66  ("\n");.}.#endif
3dc0: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
3dd0: 44 45 42 55 47 0a 23 20 20 64 65 66 69 6e 65 20  DEBUG.#  define 
3de0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 52  REGISTER_TRACE(R
3df0: 2c 4d 29 20 69 66 28 64 62 2d 3e 66 6c 61 67 73  ,M) if(db->flags
3e00: 26 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63  &SQLITE_VdbeTrac
3e10: 65 29 72 65 67 69 73 74 65 72 54 72 61 63 65 28  e)registerTrace(
3e20: 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 20 64 65  R,M).#else.#  de
3e30: 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52  fine REGISTER_TR
3e40: 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64 69 66 0a  ACE(R,M).#endif.
3e50: 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  ..#ifdef VDBE_PR
3e60: 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77  OFILE../* .** hw
3e70: 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69 6e 73 20  time.h contains 
3e80: 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62 6c 65 72  inline assembler
3e90: 20 63 6f 64 65 20 66 6f 72 20 69 6d 70 6c 65 6d   code for implem
3ea0: 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69 67 68 2d  enting .** high-
3eb0: 70 65 72 66 6f 72 6d 61 6e 63 65 20 74 69 6d 69  performance timi
3ec0: 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a  ng routines..*/.
3ed0: 23 69 6e 63 6c 75 64 65 20 22 68 77 74 69 6d 65  #include "hwtime
3ee0: 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a 23 69 66  .h"..#endif..#if
3ef0: 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a  ndef NDEBUG./*.*
3f00: 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  * This function 
3f10: 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65 64 20 66  is only called f
3f20: 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20 61 73  rom within an as
3f30: 73 65 72 74 28 29 20 65 78 70 72 65 73 73 69 6f  sert() expressio
3f40: 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63 6b 73 20  n. It.** checks 
3f50: 74 68 61 74 20 74 68 65 20 73 71 6c 69 74 65 33  that the sqlite3
3f60: 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e 20 76 61  .nTransaction va
3f70: 72 69 61 62 6c 65 20 69 73 20 63 6f 72 72 65 63  riable is correc
3f80: 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68  tly set to.** th
3f90: 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d  e number of non-
3fa0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
3fb0: 70 6f 69 6e 74 73 20 63 75 72 72 65 6e 74 6c 79  points currently
3fc0: 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b   in the .** link
3fd0: 65 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67  ed list starting
3fe0: 20 61 74 20 73 71 6c 69 74 65 33 2e 70 53 61 76   at sqlite3.pSav
3ff0: 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55  epoint..** .** U
4000: 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  sage:.**.**     
4010: 61 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76  assert( checkSav
4020: 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20  epointCount(db) 
4030: 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  );.*/.static int
4040: 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43   checkSavepointC
4050: 6f 75 6e 74 28 73 71 6c 69 74 65 33 20 2a 64 62  ount(sqlite3 *db
4060: 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a  ){.  int n = 0;.
4070: 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 3b 0a    Savepoint *p;.
4080: 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70 53 61 76    for(p=db->pSav
4090: 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e  epoint; p; p=p->
40a0: 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20 20 61 73  pNext) n++;.  as
40b0: 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53  sert( n==(db->nS
40c0: 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 69  avepoint + db->i
40d0: 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
40e0: 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72 65 74 75  point) );.  retu
40f0: 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  rn 1;.}.#endif..
4100: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  /*.** Return the
4110: 20 72 65 67 69 73 74 65 72 20 6f 66 20 70 4f 70   register of pOp
4120: 2d 3e 70 32 20 61 66 74 65 72 20 66 69 72 73 74  ->p2 after first
4130: 20 70 72 65 70 61 72 69 6e 67 20 69 74 20 74 6f   preparing it to
4140: 20 62 65 0a 2a 2a 20 6f 76 65 72 77 72 69 74 74   be.** overwritt
4150: 65 6e 20 77 69 74 68 20 61 6e 20 69 6e 74 65 67  en with an integ
4160: 65 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61  er value..*/.sta
4170: 74 69 63 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  tic SQLITE_NOINL
4180: 49 4e 45 20 4d 65 6d 20 2a 6f 75 74 32 50 72 65  INE Mem *out2Pre
4190: 72 65 6c 65 61 73 65 57 69 74 68 43 6c 65 61 72  releaseWithClear
41a0: 28 4d 65 6d 20 2a 70 4f 75 74 29 7b 0a 20 20 73  (Mem *pOut){.  s
41b0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
41c0: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 70 4f  Null(pOut);.  pO
41d0: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
41e0: 49 6e 74 3b 0a 20 20 72 65 74 75 72 6e 20 70 4f  Int;.  return pO
41f0: 75 74 3b 0a 7d 0a 73 74 61 74 69 63 20 4d 65 6d  ut;.}.static Mem
4200: 20 2a 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65   *out2Prerelease
4210: 28 56 64 62 65 20 2a 70 2c 20 56 64 62 65 4f 70  (Vdbe *p, VdbeOp
4220: 20 2a 70 4f 70 29 7b 0a 20 20 4d 65 6d 20 2a 70   *pOp){.  Mem *p
4230: 4f 75 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Out;.  assert( p
4240: 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73  Op->p2>0 );.  as
4250: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28  sert( pOp->p2<=(
4260: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
4270: 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  or) );.  pOut = 
4280: 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  &p->aMem[pOp->p2
4290: 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
42a0: 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
42b0: 20 20 69 66 28 20 56 64 62 65 4d 65 6d 44 79 6e    if( VdbeMemDyn
42c0: 61 6d 69 63 28 70 4f 75 74 29 20 29 7b 0a 20 20  amic(pOut) ){.  
42d0: 20 20 72 65 74 75 72 6e 20 6f 75 74 32 50 72 65    return out2Pre
42e0: 72 65 6c 65 61 73 65 57 69 74 68 43 6c 65 61 72  releaseWithClear
42f0: 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b  (pOut);.  }else{
4300: 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
4310: 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20   = MEM_Int;.    
4320: 72 65 74 75 72 6e 20 70 4f 75 74 3b 0a 20 20 7d  return pOut;.  }
4330: 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75  .}.../*.** Execu
4340: 74 65 20 61 73 20 6d 75 63 68 20 6f 66 20 61 20  te as much of a 
4350: 56 44 42 45 20 70 72 6f 67 72 61 6d 20 61 73 20  VDBE program as 
4360: 77 65 20 63 61 6e 2e 0a 2a 2a 20 54 68 69 73 20  we can..** This 
4370: 69 73 20 74 68 65 20 63 6f 72 65 20 6f 66 20 73  is the core of s
4380: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 2e 20 20  qlite3_step().  
4390: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  .*/.int sqlite3V
43a0: 64 62 65 45 78 65 63 28 0a 20 20 56 64 62 65 20  dbeExec(.  Vdbe 
43b0: 2a 70 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *p              
43c0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42        /* The VDB
43d0: 45 20 2a 2f 0a 29 7b 0a 20 20 4f 70 20 2a 61 4f  E */.){.  Op *aO
43e0: 70 20 3d 20 70 2d 3e 61 4f 70 3b 20 20 20 20 20  p = p->aOp;     
43f0: 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20       /* Copy of 
4400: 70 2d 3e 61 4f 70 20 2a 2f 0a 20 20 4f 70 20 2a  p->aOp */.  Op *
4410: 70 4f 70 20 3d 20 61 4f 70 3b 20 20 20 20 20 20  pOp = aOp;      
4420: 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e         /* Curren
4430: 74 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 23  t operation */.#
4440: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
4450: 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69  E_DEBUG) || defi
4460: 6e 65 64 28 56 44 42 45 5f 50 52 4f 46 49 4c 45  ned(VDBE_PROFILE
4470: 29 0a 20 20 4f 70 20 2a 70 4f 72 69 67 4f 70 3b  ).  Op *pOrigOp;
4480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4490: 2a 20 56 61 6c 75 65 20 6f 66 20 70 4f 70 20 61  * Value of pOp a
44a0: 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65  t the top of the
44b0: 20 6c 6f 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a   loop */.#endif.
44c0: 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54    int rc = SQLIT
44d0: 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20 2f 2a 20  E_OK;        /* 
44e0: 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
44f0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  */.  sqlite3 *db
4500: 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20 20 20 20   = p->db;       
4510: 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
4520: 2a 2f 0a 20 20 75 38 20 72 65 73 65 74 53 63 68  */.  u8 resetSch
4530: 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 30 3b 20  emaOnFault = 0; 
4540: 2f 2a 20 52 65 73 65 74 20 73 63 68 65 6d 61 20  /* Reset schema 
4550: 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 69  after an error i
4560: 66 20 70 6f 73 69 74 69 76 65 20 2a 2f 0a 20 20  f positive */.  
4570: 75 38 20 65 6e 63 6f 64 69 6e 67 20 3d 20 45 4e  u8 encoding = EN
4580: 43 28 64 62 29 3b 20 20 20 20 20 2f 2a 20 54 68  C(db);     /* Th
4590: 65 20 64 61 74 61 62 61 73 65 20 65 6e 63 6f 64  e database encod
45a0: 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 43 6f  ing */.  int iCo
45b0: 6d 70 61 72 65 20 3d 20 30 3b 20 20 20 20 20 20  mpare = 0;      
45c0: 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66      /* Result of
45d0: 20 6c 61 73 74 20 4f 50 5f 43 6f 6d 70 61 72 65   last OP_Compare
45e0: 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 20 20   operation */.  
45f0: 75 6e 73 69 67 6e 65 64 20 6e 56 6d 53 74 65 70  unsigned nVmStep
4600: 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e 75   = 0;      /* Nu
4610: 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20  mber of virtual 
4620: 6d 61 63 68 69 6e 65 20 73 74 65 70 73 20 2a 2f  machine steps */
4630: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
4640: 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41  OMIT_PROGRESS_CA
4650: 4c 4c 42 41 43 4b 0a 20 20 75 6e 73 69 67 6e 65  LLBACK.  unsigne
4660: 64 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74  d nProgressLimit
4670: 20 3d 20 30 3b 2f 2a 20 49 6e 76 6f 6b 65 20 78   = 0;/* Invoke x
4680: 50 72 6f 67 72 65 73 73 28 29 20 77 68 65 6e 20  Progress() when 
4690: 6e 56 6d 53 74 65 70 20 72 65 61 63 68 65 73 20  nVmStep reaches 
46a0: 74 68 69 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  this */.#endif. 
46b0: 20 4d 65 6d 20 2a 61 4d 65 6d 20 3d 20 70 2d 3e   Mem *aMem = p->
46c0: 61 4d 65 6d 3b 20 20 20 20 20 20 20 2f 2a 20 43  aMem;       /* C
46d0: 6f 70 79 20 6f 66 20 70 2d 3e 61 4d 65 6d 20 2a  opy of p->aMem *
46e0: 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 20 3d 20  /.  Mem *pIn1 = 
46f0: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
4700: 2a 20 31 73 74 20 69 6e 70 75 74 20 6f 70 65 72  * 1st input oper
4710: 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49  and */.  Mem *pI
4720: 6e 32 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  n2 = 0;         
4730: 20 20 20 20 2f 2a 20 32 6e 64 20 69 6e 70 75 74      /* 2nd input
4740: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65   operand */.  Me
4750: 6d 20 2a 70 49 6e 33 20 3d 20 30 3b 20 20 20 20  m *pIn3 = 0;    
4760: 20 20 20 20 20 20 20 20 20 2f 2a 20 33 72 64 20           /* 3rd 
4770: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
4780: 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20 3d 20 30  .  Mem *pOut = 0
4790: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
47a0: 20 4f 75 74 70 75 74 20 6f 70 65 72 61 6e 64 20   Output operand 
47b0: 2a 2f 0a 20 20 69 6e 74 20 2a 61 50 65 72 6d 75  */.  int *aPermu
47c0: 74 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  te = 0;         
47d0: 2f 2a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f  /* Permutation o
47e0: 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 4f 50  f columns for OP
47f0: 5f 43 6f 6d 70 61 72 65 20 2a 2f 0a 20 20 69 36  _Compare */.  i6
4800: 34 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62  4 lastRowid = db
4810: 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 20 20 2f 2a  ->lastRowid;  /*
4820: 20 53 61 76 65 64 20 76 61 6c 75 65 20 6f 66 20   Saved value of 
4830: 74 68 65 20 6c 61 73 74 20 69 6e 73 65 72 74 20  the last insert 
4840: 52 4f 57 49 44 20 2a 2f 0a 23 69 66 64 65 66 20  ROWID */.#ifdef 
4850: 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 75  VDBE_PROFILE.  u
4860: 36 34 20 73 74 61 72 74 3b 20 20 20 20 20 20 20  64 start;       
4870: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 50 55            /* CPU
4880: 20 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61 74 20   clock count at 
4890: 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65 20  start of opcode 
48a0: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 2a 2a  */.#endif.  /***
48b0: 20 49 4e 53 45 52 54 20 53 54 41 43 4b 20 55 4e   INSERT STACK UN
48c0: 49 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a 0a 20  ION HERE ***/.. 
48d0: 20 61 73 73 65 72 74 28 20 70 2d 3e 6d 61 67 69   assert( p->magi
48e0: 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55  c==VDBE_MAGIC_RU
48f0: 4e 20 29 3b 20 20 2f 2a 20 73 71 6c 69 74 65 33  N );  /* sqlite3
4900: 5f 73 74 65 70 28 29 20 76 65 72 69 66 69 65 73  _step() verifies
4910: 20 74 68 69 73 20 2a 2f 0a 20 20 73 71 6c 69 74   this */.  sqlit
4920: 65 33 56 64 62 65 45 6e 74 65 72 28 70 29 3b 0a  e3VdbeEnter(p);.
4930: 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c    if( p->rc==SQL
4940: 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20  ITE_NOMEM ){.   
4950: 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73   /* This happens
4960: 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 69   if a malloc() i
4970: 6e 73 69 64 65 20 61 20 63 61 6c 6c 20 74 6f 20  nside a call to 
4980: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
4990: 65 78 74 28 29 20 6f 72 0a 20 20 20 20 2a 2a 20  ext() or.    ** 
49a0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
49b0: 65 78 74 31 36 28 29 20 66 61 69 6c 65 64 2e 20  ext16() failed. 
49c0: 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f   */.    goto no_
49d0: 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  mem;.  }.  asser
49e0: 74 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45  t( p->rc==SQLITE
49f0: 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63 26 30 78  _OK || (p->rc&0x
4a00: 66 66 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59  ff)==SQLITE_BUSY
4a10: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
4a20: 3e 62 49 73 52 65 61 64 65 72 20 7c 7c 20 70 2d  >bIsReader || p-
4a30: 3e 72 65 61 64 4f 6e 6c 79 21 3d 30 20 29 3b 0a  >readOnly!=0 );.
4a40: 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45    p->rc = SQLITE
4a50: 5f 4f 4b 3b 0a 20 20 70 2d 3e 69 43 75 72 72 65  _OK;.  p->iCurre
4a60: 6e 74 54 69 6d 65 20 3d 20 30 3b 0a 20 20 61 73  ntTime = 0;.  as
4a70: 73 65 72 74 28 20 70 2d 3e 65 78 70 6c 61 69 6e  sert( p->explain
4a80: 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e 70 52 65 73  ==0 );.  p->pRes
4a90: 75 6c 74 53 65 74 20 3d 20 30 3b 0a 20 20 64 62  ultSet = 0;.  db
4aa0: 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42  ->busyHandler.nB
4ab0: 75 73 79 20 3d 20 30 3b 0a 20 20 69 66 28 20 64  usy = 0;.  if( d
4ac0: 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70  b->u1.isInterrup
4ad0: 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  ted ) goto abort
4ae0: 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70  _due_to_interrup
4af0: 74 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  t;.  sqlite3Vdbe
4b00: 49 4f 54 72 61 63 65 53 71 6c 28 70 29 3b 0a 23  IOTraceSql(p);.#
4b10: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
4b20: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
4b30: 42 41 43 4b 0a 20 20 69 66 28 20 64 62 2d 3e 78  BACK.  if( db->x
4b40: 50 72 6f 67 72 65 73 73 20 29 7b 0a 20 20 20 20  Progress ){.    
4b50: 75 33 32 20 69 50 72 69 6f 72 20 3d 20 70 2d 3e  u32 iPrior = p->
4b60: 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f  aCounter[SQLITE_
4b70: 53 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f 53 54  STMTSTATUS_VM_ST
4b80: 45 50 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  EP];.    assert(
4b90: 20 30 20 3c 20 64 62 2d 3e 6e 50 72 6f 67 72 65   0 < db->nProgre
4ba0: 73 73 4f 70 73 20 29 3b 0a 20 20 20 20 6e 50 72  ssOps );.    nPr
4bb0: 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 64 62  ogressLimit = db
4bc0: 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 2d  ->nProgressOps -
4bd0: 20 28 69 50 72 69 6f 72 20 25 20 64 62 2d 3e 6e   (iPrior % db->n
4be0: 50 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a 20 20  ProgressOps);.  
4bf0: 7d 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  }.#endif.#ifdef 
4c00: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 73  SQLITE_DEBUG.  s
4c10: 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67  qlite3BeginBenig
4c20: 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 69 66 28  nMalloc();.  if(
4c30: 20 70 2d 3e 70 63 3d 3d 30 0a 20 20 20 26 26 20   p->pc==0.   && 
4c40: 28 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20  (p->db->flags & 
4c50: 28 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74  (SQLITE_VdbeList
4c60: 69 6e 67 7c 53 51 4c 49 54 45 5f 56 64 62 65 45  ing|SQLITE_VdbeE
4c70: 51 50 7c 53 51 4c 49 54 45 5f 56 64 62 65 54 72  QP|SQLITE_VdbeTr
4c80: 61 63 65 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20  ace))!=0.  ){.  
4c90: 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 69 6e 74    int i;.    int
4ca0: 20 6f 6e 63 65 20 3d 20 31 3b 0a 20 20 20 20 73   once = 1;.    s
4cb0: 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 53  qlite3VdbePrintS
4cc0: 71 6c 28 70 29 3b 0a 20 20 20 20 69 66 28 20 70  ql(p);.    if( p
4cd0: 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51  ->db->flags & SQ
4ce0: 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67  LITE_VdbeListing
4cf0: 20 29 7b 0a 20 20 20 20 20 20 70 72 69 6e 74 66   ){.      printf
4d00: 28 22 56 44 42 45 20 50 72 6f 67 72 61 6d 20 4c  ("VDBE Program L
4d10: 69 73 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20  isting:\n");.   
4d20: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d     for(i=0; i<p-
4d30: 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  >nOp; i++){.    
4d40: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
4d50: 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 69  rintOp(stdout, i
4d60: 2c 20 26 61 4f 70 5b 69 5d 29 3b 0a 20 20 20 20  , &aOp[i]);.    
4d70: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66    }.    }.    if
4d80: 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26  ( p->db->flags &
4d90: 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20   SQLITE_VdbeEQP 
4da0: 29 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  ){.      for(i=0
4db0: 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29  ; i<p->nOp; i++)
4dc0: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 61 4f  {.        if( aO
4dd0: 70 5b 69 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  p[i].opcode==OP_
4de0: 45 78 70 6c 61 69 6e 20 29 7b 0a 20 20 20 20 20  Explain ){.     
4df0: 20 20 20 20 20 69 66 28 20 6f 6e 63 65 20 29 20       if( once ) 
4e00: 70 72 69 6e 74 66 28 22 56 44 42 45 20 51 75 65  printf("VDBE Que
4e10: 72 79 20 50 6c 61 6e 3a 5c 6e 22 29 3b 0a 20 20  ry Plan:\n");.  
4e20: 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22          printf("
4e30: 25 73 5c 6e 22 2c 20 61 4f 70 5b 69 5d 2e 70 34  %s\n", aOp[i].p4
4e40: 2e 7a 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f  .z);.          o
4e50: 6e 63 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  nce = 0;.       
4e60: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d   }.      }.    }
4e70: 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e  .    if( p->db->
4e80: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
4e90: 64 62 65 54 72 61 63 65 20 29 20 20 70 72 69 6e  dbeTrace )  prin
4ea0: 74 66 28 22 56 44 42 45 20 54 72 61 63 65 3a 5c  tf("VDBE Trace:\
4eb0: 6e 22 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  n");.  }.  sqlit
4ec0: 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
4ed0: 63 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 66 6f  c();.#endif.  fo
4ee0: 72 28 70 4f 70 3d 26 61 4f 70 5b 70 2d 3e 70 63  r(pOp=&aOp[p->pc
4ef0: 5d 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  ]; rc==SQLITE_OK
4f00: 3b 20 70 4f 70 2b 2b 29 7b 0a 20 20 20 20 61 73  ; pOp++){.    as
4f10: 73 65 72 74 28 20 70 4f 70 3e 3d 61 4f 70 20 26  sert( pOp>=aOp &
4f20: 26 20 70 4f 70 3c 26 61 4f 70 5b 70 2d 3e 6e 4f  & pOp<&aOp[p->nO
4f30: 70 5d 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d  p]);.    if( db-
4f40: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20  >mallocFailed ) 
4f50: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 23 69 66  goto no_mem;.#if
4f60: 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45  def VDBE_PROFILE
4f70: 0a 20 20 20 20 73 74 61 72 74 20 3d 20 73 71 6c  .    start = sql
4f80: 69 74 65 33 48 77 74 69 6d 65 28 29 3b 0a 23 65  ite3Hwtime();.#e
4f90: 6e 64 69 66 0a 20 20 20 20 6e 56 6d 53 74 65 70  ndif.    nVmStep
4fa0: 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  ++;.#ifdef SQLIT
4fb0: 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43  E_ENABLE_STMT_SC
4fc0: 41 4e 53 54 41 54 55 53 0a 20 20 20 20 69 66 28  ANSTATUS.    if(
4fd0: 20 70 2d 3e 61 6e 45 78 65 63 20 29 20 70 2d 3e   p->anExec ) p->
4fe0: 61 6e 45 78 65 63 5b 28 69 6e 74 29 28 70 4f 70  anExec[(int)(pOp
4ff0: 2d 61 4f 70 29 5d 2b 2b 3b 0a 23 65 6e 64 69 66  -aOp)]++;.#endif
5000: 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c  ..    /* Only al
5010: 6c 6f 77 20 74 72 61 63 69 6e 67 20 69 66 20 53  low tracing if S
5020: 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 64  QLITE_DEBUG is d
5030: 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23  efined..    */.#
5040: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
5050: 55 47 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 66  UG.    if( db->f
5060: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64  lags & SQLITE_Vd
5070: 62 65 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20  beTrace ){.     
5080: 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e   sqlite3VdbePrin
5090: 74 4f 70 28 73 74 64 6f 75 74 2c 20 28 69 6e 74  tOp(stdout, (int
50a0: 29 28 70 4f 70 20 2d 20 61 4f 70 29 2c 20 70 4f  )(pOp - aOp), pO
50b0: 70 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  p);.    }.#endif
50c0: 0a 20 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a 20  .      ..    /* 
50d0: 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20  Check to see if 
50e0: 77 65 20 6e 65 65 64 20 74 6f 20 73 69 6d 75 6c  we need to simul
50f0: 61 74 65 20 61 6e 20 69 6e 74 65 72 72 75 70 74  ate an interrupt
5100: 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20 68 61 70  .  This only hap
5110: 70 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20 77  pens.    ** if w
5120: 65 20 68 61 76 65 20 61 20 73 70 65 63 69 61 6c  e have a special
5130: 20 74 65 73 74 20 62 75 69 6c 64 2e 0a 20 20 20   test build..   
5140: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
5150: 45 5f 54 45 53 54 0a 20 20 20 20 69 66 28 20 73  E_TEST.    if( s
5160: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
5170: 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20 20  _count>0 ){.    
5180: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72    sqlite3_interr
5190: 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20  upt_count--;.   
51a0: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69     if( sqlite3_i
51b0: 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d 3d  nterrupt_count==
51c0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  0 ){.        sql
51d0: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 64  ite3_interrupt(d
51e0: 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  b);.      }.    
51f0: 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a  }.#endif..    /*
5200: 20 53 61 6e 69 74 79 20 63 68 65 63 6b 69 6e 67   Sanity checking
5210: 20 6f 6e 20 6f 74 68 65 72 20 6f 70 65 72 61 6e   on other operan
5220: 64 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  ds */.#ifdef SQL
5230: 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 61 73  ITE_DEBUG.    as
5240: 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 66 6c 61  sert( pOp->opfla
5250: 67 73 3d 3d 73 71 6c 69 74 65 33 4f 70 63 6f 64  gs==sqlite3Opcod
5260: 65 50 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f  eProperty[pOp->o
5270: 70 63 6f 64 65 5d 20 29 3b 0a 20 20 20 20 69 66  pcode] );.    if
5280: 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  ( (pOp->opflags 
5290: 26 20 4f 50 46 4c 47 5f 49 4e 31 29 21 3d 30 20  & OPFLG_IN1)!=0 
52a0: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
52b0: 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20   pOp->p1>0 );.  
52c0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
52d0: 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p1<=(p->nMem-p-
52e0: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
52f0: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
5300: 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d  Valid(&aMem[pOp-
5310: 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 61  >p1]) );.      a
5320: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64  ssert( sqlite3Vd
5330: 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69  beCheckMemInvari
5340: 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ants(&aMem[pOp->
5350: 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45  p1]) );.      RE
5360: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
5370: 2d 3e 70 31 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ->p1, &aMem[pOp-
5380: 3e 70 31 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20  >p1]);.    }.   
5390: 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61   if( (pOp->opfla
53a0: 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e 32 29 21  gs & OPFLG_IN2)!
53b0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  =0 ){.      asse
53c0: 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b  rt( pOp->p2>0 );
53d0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
53e0: 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p2<=(p->nMem
53f0: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
5400: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
5410: 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
5420: 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20  Op->p2]) );.    
5430: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
5440: 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76  3VdbeCheckMemInv
5450: 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f  ariants(&aMem[pO
5460: 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20  p->p2]) );.     
5470: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
5480: 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70  pOp->p2, &aMem[p
5490: 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a  Op->p2]);.    }.
54a0: 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70      if( (pOp->op
54b0: 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e  flags & OPFLG_IN
54c0: 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61  3)!=0 ){.      a
54d0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
54e0: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
54f0: 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  ( pOp->p3<=(p->n
5500: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
5510: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
5520: 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
5530: 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20  m[pOp->p3]) );. 
5540: 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
5550: 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d  ite3VdbeCheckMem
5560: 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d  Invariants(&aMem
5570: 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20  [pOp->p3]) );.  
5580: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
5590: 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65  CE(pOp->p3, &aMe
55a0: 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20  m[pOp->p3]);.   
55b0: 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d   }.    if( (pOp-
55c0: 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47  >opflags & OPFLG
55d0: 5f 4f 55 54 32 29 21 3d 30 20 29 7b 0a 20 20 20  _OUT2)!=0 ){.   
55e0: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
55f0: 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73  p2>0 );.      as
5600: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28  sert( pOp->p2<=(
5610: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
5620: 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d  or) );.      mem
5630: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
5640: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29   &aMem[pOp->p2])
5650: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
5660: 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20  (pOp->opflags & 
5670: 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d 30 20 29  OPFLG_OUT3)!=0 )
5680: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
5690: 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20  pOp->p3>0 );.   
56a0: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
56b0: 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
56c0: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
56d0: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
56e0: 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ge(p, &aMem[pOp-
56f0: 3e 70 33 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e  >p3]);.    }.#en
5700: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
5710: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c  SQLITE_DEBUG) ||
5720: 20 64 65 66 69 6e 65 64 28 56 44 42 45 5f 50 52   defined(VDBE_PR
5730: 4f 46 49 4c 45 29 0a 20 20 20 20 70 4f 72 69 67  OFILE).    pOrig
5740: 4f 70 20 3d 20 70 4f 70 3b 0a 23 65 6e 64 69 66  Op = pOp;.#endif
5750: 0a 20 20 0a 20 20 20 20 73 77 69 74 63 68 28 20  .  .    switch( 
5760: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a  pOp->opcode ){..
5770: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
5780: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5790: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
57a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
57b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a  **************.*
57c0: 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69  * What follows i
57d0: 73 20 61 20 6d 61 73 73 69 76 65 20 73 77 69 74  s a massive swit
57e0: 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77 68 65  ch statement whe
57f0: 72 65 20 65 61 63 68 20 63 61 73 65 20 69 6d 70  re each case imp
5800: 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70  lements a.** sep
5810: 61 72 61 74 65 20 69 6e 73 74 72 75 63 74 69 6f  arate instructio
5820: 6e 20 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c  n in the virtual
5830: 20 6d 61 63 68 69 6e 65 2e 20 20 49 66 20 77 65   machine.  If we
5840: 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75 73 75 61   follow the usua
5850: 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e  l.** indentation
5860: 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61   conventions, ea
5870: 63 68 20 63 61 73 65 20 73 68 6f 75 6c 64 20 62  ch case should b
5880: 65 20 69 6e 64 65 6e 74 65 64 20 62 79 20 36 20  e indented by 6 
5890: 73 70 61 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20  spaces.  But.** 
58a0: 74 68 61 74 20 69 73 20 61 20 6c 6f 74 20 6f 66  that is a lot of
58b0: 20 77 61 73 74 65 64 20 73 70 61 63 65 20 6f 6e   wasted space on
58c0: 20 74 68 65 20 6c 65 66 74 20 6d 61 72 67 69 6e   the left margin
58d0: 2e 20 20 53 6f 20 74 68 65 20 63 6f 64 65 20 77  .  So the code w
58e0: 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69  ithin.** the swi
58f0: 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77 69  tch statement wi
5900: 6c 6c 20 62 72 65 61 6b 20 77 69 74 68 20 63 6f  ll break with co
5910: 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20  nvention and be 
5920: 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74  flush-left. Anot
5930: 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65  her.** big comme
5940: 6e 74 20 28 73 69 6d 69 6c 61 72 20 74 6f 20 74  nt (similar to t
5950: 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61  his one) will ma
5960: 72 6b 20 74 68 65 20 70 6f 69 6e 74 20 69 6e 20  rk the point in 
5970: 74 68 65 20 63 6f 64 65 20 77 68 65 72 65 0a 2a  the code where.*
5980: 2a 20 77 65 20 74 72 61 6e 73 69 74 69 6f 6e 20  * we transition 
5990: 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69  back to normal i
59a0: 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  ndentation..**.*
59b0: 2a 20 54 68 65 20 66 6f 72 6d 61 74 74 69 6e 67  * The formatting
59c0: 20 6f 66 20 65 61 63 68 20 63 61 73 65 20 69 73   of each case is
59d0: 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20 54 68 65   important.  The
59e0: 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72 20 53 51   makefile for SQ
59f0: 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65  Lite.** generate
5a00: 73 20 74 77 6f 20 43 20 66 69 6c 65 73 20 22 6f  s two C files "o
5a10: 70 63 6f 64 65 73 2e 68 22 20 61 6e 64 20 22 6f  pcodes.h" and "o
5a20: 70 63 6f 64 65 73 2e 63 22 20 62 79 20 73 63 61  pcodes.c" by sca
5a30: 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69  nning this.** fi
5a40: 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c  le looking for l
5a50: 69 6e 65 73 20 74 68 61 74 20 62 65 67 69 6e 20  ines that begin 
5a60: 77 69 74 68 20 22 63 61 73 65 20 4f 50 5f 22 2e  with "case OP_".
5a70: 20 20 54 68 65 20 6f 70 63 6f 64 65 73 2e 68 20    The opcodes.h 
5a80: 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65  files.** will be
5a90: 20 66 69 6c 6c 65 64 20 77 69 74 68 20 23 64 65   filled with #de
5aa0: 66 69 6e 65 73 20 74 68 61 74 20 67 69 76 65 20  fines that give 
5ab0: 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72 20 76  unique integer v
5ac0: 61 6c 75 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a  alues to each.**
5ad0: 20 6f 70 63 6f 64 65 20 61 6e 64 20 74 68 65 20   opcode and the 
5ae0: 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c 65 20 69  opcodes.c file i
5af0: 73 20 66 69 6c 6c 65 64 20 77 69 74 68 20 61 6e  s filled with an
5b00: 20 61 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67   array of string
5b10: 73 20 77 68 65 72 65 0a 2a 2a 20 65 61 63 68 20  s where.** each 
5b20: 73 74 72 69 6e 67 20 69 73 20 74 68 65 20 73 79  string is the sy
5b30: 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20  mbolic name for 
5b40: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
5b50: 67 20 6f 70 63 6f 64 65 2e 20 20 49 66 20 74 68  g opcode.  If th
5b60: 65 0a 2a 2a 20 63 61 73 65 20 73 74 61 74 65 6d  e.** case statem
5b70: 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20  ent is followed 
5b80: 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20  by a comment of 
5b90: 74 68 65 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d  the form "/# sam
5ba0: 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20  e as ... #/".** 
5bb0: 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20  that comment is 
5bc0: 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e  used to determin
5bd0: 65 20 74 68 65 20 70 61 72 74 69 63 75 6c 61 72  e the particular
5be0: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70   value of the op
5bf0: 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65  code..**.** Othe
5c00: 72 20 6b 65 79 77 6f 72 64 73 20 69 6e 20 74 68  r keywords in th
5c10: 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61 74 20 66  e comment that f
5c20: 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63 61 73 65  ollows each case
5c30: 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20   are used to.** 
5c40: 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20 4f 50  construct the OP
5c50: 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20  FLG_INITIALIZER 
5c60: 76 61 6c 75 65 20 74 68 61 74 20 69 6e 69 74 69  value that initi
5c70: 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65 50 72 6f  alizes opcodePro
5c80: 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77  perty[]..** Keyw
5c90: 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a 20 69 6e  ords include: in
5ca0: 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20 6f 75 74  1, in2, in3, out
5cb0: 32 2c 20 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a  2, out3.  See.**
5cc0: 20 74 68 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61   the mkopcodeh.a
5cd0: 77 6b 20 73 63 72 69 70 74 20 66 6f 72 20 61 64  wk script for ad
5ce0: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
5cf0: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75  tion..**.** Docu
5d00: 6d 65 6e 74 61 74 69 6f 6e 20 61 62 6f 75 74 20  mentation about 
5d10: 56 44 42 45 20 6f 70 63 6f 64 65 73 20 69 73 20  VDBE opcodes is 
5d20: 67 65 6e 65 72 61 74 65 64 20 62 79 20 73 63 61  generated by sca
5d30: 6e 6e 69 6e 67 20 74 68 69 73 20 66 69 6c 65 0a  nning this file.
5d40: 2a 2a 20 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20  ** for lines of 
5d50: 74 68 61 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70  that contain "Op
5d60: 63 6f 64 65 3a 22 2e 20 20 54 68 61 74 20 6c 69  code:".  That li
5d70: 6e 65 20 61 6e 64 20 61 6c 6c 20 73 75 62 73 65  ne and all subse
5d80: 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74  quent.** comment
5d90: 20 6c 69 6e 65 73 20 61 72 65 20 75 73 65 64 20   lines are used 
5da0: 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f  in the generatio
5db0: 6e 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e  n of the opcode.
5dc0: 68 74 6d 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69  html documentati
5dd0: 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  on.** file..**.*
5de0: 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a  * SUMMARY:.**.**
5df0: 20 20 20 20 20 46 6f 72 6d 61 74 74 69 6e 67 20       Formatting 
5e00: 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20  is important to 
5e10: 73 63 72 69 70 74 73 20 74 68 61 74 20 73 63 61  scripts that sca
5e20: 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20  n this file..** 
5e30: 20 20 20 20 44 6f 20 6e 6f 74 20 64 65 76 69 61      Do not devia
5e40: 74 65 20 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d  te from the form
5e50: 61 74 74 69 6e 67 20 73 74 79 6c 65 20 63 75 72  atting style cur
5e60: 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a  rently in use..*
5e70: 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  *.**************
5e80: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5e90: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ea0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5eb0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
5ec0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f  ../* Opcode:  Go
5ed0: 74 6f 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  to * P2 * * *.**
5ee0: 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69  .** An unconditi
5ef0: 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64  onal jump to add
5f00: 72 65 73 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20  ress P2..** The 
5f10: 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
5f20: 20 65 78 65 63 75 74 65 64 20 77 69 6c 6c 20 62   executed will b
5f30: 65 20 0a 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74  e .** the one at
5f40: 20 69 6e 64 65 78 20 50 32 20 66 72 6f 6d 20 74   index P2 from t
5f50: 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a  he beginning of.
5f60: 2a 2a 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a  ** the program..
5f70: 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 70 61 72  **.** The P1 par
5f80: 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 61 63  ameter is not ac
5f90: 74 75 61 6c 6c 79 20 75 73 65 64 20 62 79 20 74  tually used by t
5fa0: 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 48 6f 77  his opcode.  How
5fb0: 65 76 65 72 2c 20 69 74 0a 2a 2a 20 69 73 20 73  ever, it.** is s
5fc0: 6f 6d 65 74 69 6d 65 73 20 73 65 74 20 74 6f 20  ometimes set to 
5fd0: 31 20 69 6e 73 74 65 61 64 20 6f 66 20 30 20 61  1 instead of 0 a
5fe0: 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20  s a hint to the 
5ff0: 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65  command-line she
6000: 6c 6c 0a 2a 2a 20 74 68 61 74 20 74 68 69 73 20  ll.** that this 
6010: 47 6f 74 6f 20 69 73 20 74 68 65 20 62 6f 74 74  Goto is the bott
6020: 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 61 6e 64  om of a loop and
6030: 20 74 68 61 74 20 74 68 65 20 6c 69 6e 65 73 20   that the lines 
6040: 66 72 6f 6d 20 50 32 20 64 6f 77 6e 0a 2a 2a 20  from P2 down.** 
6050: 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20 6c  to the current l
6060: 69 6e 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e  ine should be in
6070: 64 65 6e 74 65 64 20 66 6f 72 20 45 58 50 4c 41  dented for EXPLA
6080: 49 4e 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61  IN output..*/.ca
6090: 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20 20  se OP_Goto: {   
60a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
60b0: 70 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32 5f  p */.jump_to_p2_
60c0: 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e  and_check_for_in
60d0: 74 65 72 72 75 70 74 3a 0a 20 20 70 4f 70 20 3d  terrupt:.  pOp =
60e0: 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20   &aOp[pOp->p2 - 
60f0: 31 5d 3b 0a 0a 20 20 2f 2a 20 4f 70 63 6f 64 65  1];..  /* Opcode
6100: 73 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  s that are used 
6110: 61 73 20 74 68 65 20 62 6f 74 74 6f 6d 20 6f 66  as the bottom of
6120: 20 61 20 6c 6f 6f 70 20 28 4f 50 5f 4e 65 78 74   a loop (OP_Next
6130: 2c 20 4f 50 5f 50 72 65 76 2c 0a 20 20 2a 2a 20  , OP_Prev,.  ** 
6140: 4f 50 5f 56 4e 65 78 74 2c 20 4f 50 5f 52 6f 77  OP_VNext, OP_Row
6150: 53 65 74 4e 65 78 74 2c 20 6f 72 20 4f 50 5f 53  SetNext, or OP_S
6160: 6f 72 74 65 72 4e 65 78 74 29 20 61 6c 6c 20 6a  orterNext) all j
6170: 75 6d 70 20 68 65 72 65 20 75 70 6f 6e 0a 20 20  ump here upon.  
6180: 2a 2a 20 63 6f 6d 70 6c 65 74 69 6f 6e 2e 20 20  ** completion.  
6190: 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20  Check to see if 
61a0: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
61b0: 74 28 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c  t() has been cal
61c0: 6c 65 64 0a 20 20 2a 2a 20 6f 72 20 69 66 20 74  led.  ** or if t
61d0: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
61e0: 62 61 63 6b 20 6e 65 65 64 73 20 74 6f 20 62 65  back needs to be
61f0: 20 69 6e 76 6f 6b 65 64 2e 20 0a 20 20 2a 2a 0a   invoked. .  **.
6200: 20 20 2a 2a 20 54 68 69 73 20 63 6f 64 65 20 75    ** This code u
6210: 73 65 73 20 75 6e 73 74 72 75 63 74 75 72 65 64  ses unstructured
6220: 20 22 67 6f 74 6f 22 20 73 74 61 74 65 6d 65 6e   "goto" statemen
6230: 74 73 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20  ts and does not 
6240: 6c 6f 6f 6b 20 63 6c 65 61 6e 2e 0a 20 20 2a 2a  look clean..  **
6250: 20 42 75 74 20 74 68 61 74 20 69 73 20 6e 6f 74   But that is not
6260: 20 64 75 65 20 74 6f 20 73 6c 6f 70 70 79 20 63   due to sloppy c
6270: 6f 64 69 6e 67 20 68 61 62 69 74 73 2e 20 54 68  oding habits. Th
6280: 65 20 63 6f 64 65 20 69 73 20 77 72 69 74 74 65  e code is writte
6290: 6e 20 74 68 69 73 0a 20 20 2a 2a 20 77 61 79 20  n this.  ** way 
62a0: 66 6f 72 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c  for performance,
62b0: 20 74 6f 20 61 76 6f 69 64 20 68 61 76 69 6e 67   to avoid having
62c0: 20 74 6f 20 72 75 6e 20 74 68 65 20 69 6e 74 65   to run the inte
62d0: 72 72 75 70 74 20 61 6e 64 20 70 72 6f 67 72 65  rrupt and progre
62e0: 73 73 0a 20 20 2a 2a 20 63 68 65 63 6b 73 20 6f  ss.  ** checks o
62f0: 6e 20 65 76 65 72 79 20 6f 70 63 6f 64 65 2e 20  n every opcode. 
6300: 20 54 68 69 73 20 68 65 6c 70 73 20 73 71 6c 69   This helps sqli
6310: 74 65 33 5f 73 74 65 70 28 29 20 74 6f 20 72 75  te3_step() to ru
6320: 6e 20 61 62 6f 75 74 20 31 2e 35 25 0a 20 20 2a  n about 1.5%.  *
6330: 2a 20 66 61 73 74 65 72 20 61 63 63 6f 72 64 69  * faster accordi
6340: 6e 67 20 74 6f 20 22 76 61 6c 67 72 69 6e 64 20  ng to "valgrind 
6350: 2d 2d 74 6f 6f 6c 3d 63 61 63 68 65 67 72 69 6e  --tool=cachegrin
6360: 64 22 20 2a 2f 0a 63 68 65 63 6b 5f 66 6f 72 5f  d" */.check_for_
6370: 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 69 66 28  interrupt:.  if(
6380: 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72   db->u1.isInterr
6390: 75 70 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f  upted ) goto abo
63a0: 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72  rt_due_to_interr
63b0: 75 70 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  upt;.#ifndef SQL
63c0: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
63d0: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20  S_CALLBACK.  /* 
63e0: 43 61 6c 6c 20 74 68 65 20 70 72 6f 67 72 65 73  Call the progres
63f0: 73 20 63 61 6c 6c 62 61 63 6b 20 69 66 20 69 74  s callback if it
6400: 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64 20 61   is configured a
6410: 6e 64 20 74 68 65 20 72 65 71 75 69 72 65 64 20  nd the required 
6420: 6e 75 6d 62 65 72 0a 20 20 2a 2a 20 6f 66 20 56  number.  ** of V
6430: 44 42 45 20 6f 70 73 20 68 61 76 65 20 62 65 65  DBE ops have bee
6440: 6e 20 65 78 65 63 75 74 65 64 20 28 65 69 74 68  n executed (eith
6450: 65 72 20 73 69 6e 63 65 20 74 68 69 73 20 69 6e  er since this in
6460: 76 6f 63 61 74 69 6f 6e 20 6f 66 0a 20 20 2a 2a  vocation of.  **
6470: 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63   sqlite3VdbeExec
6480: 28 29 20 6f 72 20 73 69 6e 63 65 20 6c 61 73 74  () or since last
6490: 20 74 69 6d 65 20 74 68 65 20 70 72 6f 67 72 65   time the progre
64a0: 73 73 20 63 61 6c 6c 62 61 63 6b 20 77 61 73 20  ss callback was 
64b0: 63 61 6c 6c 65 64 29 2e 0a 20 20 2a 2a 20 49 66  called)..  ** If
64c0: 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   the progress ca
64d0: 6c 6c 62 61 63 6b 20 72 65 74 75 72 6e 73 20 6e  llback returns n
64e0: 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69 74 20 74 68  on-zero, exit th
64f0: 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  e virtual machin
6500: 65 20 77 69 74 68 0a 20 20 2a 2a 20 61 20 72 65  e with.  ** a re
6510: 74 75 72 6e 20 63 6f 64 65 20 53 51 4c 49 54 45  turn code SQLITE
6520: 5f 41 42 4f 52 54 2e 0a 20 20 2a 2f 0a 20 20 69  _ABORT..  */.  i
6530: 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73  f( db->xProgress
6540: 21 3d 30 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d  !=0 && nVmStep>=
6550: 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 29  nProgressLimit )
6560: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62  {.    assert( db
6570: 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 21 3d  ->nProgressOps!=
6580: 30 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65  0 );.    nProgre
6590: 73 73 4c 69 6d 69 74 20 3d 20 6e 56 6d 53 74 65  ssLimit = nVmSte
65a0: 70 20 2b 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73  p + db->nProgres
65b0: 73 4f 70 73 20 2d 20 28 6e 56 6d 53 74 65 70 25  sOps - (nVmStep%
65c0: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
65d0: 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78  );.    if( db->x
65e0: 50 72 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72  Progress(db->pPr
65f0: 6f 67 72 65 73 73 41 72 67 29 20 29 7b 0a 20 20  ogressArg) ){.  
6600: 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
6610: 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20 20  INTERRUPT;.     
6620: 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72   goto vdbe_error
6630: 5f 68 61 6c 74 3b 0a 20 20 20 20 7d 0a 20 20 7d  _halt;.    }.  }
6640: 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 62 72 65  .#endif.  .  bre
6650: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
6660: 3a 20 20 47 6f 73 75 62 20 50 31 20 50 32 20 2a  :  Gosub P1 P2 *
6670: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
6680: 20 74 68 65 20 63 75 72 72 65 6e 74 20 61 64 64   the current add
6690: 72 65 73 73 20 6f 6e 74 6f 20 72 65 67 69 73 74  ress onto regist
66a0: 65 72 20 50 31 0a 2a 2a 20 61 6e 64 20 74 68 65  er P1.** and the
66b0: 6e 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  n jump to addres
66c0: 73 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  s P2..*/.case OP
66d0: 5f 47 6f 73 75 62 3a 20 7b 20 20 20 20 20 20 20  _Gosub: {       
66e0: 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
66f0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
6700: 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d  1>0 && pOp->p1<=
6710: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
6720: 73 6f 72 29 20 29 3b 0a 20 20 70 49 6e 31 20 3d  sor) );.  pIn1 =
6730: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
6740: 0a 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d  .  assert( VdbeM
6750: 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d  emDynamic(pIn1)=
6760: 3d 30 20 29 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  =0 );.  memAbout
6770: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31  ToChange(p, pIn1
6780: 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  );.  pIn1->flags
6790: 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 49   = MEM_Int;.  pI
67a0: 6e 31 2d 3e 75 2e 69 20 3d 20 28 69 6e 74 29 28  n1->u.i = (int)(
67b0: 70 4f 70 2d 61 4f 70 29 3b 0a 20 20 52 45 47 49  pOp-aOp);.  REGI
67c0: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
67d0: 70 31 2c 20 70 49 6e 31 29 3b 0a 0a 20 20 2f 2a  p1, pIn1);..  /*
67e0: 20 4d 6f 73 74 20 6a 75 6d 70 20 6f 70 65 72 61   Most jump opera
67f0: 74 69 6f 6e 73 20 64 6f 20 61 20 67 6f 74 6f 20  tions do a goto 
6800: 74 6f 20 74 68 69 73 20 73 70 6f 74 20 69 6e 20  to this spot in 
6810: 6f 72 64 65 72 20 74 6f 20 75 70 64 61 74 65 0a  order to update.
6820: 20 20 2a 2a 20 74 68 65 20 70 4f 70 20 70 6f 69    ** the pOp poi
6830: 6e 74 65 72 2e 20 2a 2f 0a 6a 75 6d 70 5f 74 6f  nter. */.jump_to
6840: 5f 70 32 3a 0a 20 20 70 4f 70 20 3d 20 26 61 4f  _p2:.  pOp = &aO
6850: 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a  p[pOp->p2 - 1];.
6860: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
6870: 70 63 6f 64 65 3a 20 20 52 65 74 75 72 6e 20 50  pcode:  Return P
6880: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
6890: 4a 75 6d 70 20 74 6f 20 74 68 65 20 6e 65 78 74  Jump to the next
68a0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 66 74   instruction aft
68b0: 65 72 20 74 68 65 20 61 64 64 72 65 73 73 20 69  er the address i
68c0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  n register P1.  
68d0: 41 66 74 65 72 0a 2a 2a 20 74 68 65 20 6a 75 6d  After.** the jum
68e0: 70 2c 20 72 65 67 69 73 74 65 72 20 50 31 20 62  p, register P1 b
68f0: 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65 64  ecomes undefined
6900: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 74  ..*/.case OP_Ret
6910: 75 72 6e 3a 20 7b 20 20 20 20 20 20 20 20 20 20  urn: {          
6920: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e   /* in1 */.  pIn
6930: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
6940: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
6950: 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49  n1->flags==MEM_I
6960: 6e 74 20 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61  nt );.  pOp = &a
6970: 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20  Op[pIn1->u.i];. 
6980: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d   pIn1->flags = M
6990: 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20  EM_Undefined;.  
69a0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
69b0: 6f 64 65 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69  ode: InitCorouti
69c0: 6e 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ne P1 P2 P3 * *.
69d0: 2a 2a 0a 2a 2a 20 53 65 74 20 75 70 20 72 65 67  **.** Set up reg
69e0: 69 73 74 65 72 20 50 31 20 73 6f 20 74 68 61 74  ister P1 so that
69f0: 20 69 74 20 77 69 6c 6c 20 59 69 65 6c 64 20 74   it will Yield t
6a00: 6f 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 0a  o the coroutine.
6a10: 2a 2a 20 6c 6f 63 61 74 65 64 20 61 74 20 61 64  ** located at ad
6a20: 64 72 65 73 73 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  dress P3..**.** 
6a30: 49 66 20 50 32 21 3d 30 20 74 68 65 6e 20 74 68  If P2!=0 then th
6a40: 65 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70 6c  e coroutine impl
6a50: 65 6d 65 6e 74 61 74 69 6f 6e 20 69 6d 6d 65 64  ementation immed
6a60: 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 0a 2a  iately follows.*
6a70: 2a 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20  * this opcode.  
6a80: 53 6f 20 6a 75 6d 70 20 6f 76 65 72 20 74 68 65  So jump over the
6a90: 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65   coroutine imple
6aa0: 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 0a 2a 2a 20  mentation to.** 
6ab0: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 0a 2a  address P2..**.*
6ac0: 2a 20 53 65 65 20 61 6c 73 6f 3a 20 45 6e 64 43  * See also: EndC
6ad0: 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65  oroutine.*/.case
6ae0: 20 4f 50 5f 49 6e 69 74 43 6f 72 6f 75 74 69 6e   OP_InitCoroutin
6af0: 65 3a 20 7b 20 20 20 20 20 2f 2a 20 6a 75 6d 70  e: {     /* jump
6b00: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
6b10: 70 2d 3e 70 31 3e 30 20 26 26 20 20 70 4f 70 2d  p->p1>0 &&  pOp-
6b20: 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p1<=(p->nMem-p-
6b30: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 61  >nCursor) );.  a
6b40: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d  ssert( pOp->p2>=
6b50: 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e  0 && pOp->p2<p->
6b60: 6e 4f 70 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nOp );.  assert(
6b70: 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 26 26 20 70   pOp->p3>=0 && p
6b80: 4f 70 2d 3e 70 33 3c 70 2d 3e 6e 4f 70 20 29 3b  Op->p3<p->nOp );
6b90: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
6ba0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
6bb0: 72 74 28 20 21 56 64 62 65 4d 65 6d 44 79 6e 61  rt( !VdbeMemDyna
6bc0: 6d 69 63 28 70 4f 75 74 29 20 29 3b 0a 20 20 70  mic(pOut) );.  p
6bd0: 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e  Out->u.i = pOp->
6be0: 70 33 20 2d 20 31 3b 0a 20 20 70 4f 75 74 2d 3e  p3 - 1;.  pOut->
6bf0: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
6c00: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 29  .  if( pOp->p2 )
6c10: 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
6c20: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
6c30: 20 4f 70 63 6f 64 65 3a 20 20 45 6e 64 43 6f 72   Opcode:  EndCor
6c40: 6f 75 74 69 6e 65 20 50 31 20 2a 20 2a 20 2a 20  outine P1 * * * 
6c50: 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 73 74  *.**.** The inst
6c60: 72 75 63 74 69 6f 6e 20 61 74 20 74 68 65 20 61  ruction at the a
6c70: 64 64 72 65 73 73 20 69 6e 20 72 65 67 69 73 74  ddress in regist
6c80: 65 72 20 50 31 20 69 73 20 61 20 59 69 65 6c 64  er P1 is a Yield
6c90: 2e 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65  ..** Jump to the
6ca0: 20 50 32 20 70 61 72 61 6d 65 74 65 72 20 6f 66   P2 parameter of
6cb0: 20 74 68 61 74 20 59 69 65 6c 64 2e 0a 2a 2a 20   that Yield..** 
6cc0: 41 66 74 65 72 20 74 68 65 20 6a 75 6d 70 2c 20  After the jump, 
6cd0: 72 65 67 69 73 74 65 72 20 50 31 20 62 65 63 6f  register P1 beco
6ce0: 6d 65 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a  mes undefined..*
6cf0: 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49  *.** See also: I
6d00: 6e 69 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a  nitCoroutine.*/.
6d10: 63 61 73 65 20 4f 50 5f 45 6e 64 43 6f 72 6f 75  case OP_EndCorou
6d20: 74 69 6e 65 3a 20 7b 20 20 20 20 20 20 20 20 20  tine: {         
6d30: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 56 64    /* in1 */.  Vd
6d40: 62 65 4f 70 20 2a 70 43 61 6c 6c 65 72 3b 0a 20  beOp *pCaller;. 
6d50: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
6d60: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
6d70: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d  ( pIn1->flags==M
6d80: 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65  EM_Int );.  asse
6d90: 72 74 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 3d 30  rt( pIn1->u.i>=0
6da0: 20 26 26 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 2d   && pIn1->u.i<p-
6db0: 3e 6e 4f 70 20 29 3b 0a 20 20 70 43 61 6c 6c 65  >nOp );.  pCalle
6dc0: 72 20 3d 20 26 61 4f 70 5b 70 49 6e 31 2d 3e 75  r = &aOp[pIn1->u
6dd0: 2e 69 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  .i];.  assert( p
6de0: 43 61 6c 6c 65 72 2d 3e 6f 70 63 6f 64 65 3d 3d  Caller->opcode==
6df0: 4f 50 5f 59 69 65 6c 64 20 29 3b 0a 20 20 61 73  OP_Yield );.  as
6e00: 73 65 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e 70  sert( pCaller->p
6e10: 32 3e 3d 30 20 26 26 20 70 43 61 6c 6c 65 72 2d  2>=0 && pCaller-
6e20: 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20  >p2<p->nOp );.  
6e30: 70 4f 70 20 3d 20 26 61 4f 70 5b 70 43 61 6c 6c  pOp = &aOp[pCall
6e40: 65 72 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 70  er->p2 - 1];.  p
6e50: 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  In1->flags = MEM
6e60: 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72  _Undefined;.  br
6e70: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
6e80: 65 3a 20 20 59 69 65 6c 64 20 50 31 20 50 32 20  e:  Yield P1 P2 
6e90: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70  * * *.**.** Swap
6ea0: 20 74 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75   the program cou
6eb0: 6e 74 65 72 20 77 69 74 68 20 74 68 65 20 76 61  nter with the va
6ec0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
6ed0: 50 31 2e 20 20 54 68 69 73 0a 2a 2a 20 68 61 73  P1.  This.** has
6ee0: 20 74 68 65 20 65 66 66 65 63 74 20 6f 66 20 79   the effect of y
6ef0: 69 65 6c 64 69 6e 67 20 74 6f 20 61 20 63 6f 72  ielding to a cor
6f00: 6f 75 74 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  outine..**.** If
6f10: 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 74   the coroutine t
6f20: 68 61 74 20 69 73 20 6c 61 75 6e 63 68 65 64 20  hat is launched 
6f30: 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  by this instruct
6f40: 69 6f 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a  ion ends with.**
6f50: 20 59 69 65 6c 64 20 6f 72 20 52 65 74 75 72 6e   Yield or Return
6f60: 20 74 68 65 6e 20 63 6f 6e 74 69 6e 75 65 20 74   then continue t
6f70: 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
6f80: 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 0a  uction.  But if.
6f90: 2a 2a 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65  ** the coroutine
6fa0: 20 6c 61 75 6e 63 68 65 64 20 62 79 20 74 68 69   launched by thi
6fb0: 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e  s instruction en
6fc0: 64 73 20 77 69 74 68 0a 2a 2a 20 45 6e 64 43 6f  ds with.** EndCo
6fd0: 72 6f 75 74 69 6e 65 2c 20 74 68 65 6e 20 6a 75  routine, then ju
6fe0: 6d 70 20 74 6f 20 50 32 20 72 61 74 68 65 72 20  mp to P2 rather 
6ff0: 74 68 61 6e 20 63 6f 6e 74 69 6e 75 69 6e 67 20  than continuing 
7000: 77 69 74 68 20 74 68 65 0a 2a 2a 20 6e 65 78 74  with the.** next
7010: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
7020: 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e  .** See also: In
7030: 69 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63  itCoroutine.*/.c
7040: 61 73 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20  ase OP_Yield: { 
7050: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
7060: 31 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74  1, jump */.  int
7070: 20 70 63 44 65 73 74 3b 0a 20 20 70 49 6e 31 20   pcDest;.  pIn1 
7080: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
7090: 3b 0a 20 20 61 73 73 65 72 74 28 20 56 64 62 65  ;.  assert( Vdbe
70a0: 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29  MemDynamic(pIn1)
70b0: 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66  ==0 );.  pIn1->f
70c0: 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
70d0: 20 20 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29    pcDest = (int)
70e0: 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e  pIn1->u.i;.  pIn
70f0: 31 2d 3e 75 2e 69 20 3d 20 28 69 6e 74 29 28 70  1->u.i = (int)(p
7100: 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 52 45 47  Op - aOp);.  REG
7110: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
7120: 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 4f  >p1, pIn1);.  pO
7130: 70 20 3d 20 26 61 4f 70 5b 70 63 44 65 73 74 5d  p = &aOp[pcDest]
7140: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
7150: 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74 49 66   Opcode:  HaltIf
7160: 4e 75 6c 6c 20 20 50 31 20 50 32 20 50 33 20 50  Null  P1 P2 P3 P
7170: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
7180: 3a 20 20 69 66 20 72 5b 50 33 5d 3d 6e 75 6c 6c  :  if r[P3]=null
7190: 20 68 61 6c 74 0a 2a 2a 0a 2a 2a 20 43 68 65 63   halt.**.** Chec
71a0: 6b 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  k the value in r
71b0: 65 67 69 73 74 65 72 20 50 33 2e 20 20 49 66 20  egister P3.  If 
71c0: 69 74 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  it is NULL then 
71d0: 48 61 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 70 61  Halt using.** pa
71e0: 72 61 6d 65 74 65 72 20 50 31 2c 20 50 32 2c 20  rameter P1, P2, 
71f0: 61 6e 64 20 50 34 20 61 73 20 69 66 20 74 68 69  and P4 as if thi
7200: 73 20 77 65 72 65 20 61 20 48 61 6c 74 20 69 6e  s were a Halt in
7210: 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74  struction.  If t
7220: 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72  he.** value in r
7230: 65 67 69 73 74 65 72 20 50 33 20 69 73 20 6e 6f  egister P3 is no
7240: 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 69  t NULL, then thi
7250: 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61 20 6e  s routine is a n
7260: 6f 2d 6f 70 2e 0a 2a 2a 20 54 68 65 20 50 35 20  o-op..** The P5 
7270: 70 61 72 61 6d 65 74 65 72 20 73 68 6f 75 6c 64  parameter should
7280: 20 62 65 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f   be 1..*/.case O
7290: 50 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20  P_HaltIfNull: { 
72a0: 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20       /* in3 */. 
72b0: 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
72c0: 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70  p->p3];.  if( (p
72d0: 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
72e0: 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20 62 72 65 61  _Null)==0 ) brea
72f0: 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72  k;.  /* Fall thr
7300: 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 48 61 6c  ough into OP_Hal
7310: 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  t */.}../* Opcod
7320: 65 3a 20 20 48 61 6c 74 20 50 31 20 50 32 20 2a  e:  Halt P1 P2 *
7330: 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 69   P4 P5.**.** Exi
7340: 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20  t immediately.  
7350: 41 6c 6c 20 6f 70 65 6e 20 63 75 72 73 6f 72 73  All open cursors
7360: 2c 20 65 74 63 20 61 72 65 20 63 6c 6f 73 65 64  , etc are closed
7370: 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  .** automaticall
7380: 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  y..**.** P1 is t
7390: 68 65 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72  he result code r
73a0: 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
73b0: 65 33 5f 65 78 65 63 28 29 2c 20 73 71 6c 69 74  e3_exec(), sqlit
73c0: 65 33 5f 72 65 73 65 74 28 29 2c 0a 2a 2a 20 6f  e3_reset(),.** o
73d0: 72 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69  r sqlite3_finali
73e0: 7a 65 28 29 2e 20 20 46 6f 72 20 61 20 6e 6f 72  ze().  For a nor
73f0: 6d 61 6c 20 68 61 6c 74 2c 20 74 68 69 73 20 73  mal halt, this s
7400: 68 6f 75 6c 64 20 62 65 20 53 51 4c 49 54 45 5f  hould be SQLITE_
7410: 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f 72 20 65  OK (0)..** For e
7420: 72 72 6f 72 73 2c 20 69 74 20 63 61 6e 20 62 65  rrors, it can be
7430: 20 73 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c 75   some other valu
7440: 65 2e 20 20 49 66 20 50 31 21 3d 30 20 74 68 65  e.  If P1!=0 the
7450: 6e 20 50 32 20 77 69 6c 6c 20 64 65 74 65 72 6d  n P2 will determ
7460: 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f  ine.** whether o
7470: 72 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62 61 63  r not to rollbac
7480: 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  k the current tr
7490: 61 6e 73 61 63 74 69 6f 6e 2e 20 20 44 6f 20 6e  ansaction.  Do n
74a0: 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69  ot rollback.** i
74b0: 66 20 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44  f P2==OE_Fail. D
74c0: 6f 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 69  o the rollback i
74d0: 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63  f P2==OE_Rollbac
74e0: 6b 2e 20 20 49 66 20 50 32 3d 3d 4f 45 5f 41 62  k.  If P2==OE_Ab
74f0: 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e 20 62 61 63  ort,.** then bac
7500: 6b 20 6f 75 74 20 61 6c 6c 20 63 68 61 6e 67 65  k out all change
7510: 73 20 74 68 61 74 20 68 61 76 65 20 6f 63 63 75  s that have occu
7520: 72 72 65 64 20 64 75 72 69 6e 67 20 74 68 69 73  rred during this
7530: 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 74 68   execution of th
7540: 65 0a 2a 2a 20 56 44 42 45 2c 20 62 75 74 20 64  e.** VDBE, but d
7550: 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74  o not rollback t
7560: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  he transaction. 
7570: 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20  .**.** If P4 is 
7580: 6e 6f 74 20 6e 75 6c 6c 20 74 68 65 6e 20 69 74  not null then it
7590: 20 69 73 20 61 6e 20 65 72 72 6f 72 20 6d 65 73   is an error mes
75a0: 73 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a  sage string..**.
75b0: 2a 2a 20 50 35 20 69 73 20 61 20 76 61 6c 75 65  ** P5 is a value
75c0: 20 62 65 74 77 65 65 6e 20 30 20 61 6e 64 20 34   between 0 and 4
75d0: 2c 20 69 6e 63 6c 75 73 69 76 65 2c 20 74 68 61  , inclusive, tha
75e0: 74 20 6d 6f 64 69 66 69 65 73 20 74 68 65 20 50  t modifies the P
75f0: 34 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20  4 string..**.** 
7600: 20 20 20 30 3a 20 20 28 6e 6f 20 63 68 61 6e 67     0:  (no chang
7610: 65 29 0a 2a 2a 20 20 20 20 31 3a 20 20 4e 4f 54  e).**    1:  NOT
7620: 20 4e 55 4c 4c 20 63 6f 6e 74 72 61 69 6e 74 20   NULL contraint 
7630: 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20  failed: P4.**   
7640: 20 32 3a 20 20 55 4e 49 51 55 45 20 63 6f 6e 73   2:  UNIQUE cons
7650: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50  traint failed: P
7660: 34 0a 2a 2a 20 20 20 20 33 3a 20 20 43 48 45 43  4.**    3:  CHEC
7670: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69  K constraint fai
7680: 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 34 3a  led: P4.**    4:
7690: 20 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f    FOREIGN KEY co
76a0: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a  nstraint failed:
76b0: 20 50 34 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20   P4.**.** If P5 
76c0: 69 73 20 6e 6f 74 20 7a 65 72 6f 20 61 6e 64 20  is not zero and 
76d0: 50 34 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e  P4 is NULL, then
76e0: 20 65 76 65 72 79 74 68 69 6e 67 20 61 66 74 65   everything afte
76f0: 72 20 74 68 65 20 22 3a 22 20 69 73 0a 2a 2a 20  r the ":" is.** 
7700: 6f 6d 69 74 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  omitted..**.** T
7710: 68 65 72 65 20 69 73 20 61 6e 20 69 6d 70 6c 69  here is an impli
7720: 65 64 20 22 48 61 6c 74 20 30 20 30 20 30 22 20  ed "Halt 0 0 0" 
7730: 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 73 65  instruction inse
7740: 72 74 65 64 20 61 74 20 74 68 65 20 76 65 72 79  rted at the very
7750: 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 76 65 72 79   end of.** every
7760: 20 70 72 6f 67 72 61 6d 2e 20 20 53 6f 20 61 20   program.  So a 
7770: 6a 75 6d 70 20 70 61 73 74 20 74 68 65 20 6c 61  jump past the la
7780: 73 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  st instruction o
7790: 66 20 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a  f the program.**
77a0: 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20   is the same as 
77b0: 65 78 65 63 75 74 69 6e 67 20 48 61 6c 74 2e 0a  executing Halt..
77c0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 3a  */.case OP_Halt:
77d0: 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20   {.  const char 
77e0: 2a 7a 54 79 70 65 3b 0a 20 20 63 6f 6e 73 74 20  *zType;.  const 
77f0: 63 68 61 72 20 2a 7a 4c 6f 67 46 6d 74 3b 0a 20  char *zLogFmt;. 
7800: 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
7810: 6d 65 3b 0a 20 20 69 6e 74 20 70 63 78 3b 0a 0a  me;.  int pcx;..
7820: 20 20 70 63 78 20 3d 20 28 69 6e 74 29 28 70 4f    pcx = (int)(pO
7830: 70 20 2d 20 61 4f 70 29 3b 0a 20 20 69 66 28 20  p - aOp);.  if( 
7840: 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54 45 5f  pOp->p1==SQLITE_
7850: 4f 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d 65 20  OK && p->pFrame 
7860: 29 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74 20 74  ){.    /* Halt t
7870: 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20  he sub-program. 
7880: 52 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c 20 74  Return control t
7890: 6f 20 74 68 65 20 70 61 72 65 6e 74 20 66 72 61  o the parent fra
78a0: 6d 65 2e 20 2a 2f 0a 20 20 20 20 70 46 72 61 6d  me. */.    pFram
78b0: 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20  e = p->pFrame;. 
78c0: 20 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70     p->pFrame = p
78d0: 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 0a  Frame->pParent;.
78e0: 20 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b      p->nFrame--;
78f0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
7900: 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70  SetChanges(db, p
7910: 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 20 20  ->nChange);.    
7920: 70 63 78 20 3d 20 73 71 6c 69 74 65 33 56 64 62  pcx = sqlite3Vdb
7930: 65 46 72 61 6d 65 52 65 73 74 6f 72 65 28 70 46  eFrameRestore(pF
7940: 72 61 6d 65 29 3b 0a 20 20 20 20 6c 61 73 74 52  rame);.    lastR
7950: 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52  owid = db->lastR
7960: 6f 77 69 64 3b 0a 20 20 20 20 69 66 28 20 70 4f  owid;.    if( pO
7970: 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65  p->p2==OE_Ignore
7980: 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 6e 73   ){.      /* Ins
7990: 74 72 75 63 74 69 6f 6e 20 70 63 78 20 69 73 20  truction pcx is 
79a0: 74 68 65 20 4f 50 5f 50 72 6f 67 72 61 6d 20 74  the OP_Program t
79b0: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 65 20  hat invoked the 
79c0: 73 75 62 2d 70 72 6f 67 72 61 6d 20 0a 20 20 20  sub-program .   
79d0: 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20     ** currently 
79e0: 62 65 69 6e 67 20 68 61 6c 74 65 64 2e 20 49 66  being halted. If
79f0: 20 74 68 65 20 70 32 20 69 6e 73 74 72 75 63 74   the p2 instruct
7a00: 69 6f 6e 20 6f 66 20 74 68 69 73 20 4f 50 5f 48  ion of this OP_H
7a10: 61 6c 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e 73  alt.      ** ins
7a20: 74 72 75 63 74 69 6f 6e 20 69 73 20 73 65 74 20  truction is set 
7a30: 74 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 74 68  to OE_Ignore, th
7a40: 65 6e 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  en the sub-progr
7a50: 61 6d 20 69 73 20 74 68 72 6f 77 69 6e 67 0a 20  am is throwing. 
7a60: 20 20 20 20 20 2a 2a 20 61 6e 20 49 47 4e 4f 52       ** an IGNOR
7a70: 45 20 65 78 63 65 70 74 69 6f 6e 2e 20 49 6e 20  E exception. In 
7a80: 74 68 69 73 20 63 61 73 65 20 6a 75 6d 70 20 74  this case jump t
7a90: 6f 20 74 68 65 20 61 64 64 72 65 73 73 20 73 70  o the address sp
7aa0: 65 63 69 66 69 65 64 0a 20 20 20 20 20 20 2a 2a  ecified.      **
7ab0: 20 61 73 20 74 68 65 20 70 32 20 6f 66 20 74 68   as the p2 of th
7ac0: 65 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f  e calling OP_Pro
7ad0: 67 72 61 6d 2e 20 20 2a 2f 0a 20 20 20 20 20 20  gram.  */.      
7ae0: 70 63 78 20 3d 20 70 2d 3e 61 4f 70 5b 70 63 78  pcx = p->aOp[pcx
7af0: 5d 2e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20  ].p2-1;.    }.  
7b00: 20 20 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a    aOp = p->aOp;.
7b10: 20 20 20 20 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d      aMem = p->aM
7b20: 65 6d 3b 0a 20 20 20 20 70 4f 70 20 3d 20 26 61  em;.    pOp = &a
7b30: 4f 70 5b 70 63 78 5d 3b 0a 20 20 20 20 62 72 65  Op[pcx];.    bre
7b40: 61 6b 3b 0a 20 20 7d 0a 20 20 70 2d 3e 72 63 20  ak;.  }.  p->rc 
7b50: 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e  = pOp->p1;.  p->
7b60: 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28 75  errorAction = (u
7b70: 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 2d 3e  8)pOp->p2;.  p->
7b80: 70 63 20 3d 20 70 63 78 3b 0a 20 20 69 66 28 20  pc = pcx;.  if( 
7b90: 70 2d 3e 72 63 20 29 7b 0a 20 20 20 20 69 66 28  p->rc ){.    if(
7ba0: 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20   pOp->p5 ){.    
7bb0: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63    static const c
7bc0: 68 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a 54 79  har * const azTy
7bd0: 70 65 5b 5d 20 3d 20 7b 20 22 4e 4f 54 20 4e 55  pe[] = { "NOT NU
7be0: 4c 4c 22 2c 20 22 55 4e 49 51 55 45 22 2c 20 22  LL", "UNIQUE", "
7bf0: 43 48 45 43 4b 22 2c 0a 20 20 20 20 20 20 20 20  CHECK",.        
7c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c20: 20 20 20 20 20 22 46 4f 52 45 49 47 4e 20 4b 45       "FOREIGN KE
7c30: 59 22 20 7d 3b 0a 20 20 20 20 20 20 61 73 73 65  Y" };.      asse
7c40: 72 74 28 20 70 4f 70 2d 3e 70 35 3e 3d 31 20 26  rt( pOp->p5>=1 &
7c50: 26 20 70 4f 70 2d 3e 70 35 3c 3d 34 20 29 3b 0a  & pOp->p5<=4 );.
7c60: 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
7c70: 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20  pOp->p5==1 );.  
7c80: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f      testcase( pO
7c90: 70 2d 3e 70 35 3d 3d 32 20 29 3b 0a 20 20 20 20  p->p5==2 );.    
7ca0: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
7cb0: 3e 70 35 3d 3d 33 20 29 3b 0a 20 20 20 20 20 20  >p5==3 );.      
7cc0: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
7cd0: 35 3d 3d 34 20 29 3b 0a 20 20 20 20 20 20 7a 54  5==4 );.      zT
7ce0: 79 70 65 20 3d 20 61 7a 54 79 70 65 5b 70 4f 70  ype = azType[pOp
7cf0: 2d 3e 70 35 2d 31 5d 3b 0a 20 20 20 20 7d 65 6c  ->p5-1];.    }el
7d00: 73 65 7b 0a 20 20 20 20 20 20 7a 54 79 70 65 20  se{.      zType 
7d10: 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61  = 0;.    }.    a
7d20: 73 73 65 72 74 28 20 7a 54 79 70 65 21 3d 30 20  ssert( zType!=0 
7d30: 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20  || pOp->p4.z!=0 
7d40: 29 3b 0a 20 20 20 20 7a 4c 6f 67 46 6d 74 20 3d  );.    zLogFmt =
7d50: 20 22 61 62 6f 72 74 20 61 74 20 25 64 20 69 6e   "abort at %d in
7d60: 20 5b 25 73 5d 3a 20 25 73 22 3b 0a 20 20 20 20   [%s]: %s";.    
7d70: 69 66 28 20 7a 54 79 70 65 20 26 26 20 70 4f 70  if( zType && pOp
7d80: 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20  ->p4.z ){.      
7d90: 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
7da0: 28 70 2c 20 22 25 73 20 63 6f 6e 73 74 72 61 69  (p, "%s constrai
7db0: 6e 74 20 66 61 69 6c 65 64 3a 20 25 73 22 2c 20  nt failed: %s", 
7dc0: 7a 54 79 70 65 2c 20 70 4f 70 2d 3e 70 34 2e 7a  zType, pOp->p4.z
7dd0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
7de0: 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20   pOp->p4.z ){.  
7df0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
7e00: 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 70 4f  rror(p, "%s", pO
7e10: 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 65  p->p4.z);.    }e
7e20: 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  lse{.      sqlit
7e30: 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22  e3VdbeError(p, "
7e40: 25 73 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  %s constraint fa
7e50: 69 6c 65 64 22 2c 20 7a 54 79 70 65 29 3b 0a 20  iled", zType);. 
7e60: 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
7e70: 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c 20 7a 4c  _log(pOp->p1, zL
7e80: 6f 67 46 6d 74 2c 20 70 63 78 2c 20 70 2d 3e 7a  ogFmt, pcx, p->z
7e90: 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29  Sql, p->zErrMsg)
7ea0: 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  ;.  }.  rc = sql
7eb0: 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b  ite3VdbeHalt(p);
7ec0: 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
7ed0: 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 72 63  QLITE_BUSY || rc
7ee0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72  ==SQLITE_OK || r
7ef0: 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52 20  c==SQLITE_ERROR 
7f00: 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
7f10: 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
7f20: 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c  p->rc = rc = SQL
7f30: 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73  ITE_BUSY;.  }els
7f40: 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  e{.    assert( r
7f50: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
7f60: 28 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53 51  (p->rc&0xff)==SQ
7f70: 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20  LITE_CONSTRAINT 
7f80: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  );.    assert( r
7f90: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
7fa0: 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
7fb0: 73 3e 30 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65  s>0 || db->nDefe
7fc0: 72 72 65 64 49 6d 6d 43 6f 6e 73 3e 30 20 29 3b  rredImmCons>0 );
7fd0: 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 20  .    rc = p->rc 
7fe0: 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 3a  ? SQLITE_ERROR :
7ff0: 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20   SQLITE_DONE;.  
8000: 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65  }.  goto vdbe_re
8010: 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  turn;.}../* Opco
8020: 64 65 3a 20 49 6e 74 65 67 65 72 20 50 31 20 50  de: Integer P1 P
8030: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
8040: 73 69 73 3a 20 72 5b 50 32 5d 3d 50 31 0a 2a 2a  sis: r[P2]=P1.**
8050: 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69 74 20 69  .** The 32-bit i
8060: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 31 20  nteger value P1 
8070: 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20  is written into 
8080: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
8090: 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 65 72 3a  case OP_Integer:
80a0: 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75   {         /* ou
80b0: 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f  t2 */.  pOut = o
80c0: 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
80d0: 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75   pOp);.  pOut->u
80e0: 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  .i = pOp->p1;.  
80f0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
8100: 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20 50 32 20  ode: Int64 * P2 
8110: 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
8120: 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a  is: r[P2]=P4.**.
8130: 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
8140: 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20 69  er to a 64-bit i
8150: 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2a  nteger value..**
8160: 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75   Write that valu
8170: 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
8180: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P2..*/.case OP_I
8190: 6e 74 36 34 3a 20 7b 20 20 20 20 20 20 20 20 20  nt64: {         
81a0: 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70    /* out2 */.  p
81b0: 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
81c0: 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
81d0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
81e0: 70 49 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75  pI64!=0 );.  pOu
81f0: 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70  t->u.i = *pOp->p
8200: 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b  4.pI64;.  break;
8210: 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
8220: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
8230: 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65  _POINT./* Opcode
8240: 3a 20 52 65 61 6c 20 2a 20 50 32 20 2a 20 50 34  : Real * P2 * P4
8250: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
8260: 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50  r[P2]=P4.**.** P
8270: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
8280: 6f 20 61 20 36 34 2d 62 69 74 20 66 6c 6f 61 74  o a 64-bit float
8290: 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e  ing point value.
82a0: 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20 76  .** Write that v
82b0: 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74  alue into regist
82c0: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
82d0: 50 5f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20  P_Real: {       
82e0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
82f0: 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 20 2a  TK_FLOAT, out2 *
8300: 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  /.  pOut = out2P
8310: 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
8320: 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  );.  pOut->flags
8330: 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 61   = MEM_Real;.  a
8340: 73 73 65 72 74 28 20 21 73 71 6c 69 74 65 33 49  ssert( !sqlite3I
8350: 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70 52  sNaN(*pOp->p4.pR
8360: 65 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  eal) );.  pOut->
8370: 75 2e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70  u.r = *pOp->p4.p
8380: 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Real;.  break;.}
8390: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f  .#endif../* Opco
83a0: 64 65 3a 20 53 74 72 69 6e 67 38 20 2a 20 50 32  de: String8 * P2
83b0: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
83c0: 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27 0a  sis: r[P2]='P4'.
83d0: 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20  **.** P4 points 
83e0: 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61  to a nul termina
83f0: 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67  ted UTF-8 string
8400: 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  . This opcode is
8410: 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a   transformed .**
8420: 20 69 6e 74 6f 20 61 20 53 74 72 69 6e 67 20 6f   into a String o
8430: 70 63 6f 64 65 20 62 65 66 6f 72 65 20 69 74 20  pcode before it 
8440: 69 73 20 65 78 65 63 75 74 65 64 20 66 6f 72 20  is executed for 
8450: 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 2e 20  the first time. 
8460: 20 44 75 72 69 6e 67 0a 2a 2a 20 74 68 69 73 20   During.** this 
8470: 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 2c 20  transformation, 
8480: 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 73 74  the length of st
8490: 72 69 6e 67 20 50 34 20 69 73 20 63 6f 6d 70 75  ring P4 is compu
84a0: 74 65 64 20 61 6e 64 20 73 74 6f 72 65 64 0a 2a  ted and stored.*
84b0: 2a 20 61 73 20 74 68 65 20 50 31 20 70 61 72 61  * as the P1 para
84c0: 6d 65 74 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f  meter..*/.case O
84d0: 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20 20 20  P_String8: {    
84e0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
84f0: 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32 20  TK_STRING, out2 
8500: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
8510: 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70  ->p4.z!=0 );.  p
8520: 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
8530: 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
8540: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50  pOp->opcode = OP
8550: 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e  _String;.  pOp->
8560: 70 31 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  p1 = sqlite3Strl
8570: 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b  en30(pOp->p4.z);
8580: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
8590: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 69 66  _OMIT_UTF16.  if
85a0: 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49  ( encoding!=SQLI
85b0: 54 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20 72  TE_UTF8 ){.    r
85c0: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
85d0: 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70  emSetStr(pOut, p
85e0: 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53 51  Op->p4.z, -1, SQ
85f0: 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54  LITE_UTF8, SQLIT
8600: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 69  E_STATIC);.    i
8610: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f  f( rc==SQLITE_TO
8620: 4f 42 49 47 20 29 20 67 6f 74 6f 20 74 6f 6f 5f  OBIG ) goto too_
8630: 62 69 67 3b 0a 20 20 20 20 69 66 28 20 53 51 4c  big;.    if( SQL
8640: 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 56  ITE_OK!=sqlite3V
8650: 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
8660: 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67  g(pOut, encoding
8670: 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  ) ) goto no_mem;
8680: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 75  .    assert( pOu
8690: 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 3e 30 20 26 26  t->szMalloc>0 &&
86a0: 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d   pOut->zMalloc==
86b0: 70 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20 20 20 61  pOut->z );.    a
86c0: 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79  ssert( VdbeMemDy
86d0: 6e 61 6d 69 63 28 70 4f 75 74 29 3d 3d 30 20 29  namic(pOut)==0 )
86e0: 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 73 7a 4d 61  ;.    pOut->szMa
86f0: 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 70 4f  lloc = 0;.    pO
8700: 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ut->flags |= MEM
8710: 5f 53 74 61 74 69 63 3b 0a 20 20 20 20 69 66 28  _Static;.    if(
8720: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
8730: 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20 20 20  _DYNAMIC ){.    
8740: 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
8750: 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  db, pOp->p4.z);.
8760: 20 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d 3e 70      }.    pOp->p
8770: 34 74 79 70 65 20 3d 20 50 34 5f 44 59 4e 41 4d  4type = P4_DYNAM
8780: 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e  IC;.    pOp->p4.
8790: 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20  z = pOut->z;.   
87a0: 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75 74 2d   pOp->p1 = pOut-
87b0: 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20  >n;.  }.#endif. 
87c0: 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64 62 2d   if( pOp->p1>db-
87d0: 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
87e0: 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
87f0: 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
8800: 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20  ;.  }.  /* Fall 
8810: 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
8820: 65 78 74 20 63 61 73 65 2c 20 4f 50 5f 53 74 72  ext case, OP_Str
8830: 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f  ing */.}.  ./* O
8840: 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 20 50 31  pcode: String P1
8850: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
8860: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
8870: 27 50 34 27 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a  'P4' (len=P1).**
8880: 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20 76  .** The string v
8890: 61 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e 67 74  alue P4 of lengt
88a0: 68 20 50 31 20 28 62 79 74 65 73 29 20 69 73 20  h P1 (bytes) is 
88b0: 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
88c0: 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P2..**.** If 
88d0: 50 35 21 3d 30 20 61 6e 64 20 74 68 65 20 63 6f  P5!=0 and the co
88e0: 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
88f0: 72 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20  r P3 is greater 
8900: 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 0a  than zero, then.
8910: 2a 2a 20 74 68 65 20 64 61 74 61 74 79 70 65 20  ** the datatype 
8920: 6f 66 20 74 68 65 20 72 65 67 69 73 74 65 72 20  of the register 
8930: 50 32 20 69 73 20 63 6f 6e 76 65 72 74 65 64 20  P2 is converted 
8940: 74 6f 20 42 4c 4f 42 2e 20 20 54 68 65 20 63 6f  to BLOB.  The co
8950: 6e 74 65 6e 74 20 69 73 0a 2a 2a 20 74 68 65 20  ntent is.** the 
8960: 73 61 6d 65 20 73 65 71 75 65 6e 63 65 20 6f 66  same sequence of
8970: 20 62 79 74 65 73 2c 20 69 74 20 69 73 20 6d 65   bytes, it is me
8980: 72 65 6c 79 20 69 6e 74 65 72 70 72 65 74 65 64  rely interpreted
8990: 20 61 73 20 61 20 42 4c 4f 42 20 69 6e 73 74 65   as a BLOB inste
89a0: 61 64 0a 2a 2a 20 6f 66 20 61 20 73 74 72 69 6e  ad.** of a strin
89b0: 67 2c 20 61 73 20 69 66 20 69 74 20 68 61 64 20  g, as if it had 
89c0: 62 65 65 6e 20 43 41 53 54 2e 0a 2a 2f 0a 63 61  been CAST..*/.ca
89d0: 73 65 20 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20  se OP_String: { 
89e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
89f0: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
8a00: 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20  p->p4.z!=0 );.  
8a10: 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
8a20: 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
8a30: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
8a40: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69  EM_Str|MEM_Stati
8a50: 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f  c|MEM_Term;.  pO
8a60: 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e  ut->z = pOp->p4.
8a70: 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 70  z;.  pOut->n = p
8a80: 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f 75 74 2d 3e  Op->p1;.  pOut->
8a90: 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
8aa0: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
8ab0: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 69  BSIZE(pOut);.  i
8ac0: 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20  f( pOp->p5 ){.  
8ad0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
8ae0: 33 3e 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  3>0 );.    asser
8af0: 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  t( pOp->p3<=(p->
8b00: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
8b10: 20 29 3b 0a 20 20 20 20 70 49 6e 33 20 3d 20 26   );.    pIn3 = &
8b20: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
8b30: 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d     assert( pIn3-
8b40: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
8b50: 20 29 3b 0a 20 20 20 20 69 66 28 20 70 49 6e 33   );.    if( pIn3
8b60: 2d 3e 75 2e 69 20 29 20 70 4f 75 74 2d 3e 66 6c  ->u.i ) pOut->fl
8b70: 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 7c 4d  ags = MEM_Blob|M
8b80: 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65  EM_Static|MEM_Te
8b90: 72 6d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  rm;.  }.  break;
8ba0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
8bb0: 75 6c 6c 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ull P1 P2 P3 * *
8bc0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
8bd0: 5b 50 32 2e 2e 50 33 5d 3d 4e 55 4c 4c 0a 2a 2a  [P2..P3]=NULL.**
8be0: 0a 2a 2a 20 57 72 69 74 65 20 61 20 4e 55 4c 4c  .** Write a NULL
8bf0: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20   into registers 
8c00: 50 32 2e 20 20 49 66 20 50 33 20 67 72 65 61 74  P2.  If P3 great
8c10: 65 72 20 74 68 61 6e 20 50 32 2c 20 74 68 65 6e  er than P2, then
8c20: 20 61 6c 73 6f 20 77 72 69 74 65 0a 2a 2a 20 4e   also write.** N
8c30: 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ULL into registe
8c40: 72 20 50 33 20 61 6e 64 20 65 76 65 72 79 20 72  r P3 and every r
8c50: 65 67 69 73 74 65 72 20 69 6e 20 62 65 74 77 65  egister in betwe
8c60: 65 6e 20 50 32 20 61 6e 64 20 50 33 2e 20 20 49  en P2 and P3.  I
8c70: 66 20 50 33 0a 2a 2a 20 69 73 20 6c 65 73 73 20  f P3.** is less 
8c80: 74 68 61 6e 20 50 32 20 28 74 79 70 69 63 61 6c  than P2 (typical
8c90: 6c 79 20 50 33 20 69 73 20 7a 65 72 6f 29 20 74  ly P3 is zero) t
8ca0: 68 65 6e 20 6f 6e 6c 79 20 72 65 67 69 73 74 65  hen only registe
8cb0: 72 20 50 32 20 69 73 0a 2a 2a 20 73 65 74 20 74  r P2 is.** set t
8cc0: 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66  o NULL..**.** If
8cd0: 20 74 68 65 20 50 31 20 76 61 6c 75 65 20 69 73   the P1 value is
8ce0: 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
8cf0: 61 6c 73 6f 20 73 65 74 20 74 68 65 20 4d 45 4d  also set the MEM
8d00: 5f 43 6c 65 61 72 65 64 20 66 6c 61 67 20 73 6f  _Cleared flag so
8d10: 20 74 68 61 74 0a 2a 2a 20 4e 55 4c 4c 20 76 61   that.** NULL va
8d20: 6c 75 65 73 20 77 69 6c 6c 20 6e 6f 74 20 63 6f  lues will not co
8d30: 6d 70 61 72 65 20 65 71 75 61 6c 20 65 76 65 6e  mpare equal even
8d40: 20 69 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45   if SQLITE_NULLE
8d50: 51 20 69 73 20 73 65 74 20 6f 6e 0a 2a 2a 20 4f  Q is set on.** O
8d60: 50 5f 4e 65 20 6f 72 20 4f 50 5f 45 71 2e 0a 2a  P_Ne or OP_Eq..*
8d70: 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20  /.case OP_Null: 
8d80: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
8d90: 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74  ut2 */.  int cnt
8da0: 3b 0a 20 20 75 31 36 20 6e 75 6c 6c 46 6c 61 67  ;.  u16 nullFlag
8db0: 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
8dc0: 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
8dd0: 29 3b 0a 20 20 63 6e 74 20 3d 20 70 4f 70 2d 3e  );.  cnt = pOp->
8de0: 70 33 2d 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73  p3-pOp->p2;.  as
8df0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28  sert( pOp->p3<=(
8e00: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
8e10: 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66  or) );.  pOut->f
8e20: 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 20  lags = nullFlag 
8e30: 3d 20 70 4f 70 2d 3e 70 31 20 3f 20 28 4d 45 4d  = pOp->p1 ? (MEM
8e40: 5f 4e 75 6c 6c 7c 4d 45 4d 5f 43 6c 65 61 72 65  _Null|MEM_Cleare
8e50: 64 29 20 3a 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  d) : MEM_Null;. 
8e60: 20 77 68 69 6c 65 28 20 63 6e 74 3e 30 20 29 7b   while( cnt>0 ){
8e70: 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20  .    pOut++;.   
8e80: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
8e90: 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  e(p, pOut);.    
8ea0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
8eb0: 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20  tNull(pOut);.   
8ec0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e   pOut->flags = n
8ed0: 75 6c 6c 46 6c 61 67 3b 0a 20 20 20 20 63 6e 74  ullFlag;.    cnt
8ee0: 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  --;.  }.  break;
8ef0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
8f00: 6f 66 74 4e 75 6c 6c 20 50 31 20 2a 20 2a 20 2a  oftNull P1 * * *
8f10: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
8f20: 20 72 5b 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a   r[P1]=NULL.**.*
8f30: 2a 20 53 65 74 20 72 65 67 69 73 74 65 72 20 50  * Set register P
8f40: 31 20 74 6f 20 68 61 76 65 20 74 68 65 20 76 61  1 to have the va
8f50: 6c 75 65 20 4e 55 4c 4c 20 61 73 20 73 65 65 6e  lue NULL as seen
8f60: 20 62 79 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52   by the OP_MakeR
8f70: 65 63 6f 72 64 0a 2a 2a 20 69 6e 73 74 72 75 63  ecord.** instruc
8f80: 74 69 6f 6e 2c 20 62 75 74 20 64 6f 20 6e 6f 74  tion, but do not
8f90: 20 66 72 65 65 20 61 6e 79 20 73 74 72 69 6e 67   free any string
8fa0: 20 6f 72 20 62 6c 6f 62 20 6d 65 6d 6f 72 79 20   or blob memory 
8fb0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a  associated with.
8fc0: 2a 2a 20 74 68 65 20 72 65 67 69 73 74 65 72 2c  ** the register,
8fd0: 20 73 6f 20 74 68 61 74 20 69 66 20 74 68 65 20   so that if the 
8fe0: 76 61 6c 75 65 20 77 61 73 20 61 20 73 74 72 69  value was a stri
8ff0: 6e 67 20 6f 72 20 62 6c 6f 62 20 74 68 61 74 20  ng or blob that 
9000: 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c  was.** previousl
9010: 79 20 63 6f 70 69 65 64 20 75 73 69 6e 67 20 4f  y copied using O
9020: 50 5f 53 43 6f 70 79 2c 20 74 68 65 20 63 6f 70  P_SCopy, the cop
9030: 69 65 73 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75  ies will continu
9040: 65 20 74 6f 20 62 65 20 76 61 6c 69 64 2e 0a 2a  e to be valid..*
9050: 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 66 74 4e 75  /.case OP_SoftNu
9060: 6c 6c 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  ll: {.  assert( 
9070: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
9080: 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p1<=(p->nMem-p
9090: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
90a0: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
90b0: 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66  ->p1];.  pOut->f
90c0: 6c 61 67 73 20 3d 20 28 70 4f 75 74 2d 3e 66 6c  lags = (pOut->fl
90d0: 61 67 73 7c 4d 45 4d 5f 4e 75 6c 6c 29 26 7e 4d  ags|MEM_Null)&~M
90e0: 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20  EM_Undefined;.  
90f0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
9100: 6f 64 65 3a 20 42 6c 6f 62 20 50 31 20 50 32 20  ode: Blob P1 P2 
9110: 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
9120: 69 73 3a 20 72 5b 50 32 5d 3d 50 34 20 28 6c 65  is: r[P2]=P4 (le
9130: 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 50 34 20 70  n=P1).**.** P4 p
9140: 6f 69 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62 20  oints to a blob 
9150: 6f 66 20 64 61 74 61 20 50 31 20 62 79 74 65 73  of data P1 bytes
9160: 20 6c 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74 68   long.  Store th
9170: 69 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65  is.** blob in re
9180: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61  gister P2..*/.ca
9190: 73 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20  se OP_Blob: {   
91a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
91b0: 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72 74  out2 */.  assert
91c0: 28 20 70 4f 70 2d 3e 70 31 20 3c 3d 20 53 51 4c  ( pOp->p1 <= SQL
91d0: 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 20 29  ITE_MAX_LENGTH )
91e0: 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
91f0: 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
9200: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
9210: 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20  MemSetStr(pOut, 
9220: 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d 3e  pOp->p4.z, pOp->
9230: 70 31 2c 20 30 2c 20 30 29 3b 0a 20 20 70 4f 75  p1, 0, 0);.  pOu
9240: 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e  t->enc = encodin
9250: 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  g;.  UPDATE_MAX_
9260: 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
9270: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
9280: 70 63 6f 64 65 3a 20 56 61 72 69 61 62 6c 65 20  pcode: Variable 
9290: 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20  P1 P2 * P4 *.** 
92a0: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
92b0: 70 61 72 61 6d 65 74 65 72 28 50 31 2c 50 34 29  parameter(P1,P4)
92c0: 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20  .**.** Transfer 
92d0: 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 62 6f  the values of bo
92e0: 75 6e 64 20 70 61 72 61 6d 65 74 65 72 20 50 31  und parameter P1
92f0: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
9300: 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 70  2.**.** If the p
9310: 61 72 61 6d 65 74 65 72 20 69 73 20 6e 61 6d 65  arameter is name
9320: 64 2c 20 74 68 65 6e 20 69 74 73 20 6e 61 6d 65  d, then its name
9330: 20 61 70 70 65 61 72 73 20 69 6e 20 50 34 2e 0a   appears in P4..
9340: 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20  ** The P4 value 
9350: 69 73 20 75 73 65 64 20 62 79 20 73 71 6c 69 74  is used by sqlit
9360: 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
9370: 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61 73  r_name()..*/.cas
9380: 65 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a 20 7b  e OP_Variable: {
9390: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
93a0: 75 74 32 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 56  ut2 */.  Mem *pV
93b0: 61 72 3b 20 20 20 20 20 20 20 2f 2a 20 56 61 6c  ar;       /* Val
93c0: 75 65 20 62 65 69 6e 67 20 74 72 61 6e 73 66 65  ue being transfe
93d0: 72 72 65 64 20 2a 2f 0a 0a 20 20 61 73 73 65 72  rred */..  asser
93e0: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20  t( pOp->p1>0 && 
93f0: 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 56 61 72  pOp->p1<=p->nVar
9400: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
9410: 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c 20 70 4f  p->p4.z==0 || pO
9420: 70 2d 3e 70 34 2e 7a 3d 3d 70 2d 3e 61 7a 56 61  p->p4.z==p->azVa
9430: 72 5b 70 4f 70 2d 3e 70 31 2d 31 5d 20 29 3b 0a  r[pOp->p1-1] );.
9440: 20 20 70 56 61 72 20 3d 20 26 70 2d 3e 61 56 61    pVar = &p->aVa
9450: 72 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a  r[pOp->p1 - 1];.
9460: 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
9470: 65 4d 65 6d 54 6f 6f 42 69 67 28 70 56 61 72 29  eMemTooBig(pVar)
9480: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
9490: 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  _big;.  }.  pOut
94a0: 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
94b0: 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 73 71 6c  e(p, pOp);.  sql
94c0: 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
94d0: 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 56 61  owCopy(pOut, pVa
94e0: 72 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a  r, MEM_Static);.
94f0: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
9500: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
9510: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
9520: 64 65 3a 20 4d 6f 76 65 20 50 31 20 50 32 20 50  de: Move P1 P2 P
9530: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
9540: 73 3a 20 20 72 5b 50 32 40 50 33 5d 3d 72 5b 50  s:  r[P2@P3]=r[P
9550: 31 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65  1@P3].**.** Move
9560: 20 74 68 65 20 50 33 20 76 61 6c 75 65 73 20 69   the P3 values i
9570: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 2e 50  n register P1..P
9580: 31 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e 74 6f  1+P3-1 over into
9590: 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20 50 32  .** registers P2
95a0: 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65 67 69  ..P2+P3-1.  Regi
95b0: 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 2d  sters P1..P1+P3-
95c0: 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20 68 6f  1 are.** left ho
95d0: 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20 20 49  lding a NULL.  I
95e0: 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f  t is an error fo
95f0: 72 20 72 65 67 69 73 74 65 72 20 72 61 6e 67 65  r register range
9600: 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33 2d 31  s.** P1..P1+P3-1
9610: 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33 2d 31   and P2..P2+P3-1
9620: 20 74 6f 20 6f 76 65 72 6c 61 70 2e 20 20 49 74   to overlap.  It
9630: 20 69 73 20 61 6e 20 65 72 72 6f 72 0a 2a 2a 20   is an error.** 
9640: 66 6f 72 20 50 33 20 74 6f 20 62 65 20 6c 65 73  for P3 to be les
9650: 73 20 74 68 61 6e 20 31 2e 0a 2a 2f 0a 63 61 73  s than 1..*/.cas
9660: 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20 69  e OP_Move: {.  i
9670: 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20  nt n;           
9680: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67  /* Number of reg
9690: 69 73 74 65 72 73 20 6c 65 66 74 20 74 6f 20 63  isters left to c
96a0: 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b  opy */.  int p1;
96b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
96c0: 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 66 72  ister to copy fr
96d0: 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20  om */.  int p2; 
96e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
96f0: 73 74 65 72 20 74 6f 20 63 6f 70 79 20 74 6f 20  ster to copy to 
9700: 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70  */..  n = pOp->p
9710: 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70  3;.  p1 = pOp->p
9720: 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70  1;.  p2 = pOp->p
9730: 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30  2;.  assert( n>0
9740: 20 26 26 20 70 31 3e 30 20 26 26 20 70 32 3e 30   && p1>0 && p2>0
9750: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31   );.  assert( p1
9760: 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d  +n<=p2 || p2+n<=
9770: 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31 20 3d 20  p1 );..  pIn1 = 
9780: 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f 75  &aMem[p1];.  pOu
9790: 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20  t = &aMem[p2];. 
97a0: 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74 28   do{.    assert(
97b0: 20 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b 28 70 2d   pOut<=&aMem[(p-
97c0: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
97d0: 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  )] );.    assert
97e0: 28 20 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b 28 70  ( pIn1<=&aMem[(p
97f0: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
9800: 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72  r)] );.    asser
9810: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49  t( memIsValid(pI
9820: 6e 31 29 20 29 3b 0a 20 20 20 20 6d 65 6d 41 62  n1) );.    memAb
9830: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
9840: 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  Out);.    sqlite
9850: 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75  3VdbeMemMove(pOu
9860: 74 2c 20 70 49 6e 31 29 3b 0a 23 69 66 64 65 66  t, pIn1);.#ifdef
9870: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
9880: 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f    if( pOut->pSco
9890: 70 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d 5b 70 31  pyFrom>=&aMem[p1
98a0: 5d 20 26 26 20 70 4f 75 74 2d 3e 70 53 63 6f 70  ] && pOut->pScop
98b0: 79 46 72 6f 6d 3c 70 4f 75 74 20 29 7b 0a 20 20  yFrom<pOut ){.  
98c0: 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79      pOut->pScopy
98d0: 46 72 6f 6d 20 2b 3d 20 70 4f 70 2d 3e 70 32 20  From += pOp->p2 
98e0: 2d 20 70 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  - p1;.    }.#end
98f0: 69 66 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72  if.    Deephemer
9900: 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 20 20 20  alize(pOut);.   
9910: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
9920: 70 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20 20 20  p2++, pOut);.   
9930: 20 70 49 6e 31 2b 2b 3b 0a 20 20 20 20 70 4f 75   pIn1++;.    pOu
9940: 74 2b 2b 3b 0a 20 20 7d 77 68 69 6c 65 28 20 2d  t++;.  }while( -
9950: 2d 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  -n );.  break;.}
9960: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 70  ../* Opcode: Cop
9970: 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  y P1 P2 P3 * *.*
9980: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
9990: 40 50 33 2b 31 5d 3d 72 5b 50 31 40 50 33 2b 31  @P3+1]=r[P1@P3+1
99a0: 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 63  ].**.** Make a c
99b0: 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72 73  opy of registers
99c0: 20 50 31 2e 2e 50 31 2b 50 33 20 69 6e 74 6f 20   P1..P1+P3 into 
99d0: 72 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32  registers P2..P2
99e0: 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  +P3..**.** This 
99f0: 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65  instruction make
9a00: 73 20 61 20 64 65 65 70 20 63 6f 70 79 20 6f 66  s a deep copy of
9a10: 20 74 68 65 20 76 61 6c 75 65 2e 20 20 41 20 64   the value.  A d
9a20: 75 70 6c 69 63 61 74 65 0a 2a 2a 20 69 73 20 6d  uplicate.** is m
9a30: 61 64 65 20 6f 66 20 61 6e 79 20 73 74 72 69 6e  ade of any strin
9a40: 67 20 6f 72 20 62 6c 6f 62 20 63 6f 6e 73 74 61  g or blob consta
9a50: 6e 74 2e 20 20 53 65 65 20 61 6c 73 6f 20 4f 50  nt.  See also OP
9a60: 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20  _SCopy..*/.case 
9a70: 4f 50 5f 43 6f 70 79 3a 20 7b 0a 20 20 69 6e 74  OP_Copy: {.  int
9a80: 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e   n;..  n = pOp->
9a90: 70 33 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  p3;.  pIn1 = &aM
9aa0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
9ab0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
9ac0: 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
9ad0: 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20  pOut!=pIn1 );.  
9ae0: 77 68 69 6c 65 28 20 31 20 29 7b 0a 20 20 20 20  while( 1 ){.    
9af0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
9b00: 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20  allowCopy(pOut, 
9b10: 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29  pIn1, MEM_Ephem)
9b20: 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72 61  ;.    Deephemera
9b30: 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 23 69 66 64  lize(pOut);.#ifd
9b40: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
9b50: 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79      pOut->pScopy
9b60: 46 72 6f 6d 20 3d 20 30 3b 0a 23 65 6e 64 69 66  From = 0;.#endif
9b70: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
9b80: 41 43 45 28 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d  ACE(pOp->p2+pOp-
9b90: 3e 70 33 2d 6e 2c 20 70 4f 75 74 29 3b 0a 20 20  >p3-n, pOut);.  
9ba0: 20 20 69 66 28 20 28 6e 2d 2d 29 3d 3d 30 20 29    if( (n--)==0 )
9bb0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 70 4f 75 74   break;.    pOut
9bc0: 2b 2b 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a  ++;.    pIn1++;.
9bd0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
9be0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 43 6f 70 79  /* Opcode: SCopy
9bf0: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
9c00: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
9c10: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65  r[P1].**.** Make
9c20: 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20   a shallow copy 
9c30: 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69  of register P1 i
9c40: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
9c50: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
9c60: 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20  ruction makes a 
9c70: 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20  shallow copy of 
9c80: 74 68 65 20 76 61 6c 75 65 2e 20 20 49 66 20 74  the value.  If t
9c90: 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 61  he value.** is a
9ca0: 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 2c   string or blob,
9cb0: 20 74 68 65 6e 20 74 68 65 20 63 6f 70 79 20 69   then the copy i
9cc0: 73 20 6f 6e 6c 79 20 61 20 70 6f 69 6e 74 65 72  s only a pointer
9cd0: 20 74 6f 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69   to the.** origi
9ce0: 6e 61 6c 20 61 6e 64 20 68 65 6e 63 65 20 69 66  nal and hence if
9cf0: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 63 68   the original ch
9d00: 61 6e 67 65 73 20 73 6f 20 77 69 6c 6c 20 74 68  anges so will th
9d10: 65 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72 73 65  e copy..** Worse
9d20: 2c 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61  , if the origina
9d30: 6c 20 69 73 20 64 65 61 6c 6c 6f 63 61 74 65 64  l is deallocated
9d40: 2c 20 74 68 65 20 63 6f 70 79 20 62 65 63 6f 6d  , the copy becom
9d50: 65 73 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a 20 54  es invalid..** T
9d60: 68 75 73 20 74 68 65 20 70 72 6f 67 72 61 6d 20  hus the program 
9d70: 6d 75 73 74 20 67 75 61 72 61 6e 74 65 65 20 74  must guarantee t
9d80: 68 61 74 20 74 68 65 20 6f 72 69 67 69 6e 61 6c  hat the original
9d90: 20 77 69 6c 6c 20 6e 6f 74 20 63 68 61 6e 67 65   will not change
9da0: 0a 2a 2a 20 64 75 72 69 6e 67 20 74 68 65 20 6c  .** during the l
9db0: 69 66 65 74 69 6d 65 20 6f 66 20 74 68 65 20 63  ifetime of the c
9dc0: 6f 70 79 2e 20 20 55 73 65 20 4f 50 5f 43 6f 70  opy.  Use OP_Cop
9dd0: 79 20 74 6f 20 6d 61 6b 65 20 61 20 63 6f 6d 70  y to make a comp
9de0: 6c 65 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a 2a 2f  lete.** copy..*/
9df0: 0a 63 61 73 65 20 4f 50 5f 53 43 6f 70 79 3a 20  .case OP_SCopy: 
9e00: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
9e10: 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d  out2 */.  pIn1 =
9e20: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
9e30: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
9e40: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
9e50: 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29  rt( pOut!=pIn1 )
9e60: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
9e70: 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
9e80: 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70  ut, pIn1, MEM_Ep
9e90: 68 65 6d 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  hem);.#ifdef SQL
9ea0: 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20  ITE_DEBUG.  if( 
9eb0: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
9ec0: 3d 3d 30 20 29 20 70 4f 75 74 2d 3e 70 53 63 6f  ==0 ) pOut->pSco
9ed0: 70 79 46 72 6f 6d 20 3d 20 70 49 6e 31 3b 0a 23  pyFrom = pIn1;.#
9ee0: 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a 7d  endif.  break;.}
9ef0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74  ../* Opcode: Int
9f00: 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a  Copy P1 P2 * * *
9f10: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
9f20: 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  P2]=r[P1].**.** 
9f30: 54 72 61 6e 73 66 65 72 20 74 68 65 20 69 6e 74  Transfer the int
9f40: 65 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20  eger value held 
9f50: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
9f60: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
9f70: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61  .**.** This is a
9f80: 6e 20 6f 70 74 69 6d 69 7a 65 64 20 76 65 72 73  n optimized vers
9f90: 69 6f 6e 20 6f 66 20 53 43 6f 70 79 20 74 68 61  ion of SCopy tha
9fa0: 74 20 77 6f 72 6b 73 20 6f 6e 6c 79 20 66 6f 72  t works only for
9fb0: 20 69 6e 74 65 67 65 72 0a 2a 2a 20 76 61 6c 75   integer.** valu
9fc0: 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  es..*/.case OP_I
9fd0: 6e 74 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20  ntCopy: {       
9fe0: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
9ff0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
a000: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
a010: 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  t( (pIn1->flags 
a020: 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
a030: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
a040: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69  pOp->p2];.  sqli
a050: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74  te3VdbeMemSetInt
a060: 36 34 28 70 4f 75 74 2c 20 70 49 6e 31 2d 3e 75  64(pOut, pIn1->u
a070: 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .i);.  break;.}.
a080: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 75  ./* Opcode: Resu
a090: 6c 74 52 6f 77 20 50 31 20 50 32 20 2a 20 2a 20  ltRow P1 P2 * * 
a0a0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
a0b0: 6f 75 74 70 75 74 3d 72 5b 50 31 40 50 32 5d 0a  output=r[P1@P2].
a0c0: 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74  **.** The regist
a0d0: 65 72 73 20 50 31 20 74 68 72 6f 75 67 68 20 50  ers P1 through P
a0e0: 31 2b 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61  1+P2-1 contain a
a0f0: 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a   single row of.*
a100: 2a 20 72 65 73 75 6c 74 73 2e 20 54 68 69 73 20  * results. This 
a110: 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20 74 68  opcode causes th
a120: 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  e sqlite3_step()
a130: 20 63 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61   call to termina
a140: 74 65 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53 51  te.** with an SQ
a150: 4c 49 54 45 5f 52 4f 57 20 72 65 74 75 72 6e 20  LITE_ROW return 
a160: 63 6f 64 65 20 61 6e 64 20 69 74 20 73 65 74 73  code and it sets
a170: 20 75 70 20 74 68 65 20 73 71 6c 69 74 65 33 5f   up the sqlite3_
a180: 73 74 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75 72  stmt.** structur
a190: 65 20 74 6f 20 70 72 6f 76 69 64 65 20 61 63 63  e to provide acc
a1a0: 65 73 73 20 74 6f 20 74 68 65 20 72 28 50 31 29  ess to the r(P1)
a1b0: 2e 2e 72 28 50 31 2b 50 32 2d 31 29 20 76 61 6c  ..r(P1+P2-1) val
a1c0: 75 65 73 20 61 73 0a 2a 2a 20 74 68 65 20 72 65  ues as.** the re
a1d0: 73 75 6c 74 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73  sult row..*/.cas
a1e0: 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 3a 20  e OP_ResultRow: 
a1f0: 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20  {.  Mem *pMem;. 
a200: 20 69 6e 74 20 69 3b 0a 20 20 61 73 73 65 72 74   int i;.  assert
a210: 28 20 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d  ( p->nResColumn=
a220: 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 61 73  =pOp->p2 );.  as
a230: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
a240: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
a250: 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d 28 70  ->p1+pOp->p2<=(p
a260: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
a270: 72 29 2b 31 20 29 3b 0a 0a 23 69 66 6e 64 65 66  r)+1 );..#ifndef
a280: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
a290: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
a2a0: 20 2f 2a 20 52 75 6e 20 74 68 65 20 70 72 6f 67   /* Run the prog
a2b0: 72 65 73 73 20 63 6f 75 6e 74 65 72 20 6a 75 73  ress counter jus
a2c0: 74 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69  t before returni
a2d0: 6e 67 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64  ng..  */.  if( d
a2e0: 62 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d 30 0a  b->xProgress!=0.
a2f0: 20 20 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e     && nVmStep>=n
a300: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 0a 20 20  ProgressLimit.  
a310: 20 26 26 20 64 62 2d 3e 78 50 72 6f 67 72 65 73   && db->xProgres
a320: 73 28 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41  s(db->pProgressA
a330: 72 67 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20  rg)!=0.  ){.    
a340: 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45  rc = SQLITE_INTE
a350: 52 52 55 50 54 3b 0a 20 20 20 20 67 6f 74 6f 20  RRUPT;.    goto 
a360: 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b  vdbe_error_halt;
a370: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f  .  }.#endif..  /
a380: 2a 20 49 66 20 74 68 69 73 20 73 74 61 74 65 6d  * If this statem
a390: 65 6e 74 20 68 61 73 20 76 69 6f 6c 61 74 65 64  ent has violated
a3a0: 20 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69   immediate forei
a3b0: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
a3c0: 74 73 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74 20  ts, do.  ** not 
a3d0: 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  return the numbe
a3e0: 72 20 6f 66 20 72 6f 77 73 20 6d 6f 64 69 66 69  r of rows modifi
a3f0: 65 64 2e 20 41 6e 64 20 64 6f 20 6e 6f 74 20 52  ed. And do not R
a400: 45 4c 45 41 53 45 20 74 68 65 20 73 74 61 74 65  ELEASE the state
a410: 6d 65 6e 74 0a 20 20 2a 2a 20 74 72 61 6e 73 61  ment.  ** transa
a420: 63 74 69 6f 6e 2e 20 49 74 20 6e 65 65 64 73 20  ction. It needs 
a430: 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  to be rolled bac
a440: 6b 2e 20 20 2a 2f 0a 20 20 69 66 28 20 53 51 4c  k.  */.  if( SQL
a450: 49 54 45 5f 4f 4b 21 3d 28 72 63 20 3d 20 73 71  ITE_OK!=(rc = sq
a460: 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b  lite3VdbeCheckFk
a470: 28 70 2c 20 30 29 29 20 29 7b 0a 20 20 20 20 61  (p, 0)) ){.    a
a480: 73 73 65 72 74 28 20 64 62 2d 3e 66 6c 61 67 73  ssert( db->flags
a490: 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77  &SQLITE_CountRow
a4a0: 73 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  s );.    assert(
a4b0: 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72   p->usesStmtJour
a4c0: 6e 61 6c 20 29 3b 0a 20 20 20 20 62 72 65 61 6b  nal );.    break
a4d0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74  ;.  }..  /* If t
a4e0: 68 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52  he SQLITE_CountR
a4f0: 6f 77 73 20 66 6c 61 67 20 69 73 20 73 65 74 20  ows flag is set 
a500: 69 6e 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73  in sqlite3.flags
a510: 20 6d 61 73 6b 2c 20 74 68 65 6e 20 0a 20 20 2a   mask, then .  *
a520: 2a 20 44 4d 4c 20 73 74 61 74 65 6d 65 6e 74 73  * DML statements
a530: 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63   invoke this opc
a540: 6f 64 65 20 74 6f 20 72 65 74 75 72 6e 20 74 68  ode to return th
a550: 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
a560: 20 0a 20 20 2a 2a 20 6d 6f 64 69 66 69 65 64 20   .  ** modified 
a570: 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68 69  to the user. Thi
a580: 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61  s is the only wa
a590: 79 20 74 68 61 74 20 61 20 56 4d 20 74 68 61 74  y that a VM that
a5a0: 0a 20 20 2a 2a 20 6f 70 65 6e 73 20 61 20 73 74  .  ** opens a st
a5b0: 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
a5c0: 69 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b 65 20 74  ion may invoke t
a5d0: 68 69 73 20 6f 70 63 6f 64 65 2e 0a 20 20 2a 2a  his opcode..  **
a5e0: 0a 20 20 2a 2a 20 49 6e 20 63 61 73 65 20 74 68  .  ** In case th
a5f0: 69 73 20 69 73 20 73 75 63 68 20 61 20 73 74 61  is is such a sta
a600: 74 65 6d 65 6e 74 2c 20 63 6c 6f 73 65 20 61 6e  tement, close an
a610: 79 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  y statement tran
a620: 73 61 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f 70 65  saction.  ** ope
a630: 6e 65 64 20 62 79 20 74 68 69 73 20 56 4d 20 62  ned by this VM b
a640: 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20  efore returning 
a650: 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 75  control to the u
a660: 73 65 72 2e 20 54 68 69 73 20 69 73 20 74 6f 0a  ser. This is to.
a670: 20 20 2a 2a 20 65 6e 73 75 72 65 20 74 68 61 74    ** ensure that
a680: 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73   statement-trans
a690: 61 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 77 61  actions are alwa
a6a0: 79 73 20 6e 65 73 74 65 64 2c 20 6e 6f 74 20 6f  ys nested, not o
a6b0: 76 65 72 6c 61 70 70 69 6e 67 2e 0a 20 20 2a 2a  verlapping..  **
a6c0: 20 49 66 20 74 68 65 20 6f 70 65 6e 20 73 74 61   If the open sta
a6d0: 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69  tement-transacti
a6e0: 6f 6e 20 69 73 20 6e 6f 74 20 63 6c 6f 73 65 64  on is not closed
a6f0: 20 68 65 72 65 2c 20 74 68 65 6e 20 74 68 65 20   here, then the 
a700: 75 73 65 72 0a 20 20 2a 2a 20 6d 61 79 20 73 74  user.  ** may st
a710: 65 70 20 61 6e 6f 74 68 65 72 20 56 4d 20 74 68  ep another VM th
a720: 61 74 20 6f 70 65 6e 73 20 69 74 73 20 6f 77 6e  at opens its own
a730: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
a740: 61 63 74 69 6f 6e 2e 20 54 68 69 73 0a 20 20 2a  action. This.  *
a750: 2a 20 6d 61 79 20 6c 65 61 64 20 74 6f 20 6f 76  * may lead to ov
a760: 65 72 6c 61 70 70 69 6e 67 20 73 74 61 74 65 6d  erlapping statem
a770: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ent transactions
a780: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20  ..  **.  ** The 
a790: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
a7a0: 63 74 69 6f 6e 20 69 73 20 6e 65 76 65 72 20 61  ction is never a
a7b0: 20 74 6f 70 2d 6c 65 76 65 6c 20 74 72 61 6e 73   top-level trans
a7c0: 61 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 0a 20  action.  Hence. 
a7d0: 20 2a 2a 20 74 68 65 20 52 45 4c 45 41 53 45 20   ** the RELEASE 
a7e0: 63 61 6c 6c 20 62 65 6c 6f 77 20 63 61 6e 20 6e  call below can n
a7f0: 65 76 65 72 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a  ever fail..  */.
a800: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 69 53 74    assert( p->iSt
a810: 61 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20 64 62  atement==0 || db
a820: 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43  ->flags&SQLITE_C
a830: 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 72 63  ountRows );.  rc
a840: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 6c   = sqlite3VdbeCl
a850: 6f 73 65 53 74 61 74 65 6d 65 6e 74 28 70 2c 20  oseStatement(p, 
a860: 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
a870: 45 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28  E);.  if( NEVER(
a880: 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29  rc!=SQLITE_OK) )
a890: 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  {.    break;.  }
a8a0: 0a 0a 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74  ..  /* Invalidat
a8b0: 65 20 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c 20  e all ephemeral 
a8c0: 63 75 72 73 6f 72 20 72 6f 77 20 63 61 63 68 65  cursor row cache
a8d0: 73 20 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65 43  s */.  p->cacheC
a8e0: 74 72 20 3d 20 28 70 2d 3e 63 61 63 68 65 43 74  tr = (p->cacheCt
a8f0: 72 20 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20  r + 2)|1;..  /* 
a900: 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 72 65  Make sure the re
a910: 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 75 72  sults of the cur
a920: 72 65 6e 74 20 72 6f 77 20 61 72 65 20 5c 30 30  rent row are \00
a930: 30 20 74 65 72 6d 69 6e 61 74 65 64 0a 20 20 2a  0 terminated.  *
a940: 2a 20 61 6e 64 20 68 61 76 65 20 61 6e 20 61 73  * and have an as
a950: 73 69 67 6e 65 64 20 74 79 70 65 2e 20 20 54 68  signed type.  Th
a960: 65 20 72 65 73 75 6c 74 73 20 61 72 65 20 64 65  e results are de
a970: 2d 65 70 68 65 6d 65 72 61 6c 69 7a 65 64 20 61  -ephemeralized a
a980: 73 0a 20 20 2a 2a 20 61 20 73 69 64 65 20 65 66  s.  ** a side ef
a990: 66 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65  fect..  */.  pMe
a9a0: 6d 20 3d 20 70 2d 3e 70 52 65 73 75 6c 74 53 65  m = p->pResultSe
a9b0: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
a9c0: 31 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  1];.  for(i=0; i
a9d0: 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a  <pOp->p2; i++){.
a9e0: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
a9f0: 73 56 61 6c 69 64 28 26 70 4d 65 6d 5b 69 5d 29  sValid(&pMem[i])
aa00: 20 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65   );.    Deepheme
aa10: 72 61 6c 69 7a 65 28 26 70 4d 65 6d 5b 69 5d 29  ralize(&pMem[i])
aa20: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70  ;.    assert( (p
aa30: 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 4d  Mem[i].flags & M
aa40: 45 4d 5f 45 70 68 65 6d 29 3d 3d 30 0a 20 20 20  EM_Ephem)==0.   
aa50: 20 20 20 20 20 20 20 20 20 7c 7c 20 28 70 4d 65           || (pMe
aa60: 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 28 4d 45  m[i].flags & (ME
aa70: 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29  M_Str|MEM_Blob))
aa80: 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  ==0 );.    sqlit
aa90: 65 33 56 64 62 65 4d 65 6d 4e 75 6c 54 65 72 6d  e3VdbeMemNulTerm
aaa0: 69 6e 61 74 65 28 26 70 4d 65 6d 5b 69 5d 29 3b  inate(&pMem[i]);
aab0: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
aac0: 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26  ACE(pOp->p1+i, &
aad0: 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20  pMem[i]);.  }.  
aae0: 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  if( db->mallocFa
aaf0: 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  iled ) goto no_m
ab00: 65 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e  em;..  /* Return
ab10: 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f   SQLITE_ROW.  */
ab20: 0a 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29  .  p->pc = (int)
ab30: 28 70 4f 70 20 2d 20 61 4f 70 29 20 2b 20 31 3b  (pOp - aOp) + 1;
ab40: 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52  .  rc = SQLITE_R
ab50: 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f  OW;.  goto vdbe_
ab60: 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70  return;.}../* Op
ab70: 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50 31 20  code: Concat P1 
ab80: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
ab90: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
aba0: 32 5d 2b 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 41  2]+r[P1].**.** A
abb0: 64 64 20 74 68 65 20 74 65 78 74 20 69 6e 20 72  dd the text in r
abc0: 65 67 69 73 74 65 72 20 50 31 20 6f 6e 74 6f 20  egister P1 onto 
abd0: 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 74  the end of the t
abe0: 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74  ext in.** regist
abf0: 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20  er P2 and store 
ac00: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
ac10: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
ac20: 20 65 69 74 68 65 72 20 74 68 65 20 50 31 20 6f   either the P1 o
ac30: 72 20 50 32 20 74 65 78 74 20 61 72 65 20 4e 55  r P2 text are NU
ac40: 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 4e 55  LL then store NU
ac50: 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  LL in P3..**.** 
ac60: 20 20 50 33 20 3d 20 50 32 20 7c 7c 20 50 31 0a    P3 = P2 || P1.
ac70: 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65  **.** It is ille
ac80: 67 61 6c 20 66 6f 72 20 50 31 20 61 6e 64 20 50  gal for P1 and P
ac90: 33 20 74 6f 20 62 65 20 74 68 65 20 73 61 6d 65  3 to be the same
aca0: 20 72 65 67 69 73 74 65 72 2e 20 53 6f 6d 65 74   register. Somet
acb0: 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33 20 69  imes,.** if P3 i
acc0: 73 20 74 68 65 20 73 61 6d 65 20 72 65 67 69 73  s the same regis
acd0: 74 65 72 20 61 73 20 50 32 2c 20 74 68 65 20 69  ter as P2, the i
ace0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73  mplementation is
acf0: 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f 69   able.** to avoi
ad00: 64 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f  d a memcpy()..*/
ad10: 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61 74 3a  .case OP_Concat:
ad20: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
ad30: 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e 43 41  same as TK_CONCA
ad40: 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  T, in1, in2, out
ad50: 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65  3 */.  i64 nByte
ad60: 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  ;..  pIn1 = &aMe
ad70: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
ad80: 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
ad90: 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p2];.  pOut = &a
ada0: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
adb0: 61 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70 4f  assert( pIn1!=pO
adc0: 75 74 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  ut );.  if( (pIn
add0: 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d  1->flags | pIn2-
ade0: 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75  >flags) & MEM_Nu
adf0: 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ll ){.    sqlite
ae00: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
ae10: 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  pOut);.    break
ae20: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 45 78 70 61  ;.  }.  if( Expa
ae30: 6e 64 42 6c 6f 62 28 70 49 6e 31 29 20 7c 7c 20  ndBlob(pIn1) || 
ae40: 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29  ExpandBlob(pIn2)
ae50: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
ae60: 20 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31    Stringify(pIn1
ae70: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 53  , encoding);.  S
ae80: 74 72 69 6e 67 69 66 79 28 70 49 6e 32 2c 20 65  tringify(pIn2, e
ae90: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e 42 79 74  ncoding);.  nByt
aea0: 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20 70 49  e = pIn1->n + pI
aeb0: 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e 42 79  n2->n;.  if( nBy
aec0: 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  te>db->aLimit[SQ
aed0: 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
aee0: 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  H] ){.    goto t
aef0: 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 69 66  oo_big;.  }.  if
af00: 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
af10: 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29  Grow(pOut, (int)
af20: 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74 3d 3d 70  nByte+2, pOut==p
af30: 49 6e 32 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  In2) ){.    goto
af40: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 4d   no_mem;.  }.  M
af50: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
af60: 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a 20 20  ut, MEM_Str);.  
af70: 69 66 28 20 70 4f 75 74 21 3d 70 49 6e 32 20 29  if( pOut!=pIn2 )
af80: 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 4f 75  {.    memcpy(pOu
af90: 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70  t->z, pIn2->z, p
afa0: 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d  In2->n);.  }.  m
afb0: 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e 7a 5b 70  emcpy(&pOut->z[p
afc0: 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a  In2->n], pIn1->z
afd0: 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f  , pIn1->n);.  pO
afe0: 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 3d 30 3b 0a  ut->z[nByte]=0;.
aff0: 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 2b    pOut->z[nByte+
b000: 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e  1] = 0;.  pOut->
b010: 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72  flags |= MEM_Ter
b020: 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28  m;.  pOut->n = (
b030: 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75  int)nByte;.  pOu
b040: 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e  t->enc = encodin
b050: 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  g;.  UPDATE_MAX_
b060: 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
b070: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
b080: 70 63 6f 64 65 3a 20 41 64 64 20 50 31 20 50 32  pcode: Add P1 P2
b090: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
b0a0: 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31  sis:  r[P3]=r[P1
b0b0: 5d 2b 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 41 64  ]+r[P2].**.** Ad
b0c0: 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  d the value in r
b0d0: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 74 68  egister P1 to th
b0e0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
b0f0: 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74  ter P2.** and st
b100: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
b110: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
b120: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
b130: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
b140: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
b150: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 6c  /./* Opcode: Mul
b160: 74 69 70 6c 79 20 50 31 20 50 32 20 50 33 20 2a  tiply P1 P2 P3 *
b170: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
b180: 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2a 72 5b 50   r[P3]=r[P1]*r[P
b190: 32 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74  2].**.**.** Mult
b1a0: 69 70 6c 79 20 74 68 65 20 76 61 6c 75 65 20 69  iply the value i
b1b0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79  n register P1 by
b1c0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
b1d0: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
b1e0: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
b1f0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
b200: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
b210: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
b220: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b230: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
b240: 53 75 62 74 72 61 63 74 20 50 31 20 50 32 20 50  Subtract P1 P2 P
b250: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
b260: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2d  s:  r[P3]=r[P2]-
b270: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 75 62 74  r[P1].**.** Subt
b280: 72 61 63 74 20 74 68 65 20 76 61 6c 75 65 20 69  ract the value i
b290: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 66 72  n register P1 fr
b2a0: 6f 6d 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  om the value in 
b2b0: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61  register P2.** a
b2c0: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
b2d0: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
b2e0: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
b2f0: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
b300: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
b310: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
b320: 3a 20 44 69 76 69 64 65 20 50 31 20 50 32 20 50  : Divide P1 P2 P
b330: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
b340: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2f  s:  r[P3]=r[P2]/
b350: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 44 69 76 69  r[P1].**.** Divi
b360: 64 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  de the value in 
b370: 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74  register P1 by t
b380: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
b390: 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73  ster P2.** and s
b3a0: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
b3b0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 28  in register P3 (
b3c0: 50 33 3d 50 32 2f 50 31 29 2e 20 49 66 20 74 68  P3=P2/P1). If th
b3d0: 65 20 76 61 6c 75 65 20 69 6e 20 0a 2a 2a 20 72  e value in .** r
b3e0: 65 67 69 73 74 65 72 20 50 31 20 69 73 20 7a 65  egister P1 is ze
b3f0: 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ro, then the res
b400: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 49 66 20  ult is NULL. If 
b410: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
b420: 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65  .** NULL, the re
b430: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
b440: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d 61  ./* Opcode: Rema
b450: 69 6e 64 65 72 20 50 31 20 50 32 20 50 33 20 2a  inder P1 P2 P3 *
b460: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
b470: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 25 72 5b 50   r[P3]=r[P2]%r[P
b480: 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65  1].**.** Compute
b490: 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 61   the remainder a
b4a0: 66 74 65 72 20 69 6e 74 65 67 65 72 20 72 65 67  fter integer reg
b4b0: 69 73 74 65 72 20 50 32 20 69 73 20 64 69 76 69  ister P2 is divi
b4c0: 64 65 64 20 62 79 20 0a 2a 2a 20 72 65 67 69 73  ded by .** regis
b4d0: 74 65 72 20 50 31 20 61 6e 64 20 73 74 6f 72 65  ter P1 and store
b4e0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
b4f0: 65 67 69 73 74 65 72 20 50 33 2e 20 0a 2a 2a 20  egister P3. .** 
b500: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  If the value in 
b510: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 7a  register P1 is z
b520: 65 72 6f 20 74 68 65 20 72 65 73 75 6c 74 20 69  ero the result i
b530: 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69  s NULL..** If ei
b540: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
b550: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
b560: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73   is NULL..*/.cas
b570: 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20  e OP_Add:       
b580: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
b590: 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55 53 2c 20  ame as TK_PLUS, 
b5a0: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
b5b0: 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61  /.case OP_Subtra
b5c0: 63 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  ct:             
b5d0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4d   /* same as TK_M
b5e0: 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  INUS, in1, in2, 
b5f0: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
b600: 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 20 20 20  Multiply:       
b610: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
b620: 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e 31 2c 20  s TK_STAR, in1, 
b630: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
b640: 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 20 20 20  e OP_Divide:    
b650: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
b660: 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41 53 48 2c  ame as TK_SLASH,
b670: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
b680: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6d 61 69  */.case OP_Remai
b690: 6e 64 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20  nder: {         
b6a0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
b6b0: 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  REM, in1, in2, o
b6c0: 75 74 33 20 2a 2f 0a 20 20 63 68 61 72 20 62 49  ut3 */.  char bI
b6d0: 6e 74 69 6e 74 3b 20 20 20 2f 2a 20 53 74 61 72  ntint;   /* Star
b6e0: 74 65 64 20 6f 75 74 20 61 73 20 74 77 6f 20 69  ted out as two i
b6f0: 6e 74 65 67 65 72 20 6f 70 65 72 61 6e 64 73 20  nteger operands 
b700: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 3b 20  */.  u16 flags; 
b710: 20 20 20 20 20 2f 2a 20 43 6f 6d 62 69 6e 65 64       /* Combined
b720: 20 4d 45 4d 5f 2a 20 66 6c 61 67 73 20 66 72 6f   MEM_* flags fro
b730: 6d 20 62 6f 74 68 20 69 6e 70 75 74 73 20 2a 2f  m both inputs */
b740: 0a 20 20 75 31 36 20 74 79 70 65 31 3b 20 20 20  .  u16 type1;   
b750: 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79     /* Numeric ty
b760: 70 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61  pe of left opera
b770: 6e 64 20 2a 2f 0a 20 20 75 31 36 20 74 79 70 65  nd */.  u16 type
b780: 32 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72  2;      /* Numer
b790: 69 63 20 74 79 70 65 20 6f 66 20 72 69 67 68 74  ic type of right
b7a0: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36   operand */.  i6
b7b0: 34 20 69 41 3b 20 20 20 20 20 20 20 20 20 2f 2a  4 iA;         /*
b7c0: 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f   Integer value o
b7d0: 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a  f left operand *
b7e0: 2f 0a 20 20 69 36 34 20 69 42 3b 20 20 20 20 20  /.  i64 iB;     
b7f0: 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76      /* Integer v
b800: 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70  alue of right op
b810: 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c  erand */.  doubl
b820: 65 20 72 41 3b 20 20 20 20 20 20 2f 2a 20 52 65  e rA;      /* Re
b830: 61 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74  al value of left
b840: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f   operand */.  do
b850: 75 62 6c 65 20 72 42 3b 20 20 20 20 20 20 2f 2a  uble rB;      /*
b860: 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 72   Real value of r
b870: 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  ight operand */.
b880: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
b890: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 74 79 70 65  pOp->p1];.  type
b8a0: 31 20 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28  1 = numericType(
b8b0: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20  pIn1);.  pIn2 = 
b8c0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
b8d0: 20 20 74 79 70 65 32 20 3d 20 6e 75 6d 65 72 69    type2 = numeri
b8e0: 63 54 79 70 65 28 70 49 6e 32 29 3b 0a 20 20 70  cType(pIn2);.  p
b8f0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
b900: 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 20 3d 20  >p3];.  flags = 
b910: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
b920: 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28  n2->flags;.  if(
b930: 20 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75   (flags & MEM_Nu
b940: 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f 20 61 72  ll)!=0 ) goto ar
b950: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
b960: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20 28  is_null;.  if( (
b970: 74 79 70 65 31 20 26 20 74 79 70 65 32 20 26 20  type1 & type2 & 
b980: 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20  MEM_Int)!=0 ){. 
b990: 20 20 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e     iA = pIn1->u.
b9a0: 69 3b 0a 20 20 20 20 69 42 20 3d 20 70 49 6e 32  i;.    iB = pIn2
b9b0: 2d 3e 75 2e 69 3b 0a 20 20 20 20 62 49 6e 74 69  ->u.i;.    bInti
b9c0: 6e 74 20 3d 20 31 3b 0a 20 20 20 20 73 77 69 74  nt = 1;.    swit
b9d0: 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ch( pOp->opcode 
b9e0: 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  ){.      case OP
b9f0: 5f 41 64 64 3a 20 20 20 20 20 20 20 69 66 28 20  _Add:       if( 
ba00: 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28  sqlite3AddInt64(
ba10: 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66  &iB,iA) ) goto f
ba20: 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a  p_math;  break;.
ba30: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75        case OP_Su
ba40: 62 74 72 61 63 74 3a 20 20 69 66 28 20 73 71 6c  btract:  if( sql
ba50: 69 74 65 33 53 75 62 49 6e 74 36 34 28 26 69 42  ite3SubInt64(&iB
ba60: 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d  ,iA) ) goto fp_m
ba70: 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20  ath;  break;.   
ba80: 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69     case OP_Multi
ba90: 70 6c 79 3a 20 20 69 66 28 20 73 71 6c 69 74 65  ply:  if( sqlite
baa0: 33 4d 75 6c 49 6e 74 36 34 28 26 69 42 2c 69 41  3MulInt64(&iB,iA
bab0: 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68  ) ) goto fp_math
bac0: 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20  ;  break;.      
bad0: 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20  case OP_Divide: 
bae0: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  {.        if( iA
baf0: 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  ==0 ) goto arith
bb00: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
bb10: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66  null;.        if
bb20: 28 20 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d  ( iA==-1 && iB==
bb30: 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29  SMALLEST_INT64 )
bb40: 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 0a 20   goto fp_math;. 
bb50: 20 20 20 20 20 20 20 69 42 20 2f 3d 20 69 41 3b         iB /= iA;
bb60: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
bb70: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65        }.      de
bb80: 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20  fault: {.       
bb90: 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74   if( iA==0 ) got
bba0: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
bbb0: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
bbc0: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20       if( iA==-1 
bbd0: 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20  ) iA = 1;.      
bbe0: 20 20 69 42 20 25 3d 20 69 41 3b 0a 20 20 20 20    iB %= iA;.    
bbf0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
bc00: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75   }.    }.    pOu
bc10: 74 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a 20 20 20  t->u.i = iB;.   
bc20: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
bc30: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
bc40: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 62 49 6e    }else{.    bIn
bc50: 74 69 6e 74 20 3d 20 30 3b 0a 66 70 5f 6d 61 74  tint = 0;.fp_mat
bc60: 68 3a 0a 20 20 20 20 72 41 20 3d 20 73 71 6c 69  h:.    rA = sqli
bc70: 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65  te3VdbeRealValue
bc80: 28 70 49 6e 31 29 3b 0a 20 20 20 20 72 42 20 3d  (pIn1);.    rB =
bc90: 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c   sqlite3VdbeReal
bca0: 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20  Value(pIn2);.   
bcb0: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
bcc0: 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61  code ){.      ca
bcd0: 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20  se OP_Add:      
bce0: 20 20 20 72 42 20 2b 3d 20 72 41 3b 20 20 20 20     rB += rA;    
bcf0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
bd00: 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74  case OP_Subtract
bd10: 3a 20 20 20 20 72 42 20 2d 3d 20 72 41 3b 20 20  :    rB -= rA;  
bd20: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
bd30: 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70    case OP_Multip
bd40: 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20 72 41 3b  ly:    rB *= rA;
bd50: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
bd60: 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69      case OP_Divi
bd70: 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a  de: {.        /*
bd80: 20 28 64 6f 75 62 6c 65 29 30 20 49 6e 20 63 61   (double)0 In ca
bd90: 73 65 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49  se of SQLITE_OMI
bda0: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
bdb0: 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  ... */.        i
bdc0: 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29 30  f( rA==(double)0
bdd0: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
bde0: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
bdf0: 6c 3b 0a 20 20 20 20 20 20 20 20 72 42 20 2f 3d  l;.        rB /=
be00: 20 72 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65   rA;.        bre
be10: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
be20: 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20    default: {.   
be30: 20 20 20 20 20 69 41 20 3d 20 28 69 36 34 29 72       iA = (i64)r
be40: 41 3b 0a 20 20 20 20 20 20 20 20 69 42 20 3d 20  A;.        iB = 
be50: 28 69 36 34 29 72 42 3b 0a 20 20 20 20 20 20 20  (i64)rB;.       
be60: 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74   if( iA==0 ) got
be70: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
be80: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
be90: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20       if( iA==-1 
bea0: 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20  ) iA = 1;.      
beb0: 20 20 72 42 20 3d 20 28 64 6f 75 62 6c 65 29 28    rB = (double)(
bec0: 69 42 20 25 20 69 41 29 3b 0a 20 20 20 20 20 20  iB % iA);.      
bed0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
bee0: 0a 20 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51  .    }.#ifdef SQ
bef0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
bf00: 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f 75  NG_POINT.    pOu
bf10: 74 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20 20  t->u.i = rB;.   
bf20: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
bf30: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
bf40: 23 65 6c 73 65 0a 20 20 20 20 69 66 28 20 73 71  #else.    if( sq
bf50: 6c 69 74 65 33 49 73 4e 61 4e 28 72 42 29 20 29  lite3IsNaN(rB) )
bf60: 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69  {.      goto ari
bf70: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
bf80: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20  s_null;.    }.  
bf90: 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d 20 72 42    pOut->u.r = rB
bfa0: 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
bfb0: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 52  Flag(pOut, MEM_R
bfc0: 65 61 6c 29 3b 0a 20 20 20 20 69 66 28 20 28 28  eal);.    if( ((
bfd0: 74 79 70 65 31 7c 74 79 70 65 32 29 26 4d 45 4d  type1|type2)&MEM
bfe0: 5f 52 65 61 6c 29 3d 3d 30 20 26 26 20 21 62 49  _Real)==0 && !bI
bff0: 6e 74 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73  ntint ){.      s
c000: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65  qlite3VdbeIntege
c010: 72 41 66 66 69 6e 69 74 79 28 70 4f 75 74 29 3b  rAffinity(pOut);
c020: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
c030: 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61 72 69 74  }.  break;..arit
c040: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
c050: 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69 74 65 33  _null:.  sqlite3
c060: 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
c070: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
c080: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c  ../* Opcode: Col
c090: 6c 53 65 71 20 50 31 20 2a 20 2a 20 50 34 0a 2a  lSeq P1 * * P4.*
c0a0: 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
c0b0: 6e 74 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65  nter to a CollSe
c0c0: 71 20 73 74 72 75 63 74 2e 20 49 66 20 74 68 65  q struct. If the
c0d0: 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f 20 61 20   next call to a 
c0e0: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a  user function.**
c0f0: 20 6f 72 20 61 67 67 72 65 67 61 74 65 20 63 61   or aggregate ca
c100: 6c 6c 73 20 73 71 6c 69 74 65 33 47 65 74 46 75  lls sqlite3GetFu
c110: 6e 63 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69  ncCollSeq(), thi
c120: 73 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  s collation sequ
c130: 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20  ence will.** be 
c140: 72 65 74 75 72 6e 65 64 2e 20 54 68 69 73 20 69  returned. This i
c150: 73 20 75 73 65 64 20 62 79 20 74 68 65 20 62 75  s used by the bu
c160: 69 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61  ilt-in min(), ma
c170: 78 28 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29  x() and nullif()
c180: 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a  .** functions..*
c190: 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f  *.** If P1 is no
c1a0: 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20  t zero, then it 
c1b0: 69 73 20 61 20 72 65 67 69 73 74 65 72 20 74 68  is a register th
c1c0: 61 74 20 61 20 73 75 62 73 65 71 75 65 6e 74 20  at a subsequent 
c1d0: 6d 69 6e 28 29 20 6f 72 0a 2a 2a 20 6d 61 78 28  min() or.** max(
c1e0: 29 20 61 67 67 72 65 67 61 74 65 20 77 69 6c 6c  ) aggregate will
c1f0: 20 73 65 74 20 74 6f 20 31 20 69 66 20 74 68 65   set to 1 if the
c200: 20 63 75 72 72 65 6e 74 20 72 6f 77 20 69 73 20   current row is 
c210: 6e 6f 74 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20  not the minimum 
c220: 6f 72 0a 2a 2a 20 6d 61 78 69 6d 75 6d 2e 20 20  or.** maximum.  
c230: 54 68 65 20 50 31 20 72 65 67 69 73 74 65 72 20  The P1 register 
c240: 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74  is initialized t
c250: 6f 20 30 20 62 79 20 74 68 69 73 20 69 6e 73 74  o 0 by this inst
c260: 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ruction..**.** T
c270: 68 65 20 69 6e 74 65 72 66 61 63 65 20 75 73 65  he interface use
c280: 64 20 62 79 20 74 68 65 20 69 6d 70 6c 65 6d 65  d by the impleme
c290: 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 61  ntation of the a
c2a0: 66 6f 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66 75  forementioned fu
c2b0: 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65  nctions.** to re
c2c0: 74 72 69 65 76 65 20 74 68 65 20 63 6f 6c 6c 61  trieve the colla
c2d0: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 73 65  tion sequence se
c2e0: 74 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65  t by this opcode
c2f0: 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c   is not availabl
c300: 65 0a 2a 2a 20 70 75 62 6c 69 63 6c 79 2e 20 20  e.** publicly.  
c310: 4f 6e 6c 79 20 62 75 69 6c 74 2d 69 6e 20 66 75  Only built-in fu
c320: 6e 63 74 69 6f 6e 73 20 68 61 76 65 20 61 63 63  nctions have acc
c330: 65 73 73 20 74 6f 20 74 68 69 73 20 66 65 61 74  ess to this feat
c340: 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ure..*/.case OP_
c350: 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73 73  CollSeq: {.  ass
c360: 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
c370: 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a  ==P4_COLLSEQ );.
c380: 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b    if( pOp->p1 ){
c390: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
c3a0: 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65  MemSetInt64(&aMe
c3b0: 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 30 29 3b 0a  m[pOp->p1], 0);.
c3c0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
c3d0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 75 6e 63 74  /* Opcode: Funct
c3e0: 69 6f 6e 30 20 50 31 20 50 32 20 50 33 20 50 34  ion0 P1 P2 P3 P4
c3f0: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
c400: 20 72 5b 50 33 5d 3d 66 75 6e 63 28 72 5b 50 32   r[P3]=func(r[P2
c410: 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f  @P5]).**.** Invo
c420: 6b 65 20 61 20 75 73 65 72 20 66 75 6e 63 74 69  ke a user functi
c430: 6f 6e 20 28 50 34 20 69 73 20 61 20 70 6f 69 6e  on (P4 is a poin
c440: 74 65 72 20 74 6f 20 61 20 46 75 6e 63 44 65 66  ter to a FuncDef
c450: 20 6f 62 6a 65 63 74 20 74 68 61 74 0a 2a 2a 20   object that.** 
c460: 64 65 66 69 6e 65 73 20 74 68 65 20 66 75 6e 63  defines the func
c470: 74 69 6f 6e 29 20 77 69 74 68 20 50 35 20 61 72  tion) with P5 ar
c480: 67 75 6d 65 6e 74 73 20 74 61 6b 65 6e 20 66 72  guments taken fr
c490: 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61  om register P2 a
c4a0: 6e 64 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73  nd.** successors
c4b0: 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66  .  The result of
c4c0: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 73   the function is
c4d0: 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
c4e0: 74 65 72 20 50 33 2e 0a 2a 2a 20 52 65 67 69 73  ter P3..** Regis
c4f0: 74 65 72 20 50 33 20 6d 75 73 74 20 6e 6f 74 20  ter P3 must not 
c500: 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 75  be one of the fu
c510: 6e 63 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a  nction inputs..*
c520: 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 33 32 2d  *.** P1 is a 32-
c530: 62 69 74 20 62 69 74 6d 61 73 6b 20 69 6e 64 69  bit bitmask indi
c540: 63 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f  cating whether o
c550: 72 20 6e 6f 74 20 65 61 63 68 20 61 72 67 75 6d  r not each argum
c560: 65 6e 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66  ent to the .** f
c570: 75 6e 63 74 69 6f 6e 20 77 61 73 20 64 65 74 65  unction was dete
c580: 72 6d 69 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e  rmined to be con
c590: 73 74 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65  stant at compile
c5a0: 20 74 69 6d 65 2e 20 49 66 20 74 68 65 20 66 69   time. If the fi
c5b0: 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  rst.** argument 
c5c0: 77 61 73 20 63 6f 6e 73 74 61 6e 74 20 74 68 65  was constant the
c5d0: 6e 20 62 69 74 20 30 20 6f 66 20 50 31 20 69 73  n bit 0 of P1 is
c5e0: 20 73 65 74 2e 20 54 68 69 73 20 69 73 20 75 73   set. This is us
c5f0: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a  ed to determine.
c600: 2a 2a 20 77 68 65 74 68 65 72 20 6d 65 74 61 20  ** whether meta 
c610: 64 61 74 61 20 61 73 73 6f 63 69 61 74 65 64 20  data associated 
c620: 77 69 74 68 20 61 20 75 73 65 72 20 66 75 6e 63  with a user func
c630: 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75 73  tion argument us
c640: 69 6e 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74  ing the.** sqlit
c650: 65 33 5f 73 65 74 5f 61 75 78 64 61 74 61 28 29  e3_set_auxdata()
c660: 20 41 50 49 20 6d 61 79 20 62 65 20 73 61 66 65   API may be safe
c670: 6c 79 20 72 65 74 61 69 6e 65 64 20 75 6e 74 69  ly retained unti
c680: 6c 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e  l the next.** in
c690: 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 69 73  vocation of this
c6a0: 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53   opcode..**.** S
c6b0: 65 65 20 61 6c 73 6f 3a 20 46 75 6e 63 74 69 6f  ee also: Functio
c6c0: 6e 2c 20 41 67 67 53 74 65 70 2c 20 41 67 67 46  n, AggStep, AggF
c6d0: 69 6e 61 6c 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  inal.*/./* Opcod
c6e0: 65 3a 20 46 75 6e 63 74 69 6f 6e 20 50 31 20 50  e: Function P1 P
c6f0: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
c700: 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 66 75  nopsis: r[P3]=fu
c710: 6e 63 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a  nc(r[P2@P5]).**.
c720: 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73 65 72  ** Invoke a user
c730: 20 66 75 6e 63 74 69 6f 6e 20 28 50 34 20 69 73   function (P4 is
c740: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e   a pointer to an
c750: 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
c760: 20 6f 62 6a 65 63 74 20 74 68 61 74 0a 2a 2a 20   object that.** 
c770: 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e 74  contains a point
c780: 65 72 20 74 6f 20 74 68 65 20 66 75 6e 63 74 69  er to the functi
c790: 6f 6e 20 74 6f 20 62 65 20 72 75 6e 29 20 77 69  on to be run) wi
c7a0: 74 68 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20  th P5 arguments 
c7b0: 74 61 6b 65 6e 0a 2a 2a 20 66 72 6f 6d 20 72 65  taken.** from re
c7c0: 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 73 75  gister P2 and su
c7d0: 63 63 65 73 73 6f 72 73 2e 20 20 54 68 65 20 72  ccessors.  The r
c7e0: 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e  esult of the fun
c7f0: 63 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 0a  ction is stored.
c800: 2a 2a 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ** in register P
c810: 33 2e 20 20 52 65 67 69 73 74 65 72 20 50 33 20  3.  Register P3 
c820: 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65 20  must not be one 
c830: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  of the function 
c840: 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31  inputs..**.** P1
c850: 20 69 73 20 61 20 33 32 2d 62 69 74 20 62 69 74   is a 32-bit bit
c860: 6d 61 73 6b 20 69 6e 64 69 63 61 74 69 6e 67 20  mask indicating 
c870: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 65  whether or not e
c880: 61 63 68 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  ach argument to 
c890: 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e  the .** function
c8a0: 20 77 61 73 20 64 65 74 65 72 6d 69 6e 65 64 20   was determined 
c8b0: 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74 20 61  to be constant a
c8c0: 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e 20  t compile time. 
c8d0: 49 66 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  If the first.** 
c8e0: 61 72 67 75 6d 65 6e 74 20 77 61 73 20 63 6f 6e  argument was con
c8f0: 73 74 61 6e 74 20 74 68 65 6e 20 62 69 74 20 30  stant then bit 0
c900: 20 6f 66 20 50 31 20 69 73 20 73 65 74 2e 20 54   of P1 is set. T
c910: 68 69 73 20 69 73 20 75 73 65 64 20 74 6f 20 64  his is used to d
c920: 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74  etermine.** whet
c930: 68 65 72 20 6d 65 74 61 20 64 61 74 61 20 61 73  her meta data as
c940: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
c950: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 61 72  user function ar
c960: 67 75 6d 65 6e 74 20 75 73 69 6e 67 20 74 68 65  gument using the
c970: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65 74 5f  .** sqlite3_set_
c980: 61 75 78 64 61 74 61 28 29 20 41 50 49 20 6d 61  auxdata() API ma
c990: 79 20 62 65 20 73 61 66 65 6c 79 20 72 65 74 61  y be safely reta
c9a0: 69 6e 65 64 20 75 6e 74 69 6c 20 74 68 65 20 6e  ined until the n
c9b0: 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f  ext.** invocatio
c9c0: 6e 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65  n of this opcode
c9d0: 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 20 66 75 6e 63  ..**.** SQL func
c9e0: 74 69 6f 6e 73 20 61 72 65 20 69 6e 69 74 69 61  tions are initia
c9f0: 6c 6c 79 20 63 6f 64 65 64 20 61 73 20 4f 50 5f  lly coded as OP_
ca00: 46 75 6e 63 74 69 6f 6e 30 20 77 69 74 68 20 50  Function0 with P
ca10: 34 20 70 6f 69 6e 74 69 6e 67 0a 2a 2a 20 74 6f  4 pointing.** to
ca20: 20 61 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63   a FuncDef objec
ca30: 74 2e 20 20 42 75 74 20 6f 6e 20 66 69 72 73 74  t.  But on first
ca40: 20 65 76 61 6c 75 61 74 69 6f 6e 2c 20 74 68 65   evaluation, the
ca50: 20 50 34 20 6f 70 65 72 61 6e 64 20 69 73 0a 2a   P4 operand is.*
ca60: 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  * automatically 
ca70: 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61  converted into a
ca80: 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  n sqlite3_contex
ca90: 74 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 65  t object and the
caa0: 20 6f 70 65 72 61 74 69 6f 6e 0a 2a 2a 20 63 68   operation.** ch
cab0: 61 6e 67 65 64 20 74 6f 20 74 68 69 73 20 4f 50  anged to this OP
cac0: 5f 46 75 6e 63 74 69 6f 6e 20 6f 70 63 6f 64 65  _Function opcode
cad0: 2e 20 20 49 6e 20 74 68 69 73 20 77 61 79 2c 20  .  In this way, 
cae0: 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  the initializati
caf0: 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 73 71 6c  on of.** the sql
cb00: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a  ite3_context obj
cb10: 65 63 74 20 6f 63 63 75 72 73 20 6f 6e 6c 79 20  ect occurs only 
cb20: 6f 6e 63 65 2c 20 72 61 74 68 65 72 20 74 68 61  once, rather tha
cb30: 6e 20 6f 6e 63 65 20 66 6f 72 20 65 61 63 68 0a  n once for each.
cb40: 2a 2a 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66  ** evaluation of
cb50: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a   the function..*
cb60: 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
cb70: 75 6e 63 74 69 6f 6e 30 2c 20 41 67 67 53 74 65  unction0, AggSte
cb80: 70 2c 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63  p, AggFinal.*/.c
cb90: 61 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 30  ase OP_Function0
cba0: 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 73  : {.  int n;.  s
cbb0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
cbc0: 70 43 74 78 3b 0a 0a 20 20 61 73 73 65 72 74 28  pCtx;..  assert(
cbd0: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
cbe0: 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20 20 6e 20  _FUNCDEF );.  n 
cbf0: 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73  = pOp->p5;.  ass
cc00: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
cc10: 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  & pOp->p3<=(p->n
cc20: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
cc30: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d  );.  assert( n==
cc40: 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20  0 || (pOp->p2>0 
cc50: 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70  && pOp->p2+n<=(p
cc60: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
cc70: 72 29 2b 31 29 20 29 3b 0a 20 20 61 73 73 65 72  r)+1) );.  asser
cc80: 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e  t( pOp->p3<pOp->
cc90: 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70  p2 || pOp->p3>=p
cca0: 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 43  Op->p2+n );.  pC
ccb0: 74 78 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61  tx = sqlite3DbMa
ccc0: 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73 69 7a 65  llocRaw(db, size
ccd0: 6f 66 28 2a 70 43 74 78 29 20 2b 20 28 6e 2d 31  of(*pCtx) + (n-1
cce0: 29 2a 73 69 7a 65 6f 66 28 73 71 6c 69 74 65 33  )*sizeof(sqlite3
ccf0: 5f 76 61 6c 75 65 2a 29 29 3b 0a 20 20 69 66 28  _value*));.  if(
cd00: 20 70 43 74 78 3d 3d 30 20 29 20 67 6f 74 6f 20   pCtx==0 ) goto 
cd10: 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 74 78 2d 3e  no_mem;.  pCtx->
cd20: 70 4f 75 74 20 3d 20 30 3b 0a 20 20 70 43 74 78  pOut = 0;.  pCtx
cd30: 2d 3e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70  ->pFunc = pOp->p
cd40: 34 2e 70 46 75 6e 63 3b 0a 20 20 70 43 74 78 2d  4.pFunc;.  pCtx-
cd50: 3e 69 4f 70 20 3d 20 28 69 6e 74 29 28 70 4f 70  >iOp = (int)(pOp
cd60: 20 2d 20 61 4f 70 29 3b 0a 20 20 70 43 74 78 2d   - aOp);.  pCtx-
cd70: 3e 70 56 64 62 65 20 3d 20 70 3b 0a 20 20 70 43  >pVdbe = p;.  pC
cd80: 74 78 2d 3e 61 72 67 63 20 3d 20 6e 3b 0a 20 20  tx->argc = n;.  
cd90: 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34  pOp->p4type = P4
cda0: 5f 46 55 4e 43 43 54 58 3b 0a 20 20 70 4f 70 2d  _FUNCCTX;.  pOp-
cdb0: 3e 70 34 2e 70 43 74 78 20 3d 20 70 43 74 78 3b  >p4.pCtx = pCtx;
cdc0: 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d  .  pOp->opcode =
cdd0: 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 3b 0a 20 20   OP_Function;.  
cde0: 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
cdf0: 69 6e 74 6f 20 4f 50 5f 46 75 6e 63 74 69 6f 6e  into OP_Function
ce00: 20 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50 5f 46 75   */.}.case OP_Fu
ce10: 6e 63 74 69 6f 6e 3a 20 7b 0a 20 20 69 6e 74 20  nction: {.  int 
ce20: 69 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  i;.  sqlite3_con
ce30: 74 65 78 74 20 2a 70 43 74 78 3b 0a 0a 20 20 61  text *pCtx;..  a
ce40: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
ce50: 70 65 3d 3d 50 34 5f 46 55 4e 43 43 54 58 20 29  pe==P4_FUNCCTX )
ce60: 3b 0a 20 20 70 43 74 78 20 3d 20 70 4f 70 2d 3e  ;.  pCtx = pOp->
ce70: 70 34 2e 70 43 74 78 3b 0a 0a 20 20 2f 2a 20 49  p4.pCtx;..  /* I
ce80: 66 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  f this function 
ce90: 69 73 20 69 6e 73 69 64 65 20 6f 66 20 61 20 74  is inside of a t
cea0: 72 69 67 67 65 72 2c 20 74 68 65 20 72 65 67 69  rigger, the regi
ceb0: 73 74 65 72 20 61 72 72 61 79 20 69 6e 20 61 4d  ster array in aM
cec0: 65 6d 5b 5d 0a 20 20 2a 2a 20 6d 69 67 68 74 20  em[].  ** might 
ced0: 63 68 61 6e 67 65 20 66 72 6f 6d 20 6f 6e 65 20  change from one 
cee0: 65 76 61 6c 75 61 74 69 6f 6e 20 74 6f 20 74 68  evaluation to th
cef0: 65 20 6e 65 78 74 2e 20 20 54 68 65 20 6e 65 78  e next.  The nex
cf00: 74 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 0a  t block of code.
cf10: 20 20 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20 73    ** checks to s
cf20: 65 65 20 69 66 20 74 68 65 20 72 65 67 69 73 74  ee if the regist
cf30: 65 72 20 61 72 72 61 79 20 68 61 73 20 63 68 61  er array has cha
cf40: 6e 67 65 64 2c 20 61 6e 64 20 69 66 20 73 6f 20  nged, and if so 
cf50: 69 74 0a 20 20 2a 2a 20 72 65 69 6e 69 74 69 61  it.  ** reinitia
cf60: 6c 69 7a 65 73 20 74 68 65 20 72 65 6c 61 76 61  lizes the relava
cf70: 6e 74 20 70 61 72 74 73 20 6f 66 20 74 68 65 20  nt parts of the 
cf80: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
cf90: 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 70 4f 75 74  object */.  pOut
cfa0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
cfb0: 5d 3b 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 70  ];.  if( pCtx->p
cfc0: 4f 75 74 20 21 3d 20 70 4f 75 74 20 29 7b 0a 20  Out != pOut ){. 
cfd0: 20 20 20 70 43 74 78 2d 3e 70 4f 75 74 20 3d 20     pCtx->pOut = 
cfe0: 70 4f 75 74 3b 0a 20 20 20 20 66 6f 72 28 69 3d  pOut;.    for(i=
cff0: 70 43 74 78 2d 3e 61 72 67 63 2d 31 3b 20 69 3e  pCtx->argc-1; i>
d000: 3d 30 3b 20 69 2d 2d 29 20 70 43 74 78 2d 3e 61  =0; i--) pCtx->a
d010: 72 67 76 5b 69 5d 20 3d 20 26 61 4d 65 6d 5b 70  rgv[i] = &aMem[p
d020: 4f 70 2d 3e 70 32 2b 69 5d 3b 0a 20 20 7d 0a 0a  Op->p2+i];.  }..
d030: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
d040: 67 65 28 70 2c 20 70 43 74 78 2d 3e 70 4f 75 74  ge(p, pCtx->pOut
d050: 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
d060: 5f 44 45 42 55 47 0a 20 20 66 6f 72 28 69 3d 30  _DEBUG.  for(i=0
d070: 3b 20 69 3c 70 43 74 78 2d 3e 61 72 67 63 3b 20  ; i<pCtx->argc; 
d080: 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  i++){.    assert
d090: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 43 74  ( memIsValid(pCt
d0a0: 78 2d 3e 61 72 67 76 5b 69 5d 29 20 29 3b 0a 20  x->argv[i]) );. 
d0b0: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
d0c0: 45 28 70 4f 70 2d 3e 70 32 2b 69 2c 20 70 43 74  E(pOp->p2+i, pCt
d0d0: 78 2d 3e 61 72 67 76 5b 69 5d 29 3b 0a 20 20 7d  x->argv[i]);.  }
d0e0: 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d 53 65 74  .#endif.  MemSet
d0f0: 54 79 70 65 46 6c 61 67 28 70 43 74 78 2d 3e 70  TypeFlag(pCtx->p
d100: 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  Out, MEM_Null);.
d110: 20 20 70 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72    pCtx->fErrorOr
d120: 41 75 78 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 6c  Aux = 0;.  db->l
d130: 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52  astRowid = lastR
d140: 6f 77 69 64 3b 0a 20 20 28 2a 70 43 74 78 2d 3e  owid;.  (*pCtx->
d150: 70 46 75 6e 63 2d 3e 78 46 75 6e 63 29 28 70 43  pFunc->xFunc)(pC
d160: 74 78 2c 20 70 43 74 78 2d 3e 61 72 67 63 2c 20  tx, pCtx->argc, 
d170: 70 43 74 78 2d 3e 61 72 67 76 29 3b 20 2f 2a 20  pCtx->argv); /* 
d180: 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32  IMP: R-24505-232
d190: 33 30 20 2a 2f 0a 20 20 6c 61 73 74 52 6f 77 69  30 */.  lastRowi
d1a0: 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  d = db->lastRowi
d1b0: 64 3b 20 20 2f 2a 20 52 65 6d 65 6d 62 65 72 20  d;  /* Remember 
d1c0: 72 6f 77 69 64 20 63 68 61 6e 67 65 73 20 6d 61  rowid changes ma
d1d0: 64 65 20 62 79 20 78 46 75 6e 63 20 2a 2f 0a 0a  de by xFunc */..
d1e0: 20 20 2f 2a 20 49 66 20 74 68 65 20 66 75 6e 63    /* If the func
d1f0: 74 69 6f 6e 20 72 65 74 75 72 6e 65 64 20 61 6e  tion returned an
d200: 20 65 72 72 6f 72 2c 20 74 68 72 6f 77 20 61 6e   error, throw an
d210: 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20   exception */.  
d220: 69 66 28 20 70 43 74 78 2d 3e 66 45 72 72 6f 72  if( pCtx->fError
d230: 4f 72 41 75 78 20 29 7b 0a 20 20 20 20 69 66 28  OrAux ){.    if(
d240: 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 20 29   pCtx->isError )
d250: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
d260: 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22  dbeError(p, "%s"
d270: 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
d280: 74 65 78 74 28 70 43 74 78 2d 3e 70 4f 75 74 29  text(pCtx->pOut)
d290: 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 70 43  );.      rc = pC
d2a0: 74 78 2d 3e 69 73 45 72 72 6f 72 3b 0a 20 20 20  tx->isError;.   
d2b0: 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64   }.    sqlite3Vd
d2c0: 62 65 44 65 6c 65 74 65 41 75 78 44 61 74 61 28  beDeleteAuxData(
d2d0: 70 2c 20 70 43 74 78 2d 3e 69 4f 70 2c 20 70 4f  p, pCtx->iOp, pO
d2e0: 70 2d 3e 70 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f  p->p1);.  }..  /
d2f0: 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c  * Copy the resul
d300: 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  t of the functio
d310: 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  n into register 
d320: 50 33 20 2a 2f 0a 20 20 69 66 28 20 70 4f 75 74  P3 */.  if( pOut
d330: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
d340: 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a  tr|MEM_Blob) ){.
d350: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
d360: 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 43  hangeEncoding(pC
d370: 74 78 2d 3e 70 4f 75 74 2c 20 65 6e 63 6f 64 69  tx->pOut, encodi
d380: 6e 67 29 3b 0a 20 20 20 20 69 66 28 20 73 71 6c  ng);.    if( sql
d390: 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
d3a0: 67 28 70 43 74 78 2d 3e 70 4f 75 74 29 20 29 20  g(pCtx->pOut) ) 
d3b0: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
d3c0: 7d 0a 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  }..  REGISTER_TR
d3d0: 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 43 74  ACE(pOp->p3, pCt
d3e0: 78 2d 3e 70 4f 75 74 29 3b 0a 20 20 55 50 44 41  x->pOut);.  UPDA
d3f0: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
d400: 70 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 20 20 62  pCtx->pOut);.  b
d410: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
d420: 64 65 3a 20 42 69 74 41 6e 64 20 50 31 20 50 32  de: BitAnd P1 P2
d430: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
d440: 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31  sis:  r[P3]=r[P1
d450: 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61  ]&r[P2].**.** Ta
d460: 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20  ke the bit-wise 
d470: 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65  AND of the value
d480: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
d490: 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73   and P2 and.** s
d4a0: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
d4b0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
d4c0: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
d4d0: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
d4e0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
d4f0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  */./* Opcode: Bi
d500: 74 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a  tOr P1 P2 P3 * *
d510: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
d520: 5b 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b 50 32 5d  [P3]=r[P1]|r[P2]
d530: 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
d540: 62 69 74 2d 77 69 73 65 20 4f 52 20 6f 66 20 74  bit-wise OR of t
d550: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
d560: 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20  ister P1 and P2 
d570: 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  and.** store the
d580: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
d590: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
d5a0: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
d5b0: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
d5c0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
d5d0: 63 6f 64 65 3a 20 53 68 69 66 74 4c 65 66 74 20  code: ShiftLeft 
d5e0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
d5f0: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
d600: 3d 72 5b 50 32 5d 3c 3c 72 5b 50 31 5d 0a 2a 2a  =r[P2]<<r[P1].**
d610: 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e  .** Shift the in
d620: 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72  teger value in r
d630: 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74 68  egister P2 to th
d640: 65 20 6c 65 66 74 20 62 79 20 74 68 65 0a 2a 2a  e left by the.**
d650: 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20   number of bits 
d660: 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65  specified by the
d670: 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69   integer in regi
d680: 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72  ster P1..** Stor
d690: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
d6a0: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
d6b0: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
d6c0: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
d6d0: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
d6e0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74  /* Opcode: Shift
d6f0: 52 69 67 68 74 20 50 31 20 50 32 20 50 33 20 2a  Right P1 P2 P3 *
d700: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
d710: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3e 3e 72 5b   r[P3]=r[P2]>>r[
d720: 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20  P1].**.** Shift 
d730: 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  the integer valu
d740: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
d750: 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 62 79   to the right by
d760: 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f   the.** number o
d770: 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65 64  f bits specified
d780: 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72 20   by the integer 
d790: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
d7a0: 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65 73  ** Store the res
d7b0: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
d7c0: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
d7d0: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
d7e0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
d7f0: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42  LL..*/.case OP_B
d800: 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20  itAnd:          
d810: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
d820: 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31  s TK_BITAND, in1
d830: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
d840: 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20  ase OP_BitOr:   
d850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d860: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54  * same as TK_BIT
d870: 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  OR, in1, in2, ou
d880: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68  t3 */.case OP_Sh
d890: 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20 20 20  iftLeft:        
d8a0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
d8b0: 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c   TK_LSHIFT, in1,
d8c0: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
d8d0: 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74  se OP_ShiftRight
d8e0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
d8f0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53 48 49   same as TK_RSHI
d900: 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  FT, in1, in2, ou
d910: 74 33 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 0a  t3 */.  i64 iA;.
d920: 20 20 75 36 34 20 75 41 3b 0a 20 20 69 36 34 20    u64 uA;.  i64 
d930: 69 42 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a 20 20  iB;.  u8 op;..  
d940: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
d950: 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20  ->p1];.  pIn2 = 
d960: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
d970: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
d980: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28  Op->p3];.  if( (
d990: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
d9a0: 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d  n2->flags) & MEM
d9b0: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c  _Null ){.    sql
d9c0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
d9d0: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72  ll(pOut);.    br
d9e0: 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 41 20 3d 20  eak;.  }.  iA = 
d9f0: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
da00: 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 69 42 20  lue(pIn2);.  iB 
da10: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
da20: 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 6f  Value(pIn1);.  o
da30: 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b  p = pOp->opcode;
da40: 0a 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69  .  if( op==OP_Bi
da50: 74 41 6e 64 20 29 7b 0a 20 20 20 20 69 41 20 26  tAnd ){.    iA &
da60: 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66  = iB;.  }else if
da70: 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72 20 29  ( op==OP_BitOr )
da80: 7b 0a 20 20 20 20 69 41 20 7c 3d 20 69 42 3b 0a  {.    iA |= iB;.
da90: 20 20 7d 65 6c 73 65 20 69 66 28 20 69 42 21 3d    }else if( iB!=
daa0: 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
dab0: 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67   op==OP_ShiftRig
dac0: 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69  ht || op==OP_Shi
dad0: 66 74 4c 65 66 74 20 29 3b 0a 0a 20 20 20 20 2f  ftLeft );..    /
dae0: 2a 20 49 66 20 73 68 69 66 74 69 6e 67 20 62 79  * If shifting by
daf0: 20 61 20 6e 65 67 61 74 69 76 65 20 61 6d 6f 75   a negative amou
db00: 6e 74 2c 20 73 68 69 66 74 20 69 6e 20 74 68 65  nt, shift in the
db10: 20 6f 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e   other direction
db20: 20 2a 2f 0a 20 20 20 20 69 66 28 20 69 42 3c 30   */.    if( iB<0
db30: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
db40: 28 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3d  ( OP_ShiftRight=
db50: 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 2b 31 20  =OP_ShiftLeft+1 
db60: 29 3b 0a 20 20 20 20 20 20 6f 70 20 3d 20 32 2a  );.      op = 2*
db70: 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 2b 20 31  OP_ShiftLeft + 1
db80: 20 2d 20 6f 70 3b 0a 20 20 20 20 20 20 69 42 20   - op;.      iB 
db90: 3d 20 69 42 3e 28 2d 36 34 29 20 3f 20 2d 69 42  = iB>(-64) ? -iB
dba0: 20 3a 20 36 34 3b 0a 20 20 20 20 7d 0a 0a 20 20   : 64;.    }..  
dbb0: 20 20 69 66 28 20 69 42 3e 3d 36 34 20 29 7b 0a    if( iB>=64 ){.
dbc0: 20 20 20 20 20 20 69 41 20 3d 20 28 69 41 3e 3d        iA = (iA>=
dbd0: 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66  0 || op==OP_Shif
dbe0: 74 4c 65 66 74 29 20 3f 20 30 20 3a 20 2d 31 3b  tLeft) ? 0 : -1;
dbf0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
dc00: 20 20 6d 65 6d 63 70 79 28 26 75 41 2c 20 26 69    memcpy(&uA, &i
dc10: 41 2c 20 73 69 7a 65 6f 66 28 75 41 29 29 3b 0a  A, sizeof(uA));.
dc20: 20 20 20 20 20 20 69 66 28 20 6f 70 3d 3d 4f 50        if( op==OP
dc30: 5f 53 68 69 66 74 4c 65 66 74 20 29 7b 0a 20 20  _ShiftLeft ){.  
dc40: 20 20 20 20 20 20 75 41 20 3c 3c 3d 20 69 42 3b        uA <<= iB;
dc50: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
dc60: 20 20 20 20 20 20 75 41 20 3e 3e 3d 20 69 42 3b        uA >>= iB;
dc70: 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 69 67 6e  .        /* Sign
dc80: 2d 65 78 74 65 6e 64 20 6f 6e 20 61 20 72 69 67  -extend on a rig
dc90: 68 74 20 73 68 69 66 74 20 6f 66 20 61 20 6e 65  ht shift of a ne
dca0: 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20 2a 2f  gative number */
dcb0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3c  .        if( iA<
dcc0: 30 20 29 20 75 41 20 7c 3d 20 28 28 28 28 75 36  0 ) uA |= ((((u6
dcd0: 34 29 30 78 66 66 66 66 66 66 66 66 29 3c 3c 33  4)0xffffffff)<<3
dce0: 32 29 7c 30 78 66 66 66 66 66 66 66 66 29 20 3c  2)|0xffffffff) <
dcf0: 3c 20 28 36 34 2d 69 42 29 3b 0a 20 20 20 20 20  < (64-iB);.     
dd00: 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28   }.      memcpy(
dd10: 26 69 41 2c 20 26 75 41 2c 20 73 69 7a 65 6f 66  &iA, &uA, sizeof
dd20: 28 69 41 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  (iA));.    }.  }
dd30: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69  .  pOut->u.i = i
dd40: 41 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  A;.  MemSetTypeF
dd50: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
dd60: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
dd70: 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d  /* Opcode: AddIm
dd80: 6d 20 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  m  P1 P2 * * *.*
dd90: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
dda0: 31 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a 2a 20 0a  1]=r[P1]+P2.** .
ddb0: 2a 2a 20 41 64 64 20 74 68 65 20 63 6f 6e 73 74  ** Add the const
ddc0: 61 6e 74 20 50 32 20 74 6f 20 74 68 65 20 76 61  ant P2 to the va
ddd0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
dde0: 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c  P1..** The resul
ddf0: 74 20 69 73 20 61 6c 77 61 79 73 20 61 6e 20 69  t is always an i
de00: 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f  nteger..**.** To
de10: 20 66 6f 72 63 65 20 61 6e 79 20 72 65 67 69 73   force any regis
de20: 74 65 72 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  ter to be an int
de30: 65 67 65 72 2c 20 6a 75 73 74 20 61 64 64 20 30  eger, just add 0
de40: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64  ..*/.case OP_Add
de50: 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Imm: {          
de60: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49    /* in1 */.  pI
de70: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
de80: 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p1];.  memAboutT
de90: 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29  oChange(p, pIn1)
dea0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
deb0: 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
dec0: 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20  1);.  pIn1->u.i 
ded0: 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72  += pOp->p2;.  br
dee0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
def0: 65 3a 20 4d 75 73 74 42 65 49 6e 74 20 50 31 20  e: MustBeInt P1 
df00: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20  P2 * * *.** .** 
df10: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
df20: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
df30: 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e  o be an integer.
df40: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
df50: 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f 74 20 61  * in P1 is not a
df60: 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20 63 61  n integer and ca
df70: 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65  nnot be converte
df80: 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65  d into an intege
df90: 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20 64 61 74  r.** without dat
dfa0: 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d  a loss, then jum
dfb0: 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
dfc0: 20 50 32 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30   P2, or if P2==0
dfd0: 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20 53 51 4c  .** raise an SQL
dfe0: 49 54 45 5f 4d 49 53 4d 41 54 43 48 20 65 78 63  ITE_MISMATCH exc
dff0: 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  eption..*/.case 
e000: 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20  OP_MustBeInt: { 
e010: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
e020: 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
e030: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
e040: 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  1];.  if( (pIn1-
e050: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
e060: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70 70 6c  )==0 ){.    appl
e070: 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20  yAffinity(pIn1, 
e080: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
e090: 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  IC, encoding);. 
e0a0: 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
e0b0: 65 6e 28 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26  en((pIn1->flags&
e0c0: 4d 45 4d 5f 49 6e 74 29 3d 3d 30 2c 20 32 29 3b  MEM_Int)==0, 2);
e0d0: 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  .    if( (pIn1->
e0e0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
e0f0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ==0 ){.      if(
e100: 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20   pOp->p2==0 ){. 
e110: 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
e120: 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20  TE_MISMATCH;.   
e130: 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
e140: 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
e150: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
e160: 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
e170: 70 32 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  p2;.      }.    
e180: 7d 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79  }.  }.  MemSetTy
e190: 70 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d  peFlag(pIn1, MEM
e1a0: 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  _Int);.  break;.
e1b0: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
e1c0: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
e1d0: 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  POINT./* Opcode:
e1e0: 20 52 65 61 6c 41 66 66 69 6e 69 74 79 20 50 31   RealAffinity P1
e1f0: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49   * * * *.**.** I
e200: 66 20 72 65 67 69 73 74 65 72 20 50 31 20 68 6f  f register P1 ho
e210: 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 63  lds an integer c
e220: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 72  onvert it to a r
e230: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a  eal value..**.**
e240: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
e250: 75 73 65 64 20 77 68 65 6e 20 65 78 74 72 61 63  used when extrac
e260: 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ting information
e270: 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74   from a column t
e280: 68 61 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20  hat.** has REAL 
e290: 61 66 66 69 6e 69 74 79 2e 20 20 53 75 63 68 20  affinity.  Such 
e2a0: 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61  column values ma
e2b0: 79 20 73 74 69 6c 6c 20 62 65 20 73 74 6f 72 65  y still be store
e2c0: 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73  d as.** integers
e2d0: 2c 20 66 6f 72 20 73 70 61 63 65 20 65 66 66 69  , for space effi
e2e0: 63 69 65 6e 63 79 2c 20 62 75 74 20 61 66 74 65  ciency, but afte
e2f0: 72 20 65 78 74 72 61 63 74 69 6f 6e 20 77 65 20  r extraction we 
e300: 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20  want them.** to 
e310: 68 61 76 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c  have only a real
e320: 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20   value..*/.case 
e330: 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69 74 79 3a  OP_RealAffinity:
e340: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
e350: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
e360: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
e370: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p1];.  if( pIn
e380: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
e390: 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  nt ){.    sqlite
e3a0: 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28  3VdbeMemRealify(
e3b0: 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65  pIn1);.  }.  bre
e3c0: 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
e3d0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
e3e0: 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65  T_CAST./* Opcode
e3f0: 3a 20 43 61 73 74 20 50 31 20 50 32 20 2a 20 2a  : Cast P1 P2 * *
e400: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
e410: 61 66 66 69 6e 69 74 79 28 72 5b 50 31 5d 29 0a  affinity(r[P1]).
e420: 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20  **.** Force the 
e430: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
e440: 72 20 50 31 20 74 6f 20 62 65 20 74 68 65 20 74  r P1 to be the t
e450: 79 70 65 20 64 65 66 69 6e 65 64 20 62 79 20 50  ype defined by P
e460: 32 2e 0a 2a 2a 20 0a 2a 2a 20 3c 75 6c 3e 0a 2a  2..** .** <ul>.*
e470: 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 39 37 22  * <li value="97"
e480: 3e 20 54 45 58 54 0a 2a 2a 20 3c 6c 69 20 76 61  > TEXT.** <li va
e490: 6c 75 65 3d 22 39 38 22 3e 20 42 4c 4f 42 0a 2a  lue="98"> BLOB.*
e4a0: 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 39 39 22  * <li value="99"
e4b0: 3e 20 4e 55 4d 45 52 49 43 0a 2a 2a 20 3c 6c 69  > NUMERIC.** <li
e4c0: 20 76 61 6c 75 65 3d 22 31 30 30 22 3e 20 49 4e   value="100"> IN
e4d0: 54 45 47 45 52 0a 2a 2a 20 3c 6c 69 20 76 61 6c  TEGER.** <li val
e4e0: 75 65 3d 22 31 30 31 22 3e 20 52 45 41 4c 0a 2a  ue="101"> REAL.*
e4f0: 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 41 20  * </ul>.**.** A 
e500: 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f  NULL value is no
e510: 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69  t changed by thi
e520: 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72  s routine.  It r
e530: 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  emains NULL..*/.
e540: 63 61 73 65 20 4f 50 5f 43 61 73 74 3a 20 7b 20  case OP_Cast: { 
e550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e560: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73   /* in1 */.  ass
e570: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 53 51  ert( pOp->p2>=SQ
e580: 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 26 26  LITE_AFF_BLOB &&
e590: 20 70 4f 70 2d 3e 70 32 3c 3d 53 51 4c 49 54 45   pOp->p2<=SQLITE
e5a0: 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20 74  _AFF_REAL );.  t
e5b0: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32  estcase( pOp->p2
e5c0: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  ==SQLITE_AFF_TEX
e5d0: 54 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  T );.  testcase(
e5e0: 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
e5f0: 5f 41 46 46 5f 42 4c 4f 42 20 29 3b 0a 20 20 74  _AFF_BLOB );.  t
e600: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32  estcase( pOp->p2
e610: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  ==SQLITE_AFF_NUM
e620: 45 52 49 43 20 29 3b 0a 20 20 74 65 73 74 63 61  ERIC );.  testca
e630: 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c  se( pOp->p2==SQL
e640: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20  ITE_AFF_INTEGER 
e650: 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
e660: 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41  Op->p2==SQLITE_A
e670: 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20 70 49 6e  FF_REAL );.  pIn
e680: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
e690: 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  1];.  memAboutTo
e6a0: 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b  Change(p, pIn1);
e6b0: 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c  .  rc = ExpandBl
e6c0: 6f 62 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69  ob(pIn1);.  sqli
e6d0: 74 65 33 56 64 62 65 4d 65 6d 43 61 73 74 28 70  te3VdbeMemCast(p
e6e0: 49 6e 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 65 6e  In1, pOp->p2, en
e6f0: 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54  coding);.  UPDAT
e700: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
e710: 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  In1);.  break;.}
e720: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
e730: 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a  E_OMIT_CAST */..
e740: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50 31  /* Opcode: Lt P1
e750: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
e760: 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
e770: 31 5d 3c 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32  1]<r[P3] goto P2
e780: 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74  .**.** Compare t
e790: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
e7a0: 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 33 2e  ister P1 and P3.
e7b0: 20 20 49 66 20 72 65 67 28 50 33 29 3c 72 65 67    If reg(P3)<reg
e7c0: 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d  (P1) then.** jum
e7d0: 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e  p to address P2.
e7e0: 20 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20    .**.** If the 
e7f0: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
e800: 4c 20 62 69 74 20 6f 66 20 50 35 20 69 73 20 73  L bit of P5 is s
e810: 65 74 20 61 6e 64 20 65 69 74 68 65 72 20 72 65  et and either re
e820: 67 28 50 31 29 20 6f 72 0a 2a 2a 20 72 65 67 28  g(P1) or.** reg(
e830: 50 33 29 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  P3) is NULL then
e840: 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20   take the jump. 
e850: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a   If the SQLITE_J
e860: 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69  UMPIFNULL .** bi
e870: 74 20 69 73 20 63 6c 65 61 72 20 74 68 65 6e 20  t is clear then 
e880: 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 66 20  fall through if 
e890: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
e8a0: 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68  s NULL..**.** Th
e8b0: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  e SQLITE_AFF_MAS
e8c0: 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20  K portion of P5 
e8d0: 6d 75 73 74 20 62 65 20 61 6e 20 61 66 66 69 6e  must be an affin
e8e0: 69 74 79 20 63 68 61 72 61 63 74 65 72 20 2d 0a  ity character -.
e8f0: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  ** SQLITE_AFF_TE
e900: 58 54 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  XT, SQLITE_AFF_I
e910: 4e 54 45 47 45 52 2c 20 61 6e 64 20 73 6f 20 66  NTEGER, and so f
e920: 6f 72 74 68 2e 20 41 6e 20 61 74 74 65 6d 70 74  orth. An attempt
e930: 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20   is made .** to 
e940: 63 6f 65 72 63 65 20 62 6f 74 68 20 69 6e 70 75  coerce both inpu
e950: 74 73 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20  ts according to 
e960: 74 68 69 73 20 61 66 66 69 6e 69 74 79 20 62 65  this affinity be
e970: 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70  fore the.** comp
e980: 61 72 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20  arison is made. 
e990: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46  If the SQLITE_AF
e9a0: 46 5f 4d 41 53 4b 20 69 73 20 30 78 30 30 2c 20  F_MASK is 0x00, 
e9b0: 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20  then numeric.** 
e9c0: 61 66 66 69 6e 69 74 79 20 69 73 20 75 73 65 64  affinity is used
e9d0: 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20  . Note that the 
e9e0: 61 66 66 69 6e 69 74 79 20 63 6f 6e 76 65 72 73  affinity convers
e9f0: 69 6f 6e 73 20 61 72 65 20 73 74 6f 72 65 64 0a  ions are stored.
ea00: 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65  ** back into the
ea10: 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73   input registers
ea20: 20 50 31 20 61 6e 64 20 50 33 2e 20 20 53 6f 20   P1 and P3.  So 
ea30: 74 68 69 73 20 6f 70 63 6f 64 65 20 63 61 6e 20  this opcode can 
ea40: 63 61 75 73 65 0a 2a 2a 20 70 65 72 73 69 73 74  cause.** persist
ea50: 65 6e 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72  ent changes to r
ea60: 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20  egisters P1 and 
ea70: 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61  P3..**.** Once a
ea80: 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68  ny conversions h
ea90: 61 76 65 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c  ave taken place,
eaa0: 20 61 6e 64 20 6e 65 69 74 68 65 72 20 76 61 6c   and neither val
eab0: 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20  ue is NULL, .** 
eac0: 74 68 65 20 76 61 6c 75 65 73 20 61 72 65 20 63  the values are c
ead0: 6f 6d 70 61 72 65 64 2e 20 49 66 20 62 6f 74 68  ompared. If both
eae0: 20 76 61 6c 75 65 73 20 61 72 65 20 62 6c 6f 62   values are blob
eaf0: 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20  s then memcmp() 
eb00: 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64 65  is.** used to de
eb10: 74 65 72 6d 69 6e 65 20 74 68 65 20 72 65 73 75  termine the resu
eb20: 6c 74 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 61  lts of the compa
eb30: 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20  rison.  If both 
eb40: 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74 65  values.** are te
eb50: 78 74 2c 20 74 68 65 6e 20 74 68 65 20 61 70 70  xt, then the app
eb60: 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61 74 69  ropriate collati
eb70: 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63  ng function spec
eb80: 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69  ified in.** P4 i
eb90: 73 20 20 75 73 65 64 20 74 6f 20 64 6f 20 74 68  s  used to do th
eba0: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49  e comparison.  I
ebb0: 66 20 50 34 20 69 73 20 6e 6f 74 20 73 70 65 63  f P4 is not spec
ebc0: 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65  ified then.** me
ebd0: 6d 63 6d 70 28 29 20 69 73 20 75 73 65 64 20 74  mcmp() is used t
ebe0: 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20 73  o compare text s
ebf0: 74 72 69 6e 67 2e 20 20 49 66 20 62 6f 74 68 20  tring.  If both 
ec00: 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75  values are.** nu
ec10: 6d 65 72 69 63 2c 20 74 68 65 6e 20 61 20 6e 75  meric, then a nu
ec20: 6d 65 72 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e  meric comparison
ec30: 20 69 73 20 75 73 65 64 2e 20 49 66 20 74 68 65   is used. If the
ec40: 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61   two values.** a
ec50: 72 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20  re of different 
ec60: 74 79 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62  types, then numb
ec70: 65 72 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ers are consider
ec80: 65 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20  ed less than.** 
ec90: 73 74 72 69 6e 67 73 20 61 6e 64 20 73 74 72 69  strings and stri
eca0: 6e 67 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ngs are consider
ecb0: 65 64 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f  ed less than blo
ecc0: 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  bs..**.** If the
ecd0: 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
ece0: 62 69 74 20 6f 66 20 50 35 20 69 73 20 73 65 74  bit of P5 is set
ecf0: 2c 20 74 68 65 6e 20 64 6f 20 6e 6f 74 20 6a 75  , then do not ju
ed00: 6d 70 2e 20 20 49 6e 73 74 65 61 64 2c 0a 2a 2a  mp.  Instead,.**
ed10: 20 73 74 6f 72 65 20 61 20 62 6f 6f 6c 65 61 6e   store a boolean
ed20: 20 72 65 73 75 6c 74 20 28 65 69 74 68 65 72 20   result (either 
ed30: 30 2c 20 6f 72 20 31 2c 20 6f 72 20 4e 55 4c 4c  0, or 1, or NULL
ed40: 29 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  ) in register P2
ed50: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53  ..**.** If the S
ed60: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 62 69 74  QLITE_NULLEQ bit
ed70: 20 69 73 20 73 65 74 20 69 6e 20 50 35 2c 20 74   is set in P5, t
ed80: 68 65 6e 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20  hen NULL values 
ed90: 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 0a 2a  are considered.*
eda0: 2a 20 65 71 75 61 6c 20 74 6f 20 6f 6e 65 20 61  * equal to one a
edb0: 6e 6f 74 68 65 72 2c 20 70 72 6f 76 69 64 65 64  nother, provided
edc0: 20 74 68 61 74 20 74 68 65 79 20 64 6f 20 6e 6f   that they do no
edd0: 74 20 68 61 76 65 20 74 68 65 69 72 20 4d 45 4d  t have their MEM
ede0: 5f 43 6c 65 61 72 65 64 0a 2a 2a 20 62 69 74 20  _Cleared.** bit 
edf0: 73 65 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  set..*/./* Opcod
ee00: 65 3a 20 4e 65 20 50 31 20 50 32 20 50 33 20 50  e: Ne P1 P2 P3 P
ee10: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
ee20: 3a 20 69 66 20 72 5b 50 31 5d 21 3d 72 5b 50 33  : if r[P1]!=r[P3
ee30: 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  ] goto P2.**.** 
ee40: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
ee50: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
ee60: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
ee70: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
ee80: 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61   if.** the opera
ee90: 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65 72 73  nds in registers
eea0: 20 50 31 20 61 6e 64 20 50 33 20 61 72 65 20 6e   P1 and P3 are n
eeb0: 6f 74 20 65 71 75 61 6c 2e 20 20 53 65 65 20 74  ot equal.  See t
eec0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
eed0: 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  .** additional i
eee0: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nformation..**.*
eef0: 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  * If SQLITE_NULL
ef00: 45 51 20 69 73 20 73 65 74 20 69 6e 20 50 35 20  EQ is set in P5 
ef10: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
ef20: 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  of comparison is
ef30: 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 0a 2a   always either.*
ef40: 2a 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20  * true or false 
ef50: 61 6e 64 20 69 73 20 6e 65 76 65 72 20 4e 55 4c  and is never NUL
ef60: 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f 70 65 72  L.  If both oper
ef70: 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 74 68  ands are NULL th
ef80: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a  en the result.**
ef90: 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69   of comparison i
efa0: 73 20 66 61 6c 73 65 2e 20 20 49 66 20 65 69 74  s false.  If eit
efb0: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
efc0: 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ULL then the res
efd0: 75 6c 74 20 69 73 20 74 72 75 65 2e 0a 2a 2a 20  ult is true..** 
efe0: 49 66 20 6e 65 69 74 68 65 72 20 6f 70 65 72 61  If neither opera
eff0: 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 20 72  nd is NULL the r
f000: 65 73 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d  esult is the sam
f010: 65 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65  e as it would be
f020: 20 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54   if.** the SQLIT
f030: 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65  E_NULLEQ flag we
f040: 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  re omitted from 
f050: 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  P5..*/./* Opcode
f060: 3a 20 45 71 20 50 31 20 50 32 20 50 33 20 50 34  : Eq P1 P2 P3 P4
f070: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
f080: 20 69 66 20 72 5b 50 31 5d 3d 3d 72 5b 50 33 5d   if r[P1]==r[P3]
f090: 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54   goto P2.**.** T
f0a0: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
f0b0: 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
f0c0: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
f0d0: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
f0e0: 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e  if.** the operan
f0f0: 64 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20  ds in registers 
f100: 50 31 20 61 6e 64 20 50 33 20 61 72 65 20 65 71  P1 and P3 are eq
f110: 75 61 6c 2e 0a 2a 2a 20 53 65 65 20 74 68 65 20  ual..** See the 
f120: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
f130: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
f140: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53  tion..**.** If S
f150: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20  QLITE_NULLEQ is 
f160: 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20 74  set in P5 then t
f170: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d  he result of com
f180: 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61 79  parison is alway
f190: 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75 65  s either.** true
f1a0: 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69 73   or false and is
f1b0: 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66   never NULL.  If
f1c0: 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61   both operands a
f1d0: 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  re NULL then the
f1e0: 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f   result.** of co
f1f0: 6d 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75 65  mparison is true
f200: 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f 70 65  .  If either ope
f210: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65  rand is NULL the
f220: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
f230: 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e 65 69  false..** If nei
f240: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
f250: 4e 55 4c 4c 20 74 68 65 20 72 65 73 75 6c 74 20  NULL the result 
f260: 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 69  is the same as i
f270: 74 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a  t would be if.**
f280: 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c   the SQLITE_NULL
f290: 45 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69  EQ flag were omi
f2a0: 74 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f  tted from P5..*/
f2b0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50  ./* Opcode: Le P
f2c0: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
f2d0: 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
f2e0: 50 31 5d 3c 3d 72 5b 50 33 5d 20 67 6f 74 6f 20  P1]<=r[P3] goto 
f2f0: 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  P2.**.** This wo
f300: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
f310: 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65  e Lt opcode exce
f320: 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
f330: 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
f340: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
f350: 65 67 69 73 74 65 72 20 50 33 20 69 73 20 6c 65  egister P3 is le
f360: 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
f370: 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   to the content 
f380: 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  of.** register P
f390: 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f  1.  See the Lt o
f3a0: 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
f3b0: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
f3c0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
f3d0: 47 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Gt P1 P2 P3 P4 P
f3e0: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  5.** Synopsis: i
f3f0: 66 20 72 5b 50 31 5d 3e 72 5b 50 33 5d 20 67 6f  f r[P1]>r[P3] go
f400: 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73  to P2.**.** This
f410: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
f420: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65   the Lt opcode e
f430: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a  xcept that the j
f440: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a  ump is taken if.
f450: 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** the content o
f460: 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  f register P3 is
f470: 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
f480: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20  e content of.** 
f490: 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65  register P1.  Se
f4a0: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
f4b0: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
f4c0: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nformation..*/./
f4d0: 2a 20 4f 70 63 6f 64 65 3a 20 47 65 20 50 31 20  * Opcode: Ge P1 
f4e0: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
f4f0: 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
f500: 5d 3e 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32  ]>=r[P3] goto P2
f510: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
f520: 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20  s just like the 
f530: 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74  Lt opcode except
f540: 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69   that the jump i
f550: 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68  s taken if.** th
f560: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
f570: 69 73 74 65 72 20 50 33 20 69 73 20 67 72 65 61  ister P3 is grea
f580: 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
f590: 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74  l to the content
f5a0: 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   of.** register 
f5b0: 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20  P1.  See the Lt 
f5c0: 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74  opcode for addit
f5d0: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
f5e0: 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 71  n..*/.case OP_Eq
f5f0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
f600: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 51  /* same as TK_EQ
f610: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
f620: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 3a 20   */.case OP_Ne: 
f630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
f640: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 45 2c 20   same as TK_NE, 
f650: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
f660: 2f 0a 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20  /.case OP_Lt:   
f670: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
f680: 61 6d 65 20 61 73 20 54 4b 5f 4c 54 2c 20 6a 75  ame as TK_LT, ju
f690: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
f6a0: 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 20  case OP_Le:     
f6b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
f6c0: 65 20 61 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70  e as TK_LE, jump
f6d0: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
f6e0: 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 20 20 20  se OP_Gt:       
f6f0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
f700: 61 73 20 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20  as TK_GT, jump, 
f710: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  in1, in3 */.case
f720: 20 4f 50 5f 47 65 3a 20 7b 20 20 20 20 20 20 20   OP_Ge: {       
f730: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
f740: 20 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20 69 6e   TK_GE, jump, in
f750: 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20  1, in3 */.  int 
f760: 72 65 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  res;            
f770: 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 74 68 65  /* Result of the
f780: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 70   comparison of p
f790: 49 6e 31 20 61 67 61 69 6e 73 74 20 70 49 6e 33  In1 against pIn3
f7a0: 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e   */.  char affin
f7b0: 69 74 79 3b 20 20 20 20 20 20 2f 2a 20 41 66 66  ity;      /* Aff
f7c0: 69 6e 69 74 79 20 74 6f 20 75 73 65 20 66 6f 72  inity to use for
f7d0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a 20   comparison */. 
f7e0: 20 75 31 36 20 66 6c 61 67 73 31 3b 20 20 20 20   u16 flags1;    
f7f0: 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20       /* Copy of 
f800: 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66  initial value of
f810: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 2a 2f 0a   pIn1->flags */.
f820: 20 20 75 31 36 20 66 6c 61 67 73 33 3b 20 20 20    u16 flags3;   
f830: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
f840: 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f   initial value o
f850: 66 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 2a 2f  f pIn3->flags */
f860: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
f870: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e  [pOp->p1];.  pIn
f880: 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
f890: 33 5d 3b 0a 20 20 66 6c 61 67 73 31 20 3d 20 70  3];.  flags1 = p
f8a0: 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20 20 66 6c  In1->flags;.  fl
f8b0: 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61  ags3 = pIn3->fla
f8c0: 67 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73  gs;.  if( (flags
f8d0: 31 20 7c 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f  1 | flags3)&MEM_
f8e0: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a 20 4f  Null ){.    /* O
f8f0: 6e 65 20 6f 72 20 62 6f 74 68 20 6f 70 65 72 61  ne or both opera
f900: 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 2a 2f 0a  nds are NULL */.
f910: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20      if( pOp->p5 
f920: 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  & SQLITE_NULLEQ 
f930: 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 53  ){.      /* If S
f940: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20  QLITE_NULLEQ is 
f950: 73 65 74 20 28 77 68 69 63 68 20 77 69 6c 6c 20  set (which will 
f960: 6f 6e 6c 79 20 68 61 70 70 65 6e 20 69 66 20 74  only happen if t
f970: 68 65 20 6f 70 65 72 61 74 6f 72 20 69 73 0a 20  he operator is. 
f980: 20 20 20 20 20 2a 2a 20 4f 50 5f 45 71 20 6f 72       ** OP_Eq or
f990: 20 4f 50 5f 4e 65 29 20 74 68 65 6e 20 74 61 6b   OP_Ne) then tak
f9a0: 65 20 74 68 65 20 6a 75 6d 70 20 6f 72 20 6e 6f  e the jump or no
f9b0: 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77  t depending on w
f9c0: 68 65 74 68 65 72 0a 20 20 20 20 20 20 2a 2a 20  hether.      ** 
f9d0: 6f 72 20 6e 6f 74 20 62 6f 74 68 20 6f 70 65 72  or not both oper
f9e0: 61 6e 64 73 20 61 72 65 20 6e 75 6c 6c 2e 0a 20  ands are null.. 
f9f0: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73       */.      as
fa00: 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
fa10: 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70 4f 70 2d  e==OP_Eq || pOp-
fa20: 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29  >opcode==OP_Ne )
fa30: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
fa40: 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 43 6c  (flags1 & MEM_Cl
fa50: 65 61 72 65 64 29 3d 3d 30 20 29 3b 0a 20 20 20  eared)==0 );.   
fa60: 20 20 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d     assert( (pOp-
fa70: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d  >p5 & SQLITE_JUM
fa80: 50 49 46 4e 55 4c 4c 29 3d 3d 30 20 29 3b 0a 20  PIFNULL)==0 );. 
fa90: 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 31       if( (flags1
faa0: 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20  &MEM_Null)!=0.  
fab0: 20 20 20 20 20 26 26 20 28 66 6c 61 67 73 33 26       && (flags3&
fac0: 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20  MEM_Null)!=0.   
fad0: 20 20 20 20 26 26 20 28 66 6c 61 67 73 33 26 4d      && (flags3&M
fae0: 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30 0a 20  EM_Cleared)==0. 
faf0: 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20       ){.        
fb00: 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20 52 65 73  res = 0;  /* Res
fb10: 75 6c 74 73 20 61 72 65 20 65 71 75 61 6c 20 2a  ults are equal *
fb20: 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  /.      }else{. 
fb30: 20 20 20 20 20 20 20 72 65 73 20 3d 20 31 3b 20         res = 1; 
fb40: 20 2f 2a 20 52 65 73 75 6c 74 73 20 61 72 65 20   /* Results are 
fb50: 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20  not equal */.   
fb60: 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
fb70: 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f        /* SQLITE_
fb80: 4e 55 4c 4c 45 51 20 69 73 20 63 6c 65 61 72 20  NULLEQ is clear 
fb90: 61 6e 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 65  and at least one
fba0: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
fbb0: 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20  ,.      ** then 
fbc0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c  the result is al
fbd0: 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 20  ways NULL..     
fbe0: 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20 69 73 20   ** The jump is 
fbf0: 74 61 6b 65 6e 20 69 66 20 74 68 65 20 53 51 4c  taken if the SQL
fc00: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62  ITE_JUMPIFNULL b
fc10: 69 74 20 69 73 20 73 65 74 2e 0a 20 20 20 20 20  it is set..     
fc20: 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4f   */.      if( pO
fc30: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53  p->p5 & SQLITE_S
fc40: 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 20 20  TOREP2 ){.      
fc50: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
fc60: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20  Op->p2];.       
fc70: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
fc80: 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  pOut, MEM_Null);
fc90: 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45  .        REGISTE
fca0: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
fcb0: 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 65   pOut);.      }e
fcc0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 56 64 62  lse{.        Vdb
fcd0: 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33  eBranchTaken(2,3
fce0: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  );.        if( p
fcf0: 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
fd00: 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20  JUMPIFNULL ){.  
fd10: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d          goto jum
fd20: 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 20  p_to_p2;.       
fd30: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
fd40: 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
fd50: 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65  }else{.    /* Ne
fd60: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
fd70: 20 4e 55 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d   NULL.  Do a com
fd80: 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20  parison. */.    
fd90: 61 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e  affinity = pOp->
fda0: 70 35 20 26 20 53 51 4c 49 54 45 5f 41 46 46 5f  p5 & SQLITE_AFF_
fdb0: 4d 41 53 4b 3b 0a 20 20 20 20 69 66 28 20 61 66  MASK;.    if( af
fdc0: 66 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41  finity>=SQLITE_A
fdd0: 46 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20  FF_NUMERIC ){.  
fde0: 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66      if( (pIn1->f
fdf0: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c  lags & (MEM_Int|
fe00: 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72  MEM_Real|MEM_Str
fe10: 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20  ))==MEM_Str ){. 
fe20: 20 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65         applyNume
fe30: 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 31  ricAffinity(pIn1
fe40: 2c 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ,0);.      }.   
fe50: 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c     if( (pIn3->fl
fe60: 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  ags & (MEM_Int|M
fe70: 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29  EM_Real|MEM_Str)
fe80: 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20  )==MEM_Str ){.  
fe90: 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72        applyNumer
fea0: 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c  icAffinity(pIn3,
feb0: 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  0);.      }.    
fec0: 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e 69  }else if( affini
fed0: 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54  ty==SQLITE_AFF_T
fee0: 45 58 54 20 29 7b 0a 20 20 20 20 20 20 69 66 28  EXT ){.      if(
fef0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
ff00: 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26 20 28  MEM_Str)==0 && (
ff10: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pIn1->flags & (M
ff20: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
ff30: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
ff40: 74 65 73 74 63 61 73 65 28 20 70 49 6e 31 2d 3e  testcase( pIn1->
ff50: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
ff60: 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63  );.        testc
ff70: 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ase( pIn1->flags
ff80: 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20   & MEM_Real );. 
ff90: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
ffa0: 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70  beMemStringify(p
ffb0: 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31  In1, encoding, 1
ffc0: 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63  );.        testc
ffd0: 61 73 65 28 20 28 66 6c 61 67 73 31 26 4d 45 4d  ase( (flags1&MEM
ffe0: 5f 44 79 6e 29 20 21 3d 20 28 70 49 6e 31 2d 3e  _Dyn) != (pIn1->
fff0: 66 6c 61 67 73 26 4d 45 4d 5f 44 79 6e 29 20 29  flags&MEM_Dyn) )
10000 3b 0a 20 20 20 20 20 20 20 20 66 6c 61 67 73 31  ;.        flags1
10010 20 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20   = (pIn1->flags 
10020 26 20 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29  & ~MEM_TypeMask)
10030 20 7c 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d   | (flags1 & MEM
10040 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 20 20  _TypeMask);.    
10050 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 70    }.      if( (p
10060 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
10070 5f 53 74 72 29 3d 3d 30 20 26 26 20 28 70 49 6e  _Str)==0 && (pIn
10080 33 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  3->flags & (MEM_
10090 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21 3d  Int|MEM_Real))!=
100a0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 74 65 73  0 ){.        tes
100b0 74 63 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61  tcase( pIn3->fla
100c0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a  gs & MEM_Int );.
100d0 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
100e0 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20  ( pIn3->flags & 
100f0 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20  MEM_Real );.    
10100 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
10110 65 6d 53 74 72 69 6e 67 69 66 79 28 70 49 6e 33  emStringify(pIn3
10120 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b 0a  , encoding, 1);.
10130 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
10140 28 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 44 79  ( (flags3&MEM_Dy
10150 6e 29 20 21 3d 20 28 70 49 6e 33 2d 3e 66 6c 61  n) != (pIn3->fla
10160 67 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20  gs&MEM_Dyn) );. 
10170 20 20 20 20 20 20 20 66 6c 61 67 73 33 20 3d 20         flags3 = 
10180 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 7e  (pIn3->flags & ~
10190 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20  MEM_TypeMask) | 
101a0 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 54 79  (flags3 & MEM_Ty
101b0 70 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20 7d  peMask);.      }
101c0 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72  .    }.    asser
101d0 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
101e0 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f  P4_COLLSEQ || pO
101f0 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29  p->p4.pColl==0 )
10200 3b 0a 20 20 20 20 69 66 28 20 70 49 6e 31 2d 3e  ;.    if( pIn1->
10210 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f  flags & MEM_Zero
10220 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
10230 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c  3VdbeMemExpandBl
10240 6f 62 28 70 49 6e 31 29 3b 0a 20 20 20 20 20 20  ob(pIn1);.      
10250 66 6c 61 67 73 31 20 26 3d 20 7e 4d 45 4d 5f 5a  flags1 &= ~MEM_Z
10260 65 72 6f 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  ero;.    }.    i
10270 66 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  f( pIn3->flags &
10280 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
10290 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
102a0 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33  mExpandBlob(pIn3
102b0 29 3b 0a 20 20 20 20 20 20 66 6c 61 67 73 33 20  );.      flags3 
102c0 26 3d 20 7e 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20  &= ~MEM_Zero;.  
102d0 20 20 7d 0a 20 20 20 20 69 66 28 20 64 62 2d 3e    }.    if( db->
102e0 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67  mallocFailed ) g
102f0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
10300 72 65 73 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d  res = sqlite3Mem
10310 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20 70 49  Compare(pIn3, pI
10320 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c  n1, pOp->p4.pCol
10330 6c 29 3b 0a 20 20 7d 0a 20 20 73 77 69 74 63 68  l);.  }.  switch
10340 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
10350 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 45 71 3a  .    case OP_Eq:
10360 20 20 20 20 72 65 73 20 3d 20 72 65 73 3d 3d 30      res = res==0
10370 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
10380 20 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20   case OP_Ne:    
10390 72 65 73 20 3d 20 72 65 73 21 3d 30 3b 20 20 20  res = res!=0;   
103a0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
103b0 65 20 4f 50 5f 4c 74 3a 20 20 20 20 72 65 73 20  e OP_Lt:    res 
103c0 3d 20 72 65 73 3c 30 3b 20 20 20 20 20 20 62 72  = res<0;      br
103d0 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50  eak;.    case OP
103e0 5f 4c 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65  _Le:    res = re
103f0 73 3c 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b  s<=0;     break;
10400 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 47 74 3a  .    case OP_Gt:
10410 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e 30 3b      res = res>0;
10420 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
10430 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20   default:       
10440 72 65 73 20 3d 20 72 65 73 3e 3d 30 3b 20 20 20  res = res>=0;   
10450 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
10460 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63 68 61 6e  /* Undo any chan
10470 67 65 73 20 6d 61 64 65 20 62 79 20 61 70 70 6c  ges made by appl
10480 79 41 66 66 69 6e 69 74 79 28 29 20 74 6f 20 74  yAffinity() to t
10490 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  he input registe
104a0 72 73 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  rs. */.  assert(
104b0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
104c0 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61  MEM_Dyn) == (fla
104d0 67 73 31 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29  gs1 & MEM_Dyn) )
104e0 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  ;.  pIn1->flags 
104f0 3d 20 66 6c 61 67 73 31 3b 0a 20 20 61 73 73 65  = flags1;.  asse
10500 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  rt( (pIn3->flags
10510 20 26 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28   & MEM_Dyn) == (
10520 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 44 79 6e  flags3 & MEM_Dyn
10530 29 20 29 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c 61  ) );.  pIn3->fla
10540 67 73 20 3d 20 66 6c 61 67 73 33 3b 0a 0a 20 20  gs = flags3;..  
10550 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  if( pOp->p5 & SQ
10560 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a  LITE_STOREP2 ){.
10570 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d      pOut = &aMem
10580 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 6d  [pOp->p2];.    m
10590 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
105a0 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 4d 65  p, pOut);.    Me
105b0 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
105c0 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20  t, MEM_Int);.   
105d0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 65 73   pOut->u.i = res
105e0 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
105f0 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f  RACE(pOp->p2, pO
10600 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ut);.  }else{.  
10610 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
10620 6e 28 72 65 73 21 3d 30 2c 20 28 70 4f 70 2d 3e  n(res!=0, (pOp->
10630 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  p5 & SQLITE_NULL
10640 45 51 29 3f 32 3a 33 29 3b 0a 20 20 20 20 69 66  EQ)?2:3);.    if
10650 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 67  ( res ){.      g
10660 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
10670 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
10680 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
10690 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 2a 20 2a   Permutation * *
106a0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65   * P4 *.**.** Se
106b0 74 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f  t the permutatio
106c0 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 4f 50  n used by the OP
106d0 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 6f  _Compare operato
106e0 72 20 74 6f 20 62 65 20 74 68 65 20 61 72 72 61  r to be the arra
106f0 79 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73  y.** of integers
10700 20 69 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 54 68   in P4..**.** Th
10710 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 69 73  e permutation is
10720 20 6f 6e 6c 79 20 76 61 6c 69 64 20 75 6e 74 69   only valid unti
10730 6c 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 43 6f  l the next OP_Co
10740 6d 70 61 72 65 20 74 68 61 74 20 68 61 73 0a 2a  mpare that has.*
10750 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f 50 45 52  * the OPFLAG_PER
10760 4d 55 54 45 20 62 69 74 20 73 65 74 20 69 6e 20  MUTE bit set in 
10770 50 35 2e 20 54 79 70 69 63 61 6c 6c 79 20 74 68  P5. Typically th
10780 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e  e OP_Permutation
10790 20 73 68 6f 75 6c 64 20 0a 2a 2a 20 6f 63 63 75   should .** occu
107a0 72 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 70 72  r immediately pr
107b0 69 6f 72 20 74 6f 20 74 68 65 20 4f 50 5f 43 6f  ior to the OP_Co
107c0 6d 70 61 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  mpare..*/.case O
107d0 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20 7b  P_Permutation: {
107e0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
107f0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52  p4type==P4_INTAR
10800 52 41 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28  RAY );.  assert(
10810 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a 20   pOp->p4.ai );. 
10820 20 61 50 65 72 6d 75 74 65 20 3d 20 70 4f 70 2d   aPermute = pOp-
10830 3e 70 34 2e 61 69 3b 0a 20 20 62 72 65 61 6b 3b  >p4.ai;.  break;
10840 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
10850 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50 33 20  ompare P1 P2 P3 
10860 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
10870 73 3a 20 72 5b 50 31 40 50 33 5d 20 3c 2d 3e 20  s: r[P1@P3] <-> 
10880 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 43  r[P2@P3].**.** C
10890 6f 6d 70 61 72 65 20 74 77 6f 20 76 65 63 74 6f  ompare two vecto
108a0 72 73 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  rs of registers 
108b0 69 6e 20 72 65 67 28 50 31 29 2e 2e 72 65 67 28  in reg(P1)..reg(
108c0 50 31 2b 50 33 2d 31 29 20 28 63 61 6c 6c 20 74  P1+P3-1) (call t
108d0 68 69 73 0a 2a 2a 20 76 65 63 74 6f 72 20 22 41  his.** vector "A
108e0 22 29 20 61 6e 64 20 69 6e 20 72 65 67 28 50 32  ") and in reg(P2
108f0 29 2e 2e 72 65 67 28 50 32 2b 50 33 2d 31 29 20  )..reg(P2+P3-1) 
10900 28 22 42 22 29 2e 20 20 53 61 76 65 20 74 68 65  ("B").  Save the
10910 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68   result of.** th
10920 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 6f 72  e comparison for
10930 20 75 73 65 20 62 79 20 74 68 65 20 6e 65 78 74   use by the next
10940 20 4f 50 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63   OP_Jump instruc
10950 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68  t..**.** If P5 h
10960 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 50 45  as the OPFLAG_PE
10970 52 4d 55 54 45 20 62 69 74 20 73 65 74 2c 20 74  RMUTE bit set, t
10980 68 65 6e 20 74 68 65 20 6f 72 64 65 72 20 6f 66  hen the order of
10990 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 0a 2a   comparison is.*
109a0 2a 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  * determined by 
109b0 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  the most recent 
109c0 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f  OP_Permutation o
109d0 70 65 72 61 74 6f 72 2e 20 20 49 66 20 74 68 65  perator.  If the
109e0 0a 2a 2a 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  .** OPFLAG_PERMU
109f0 54 45 20 62 69 74 20 69 73 20 63 6c 65 61 72 2c  TE bit is clear,
10a00 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 61   then register a
10a10 72 65 20 63 6f 6d 70 61 72 65 64 20 69 6e 20 73  re compared in s
10a20 65 71 75 65 6e 74 69 61 6c 0a 2a 2a 20 6f 72 64  equential.** ord
10a30 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  er..**.** P4 is 
10a40 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74  a KeyInfo struct
10a50 75 72 65 20 74 68 61 74 20 64 65 66 69 6e 65 73  ure that defines
10a60 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
10a70 6e 63 65 73 20 61 6e 64 20 73 6f 72 74 0a 2a 2a  nces and sort.**
10a80 20 6f 72 64 65 72 73 20 66 6f 72 20 74 68 65 20   orders for the 
10a90 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 65  comparison.  The
10aa0 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 61 70 70   permutation app
10ab0 6c 69 65 73 20 74 6f 20 72 65 67 69 73 74 65 72  lies to register
10ac0 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 20  s.** only.  The 
10ad0 4b 65 79 49 6e 66 6f 20 65 6c 65 6d 65 6e 74 73  KeyInfo elements
10ae0 20 61 72 65 20 75 73 65 64 20 73 65 71 75 65 6e   are used sequen
10af0 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  tially..**.** Th
10b00 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  e comparison is 
10b10 61 20 73 6f 72 74 20 63 6f 6d 70 61 72 69 73 6f  a sort compariso
10b20 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70  n, so NULLs comp
10b30 61 72 65 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55  are equal,.** NU
10b40 4c 4c 73 20 61 72 65 20 6c 65 73 73 20 74 68 61  LLs are less tha
10b50 6e 20 6e 75 6d 62 65 72 73 2c 20 6e 75 6d 62 65  n numbers, numbe
10b60 72 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e  rs are less than
10b70 20 73 74 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64   strings,.** and
10b80 20 73 74 72 69 6e 67 73 20 61 72 65 20 6c 65 73   strings are les
10b90 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f  s than blobs..*/
10ba0 0a 63 61 73 65 20 4f 50 5f 43 6f 6d 70 61 72 65  .case OP_Compare
10bb0 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69  : {.  int n;.  i
10bc0 6e 74 20 69 3b 0a 20 20 69 6e 74 20 70 31 3b 0a  nt i;.  int p1;.
10bd0 20 20 69 6e 74 20 70 32 3b 0a 20 20 63 6f 6e 73    int p2;.  cons
10be0 74 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49  t KeyInfo *pKeyI
10bf0 6e 66 6f 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a  nfo;.  int idx;.
10c00 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c    CollSeq *pColl
10c10 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e  ;    /* Collatin
10c20 67 20 73 65 71 75 65 6e 63 65 20 74 6f 20 75 73  g sequence to us
10c30 65 20 6f 6e 20 74 68 69 73 20 74 65 72 6d 20 2a  e on this term *
10c40 2f 0a 20 20 69 6e 74 20 62 52 65 76 3b 20 20 20  /.  int bRev;   
10c50 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66         /* True f
10c60 6f 72 20 44 45 53 43 45 4e 44 49 4e 47 20 73 6f  or DESCENDING so
10c70 72 74 20 6f 72 64 65 72 20 2a 2f 0a 0a 20 20 69  rt order */..  i
10c80 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50  f( (pOp->p5 & OP
10c90 46 4c 41 47 5f 50 45 52 4d 55 54 45 29 3d 3d 30  FLAG_PERMUTE)==0
10ca0 20 29 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b   ) aPermute = 0;
10cb0 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  .  n = pOp->p3;.
10cc0 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70    pKeyInfo = pOp
10cd0 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20  ->p4.pKeyInfo;. 
10ce0 20 61 73 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a   assert( n>0 );.
10cf0 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e    assert( pKeyIn
10d00 66 6f 21 3d 30 20 29 3b 0a 20 20 70 31 20 3d 20  fo!=0 );.  p1 = 
10d10 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20  pOp->p1;.  p2 = 
10d20 70 4f 70 2d 3e 70 32 3b 0a 23 69 66 20 53 51 4c  pOp->p2;.#if SQL
10d30 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20  ITE_DEBUG.  if( 
10d40 61 50 65 72 6d 75 74 65 20 29 7b 0a 20 20 20 20  aPermute ){.    
10d50 69 6e 74 20 6b 2c 20 6d 78 20 3d 20 30 3b 0a 20  int k, mx = 0;. 
10d60 20 20 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c 6e 3b     for(k=0; k<n;
10d70 20 6b 2b 2b 29 20 69 66 28 20 61 50 65 72 6d 75   k++) if( aPermu
10d80 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78 20 3d 20  te[k]>mx ) mx = 
10d90 61 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a 20 20 20  aPermute[k];.   
10da0 20 61 73 73 65 72 74 28 20 70 31 3e 30 20 26 26   assert( p1>0 &&
10db0 20 70 31 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d   p1+mx<=(p->nMem
10dc0 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29  -p->nCursor)+1 )
10dd0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32  ;.    assert( p2
10de0 3e 30 20 26 26 20 70 32 2b 6d 78 3c 3d 28 70 2d  >0 && p2+mx<=(p-
10df0 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
10e00 29 2b 31 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  )+1 );.  }else{.
10e10 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30      assert( p1>0
10e20 20 26 26 20 70 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d   && p1+n<=(p->nM
10e30 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31  em-p->nCursor)+1
10e40 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
10e50 70 32 3e 30 20 26 26 20 70 32 2b 6e 3c 3d 28 70  p2>0 && p2+n<=(p
10e60 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
10e70 72 29 2b 31 20 29 3b 0a 20 20 7d 0a 23 65 6e 64  r)+1 );.  }.#end
10e80 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42  if /* SQLITE_DEB
10e90 55 47 20 2a 2f 0a 20 20 66 6f 72 28 69 3d 30 3b  UG */.  for(i=0;
10ea0 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20   i<n; i++){.    
10eb0 69 64 78 20 3d 20 61 50 65 72 6d 75 74 65 20 3f  idx = aPermute ?
10ec0 20 61 50 65 72 6d 75 74 65 5b 69 5d 20 3a 20 69   aPermute[i] : i
10ed0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
10ee0 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
10ef0 31 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20 61  1+idx]) );.    a
10f00 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
10f10 64 28 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29  d(&aMem[p2+idx])
10f20 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52   );.    REGISTER
10f30 5f 54 52 41 43 45 28 70 31 2b 69 64 78 2c 20 26  _TRACE(p1+idx, &
10f40 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 3b 0a 20  aMem[p1+idx]);. 
10f50 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
10f60 45 28 70 32 2b 69 64 78 2c 20 26 61 4d 65 6d 5b  E(p2+idx, &aMem[
10f70 70 32 2b 69 64 78 5d 29 3b 0a 20 20 20 20 61 73  p2+idx]);.    as
10f80 73 65 72 74 28 20 69 3c 70 4b 65 79 49 6e 66 6f  sert( i<pKeyInfo
10f90 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20 20 20 20  ->nField );.    
10fa0 70 43 6f 6c 6c 20 3d 20 70 4b 65 79 49 6e 66 6f  pColl = pKeyInfo
10fb0 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20  ->aColl[i];.    
10fc0 62 52 65 76 20 3d 20 70 4b 65 79 49 6e 66 6f 2d  bRev = pKeyInfo-
10fd0 3e 61 53 6f 72 74 4f 72 64 65 72 5b 69 5d 3b 0a  >aSortOrder[i];.
10fe0 20 20 20 20 69 43 6f 6d 70 61 72 65 20 3d 20 73      iCompare = s
10ff0 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65  qlite3MemCompare
11000 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c 20  (&aMem[p1+idx], 
11010 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 2c 20 70  &aMem[p2+idx], p
11020 43 6f 6c 6c 29 3b 0a 20 20 20 20 69 66 28 20 69  Coll);.    if( i
11030 43 6f 6d 70 61 72 65 20 29 7b 0a 20 20 20 20 20  Compare ){.     
11040 20 69 66 28 20 62 52 65 76 20 29 20 69 43 6f 6d   if( bRev ) iCom
11050 70 61 72 65 20 3d 20 2d 69 43 6f 6d 70 61 72 65  pare = -iCompare
11060 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
11070 20 20 20 7d 0a 20 20 7d 0a 20 20 61 50 65 72 6d     }.  }.  aPerm
11080 75 74 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b  ute = 0;.  break
11090 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
110a0 4a 75 6d 70 20 50 31 20 50 32 20 50 33 20 2a 20  Jump P1 P2 P3 * 
110b0 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  *.**.** Jump to 
110c0 74 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  the instruction 
110d0 61 74 20 61 64 64 72 65 73 73 20 50 31 2c 20 50  at address P1, P
110e0 32 2c 20 6f 72 20 50 33 20 64 65 70 65 6e 64 69  2, or P3 dependi
110f0 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a  ng on whether.**
11100 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63   in the most rec
11110 65 6e 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 69  ent OP_Compare i
11120 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 65 20 50  nstruction the P
11130 31 20 76 65 63 74 6f 72 20 77 61 73 20 6c 65 73  1 vector was les
11140 73 20 74 68 61 6e 0a 2a 2a 20 65 71 75 61 6c 20  s than.** equal 
11150 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74  to, or greater t
11160 68 61 6e 20 74 68 65 20 50 32 20 76 65 63 74 6f  han the P2 vecto
11170 72 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  r, respectively.
11180 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70  .*/.case OP_Jump
11190 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
111a0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28  /* jump */.  if(
111b0 20 69 43 6f 6d 70 61 72 65 3c 30 20 29 7b 0a 20   iCompare<0 ){. 
111c0 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
111d0 65 6e 28 30 2c 33 29 3b 20 70 4f 70 20 3d 20 26  en(0,3); pOp = &
111e0 61 4f 70 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d  aOp[pOp->p1 - 1]
111f0 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69 43  ;.  }else if( iC
11200 6f 6d 70 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20  ompare==0 ){.   
11210 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
11220 28 31 2c 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f  (1,3); pOp = &aO
11230 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a  p[pOp->p2 - 1];.
11240 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62    }else{.    Vdb
11250 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33  eBranchTaken(2,3
11260 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f  ); pOp = &aOp[pO
11270 70 2d 3e 70 33 20 2d 20 31 5d 3b 0a 20 20 7d 0a  p->p3 - 1];.  }.
11280 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
11290 70 63 6f 64 65 3a 20 41 6e 64 20 50 31 20 50 32  pcode: And P1 P2
112a0 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
112b0 73 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31  sis: r[P3]=(r[P1
112c0 5d 20 26 26 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a  ] && r[P2]).**.*
112d0 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63  * Take the logic
112e0 61 6c 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61  al AND of the va
112f0 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
11300 73 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a  s P1 and P2 and.
11310 2a 2a 20 77 72 69 74 65 20 74 68 65 20 72 65 73  ** write the res
11320 75 6c 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ult into registe
11330 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65  r P3..**.** If e
11340 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20 69  ither P1 or P2 i
11350 73 20 30 20 28 66 61 6c 73 65 29 20 74 68 65 6e  s 0 (false) then
11360 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 30   the result is 0
11370 20 65 76 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20   even if.** the 
11380 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  other input is N
11390 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64  ULL.  A NULL and
113a0 20 74 72 75 65 20 6f 72 20 74 77 6f 20 4e 55 4c   true or two NUL
113b0 4c 73 20 67 69 76 65 0a 2a 2a 20 61 20 4e 55 4c  Ls give.** a NUL
113c0 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20  L output..*/./* 
113d0 4f 70 63 6f 64 65 3a 20 4f 72 20 50 31 20 50 32  Opcode: Or P1 P2
113e0 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
113f0 73 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31  sis: r[P3]=(r[P1
11400 5d 20 7c 7c 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a  ] || r[P2]).**.*
11410 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63  * Take the logic
11420 61 6c 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c  al OR of the val
11430 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
11440 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a  P1 and P2 and.**
11450 20 73 74 6f 72 65 20 74 68 65 20 61 6e 73 77 65   store the answe
11460 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  r in register P3
11470 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65  ..**.** If eithe
11480 72 20 50 31 20 6f 72 20 50 32 20 69 73 20 6e 6f  r P1 or P2 is no
11490 6e 7a 65 72 6f 20 28 74 72 75 65 29 20 74 68 65  nzero (true) the
114a0 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
114b0 31 20 28 74 72 75 65 29 0a 2a 2a 20 65 76 65 6e  1 (true).** even
114c0 20 69 66 20 74 68 65 20 6f 74 68 65 72 20 69 6e   if the other in
114d0 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20  put is NULL.  A 
114e0 4e 55 4c 4c 20 61 6e 64 20 66 61 6c 73 65 20 6f  NULL and false o
114f0 72 20 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67  r two NULLs.** g
11500 69 76 65 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75  ive a NULL outpu
11510 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 6e  t..*/.case OP_An
11520 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d:              
11530 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 41 4e  /* same as TK_AN
11540 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  D, in1, in2, out
11550 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 72 3a  3 */.case OP_Or:
11560 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
11570 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4f 52 2c  * same as TK_OR,
11580 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
11590 2a 2f 0a 20 20 69 6e 74 20 76 31 3b 20 20 20 20  */.  int v1;    
115a0 2f 2a 20 4c 65 66 74 20 6f 70 65 72 61 6e 64 3a  /* Left operand:
115b0 20 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54    0==FALSE, 1==T
115c0 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20  RUE, 2==UNKNOWN 
115d0 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74  or NULL */.  int
115e0 20 76 32 3b 20 20 20 20 2f 2a 20 52 69 67 68 74   v2;    /* Right
115f0 20 6f 70 65 72 61 6e 64 3a 20 30 3d 3d 46 41 4c   operand: 0==FAL
11600 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d  SE, 1==TRUE, 2==
11610 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20  UNKNOWN or NULL 
11620 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  */..  pIn1 = &aM
11630 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  em[pOp->p1];.  i
11640 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  f( pIn1->flags &
11650 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
11660 20 76 31 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65   v1 = 2;.  }else
11670 7b 0a 20 20 20 20 76 31 20 3d 20 73 71 6c 69 74  {.    v1 = sqlit
11680 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
11690 49 6e 31 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 70  In1)!=0;.  }.  p
116a0 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
116b0 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 32  >p2];.  if( pIn2
116c0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
116d0 6c 6c 20 29 7b 0a 20 20 20 20 76 32 20 3d 20 32  ll ){.    v2 = 2
116e0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76  ;.  }else{.    v
116f0 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  2 = sqlite3VdbeI
11700 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 21 3d 30  ntValue(pIn2)!=0
11710 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
11720 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20  >opcode==OP_And 
11730 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  ){.    static co
11740 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
11750 72 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20  r and_logic[] = 
11760 7b 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c  { 0, 0, 0, 0, 1,
11770 20 32 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20   2, 0, 2, 2 };. 
11780 20 20 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69     v1 = and_logi
11790 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65  c[v1*3+v2];.  }e
117a0 6c 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20  lse{.    static 
117b0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
117c0 68 61 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d  har or_logic[] =
117d0 20 7b 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31   { 0, 1, 2, 1, 1
117e0 2c 20 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a  , 1, 2, 1, 2 };.
117f0 20 20 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69      v1 = or_logi
11800 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a  c[v1*3+v2];.  }.
11810 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
11820 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 76  Op->p3];.  if( v
11830 31 3d 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53  1==2 ){.    MemS
11840 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
11850 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65   MEM_Null);.  }e
11860 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  lse{.    pOut->u
11870 2e 69 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d  .i = v1;.    Mem
11880 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
11890 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a  , MEM_Int);.  }.
118a0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
118b0 70 63 6f 64 65 3a 20 4e 6f 74 20 50 31 20 50 32  pcode: Not P1 P2
118c0 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
118d0 69 73 3a 20 72 5b 50 32 5d 3d 20 21 72 5b 50 31  is: r[P2]= !r[P1
118e0 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65  ].**.** Interpre
118f0 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  t the value in r
11900 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61 20  egister P1 as a 
11910 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20  boolean value.  
11920 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 62 6f 6f  Store the.** boo
11930 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74 20  lean complement 
11940 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20  in register P2. 
11950 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   If the value in
11960 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
11970 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61  .** NULL, then a
11980 20 4e 55 4c 4c 20 69 73 20 73 74 6f 72 65 64 20   NULL is stored 
11990 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  in P2..*/.case O
119a0 50 5f 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20  P_Not: {        
119b0 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
119c0 61 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c 20  as TK_NOT, in1, 
119d0 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d  out2 */.  pIn1 =
119e0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
119f0 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
11a00 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69  pOp->p2];.  sqli
11a10 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
11a20 6c 28 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 28  l(pOut);.  if( (
11a30 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
11a40 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Null)==0 ){.  
11a50 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
11a60 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75  MEM_Int;.    pOu
11a70 74 2d 3e 75 2e 69 20 3d 20 21 73 71 6c 69 74 65  t->u.i = !sqlite
11a80 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
11a90 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  n1);.  }.  break
11aa0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
11ab0 42 69 74 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a  BitNot P1 P2 * *
11ac0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
11ad0 72 5b 50 31 5d 3d 20 7e 72 5b 50 31 5d 0a 2a 2a  r[P1]= ~r[P1].**
11ae0 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
11af0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
11b00 69 73 74 65 72 20 50 31 20 61 73 20 61 6e 20 69  ister P1 as an i
11b10 6e 74 65 67 65 72 2e 20 20 53 74 6f 72 65 20 74  nteger.  Store t
11b20 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c  he.** ones-compl
11b30 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 50 31 20  ement of the P1 
11b40 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73  value into regis
11b50 74 65 72 20 50 32 2e 20 20 49 66 20 50 31 20 68  ter P2.  If P1 h
11b60 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74  olds.** a NULL t
11b70 68 65 6e 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c  hen store a NULL
11b80 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20   in P2..*/.case 
11b90 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b 20 20 20 20  OP_BitNot: {    
11ba0 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
11bb0 20 61 73 20 54 4b 5f 42 49 54 4e 4f 54 2c 20 69   as TK_BITNOT, i
11bc0 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49  n1, out2 */.  pI
11bd0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
11be0 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p1];.  pOut = &a
11bf0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
11c00 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
11c10 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 69  tNull(pOut);.  i
11c20 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
11c30 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
11c40 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  {.    pOut->flag
11c50 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  s = MEM_Int;.   
11c60 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 7e 73 71   pOut->u.i = ~sq
11c70 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
11c80 65 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62  e(pIn1);.  }.  b
11c90 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
11ca0 64 65 3a 20 4f 6e 63 65 20 50 31 20 50 32 20 2a  de: Once P1 P2 *
11cb0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b   * *.**.** Check
11cc0 20 74 68 65 20 22 6f 6e 63 65 22 20 66 6c 61 67   the "once" flag
11cd0 20 6e 75 6d 62 65 72 20 50 31 2e 20 49 66 20 69   number P1. If i
11ce0 74 20 69 73 20 73 65 74 2c 20 6a 75 6d 70 20 74  t is set, jump t
11cf0 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
11d00 2e 20 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c  . .** Otherwise,
11d10 20 73 65 74 20 74 68 65 20 66 6c 61 67 20 61 6e   set the flag an
11d20 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  d fall through t
11d30 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
11d40 75 63 74 69 6f 6e 2e 0a 2a 2a 20 49 6e 20 6f 74  uction..** In ot
11d50 68 65 72 20 77 6f 72 64 73 2c 20 74 68 69 73 20  her words, this 
11d60 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20 61 6c  opcode causes al
11d70 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 70 63 6f  l following opco
11d80 64 65 73 20 75 70 20 74 68 72 6f 75 67 68 20 50  des up through P
11d90 32 0a 2a 2a 20 28 62 75 74 20 6e 6f 74 20 69 6e  2.** (but not in
11da0 63 6c 75 64 69 6e 67 20 50 32 29 20 74 6f 20 72  cluding P2) to r
11db0 75 6e 20 6a 75 73 74 20 6f 6e 63 65 20 61 6e 64  un just once and
11dc0 20 74 6f 20 62 65 20 73 6b 69 70 70 65 64 20 6f   to be skipped o
11dd0 6e 20 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20  n subsequent.** 
11de0 74 69 6d 65 73 20 74 68 72 6f 75 67 68 20 74 68  times through th
11df0 65 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 41 6c  e loop..**.** Al
11e00 6c 20 22 6f 6e 63 65 22 20 66 6c 61 67 73 20 61  l "once" flags a
11e10 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 63 6c 65  re initially cle
11e20 61 72 65 64 20 77 68 65 6e 65 76 65 72 20 61 20  ared whenever a 
11e30 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
11e40 6e 74 0a 2a 2a 20 66 69 72 73 74 20 62 65 67 69  nt.** first begi
11e50 6e 73 20 74 6f 20 72 75 6e 2e 0a 2a 2f 0a 63 61  ns to run..*/.ca
11e60 73 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20 20  se OP_Once: {   
11e70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
11e80 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  p */.  assert( p
11e90 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 4f 6e 63 65 46  Op->p1<p->nOnceF
11ea0 6c 61 67 20 29 3b 0a 20 20 56 64 62 65 42 72 61  lag );.  VdbeBra
11eb0 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 61 4f 6e 63  nchTaken(p->aOnc
11ec0 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 21 3d  eFlag[pOp->p1]!=
11ed0 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 2d 3e  0, 2);.  if( p->
11ee0 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70  aOnceFlag[pOp->p
11ef0 31 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a  1] ){.    goto j
11f00 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c  ump_to_p2;.  }el
11f10 73 65 7b 0a 20 20 20 20 70 2d 3e 61 4f 6e 63 65  se{.    p->aOnce
11f20 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20  Flag[pOp->p1] = 
11f30 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
11f40 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  }../* Opcode: If
11f50 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
11f60 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
11f70 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
11f80 65 67 69 73 74 65 72 20 50 31 20 69 73 20 74 72  egister P1 is tr
11f90 75 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a  ue.  The value.*
11fa0 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  * is considered 
11fb0 74 72 75 65 20 69 66 20 69 74 20 69 73 20 6e 75  true if it is nu
11fc0 6d 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65  meric and non-ze
11fd0 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  ro.  If the valu
11fe0 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55  e.** in P1 is NU
11ff0 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  LL then take the
12000 20 6a 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c   jump if and onl
12010 79 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a  y if P3 is non-z
12020 65 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ero..*/./* Opcod
12030 65 3a 20 49 66 4e 6f 74 20 50 31 20 50 32 20 50  e: IfNot P1 P2 P
12040 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
12050 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61   to P2 if the va
12060 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
12070 50 31 20 69 73 20 46 61 6c 73 65 2e 20 20 54 68  P1 is False.  Th
12080 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f  e value.** is co
12090 6e 73 69 64 65 72 65 64 20 66 61 6c 73 65 20 69  nsidered false i
120a0 66 20 69 74 20 68 61 73 20 61 20 6e 75 6d 65 72  f it has a numer
120b0 69 63 20 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f  ic value of zero
120c0 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a  .  If the value.
120d0 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c  ** in P1 is NULL
120e0 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a   then take the j
120f0 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20  ump if and only 
12100 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72  if P3 is non-zer
12110 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  o..*/.case OP_If
12120 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
12130 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
12140 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a  /.case OP_IfNot:
12150 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
12160 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
12170 69 6e 74 20 63 3b 0a 20 20 70 49 6e 31 20 3d 20  int c;.  pIn1 = 
12180 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
12190 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
121a0 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
121b0 20 20 20 20 63 20 3d 20 70 4f 70 2d 3e 70 33 3b      c = pOp->p3;
121c0 0a 20 20 7d 65 6c 73 65 7b 0a 23 69 66 64 65 66  .  }else{.#ifdef
121d0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
121e0 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20  ATING_POINT.    
121f0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  c = sqlite3VdbeI
12200 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30  ntValue(pIn1)!=0
12210 3b 0a 23 65 6c 73 65 0a 20 20 20 20 63 20 3d 20  ;.#else.    c = 
12220 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56  sqlite3VdbeRealV
12230 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 2e 30 3b  alue(pIn1)!=0.0;
12240 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20  .#endif.    if( 
12250 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
12260 49 66 4e 6f 74 20 29 20 63 20 3d 20 21 63 3b 0a  IfNot ) c = !c;.
12270 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68    }.  VdbeBranch
12280 54 61 6b 65 6e 28 63 21 3d 30 2c 20 32 29 3b 0a  Taken(c!=0, 2);.
12290 20 20 69 66 28 20 63 20 29 7b 0a 20 20 20 20 67    if( c ){.    g
122a0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
122b0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
122c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c  /* Opcode: IsNul
122d0 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  l P1 P2 * * *.**
122e0 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 66 20 72   Synopsis:  if r
122f0 5b 50 31 5d 3d 3d 4e 55 4c 4c 20 67 6f 74 6f 20  [P1]==NULL goto 
12300 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f  P2.**.** Jump to
12310 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65   P2 if the value
12320 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
12330 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  is NULL..*/.case
12340 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20   OP_IsNull: {   
12350 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
12360 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a   as TK_ISNULL, j
12370 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
12380 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
12390 70 31 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  p1];.  VdbeBranc
123a0 68 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66  hTaken( (pIn1->f
123b0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
123c0 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28  !=0, 2);.  if( (
123d0 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
123e0 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20  M_Null)!=0 ){.  
123f0 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
12400 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
12410 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  }../* Opcode: No
12420 74 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20  tNull P1 P2 * * 
12430 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
12440 66 20 72 5b 50 31 5d 21 3d 4e 55 4c 4c 20 67 6f  f r[P1]!=NULL go
12450 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  to P2.**.** Jump
12460 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61   to P2 if the va
12470 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
12480 50 31 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20  P1 is not NULL. 
12490 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74   .*/.case OP_Not
124a0 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20  Null: {         
124b0 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
124c0 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20  _NOTNULL, jump, 
124d0 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
124e0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
124f0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
12500 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  n( (pIn1->flags 
12510 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 2c 20  & MEM_Null)==0, 
12520 32 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  2);.  if( (pIn1-
12530 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
12540 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74  l)==0 ){.    got
12550 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
12560 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
12570 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20   Opcode: Column 
12580 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
12590 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
125a0 33 5d 3d 50 58 0a 2a 2a 0a 2a 2a 20 49 6e 74 65  3]=PX.**.** Inte
125b0 72 70 72 65 74 20 74 68 65 20 64 61 74 61 20 74  rpret the data t
125c0 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f  hat cursor P1 po
125d0 69 6e 74 73 20 74 6f 20 61 73 20 61 20 73 74 72  ints to as a str
125e0 75 63 74 75 72 65 20 62 75 69 6c 74 20 75 73 69  ucture built usi
125f0 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65  ng.** the MakeRe
12600 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e  cord instruction
12610 2e 20 20 28 53 65 65 20 74 68 65 20 4d 61 6b 65  .  (See the Make
12620 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f  Record opcode fo
12630 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20  r additional.** 
12640 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
12650 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20  t the format of 
12660 74 68 65 20 64 61 74 61 2e 29 20 20 45 78 74 72  the data.)  Extr
12670 61 63 74 20 74 68 65 20 50 32 2d 74 68 20 63 6f  act the P2-th co
12680 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69  lumn.** from thi
12690 73 20 72 65 63 6f 72 64 2e 20 20 49 66 20 74 68  s record.  If th
126a0 65 72 65 20 61 72 65 20 6c 65 73 73 20 74 68 61  ere are less tha
126b0 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c  t (P2+1) .** val
126c0 75 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  ues in the recor
126d0 64 2c 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c  d, extract a NUL
126e0 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c  L..**.** The val
126f0 75 65 20 65 78 74 72 61 63 74 65 64 20 69 73 20  ue extracted is 
12700 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
12710 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P3..**.** If 
12720 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61  the column conta
12730 69 6e 73 20 66 65 77 65 72 20 74 68 61 6e 20 50  ins fewer than P
12740 32 20 66 69 65 6c 64 73 2c 20 74 68 65 6e 20 65  2 fields, then e
12750 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20  xtract a NULL.  
12760 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50 34  Or,.** if the P4
12770 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50   argument is a P
12780 34 5f 4d 45 4d 20 75 73 65 20 74 68 65 20 76 61  4_MEM use the va
12790 6c 75 65 20 6f 66 20 74 68 65 20 50 34 20 61 72  lue of the P4 ar
127a0 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65  gument as.** the
127b0 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49   result..**.** I
127c0 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 43 4c 45  f the OPFLAG_CLE
127d0 41 52 43 41 43 48 45 20 62 69 74 20 69 73 20 73  ARCACHE bit is s
127e0 65 74 20 6f 6e 20 50 35 20 61 6e 64 20 50 31 20  et on P5 and P1 
127f0 69 73 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  is a pseudo-tabl
12800 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65  e cursor,.** the
12810 6e 20 74 68 65 20 63 61 63 68 65 20 6f 66 20 74  n the cache of t
12820 68 65 20 63 75 72 73 6f 72 20 69 73 20 72 65 73  he cursor is res
12830 65 74 20 70 72 69 6f 72 20 74 6f 20 65 78 74 72  et prior to extr
12840 61 63 74 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d  acting the colum
12850 6e 2e 0a 2a 2a 20 54 68 65 20 66 69 72 73 74 20  n..** The first 
12860 4f 50 5f 43 6f 6c 75 6d 6e 20 61 67 61 69 6e 73  OP_Column agains
12870 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
12880 20 61 66 74 65 72 20 74 68 65 20 76 61 6c 75 65   after the value
12890 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a   of the content.
128a0 2a 2a 20 72 65 67 69 73 74 65 72 20 68 61 73 20  ** register has 
128b0 63 68 61 6e 67 65 64 20 73 68 6f 75 6c 64 20 68  changed should h
128c0 61 76 65 20 74 68 69 73 20 62 69 74 20 73 65 74  ave this bit set
128d0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
128e0 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20  PFLAG_LENGTHARG 
128f0 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  and OPFLAG_TYPEO
12900 46 41 52 47 20 62 69 74 73 20 61 72 65 20 73 65  FARG bits are se
12910 74 20 6f 6e 20 50 35 20 77 68 65 6e 0a 2a 2a 20  t on P5 when.** 
12920 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 67 75  the result is gu
12930 61 72 61 6e 74 65 65 64 20 74 6f 20 6f 6e 6c 79  aranteed to only
12940 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20   be used as the 
12950 61 72 67 75 6d 65 6e 74 20 6f 66 20 61 20 6c 65  argument of a le
12960 6e 67 74 68 28 29 0a 2a 2a 20 6f 72 20 74 79 70  ngth().** or typ
12970 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20  eof() function, 
12980 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 54  respectively.  T
12990 68 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20 6c 61  he loading of la
129a0 72 67 65 20 62 6c 6f 62 73 20 63 61 6e 20 62 65  rge blobs can be
129b0 0a 2a 2a 20 73 6b 69 70 70 65 64 20 66 6f 72 20  .** skipped for 
129c0 6c 65 6e 67 74 68 28 29 20 61 6e 64 20 61 6c 6c  length() and all
129d0 20 63 6f 6e 74 65 6e 74 20 6c 6f 61 64 69 6e 67   content loading
129e0 20 63 61 6e 20 62 65 20 73 6b 69 70 70 65 64 20   can be skipped 
129f0 66 6f 72 20 74 79 70 65 6f 66 28 29 2e 0a 2a 2f  for typeof()..*/
12a00 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a  .case OP_Column:
12a10 20 7b 0a 20 20 69 36 34 20 70 61 79 6c 6f 61 64   {.  i64 payload
12a20 53 69 7a 65 36 34 3b 20 2f 2a 20 4e 75 6d 62 65  Size64; /* Numbe
12a30 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68  r of bytes in th
12a40 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
12a50 74 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 20  t p2;           
12a60 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* column numbe
12a70 72 20 74 6f 20 72 65 74 72 69 65 76 65 20 2a 2f  r to retrieve */
12a80 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
12a90 43 3b 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42  C;    /* The VDB
12aa0 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 42 74  E cursor */.  Bt
12ab0 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 20 20  Cursor *pCrsr;  
12ac0 20 2f 2a 20 54 68 65 20 42 54 72 65 65 20 63 75   /* The BTree cu
12ad0 72 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61  rsor */.  u32 *a
12ae0 4f 66 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20  Offset;      /* 
12af0 61 4f 66 66 73 65 74 5b 69 5d 20 69 73 20 6f 66  aOffset[i] is of
12b00 66 73 65 74 20 74 6f 20 73 74 61 72 74 20 6f 66  fset to start of
12b10 20 64 61 74 61 20 66 6f 72 20 69 2d 74 68 20 63   data for i-th c
12b20 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c  olumn */.  int l
12b30 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  en;           /*
12b40 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74   The length of t
12b50 68 65 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61  he serialized da
12b60 74 61 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  ta for the colum
12b70 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20  n */.  int i;   
12b80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
12b90 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4d  p counter */.  M
12ba0 65 6d 20 2a 70 44 65 73 74 3b 20 20 20 20 20 20  em *pDest;      
12bb0 20 20 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72    /* Where to wr
12bc0 69 74 65 20 74 68 65 20 65 78 74 72 61 63 74 65  ite the extracte
12bd0 64 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d  d value */.  Mem
12be0 20 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   sMem;          
12bf0 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74  /* For storing t
12c00 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20  he record being 
12c10 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e  decoded */.  con
12c20 73 74 20 75 38 20 2a 7a 44 61 74 61 3b 20 20 20  st u8 *zData;   
12c30 2f 2a 20 50 61 72 74 20 6f 66 20 74 68 65 20 72  /* Part of the r
12c40 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f  ecord being deco
12c50 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75  ded */.  const u
12c60 38 20 2a 7a 48 64 72 3b 20 20 20 20 2f 2a 20 4e  8 *zHdr;    /* N
12c70 65 78 74 20 75 6e 70 61 72 73 65 64 20 62 79 74  ext unparsed byt
12c80 65 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20  e of the header 
12c90 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a  */.  const u8 *z
12ca0 45 6e 64 48 64 72 3b 20 2f 2a 20 50 6f 69 6e 74  EndHdr; /* Point
12cb0 65 72 20 74 6f 20 66 69 72 73 74 20 62 79 74 65  er to first byte
12cc0 20 61 66 74 65 72 20 74 68 65 20 68 65 61 64 65   after the heade
12cd0 72 20 2a 2f 0a 20 20 75 33 32 20 6f 66 66 73 65  r */.  u32 offse
12ce0 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 66  t;        /* Off
12cf0 73 65 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74  set into the dat
12d00 61 20 2a 2f 0a 20 20 75 36 34 20 6f 66 66 73 65  a */.  u64 offse
12d10 74 36 34 3b 20 20 20 20 20 20 2f 2a 20 36 34 2d  t64;      /* 64-
12d20 62 69 74 20 6f 66 66 73 65 74 20 2a 2f 0a 20 20  bit offset */.  
12d30 75 33 32 20 61 76 61 69 6c 3b 20 20 20 20 20 20  u32 avail;      
12d40 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
12d50 62 79 74 65 73 20 6f 66 20 61 76 61 69 6c 61 62  bytes of availab
12d60 6c 65 20 64 61 74 61 20 2a 2f 0a 20 20 75 33 32  le data */.  u32
12d70 20 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   t;             
12d80 2f 2a 20 41 20 74 79 70 65 20 63 6f 64 65 20 66  /* A type code f
12d90 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 20 68  rom the record h
12da0 65 61 64 65 72 20 2a 2f 0a 20 20 75 31 36 20 66  eader */.  u16 f
12db0 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  x;            /*
12dc0 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 76 61   pDest->flags va
12dd0 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52  lue */.  Mem *pR
12de0 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50  eg;         /* P
12df0 73 65 75 64 6f 54 61 62 6c 65 20 69 6e 70 75 74  seudoTable input
12e00 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 0a 20 20   register */..  
12e10 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  p2 = pOp->p2;.  
12e20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
12e30 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
12e40 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
12e50 72 29 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20  r) );.  pDest = 
12e60 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
12e70 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
12e80 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a 20 20  ge(p, pDest);.  
12e90 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
12ea0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
12eb0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
12ec0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
12ed0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
12ee0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
12ef0 74 28 20 70 32 3c 70 43 2d 3e 6e 46 69 65 6c 64  t( p2<pC->nField
12f00 20 29 3b 0a 20 20 61 4f 66 66 73 65 74 20 3d 20   );.  aOffset = 
12f10 70 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 23 69 66  pC->aOffset;.#if
12f20 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
12f30 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
12f40 61 73 73 65 72 74 28 20 70 43 2d 3e 70 56 74 61  assert( pC->pVta
12f50 62 43 75 72 73 6f 72 3d 3d 30 20 29 3b 20 2f 2a  bCursor==0 ); /*
12f60 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6e 65 76 65 72   OP_Column never
12f70 20 63 61 6c 6c 65 64 20 6f 6e 20 76 69 72 74 75   called on virtu
12f80 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64  al table */.#end
12f90 69 66 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  if.  pCrsr = pC-
12fa0 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65  >pCursor;.  asse
12fb0 72 74 28 20 70 43 72 73 72 21 3d 30 20 7c 7c 20  rt( pCrsr!=0 || 
12fc0 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52  pC->pseudoTableR
12fd0 65 67 3e 30 20 29 3b 20 2f 2a 20 70 43 72 73 72  eg>0 ); /* pCrsr
12fe0 20 4e 55 4c 4c 20 6f 6e 20 50 73 65 75 64 6f 54   NULL on PseudoT
12ff0 61 62 6c 65 73 20 2a 2f 0a 20 20 61 73 73 65 72  ables */.  asser
13000 74 28 20 70 43 72 73 72 21 3d 30 20 7c 7c 20 70  t( pCrsr!=0 || p
13010 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 20 20 20  C->nullRow );   
13020 20 20 20 20 20 20 20 2f 2a 20 70 43 2d 3e 6e 75         /* pC->nu
13030 6c 6c 52 6f 77 20 6f 6e 20 50 73 65 75 64 6f 54  llRow on PseudoT
13040 61 62 6c 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49  ables */..  /* I
13050 66 20 74 68 65 20 63 75 72 73 6f 72 20 63 61 63  f the cursor cac
13060 68 65 20 69 73 20 73 74 61 6c 65 2c 20 62 72 69  he is stale, bri
13070 6e 67 20 69 74 20 75 70 2d 74 6f 2d 64 61 74 65  ng it up-to-date
13080 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   */.  rc = sqlit
13090 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
130a0 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 72 63  to(pC);.  if( rc
130b0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
130c0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66  e_to_error;.  if
130d0 28 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75  ( pC->cacheStatu
130e0 73 21 3d 70 2d 3e 63 61 63 68 65 43 74 72 20 29  s!=p->cacheCtr )
130f0 7b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75  {.    if( pC->nu
13100 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 69  llRow ){.      i
13110 66 28 20 70 43 72 73 72 3d 3d 30 20 29 7b 0a 20  f( pCrsr==0 ){. 
13120 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
13130 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
13140 67 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 70  g>0 );.        p
13150 52 65 67 20 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e  Reg = &aMem[pC->
13160 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 5d 3b  pseudoTableReg];
13170 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
13180 20 70 52 65 67 2d 3e 66 6c 61 67 73 20 26 20 4d   pReg->flags & M
13190 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 20  EM_Blob );.     
131a0 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
131b0 56 61 6c 69 64 28 70 52 65 67 29 20 29 3b 0a 20  Valid(pReg) );. 
131c0 20 20 20 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f         pC->paylo
131d0 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e 73 7a 52  adSize = pC->szR
131e0 6f 77 20 3d 20 61 76 61 69 6c 20 3d 20 70 52 65  ow = avail = pRe
131f0 67 2d 3e 6e 3b 0a 20 20 20 20 20 20 20 20 70 43  g->n;.        pC
13200 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29 70 52  ->aRow = (u8*)pR
13210 65 67 2d 3e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c  eg->z;.      }el
13220 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  se{.        sqli
13230 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
13240 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20  l(pDest);.      
13250 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
13260 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  _out;.      }.  
13270 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61    }else{.      a
13280 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a  ssert( pCrsr );.
13290 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73        if( pC->is
132a0 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20  Table==0 ){.    
132b0 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
132c0 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73  te3BtreeCursorIs
132d0 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a  Valid(pCrsr) );.
132e0 20 20 20 20 20 20 20 20 56 56 41 5f 4f 4e 4c 59          VVA_ONLY
132f0 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74  (rc =) sqlite3Bt
13300 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73 72  reeKeySize(pCrsr
13310 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  , &payloadSize64
13320 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
13330 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
13340 20 29 3b 20 2f 2a 20 54 72 75 65 20 62 65 63 61   ); /* True beca
13350 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76  use of CursorMov
13360 65 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65  eto() call above
13370 20 2a 2f 0a 20 20 20 20 20 20 20 20 2f 2a 20 73   */.        /* s
13380 71 6c 69 74 65 33 42 74 72 65 65 50 61 72 73 65  qlite3BtreeParse
13390 43 65 6c 6c 50 74 72 28 29 20 75 73 65 73 20 67  CellPtr() uses g
133a0 65 74 56 61 72 69 6e 74 33 32 28 29 20 74 6f 20  etVarint32() to 
133b0 65 78 74 72 61 63 74 20 74 68 65 0a 20 20 20 20  extract the.    
133c0 20 20 20 20 2a 2a 20 70 61 79 6c 6f 61 64 20 73      ** payload s
133d0 69 7a 65 2c 20 73 6f 20 69 74 20 69 73 20 69 6d  ize, so it is im
133e0 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 70 61 79  possible for pay
133f0 6c 6f 61 64 53 69 7a 65 36 34 20 74 6f 20 62 65  loadSize64 to be
13400 0a 20 20 20 20 20 20 20 20 2a 2a 20 6c 61 72 67  .        ** larg
13410 65 72 20 74 68 61 6e 20 33 32 20 62 69 74 73 2e  er than 32 bits.
13420 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65   */.        asse
13430 72 74 28 20 28 70 61 79 6c 6f 61 64 53 69 7a 65  rt( (payloadSize
13440 36 34 20 26 20 53 51 4c 49 54 45 5f 4d 41 58 5f  64 & SQLITE_MAX_
13450 55 33 32 29 3d 3d 28 75 36 34 29 70 61 79 6c 6f  U32)==(u64)paylo
13460 61 64 53 69 7a 65 36 34 20 29 3b 0a 20 20 20 20  adSize64 );.    
13470 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 73      pC->aRow = s
13480 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 46 65  qlite3BtreeKeyFe
13490 74 63 68 28 70 43 72 73 72 2c 20 26 61 76 61 69  tch(pCrsr, &avai
134a0 6c 29 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e  l);.        pC->
134b0 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 28 75  payloadSize = (u
134c0 33 32 29 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  32)payloadSize64
134d0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
134e0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73         assert( s
134f0 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
13500 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20  rIsValid(pCrsr) 
13510 29 3b 0a 20 20 20 20 20 20 20 20 56 56 41 5f 4f  );.        VVA_O
13520 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65  NLY(rc =) sqlite
13530 33 42 74 72 65 65 44 61 74 61 53 69 7a 65 28 70  3BtreeDataSize(p
13540 43 72 73 72 2c 20 26 70 43 2d 3e 70 61 79 6c 6f  Crsr, &pC->paylo
13550 61 64 53 69 7a 65 29 3b 0a 20 20 20 20 20 20 20  adSize);.       
13560 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
13570 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 44  ITE_OK );   /* D
13580 61 74 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74  ataSize() cannot
13590 20 66 61 69 6c 20 2a 2f 0a 20 20 20 20 20 20 20   fail */.       
135a0 20 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71 6c 69   pC->aRow = sqli
135b0 74 65 33 42 74 72 65 65 44 61 74 61 46 65 74 63  te3BtreeDataFetc
135c0 68 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29  h(pCrsr, &avail)
135d0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
135e0 61 73 73 65 72 74 28 20 61 76 61 69 6c 3c 3d 36  assert( avail<=6
135f0 35 35 33 36 20 29 3b 20 20 2f 2a 20 4d 61 78 69  5536 );  /* Maxi
13600 6d 75 6d 20 70 61 67 65 20 73 69 7a 65 20 69 73  mum page size is
13610 20 36 34 4b 69 42 20 2a 2f 0a 20 20 20 20 20 20   64KiB */.      
13620 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53  if( pC->payloadS
13630 69 7a 65 20 3c 3d 20 28 75 33 32 29 61 76 61 69  ize <= (u32)avai
13640 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 70 43 2d  l ){.        pC-
13650 3e 73 7a 52 6f 77 20 3d 20 70 43 2d 3e 70 61 79  >szRow = pC->pay
13660 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20 20 20  loadSize;.      
13670 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70  }else{.        p
13680 43 2d 3e 73 7a 52 6f 77 20 3d 20 61 76 61 69 6c  C->szRow = avail
13690 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
136a0 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53  if( pC->payloadS
136b0 69 7a 65 20 3e 20 28 75 33 32 29 64 62 2d 3e 61  ize > (u32)db->a
136c0 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
136d0 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
136e0 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62        goto too_b
136f0 69 67 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ig;.      }.    
13700 7d 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  }.    pC->cacheS
13710 74 61 74 75 73 20 3d 20 70 2d 3e 63 61 63 68 65  tatus = p->cache
13720 43 74 72 3b 0a 20 20 20 20 70 43 2d 3e 69 48 64  Ctr;.    pC->iHd
13730 72 4f 66 66 73 65 74 20 3d 20 67 65 74 56 61 72  rOffset = getVar
13740 69 6e 74 33 32 28 70 43 2d 3e 61 52 6f 77 2c 20  int32(pC->aRow, 
13750 6f 66 66 73 65 74 29 3b 0a 20 20 20 20 70 43 2d  offset);.    pC-
13760 3e 6e 48 64 72 50 61 72 73 65 64 20 3d 20 30 3b  >nHdrParsed = 0;
13770 0a 20 20 20 20 61 4f 66 66 73 65 74 5b 30 5d 20  .    aOffset[0] 
13780 3d 20 6f 66 66 73 65 74 3b 0a 0a 0a 20 20 20 20  = offset;...    
13790 69 66 28 20 61 76 61 69 6c 3c 6f 66 66 73 65 74  if( avail<offset
137a0 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 70 43 2d   ){.      /* pC-
137b0 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20 68  >aRow does not h
137c0 61 76 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  ave to hold the 
137d0 65 6e 74 69 72 65 20 72 6f 77 2c 20 62 75 74 20  entire row, but 
137e0 69 74 20 64 6f 65 73 20 61 74 20 6c 65 61 73 74  it does at least
137f0 0a 20 20 20 20 20 20 2a 2a 20 6e 65 65 64 20 74  .      ** need t
13800 6f 20 63 6f 76 65 72 20 74 68 65 20 68 65 61 64  o cover the head
13810 65 72 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  er of the record
13820 2e 20 20 49 66 20 70 43 2d 3e 61 52 6f 77 20 64  .  If pC->aRow d
13830 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 0a  oes not contain.
13840 20 20 20 20 20 20 2a 2a 20 74 68 65 20 63 6f 6d        ** the com
13850 70 6c 65 74 65 20 68 65 61 64 65 72 2c 20 74 68  plete header, th
13860 65 6e 20 73 65 74 20 69 74 20 74 6f 20 7a 65 72  en set it to zer
13870 6f 2c 20 66 6f 72 63 69 6e 67 20 74 68 65 20 68  o, forcing the h
13880 65 61 64 65 72 20 74 6f 20 62 65 0a 20 20 20 20  eader to be.    
13890 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79    ** dynamically
138a0 20 61 6c 6c 6f 63 61 74 65 64 2e 20 2a 2f 0a 20   allocated. */. 
138b0 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20       pC->aRow = 
138c0 30 3b 0a 20 20 20 20 20 20 70 43 2d 3e 73 7a 52  0;.      pC->szR
138d0 6f 77 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20 2f  ow = 0;..      /
138e0 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 20 63 6f  * Make sure a co
138f0 72 72 75 70 74 20 64 61 74 61 62 61 73 65 20 68  rrupt database h
13900 61 73 20 6e 6f 74 20 67 69 76 65 6e 20 75 73 20  as not given us 
13910 61 6e 20 6f 76 65 72 73 69 7a 65 20 68 65 61 64  an oversize head
13920 65 72 2e 0a 20 20 20 20 20 20 2a 2a 20 44 6f 20  er..      ** Do 
13930 74 68 69 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69  this now to avoi
13940 64 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65  d an oversize me
13950 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e  mory allocation.
13960 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20  .      **.      
13970 2a 2a 20 54 79 70 65 20 65 6e 74 72 69 65 73 20  ** Type entries 
13980 63 61 6e 20 62 65 20 62 65 74 77 65 65 6e 20 31  can be between 1
13990 20 61 6e 64 20 35 20 62 79 74 65 73 20 65 61 63   and 5 bytes eac
139a0 68 2e 20 20 42 75 74 20 34 20 61 6e 64 20 35 20  h.  But 4 and 5 
139b0 62 79 74 65 0a 20 20 20 20 20 20 2a 2a 20 74 79  byte.      ** ty
139c0 70 65 73 20 75 73 65 20 73 6f 20 6d 75 63 68 20  pes use so much 
139d0 64 61 74 61 20 73 70 61 63 65 20 74 68 61 74 20  data space that 
139e0 74 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62  there can only b
139f0 65 20 34 30 39 36 20 61 6e 64 20 33 32 20 6f 66  e 4096 and 32 of
13a00 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 6d 2c 20  .      ** them, 
13a10 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53  respectively.  S
13a20 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 68 65  o the maximum he
13a30 61 64 65 72 20 6c 65 6e 67 74 68 20 72 65 73 75  ader length resu
13a40 6c 74 73 20 66 72 6f 6d 20 61 0a 20 20 20 20 20  lts from a.     
13a50 20 2a 2a 20 33 2d 62 79 74 65 20 74 79 70 65 20   ** 3-byte type 
13a60 66 6f 72 20 65 61 63 68 20 6f 66 20 74 68 65 20  for each of the 
13a70 6d 61 78 69 6d 75 6d 20 6f 66 20 33 32 37 36 38  maximum of 32768
13a80 20 63 6f 6c 75 6d 6e 73 20 70 6c 75 73 20 74 68   columns plus th
13a90 72 65 65 0a 20 20 20 20 20 20 2a 2a 20 65 78 74  ree.      ** ext
13aa0 72 61 20 62 79 74 65 73 20 66 6f 72 20 74 68 65  ra bytes for the
13ab0 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20 69   header length i
13ac0 74 73 65 6c 66 2e 20 20 33 32 37 36 38 2a 33 20  tself.  32768*3 
13ad0 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a 20 20 20  + 3 = 98307..   
13ae0 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20     */.      if( 
13af0 6f 66 66 73 65 74 20 3e 20 39 38 33 30 37 20 7c  offset > 98307 |
13b00 7c 20 6f 66 66 73 65 74 20 3e 20 70 43 2d 3e 70  | offset > pC->p
13b10 61 79 6c 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20  ayloadSize ){.  
13b20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
13b30 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a  E_CORRUPT_BKPT;.
13b40 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f          goto op_
13b50 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20  column_error;.  
13b60 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20      }.    }..   
13b70 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e   /* The followin
13b80 67 20 67 6f 74 6f 20 69 73 20 61 6e 20 6f 70 74  g goto is an opt
13b90 69 6d 69 7a 61 74 69 6f 6e 2e 20 20 49 74 20 63  imization.  It c
13ba0 61 6e 20 62 65 20 6f 6d 69 74 74 65 64 20 61 6e  an be omitted an
13bb0 64 0a 20 20 20 20 2a 2a 20 65 76 65 72 79 74 68  d.    ** everyth
13bc0 69 6e 67 20 77 69 6c 6c 20 73 74 69 6c 6c 20 77  ing will still w
13bd0 6f 72 6b 2e 20 20 42 75 74 20 4f 50 5f 43 6f 6c  ork.  But OP_Col
13be0 75 6d 6e 20 69 73 20 6d 65 61 73 75 72 61 62 6c  umn is measurabl
13bf0 79 20 66 61 73 74 65 72 0a 20 20 20 20 2a 2a 20  y faster.    ** 
13c00 62 79 20 73 6b 69 70 70 69 6e 67 20 74 68 65 20  by skipping the 
13c10 73 75 62 73 65 71 75 65 6e 74 20 63 6f 6e 64 69  subsequent condi
13c20 74 69 6f 6e 61 6c 2c 20 77 68 69 63 68 20 69 73  tional, which is
13c30 20 61 6c 77 61 79 73 20 74 72 75 65 2e 0a 20 20   always true..  
13c40 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28    */.    assert(
13c50 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c   pC->nHdrParsed<
13c60 3d 70 32 20 29 3b 20 20 20 20 20 20 20 20 20 2f  =p2 );         /
13c70 2a 20 43 6f 6e 64 69 74 69 6f 6e 61 6c 20 73 6b  * Conditional sk
13c80 69 70 70 65 64 20 2a 2f 0a 20 20 20 20 67 6f 74  ipped */.    got
13c90 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61 64  o op_column_read
13ca0 5f 68 65 61 64 65 72 3b 0a 20 20 7d 0a 0a 20 20  _header;.  }..  
13cb0 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 74 20  /* Make sure at 
13cc0 6c 65 61 73 74 20 74 68 65 20 66 69 72 73 74 20  least the first 
13cd0 70 32 2b 31 20 65 6e 74 72 69 65 73 20 6f 66 20  p2+1 entries of 
13ce0 74 68 65 20 68 65 61 64 65 72 20 68 61 76 65 20  the header have 
13cf0 62 65 65 6e 0a 20 20 2a 2a 20 70 61 72 73 65 64  been.  ** parsed
13d00 20 61 6e 64 20 76 61 6c 69 64 20 69 6e 66 6f 72   and valid infor
13d10 6d 61 74 69 6f 6e 20 69 73 20 69 6e 20 61 4f 66  mation is in aOf
13d20 66 73 65 74 5b 5d 20 61 6e 64 20 70 43 2d 3e 61  fset[] and pC->a
13d30 54 79 70 65 5b 5d 2e 0a 20 20 2a 2f 0a 20 20 69  Type[]..  */.  i
13d40 66 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65  f( pC->nHdrParse
13d50 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20 2f 2a 20  d<=p2 ){.    /* 
13d60 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65  If there is more
13d70 20 68 65 61 64 65 72 20 61 76 61 69 6c 61 62 6c   header availabl
13d80 65 20 66 6f 72 20 70 61 72 73 69 6e 67 20 69 6e  e for parsing in
13d90 20 74 68 65 20 72 65 63 6f 72 64 2c 20 74 72 79   the record, try
13da0 0a 20 20 20 20 2a 2a 20 74 6f 20 65 78 74 72 61  .    ** to extra
13db0 63 74 20 61 64 64 69 74 69 6f 6e 61 6c 20 66 69  ct additional fi
13dc0 65 6c 64 73 20 75 70 20 74 68 72 6f 75 67 68 20  elds up through 
13dd0 74 68 65 20 70 32 2b 31 2d 74 68 20 66 69 65 6c  the p2+1-th fiel
13de0 64 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6f 70  d .    */.    op
13df0 5f 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68 65 61  _column_read_hea
13e00 64 65 72 3a 0a 20 20 20 20 69 66 28 20 70 43 2d  der:.    if( pC-
13e10 3e 69 48 64 72 4f 66 66 73 65 74 3c 61 4f 66 66  >iHdrOffset<aOff
13e20 73 65 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20  set[0] ){.      
13e30 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 7a 44 61  /* Make sure zDa
13e40 74 61 20 70 6f 69 6e 74 73 20 74 6f 20 65 6e 6f  ta points to eno
13e50 75 67 68 20 6f 66 20 74 68 65 20 72 65 63 6f 72  ugh of the recor
13e60 64 20 74 6f 20 63 6f 76 65 72 20 74 68 65 20 68  d to cover the h
13e70 65 61 64 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20  eader. */.      
13e80 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20  if( pC->aRow==0 
13e90 29 7b 0a 20 20 20 20 20 20 20 20 6d 65 6d 73 65  ){.        memse
13ea0 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65  t(&sMem, 0, size
13eb0 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 20 20 20  of(sMem));.     
13ec0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
13ed0 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28  dbeMemFromBtree(
13ee0 70 43 72 73 72 2c 20 30 2c 20 61 4f 66 66 73 65  pCrsr, 0, aOffse
13ef0 74 5b 30 5d 2c 20 21 70 43 2d 3e 69 73 54 61 62  t[0], !pC->isTab
13f00 6c 65 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20  le, &sMem);.    
13f10 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
13f20 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 6f 70 5f  TE_OK ) goto op_
13f30 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20  column_error;.  
13f40 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 28 75        zData = (u
13f50 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20  8*)sMem.z;.     
13f60 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
13f70 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77  zData = pC->aRow
13f80 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20  ;.      }.  .   
13f90 20 20 20 2f 2a 20 46 69 6c 6c 20 69 6e 20 70 43     /* Fill in pC
13fa0 2d 3e 61 54 79 70 65 5b 69 5d 20 61 6e 64 20 61  ->aType[i] and a
13fb0 4f 66 66 73 65 74 5b 69 5d 20 76 61 6c 75 65 73  Offset[i] values
13fc0 20 74 68 72 6f 75 67 68 20 74 68 65 20 70 32 2d   through the p2-
13fd0 74 68 20 66 69 65 6c 64 2e 20 2a 2f 0a 20 20 20  th field. */.   
13fe0 20 20 20 69 20 3d 20 70 43 2d 3e 6e 48 64 72 50     i = pC->nHdrP
13ff0 61 72 73 65 64 3b 0a 20 20 20 20 20 20 6f 66 66  arsed;.      off
14000 73 65 74 36 34 20 3d 20 61 4f 66 66 73 65 74 5b  set64 = aOffset[
14010 69 5d 3b 0a 20 20 20 20 20 20 7a 48 64 72 20 3d  i];.      zHdr =
14020 20 7a 44 61 74 61 20 2b 20 70 43 2d 3e 69 48 64   zData + pC->iHd
14030 72 4f 66 66 73 65 74 3b 0a 20 20 20 20 20 20 7a  rOffset;.      z
14040 45 6e 64 48 64 72 20 3d 20 7a 44 61 74 61 20 2b  EndHdr = zData +
14050 20 61 4f 66 66 73 65 74 5b 30 5d 3b 0a 20 20 20   aOffset[0];.   
14060 20 20 20 61 73 73 65 72 74 28 20 69 3c 3d 70 32     assert( i<=p2
14070 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64 48 64 72   && zHdr<zEndHdr
14080 20 29 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20   );.      do{.  
14090 20 20 20 20 20 20 69 66 28 20 28 74 20 3d 20 7a        if( (t = z
140a0 48 64 72 5b 30 5d 29 3c 30 78 38 30 20 29 7b 0a  Hdr[0])<0x80 ){.
140b0 20 20 20 20 20 20 20 20 20 20 7a 48 64 72 2b 2b            zHdr++
140c0 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 66 66 73  ;.          offs
140d0 65 74 36 34 20 2b 3d 20 73 71 6c 69 74 65 33 56  et64 += sqlite3V
140e0 64 62 65 4f 6e 65 42 79 74 65 53 65 72 69 61 6c  dbeOneByteSerial
140f0 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20  TypeLen(t);.    
14100 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
14110 20 20 20 20 20 7a 48 64 72 20 2b 3d 20 73 71 6c       zHdr += sql
14120 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28  ite3GetVarint32(
14130 7a 48 64 72 2c 20 26 74 29 3b 0a 20 20 20 20 20  zHdr, &t);.     
14140 20 20 20 20 20 6f 66 66 73 65 74 36 34 20 2b 3d       offset64 +=
14150 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
14160 61 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20  alTypeLen(t);.  
14170 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
14180 70 43 2d 3e 61 54 79 70 65 5b 69 2b 2b 5d 20 3d  pC->aType[i++] =
14190 20 74 3b 0a 20 20 20 20 20 20 20 20 61 4f 66 66   t;.        aOff
141a0 73 65 74 5b 69 5d 20 3d 20 28 75 33 32 29 28 6f  set[i] = (u32)(o
141b0 66 66 73 65 74 36 34 20 26 20 30 78 66 66 66 66  ffset64 & 0xffff
141c0 66 66 66 66 29 3b 0a 20 20 20 20 20 20 7d 77 68  ffff);.      }wh
141d0 69 6c 65 28 20 69 3c 3d 70 32 20 26 26 20 7a 48  ile( i<=p2 && zH
141e0 64 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a 20 20  dr<zEndHdr );.  
141f0 20 20 20 20 70 43 2d 3e 6e 48 64 72 50 61 72 73      pC->nHdrPars
14200 65 64 20 3d 20 69 3b 0a 20 20 20 20 20 20 70 43  ed = i;.      pC
14210 2d 3e 69 48 64 72 4f 66 66 73 65 74 20 3d 20 28  ->iHdrOffset = (
14220 75 33 32 29 28 7a 48 64 72 20 2d 20 7a 44 61 74  u32)(zHdr - zDat
14230 61 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 43  a);.      if( pC
14240 2d 3e 61 52 6f 77 3d 3d 30 20 29 20 73 71 6c 69  ->aRow==0 ) sqli
14250 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
14260 65 28 26 73 4d 65 6d 29 3b 0a 20 20 0a 20 20 20  e(&sMem);.  .   
14270 20 20 20 2f 2a 20 54 68 65 20 72 65 63 6f 72 64     /* The record
14280 20 69 73 20 63 6f 72 72 75 70 74 20 69 66 20 61   is corrupt if a
14290 6e 79 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ny of the follow
142a0 69 6e 67 20 61 72 65 20 74 72 75 65 3a 0a 20 20  ing are true:.  
142b0 20 20 20 20 2a 2a 20 28 31 29 20 74 68 65 20 62      ** (1) the b
142c0 79 74 65 73 20 6f 66 20 74 68 65 20 68 65 61 64  ytes of the head
142d0 65 72 20 65 78 74 65 6e 64 20 70 61 73 74 20 74  er extend past t
142e0 68 65 20 64 65 63 6c 61 72 65 64 20 68 65 61 64  he declared head
142f0 65 72 20 73 69 7a 65 0a 20 20 20 20 20 20 2a 2a  er size.      **
14300 20 28 32 29 20 74 68 65 20 65 6e 74 69 72 65 20   (2) the entire 
14310 68 65 61 64 65 72 20 77 61 73 20 75 73 65 64 20  header was used 
14320 62 75 74 20 6e 6f 74 20 61 6c 6c 20 64 61 74 61  but not all data
14330 20 77 61 73 20 75 73 65 64 0a 20 20 20 20 20 20   was used.      
14340 2a 2a 20 28 33 29 20 74 68 65 20 65 6e 64 20 6f  ** (3) the end o
14350 66 20 74 68 65 20 64 61 74 61 20 65 78 74 65 6e  f the data exten
14360 64 73 20 62 65 79 6f 6e 64 20 74 68 65 20 65 6e  ds beyond the en
14370 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2e  d of the record.
14380 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
14390 69 66 28 20 28 7a 48 64 72 3e 3d 7a 45 6e 64 48  if( (zHdr>=zEndH
143a0 64 72 20 26 26 20 28 7a 48 64 72 3e 7a 45 6e 64  dr && (zHdr>zEnd
143b0 48 64 72 20 7c 7c 20 6f 66 66 73 65 74 36 34 21  Hdr || offset64!
143c0 3d 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65  =pC->payloadSize
143d0 29 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 6f 66  )).       || (of
143e0 66 73 65 74 36 34 20 3e 20 70 43 2d 3e 70 61 79  fset64 > pC->pay
143f0 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20 20 20 20  loadSize).      
14400 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
14410 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42  SQLITE_CORRUPT_B
14420 4b 50 54 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  KPT;.        got
14430 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f  o op_column_erro
14440 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  r;.      }.    }
14450 0a 0a 20 20 20 20 2f 2a 20 49 66 20 61 66 74 65  ..    /* If afte
14460 72 20 74 72 79 69 6e 67 20 74 6f 20 65 78 74 72  r trying to extr
14470 61 63 74 20 6e 65 77 20 65 6e 74 72 69 65 73 20  act new entries 
14480 66 72 6f 6d 20 74 68 65 20 68 65 61 64 65 72 2c  from the header,
14490 20 6e 48 64 72 50 61 72 73 65 64 20 69 73 0a 20   nHdrParsed is. 
144a0 20 20 20 2a 2a 20 73 74 69 6c 6c 20 6e 6f 74 20     ** still not 
144b0 75 70 20 74 6f 20 70 32 2c 20 74 68 61 74 20 6d  up to p2, that m
144c0 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 72 65  eans that the re
144d0 63 6f 72 64 20 68 61 73 20 66 65 77 65 72 20 74  cord has fewer t
144e0 68 61 6e 20 70 32 0a 20 20 20 20 2a 2a 20 63 6f  han p2.    ** co
144f0 6c 75 6d 6e 73 2e 20 20 53 6f 20 74 68 65 20 72  lumns.  So the r
14500 65 73 75 6c 74 20 77 69 6c 6c 20 62 65 20 65 69  esult will be ei
14510 74 68 65 72 20 74 68 65 20 64 65 66 61 75 6c 74  ther the default
14520 20 76 61 6c 75 65 20 6f 72 20 61 20 4e 55 4c 4c   value or a NULL
14530 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
14540 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c   pC->nHdrParsed<
14550 3d 70 32 20 29 7b 0a 20 20 20 20 20 20 69 66 28  =p2 ){.      if(
14560 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
14570 5f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 20 20  _MEM ){.        
14580 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
14590 61 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73 74 2c  allowCopy(pDest,
145a0 20 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d   pOp->p4.pMem, M
145b0 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20  EM_Static);.    
145c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
145d0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
145e0 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20  etNull(pDest);. 
145f0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 67 6f 74       }.      got
14600 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b  o op_column_out;
14610 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
14620 20 20 20 20 74 20 3d 20 70 43 2d 3e 61 54 79 70      t = pC->aTyp
14630 65 5b 70 32 5d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  e[p2];.  }..  /*
14640 20 45 78 74 72 61 63 74 20 74 68 65 20 63 6f 6e   Extract the con
14650 74 65 6e 74 20 66 6f 72 20 74 68 65 20 70 32 2b  tent for the p2+
14660 31 2d 74 68 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f  1-th column.  Co
14670 6e 74 72 6f 6c 20 63 61 6e 20 6f 6e 6c 79 0a 20  ntrol can only. 
14680 20 2a 2a 20 72 65 61 63 68 20 74 68 69 73 20 70   ** reach this p
14690 6f 69 6e 74 20 69 66 20 61 4f 66 66 73 65 74 5b  oint if aOffset[
146a0 70 32 5d 2c 20 61 4f 66 66 73 65 74 5b 70 32 2b  p2], aOffset[p2+
146b0 31 5d 2c 20 61 6e 64 20 70 43 2d 3e 61 54 79 70  1], and pC->aTyp
146c0 65 5b 70 32 5d 20 61 72 65 0a 20 20 2a 2a 20 61  e[p2] are.  ** a
146d0 6c 6c 20 76 61 6c 69 64 2e 0a 20 20 2a 2f 0a 20  ll valid..  */. 
146e0 20 61 73 73 65 72 74 28 20 70 32 3c 70 43 2d 3e   assert( p2<pC->
146f0 6e 48 64 72 50 61 72 73 65 64 20 29 3b 0a 20 20  nHdrParsed );.  
14700 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
14710 54 45 5f 4f 4b 20 29 3b 0a 20 20 61 73 73 65 72  TE_OK );.  asser
14720 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  t( sqlite3VdbeCh
14730 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73  eckMemInvariants
14740 28 70 44 65 73 74 29 20 29 3b 0a 20 20 69 66 28  (pDest) );.  if(
14750 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28   VdbeMemDynamic(
14760 70 44 65 73 74 29 20 29 20 73 71 6c 69 74 65 33  pDest) ) sqlite3
14770 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
14780 44 65 73 74 29 3b 0a 20 20 61 73 73 65 72 74 28  Dest);.  assert(
14790 20 74 3d 3d 70 43 2d 3e 61 54 79 70 65 5b 70 32   t==pC->aType[p2
147a0 5d 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 73  ] );.  if( pC->s
147b0 7a 52 6f 77 3e 3d 61 4f 66 66 73 65 74 5b 70 32  zRow>=aOffset[p2
147c0 2b 31 5d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  +1] ){.    /* Th
147d0 69 73 20 69 73 20 74 68 65 20 63 6f 6d 6d 6f 6e  is is the common
147e0 20 63 61 73 65 20 77 68 65 72 65 20 74 68 65 20   case where the 
147f0 64 65 73 69 72 65 64 20 63 6f 6e 74 65 6e 74 20  desired content 
14800 66 69 74 73 20 6f 6e 20 74 68 65 20 6f 72 69 67  fits on the orig
14810 69 6e 61 6c 0a 20 20 20 20 2a 2a 20 70 61 67 65  inal.    ** page
14820 20 2d 20 77 68 65 72 65 20 74 68 65 20 63 6f 6e   - where the con
14830 74 65 6e 74 20 69 73 20 6e 6f 74 20 6f 6e 20 61  tent is not on a
14840 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 20  n overflow page 
14850 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  */.    sqlite3Vd
14860 62 65 53 65 72 69 61 6c 47 65 74 28 70 43 2d 3e  beSerialGet(pC->
14870 61 52 6f 77 2b 61 4f 66 66 73 65 74 5b 70 32 5d  aRow+aOffset[p2]
14880 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 7d  , t, pDest);.  }
14890 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 69  else{.    /* Thi
148a0 73 20 62 72 61 6e 63 68 20 68 61 70 70 65 6e 73  s branch happens
148b0 20 6f 6e 6c 79 20 77 68 65 6e 20 63 6f 6e 74 65   only when conte
148c0 6e 74 20 69 73 20 6f 6e 20 6f 76 65 72 66 6c 6f  nt is on overflo
148d0 77 20 70 61 67 65 73 20 2a 2f 0a 20 20 20 20 69  w pages */.    i
148e0 66 28 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 28  f( ((pOp->p5 & (
148f0 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47  OPFLAG_LENGTHARG
14900 7c 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52  |OPFLAG_TYPEOFAR
14910 47 29 29 21 3d 30 0a 20 20 20 20 20 20 20 20 20  G))!=0.         
14920 20 26 26 20 28 28 74 3e 3d 31 32 20 26 26 20 28   && ((t>=12 && (
14930 74 26 31 29 3d 3d 30 29 20 7c 7c 20 28 70 4f 70  t&1)==0) || (pOp
14940 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 54 59  ->p5 & OPFLAG_TY
14950 50 45 4f 46 41 52 47 29 21 3d 30 29 29 0a 20 20  PEOFARG)!=0)).  
14960 20 20 20 7c 7c 20 28 6c 65 6e 20 3d 20 73 71 6c     || (len = sql
14970 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
14980 70 65 4c 65 6e 28 74 29 29 3d 3d 30 0a 20 20 20  peLen(t))==0.   
14990 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 43 6f 6e   ){.      /* Con
149a0 74 65 6e 74 20 69 73 20 69 72 72 65 6c 65 76 61  tent is irreleva
149b0 6e 74 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20  nt for.      ** 
149c0 20 20 20 31 2e 20 74 68 65 20 74 79 70 65 6f 66     1. the typeof
149d0 28 29 20 66 75 6e 63 74 69 6f 6e 2c 0a 20 20 20  () function,.   
149e0 20 20 20 2a 2a 20 20 20 20 32 2e 20 74 68 65 20     **    2. the 
149f0 6c 65 6e 67 74 68 28 58 29 20 66 75 6e 63 74 69  length(X) functi
14a00 6f 6e 20 69 66 20 58 20 69 73 20 61 20 62 6c 6f  on if X is a blo
14a10 62 2c 20 61 6e 64 0a 20 20 20 20 20 20 2a 2a 20  b, and.      ** 
14a20 20 20 20 33 2e 20 69 66 20 74 68 65 20 63 6f 6e     3. if the con
14a30 74 65 6e 74 20 6c 65 6e 67 74 68 20 69 73 20 7a  tent length is z
14a40 65 72 6f 2e 0a 20 20 20 20 20 20 2a 2a 20 53 6f  ero..      ** So
14a50 20 77 65 20 6d 69 67 68 74 20 61 73 20 77 65 6c   we might as wel
14a60 6c 20 75 73 65 20 62 6f 67 75 73 20 63 6f 6e 74  l use bogus cont
14a70 65 6e 74 20 72 61 74 68 65 72 20 74 68 61 6e 20  ent rather than 
14a80 72 65 61 64 69 6e 67 0a 20 20 20 20 20 20 2a 2a  reading.      **
14a90 20 63 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 64 69   content from di
14aa0 73 6b 2e 20 20 4e 55 4c 4c 20 77 69 6c 6c 20 77  sk.  NULL will w
14ab0 6f 72 6b 20 66 6f 72 20 74 68 65 20 76 61 6c 75  ork for the valu
14ac0 65 20 66 6f 72 20 73 74 72 69 6e 67 73 0a 20 20  e for strings.  
14ad0 20 20 20 20 2a 2a 20 61 6e 64 20 62 6c 6f 62 73      ** and blobs
14ae0 20 61 6e 64 20 77 68 61 74 65 76 65 72 20 69 73   and whatever is
14af0 20 69 6e 20 74 68 65 20 70 61 79 6c 6f 61 64 53   in the payloadS
14b00 69 7a 65 36 34 20 76 61 72 69 61 62 6c 65 0a 20  ize64 variable. 
14b10 20 20 20 20 20 2a 2a 20 77 69 6c 6c 20 77 6f 72       ** will wor
14b20 6b 20 66 6f 72 20 65 76 65 72 79 74 68 69 6e 67  k for everything
14b30 20 65 6c 73 65 2e 20 2a 2f 0a 20 20 20 20 20 20   else. */.      
14b40 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
14b50 6c 47 65 74 28 74 3c 3d 31 33 20 3f 20 28 75 38  lGet(t<=13 ? (u8
14b60 2a 29 26 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  *)&payloadSize64
14b70 20 3a 20 30 2c 20 74 2c 20 70 44 65 73 74 29 3b   : 0, t, pDest);
14b80 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
14b90 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
14ba0 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70  beMemFromBtree(p
14bb0 43 72 73 72 2c 20 61 4f 66 66 73 65 74 5b 70 32  Crsr, aOffset[p2
14bc0 5d 2c 20 6c 65 6e 2c 20 21 70 43 2d 3e 69 73 54  ], len, !pC->isT
14bd0 61 62 6c 65 2c 0a 20 20 20 20 20 20 20 20 20 20  able,.          
14be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bf0 20 20 20 20 20 20 20 20 20 70 44 65 73 74 29 3b           pDest);
14c00 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
14c10 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
14c20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
14c30 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  mn_error;.      
14c40 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  }.      sqlite3V
14c50 64 62 65 53 65 72 69 61 6c 47 65 74 28 28 63 6f  dbeSerialGet((co
14c60 6e 73 74 20 75 38 2a 29 70 44 65 73 74 2d 3e 7a  nst u8*)pDest->z
14c70 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20  , t, pDest);.   
14c80 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20     pDest->flags 
14c90 26 3d 20 7e 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20  &= ~MEM_Ephem;. 
14ca0 20 20 20 7d 0a 20 20 7d 0a 20 20 70 44 65 73 74     }.  }.  pDest
14cb0 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
14cc0 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  ;..op_column_out
14cd0 3a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63 6f  :.  /* If the co
14ce0 6c 75 6d 6e 20 76 61 6c 75 65 20 69 73 20 61 6e  lumn value is an
14cf0 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69 6e   ephemeral strin
14d00 67 2c 20 67 6f 20 61 68 65 61 64 20 61 6e 64 20  g, go ahead and 
14d10 70 65 72 73 69 73 74 0a 20 20 2a 2a 20 74 68 61  persist.  ** tha
14d20 74 20 73 74 72 69 6e 67 20 69 6e 20 63 61 73 65  t string in case
14d30 20 74 68 65 20 63 75 72 73 6f 72 20 6d 6f 76 65   the cursor move
14d40 73 20 62 65 66 6f 72 65 20 74 68 65 20 63 6f 6c  s before the col
14d50 75 6d 6e 20 76 61 6c 75 65 20 69 73 0a 20 20 2a  umn value is.  *
14d60 2a 20 75 73 65 64 2e 20 20 54 68 65 20 66 6f 6c  * used.  The fol
14d70 6c 6f 77 69 6e 67 20 63 6f 64 65 20 64 6f 65 73  lowing code does
14d80 20 74 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20   the equivalent 
14d90 6f 66 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a  of Deephemeraliz
14da0 65 28 29 0a 20 20 2a 2a 20 62 75 74 20 64 6f 65  e().  ** but doe
14db0 73 20 69 74 20 66 61 73 74 65 72 2e 20 2a 2f 0a  s it faster. */.
14dc0 20 20 69 66 28 20 28 70 44 65 73 74 2d 3e 66 6c    if( (pDest->fl
14dd0 61 67 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29  ags & MEM_Ephem)
14de0 21 3d 30 20 26 26 20 70 44 65 73 74 2d 3e 7a 20  !=0 && pDest->z 
14df0 29 7b 0a 20 20 20 20 66 78 20 3d 20 70 44 65 73  ){.    fx = pDes
14e00 74 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  t->flags & (MEM_
14e10 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20  Str|MEM_Blob);. 
14e20 20 20 20 61 73 73 65 72 74 28 20 66 78 21 3d 30     assert( fx!=0
14e30 20 29 3b 0a 20 20 20 20 7a 44 61 74 61 20 3d 20   );.    zData = 
14e40 28 63 6f 6e 73 74 20 75 38 2a 29 70 44 65 73 74  (const u8*)pDest
14e50 2d 3e 7a 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 70  ->z;.    len = p
14e60 44 65 73 74 2d 3e 6e 3b 0a 20 20 20 20 69 66 28  Dest->n;.    if(
14e70 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
14e80 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28 70 44  learAndResize(pD
14e90 65 73 74 2c 20 6c 65 6e 2b 32 29 20 29 20 67 6f  est, len+2) ) go
14ea0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 6d  to no_mem;.    m
14eb0 65 6d 63 70 79 28 70 44 65 73 74 2d 3e 7a 2c 20  emcpy(pDest->z, 
14ec0 7a 44 61 74 61 2c 20 6c 65 6e 29 3b 0a 20 20 20  zData, len);.   
14ed0 20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 5d 20 3d   pDest->z[len] =
14ee0 20 30 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a   0;.    pDest->z
14ef0 5b 6c 65 6e 2b 31 5d 20 3d 20 30 3b 0a 20 20 20  [len+1] = 0;.   
14f00 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20   pDest->flags = 
14f10 66 78 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 7d  fx|MEM_Term;.  }
14f20 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72  .op_column_error
14f30 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  :.  UPDATE_MAX_B
14f40 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a  LOBSIZE(pDest);.
14f50 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
14f60 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29  (pOp->p3, pDest)
14f70 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
14f80 20 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e 69 74   Opcode: Affinit
14f90 79 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  y P1 P2 * P4 *.*
14fa0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69  * Synopsis: affi
14fb0 6e 69 74 79 28 72 5b 50 31 40 50 32 5d 29 0a 2a  nity(r[P1@P2]).*
14fc0 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66 69 6e  *.** Apply affin
14fd0 69 74 69 65 73 20 74 6f 20 61 20 72 61 6e 67 65  ities to a range
14fe0 20 6f 66 20 50 32 20 72 65 67 69 73 74 65 72 73   of P2 registers
14ff0 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 50   starting with P
15000 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  1..**.** P4 is a
15010 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20   string that is 
15020 50 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f  P2 characters lo
15030 6e 67 2e 20 54 68 65 20 6e 74 68 20 63 68 61 72  ng. The nth char
15040 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  acter of the.** 
15050 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73  string indicates
15060 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69   the column affi
15070 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64  nity that should
15080 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65   be used for the
15090 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63   nth.** memory c
150a0 65 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e 67 65  ell in the range
150b0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66  ..*/.case OP_Aff
150c0 69 6e 69 74 79 3a 20 7b 0a 20 20 63 6f 6e 73 74  inity: {.  const
150d0 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79   char *zAffinity
150e0 3b 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e  ;   /* The affin
150f0 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65  ity to be applie
15100 64 20 2a 2f 0a 20 20 63 68 61 72 20 63 41 66 66  d */.  char cAff
15110 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
15120 2f 2a 20 41 20 73 69 6e 67 6c 65 20 63 68 61 72  /* A single char
15130 61 63 74 65 72 20 6f 66 20 61 66 66 69 6e 69 74  acter of affinit
15140 79 20 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e 69 74  y */..  zAffinit
15150 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  y = pOp->p4.z;. 
15160 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69   assert( zAffini
15170 74 79 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ty!=0 );.  asser
15180 74 28 20 7a 41 66 66 69 6e 69 74 79 5b 70 4f 70  t( zAffinity[pOp
15190 2d 3e 70 32 5d 3d 3d 30 20 29 3b 0a 20 20 70 49  ->p2]==0 );.  pI
151a0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
151b0 70 31 5d 3b 0a 20 20 77 68 69 6c 65 28 20 28 63  p1];.  while( (c
151c0 41 66 66 20 3d 20 2a 28 7a 41 66 66 69 6e 69 74  Aff = *(zAffinit
151d0 79 2b 2b 29 29 21 3d 30 20 29 7b 0a 20 20 20 20  y++))!=0 ){.    
151e0 61 73 73 65 72 74 28 20 70 49 6e 31 20 3c 3d 20  assert( pIn1 <= 
151f0 26 70 2d 3e 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65  &p->aMem[(p->nMe
15200 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29  m-p->nCursor)] )
15210 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
15220 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29  mIsValid(pIn1) )
15230 3b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e  ;.    applyAffin
15240 69 74 79 28 70 49 6e 31 2c 20 63 41 66 66 2c 20  ity(pIn1, cAff, 
15250 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 70  encoding);.    p
15260 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65  In1++;.  }.  bre
15270 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
15280 3a 20 4d 61 6b 65 52 65 63 6f 72 64 20 50 31 20  : MakeRecord P1 
15290 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
152a0 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b  nopsis: r[P3]=mk
152b0 72 65 63 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a  rec(r[P1@P2]).**
152c0 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72  .** Convert P2 r
152d0 65 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69  egisters beginni
152e0 6e 67 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20  ng with P1 into 
152f0 74 68 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d  the [record form
15300 61 74 5d 0a 2a 2a 20 75 73 65 20 61 73 20 61 20  at].** use as a 
15310 64 61 74 61 20 72 65 63 6f 72 64 20 69 6e 20 61  data record in a
15320 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
15330 6f 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69  or as a key.** i
15340 6e 20 61 6e 20 69 6e 64 65 78 2e 20 20 54 68 65  n an index.  The
15350 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
15360 65 20 63 61 6e 20 64 65 63 6f 64 65 20 74 68 65  e can decode the
15370 20 72 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a   record later..*
15380 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61  *.** P4 may be a
15390 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20   string that is 
153a0 50 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f  P2 characters lo
153b0 6e 67 2e 20 20 54 68 65 20 6e 74 68 20 63 68 61  ng.  The nth cha
153c0 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a  racter of the.**
153d0 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65   string indicate
153e0 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66  s the column aff
153f0 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c  inity that shoul
15400 64 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68  d be used for th
15410 65 20 6e 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f  e nth.** field o
15420 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e  f the index key.
15430 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69  .**.** The mappi
15440 6e 67 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65  ng from characte
15450 72 20 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73  r to affinity is
15460 20 67 69 76 65 6e 20 62 79 20 74 68 65 20 53 51   given by the SQ
15470 4c 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63  LITE_AFF_.** mac
15480 72 6f 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73  ros defined in s
15490 71 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a  qliteInt.h..**.*
154a0 2a 20 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20  * If P4 is NULL 
154b0 74 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66  then all index f
154c0 69 65 6c 64 73 20 68 61 76 65 20 74 68 65 20 61  ields have the a
154d0 66 66 69 6e 69 74 79 20 42 4c 4f 42 2e 0a 2a 2f  ffinity BLOB..*/
154e0 0a 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63  .case OP_MakeRec
154f0 6f 72 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65  ord: {.  u8 *zNe
15500 77 52 65 63 6f 72 64 3b 20 20 20 20 20 20 20 20  wRecord;        
15510 2f 2a 20 41 20 62 75 66 66 65 72 20 74 6f 20 68  /* A buffer to h
15520 6f 6c 64 20 74 68 65 20 64 61 74 61 20 66 6f 72  old the data for
15530 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20   the new record 
15540 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20  */.  Mem *pRec; 
15550 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
15560 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f  he new record */
15570 0a 20 20 75 36 34 20 6e 44 61 74 61 3b 20 20 20  .  u64 nData;   
15580 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
15590 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
155a0 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20  data space */.  
155b0 69 6e 74 20 6e 48 64 72 3b 20 20 20 20 20 20 20  int nHdr;       
155c0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
155d0 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61   of bytes of hea
155e0 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  der space */.  i
155f0 36 34 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20  64 nByte;       
15600 20 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70        /* Data sp
15610 61 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72  ace required for
15620 20 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a   this record */.
15630 20 20 69 36 34 20 6e 5a 65 72 6f 3b 20 20 20 20    i64 nZero;    
15640 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
15650 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73  er of zero bytes
15660 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
15670 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
15680 6e 74 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20  nt nVarint;     
15690 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
156a0 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 76 61  of bytes in a va
156b0 72 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65  rint */.  u32 se
156c0 72 69 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20  rial_type;      
156d0 20 2f 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a   /* Type field *
156e0 2f 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b  /.  Mem *pData0;
156f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
15700 72 73 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20  rst field to be 
15710 63 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68  combined into th
15720 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65  e record */.  Me
15730 6d 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20  m *pLast;       
15740 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65       /* Last fie
15750 6c 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  ld of the record
15760 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64   */.  int nField
15770 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
15780 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  Number of fields
15790 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a   in the record *
157a0 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e  /.  char *zAffin
157b0 69 74 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68  ity;       /* Th
157c0 65 20 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e  e affinity strin
157d0 67 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64  g for the record
157e0 20 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66   */.  int file_f
157f0 6f 72 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20  ormat;       /* 
15800 46 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75  File format to u
15810 73 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20  se for encoding 
15820 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20  */.  int i;     
15830 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
15840 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65  pace used in zNe
15850 77 52 65 63 6f 72 64 5b 5d 20 68 65 61 64 65 72  wRecord[] header
15860 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20   */.  int j;    
15870 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15880 53 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e  Space used in zN
15890 65 77 52 65 63 6f 72 64 5b 5d 20 63 6f 6e 74 65  ewRecord[] conte
158a0 6e 74 20 2a 2f 0a 20 20 75 33 32 20 6c 65 6e 3b  nt */.  u32 len;
158b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
158c0 2a 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69  * Length of a fi
158d0 65 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73  eld */..  /* Ass
158e0 75 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64  uming the record
158f0 20 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c   contains N fiel
15900 64 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66  ds, the record f
15910 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a  ormat looks.  **
15920 20 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a   like this:.  **
15930 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .  ** ----------
15940 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15950 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15960 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15970 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
15980 20 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c   ** | hdr-size |
15990 20 74 79 70 65 20 30 20 7c 20 74 79 70 65 20 31   type 0 | type 1
159a0 20 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d   | ... | type N-
159b0 31 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20  1 | data0 | ... 
159c0 7c 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20  | data N-1 | .  
159d0 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ** -------------
159e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
159f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15a00 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15a10 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a  -----------.  **
15a20 0a 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73  .  ** Data(0) is
15a30 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69   taken from regi
15a40 73 74 65 72 20 50 31 2e 20 20 44 61 74 61 28 31  ster P1.  Data(1
15a50 29 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67  ) comes from reg
15a60 69 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20  ister P1+1.  ** 
15a70 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20  and so forth..  
15a80 2a 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70  **.  ** Each typ
15a90 65 20 66 69 65 6c 64 20 69 73 20 61 20 76 61 72  e field is a var
15aa0 69 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67  int representing
15ab0 20 74 68 65 20 73 65 72 69 61 6c 20 74 79 70 65   the serial type
15ac0 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f   of the .  ** co
15ad0 72 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61  rresponding data
15ae0 20 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71   element (see sq
15af0 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
15b00 79 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a  ype()). The.  **
15b10 20 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20   hdr-size field 
15b20 69 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74  is also a varint
15b30 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66   which is the of
15b40 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65  fset from the be
15b50 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20  ginning.  ** of 
15b60 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61  the record to da
15b70 74 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74  ta0..  */.  nDat
15b80 61 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f  a = 0;         /
15b90 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
15ba0 73 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20  s of data space 
15bb0 2a 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20  */.  nHdr = 0;  
15bc0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
15bd0 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65  r of bytes of he
15be0 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20  ader space */.  
15bf0 6e 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20  nZero = 0;      
15c00 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
15c10 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68  zero bytes at th
15c20 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63  e end of the rec
15c30 6f 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20  ord */.  nField 
15c40 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66  = pOp->p1;.  zAf
15c50 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34  finity = pOp->p4
15c60 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46  .z;.  assert( nF
15c70 69 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ield>0 && pOp->p
15c80 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e  2>0 && pOp->p2+n
15c90 46 69 65 6c 64 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  Field<=(p->nMem-
15ca0 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
15cb0 0a 20 20 70 44 61 74 61 30 20 3d 20 26 61 4d 65  .  pData0 = &aMe
15cc0 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69  m[nField];.  nFi
15cd0 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  eld = pOp->p2;. 
15ce0 20 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30   pLast = &pData0
15cf0 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69  [nField-1];.  fi
15d00 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d  le_format = p->m
15d10 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61  inWriteFileForma
15d20 74 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74 69 66  t;..  /* Identif
15d30 79 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67  y the output reg
15d40 69 73 74 65 72 20 2a 2f 0a 20 20 61 73 73 65 72  ister */.  asser
15d50 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e  t( pOp->p3<pOp->
15d60 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70  p1 || pOp->p3>=p
15d70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29  Op->p1+pOp->p2 )
15d80 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
15d90 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d  [pOp->p3];.  mem
15da0 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
15db0 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 41 70   pOut);..  /* Ap
15dc0 70 6c 79 20 74 68 65 20 72 65 71 75 65 73 74 65  ply the requeste
15dd0 64 20 61 66 66 69 6e 69 74 79 20 74 6f 20 61 6c  d affinity to al
15de0 6c 20 69 6e 70 75 74 73 0a 20 20 2a 2f 0a 20 20  l inputs.  */.  
15df0 61 73 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d  assert( pData0<=
15e00 70 4c 61 73 74 20 29 3b 0a 20 20 69 66 28 20 7a  pLast );.  if( z
15e10 41 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20  Affinity ){.    
15e20 70 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20  pRec = pData0;. 
15e30 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 61 70 70     do{.      app
15e40 6c 79 41 66 66 69 6e 69 74 79 28 70 52 65 63 2b  lyAffinity(pRec+
15e50 2b 2c 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b  +, *(zAffinity++
15e60 29 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  ), encoding);.  
15e70 20 20 20 20 61 73 73 65 72 74 28 20 7a 41 66 66      assert( zAff
15e80 69 6e 69 74 79 5b 30 5d 3d 3d 30 20 7c 7c 20 70  inity[0]==0 || p
15e90 52 65 63 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20  Rec<=pLast );.  
15ea0 20 20 7d 77 68 69 6c 65 28 20 7a 41 66 66 69 6e    }while( zAffin
15eb0 69 74 79 5b 30 5d 20 29 3b 0a 20 20 7d 0a 0a 20  ity[0] );.  }.. 
15ec0 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68   /* Loop through
15ed0 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 74 68   the elements th
15ee0 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20  at will make up 
15ef0 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 66 69  the record to fi
15f00 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f  gure.  ** out ho
15f10 77 20 6d 75 63 68 20 73 70 61 63 65 20 69 73 20  w much space is 
15f20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 65  required for the
15f30 20 6e 65 77 20 72 65 63 6f 72 64 2e 0a 20 20 2a   new record..  *
15f40 2f 0a 20 20 70 52 65 63 20 3d 20 70 4c 61 73 74  /.  pRec = pLast
15f50 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65  ;.  do{.    asse
15f60 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
15f70 52 65 63 29 20 29 3b 0a 20 20 20 20 70 52 65 63  Rec) );.    pRec
15f80 2d 3e 75 54 65 6d 70 20 3d 20 73 65 72 69 61 6c  ->uTemp = serial
15f90 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56  _type = sqlite3V
15fa0 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 70 52  dbeSerialType(pR
15fb0 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 2c  ec, file_format,
15fc0 20 26 6c 65 6e 29 3b 0a 20 20 20 20 69 66 28 20   &len);.    if( 
15fd0 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pRec->flags & ME
15fe0 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20  M_Zero ){.      
15ff0 69 66 28 20 6e 44 61 74 61 20 29 7b 0a 20 20 20  if( nData ){.   
16000 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
16010 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f  VdbeMemExpandBlo
16020 62 28 70 52 65 63 29 20 29 20 67 6f 74 6f 20 6e  b(pRec) ) goto n
16030 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65 6c  o_mem;.      }el
16040 73 65 7b 0a 20 20 20 20 20 20 20 20 6e 5a 65 72  se{.        nZer
16050 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65  o += pRec->u.nZe
16060 72 6f 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e 20  ro;.        len 
16070 2d 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f  -= pRec->u.nZero
16080 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
16090 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e      nData += len
160a0 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20  ;.    testcase( 
160b0 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32 37  serial_type==127
160c0 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65   );.    testcase
160d0 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31  ( serial_type==1
160e0 32 38 20 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b  28 );.    nHdr +
160f0 3d 20 73 65 72 69 61 6c 5f 74 79 70 65 3c 3d 31  = serial_type<=1
16100 32 37 20 3f 20 31 20 3a 20 73 71 6c 69 74 65 33  27 ? 1 : sqlite3
16110 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c  VarintLen(serial
16120 5f 74 79 70 65 29 3b 0a 20 20 7d 77 68 69 6c 65  _type);.  }while
16130 28 20 28 2d 2d 70 52 65 63 29 3e 3d 70 44 61 74  ( (--pRec)>=pDat
16140 61 30 20 29 3b 0a 0a 20 20 2f 2a 20 45 56 49 44  a0 );..  /* EVID
16150 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 32 35 36 34  ENCE-OF: R-22564
16160 2d 31 31 36 34 37 20 54 68 65 20 68 65 61 64 65  -11647 The heade
16170 72 20 62 65 67 69 6e 73 20 77 69 74 68 20 61 20  r begins with a 
16180 73 69 6e 67 6c 65 20 76 61 72 69 6e 74 0a 20 20  single varint.  
16190 2a 2a 20 77 68 69 63 68 20 64 65 74 65 72 6d 69  ** which determi
161a0 6e 65 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75  nes the total nu
161b0 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e  mber of bytes in
161c0 20 74 68 65 20 68 65 61 64 65 72 2e 20 54 68 65   the header. The
161d0 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 76 61 6c   varint.  ** val
161e0 75 65 20 69 73 20 74 68 65 20 73 69 7a 65 20 6f  ue is the size o
161f0 66 20 74 68 65 20 68 65 61 64 65 72 20 69 6e 20  f the header in 
16200 62 79 74 65 73 20 69 6e 63 6c 75 64 69 6e 67 20  bytes including 
16210 74 68 65 20 73 69 7a 65 20 76 61 72 69 6e 74 0a  the size varint.
16220 20 20 2a 2a 20 69 74 73 65 6c 66 2e 20 2a 2f 0a    ** itself. */.
16230 20 20 74 65 73 74 63 61 73 65 28 20 6e 48 64 72    testcase( nHdr
16240 3d 3d 31 32 36 20 29 3b 0a 20 20 74 65 73 74 63  ==126 );.  testc
16250 61 73 65 28 20 6e 48 64 72 3d 3d 31 32 37 20 29  ase( nHdr==127 )
16260 3b 0a 20 20 69 66 28 20 6e 48 64 72 3c 3d 31 32  ;.  if( nHdr<=12
16270 36 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20  6 ){.    /* The 
16280 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 2a 2f 0a 20  common case */. 
16290 20 20 20 6e 48 64 72 20 2b 3d 20 31 3b 0a 20 20     nHdr += 1;.  
162a0 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 52 61  }else{.    /* Ra
162b0 72 65 20 63 61 73 65 20 6f 66 20 61 20 72 65 61  re case of a rea
162c0 6c 6c 79 20 6c 61 72 67 65 20 68 65 61 64 65 72  lly large header
162d0 20 2a 2f 0a 20 20 20 20 6e 56 61 72 69 6e 74 20   */.    nVarint 
162e0 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c  = sqlite3VarintL
162f0 65 6e 28 6e 48 64 72 29 3b 0a 20 20 20 20 6e 48  en(nHdr);.    nH
16300 64 72 20 2b 3d 20 6e 56 61 72 69 6e 74 3b 0a 20  dr += nVarint;. 
16310 20 20 20 69 66 28 20 6e 56 61 72 69 6e 74 3c 73     if( nVarint<s
16320 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28  qlite3VarintLen(
16330 6e 48 64 72 29 20 29 20 6e 48 64 72 2b 2b 3b 0a  nHdr) ) nHdr++;.
16340 20 20 7d 0a 20 20 6e 42 79 74 65 20 3d 20 6e 48    }.  nByte = nH
16350 64 72 2b 6e 44 61 74 61 3b 0a 20 20 69 66 28 20  dr+nData;.  if( 
16360 6e 42 79 74 65 2b 6e 5a 65 72 6f 3e 64 62 2d 3e  nByte+nZero>db->
16370 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
16380 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
16390 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
163a0 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20  .  }..  /* Make 
163b0 73 75 72 65 20 74 68 65 20 6f 75 74 70 75 74 20  sure the output 
163c0 72 65 67 69 73 74 65 72 20 68 61 73 20 61 20 62  register has a b
163d0 75 66 66 65 72 20 6c 61 72 67 65 20 65 6e 6f 75  uffer large enou
163e0 67 68 20 74 6f 20 73 74 6f 72 65 20 0a 20 20 2a  gh to store .  *
163f0 2a 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64  * the new record
16400 2e 20 54 68 65 20 6f 75 74 70 75 74 20 72 65 67  . The output reg
16410 69 73 74 65 72 20 28 70 4f 70 2d 3e 70 33 29 20  ister (pOp->p3) 
16420 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 74  is not allowed t
16430 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20 6f 66  o.  ** be one of
16440 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73   the input regis
16450 74 65 72 73 20 28 62 65 63 61 75 73 65 20 74 68  ters (because th
16460 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c  e following call
16470 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33   to.  ** sqlite3
16480 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52  VdbeMemClearAndR
16490 65 73 69 7a 65 28 29 20 63 6f 75 6c 64 20 63 6c  esize() could cl
164a0 6f 62 62 65 72 20 74 68 65 20 76 61 6c 75 65 20  obber the value 
164b0 62 65 66 6f 72 65 20 69 74 20 69 73 20 75 73 65  before it is use
164c0 64 29 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73  d)..  */.  if( s
164d0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65  qlite3VdbeMemCle
164e0 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4f 75 74  arAndResize(pOut
164f0 2c 20 28 69 6e 74 29 6e 42 79 74 65 29 20 29 7b  , (int)nByte) ){
16500 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
16510 3b 0a 20 20 7d 0a 20 20 7a 4e 65 77 52 65 63 6f  ;.  }.  zNewReco
16520 72 64 20 3d 20 28 75 38 20 2a 29 70 4f 75 74 2d  rd = (u8 *)pOut-
16530 3e 7a 3b 0a 0a 20 20 2f 2a 20 57 72 69 74 65 20  >z;..  /* Write 
16540 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
16550 69 20 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28  i = putVarint32(
16560 7a 4e 65 77 52 65 63 6f 72 64 2c 20 6e 48 64 72  zNewRecord, nHdr
16570 29 3b 0a 20 20 6a 20 3d 20 6e 48 64 72 3b 0a 20  );.  j = nHdr;. 
16580 20 61 73 73 65 72 74 28 20 70 44 61 74 61 30 3c   assert( pData0<
16590 3d 70 4c 61 73 74 20 29 3b 0a 20 20 70 52 65 63  =pLast );.  pRec
165a0 20 3d 20 70 44 61 74 61 30 3b 0a 20 20 64 6f 7b   = pData0;.  do{
165b0 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65  .    serial_type
165c0 20 3d 20 70 52 65 63 2d 3e 75 54 65 6d 70 3b 0a   = pRec->uTemp;.
165d0 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d      /* EVIDENCE-
165e0 4f 46 3a 20 52 2d 30 36 35 32 39 2d 34 37 33 36  OF: R-06529-4736
165f0 32 20 46 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20  2 Following the 
16600 73 69 7a 65 20 76 61 72 69 6e 74 20 61 72 65 20  size varint are 
16610 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a 20 20 20 20  one or more.    
16620 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 76 61  ** additional va
16630 72 69 6e 74 73 2c 20 6f 6e 65 20 70 65 72 20 63  rints, one per c
16640 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 20 20 69 20  olumn. */.    i 
16650 2b 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28 26  += putVarint32(&
16660 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d 2c 20 73  zNewRecord[i], s
16670 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 20 20 20  erial_type);    
16680 20 20 20 20 20 20 20 20 2f 2a 20 73 65 72 69 61          /* seria
16690 6c 20 74 79 70 65 20 2a 2f 0a 20 20 20 20 2f 2a  l type */.    /*
166a0 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
166b0 36 34 35 33 36 2d 35 31 37 32 38 20 54 68 65 20  64536-51728 The 
166c0 76 61 6c 75 65 73 20 66 6f 72 20 65 61 63 68 20  values for each 
166d0 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 72 65  column in the re
166e0 63 6f 72 64 0a 20 20 20 20 2a 2a 20 69 6d 6d 65  cord.    ** imme
166f0 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20 74  diately follow t
16700 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20 20  he header. */.  
16710 20 20 6a 20 2b 3d 20 73 71 6c 69 74 65 33 56 64    j += sqlite3Vd
16720 62 65 53 65 72 69 61 6c 50 75 74 28 26 7a 4e 65  beSerialPut(&zNe
16730 77 52 65 63 6f 72 64 5b 6a 5d 2c 20 70 52 65 63  wRecord[j], pRec
16740 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20  , serial_type); 
16750 2f 2a 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20  /* content */.  
16760 7d 77 68 69 6c 65 28 20 28 2b 2b 70 52 65 63 29  }while( (++pRec)
16770 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 61 73 73  <=pLast );.  ass
16780 65 72 74 28 20 69 3d 3d 6e 48 64 72 20 29 3b 0a  ert( i==nHdr );.
16790 20 20 61 73 73 65 72 74 28 20 6a 3d 3d 6e 42 79    assert( j==nBy
167a0 74 65 20 29 3b 0a 0a 20 20 61 73 73 65 72 74 28  te );..  assert(
167b0 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
167c0 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p3<=(p->nMem-
167d0 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
167e0 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29   pOut->n = (int)
167f0 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66  nByte;.  pOut->f
16800 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 3b  lags = MEM_Blob;
16810 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20 29 7b 0a  .  if( nZero ){.
16820 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72      pOut->u.nZer
16830 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70  o = nZero;.    p
16840 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Out->flags |= ME
16850 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f  M_Zero;.  }.  pO
16860 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45  ut->enc = SQLITE
16870 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61  _UTF8;  /* In ca
16880 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65  se the blob is e
16890 76 65 72 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  ver converted to
168a0 20 74 65 78 74 20 2a 2f 0a 20 20 52 45 47 49 53   text */.  REGIS
168b0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
168c0 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41  3, pOut);.  UPDA
168d0 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
168e0 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
168f0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
16900 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  unt P1 P2 * * *.
16910 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
16920 32 5d 3d 63 6f 75 6e 74 28 29 0a 2a 2a 0a 2a 2a  2]=count().**.**
16930 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62 65   Store the numbe
16940 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61 6e  r of entries (an
16950 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29 20   integer value) 
16960 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  in the table or 
16970 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64  index .** opened
16980 20 62 79 20 63 75 72 73 6f 72 20 50 31 20 69 6e   by cursor P1 in
16990 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a   register P2.*/.
169a0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
169b0 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63  MIT_BTREECOUNT.c
169c0 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20  ase OP_Count: { 
169d0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
169e0 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72 79 3b  */.  i64 nEntry;
169f0 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
16a00 73 72 3b 0a 0a 20 20 70 43 72 73 72 20 3d 20 70  sr;..  pCrsr = p
16a10 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
16a20 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73  ->pCursor;.  ass
16a30 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20  ert( pCrsr );.  
16a40 6e 45 6e 74 72 79 20 3d 20 30 3b 20 20 2f 2a 20  nEntry = 0;  /* 
16a50 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c  Not needed.  Onl
16a60 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63  y used to silenc
16a70 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a  e a warning. */.
16a80 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
16a90 72 65 65 43 6f 75 6e 74 28 70 43 72 73 72 2c 20  reeCount(pCrsr, 
16aa0 26 6e 45 6e 74 72 79 29 3b 0a 20 20 70 4f 75 74  &nEntry);.  pOut
16ab0 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
16ac0 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75  e(p, pOp);.  pOu
16ad0 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b  t->u.i = nEntry;
16ae0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
16af0 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  if../* Opcode: S
16b00 61 76 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20  avepoint P1 * * 
16b10 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c  P4 *.**.** Open,
16b20 20 72 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c   release or roll
16b30 62 61 63 6b 20 74 68 65 20 73 61 76 65 70 6f 69  back the savepoi
16b40 6e 74 20 6e 61 6d 65 64 20 62 79 20 70 61 72 61  nt named by para
16b50 6d 65 74 65 72 20 50 34 2c 20 64 65 70 65 6e 64  meter P4, depend
16b60 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61  ing.** on the va
16b70 6c 75 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70  lue of P1. To op
16b80 65 6e 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69  en a new savepoi
16b90 6e 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65  nt, P1==0. To re
16ba0 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61  lease (commit) a
16bb0 6e 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20 73 61  n.** existing sa
16bc0 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20  vepoint, P1==1, 
16bd0 6f 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61  or to rollback a
16be0 6e 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70  n existing savep
16bf0 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63  oint P1==2..*/.c
16c00 61 73 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74  ase OP_Savepoint
16c10 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20 20  : {.  int p1;   
16c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c30 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f        /* Value o
16c40 66 20 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  f P1 operand */.
16c50 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
16c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c70 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76    /* Name of sav
16c80 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20  epoint */.  int 
16c90 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69  nName;.  Savepoi
16ca0 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65  nt *pNew;.  Save
16cb0 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e  point *pSavepoin
16cc0 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  t;.  Savepoint *
16cd0 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61 76  pTmp;.  int iSav
16ce0 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69  epoint;.  int ii
16cf0 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70  ;..  p1 = pOp->p
16d00 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70  1;.  zName = pOp
16d10 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73  ->p4.z;..  /* As
16d20 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70 31  sert that the p1
16d30 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 76 61   parameter is va
16d40 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61 74 20 69  lid. Also that i
16d50 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70  f there is no op
16d60 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74  en.  ** transact
16d70 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72 65 20  ion, then there 
16d80 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73 61  cannot be any sa
16d90 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a  vepoints. .  */.
16da0 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53    assert( db->pS
16db0 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64  avepoint==0 || d
16dc0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  b->autoCommit==0
16dd0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31   );.  assert( p1
16de0 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49  ==SAVEPOINT_BEGI
16df0 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  N||p1==SAVEPOINT
16e00 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41  _RELEASE||p1==SA
16e10 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b  VEPOINT_ROLLBACK
16e20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62   );.  assert( db
16e30 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20  ->pSavepoint || 
16e40 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f  db->isTransactio
16e50 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b  nSavepoint==0 );
16e60 0a 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b  .  assert( check
16e70 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64  SavepointCount(d
16e80 62 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  b) );.  assert( 
16e90 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
16ea0 0a 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50  .  if( p1==SAVEP
16eb0 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20  OINT_BEGIN ){.  
16ec0 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57    if( db->nVdbeW
16ed0 72 69 74 65 3e 30 20 29 7b 0a 20 20 20 20 20 20  rite>0 ){.      
16ee0 2f 2a 20 41 20 6e 65 77 20 73 61 76 65 70 6f 69  /* A new savepoi
16ef0 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 72 65  nt cannot be cre
16f00 61 74 65 64 20 69 66 20 74 68 65 72 65 20 61 72  ated if there ar
16f10 65 20 61 63 74 69 76 65 20 77 72 69 74 65 20 0a  e active write .
16f20 20 20 20 20 20 20 2a 2a 20 73 74 61 74 65 6d 65        ** stateme
16f30 6e 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72  nts (i.e. open r
16f40 65 61 64 2f 77 72 69 74 65 20 69 6e 63 72 65 6d  ead/write increm
16f50 65 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c  ental blob handl
16f60 65 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  es)..      */.  
16f70 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
16f80 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20  rror(p, "cannot 
16f90 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d  open savepoint -
16fa0 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
16fb0 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20  in progress");. 
16fc0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
16fd0 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65  _BUSY;.    }else
16fe0 7b 0a 20 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20  {.      nName = 
16ff0 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
17000 7a 4e 61 6d 65 29 3b 0a 0a 23 69 66 6e 64 65 66  zName);..#ifndef
17010 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
17020 54 55 41 4c 54 41 42 4c 45 0a 20 20 20 20 20 20  TUALTABLE.      
17030 2f 2a 20 54 68 69 73 20 63 61 6c 6c 20 69 73 20  /* This call is 
17040 4f 6b 20 65 76 65 6e 20 69 66 20 74 68 69 73 20  Ok even if this 
17050 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61 63 74  savepoint is act
17060 75 61 6c 6c 79 20 61 20 74 72 61 6e 73 61 63 74  ually a transact
17070 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 73 61 76  ion.      ** sav
17080 65 70 6f 69 6e 74 20 28 61 6e 64 20 74 68 65 72  epoint (and ther
17090 65 66 6f 72 65 20 73 68 6f 75 6c 64 20 6e 6f 74  efore should not
170a0 20 70 72 6f 6d 70 74 20 78 53 61 76 65 70 6f 69   prompt xSavepoi
170b0 6e 74 28 29 29 20 63 61 6c 6c 62 61 63 6b 73 2e  nt()) callbacks.
170c0 0a 20 20 20 20 20 20 2a 2a 20 49 66 20 74 68 69  .      ** If thi
170d0 73 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69  s is a transacti
170e0 6f 6e 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69  on savepoint bei
170f0 6e 67 20 6f 70 65 6e 65 64 2c 20 69 74 20 69 73  ng opened, it is
17100 20 67 75 61 72 61 6e 74 65 65 64 0a 20 20 20 20   guaranteed.    
17110 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20 64 62    ** that the db
17120 2d 3e 61 56 54 72 61 6e 73 5b 5d 20 61 72 72 61  ->aVTrans[] arra
17130 79 20 69 73 20 65 6d 70 74 79 2e 20 20 2a 2f 0a  y is empty.  */.
17140 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62        assert( db
17150 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  ->autoCommit==0 
17160 7c 7c 20 64 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d  || db->nVTrans==
17170 30 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  0 );.      rc = 
17180 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70  sqlite3VtabSavep
17190 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49  oint(db, SAVEPOI
171a0 4e 54 5f 42 45 47 49 4e 2c 0a 20 20 20 20 20 20  NT_BEGIN,.      
171b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171c0 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53            db->nS
171d0 74 61 74 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61  tatement+db->nSa
171e0 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20  vepoint);.      
171f0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
17200 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
17210 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e  ue_to_error;.#en
17220 64 69 66 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72  dif..      /* Cr
17230 65 61 74 65 20 61 20 6e 65 77 20 73 61 76 65 70  eate a new savep
17240 6f 69 6e 74 20 73 74 72 75 63 74 75 72 65 2e 20  oint structure. 
17250 2a 2f 0a 20 20 20 20 20 20 70 4e 65 77 20 3d 20  */.      pNew = 
17260 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
17270 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 53 61  aw(db, sizeof(Sa
17280 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31  vepoint)+nName+1
17290 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4e 65  );.      if( pNe
172a0 77 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4e 65  w ){.        pNe
172b0 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68 61 72  w->zName = (char
172c0 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20 20 20   *)&pNew[1];.   
172d0 20 20 20 20 20 6d 65 6d 63 70 79 28 70 4e 65 77       memcpy(pNew
172e0 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20  ->zName, zName, 
172f0 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 0a 20  nName+1);.    . 
17300 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65         /* If the
17310 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20 74 72  re is no open tr
17320 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20  ansaction, then 
17330 6d 61 72 6b 20 74 68 69 73 20 61 73 20 61 20 73  mark this as a s
17340 70 65 63 69 61 6c 0a 20 20 20 20 20 20 20 20 2a  pecial.        *
17350 2a 20 22 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  * "transaction s
17360 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20  avepoint". */.  
17370 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 75        if( db->au
17380 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20  toCommit ){.    
17390 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
173a0 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20  mmit = 0;.      
173b0 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61      db->isTransa
173c0 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d  ctionSavepoint =
173d0 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73   1;.        }els
173e0 65 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  e{.          db-
173f0 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20  >nSavepoint++;. 
17400 20 20 20 20 20 20 20 7d 0a 20 20 20 20 0a 20 20         }.    .  
17410 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68        /* Link th
17420 65 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20  e new savepoint 
17430 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  into the databas
17440 65 20 68 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e  e handle's list.
17450 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 4e 65 77   */.        pNew
17460 2d 3e 70 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53  ->pNext = db->pS
17470 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20  avepoint;.      
17480 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74    db->pSavepoint
17490 20 3d 20 70 4e 65 77 3b 0a 20 20 20 20 20 20 20   = pNew;.       
174a0 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64   pNew->nDeferred
174b0 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65  Cons = db->nDefe
174c0 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20  rredCons;.      
174d0 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65    pNew->nDeferre
174e0 64 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e  dImmCons = db->n
174f0 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
17500 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
17510 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 53 61 76   }else{.    iSav
17520 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20 20 20  epoint = 0;..   
17530 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 6e 61 6d   /* Find the nam
17540 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66  ed savepoint. If
17550 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63   there is no suc
17560 68 20 73 61 76 65 70 6f 69 6e 74 2c 20 74 68 65  h savepoint, the
17570 6e 20 61 6e 0a 20 20 20 20 2a 2a 20 61 6e 20 65  n an.    ** an e
17580 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64  rror is returned
17590 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 20 2a   to the user.  *
175a0 2f 0a 20 20 20 20 66 6f 72 28 0a 20 20 20 20 20  /.    for(.     
175b0 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62   pSavepoint = db
175c0 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20 0a 20  ->pSavepoint; . 
175d0 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20       pSavepoint 
175e0 26 26 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  && sqlite3StrICm
175f0 70 28 70 53 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e  p(pSavepoint->zN
17600 61 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20  ame, zName);.   
17610 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20     pSavepoint = 
17620 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78  pSavepoint->pNex
17630 74 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 69  t.    ){.      i
17640 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20  Savepoint++;.   
17650 20 7d 0a 20 20 20 20 69 66 28 20 21 70 53 61 76   }.    if( !pSav
17660 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20  epoint ){.      
17670 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
17680 28 70 2c 20 22 6e 6f 20 73 75 63 68 20 73 61 76  (p, "no such sav
17690 65 70 6f 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61  epoint: %s", zNa
176a0 6d 65 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  me);.      rc = 
176b0 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
176c0 20 20 7d 65 6c 73 65 20 69 66 28 20 64 62 2d 3e    }else if( db->
176d0 6e 56 64 62 65 57 72 69 74 65 3e 30 20 26 26 20  nVdbeWrite>0 && 
176e0 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
176f0 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 2f  LEASE ){.      /
17700 2a 20 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73  * It is not poss
17710 69 62 6c 65 20 74 6f 20 72 65 6c 65 61 73 65 20  ible to release 
17720 28 63 6f 6d 6d 69 74 29 20 61 20 73 61 76 65 70  (commit) a savep
17730 6f 69 6e 74 20 69 66 20 74 68 65 72 65 20 61 72  oint if there ar
17740 65 20 0a 20 20 20 20 20 20 2a 2a 20 61 63 74 69  e .      ** acti
17750 76 65 20 77 72 69 74 65 20 73 74 61 74 65 6d 65  ve write stateme
17760 6e 74 73 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  nts..      */.  
17770 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
17780 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20  rror(p, "cannot 
17790 72 65 6c 65 61 73 65 20 73 61 76 65 70 6f 69 6e  release savepoin
177a0 74 20 2d 20 22 0a 20 20 20 20 20 20 20 20 20 20  t - ".          
177b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177c0 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20  "SQL statements 
177d0 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20  in progress");. 
177e0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
177f0 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65  _BUSY;.    }else
17800 7b 0a 0a 20 20 20 20 20 20 2f 2a 20 44 65 74 65  {..      /* Dete
17810 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72  rmine whether or
17820 20 6e 6f 74 20 74 68 69 73 20 69 73 20 61 20 74   not this is a t
17830 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70  ransaction savep
17840 6f 69 6e 74 2e 20 49 66 20 73 6f 2c 0a 20 20 20  oint. If so,.   
17850 20 20 20 2a 2a 20 61 6e 64 20 74 68 69 73 20 69     ** and this i
17860 73 20 61 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  s a RELEASE comm
17870 61 6e 64 2c 20 74 68 65 6e 20 74 68 65 20 63 75  and, then the cu
17880 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  rrent transactio
17890 6e 20 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 63  n .      ** is c
178a0 6f 6d 6d 69 74 74 65 64 2e 20 0a 20 20 20 20 20  ommitted. .     
178b0 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20 69 73   */.      int is
178c0 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20 70 53  Transaction = pS
178d0 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d  avepoint->pNext=
178e0 3d 30 20 26 26 20 64 62 2d 3e 69 73 54 72 61 6e  =0 && db->isTran
178f0 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
17900 3b 0a 20 20 20 20 20 20 69 66 28 20 69 73 54 72  ;.      if( isTr
17910 61 6e 73 61 63 74 69 6f 6e 20 26 26 20 70 31 3d  ansaction && p1=
17920 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41  =SAVEPOINT_RELEA
17930 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66  SE ){.        if
17940 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56  ( (rc = sqlite3V
17950 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29  dbeCheckFk(p, 1)
17960 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  )!=SQLITE_OK ){.
17970 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76            goto v
17980 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
17990 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62      }.        db
179a0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31  ->autoCommit = 1
179b0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71  ;.        if( sq
179c0 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29  lite3VdbeHalt(p)
179d0 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b  ==SQLITE_BUSY ){
179e0 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 70 63  .          p->pc
179f0 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61   = (int)(pOp - a
17a00 4f 70 29 3b 0a 20 20 20 20 20 20 20 20 20 20 64  Op);.          d
17a10 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
17a20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e  0;.          p->
17a30 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45  rc = rc = SQLITE
17a40 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20 20  _BUSY;.         
17a50 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
17a60 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  n;.        }.   
17a70 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73       db->isTrans
17a80 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20  actionSavepoint 
17a90 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 72 63 20  = 0;.        rc 
17aa0 3d 20 70 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d  = p->rc;.      }
17ab0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69 6e  else{.        in
17ac0 74 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65  t isSchemaChange
17ad0 3b 0a 20 20 20 20 20 20 20 20 69 53 61 76 65 70  ;.        iSavep
17ae0 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65  oint = db->nSave
17af0 70 6f 69 6e 74 20 2d 20 69 53 61 76 65 70 6f 69  point - iSavepoi
17b00 6e 74 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20  nt - 1;.        
17b10 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  if( p1==SAVEPOIN
17b20 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20  T_ROLLBACK ){.  
17b30 20 20 20 20 20 20 20 20 69 73 53 63 68 65 6d 61          isSchema
17b40 43 68 61 6e 67 65 20 3d 20 28 64 62 2d 3e 66 6c  Change = (db->fl
17b50 61 67 73 20 26 20 53 51 4c 49 54 45 5f 49 6e 74  ags & SQLITE_Int
17b60 65 72 6e 43 68 61 6e 67 65 73 29 21 3d 30 3b 0a  ernChanges)!=0;.
17b70 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 69 69            for(ii
17b80 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20  =0; ii<db->nDb; 
17b90 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20  ii++){.         
17ba0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
17bb0 74 72 65 65 54 72 69 70 41 6c 6c 43 75 72 73 6f  treeTripAllCurso
17bc0 72 73 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  rs(db->aDb[ii].p
17bd0 42 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  Bt,.            
17be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17bf0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54             SQLIT
17c00 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b  E_ABORT_ROLLBACK
17c10 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
17c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c30 20 20 20 20 20 20 20 20 20 69 73 53 63 68 65 6d           isSchem
17c40 61 43 68 61 6e 67 65 3d 3d 30 29 3b 0a 20 20 20  aChange==0);.   
17c50 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21           if( rc!
17c60 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
17c70 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
17c80 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20  rror;.          
17c90 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  }.        }else{
17ca0 0a 20 20 20 20 20 20 20 20 20 20 69 73 53 63 68  .          isSch
17cb0 65 6d 61 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20  emaChange = 0;. 
17cc0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
17cd0 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62   for(ii=0; ii<db
17ce0 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20  ->nDb; ii++){.  
17cf0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
17d00 69 74 65 33 42 74 72 65 65 53 61 76 65 70 6f 69  ite3BtreeSavepoi
17d10 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  nt(db->aDb[ii].p
17d20 42 74 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69  Bt, p1, iSavepoi
17d30 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  nt);.          i
17d40 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
17d50 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
17d60 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
17d70 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
17d80 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
17d90 20 20 20 20 20 20 20 69 66 28 20 69 73 53 63 68         if( isSch
17da0 65 6d 61 43 68 61 6e 67 65 20 29 7b 0a 20 20 20  emaChange ){.   
17db0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78         sqlite3Ex
17dc0 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
17dd0 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20  ements(db);.    
17de0 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73        sqlite3Res
17df0 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f  etAllSchemasOfCo
17e00 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20  nnection(db);.  
17e10 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67          db->flag
17e20 73 20 3d 20 28 64 62 2d 3e 66 6c 61 67 73 20 7c  s = (db->flags |
17e30 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68   SQLITE_InternCh
17e40 61 6e 67 65 73 29 3b 0a 20 20 20 20 20 20 20 20  anges);.        
17e50 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20  }.      }.  .   
17e60 20 20 20 2f 2a 20 52 65 67 61 72 64 6c 65 73 73     /* Regardless
17e70 20 6f 66 20 77 68 65 74 68 65 72 20 74 68 69 73   of whether this
17e80 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 6f 72   is a RELEASE or
17e90 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65 73 74 72   ROLLBACK, destr
17ea0 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20 20 2a 2a  oy all .      **
17eb0 20 73 61 76 65 70 6f 69 6e 74 73 20 6e 65 73 74   savepoints nest
17ec0 65 64 20 69 6e 73 69 64 65 20 6f 66 20 74 68 65  ed inside of the
17ed0 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67   savepoint being
17ee0 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e 20 2a 2f   operated on. */
17ef0 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 64 62  .      while( db
17f00 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21 3d 70 53  ->pSavepoint!=pS
17f10 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20  avepoint ){.    
17f20 20 20 20 20 70 54 6d 70 20 3d 20 64 62 2d 3e 70      pTmp = db->p
17f30 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20  Savepoint;.     
17f40 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e     db->pSavepoin
17f50 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65 78 74 3b  t = pTmp->pNext;
17f60 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
17f70 44 62 46 72 65 65 28 64 62 2c 20 70 54 6d 70 29  DbFree(db, pTmp)
17f80 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53  ;.        db->nS
17f90 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20  avepoint--;.    
17fa0 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66    }..      /* If
17fb0 20 69 74 20 69 73 20 61 20 52 45 4c 45 41 53 45   it is a RELEASE
17fc0 2c 20 74 68 65 6e 20 64 65 73 74 72 6f 79 20 74  , then destroy t
17fd0 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69  he savepoint bei
17fe0 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 0a  ng operated on .
17ff0 20 20 20 20 20 20 2a 2a 20 74 6f 6f 2e 20 49 66        ** too. If
18000 20 69 74 20 69 73 20 61 20 52 4f 4c 4c 42 41 43   it is a ROLLBAC
18010 4b 20 54 4f 2c 20 74 68 65 6e 20 73 65 74 20 74  K TO, then set t
18020 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 65 66  he number of def
18030 65 72 72 65 64 20 0a 20 20 20 20 20 20 2a 2a 20  erred .      ** 
18040 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
18050 74 69 6f 6e 73 20 70 72 65 73 65 6e 74 20 69 6e  tions present in
18060 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 6f   the database to
18070 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65   the value store
18080 64 0a 20 20 20 20 20 20 2a 2a 20 77 68 65 6e 20  d.      ** when 
18090 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 77 61  the savepoint wa
180a0 73 20 63 72 65 61 74 65 64 2e 20 20 2a 2f 0a 20  s created.  */. 
180b0 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56       if( p1==SAV
180c0 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29  EPOINT_RELEASE )
180d0 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
180e0 28 20 70 53 61 76 65 70 6f 69 6e 74 3d 3d 64 62  ( pSavepoint==db
180f0 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 29 3b 0a  ->pSavepoint );.
18100 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76          db->pSav
18110 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f  epoint = pSavepo
18120 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20  int->pNext;.    
18130 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
18140 65 28 64 62 2c 20 70 53 61 76 65 70 6f 69 6e 74  e(db, pSavepoint
18150 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 21  );.        if( !
18160 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b  isTransaction ){
18170 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  .          db->n
18180 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20  Savepoint--;.   
18190 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c       }.      }el
181a0 73 65 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  se{.        db->
181b0 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20  nDeferredCons = 
181c0 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66  pSavepoint->nDef
181d0 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20  erredCons;.     
181e0 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64     db->nDeferred
181f0 49 6d 6d 43 6f 6e 73 20 3d 20 70 53 61 76 65 70  ImmCons = pSavep
18200 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 49  oint->nDeferredI
18210 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a  mmCons;.      }.
18220 0a 20 20 20 20 20 20 69 66 28 20 21 69 73 54 72  .      if( !isTr
18230 61 6e 73 61 63 74 69 6f 6e 20 7c 7c 20 70 31 3d  ansaction || p1=
18240 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42  =SAVEPOINT_ROLLB
18250 41 43 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ACK ){.        r
18260 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53  c = sqlite3VtabS
18270 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 70 31 2c  avepoint(db, p1,
18280 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20   iSavepoint);.  
18290 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
182a0 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
182b0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
182c0 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  r;.      }.    }
182d0 0a 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d  .  }..  break;.}
182e0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 75 74  ../* Opcode: Aut
182f0 6f 43 6f 6d 6d 69 74 20 50 31 20 50 32 20 2a 20  oCommit P1 P2 * 
18300 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68  * *.**.** Set th
18310 65 20 64 61 74 61 62 61 73 65 20 61 75 74 6f 2d  e database auto-
18320 63 6f 6d 6d 69 74 20 66 6c 61 67 20 74 6f 20 50  commit flag to P
18330 31 20 28 31 20 6f 72 20 30 29 2e 20 49 66 20 50  1 (1 or 0). If P
18340 32 20 69 73 20 74 72 75 65 2c 20 72 6f 6c 6c 0a  2 is true, roll.
18350 2a 2a 20 62 61 63 6b 20 61 6e 79 20 63 75 72 72  ** back any curr
18360 65 6e 74 6c 79 20 61 63 74 69 76 65 20 62 74 72  ently active btr
18370 65 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e  ee transactions.
18380 20 49 66 20 74 68 65 72 65 20 61 72 65 20 61 6e   If there are an
18390 79 20 61 63 74 69 76 65 0a 2a 2a 20 56 4d 73 20  y active.** VMs 
183a0 28 61 70 61 72 74 20 66 72 6f 6d 20 74 68 69 73  (apart from this
183b0 20 6f 6e 65 29 2c 20 74 68 65 6e 20 61 20 52 4f   one), then a RO
183c0 4c 4c 42 41 43 4b 20 66 61 69 6c 73 2e 20 20 41  LLBACK fails.  A
183d0 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69 66   COMMIT fails if
183e0 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20 61 63  .** there are ac
183f0 74 69 76 65 20 77 72 69 74 69 6e 67 20 56 4d 73  tive writing VMs
18400 20 6f 72 20 61 63 74 69 76 65 20 56 4d 73 20 74   or active VMs t
18410 68 61 74 20 75 73 65 20 73 68 61 72 65 64 20 63  hat use shared c
18420 61 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ache..**.** This
18430 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 61 75   instruction cau
18440 73 65 73 20 74 68 65 20 56 4d 20 74 6f 20 68 61  ses the VM to ha
18450 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  lt..*/.case OP_A
18460 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20 69  utoCommit: {.  i
18470 6e 74 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  nt desiredAutoCo
18480 6d 6d 69 74 3b 0a 20 20 69 6e 74 20 69 52 6f 6c  mmit;.  int iRol
18490 6c 62 61 63 6b 3b 0a 20 20 69 6e 74 20 74 75 72  lback;.  int tur
184a0 6e 4f 6e 41 43 3b 0a 0a 20 20 64 65 73 69 72 65  nOnAC;..  desire
184b0 64 41 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f  dAutoCommit = pO
184c0 70 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c 62 61  p->p1;.  iRollba
184d0 63 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  ck = pOp->p2;.  
184e0 74 75 72 6e 4f 6e 41 43 20 3d 20 64 65 73 69 72  turnOnAC = desir
184f0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 26 26 20  edAutoCommit && 
18500 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3b  !db->autoCommit;
18510 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72  .  assert( desir
18520 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20  edAutoCommit==1 
18530 7c 7c 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  || desiredAutoCo
18540 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73  mmit==0 );.  ass
18550 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f  ert( desiredAuto
18560 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69 52 6f  Commit==1 || iRo
18570 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a 20 20 61  llback==0 );.  a
18580 73 73 65 72 74 28 20 64 62 2d 3e 6e 56 64 62 65  ssert( db->nVdbe
18590 41 63 74 69 76 65 3e 30 20 29 3b 20 20 2f 2a 20  Active>0 );  /* 
185a0 41 74 20 6c 65 61 73 74 20 74 68 69 73 20 6f 6e  At least this on
185b0 65 20 56 4d 20 69 73 20 61 63 74 69 76 65 20 2a  e VM is active *
185c0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  /.  assert( p->b
185d0 49 73 52 65 61 64 65 72 20 29 3b 0a 0a 20 20 69  IsReader );..  i
185e0 66 28 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 21  f( turnOnAC && !
185f0 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d  iRollback && db-
18600 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20 29 7b  >nVdbeWrite>0 ){
18610 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20  .    /* If this 
18620 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c  instruction impl
18630 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54 20  ements a COMMIT 
18640 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72  and other VMs ar
18650 65 20 77 72 69 74 69 6e 67 0a 20 20 20 20 2a 2a  e writing.    **
18660 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72   return an error
18670 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74   indicating that
18680 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d   the other VMs m
18690 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72  ust complete fir
186a0 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20  st. .    */.    
186b0 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
186c0 28 70 2c 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d  (p, "cannot comm
186d0 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d  it transaction -
186e0 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   ".             
186f0 20 20 20 20 20 20 20 20 20 20 20 22 53 51 4c 20             "SQL 
18700 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
18710 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 72 63  ogress");.    rc
18720 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
18730 20 20 7d 65 6c 73 65 20 69 66 28 20 64 65 73 69    }else if( desi
18740 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21 3d 64  redAutoCommit!=d
18750 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b  b->autoCommit ){
18760 0a 20 20 20 20 69 66 28 20 69 52 6f 6c 6c 62 61  .    if( iRollba
18770 63 6b 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  ck ){.      asse
18780 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  rt( desiredAutoC
18790 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20  ommit==1 );.    
187a0 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63    sqlite3Rollbac
187b0 6b 41 6c 6c 28 64 62 2c 20 53 51 4c 49 54 45 5f  kAll(db, SQLITE_
187c0 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 29 3b  ABORT_ROLLBACK);
187d0 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43  .      db->autoC
187e0 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d  ommit = 1;.    }
187f0 65 6c 73 65 20 69 66 28 20 28 72 63 20 3d 20 73  else if( (rc = s
18800 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46  qlite3VdbeCheckF
18810 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45  k(p, 1))!=SQLITE
18820 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  _OK ){.      got
18830 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
18840 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
18850 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
18860 20 28 75 38 29 64 65 73 69 72 65 64 41 75 74 6f   (u8)desiredAuto
18870 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 7d 0a 20 20  Commit;.    }.  
18880 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
18890 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45  eHalt(p)==SQLITE
188a0 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 70  _BUSY ){.      p
188b0 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70  ->pc = (int)(pOp
188c0 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20 20 64   - aOp);.      d
188d0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
188e0 28 75 38 29 28 31 2d 64 65 73 69 72 65 64 41 75  (u8)(1-desiredAu
188f0 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20  toCommit);.     
18900 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
18910 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
18920 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
18930 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73  n;.    }.    ass
18940 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d  ert( db->nStatem
18950 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71  ent==0 );.    sq
18960 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f  lite3CloseSavepo
18970 69 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 69 66  ints(db);.    if
18980 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  ( p->rc==SQLITE_
18990 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  OK ){.      rc =
189a0 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20   SQLITE_DONE;.  
189b0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
189c0 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
189d0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f  ;.    }.    goto
189e0 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
189f0 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
18a00 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 0a 20  e3VdbeError(p,. 
18a10 20 20 20 20 20 20 20 28 21 64 65 73 69 72 65 64         (!desired
18a20 41 75 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e  AutoCommit)?"can
18a30 6e 6f 74 20 73 74 61 72 74 20 61 20 74 72 61 6e  not start a tran
18a40 73 61 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61  saction within a
18a50 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a   transaction":(.
18a60 20 20 20 20 20 20 20 20 28 69 52 6f 6c 6c 62 61          (iRollba
18a70 63 6b 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c  ck)?"cannot roll
18a80 62 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61  back - no transa
18a90 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22  ction is active"
18aa0 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :.              
18ab0 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d       "cannot com
18ac0 6d 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63  mit - no transac
18ad0 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 29  tion is active")
18ae0 29 3b 0a 20 20 20 20 20 20 20 20 20 0a 20 20 20  );.         .   
18af0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
18b00 4f 52 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  OR;.  }.  break;
18b10 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  .}../* Opcode: T
18b20 72 61 6e 73 61 63 74 69 6f 6e 20 50 31 20 50 32  ransaction P1 P2
18b30 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
18b40 42 65 67 69 6e 20 61 20 74 72 61 6e 73 61 63 74  Begin a transact
18b50 69 6f 6e 20 6f 6e 20 64 61 74 61 62 61 73 65 20  ion on database 
18b60 50 31 20 69 66 20 61 20 74 72 61 6e 73 61 63 74  P1 if a transact
18b70 69 6f 6e 20 69 73 20 6e 6f 74 20 61 6c 72 65 61  ion is not alrea
18b80 64 79 0a 2a 2a 20 61 63 74 69 76 65 2e 0a 2a 2a  dy.** active..**
18b90 20 49 66 20 50 32 20 69 73 20 6e 6f 6e 2d 7a 65   If P2 is non-ze
18ba0 72 6f 2c 20 74 68 65 6e 20 61 20 77 72 69 74 65  ro, then a write
18bb0 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
18bc0 73 74 61 72 74 65 64 2c 20 6f 72 20 69 66 20 61  started, or if a
18bd0 20 0a 2a 2a 20 72 65 61 64 2d 74 72 61 6e 73 61   .** read-transa
18be0 63 74 69 6f 6e 20 69 73 20 61 6c 72 65 61 64 79  ction is already
18bf0 20 61 63 74 69 76 65 2c 20 69 74 20 69 73 20 75   active, it is u
18c00 70 67 72 61 64 65 64 20 74 6f 20 61 20 77 72 69  pgraded to a wri
18c10 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a  te-transaction..
18c20 2a 2a 20 49 66 20 50 32 20 69 73 20 7a 65 72 6f  ** If P2 is zero
18c30 2c 20 74 68 65 6e 20 61 20 72 65 61 64 2d 74 72  , then a read-tr
18c40 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61  ansaction is sta
18c50 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69  rted..**.** P1 i
18c60 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74  s the index of t
18c70 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
18c80 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 74 72   on which the tr
18c90 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20  ansaction is.** 
18ca0 73 74 61 72 74 65 64 2e 20 20 49 6e 64 65 78 20  started.  Index 
18cb0 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61  0 is the main da
18cc0 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20  tabase file and 
18cd0 69 6e 64 65 78 20 31 20 69 73 20 74 68 65 0a 2a  index 1 is the.*
18ce0 2a 20 66 69 6c 65 20 75 73 65 64 20 66 6f 72 20  * file used for 
18cf0 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
18d00 2e 20 20 49 6e 64 69 63 65 73 20 6f 66 20 32 20  .  Indices of 2 
18d10 6f 72 20 6d 6f 72 65 20 61 72 65 20 75 73 65 64  or more are used
18d20 20 66 6f 72 0a 2a 2a 20 61 74 74 61 63 68 65 64   for.** attached
18d30 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a   databases..**.*
18d40 2a 20 49 66 20 61 20 77 72 69 74 65 2d 74 72 61  * If a write-tra
18d50 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72  nsaction is star
18d60 74 65 64 20 61 6e 64 20 74 68 65 20 56 64 62 65  ted and the Vdbe
18d70 2e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c  .usesStmtJournal
18d80 20 66 6c 61 67 20 69 73 0a 2a 2a 20 74 72 75 65   flag is.** true
18d90 20 28 74 68 69 73 20 66 6c 61 67 20 69 73 20 73   (this flag is s
18da0 65 74 20 69 66 20 74 68 65 20 56 64 62 65 20 6d  et if the Vdbe m
18db0 61 79 20 6d 6f 64 69 66 79 20 6d 6f 72 65 20 74  ay modify more t
18dc0 68 61 6e 20 6f 6e 65 20 72 6f 77 20 61 6e 64 20  han one row and 
18dd0 6d 61 79 0a 2a 2a 20 74 68 72 6f 77 20 61 6e 20  may.** throw an 
18de0 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 29  ABORT exception)
18df0 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72  , a statement tr
18e00 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 61 6c  ansaction may al
18e10 73 6f 20 62 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a  so be opened..**
18e20 20 4d 6f 72 65 20 73 70 65 63 69 66 69 63 61 6c   More specifical
18e30 6c 79 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20  ly, a statement 
18e40 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6f  transaction is o
18e50 70 65 6e 65 64 20 69 66 66 20 74 68 65 20 64 61  pened iff the da
18e60 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63  tabase.** connec
18e70 74 69 6f 6e 20 69 73 20 63 75 72 72 65 6e 74 6c  tion is currentl
18e80 79 20 6e 6f 74 20 69 6e 20 61 75 74 6f 63 6f 6d  y not in autocom
18e90 6d 69 74 20 6d 6f 64 65 2c 20 6f 72 20 69 66 20  mit mode, or if 
18ea0 74 68 65 72 65 20 61 72 65 20 6f 74 68 65 72 0a  there are other.
18eb0 2a 2a 20 61 63 74 69 76 65 20 73 74 61 74 65 6d  ** active statem
18ec0 65 6e 74 73 2e 20 41 20 73 74 61 74 65 6d 65 6e  ents. A statemen
18ed0 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c  t transaction al
18ee0 6c 6f 77 73 20 74 68 65 20 63 68 61 6e 67 65 73  lows the changes
18ef0 20 6d 61 64 65 20 62 79 20 74 68 69 73 0a 2a 2a   made by this.**
18f00 20 56 44 42 45 20 74 6f 20 62 65 20 72 6f 6c 6c   VDBE to be roll
18f10 65 64 20 62 61 63 6b 20 61 66 74 65 72 20 61 6e  ed back after an
18f20 20 65 72 72 6f 72 20 77 69 74 68 6f 75 74 20 68   error without h
18f30 61 76 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61  aving to roll ba
18f40 63 6b 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65  ck the.** entire
18f50 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 66   transaction. If
18f60 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 65 6e 63   no error is enc
18f70 6f 75 6e 74 65 72 65 64 2c 20 74 68 65 20 73 74  ountered, the st
18f80 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
18f90 69 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61 75 74 6f  ion.** will auto
18fa0 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6d 6d 69 74  matically commit
18fb0 20 77 68 65 6e 20 74 68 65 20 56 44 42 45 20 68   when the VDBE h
18fc0 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  alts..**.** If P
18fd0 35 21 3d 30 20 74 68 65 6e 20 74 68 69 73 20 6f  5!=0 then this o
18fe0 70 63 6f 64 65 20 61 6c 73 6f 20 63 68 65 63 6b  pcode also check
18ff0 73 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f  s the schema coo
19000 6b 69 65 20 61 67 61 69 6e 73 74 20 50 33 0a 2a  kie against P3.*
19010 2a 20 61 6e 64 20 74 68 65 20 73 63 68 65 6d 61  * and the schema
19020 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e   generation coun
19030 74 65 72 20 61 67 61 69 6e 73 74 20 50 34 2e 0a  ter against P4..
19040 2a 2a 20 54 68 65 20 63 6f 6f 6b 69 65 20 63 68  ** The cookie ch
19050 61 6e 67 65 73 20 69 74 73 20 76 61 6c 75 65 20  anges its value 
19060 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74  whenever the dat
19070 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68 61  abase schema cha
19080 6e 67 65 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70  nges..** This op
19090 65 72 61 74 69 6f 6e 20 69 73 20 75 73 65 64 20  eration is used 
190a0 74 6f 20 64 65 74 65 63 74 20 77 68 65 6e 20 74  to detect when t
190b0 68 61 74 20 74 68 65 20 63 6f 6f 6b 69 65 20 68  hat the cookie h
190c0 61 73 20 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e  as changed.** an
190d0 64 20 74 68 61 74 20 74 68 65 20 63 75 72 72 65  d that the curre
190e0 6e 74 20 70 72 6f 63 65 73 73 20 6e 65 65 64 73  nt process needs
190f0 20 74 6f 20 72 65 72 65 61 64 20 74 68 65 20 73   to reread the s
19100 63 68 65 6d 61 2e 20 20 49 66 20 74 68 65 20 73  chema.  If the s
19110 63 68 65 6d 61 0a 2a 2a 20 63 6f 6f 6b 69 65 20  chema.** cookie 
19120 69 6e 20 50 33 20 64 69 66 66 65 72 73 20 66 72  in P3 differs fr
19130 6f 6d 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f  om the schema co
19140 6f 6b 69 65 20 69 6e 20 74 68 65 20 64 61 74 61  okie in the data
19150 62 61 73 65 20 68 65 61 64 65 72 20 6f 72 0a 2a  base header or.*
19160 2a 20 69 66 20 74 68 65 20 73 63 68 65 6d 61 20  * if the schema 
19170 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74  generation count
19180 65 72 20 69 6e 20 50 34 20 64 69 66 66 65 72 73  er in P4 differs
19190 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e   from the curren
191a0 74 0a 2a 2a 20 67 65 6e 65 72 61 74 69 6f 6e 20  t.** generation 
191b0 63 6f 75 6e 74 65 72 2c 20 74 68 65 6e 20 61 6e  counter, then an
191c0 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 65   SQLITE_SCHEMA e
191d0 72 72 6f 72 20 69 73 20 72 61 69 73 65 64 20 61  rror is raised a
191e0 6e 64 20 65 78 65 63 75 74 69 6f 6e 0a 2a 2a 20  nd execution.** 
191f0 68 61 6c 74 73 2e 20 20 54 68 65 20 73 71 6c 69  halts.  The sqli
19200 74 65 33 5f 73 74 65 70 28 29 20 77 72 61 70 70  te3_step() wrapp
19210 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d 69 67 68  er function migh
19220 74 20 74 68 65 6e 20 72 65 70 72 65 70 61 72 65  t then reprepare
19230 20 74 68 65 0a 2a 2a 20 73 74 61 74 65 6d 65 6e   the.** statemen
19240 74 20 61 6e 64 20 72 65 72 75 6e 20 69 74 20 66  t and rerun it f
19250 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  rom the beginnin
19260 67 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72  g..*/.case OP_Tr
19270 61 6e 73 61 63 74 69 6f 6e 3a 20 7b 0a 20 20 42  ansaction: {.  B
19280 74 72 65 65 20 2a 70 42 74 3b 0a 20 20 69 6e 74  tree *pBt;.  int
19290 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69 47   iMeta;.  int iG
192a0 65 6e 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  en;..  assert( p
192b0 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20  ->bIsReader );. 
192c0 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
192d0 4f 6e 6c 79 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  Only==0 || pOp->
192e0 70 32 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  p2==0 );.  asser
192f0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
19300 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
19310 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
19320 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
19330 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20  eMask, pOp->p1) 
19340 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  );.  if( pOp->p2
19350 20 26 26 20 28 64 62 2d 3e 66 6c 61 67 73 20 26   && (db->flags &
19360 20 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c   SQLITE_QueryOnl
19370 79 29 21 3d 30 20 29 7b 0a 20 20 20 20 72 63 20  y)!=0 ){.    rc 
19380 3d 20 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c  = SQLITE_READONL
19390 59 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  Y;.    goto abor
193a0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
193b0 20 20 7d 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e    }.  pBt = db->
193c0 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74  aDb[pOp->p1].pBt
193d0 3b 0a 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a  ;..  if( pBt ){.
193e0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
193f0 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28  BtreeBeginTrans(
19400 70 42 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20  pBt, pOp->p2);. 
19410 20 20 20 74 65 73 74 63 61 73 65 28 20 72 63 3d     testcase( rc=
19420 3d 53 51 4c 49 54 45 5f 42 55 53 59 5f 53 4e 41  =SQLITE_BUSY_SNA
19430 50 53 48 4f 54 20 29 3b 0a 20 20 20 20 74 65 73  PSHOT );.    tes
19440 74 63 61 73 65 28 20 72 63 3d 3d 53 51 4c 49 54  tcase( rc==SQLIT
19450 45 5f 42 55 53 59 5f 52 45 43 4f 56 45 52 59 20  E_BUSY_RECOVERY 
19460 29 3b 0a 20 20 20 20 69 66 28 20 28 72 63 26 30  );.    if( (rc&0
19470 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53  xff)==SQLITE_BUS
19480 59 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63  Y ){.      p->pc
19490 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61   = (int)(pOp - a
194a0 4f 70 29 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63  Op);.      p->rc
194b0 20 3d 20 72 63 3b 0a 20 20 20 20 20 20 67 6f 74   = rc;.      got
194c0 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
194d0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72 63 21     }.    if( rc!
194e0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
194f0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
19500 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
19510 20 7d 0a 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   }..    if( pOp-
19520 3e 70 32 20 26 26 20 70 2d 3e 75 73 65 73 53 74  >p2 && p->usesSt
19530 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20 20 20 20 20  mtJournal .     
19540 26 26 20 28 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  && (db->autoComm
19550 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 64  it==0 || db->nVd
19560 62 65 52 65 61 64 3e 31 29 20 0a 20 20 20 20 29  beRead>1) .    )
19570 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
19580 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e  sqlite3BtreeIsIn
19590 54 72 61 6e 73 28 70 42 74 29 20 29 3b 0a 20 20  Trans(pBt) );.  
195a0 20 20 20 20 69 66 28 20 70 2d 3e 69 53 74 61 74      if( p->iStat
195b0 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20  ement==0 ){.    
195c0 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
195d0 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30 20 26 26  nStatement>=0 &&
195e0 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 3e   db->nSavepoint>
195f0 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62  =0 );.        db
19600 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 2b 3b 20  ->nStatement++; 
19610 0a 20 20 20 20 20 20 20 20 70 2d 3e 69 53 74 61  .        p->iSta
19620 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e 53 61  tement = db->nSa
19630 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e 53  vepoint + db->nS
19640 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20  tatement;.      
19650 7d 0a 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  }..      rc = sq
19660 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
19670 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54  nt(db, SAVEPOINT
19680 5f 42 45 47 49 4e 2c 20 70 2d 3e 69 53 74 61 74  _BEGIN, p->iStat
19690 65 6d 65 6e 74 2d 31 29 3b 0a 20 20 20 20 20 20  ement-1);.      
196a0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
196b0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  K ){.        rc 
196c0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65  = sqlite3BtreeBe
196d0 67 69 6e 53 74 6d 74 28 70 42 74 2c 20 70 2d 3e  ginStmt(pBt, p->
196e0 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a 20 20 20  iStatement);.   
196f0 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 53     }..      /* S
19700 74 6f 72 65 20 74 68 65 20 63 75 72 72 65 6e 74  tore the current
19710 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64 61   value of the da
19720 74 61 62 61 73 65 20 68 61 6e 64 6c 65 73 20 64  tabase handles d
19730 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69  eferred constrai
19740 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63 6f 75 6e  nt.      ** coun
19750 74 65 72 2e 20 49 66 20 74 68 65 20 73 74 61 74  ter. If the stat
19760 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
19770 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f  n needs to be ro
19780 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20 20 20 20  lled back,.     
19790 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66   ** the value of
197a0 20 74 68 69 73 20 63 6f 75 6e 74 65 72 20 6e 65   this counter ne
197b0 65 64 73 20 74 6f 20 62 65 20 72 65 73 74 6f 72  eds to be restor
197c0 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20 20  ed too.  */.    
197d0 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 43 6f 6e    p->nStmtDefCon
197e0 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
197f0 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 70 2d 3e  dCons;.      p->
19800 6e 53 74 6d 74 44 65 66 49 6d 6d 43 6f 6e 73 20  nStmtDefImmCons 
19810 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  = db->nDeferredI
19820 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 7d 0a 0a 20  mmCons;.    }.. 
19830 20 20 20 2f 2a 20 47 61 74 68 65 72 20 74 68 65     /* Gather the
19840 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20   schema version 
19850 6e 75 6d 62 65 72 20 66 6f 72 20 63 68 65 63 6b  number for check
19860 69 6e 67 3a 0a 20 20 20 20 2a 2a 20 49 4d 50 4c  ing:.    ** IMPL
19870 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52  EMENTATION-OF: R
19880 2d 33 32 31 39 35 2d 31 39 34 36 35 20 54 68 65  -32195-19465 The
19890 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20   schema version 
198a0 69 73 20 75 73 65 64 20 62 79 20 53 51 4c 69 74  is used by SQLit
198b0 65 0a 20 20 20 20 2a 2a 20 65 61 63 68 20 74 69  e.    ** each ti
198c0 6d 65 20 61 20 71 75 65 72 79 20 69 73 20 65 78  me a query is ex
198d0 65 63 75 74 65 64 20 74 6f 20 65 6e 73 75 72 65  ecuted to ensure
198e0 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 72 6e   that the intern
198f0 61 6c 20 63 61 63 68 65 20 6f 66 20 74 68 65 0a  al cache of the.
19900 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 75 73      ** schema us
19910 65 64 20 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e  ed when compilin
19920 67 20 74 68 65 20 53 51 4c 20 71 75 65 72 79 20  g the SQL query 
19930 6d 61 74 63 68 65 73 20 74 68 65 20 73 63 68 65  matches the sche
19940 6d 61 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a  ma of the.    **
19950 20 64 61 74 61 62 61 73 65 20 61 67 61 69 6e 73   database agains
19960 74 20 77 68 69 63 68 20 74 68 65 20 63 6f 6d 70  t which the comp
19970 69 6c 65 64 20 71 75 65 72 79 20 69 73 20 61 63  iled query is ac
19980 74 75 61 6c 6c 79 20 65 78 65 63 75 74 65 64 2e  tually executed.
19990 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69  .    */.    sqli
199a0 74 65 33 42 74 72 65 65 47 65 74 4d 65 74 61 28  te3BtreeGetMeta(
199b0 70 42 74 2c 20 42 54 52 45 45 5f 53 43 48 45 4d  pBt, BTREE_SCHEM
199c0 41 5f 56 45 52 53 49 4f 4e 2c 20 28 75 33 32 20  A_VERSION, (u32 
199d0 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 20 20 69  *)&iMeta);.    i
199e0 47 65 6e 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f  Gen = db->aDb[pO
199f0 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e  p->p1].pSchema->
19a00 69 47 65 6e 65 72 61 74 69 6f 6e 3b 0a 20 20 7d  iGeneration;.  }
19a10 65 6c 73 65 7b 0a 20 20 20 20 69 47 65 6e 20 3d  else{.    iGen =
19a20 20 69 4d 65 74 61 20 3d 20 30 3b 0a 20 20 7d 0a   iMeta = 0;.  }.
19a30 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
19a40 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 74  5==0 || pOp->p4t
19a50 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
19a60 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
19a70 26 20 28 69 4d 65 74 61 21 3d 70 4f 70 2d 3e 70  & (iMeta!=pOp->p
19a80 33 20 7c 7c 20 69 47 65 6e 21 3d 70 4f 70 2d 3e  3 || iGen!=pOp->
19a90 70 34 2e 69 29 20 29 7b 0a 20 20 20 20 73 71 6c  p4.i) ){.    sql
19aa0 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
19ab0 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20  ->zErrMsg);.    
19ac0 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c  p->zErrMsg = sql
19ad0 69 74 65 33 44 62 53 74 72 44 75 70 28 64 62 2c  ite3DbStrDup(db,
19ae0 20 22 64 61 74 61 62 61 73 65 20 73 63 68 65 6d   "database schem
19af0 61 20 68 61 73 20 63 68 61 6e 67 65 64 22 29 3b  a has changed");
19b00 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 73  .    /* If the s
19b10 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f  chema-cookie fro
19b20 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  m the database f
19b30 69 6c 65 20 6d 61 74 63 68 65 73 20 74 68 65 20  ile matches the 
19b40 63 6f 6f 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73  cookie .    ** s
19b50 74 6f 72 65 64 20 77 69 74 68 20 74 68 65 20 69  tored with the i
19b60 6e 2d 6d 65 6d 6f 72 79 20 72 65 70 72 65 73 65  n-memory represe
19b70 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73  ntation of the s
19b80 63 68 65 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a  chema, do.    **
19b90 20 6e 6f 74 20 72 65 6c 6f 61 64 20 74 68 65 20   not reload the 
19ba0 73 63 68 65 6d 61 20 66 72 6f 6d 20 74 68 65 20  schema from the 
19bb0 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20  database file.. 
19bc0 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20     **.    ** If 
19bd0 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 73 20 61  virtual-tables a
19be0 72 65 20 69 6e 20 75 73 65 2c 20 74 68 69 73 20  re in use, this 
19bf0 69 73 20 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f  is not just an o
19c00 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20  ptimization..   
19c10 20 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62   ** Often, v-tab
19c20 6c 65 73 20 73 74 6f 72 65 20 74 68 65 69 72 20  les store their 
19c30 64 61 74 61 20 69 6e 20 6f 74 68 65 72 20 53 51  data in other SQ
19c40 4c 69 74 65 20 74 61 62 6c 65 73 2c 20 77 68 69  Lite tables, whi
19c50 63 68 0a 20 20 20 20 2a 2a 20 61 72 65 20 71 75  ch.    ** are qu
19c60 65 72 69 65 64 20 66 72 6f 6d 20 77 69 74 68 69  eried from withi
19c70 6e 20 78 4e 65 78 74 28 29 20 61 6e 64 20 6f 74  n xNext() and ot
19c80 68 65 72 20 76 2d 74 61 62 6c 65 20 6d 65 74 68  her v-table meth
19c90 6f 64 73 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a  ods using.    **
19ca0 20 70 72 65 70 61 72 65 64 20 71 75 65 72 69 65   prepared querie
19cb0 73 2e 20 49 66 20 73 75 63 68 20 61 20 71 75 65  s. If such a que
19cc0 72 79 20 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74  ry is out-of-dat
19cd0 65 2c 20 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e  e, we do not wan
19ce0 74 20 74 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63  t to.    ** disc
19cf0 61 72 64 20 74 68 65 20 64 61 74 61 62 61 73 65  ard the database
19d00 20 73 63 68 65 6d 61 2c 20 61 73 20 74 68 65 20   schema, as the 
19d10 75 73 65 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d  user code implem
19d20 65 6e 74 69 6e 67 20 74 68 65 0a 20 20 20 20 2a  enting the.    *
19d30 2a 20 76 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20  * v-table would 
19d40 68 61 76 65 20 74 6f 20 62 65 20 72 65 61 64 79  have to be ready
19d50 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33   for the sqlite3
19d60 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65 20  _vtab structure 
19d70 69 74 73 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f  itself.    ** to
19d80 20 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64 20   be invalidated 
19d90 77 68 65 6e 65 76 65 72 20 73 71 6c 69 74 65 33  whenever sqlite3
19da0 5f 73 74 65 70 28 29 20 69 73 20 63 61 6c 6c 65  _step() is calle
19db0 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20  d from within . 
19dc0 20 20 20 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20     ** a v-table 
19dd0 6d 65 74 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20  method..    */. 
19de0 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 70     if( db->aDb[p
19df0 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d  Op->p1].pSchema-
19e00 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d  >schema_cookie!=
19e10 69 4d 65 74 61 20 29 7b 0a 20 20 20 20 20 20 73  iMeta ){.      s
19e20 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63  qlite3ResetOneSc
19e30 68 65 6d 61 28 64 62 2c 20 70 4f 70 2d 3e 70 31  hema(db, pOp->p1
19e40 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e  );.    }.    p->
19e50 65 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 20  expired = 1;.   
19e60 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 53 43 48   rc = SQLITE_SCH
19e70 45 4d 41 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  EMA;.  }.  break
19e80 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
19e90 52 65 61 64 43 6f 6f 6b 69 65 20 50 31 20 50 32  ReadCookie P1 P2
19ea0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   P3 * *.**.** Re
19eb0 61 64 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72  ad cookie number
19ec0 20 50 33 20 66 72 6f 6d 20 64 61 74 61 62 61 73   P3 from databas
19ed0 65 20 50 31 20 61 6e 64 20 77 72 69 74 65 20 69  e P1 and write i
19ee0 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  t into register 
19ef0 50 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69 73 20  P2..** P3==1 is 
19f00 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  the schema versi
19f10 6f 6e 2e 20 20 50 33 3d 3d 32 20 69 73 20 74 68  on.  P3==2 is th
19f20 65 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61  e database forma
19f30 74 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69 73 20 74  t..** P3==3 is t
19f40 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70  he recommended p
19f50 61 67 65 72 20 63 61 63 68 65 20 73 69 7a 65 2c  ager cache size,
19f60 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20   and so forth.  
19f70 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20  P1==0 is.** the 
19f80 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
19f90 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20  le and P1==1 is 
19fa0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
19fb0 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 0a  e used to store.
19fc0 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ** temporary tab
19fd0 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65  les..**.** There
19fe0 20 6d 75 73 74 20 62 65 20 61 20 72 65 61 64 2d   must be a read-
19ff0 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61  lock on the data
1a000 62 61 73 65 20 28 65 69 74 68 65 72 20 61 20 74  base (either a t
1a010 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75  ransaction.** mu
1a020 73 74 20 62 65 20 73 74 61 72 74 65 64 20 6f 72  st be started or
1a030 20 74 68 65 72 65 20 6d 75 73 74 20 62 65 20 61   there must be a
1a040 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72 29 20 62  n open cursor) b
1a050 65 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74 69  efore.** executi
1a060 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  ng this instruct
1a070 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
1a080 52 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20  ReadCookie: {   
1a090 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
1a0a0 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65  ut2 */.  int iMe
1a0b0 74 61 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20  ta;.  int iDb;. 
1a0c0 20 69 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20   int iCookie;.. 
1a0d0 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52   assert( p->bIsR
1a0e0 65 61 64 65 72 20 29 3b 0a 20 20 69 44 62 20 3d  eader );.  iDb =
1a0f0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f   pOp->p1;.  iCoo
1a100 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  kie = pOp->p3;. 
1a110 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
1a120 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f  <SQLITE_N_BTREE_
1a130 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74  META );.  assert
1a140 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c  ( iDb>=0 && iDb<
1a150 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
1a160 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 44 62  ert( db->aDb[iDb
1a170 5d 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73  ].pBt!=0 );.  as
1a180 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
1a190 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69  (p->btreeMask, i
1a1a0 44 62 29 20 29 3b 0a 0a 20 20 73 71 6c 69 74 65  Db) );..  sqlite
1a1b0 33 42 74 72 65 65 47 65 74 4d 65 74 61 28 64 62  3BtreeGetMeta(db
1a1c0 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20  ->aDb[iDb].pBt, 
1a1d0 69 43 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a 29  iCookie, (u32 *)
1a1e0 26 69 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74 20  &iMeta);.  pOut 
1a1f0 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
1a200 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74  (p, pOp);.  pOut
1a210 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20  ->u.i = iMeta;. 
1a220 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1a230 63 6f 64 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20  code: SetCookie 
1a240 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
1a250 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 6f 6e  ** Write the con
1a260 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
1a270 20 50 33 20 28 69 6e 74 65 72 70 72 65 74 65 64   P3 (interpreted
1a280 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 29 0a   as an integer).
1a290 2a 2a 20 69 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e  ** into cookie n
1a2a0 75 6d 62 65 72 20 50 32 20 6f 66 20 64 61 74 61  umber P2 of data
1a2b0 62 61 73 65 20 50 31 2e 20 20 50 32 3d 3d 31 20  base P1.  P2==1 
1a2c0 69 73 20 74 68 65 20 73 63 68 65 6d 61 20 76 65  is the schema ve
1a2d0 72 73 69 6f 6e 2e 20 20 0a 2a 2a 20 50 32 3d 3d  rsion.  .** P2==
1a2e0 32 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  2 is the databas
1a2f0 65 20 66 6f 72 6d 61 74 2e 20 50 32 3d 3d 33 20  e format. P2==3 
1a300 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64  is the recommend
1a310 65 64 20 70 61 67 65 72 20 63 61 63 68 65 20 0a  ed pager cache .
1a320 2a 2a 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20  ** size, and so 
1a330 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73  forth.  P1==0 is
1a340 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
1a350 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d  se file and P1==
1a360 31 20 69 73 20 74 68 65 20 0a 2a 2a 20 64 61 74  1 is the .** dat
1a370 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20  abase file used 
1a380 74 6f 20 73 74 6f 72 65 20 74 65 6d 70 6f 72 61  to store tempora
1a390 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a  ry tables..**.**
1a3a0 20 41 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d   A transaction m
1a3b0 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20 62  ust be started b
1a3c0 65 66 6f 72 65 20 65 78 65 63 75 74 69 6e 67 20  efore executing 
1a3d0 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a  this opcode..*/.
1a3e0 63 61 73 65 20 4f 50 5f 53 65 74 43 6f 6f 6b 69  case OP_SetCooki
1a3f0 65 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e  e: {       /* in
1a400 33 20 2a 2f 0a 20 20 44 62 20 2a 70 44 62 3b 0a  3 */.  Db *pDb;.
1a410 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1a420 32 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45  2<SQLITE_N_BTREE
1a430 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72  _META );.  asser
1a440 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1a450 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
1a460 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
1a470 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
1a480 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20  eMask, pOp->p1) 
1a490 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
1a4a0 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
1a4b0 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b   pDb = &db->aDb[
1a4c0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1a4d0 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20  rt( pDb->pBt!=0 
1a4e0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c  );.  assert( sql
1a4f0 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48  ite3SchemaMutexH
1a500 65 6c 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  eld(db, pOp->p1,
1a510 20 30 29 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20   0) );.  pIn3 = 
1a520 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
1a530 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
1a540 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 33 29  Integerify(pIn3)
1a550 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20  ;.  /* See note 
1a560 61 62 6f 75 74 20 69 6e 64 65 78 20 73 68 69 66  about index shif
1a570 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43  ting on OP_ReadC
1a580 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20  ookie */.  rc = 
1a590 73 71 6c 69 74 65 33 42 74 72 65 65 55 70 64 61  sqlite3BtreeUpda
1a5a0 74 65 4d 65 74 61 28 70 44 62 2d 3e 70 42 74 2c  teMeta(pDb->pBt,
1a5b0 20 70 4f 70 2d 3e 70 32 2c 20 28 69 6e 74 29 70   pOp->p2, (int)p
1a5c0 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 69 66 28  In3->u.i);.  if(
1a5d0 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f   pOp->p2==BTREE_
1a5e0 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 20 29  SCHEMA_VERSION )
1a5f0 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20 74 68  {.    /* When th
1a600 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  e schema cookie 
1a610 63 68 61 6e 67 65 73 2c 20 72 65 63 6f 72 64 20  changes, record 
1a620 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69 65 20 69  the new cookie i
1a630 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20 20  nternally */.   
1a640 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 73   pDb->pSchema->s
1a650 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20 28  chema_cookie = (
1a660 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20  int)pIn3->u.i;. 
1a670 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20     db->flags |= 
1a680 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61  SQLITE_InternCha
1a690 6e 67 65 73 3b 0a 20 20 7d 65 6c 73 65 20 69 66  nges;.  }else if
1a6a0 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45  ( pOp->p2==BTREE
1a6b0 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 29 7b 0a  _FILE_FORMAT ){.
1a6c0 20 20 20 20 2f 2a 20 52 65 63 6f 72 64 20 63 68      /* Record ch
1a6d0 61 6e 67 65 73 20 69 6e 20 74 68 65 20 66 69 6c  anges in the fil
1a6e0 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20  e format */.    
1a6f0 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69  pDb->pSchema->fi
1a700 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 28 75 38 29  le_format = (u8)
1a710 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20  pIn3->u.i;.  }. 
1a720 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 31 20   if( pOp->p1==1 
1a730 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 76 61 6c 69  ){.    /* Invali
1a740 64 61 74 65 20 61 6c 6c 20 70 72 65 70 61 72 65  date all prepare
1a750 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77 68 65  d statements whe
1a760 6e 65 76 65 72 20 74 68 65 20 54 45 4d 50 20 64  never the TEMP d
1a770 61 74 61 62 61 73 65 0a 20 20 20 20 2a 2a 20 73  atabase.    ** s
1a780 63 68 65 6d 61 20 69 73 20 63 68 61 6e 67 65 64  chema is changed
1a790 2e 20 20 54 69 63 6b 65 74 20 23 31 36 34 34 20  .  Ticket #1644 
1a7a0 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78  */.    sqlite3Ex
1a7b0 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
1a7c0 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20  ements(db);.    
1a7d0 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a  p->expired = 0;.
1a7e0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
1a7f0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52  /* Opcode: OpenR
1a800 65 61 64 20 50 31 20 50 32 20 50 33 20 50 34 20  ead P1 P2 P3 P4 
1a810 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
1a820 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a  root=P2 iDb=P3.*
1a830 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64  *.** Open a read
1a840 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20 66 6f 72  -only cursor for
1a850 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
1a860 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f 74 20 70  ble whose root p
1a870 61 67 65 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20  age is.** P2 in 
1a880 61 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  a database file.
1a890 20 20 54 68 65 20 64 61 74 61 62 61 73 65 20 66    The database f
1a8a0 69 6c 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ile is determine
1a8b0 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d  d by P3. .** P3=
1a8c0 3d 30 20 6d 65 61 6e 73 20 74 68 65 20 6d 61 69  =0 means the mai
1a8d0 6e 20 64 61 74 61 62 61 73 65 2c 20 50 33 3d 3d  n database, P3==
1a8e0 31 20 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61  1 means the data
1a8f0 62 61 73 65 20 75 73 65 64 20 66 6f 72 20 0a 2a  base used for .*
1a900 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  * temporary tabl
1a910 65 73 2c 20 61 6e 64 20 50 33 3e 31 20 6d 65 61  es, and P3>1 mea
1a920 6e 73 20 75 73 65 64 20 74 68 65 20 63 6f 72 72  ns used the corr
1a930 65 73 70 6f 6e 64 69 6e 67 20 61 74 74 61 63 68  esponding attach
1a940 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20  ed.** database. 
1a950 20 47 69 76 65 20 74 68 65 20 6e 65 77 20 63 75   Give the new cu
1a960 72 73 6f 72 20 61 6e 20 69 64 65 6e 74 69 66 69  rsor an identifi
1a970 65 72 20 6f 66 20 50 31 2e 20 20 54 68 65 20 50  er of P1.  The P
1a980 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e 65 65 64  1.** values need
1a990 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69 67 75 6f   not be contiguo
1a9a0 75 73 20 62 75 74 20 61 6c 6c 20 50 31 20 76 61  us but all P1 va
1a9b0 6c 75 65 73 20 73 68 6f 75 6c 64 20 62 65 20 73  lues should be s
1a9c0 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a  mall integers..*
1a9d0 2a 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72  * It is an error
1a9e0 20 66 6f 72 20 50 31 20 74 6f 20 62 65 20 6e 65   for P1 to be ne
1a9f0 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  gative..**.** If
1aa00 20 50 35 21 3d 30 20 74 68 65 6e 20 75 73 65 20   P5!=0 then use 
1aa10 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
1aa20 65 67 69 73 74 65 72 20 50 32 20 61 73 20 74 68  egister P2 as th
1aa30 65 20 72 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74  e root page, not
1aa40 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66  .** the value of
1aa50 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a   P2 itself..**.*
1aa60 2a 20 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20  * There will be 
1aa70 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 74  a read lock on t
1aa80 68 65 20 64 61 74 61 62 61 73 65 20 77 68 65 6e  he database when
1aa90 65 76 65 72 20 74 68 65 72 65 20 69 73 20 61 6e  ever there is an
1aaa0 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73 6f 72 2e  .** open cursor.
1aab0 20 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73    If the databas
1aac0 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65 64 20 70  e was unlocked p
1aad0 72 69 6f 72 20 74 6f 20 74 68 69 73 20 69 6e 73  rior to this ins
1aae0 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e  truction.** then
1aaf0 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 20   a read lock is 
1ab00 61 63 71 75 69 72 65 64 20 61 73 20 70 61 72 74  acquired as part
1ab10 20 6f 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   of this instruc
1ab20 74 69 6f 6e 2e 20 20 41 20 72 65 61 64 0a 2a 2a  tion.  A read.**
1ab30 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20 6f 74 68   lock allows oth
1ab40 65 72 20 70 72 6f 63 65 73 73 65 73 20 74 6f 20  er processes to 
1ab50 72 65 61 64 20 74 68 65 20 64 61 74 61 62 61 73  read the databas
1ab60 65 20 62 75 74 20 70 72 6f 68 69 62 69 74 73 0a  e but prohibits.
1ab70 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20 70 72 6f  ** any other pro
1ab80 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64 69 66 79  cess from modify
1ab90 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73 65  ing the database
1aba0 2e 20 20 54 68 65 20 72 65 61 64 20 6c 6f 63 6b  .  The read lock
1abb0 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73 65 64 20   is.** released 
1abc0 77 68 65 6e 20 61 6c 6c 20 63 75 72 73 6f 72 73  when all cursors
1abd0 20 61 72 65 20 63 6c 6f 73 65 64 2e 20 20 49 66   are closed.  If
1abe0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
1abf0 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a 20 74 6f  n attempts.** to
1ac00 20 67 65 74 20 61 20 72 65 61 64 20 6c 6f 63 6b   get a read lock
1ac10 20 62 75 74 20 66 61 69 6c 73 2c 20 74 68 65 20   but fails, the 
1ac20 73 63 72 69 70 74 20 74 65 72 6d 69 6e 61 74 65  script terminate
1ac30 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20 53 51 4c  s with an.** SQL
1ac40 49 54 45 5f 42 55 53 59 20 65 72 72 6f 72 20 63  ITE_BUSY error c
1ac50 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ode..**.** The P
1ac60 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65  4 value may be e
1ac70 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72  ither an integer
1ac80 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61   (P4_INT32) or a
1ac90 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61   pointer to.** a
1aca0 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75   KeyInfo structu
1acb0 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e  re (P4_KEYINFO).
1acc0 20 49 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e   If it is a poin
1acd0 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f  ter to a KeyInfo
1ace0 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20   .** structure, 
1acf0 74 68 65 6e 20 73 61 69 64 20 73 74 72 75 63 74  then said struct
1ad00 75 72 65 20 64 65 66 69 6e 65 73 20 74 68 65 20  ure defines the 
1ad10 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c  content and coll
1ad20 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e  ating .** sequen
1ad30 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  ce of the index 
1ad40 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74  being opened. Ot
1ad50 68 65 72 77 69 73 65 2c 20 69 66 20 50 34 20 69  herwise, if P4 i
1ad60 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a  s an integer .**
1ad70 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65   value, it is se
1ad80 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  t to the number 
1ad90 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
1ada0 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53  e table..**.** S
1adb0 65 65 20 61 6c 73 6f 3a 20 4f 70 65 6e 57 72 69  ee also: OpenWri
1adc0 74 65 2c 20 52 65 6f 70 65 6e 49 64 78 0a 2a 2f  te, ReopenIdx.*/
1add0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6f 70  ./* Opcode: Reop
1ade0 65 6e 49 64 78 20 50 31 20 50 32 20 50 33 20 50  enIdx P1 P2 P3 P
1adf0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
1ae00 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33  : root=P2 iDb=P3
1ae10 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65  .**.** The Reope
1ae20 6e 49 64 78 20 6f 70 63 6f 64 65 20 77 6f 72 6b  nIdx opcode work
1ae30 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 52  s exactly like R
1ae40 65 61 64 4f 70 65 6e 20 65 78 63 65 70 74 20 74  eadOpen except t
1ae50 68 61 74 20 69 74 20 66 69 72 73 74 0a 2a 2a 20  hat it first.** 
1ae60 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66  checks to see if
1ae70 20 74 68 65 20 63 75 72 73 6f 72 20 6f 6e 20 50   the cursor on P
1ae80 31 20 69 73 20 61 6c 72 65 61 64 79 20 6f 70 65  1 is already ope
1ae90 6e 20 77 69 74 68 20 61 20 72 6f 6f 74 20 70 61  n with a root pa
1aea0 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  ge.** number of 
1aeb0 50 32 20 61 6e 64 20 69 66 20 69 74 20 69 73 20  P2 and if it is 
1aec0 74 68 69 73 20 6f 70 63 6f 64 65 20 62 65 63 6f  this opcode beco
1aed0 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 49 6e  mes a no-op.  In
1aee0 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 0a 2a 2a   other words,.**
1aef0 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 69   if the cursor i
1af00 73 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 2c 20  s already open, 
1af10 64 6f 20 6e 6f 74 20 72 65 6f 70 65 6e 20 69 74  do not reopen it
1af20 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70  ..**.** The Reop
1af30 65 6e 49 64 78 20 6f 70 63 6f 64 65 20 6d 61 79  enIdx opcode may
1af40 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 77 69   only be used wi
1af50 74 68 20 50 35 3d 3d 30 20 61 6e 64 20 77 69 74  th P5==0 and wit
1af60 68 20 50 34 20 62 65 69 6e 67 0a 2a 2a 20 61 20  h P4 being.** a 
1af70 50 34 5f 4b 45 59 49 4e 46 4f 20 6f 62 6a 65 63  P4_KEYINFO objec
1af80 74 2e 20 20 46 75 72 74 68 65 72 6d 6f 72 65 2c  t.  Furthermore,
1af90 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 6d 75   the P3 value mu
1afa0 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 20 61  st be the same a
1afb0 73 0a 2a 2a 20 65 76 65 72 79 20 6f 74 68 65 72  s.** every other
1afc0 20 52 65 6f 70 65 6e 49 64 78 20 6f 72 20 4f 70   ReopenIdx or Op
1afd0 65 6e 52 65 61 64 20 66 6f 72 20 74 68 65 20 73  enRead for the s
1afe0 61 6d 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  ame cursor numbe
1aff0 72 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 74 68 65  r..**.** See the
1b000 20 4f 70 65 6e 52 65 61 64 20 6f 70 63 6f 64 65   OpenRead opcode
1b010 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66   documentation f
1b020 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
1b030 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  formation..*/./*
1b040 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69   Opcode: OpenWri
1b050 74 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  te P1 P2 P3 P4 P
1b060 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  5.** Synopsis: r
1b070 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a  oot=P2 iDb=P3.**
1b080 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2f  .** Open a read/
1b090 77 72 69 74 65 20 63 75 72 73 6f 72 20 6e 61 6d  write cursor nam
1b0a0 65 64 20 50 31 20 6f 6e 20 74 68 65 20 74 61 62  ed P1 on the tab
1b0b0 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73  le or index whos
1b0c0 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 69  e root.** page i
1b0d0 73 20 50 32 2e 20 20 4f 72 20 69 66 20 50 35 21  s P2.  Or if P5!
1b0e0 3d 30 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65  =0 use the conte
1b0f0 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
1b100 32 20 74 6f 20 66 69 6e 64 20 74 68 65 0a 2a 2a  2 to find the.**
1b110 20 72 6f 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a   root page..**.*
1b120 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d  * The P4 value m
1b130 61 79 20 62 65 20 65 69 74 68 65 72 20 61 6e 20  ay be either an 
1b140 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33  integer (P4_INT3
1b150 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20  2) or a pointer 
1b160 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20  to.** a KeyInfo 
1b170 73 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45  structure (P4_KE
1b180 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73  YINFO). If it is
1b190 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
1b1a0 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75  KeyInfo .** stru
1b1b0 63 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64  cture, then said
1b1c0 20 73 74 72 75 63 74 75 72 65 20 64 65 66 69 6e   structure defin
1b1d0 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61  es the content a
1b1e0 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a  nd collating .**
1b1f0 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65   sequence of the
1b200 20 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65   index being ope
1b210 6e 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ned. Otherwise, 
1b220 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65  if P4 is an inte
1b230 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69  ger .** value, i
1b240 74 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  t is set to the 
1b250 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
1b260 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2c 20  s in the table, 
1b270 6f 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 61 72  or to the.** lar
1b280 67 65 73 74 20 69 6e 64 65 78 20 6f 66 20 61 6e  gest index of an
1b290 79 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  y column of the 
1b2a0 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 61 63  table that is ac
1b2b0 74 75 61 6c 6c 79 20 75 73 65 64 2e 0a 2a 2a 0a  tually used..**.
1b2c0 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
1b2d0 69 6f 6e 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  ion works just l
1b2e0 69 6b 65 20 4f 70 65 6e 52 65 61 64 20 65 78 63  ike OpenRead exc
1b2f0 65 70 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e  ept that it open
1b300 73 20 74 68 65 20 63 75 72 73 6f 72 0a 2a 2a 20  s the cursor.** 
1b310 69 6e 20 72 65 61 64 2f 77 72 69 74 65 20 6d 6f  in read/write mo
1b320 64 65 2e 20 20 46 6f 72 20 61 20 67 69 76 65 6e  de.  For a given
1b330 20 74 61 62 6c 65 2c 20 74 68 65 72 65 20 63 61   table, there ca
1b340 6e 20 62 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  n be one or more
1b350 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75   read-only.** cu
1b360 72 73 6f 72 73 20 6f 72 20 61 20 73 69 6e 67 6c  rsors or a singl
1b370 65 20 72 65 61 64 2f 77 72 69 74 65 20 63 75 72  e read/write cur
1b380 73 6f 72 20 62 75 74 20 6e 6f 74 20 62 6f 74 68  sor but not both
1b390 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1b3a0 20 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61   OpenRead..*/.ca
1b3b0 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78 3a  se OP_ReopenIdx:
1b3c0 20 7b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b   {.  int nField;
1b3d0 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  .  KeyInfo *pKey
1b3e0 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a  Info;.  int p2;.
1b3f0 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74    int iDb;.  int
1b400 20 77 72 46 6c 61 67 3b 0a 20 20 42 74 72 65 65   wrFlag;.  Btree
1b410 20 2a 70 58 3b 0a 20 20 56 64 62 65 43 75 72 73   *pX;.  VdbeCurs
1b420 6f 72 20 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a  or *pCur;.  Db *
1b430 70 44 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pDb;..  assert( 
1b440 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f  pOp->p5==0 || pO
1b450 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45  p->p5==OPFLAG_SE
1b460 45 4b 45 51 20 29 3b 0a 20 20 61 73 73 65 72 74  EKEQ );.  assert
1b470 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
1b480 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 70  4_KEYINFO );.  p
1b490 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
1b4a0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70  Op->p1];.  if( p
1b4b0 43 75 72 20 26 26 20 70 43 75 72 2d 3e 70 67 6e  Cur && pCur->pgn
1b4c0 6f 52 6f 6f 74 3d 3d 28 75 33 32 29 70 4f 70 2d  oRoot==(u32)pOp-
1b4d0 3e 70 32 20 29 7b 0a 20 20 20 20 61 73 73 65 72  >p2 ){.    asser
1b4e0 74 28 20 70 43 75 72 2d 3e 69 44 62 3d 3d 70 4f  t( pCur->iDb==pO
1b4f0 70 2d 3e 70 33 20 29 3b 20 20 20 20 20 20 2f 2a  p->p3 );      /*
1b500 20 47 75 61 72 61 6e 74 65 65 64 20 62 79 20 74   Guaranteed by t
1b510 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f  he code generato
1b520 72 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6f 70  r */.    goto op
1b530 65 6e 5f 63 75 72 73 6f 72 5f 73 65 74 5f 68 69  en_cursor_set_hi
1b540 6e 74 73 3b 0a 20 20 7d 0a 20 20 2f 2a 20 49 66  nts;.  }.  /* If
1b550 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 6e   the cursor is n
1b560 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  ot currently ope
1b570 6e 20 6f 72 20 69 73 20 6f 70 65 6e 20 6f 6e 20  n or is open on 
1b580 61 20 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a  a different.  **
1b590 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 66 61 6c   index, then fal
1b5a0 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
1b5b0 50 5f 4f 70 65 6e 52 65 61 64 20 74 6f 20 66 6f  P_OpenRead to fo
1b5c0 72 63 65 20 61 20 72 65 6f 70 65 6e 20 2a 2f 0a  rce a reopen */.
1b5d0 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64  case OP_OpenRead
1b5e0 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 57 72  :.case OP_OpenWr
1b5f0 69 74 65 3a 0a 0a 20 20 61 73 73 65 72 74 28 20  ite:..  assert( 
1b600 28 70 4f 70 2d 3e 70 35 26 28 4f 50 46 4c 41 47  (pOp->p5&(OPFLAG
1b610 5f 50 32 49 53 52 45 47 7c 4f 50 46 4c 41 47 5f  _P2ISREG|OPFLAG_
1b620 42 55 4c 4b 43 53 52 7c 4f 50 46 4c 41 47 5f 53  BULKCSR|OPFLAG_S
1b630 45 45 4b 45 51 29 29 3d 3d 70 4f 70 2d 3e 70 35  EEKEQ))==pOp->p5
1b640 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1b650 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70  p->opcode==OP_Op
1b660 65 6e 57 72 69 74 65 20 7c 7c 20 70 4f 70 2d 3e  enWrite || pOp->
1b670 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35  p5==0 || pOp->p5
1b680 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20  ==OPFLAG_SEEKEQ 
1b690 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
1b6a0 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61  bIsReader );.  a
1b6b0 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
1b6c0 64 65 3d 3d 4f 50 5f 4f 70 65 6e 52 65 61 64 20  de==OP_OpenRead 
1b6d0 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
1b6e0 4f 50 5f 52 65 6f 70 65 6e 49 64 78 0a 20 20 20  OP_ReopenIdx.   
1b6f0 20 20 20 20 20 20 20 7c 7c 20 70 2d 3e 72 65 61         || p->rea
1b700 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 69  dOnly==0 );..  i
1b710 66 28 20 70 2d 3e 65 78 70 69 72 65 64 20 29 7b  f( p->expired ){
1b720 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
1b730 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 3b  _ABORT_ROLLBACK;
1b740 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
1b750 0a 20 20 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 20  .  nField = 0;. 
1b760 20 70 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a 20   pKeyInfo = 0;. 
1b770 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20   p2 = pOp->p2;. 
1b780 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a   iDb = pOp->p3;.
1b790 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30    assert( iDb>=0
1b7a0 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20   && iDb<db->nDb 
1b7b0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
1b7c0 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
1b7d0 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20  Mask, iDb) );.  
1b7e0 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69  pDb = &db->aDb[i
1b7f0 44 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d  Db];.  pX = pDb-
1b800 3e 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20  >pBt;.  assert( 
1b810 70 58 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70  pX!=0 );.  if( p
1b820 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f  Op->opcode==OP_O
1b830 70 65 6e 57 72 69 74 65 20 29 7b 0a 20 20 20 20  penWrite ){.    
1b840 77 72 46 6c 61 67 20 3d 20 31 3b 0a 20 20 20 20  wrFlag = 1;.    
1b850 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53  assert( sqlite3S
1b860 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64  chemaMutexHeld(d
1b870 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20  b, iDb, 0) );.  
1b880 20 20 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65    if( pDb->pSche
1b890 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20  ma->file_format 
1b8a0 3c 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c  < p->minWriteFil
1b8b0 65 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20  eFormat ){.     
1b8c0 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65   p->minWriteFile
1b8d0 46 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53  Format = pDb->pS
1b8e0 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d  chema->file_form
1b8f0 61 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  at;.    }.  }els
1b900 65 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20  e{.    wrFlag = 
1b910 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  0;.  }.  if( pOp
1b920 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 32  ->p5 & OPFLAG_P2
1b930 49 53 52 45 47 20 29 7b 0a 20 20 20 20 61 73 73  ISREG ){.    ass
1b940 65 72 74 28 20 70 32 3e 30 20 29 3b 0a 20 20 20  ert( p2>0 );.   
1b950 20 61 73 73 65 72 74 28 20 70 32 3c 3d 28 70 2d   assert( p2<=(p-
1b960 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
1b970 29 20 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20  ) );.    pIn2 = 
1b980 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 61  &aMem[p2];.    a
1b990 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
1b9a0 64 28 70 49 6e 32 29 20 29 3b 0a 20 20 20 20 61  d(pIn2) );.    a
1b9b0 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c  ssert( (pIn2->fl
1b9c0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d  ags & MEM_Int)!=
1b9d0 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 );.    sqlite3
1b9e0 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
1b9f0 79 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 32 20  y(pIn2);.    p2 
1ba00 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69  = (int)pIn2->u.i
1ba10 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20 70 32 20  ;.    /* The p2 
1ba20 76 61 6c 75 65 20 61 6c 77 61 79 73 20 63 6f 6d  value always com
1ba30 65 73 20 66 72 6f 6d 20 61 20 70 72 69 6f 72 20  es from a prior 
1ba40 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 6f  OP_CreateTable o
1ba50 70 63 6f 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a  pcode and.    **
1ba60 20 74 68 61 74 20 6f 70 63 6f 64 65 20 77 69 6c   that opcode wil
1ba70 6c 20 61 6c 77 61 79 73 20 73 65 74 20 74 68 65  l always set the
1ba80 20 70 32 20 76 61 6c 75 65 20 74 6f 20 32 20 6f   p2 value to 2 o
1ba90 72 20 6d 6f 72 65 20 6f 72 20 65 6c 73 65 20 66  r more or else f
1baa0 61 69 6c 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74  ail..    ** If t
1bab0 68 65 72 65 20 77 65 72 65 20 61 20 66 61 69 6c  here were a fail
1bac0 75 72 65 2c 20 74 68 65 20 70 72 65 70 61 72 65  ure, the prepare
1bad0 64 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c  d statement woul
1bae0 64 20 68 61 76 65 20 68 61 6c 74 65 64 0a 20 20  d have halted.  
1baf0 20 20 2a 2a 20 62 65 66 6f 72 65 20 72 65 61 63    ** before reac
1bb00 68 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75  hing this instru
1bb10 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 69 66  ction. */.    if
1bb20 28 20 4e 45 56 45 52 28 70 32 3c 32 29 20 29 20  ( NEVER(p2<2) ) 
1bb30 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
1bb40 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54  ITE_CORRUPT_BKPT
1bb50 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  ;.      goto abo
1bb60 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1bb70 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28  .    }.  }.  if(
1bb80 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1bb90 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a 20 20 20 20  _KEYINFO ){.    
1bba0 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e  pKeyInfo = pOp->
1bbb0 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  p4.pKeyInfo;.   
1bbc0 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66   assert( pKeyInf
1bbd0 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20  o->enc==ENC(db) 
1bbe0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
1bbf0 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20  KeyInfo->db==db 
1bc00 29 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20  );.    nField = 
1bc10 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64  pKeyInfo->nField
1bc20 2b 70 4b 65 79 49 6e 66 6f 2d 3e 6e 58 46 69 65  +pKeyInfo->nXFie
1bc30 6c 64 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ld;.  }else if( 
1bc40 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1bc50 49 4e 54 33 32 20 29 7b 0a 20 20 20 20 6e 46 69  INT32 ){.    nFi
1bc60 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  eld = pOp->p4.i;
1bc70 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
1bc80 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61  Op->p1>=0 );.  a
1bc90 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 3d 30  ssert( nField>=0
1bca0 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
1bcb0 6e 46 69 65 6c 64 3d 3d 30 20 29 3b 20 20 2f 2a  nField==0 );  /*
1bcc0 20 54 61 62 6c 65 20 77 69 74 68 20 49 4e 54 45   Table with INTE
1bcd0 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20  GER PRIMARY KEY 
1bce0 61 6e 64 20 6e 6f 74 68 69 6e 67 20 65 6c 73 65  and nothing else
1bcf0 20 2a 2f 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c   */.  pCur = all
1bd00 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70  ocateCursor(p, p
1bd10 4f 70 2d 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20  Op->p1, nField, 
1bd20 69 44 62 2c 20 31 29 3b 0a 20 20 69 66 28 20 70  iDb, 1);.  if( p
1bd30 43 75 72 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  Cur==0 ) goto no
1bd40 5f 6d 65 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e 75  _mem;.  pCur->nu
1bd50 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 75  llRow = 1;.  pCu
1bd60 72 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 31  r->isOrdered = 1
1bd70 3b 0a 20 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f  ;.  pCur->pgnoRo
1bd80 6f 74 20 3d 20 70 32 3b 0a 20 20 72 63 20 3d 20  ot = p2;.  rc = 
1bd90 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
1bda0 6f 72 28 70 58 2c 20 70 32 2c 20 77 72 46 6c 61  or(pX, p2, wrFla
1bdb0 67 2c 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75  g, pKeyInfo, pCu
1bdc0 72 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70  r->pCursor);.  p
1bdd0 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20  Cur->pKeyInfo = 
1bde0 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 2f 2a 20 53  pKeyInfo;.  /* S
1bdf0 65 74 20 74 68 65 20 56 64 62 65 43 75 72 73 6f  et the VdbeCurso
1be00 72 2e 69 73 54 61 62 6c 65 20 76 61 72 69 61 62  r.isTable variab
1be10 6c 65 2e 20 50 72 65 76 69 6f 75 73 20 76 65 72  le. Previous ver
1be20 73 69 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20 53 51  sions of.  ** SQ
1be30 4c 69 74 65 20 75 73 65 64 20 74 6f 20 63 68 65  Lite used to che
1be40 63 6b 20 69 66 20 74 68 65 20 72 6f 6f 74 2d 70  ck if the root-p
1be50 61 67 65 20 66 6c 61 67 73 20 77 65 72 65 20 73  age flags were s
1be60 61 6e 65 20 61 74 20 74 68 69 73 20 70 6f 69 6e  ane at this poin
1be70 74 0a 20 20 2a 2a 20 61 6e 64 20 72 65 70 6f 72  t.  ** and repor
1be80 74 20 64 61 74 61 62 61 73 65 20 63 6f 72 72 75  t database corru
1be90 70 74 69 6f 6e 20 69 66 20 74 68 65 79 20 77 65  ption if they we
1bea0 72 65 20 6e 6f 74 2c 20 62 75 74 20 74 68 69 73  re not, but this
1beb0 20 63 68 65 63 6b 20 68 61 73 0a 20 20 2a 2a 20   check has.  ** 
1bec0 73 69 6e 63 65 20 6d 6f 76 65 64 20 69 6e 74 6f  since moved into
1bed0 20 74 68 65 20 62 74 72 65 65 20 6c 61 79 65 72   the btree layer
1bee0 2e 20 20 2a 2f 20 20 0a 20 20 70 43 75 72 2d 3e  .  */  .  pCur->
1bef0 69 73 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70  isTable = pOp->p
1bf00 34 74 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46  4type!=P4_KEYINF
1bf10 4f 3b 0a 0a 6f 70 65 6e 5f 63 75 72 73 6f 72 5f  O;..open_cursor_
1bf20 73 65 74 5f 68 69 6e 74 73 3a 0a 20 20 61 73 73  set_hints:.  ass
1bf30 65 72 74 28 20 4f 50 46 4c 41 47 5f 42 55 4c 4b  ert( OPFLAG_BULK
1bf40 43 53 52 3d 3d 42 54 52 45 45 5f 42 55 4c 4b 4c  CSR==BTREE_BULKL
1bf50 4f 41 44 20 29 3b 0a 20 20 61 73 73 65 72 74 28  OAD );.  assert(
1bf60 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 3d 3d   OPFLAG_SEEKEQ==
1bf70 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 20 29 3b  BTREE_SEEK_EQ );
1bf80 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  .  sqlite3BtreeC
1bf90 75 72 73 6f 72 48 69 6e 74 73 28 70 43 75 72 2d  ursorHints(pCur-
1bfa0 3e 70 43 75 72 73 6f 72 2c 0a 20 20 20 20 20 20  >pCursor,.      
1bfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bfc0 20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 28      (pOp->p5 & (
1bfd0 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 7c 4f  OPFLAG_BULKCSR|O
1bfe0 50 46 4c 41 47 5f 53 45 45 4b 45 51 29 29 29 3b  PFLAG_SEEKEQ)));
1bff0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1c000 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65  Opcode: OpenEphe
1c010 6d 65 72 61 6c 20 50 31 20 50 32 20 2a 20 50 34  meral P1 P2 * P4
1c020 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
1c030 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a   nColumn=P2.**.*
1c040 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72  * Open a new cur
1c050 73 6f 72 20 50 31 20 74 6f 20 61 20 74 72 61 6e  sor P1 to a tran
1c060 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a 20  sient table..** 
1c070 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c  The cursor is al
1c080 77 61 79 73 20 6f 70 65 6e 65 64 20 72 65 61 64  ways opened read
1c090 2f 77 72 69 74 65 20 65 76 65 6e 20 69 66 20 0a  /write even if .
1c0a0 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ** the main data
1c0b0 62 61 73 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c  base is read-onl
1c0c0 79 2e 20 20 54 68 65 20 65 70 68 65 6d 65 72 61  y.  The ephemera
1c0d0 6c 0a 2a 2a 20 74 61 62 6c 65 20 69 73 20 64 65  l.** table is de
1c0e0 6c 65 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61  leted automatica
1c0f0 6c 6c 79 20 77 68 65 6e 20 74 68 65 20 63 75 72  lly when the cur
1c100 73 6f 72 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a  sor is closed..*
1c110 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e  *.** P2 is the n
1c120 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
1c130 20 69 6e 20 74 68 65 20 65 70 68 65 6d 65 72 61   in the ephemera
1c140 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20  l table..** The 
1c150 63 75 72 73 6f 72 20 70 6f 69 6e 74 73 20 74 6f  cursor points to
1c160 20 61 20 42 54 72 65 65 20 74 61 62 6c 65 20 69   a BTree table i
1c170 66 20 50 34 3d 3d 30 20 61 6e 64 20 74 6f 20 61  f P4==0 and to a
1c180 20 42 54 72 65 65 20 69 6e 64 65 78 0a 2a 2a 20   BTree index.** 
1c190 69 66 20 50 34 20 69 73 20 6e 6f 74 20 30 2e 20  if P4 is not 0. 
1c1a0 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55   If P4 is not NU
1c1b0 4c 4c 2c 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  LL, it points to
1c1c0 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
1c1d0 74 75 72 65 0a 2a 2a 20 74 68 61 74 20 64 65 66  ture.** that def
1c1e0 69 6e 65 73 20 74 68 65 20 66 6f 72 6d 61 74 20  ines the format 
1c1f0 6f 66 20 6b 65 79 73 20 69 6e 20 74 68 65 20 69  of keys in the i
1c200 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ndex..**.** The 
1c210 50 35 20 70 61 72 61 6d 65 74 65 72 20 63 61 6e  P5 parameter can
1c220 20 62 65 20 61 20 6d 61 73 6b 20 6f 66 20 74 68   be a mask of th
1c230 65 20 42 54 52 45 45 5f 2a 20 66 6c 61 67 73 20  e BTREE_* flags 
1c240 64 65 66 69 6e 65 64 0a 2a 2a 20 69 6e 20 62 74  defined.** in bt
1c250 72 65 65 2e 68 2e 20 20 54 68 65 73 65 20 66 6c  ree.h.  These fl
1c260 61 67 73 20 63 6f 6e 74 72 6f 6c 20 61 73 70 65  ags control aspe
1c270 63 74 73 20 6f 66 20 74 68 65 20 6f 70 65 72 61  cts of the opera
1c280 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 62  tion of.** the b
1c290 74 72 65 65 2e 20 20 54 68 65 20 42 54 52 45 45  tree.  The BTREE
1c2a0 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 61 6e  _OMIT_JOURNAL an
1c2b0 64 20 42 54 52 45 45 5f 53 49 4e 47 4c 45 20 66  d BTREE_SINGLE f
1c2c0 6c 61 67 73 20 61 72 65 0a 2a 2a 20 61 64 64 65  lags are.** adde
1c2d0 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e  d automatically.
1c2e0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .*/./* Opcode: O
1c2f0 70 65 6e 41 75 74 6f 69 6e 64 65 78 20 50 31 20  penAutoindex P1 
1c300 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
1c310 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50  opsis: nColumn=P
1c320 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  2.**.** This opc
1c330 6f 64 65 20 77 6f 72 6b 73 20 74 68 65 20 73 61  ode works the sa
1c340 6d 65 20 61 73 20 4f 50 5f 4f 70 65 6e 45 70 68  me as OP_OpenEph
1c350 65 6d 65 72 61 6c 2e 20 20 49 74 20 68 61 73 20  emeral.  It has 
1c360 61 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 6e  a.** different n
1c370 61 6d 65 20 74 6f 20 64 69 73 74 69 6e 67 75 69  ame to distingui
1c380 73 68 20 69 74 73 20 75 73 65 2e 20 20 54 61 62  sh its use.  Tab
1c390 6c 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e  les created usin
1c3a0 67 0a 2a 2a 20 62 79 20 74 68 69 73 20 6f 70 63  g.** by this opc
1c3b0 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64  ode will be used
1c3c0 20 66 6f 72 20 61 75 74 6f 6d 61 74 69 63 61 6c   for automatical
1c3d0 6c 79 20 63 72 65 61 74 65 64 20 74 72 61 6e 73  ly created trans
1c3e0 69 65 6e 74 0a 2a 2a 20 69 6e 64 69 63 65 73 20  ient.** indices 
1c3f0 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63 61 73  in joins..*/.cas
1c400 65 20 4f 50 5f 4f 70 65 6e 41 75 74 6f 69 6e 64  e OP_OpenAutoind
1c410 65 78 3a 20 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ex: .case OP_Ope
1c420 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b 0a 20 20  nEphemeral: {.  
1c430 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b  VdbeCursor *pCx;
1c440 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  .  KeyInfo *pKey
1c450 49 6e 66 6f 3b 0a 0a 20 20 73 74 61 74 69 63 20  Info;..  static 
1c460 63 6f 6e 73 74 20 69 6e 74 20 76 66 73 46 6c 61  const int vfsFla
1c470 67 73 20 3d 20 0a 20 20 20 20 20 20 53 51 4c 49  gs = .      SQLI
1c480 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49 54  TE_OPEN_READWRIT
1c490 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
1c4a0 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20 7c 0a 20  _OPEN_CREATE |. 
1c4b0 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
1c4c0 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a 20 20 20  _EXCLUSIVE |.   
1c4d0 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 44     SQLITE_OPEN_D
1c4e0 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20  ELETEONCLOSE |. 
1c4f0 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
1c500 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42 3b 0a 20  _TRANSIENT_DB;. 
1c510 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1c520 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  >=0 );.  assert(
1c530 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20   pOp->p2>=0 );. 
1c540 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43   pCx = allocateC
1c550 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
1c560 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31  , pOp->p2, -1, 1
1c570 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20  );.  if( pCx==0 
1c580 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
1c590 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20   pCx->nullRow = 
1c5a0 31 3b 0a 20 20 70 43 78 2d 3e 69 73 45 70 68 65  1;.  pCx->isEphe
1c5b0 6d 65 72 61 6c 20 3d 20 31 3b 0a 20 20 72 63 20  meral = 1;.  rc 
1c5c0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4f 70  = sqlite3BtreeOp
1c5d0 65 6e 28 64 62 2d 3e 70 56 66 73 2c 20 30 2c 20  en(db->pVfs, 0, 
1c5e0 64 62 2c 20 26 70 43 78 2d 3e 70 42 74 2c 20 0a  db, &pCx->pBt, .
1c5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c600 20 20 20 20 20 20 20 20 42 54 52 45 45 5f 4f 4d          BTREE_OM
1c610 49 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20 42 54 52  IT_JOURNAL | BTR
1c620 45 45 5f 53 49 4e 47 4c 45 20 7c 20 70 4f 70 2d  EE_SINGLE | pOp-
1c630 3e 70 35 2c 20 76 66 73 46 6c 61 67 73 29 3b 0a  >p5, vfsFlags);.
1c640 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1c650 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  _OK ){.    rc = 
1c660 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69  sqlite3BtreeBegi
1c670 6e 54 72 61 6e 73 28 70 43 78 2d 3e 70 42 74 2c  nTrans(pCx->pBt,
1c680 20 31 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72   1);.  }.  if( r
1c690 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
1c6a0 20 20 20 20 2f 2a 20 49 66 20 61 20 74 72 61 6e      /* If a tran
1c6b0 73 69 65 6e 74 20 69 6e 64 65 78 20 69 73 20 72  sient index is r
1c6c0 65 71 75 69 72 65 64 2c 20 63 72 65 61 74 65 20  equired, create 
1c6d0 69 74 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20  it by calling.  
1c6e0 20 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65    ** sqlite3Btre
1c6f0 65 43 72 65 61 74 65 54 61 62 6c 65 28 29 20 77  eCreateTable() w
1c700 69 74 68 20 74 68 65 20 42 54 52 45 45 5f 42 4c  ith the BTREE_BL
1c710 4f 42 4b 45 59 20 66 6c 61 67 20 62 65 66 6f 72  OBKEY flag befor
1c720 65 0a 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67  e.    ** opening
1c730 20 69 74 2e 20 49 66 20 61 20 74 72 61 6e 73 69   it. If a transi
1c740 65 6e 74 20 74 61 62 6c 65 20 69 73 20 72 65 71  ent table is req
1c750 75 69 72 65 64 2c 20 6a 75 73 74 20 75 73 65 20  uired, just use 
1c760 74 68 65 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d  the.    ** autom
1c770 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64  atically created
1c780 20 74 61 62 6c 65 20 77 69 74 68 20 72 6f 6f 74   table with root
1c790 2d 70 61 67 65 20 31 20 28 61 6e 20 42 4c 4f 42  -page 1 (an BLOB
1c7a0 5f 49 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a  _INTKEY table)..
1c7b0 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 28      */.    if( (
1c7c0 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e  pKeyInfo = pOp->
1c7d0 70 34 2e 70 4b 65 79 49 6e 66 6f 29 21 3d 30 20  p4.pKeyInfo)!=0 
1c7e0 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 70 67 6e  ){.      int pgn
1c7f0 6f 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  o;.      assert(
1c800 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1c810 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20  _KEYINFO );.    
1c820 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1c830 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70  reeCreateTable(p
1c840 43 78 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20  Cx->pBt, &pgno, 
1c850 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 7c 20  BTREE_BLOBKEY | 
1c860 70 4f 70 2d 3e 70 35 29 3b 20 0a 20 20 20 20 20  pOp->p5); .     
1c870 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1c880 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  OK ){.        as
1c890 73 65 72 74 28 20 70 67 6e 6f 3d 3d 4d 41 53 54  sert( pgno==MAST
1c8a0 45 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20  ER_ROOT+1 );.   
1c8b0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65       assert( pKe
1c8c0 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b  yInfo->db==db );
1c8d0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1c8e0 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d   pKeyInfo->enc==
1c8f0 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 20 20 20  ENC(db) );.     
1c900 20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f     pCx->pKeyInfo
1c910 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20   = pKeyInfo;.   
1c920 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1c930 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43 78  3BtreeCursor(pCx
1c940 2d 3e 70 42 74 2c 20 70 67 6e 6f 2c 20 31 2c 20  ->pBt, pgno, 1, 
1c950 70 4b 65 79 49 6e 66 6f 2c 20 70 43 78 2d 3e 70  pKeyInfo, pCx->p
1c960 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 7d  Cursor);.      }
1c970 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61  .      pCx->isTa
1c980 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c  ble = 0;.    }el
1c990 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  se{.      rc = s
1c9a0 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1c9b0 72 28 70 43 78 2d 3e 70 42 74 2c 20 4d 41 53 54  r(pCx->pBt, MAST
1c9c0 45 52 5f 52 4f 4f 54 2c 20 31 2c 20 30 2c 20 70  ER_ROOT, 1, 0, p
1c9d0 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  Cx->pCursor);.  
1c9e0 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65      pCx->isTable
1c9f0 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   = 1;.    }.  }.
1ca00 20 20 70 43 78 2d 3e 69 73 4f 72 64 65 72 65 64    pCx->isOrdered
1ca10 20 3d 20 28 70 4f 70 2d 3e 70 35 21 3d 42 54 52   = (pOp->p5!=BTR
1ca20 45 45 5f 55 4e 4f 52 44 45 52 45 44 29 3b 0a 20  EE_UNORDERED);. 
1ca30 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1ca40 63 6f 64 65 3a 20 53 6f 72 74 65 72 4f 70 65 6e  code: SorterOpen
1ca50 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
1ca60 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
1ca70 20 77 6f 72 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f   works like OP_O
1ca80 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 65 78 63  penEphemeral exc
1ca90 65 70 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e  ept that it open
1caa0 73 0a 2a 2a 20 61 20 74 72 61 6e 73 69 65 6e 74  s.** a transient
1cab0 20 69 6e 64 65 78 20 74 68 61 74 20 69 73 20 73   index that is s
1cac0 70 65 63 69 66 69 63 61 6c 6c 79 20 64 65 73 69  pecifically desi
1cad0 67 6e 65 64 20 74 6f 20 73 6f 72 74 20 6c 61 72  gned to sort lar
1cae0 67 65 0a 2a 2a 20 74 61 62 6c 65 73 20 75 73 69  ge.** tables usi
1caf0 6e 67 20 61 6e 20 65 78 74 65 72 6e 61 6c 20 6d  ng an external m
1cb00 65 72 67 65 2d 73 6f 72 74 20 61 6c 67 6f 72 69  erge-sort algori
1cb10 74 68 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 72  thm..**.** If ar
1cb20 67 75 6d 65 6e 74 20 50 33 20 69 73 20 6e 6f 6e  gument P3 is non
1cb30 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69  -zero, then it i
1cb40 6e 64 69 63 61 74 65 73 20 74 68 61 74 20 74 68  ndicates that th
1cb50 65 20 73 6f 72 74 65 72 20 6d 61 79 0a 2a 2a 20  e sorter may.** 
1cb60 61 73 73 75 6d 65 20 74 68 61 74 20 61 20 73 74  assume that a st
1cb70 61 62 6c 65 20 73 6f 72 74 20 63 6f 6e 73 69 64  able sort consid
1cb80 65 72 69 6e 67 20 74 68 65 20 66 69 72 73 74 20  ering the first 
1cb90 50 33 20 66 69 65 6c 64 73 20 6f 66 20 65 61 63  P3 fields of eac
1cba0 68 0a 2a 2a 20 6b 65 79 20 69 73 20 73 75 66 66  h.** key is suff
1cbb0 69 63 69 65 6e 74 20 74 6f 20 70 72 6f 64 75 63  icient to produc
1cbc0 65 20 74 68 65 20 72 65 71 75 69 72 65 64 20 72  e the required r
1cbd0 65 73 75 6c 74 73 2e 0a 2a 2f 0a 63 61 73 65 20  esults..*/.case 
1cbe0 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 3a 20 7b  OP_SorterOpen: {
1cbf0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1cc00 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Cx;..  assert( p
1cc10 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61  Op->p1>=0 );.  a
1cc20 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d  ssert( pOp->p2>=
1cc30 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c  0 );.  pCx = all
1cc40 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70  ocateCursor(p, p
1cc50 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c  Op->p1, pOp->p2,
1cc60 20 2d 31 2c 20 31 29 3b 0a 20 20 69 66 28 20 70   -1, 1);.  if( p
1cc70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  Cx==0 ) goto no_
1cc80 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 70 4b 65 79  mem;.  pCx->pKey
1cc90 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
1cca0 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72  KeyInfo;.  asser
1ccb0 74 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f  t( pCx->pKeyInfo
1ccc0 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 61 73  ->db==db );.  as
1ccd0 73 65 72 74 28 20 70 43 78 2d 3e 70 4b 65 79 49  sert( pCx->pKeyI
1cce0 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62  nfo->enc==ENC(db
1ccf0 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ) );.  rc = sqli
1cd00 74 65 33 56 64 62 65 53 6f 72 74 65 72 49 6e 69  te3VdbeSorterIni
1cd10 74 28 64 62 2c 20 70 4f 70 2d 3e 70 33 2c 20 70  t(db, pOp->p3, p
1cd20 43 78 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  Cx);.  break;.}.
1cd30 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75  ./* Opcode: Sequ
1cd40 65 6e 63 65 54 65 73 74 20 50 31 20 50 32 20 2a  enceTest P1 P2 *
1cd50 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
1cd60 3a 20 69 66 28 20 63 75 72 73 6f 72 5b 50 31 5d  : if( cursor[P1]
1cd70 2e 63 74 72 2b 2b 20 29 20 70 63 20 3d 20 50 32  .ctr++ ) pc = P2
1cd80 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 73  .**.** P1 is a s
1cd90 6f 72 74 65 72 20 63 75 72 73 6f 72 2e 20 49 66  orter cursor. If
1cda0 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 63 6f   the sequence co
1cdb0 75 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e 74  unter is current
1cdc0 6c 79 20 7a 65 72 6f 2c 20 6a 75 6d 70 0a 2a 2a  ly zero, jump.**
1cdd0 20 74 6f 20 50 32 2e 20 52 65 67 61 72 64 6c 65   to P2. Regardle
1cde0 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72  ss of whether or
1cdf0 20 6e 6f 74 20 74 68 65 20 6a 75 6d 70 20 69 73   not the jump is
1ce00 20 74 61 6b 65 6e 2c 20 69 6e 63 72 65 6d 65 6e   taken, incremen
1ce10 74 20 74 68 65 0a 2a 2a 20 74 68 65 20 73 65 71  t the.** the seq
1ce20 75 65 6e 63 65 20 76 61 6c 75 65 2e 0a 2a 2f 0a  uence value..*/.
1ce30 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65  case OP_Sequence
1ce40 54 65 73 74 3a 20 7b 0a 20 20 56 64 62 65 43 75  Test: {.  VdbeCu
1ce50 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61 73 73 65  rsor *pC;.  asse
1ce60 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1ce70 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1ce80 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
1ce90 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1cea0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1ceb0 70 53 6f 72 74 65 72 20 29 3b 0a 20 20 69 66 28  pSorter );.  if(
1cec0 20 28 70 43 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b   (pC->seqCount++
1ced0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f  )==0 ){.    goto
1cee0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
1cef0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1cf00 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 50 73 65 75  Opcode: OpenPseu
1cf10 64 6f 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  do P1 P2 P3 * *.
1cf20 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 50 33 20  ** Synopsis: P3 
1cf30 63 6f 6c 75 6d 6e 73 20 69 6e 20 72 5b 50 32 5d  columns in r[P2]
1cf40 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65  .**.** Open a ne
1cf50 77 20 63 75 72 73 6f 72 20 74 68 61 74 20 70 6f  w cursor that po
1cf60 69 6e 74 73 20 74 6f 20 61 20 66 61 6b 65 20 74  ints to a fake t
1cf70 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69  able that contai
1cf80 6e 73 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72  ns a single.** r
1cf90 6f 77 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65  ow of data.  The
1cfa0 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 61 74   content of that
1cfb0 20 6f 6e 65 20 72 6f 77 20 69 73 20 74 68 65 20   one row is the 
1cfc0 63 6f 6e 74 65 6e 74 20 6f 66 20 6d 65 6d 6f 72  content of memor
1cfd0 79 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32  y.** register P2
1cfe0 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
1cff0 73 2c 20 63 75 72 73 6f 72 20 50 31 20 62 65 63  s, cursor P1 bec
1d000 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73 20 66 6f  omes an alias fo
1d010 72 20 74 68 65 20 0a 2a 2a 20 4d 45 4d 5f 42 6c  r the .** MEM_Bl
1d020 6f 62 20 63 6f 6e 74 65 6e 74 20 63 6f 6e 74 61  ob content conta
1d030 69 6e 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ined in register
1d040 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73 65   P2..**.** A pse
1d050 75 64 6f 2d 74 61 62 6c 65 20 63 72 65 61 74 65  udo-table create
1d060 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65  d by this opcode
1d070 20 69 73 20 75 73 65 64 20 74 6f 20 68 6f 6c 64   is used to hold
1d080 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77   a single.** row
1d090 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 74 68 65   output from the
1d0a0 20 73 6f 72 74 65 72 20 73 6f 20 74 68 61 74 20   sorter so that 
1d0b0 74 68 65 20 72 6f 77 20 63 61 6e 20 62 65 20 64  the row can be d
1d0c0 65 63 6f 6d 70 6f 73 65 64 20 69 6e 74 6f 0a 2a  ecomposed into.*
1d0d0 2a 20 69 6e 64 69 76 69 64 75 61 6c 20 63 6f 6c  * individual col
1d0e0 75 6d 6e 73 20 75 73 69 6e 67 20 74 68 65 20 4f  umns using the O
1d0f0 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e  P_Column opcode.
1d100 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20    The OP_Column 
1d110 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 74 68 65  opcode.** is the
1d120 20 6f 6e 6c 79 20 63 75 72 73 6f 72 20 6f 70 63   only cursor opc
1d130 6f 64 65 20 74 68 61 74 20 77 6f 72 6b 73 20 77  ode that works w
1d140 69 74 68 20 61 20 70 73 65 75 64 6f 2d 74 61 62  ith a pseudo-tab
1d150 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20  le..**.** P3 is 
1d160 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69  the number of fi
1d170 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f  elds in the reco
1d180 72 64 73 20 74 68 61 74 20 77 69 6c 6c 20 62 65  rds that will be
1d190 20 73 74 6f 72 65 64 20 62 79 0a 2a 2a 20 74 68   stored by.** th
1d1a0 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  e pseudo-table..
1d1b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 50  */.case OP_OpenP
1d1c0 73 65 75 64 6f 3a 20 7b 0a 20 20 56 64 62 65 43  seudo: {.  VdbeC
1d1d0 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61  ursor *pCx;..  a
1d1e0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1d1f0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1d200 4f 70 2d 3e 70 33 3e 3d 30 20 29 3b 0a 20 20 70  Op->p3>=0 );.  p
1d210 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  Cx = allocateCur
1d220 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
1d230 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20 30 29 3b  pOp->p3, -1, 0);
1d240 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20  .  if( pCx==0 ) 
1d250 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
1d260 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  Cx->nullRow = 1;
1d270 0a 20 20 70 43 78 2d 3e 70 73 65 75 64 6f 54 61  .  pCx->pseudoTa
1d280 62 6c 65 52 65 67 20 3d 20 70 4f 70 2d 3e 70 32  bleReg = pOp->p2
1d290 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65  ;.  pCx->isTable
1d2a0 20 3d 20 31 3b 0a 20 20 61 73 73 65 72 74 28 20   = 1;.  assert( 
1d2b0 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20  pOp->p5==0 );.  
1d2c0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1d2d0 6f 64 65 3a 20 43 6c 6f 73 65 20 50 31 20 2a 20  ode: Close P1 * 
1d2e0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73  * * *.**.** Clos
1d2f0 65 20 61 20 63 75 72 73 6f 72 20 70 72 65 76 69  e a cursor previ
1d300 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 61 73 20  ously opened as 
1d310 50 31 2e 20 20 49 66 20 50 31 20 69 73 20 6e 6f  P1.  If P1 is no
1d320 74 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 6f  t.** currently o
1d330 70 65 6e 2c 20 74 68 69 73 20 69 6e 73 74 72 75  pen, this instru
1d340 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70  ction is a no-op
1d350 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 6f  ..*/.case OP_Clo
1d360 73 65 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  se: {.  assert( 
1d370 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1d380 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1d390 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
1d3a0 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20 70  eFreeCursor(p, p
1d3b0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1d3c0 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f  );.  p->apCsr[pO
1d3d0 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20 20 62 72  p->p1] = 0;.  br
1d3e0 65 61 6b 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53  eak;.}..#ifdef S
1d3f0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c  QLITE_ENABLE_COL
1d400 55 4d 4e 5f 55 53 45 44 5f 4d 41 53 4b 0a 2f 2a  UMN_USED_MASK./*
1d410 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 73   Opcode: Columns
1d420 55 73 65 64 20 50 31 20 2a 20 2a 20 50 34 20 2a  Used P1 * * P4 *
1d430 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
1d440 64 65 20 28 77 68 69 63 68 20 6f 6e 6c 79 20 65  de (which only e
1d450 78 69 73 74 73 20 69 66 20 53 51 4c 69 74 65 20  xists if SQLite 
1d460 77 61 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74  was compiled wit
1d470 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42  h.** SQLITE_ENAB
1d480 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f 4d  LE_COLUMN_USED_M
1d490 41 53 4b 29 20 69 64 65 6e 74 69 66 69 65 73 20  ASK) identifies 
1d4a0 77 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20 6f 66  which columns of
1d4b0 20 74 68 65 0a 2a 2a 20 74 61 62 6c 65 20 6f 72   the.** table or
1d4c0 20 69 6e 64 65 78 20 66 6f 72 20 63 75 72 73 6f   index for curso
1d4d0 72 20 50 31 20 61 72 65 20 75 73 65 64 2e 20 20  r P1 are used.  
1d4e0 50 34 20 69 73 20 61 20 36 34 2d 62 69 74 20 69  P4 is a 64-bit i
1d4f0 6e 74 65 67 65 72 0a 2a 2a 20 28 50 34 5f 49 4e  nteger.** (P4_IN
1d500 54 36 34 29 20 69 6e 20 77 68 69 63 68 20 74 68  T64) in which th
1d510 65 20 66 69 72 73 74 20 36 33 20 62 69 74 73 20  e first 63 bits 
1d520 61 72 65 20 6f 6e 65 20 66 6f 72 20 65 61 63 68  are one for each
1d530 20 6f 66 20 74 68 65 0a 2a 2a 20 66 69 72 73 74   of the.** first
1d540 20 36 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74   63 columns of t
1d550 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
1d560 78 20 74 68 61 74 20 61 72 65 20 61 63 74 75 61  x that are actua
1d570 6c 6c 79 20 75 73 65 64 0a 2a 2a 20 62 79 20 74  lly used.** by t
1d580 68 65 20 63 75 72 73 6f 72 2e 20 20 54 68 65 20  he cursor.  The 
1d590 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 69  high-order bit i
1d5a0 73 20 73 65 74 20 69 66 20 61 6e 79 20 63 6f 6c  s set if any col
1d5b0 75 6d 6e 20 61 66 74 65 72 0a 2a 2a 20 74 68 65  umn after.** the
1d5c0 20 36 34 74 68 20 69 73 20 75 73 65 64 2e 0a 2a   64th is used..*
1d5d0 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e  /.case OP_Column
1d5e0 73 55 73 65 64 3a 20 7b 0a 20 20 56 64 62 65 43  sUsed: {.  VdbeC
1d5f0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 70 43 20  ursor *pC;.  pC 
1d600 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1d610 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1d620 43 2d 3e 70 43 75 72 73 6f 72 20 29 3b 0a 20 20  C->pCursor );.  
1d630 70 43 2d 3e 6d 61 73 6b 55 73 65 64 20 3d 20 2a  pC->maskUsed = *
1d640 28 75 36 34 2a 29 70 4f 70 2d 3e 70 34 2e 70 49  (u64*)pOp->p4.pI
1d650 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  64;.  break;.}.#
1d660 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65  endif../* Opcode
1d670 3a 20 53 65 65 6b 47 45 20 50 31 20 50 32 20 50  : SeekGE P1 P2 P
1d680 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
1d690 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
1d6a0 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  .**.** If cursor
1d6b0 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e   P1 refers to an
1d6c0 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72   SQL table (B-Tr
1d6d0 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74  ee that uses int
1d6e0 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20  eger keys), .** 
1d6f0 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  use the value in
1d700 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20   register P3 as 
1d710 74 68 65 20 6b 65 79 2e 20 20 49 66 20 63 75 72  the key.  If cur
1d720 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a  sor P1 refers .*
1d730 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65  * to an SQL inde
1d740 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68  x, then P3 is th
1d750 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72  e first in an ar
1d760 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74  ray of P4 regist
1d770 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65  ers .** that are
1d780 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61   used as an unpa
1d790 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
1d7a0 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f  .**.** Repositio
1d7b0 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  n cursor P1 so t
1d7c0 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74  hat  it points t
1d7d0 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65  o the smallest e
1d7e0 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73  ntry that .** is
1d7f0 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72   greater than or
1d800 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
1d810 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72  y value. If ther
1d820 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73  e are no records
1d830 20 0a 2a 2a 20 67 72 65 61 74 65 72 20 74 68 61   .** greater tha
1d840 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
1d850 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20  e key and P2 is 
1d860 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  not zero, then j
1d870 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
1d880 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
1d890 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63  ves the cursor c
1d8a0 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76  onfigured to mov
1d8b0 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64  e in forward ord
1d8c0 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  er,.** from the 
1d8d0 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64  beginning toward
1d8e0 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74   the end.  In ot
1d8f0 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63  her words, the c
1d900 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66  ursor is.** conf
1d910 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65  igured to use Ne
1d920 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a  xt, not Prev..**
1d930 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1d940 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53  und, NotFound, S
1d950 65 65 6b 4c 74 2c 20 53 65 65 6b 47 74 2c 20 53  eekLt, SeekGt, S
1d960 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  eekLe.*/./* Opco
1d970 64 65 3a 20 53 65 65 6b 47 54 20 50 31 20 50 32  de: SeekGT P1 P2
1d980 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
1d990 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
1d9a0 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73  4].**.** If curs
1d9b0 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
1d9c0 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
1d9d0 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
1d9e0 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
1d9f0 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
1da00 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
1da10 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73  s a key. If curs
1da20 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
1da30 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
1da40 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
1da50 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
1da60 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
1da70 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
1da80 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
1da90 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
1daa0 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
1dab0 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
1dac0 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  at  it points to
1dad0 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e   the smallest en
1dae0 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
1daf0 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
1db00 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74   key value. If t
1db10 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
1db20 72 64 73 20 67 72 65 61 74 65 72 20 74 68 61 6e  rds greater than
1db30 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64   .** the key and
1db40 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
1db50 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
1db60 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
1db70 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
1db80 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64  ursor configured
1db90 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77   to move in forw
1dba0 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72  ard order,.** fr
1dbb0 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
1dbc0 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e   toward the end.
1dbd0 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
1dbe0 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  , the cursor is.
1dbf0 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  ** configured to
1dc00 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50   use Next, not P
1dc10 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  rev..**.** See a
1dc20 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
1dc30 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65  ound, SeekLt, Se
1dc40 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a  ekGe, SeekLe.*/.
1dc50 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c  /* Opcode: SeekL
1dc60 54 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 20  T P1 P2 P3 P4 * 
1dc70 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
1dc80 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
1dc90 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1dca0 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74  fers to an SQL t
1dcb0 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61  able (B-Tree tha
1dcc0 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b  t uses integer k
1dcd0 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68  eys), .** use th
1dce0 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
1dcf0 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e  ter P3 as a key.
1dd00 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1dd10 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
1dd20 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
1dd30 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
1dd40 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
1dd50 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
1dd60 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
1dd70 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
1dd80 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
1dd90 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
1dda0 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70  P1 so that  it p
1ddb0 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72  oints to the lar
1ddc0 67 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  gest entry that 
1ddd0 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e  .** is less than
1dde0 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
1ddf0 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
1de00 72 65 63 6f 72 64 73 20 6c 65 73 73 20 74 68 61  records less tha
1de10 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e  n .** the key an
1de20 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
1de30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
1de40 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  2..**.** This op
1de50 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20  code leaves the 
1de60 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65  cursor configure
1de70 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76  d to move in rev
1de80 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66  erse order,.** f
1de90 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61  rom the end towa
1dea0 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  rd the beginning
1deb0 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
1dec0 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  s, the cursor is
1ded0 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74  .** configured t
1dee0 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20  o use Prev, not 
1def0 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  Next..**.** See 
1df00 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
1df10 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53  Found, SeekGt, S
1df20 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f  eekGe, SeekLe.*/
1df30 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
1df40 4c 45 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  LE P1 P2 P3 P4 *
1df50 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
1df60 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
1df70 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1df80 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74  fers to an SQL t
1df90 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61  able (B-Tree tha
1dfa0 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b  t uses integer k
1dfb0 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68  eys), .** use th
1dfc0 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
1dfd0 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e  ter P3 as a key.
1dfe0 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1dff0 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
1e000 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
1e010 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
1e020 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
1e030 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
1e040 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
1e050 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
1e060 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
1e070 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
1e080 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f  P1 so that it po
1e090 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67  ints to the larg
1e0a0 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a  est entry that .
1e0b0 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ** is less than 
1e0c0 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
1e0d0 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68  key value. If th
1e0e0 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
1e0f0 64 73 20 0a 2a 2a 20 6c 65 73 73 20 74 68 61 6e  ds .** less than
1e100 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
1e110 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
1e120 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
1e130 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
1e140 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76  This opcode leav
1e150 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  es the cursor co
1e160 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65  nfigured to move
1e170 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65   in reverse orde
1e180 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65  r,.** from the e
1e190 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20 62 65  nd toward the be
1e1a0 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68  ginning.  In oth
1e1b0 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75  er words, the cu
1e1c0 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69  rsor is.** confi
1e1d0 67 75 72 65 64 20 74 6f 20 75 73 65 20 50 72 65  gured to use Pre
1e1e0 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a  v, not Next..**.
1e1f0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1e200 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65  nd, NotFound, Se
1e210 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65  ekGt, SeekGe, Se
1e220 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ekLt.*/.case OP_
1e230 53 65 65 6b 4c 54 3a 20 20 20 20 20 20 20 20 20  SeekLT:         
1e240 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1e250 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 45 3a 20  case OP_SeekLE: 
1e260 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
1e270 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
1e280 53 65 65 6b 47 45 3a 20 20 20 20 20 20 20 20 20  SeekGE:         
1e290 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1e2a0 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 54 3a 20  case OP_SeekGT: 
1e2b0 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c  {       /* jump,
1e2c0 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65   in3 */.  int re
1e2d0 73 3b 0a 20 20 69 6e 74 20 6f 63 3b 0a 20 20 56  s;.  int oc;.  V
1e2e0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
1e2f0 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
1e300 72 3b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b  r;.  int nField;
1e310 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20  .  i64 iKey;    
1e320 20 20 2f 2a 20 54 68 65 20 72 6f 77 69 64 20 77    /* The rowid w
1e330 65 20 61 72 65 20 74 6f 20 73 65 65 6b 20 74 6f  e are to seek to
1e340 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70   */..  assert( p
1e350 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1e360 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1e370 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1e380 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70 43 20  ->p2!=0 );.  pC 
1e390 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1e3a0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1e3b0 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
1e3c0 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  ( pC->pseudoTabl
1e3d0 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73  eReg==0 );.  ass
1e3e0 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 20 3d  ert( OP_SeekLE =
1e3f0 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 31 20 29 3b  = OP_SeekLT+1 );
1e400 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65  .  assert( OP_Se
1e410 65 6b 47 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c  ekGE == OP_SeekL
1e420 54 2b 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28  T+2 );.  assert(
1e430 20 4f 50 5f 53 65 65 6b 47 54 20 3d 3d 20 4f 50   OP_SeekGT == OP
1e440 5f 53 65 65 6b 4c 54 2b 33 20 29 3b 0a 20 20 61  _SeekLT+3 );.  a
1e450 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64  ssert( pC->isOrd
1e460 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74  ered );.  assert
1e470 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
1e480 20 29 3b 0a 20 20 6f 63 20 3d 20 70 4f 70 2d 3e   );.  oc = pOp->
1e490 6f 70 63 6f 64 65 3b 0a 20 20 70 43 2d 3e 6e 75  opcode;.  pC->nu
1e4a0 6c 6c 52 6f 77 20 3d 20 30 3b 0a 23 69 66 64 65  llRow = 0;.#ifde
1e4b0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
1e4c0 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f   pC->seekOp = pO
1e4d0 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69  p->opcode;.#endi
1e4e0 66 0a 0a 20 20 2f 2a 20 46 6f 72 20 61 20 63 75  f..  /* For a cu
1e4f0 72 73 6f 72 20 77 69 74 68 20 74 68 65 20 42 54  rsor with the BT
1e500 52 45 45 5f 53 45 45 4b 5f 45 51 20 68 69 6e 74  REE_SEEK_EQ hint
1e510 2c 20 6f 6e 6c 79 20 74 68 65 20 4f 50 5f 53 65  , only the OP_Se
1e520 65 6b 47 45 20 61 6e 64 0a 20 20 2a 2a 20 4f 50  ekGE and.  ** OP
1e530 5f 53 65 65 6b 4c 45 20 6f 70 63 6f 64 65 73 20  _SeekLE opcodes 
1e540 61 72 65 20 61 6c 6c 6f 77 65 64 2c 20 61 6e 64  are allowed, and
1e550 20 74 68 65 73 65 20 6d 75 73 74 20 62 65 20 69   these must be i
1e560 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f  mmediately follo
1e570 77 65 64 0a 20 20 2a 2a 20 62 79 20 61 6e 20 4f  wed.  ** by an O
1e580 50 5f 49 64 78 47 54 20 6f 72 20 4f 50 5f 49 64  P_IdxGT or OP_Id
1e590 78 4c 54 20 6f 70 63 6f 64 65 2c 20 72 65 73 70  xLT opcode, resp
1e5a0 65 63 74 69 76 65 6c 79 2c 20 77 69 74 68 20 74  ectively, with t
1e5b0 68 65 20 73 61 6d 65 20 6b 65 79 2e 0a 20 20 2a  he same key..  *
1e5c0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
1e5d0 44 45 42 55 47 0a 20 20 69 66 28 20 73 71 6c 69  DEBUG.  if( sqli
1e5e0 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 48 61  te3BtreeCursorHa
1e5f0 73 48 69 6e 74 28 70 43 2d 3e 70 43 75 72 73 6f  sHint(pC->pCurso
1e600 72 2c 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51  r, BTREE_SEEK_EQ
1e610 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ) ){.    assert(
1e620 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1e630 5f 53 65 65 6b 47 45 20 7c 7c 20 70 4f 70 2d 3e  _SeekGE || pOp->
1e640 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 4c  opcode==OP_SeekL
1e650 45 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  E );.    assert(
1e660 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d   pOp[1].opcode==
1e670 4f 50 5f 49 64 78 4c 54 20 7c 7c 20 70 4f 70 5b  OP_IdxLT || pOp[
1e680 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  1].opcode==OP_Id
1e690 78 47 54 20 29 3b 0a 20 20 20 20 61 73 73 65 72  xGT );.    asser
1e6a0 74 28 20 70 4f 70 5b 31 5d 2e 70 31 3d 3d 70 4f  t( pOp[1].p1==pO
1e6b0 70 5b 30 5d 2e 70 31 20 29 3b 0a 20 20 20 20 61  p[0].p1 );.    a
1e6c0 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 32  ssert( pOp[1].p2
1e6d0 3d 3d 70 4f 70 5b 30 5d 2e 70 32 20 29 3b 0a 20  ==pOp[0].p2 );. 
1e6e0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31     assert( pOp[1
1e6f0 5d 2e 70 33 3d 3d 70 4f 70 5b 30 5d 2e 70 33 20  ].p3==pOp[0].p3 
1e700 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
1e710 4f 70 5b 31 5d 2e 70 34 2e 69 3d 3d 70 4f 70 5b  Op[1].p4.i==pOp[
1e720 30 5d 2e 70 34 2e 69 20 29 3b 0a 20 20 7d 0a 23  0].p4.i );.  }.#
1e730 65 6e 64 69 66 0a 20 0a 20 20 69 66 28 20 70 43  endif. .  if( pC
1e740 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20 20  ->isTable ){.   
1e750 20 2f 2a 20 54 68 65 20 69 6e 70 75 74 20 76 61   /* The input va
1e760 6c 75 65 20 69 6e 20 50 33 20 6d 69 67 68 74 20  lue in P3 might 
1e770 62 65 20 6f 66 20 61 6e 79 20 74 79 70 65 3a 20  be of any type: 
1e780 69 6e 74 65 67 65 72 2c 20 72 65 61 6c 2c 20 73  integer, real, s
1e790 74 72 69 6e 67 2c 0a 20 20 20 20 2a 2a 20 62 6c  tring,.    ** bl
1e7a0 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20 42 75  ob, or NULL.  Bu
1e7b0 74 20 69 74 20 6e 65 65 64 73 20 74 6f 20 62 65  t it needs to be
1e7c0 20 61 6e 20 69 6e 74 65 67 65 72 20 62 65 66 6f   an integer befo
1e7d0 72 65 20 77 65 20 63 61 6e 20 64 6f 0a 20 20 20  re we can do.   
1e7e0 20 2a 2a 20 74 68 65 20 73 65 65 6b 2c 20 73 6f   ** the seek, so
1e7f0 20 63 6f 6e 76 65 72 74 20 69 74 2e 20 2a 2f 0a   convert it. */.
1e800 20 20 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d      pIn3 = &aMem
1e810 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 69  [pOp->p3];.    i
1e820 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  f( (pIn3->flags 
1e830 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
1e840 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d  eal|MEM_Str))==M
1e850 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20  EM_Str ){.      
1e860 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
1e870 6e 69 74 79 28 70 49 6e 33 2c 20 30 29 3b 0a 20  nity(pIn3, 0);. 
1e880 20 20 20 7d 0a 20 20 20 20 69 4b 65 79 20 3d 20     }.    iKey = 
1e890 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
1e8a0 6c 75 65 28 70 49 6e 33 29 3b 0a 0a 20 20 20 20  lue(pIn3);..    
1e8b0 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c  /* If the P3 val
1e8c0 75 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20  ue could not be 
1e8d0 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61  converted into a
1e8e0 6e 20 69 6e 74 65 67 65 72 20 77 69 74 68 6f 75  n integer withou
1e8f0 74 0a 20 20 20 20 2a 2a 20 6c 6f 73 73 20 6f 66  t.    ** loss of
1e900 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68   information, th
1e910 65 6e 20 73 70 65 63 69 61 6c 20 70 72 6f 63 65  en special proce
1e920 73 73 69 6e 67 20 69 73 20 72 65 71 75 69 72 65  ssing is require
1e930 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20  d... */.    if( 
1e940 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
1e950 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20  EM_Int)==0 ){.  
1e960 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66      if( (pIn3->f
1e970 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29  lags & MEM_Real)
1e980 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  ==0 ){.        /
1e990 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75  * If the P3 valu
1e9a0 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76  e cannot be conv
1e9b0 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b  erted into any k
1e9c0 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c  ind of a number,
1e9d0 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e  .        ** then
1e9e0 20 74 68 65 20 73 65 65 6b 20 69 73 20 6e 6f 74   the seek is not
1e9f0 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75   possible, so ju
1ea00 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20  mp to P2 */.    
1ea10 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
1ea20 6b 65 6e 28 31 2c 32 29 3b 20 67 6f 74 6f 20 6a  ken(1,2); goto j
1ea30 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20  ump_to_p2;.     
1ea40 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
1ea50 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74  }..      /* If t
1ea60 68 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e  he approximation
1ea70 20 69 4b 65 79 20 69 73 20 6c 61 72 67 65 72 20   iKey is larger 
1ea80 74 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20  than the actual 
1ea90 72 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20  real search.    
1eaa0 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74    ** term, subst
1eab0 69 74 75 74 65 20 3e 3d 20 66 6f 72 20 3e 20 61  itute >= for > a
1eac0 6e 64 20 3c 20 66 6f 72 20 3c 3d 2e 20 65 2e 67  nd < for <=. e.g
1ead0 2e 20 69 66 20 74 68 65 20 73 65 61 72 63 68 20  . if the search 
1eae0 74 65 72 6d 0a 20 20 20 20 20 20 2a 2a 20 69 73  term.      ** is
1eaf0 20 34 2e 39 20 61 6e 64 20 74 68 65 20 69 6e 74   4.9 and the int
1eb00 65 67 65 72 20 61 70 70 72 6f 78 69 6d 61 74 69  eger approximati
1eb10 6f 6e 20 35 3a 0a 20 20 20 20 20 20 2a 2a 0a 20  on 5:.      **. 
1eb20 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 28       **        (
1eb30 78 20 3e 20 20 34 2e 39 29 20 20 20 20 2d 3e 20  x >  4.9)    -> 
1eb40 20 20 20 20 28 78 20 3e 3d 20 35 29 0a 20 20 20      (x >= 5).   
1eb50 20 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78 20     **        (x 
1eb60 3c 3d 20 34 2e 39 29 20 20 20 20 2d 3e 20 20 20  <= 4.9)    ->   
1eb70 20 20 28 78 20 3c 20 20 35 29 0a 20 20 20 20 20    (x <  5).     
1eb80 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 49   */.      if( pI
1eb90 6e 33 2d 3e 75 2e 72 3c 28 64 6f 75 62 6c 65 29  n3->u.r<(double)
1eba0 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20  iKey ){.        
1ebb0 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47  assert( OP_SeekG
1ebc0 45 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 2d 31 29  E==(OP_SeekGT-1)
1ebd0 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
1ebe0 72 74 28 20 4f 50 5f 53 65 65 6b 4c 54 3d 3d 28  rt( OP_SeekLT==(
1ebf0 4f 50 5f 53 65 65 6b 4c 45 2d 31 29 20 29 3b 0a  OP_SeekLE-1) );.
1ec00 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1ec10 28 4f 50 5f 53 65 65 6b 4c 45 20 26 20 30 78 30  (OP_SeekLE & 0x0
1ec20 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54  001)==(OP_SeekGT
1ec30 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20   & 0x0001) );.  
1ec40 20 20 20 20 20 20 69 66 28 20 28 6f 63 20 26 20        if( (oc & 
1ec50 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65  0x0001)==(OP_See
1ec60 6b 47 54 20 26 20 30 78 30 30 30 31 29 20 29 20  kGT & 0x0001) ) 
1ec70 6f 63 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  oc--;.      }.. 
1ec80 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 61       /* If the a
1ec90 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65  pproximation iKe
1eca0 79 20 69 73 20 73 6d 61 6c 6c 65 72 20 74 68 61  y is smaller tha
1ecb0 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72 65 61  n the actual rea
1ecc0 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20 20 2a  l search.      *
1ecd0 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69 74 75  * term, substitu
1ece0 74 65 20 3c 3d 20 66 6f 72 20 3c 20 61 6e 64 20  te <= for < and 
1ecf0 3e 20 66 6f 72 20 3e 3d 2e 20 20 2a 2f 0a 20 20  > for >=.  */.  
1ed00 20 20 20 20 65 6c 73 65 20 69 66 28 20 70 49 6e      else if( pIn
1ed10 33 2d 3e 75 2e 72 3e 28 64 6f 75 62 6c 65 29 69  3->u.r>(double)i
1ed20 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61  Key ){.        a
1ed30 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45  ssert( OP_SeekLE
1ed40 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 2b 31 29 20  ==(OP_SeekLT+1) 
1ed50 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
1ed60 74 28 20 4f 50 5f 53 65 65 6b 47 54 3d 3d 28 4f  t( OP_SeekGT==(O
1ed70 50 5f 53 65 65 6b 47 45 2b 31 29 20 29 3b 0a 20  P_SeekGE+1) );. 
1ed80 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28         assert( (
1ed90 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30 78 30 30  OP_SeekLT & 0x00
1eda0 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 20  01)==(OP_SeekGE 
1edb0 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20  & 0x0001) );.   
1edc0 20 20 20 20 20 69 66 28 20 28 6f 63 20 26 20 30       if( (oc & 0
1edd0 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b  x0001)==(OP_Seek
1ede0 4c 54 20 26 20 30 78 30 30 30 31 29 20 29 20 6f  LT & 0x0001) ) o
1edf0 63 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  c++;.      }.   
1ee00 20 7d 20 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   } .    rc = sql
1ee10 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
1ee20 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72  npacked(pC->pCur
1ee30 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 69 4b 65  sor, 0, (u64)iKe
1ee40 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20  y, 0, &res);.   
1ee50 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65   pC->movetoTarge
1ee60 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73  t = iKey;  /* Us
1ee70 65 64 20 62 79 20 4f 50 5f 44 65 6c 65 74 65 20  ed by OP_Delete 
1ee80 2a 2f 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53  */.    if( rc!=S
1ee90 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1eea0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1eeb0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
1eec0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 46  .  }else{.    nF
1eed0 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69  ield = pOp->p4.i
1eee0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
1eef0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
1ef00 54 33 32 20 29 3b 0a 20 20 20 20 61 73 73 65 72  T32 );.    asser
1ef10 74 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20  t( nField>0 );. 
1ef20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20     r.pKeyInfo = 
1ef30 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
1ef40 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31    r.nField = (u1
1ef50 36 29 6e 46 69 65 6c 64 3b 0a 0a 20 20 20 20 2f  6)nField;..    /
1ef60 2a 20 54 68 65 20 6e 65 78 74 20 6c 69 6e 65 20  * The next line 
1ef70 6f 66 20 63 6f 64 65 20 63 6f 6d 70 75 74 65 73  of code computes
1ef80 20 61 73 20 66 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c   as follows, onl
1ef90 79 20 66 61 73 74 65 72 3a 0a 20 20 20 20 2a 2a  y faster:.    **
1efa0 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65     if( oc==OP_Se
1efb0 65 6b 47 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53  ekGT || oc==OP_S
1efc0 65 65 6b 4c 45 20 29 7b 0a 20 20 20 20 2a 2a 20  eekLE ){.    ** 
1efd0 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63      r.default_rc
1efe0 20 3d 20 2d 31 3b 0a 20 20 20 20 2a 2a 20 20 20   = -1;.    **   
1eff0 7d 65 6c 73 65 7b 0a 20 20 20 20 2a 2a 20 20 20  }else{.    **   
1f000 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d    r.default_rc =
1f010 20 2b 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 0a   +1;.    **   }.
1f020 20 20 20 20 2a 2f 0a 20 20 20 20 72 2e 64 65 66      */.    r.def
1f030 61 75 6c 74 5f 72 63 20 3d 20 28 28 31 20 26 20  ault_rc = ((1 & 
1f040 28 6f 63 20 2d 20 4f 50 5f 53 65 65 6b 4c 54 29  (oc - OP_SeekLT)
1f050 29 20 3f 20 2d 31 20 3a 20 2b 31 29 3b 0a 20 20  ) ? -1 : +1);.  
1f060 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50    assert( oc!=OP
1f070 5f 53 65 65 6b 47 54 20 7c 7c 20 72 2e 64 65 66  _SeekGT || r.def
1f080 61 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20  ault_rc==-1 );. 
1f090 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f     assert( oc!=O
1f0a0 50 5f 53 65 65 6b 4c 45 20 7c 7c 20 72 2e 64 65  P_SeekLE || r.de
1f0b0 66 61 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a  fault_rc==-1 );.
1f0c0 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d      assert( oc!=
1f0d0 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20 72 2e 64  OP_SeekGE || r.d
1f0e0 65 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b  efault_rc==+1 );
1f0f0 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21  .    assert( oc!
1f100 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 72 2e  =OP_SeekLT || r.
1f110 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29  default_rc==+1 )
1f120 3b 0a 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20  ;..    r.aMem = 
1f130 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
1f140 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
1f150 42 55 47 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b  BUG.    { int i;
1f160 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46   for(i=0; i<r.nF
1f170 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72  ield; i++) asser
1f180 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72  t( memIsValid(&r
1f190 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23  .aMem[i]) ); }.#
1f1a0 65 6e 64 69 66 0a 20 20 20 20 45 78 70 61 6e 64  endif.    Expand
1f1b0 42 6c 6f 62 28 72 2e 61 4d 65 6d 29 3b 0a 20 20  Blob(r.aMem);.  
1f1c0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1f1d0 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
1f1e0 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  d(pC->pCursor, &
1f1f0 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a  r, 0, 0, &res);.
1f200 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1f210 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67  TE_OK ){.      g
1f220 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1f230 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  _error;.    }.  
1f240 7d 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64  }.  pC->deferred
1f250 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43  Moveto = 0;.  pC
1f260 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
1f270 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66  CACHE_STALE;.#if
1f280 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
1f290 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68    sqlite3_search
1f2a0 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
1f2b0 0a 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65  .  if( oc>=OP_Se
1f2c0 65 6b 47 45 20 29 7b 20 20 61 73 73 65 72 74 28  ekGE ){  assert(
1f2d0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c   oc==OP_SeekGE |
1f2e0 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20  | oc==OP_SeekGT 
1f2f0 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 3c 30  );.    if( res<0
1f300 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f   || (res==0 && o
1f310 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 29 20 29 7b  c==OP_SeekGT) ){
1f320 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a  .      res = 0;.
1f330 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1f340 65 33 42 74 72 65 65 4e 65 78 74 28 70 43 2d 3e  e3BtreeNext(pC->
1f350 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
1f360 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
1f370 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
1f380 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1f390 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  r;.    }else{.  
1f3a0 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20      res = 0;.   
1f3b0 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
1f3c0 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53  assert( oc==OP_S
1f3d0 65 65 6b 4c 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekLT || oc==OP_
1f3e0 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20 69 66  SeekLE );.    if
1f3f0 28 20 72 65 73 3e 30 20 7c 7c 20 28 72 65 73 3d  ( res>0 || (res=
1f400 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65  =0 && oc==OP_See
1f410 6b 4c 54 29 20 29 7b 0a 20 20 20 20 20 20 72 65  kLT) ){.      re
1f420 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20  s = 0;.      rc 
1f430 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72  = sqlite3BtreePr
1f440 65 76 69 6f 75 73 28 70 43 2d 3e 70 43 75 72 73  evious(pC->pCurs
1f450 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20  or, &res);.     
1f460 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1f470 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
1f480 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1f490 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f    }else{.      /
1f4a0 2a 20 72 65 73 20 6d 69 67 68 74 20 62 65 20 6e  * res might be n
1f4b0 65 67 61 74 69 76 65 20 62 65 63 61 75 73 65 20  egative because 
1f4c0 74 68 65 20 74 61 62 6c 65 20 69 73 20 65 6d 70  the table is emp
1f4d0 74 79 2e 20 20 43 68 65 63 6b 20 74 6f 0a 20 20  ty.  Check to.  
1f4e0 20 20 20 20 2a 2a 20 73 65 65 20 69 66 20 74 68      ** see if th
1f4f0 69 73 20 69 73 20 74 68 65 20 63 61 73 65 2e 0a  is is the case..
1f500 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 72        */.      r
1f510 65 73 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  es = sqlite3Btre
1f520 65 45 6f 66 28 70 43 2d 3e 70 43 75 72 73 6f 72  eEof(pC->pCursor
1f530 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61  );.    }.  }.  a
1f540 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
1f550 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68   );.  VdbeBranch
1f560 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b  Taken(res!=0,2);
1f570 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20  .  if( res ){.  
1f580 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
1f590 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
1f5a0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
1f5b0 65 6b 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ek P1 P2 * * *.*
1f5c0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 6e 74  * Synopsis:  int
1f5d0 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  key=r[P2].**.** 
1f5e0 50 31 20 69 73 20 61 6e 20 6f 70 65 6e 20 74 61  P1 is an open ta
1f5f0 62 6c 65 20 63 75 72 73 6f 72 20 61 6e 64 20 50  ble cursor and P
1f600 32 20 69 73 20 61 20 72 6f 77 69 64 20 69 6e 74  2 is a rowid int
1f610 65 67 65 72 2e 20 20 41 72 72 61 6e 67 65 0a 2a  eger.  Arrange.*
1f620 2a 20 66 6f 72 20 50 31 20 74 6f 20 6d 6f 76 65  * for P1 to move
1f630 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
1f640 74 73 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20  ts to the rowid 
1f650 67 69 76 65 6e 20 62 79 20 50 32 2e 0a 2a 2a 0a  given by P2..**.
1f660 2a 2a 20 54 68 69 73 20 69 73 20 61 63 74 75 61  ** This is actua
1f670 6c 6c 79 20 61 20 64 65 66 65 72 72 65 64 20 73  lly a deferred s
1f680 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63  eek.  Nothing ac
1f690 74 75 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 75  tually happens u
1f6a0 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73  ntil.** the curs
1f6b0 6f 72 20 69 73 20 75 73 65 64 20 74 6f 20 72 65  or is used to re
1f6c0 61 64 20 61 20 72 65 63 6f 72 64 2e 20 20 54 68  ad a record.  Th
1f6d0 61 74 20 77 61 79 2c 20 69 66 20 6e 6f 20 72 65  at way, if no re
1f6e0 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f  ads.** occur, no
1f6f0 20 75 6e 6e 65 63 65 73 73 61 72 79 20 49 2f 4f   unnecessary I/O
1f700 20 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 63 61 73   happens..*/.cas
1f710 65 20 4f 50 5f 53 65 65 6b 3a 20 7b 20 20 20 20  e OP_Seek: {    
1f720 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65  /* in2 */.  Vdbe
1f730 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61  Cursor *pC;..  a
1f740 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1f750 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1f760 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
1f770 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1f780 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1f790 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
1f7a0 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
1f7b0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1f7c0 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 70  ->isTable );.  p
1f7d0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  C->nullRow = 0;.
1f7e0 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
1f7f0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43 2d 3e 6d  Op->p2];.  pC->m
1f800 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 73 71  ovetoTarget = sq
1f810 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
1f820 65 28 70 49 6e 32 29 3b 0a 20 20 70 43 2d 3e 64  e(pIn2);.  pC->d
1f830 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
1f840 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 20 20  1;.  break;.}.  
1f850 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6f 75  ../* Opcode: Fou
1f860 6e 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  nd P1 P2 P3 P4 *
1f870 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
1f880 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
1f890 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72   If P4==0 then r
1f8a0 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73  egister P3 holds
1f8b0 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63   a blob construc
1f8c0 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72  ted by MakeRecor
1f8d0 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74  d.  If.** P4>0 t
1f8e0 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
1f8f0 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20  is the first of 
1f900 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61  P4 registers tha
1f910 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  t form an unpack
1f920 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a  ed.** record..**
1f930 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73  .** Cursor P1 is
1f940 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72   on an index btr
1f950 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f  ee.  If the reco
1f960 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  rd identified by
1f970 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73   P3 and P4.** is
1f980 20 61 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79   a prefix of any
1f990 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65   entry in P1 the
1f9a0 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65  n a jump is made
1f9b0 20 74 6f 20 50 32 20 61 6e 64 0a 2a 2a 20 50 31   to P2 and.** P1
1f9c0 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e   is left pointin
1f9d0 67 20 61 74 20 74 68 65 20 6d 61 74 63 68 69 6e  g at the matchin
1f9e0 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54  g entry..**.** T
1f9f0 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65  his operation le
1fa00 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
1fa10 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65  in a state where
1fa20 20 69 74 20 63 61 6e 20 62 65 0a 2a 2a 20 61 64   it can be.** ad
1fa30 76 61 6e 63 65 64 20 69 6e 20 74 68 65 20 66 6f  vanced in the fo
1fa40 72 77 61 72 64 20 64 69 72 65 63 74 69 6f 6e 2e  rward direction.
1fa50 20 20 54 68 65 20 4e 65 78 74 20 69 6e 73 74 72    The Next instr
1fa60 75 63 74 69 6f 6e 20 77 69 6c 6c 20 77 6f 72 6b  uction will work
1fa70 2c 0a 2a 2a 20 62 75 74 20 6e 6f 74 20 74 68 65  ,.** but not the
1fa80 20 50 72 65 76 20 69 6e 73 74 72 75 63 74 69 6f   Prev instructio
1fa90 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  n..**.** See als
1faa0 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43  o: NotFound, NoC
1fab0 6f 6e 66 6c 69 63 74 2c 20 4e 6f 74 45 78 69 73  onflict, NotExis
1fac0 74 73 2e 20 53 65 65 6b 47 65 0a 2a 2f 0a 2f 2a  ts. SeekGe.*/./*
1fad0 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e   Opcode: NotFoun
1fae0 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  d P1 P2 P3 P4 *.
1faf0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
1fb00 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
1fb10 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65  If P4==0 then re
1fb20 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20  gister P3 holds 
1fb30 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74  a blob construct
1fb40 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64  ed by MakeRecord
1fb50 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68  .  If.** P4>0 th
1fb60 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69  en register P3 i
1fb70 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20 50  s the first of P
1fb80 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61 74  4 registers that
1fb90 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
1fba0 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20  d.** record..** 
1fbb0 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73  .** Cursor P1 is
1fbc0 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72   on an index btr
1fbd0 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f  ee.  If the reco
1fbe0 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  rd identified by
1fbf0 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73   P3 and P4.** is
1fc00 20 6e 6f 74 20 74 68 65 20 70 72 65 66 69 78 20   not the prefix 
1fc10 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20  of any entry in 
1fc20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69  P1 then a jump i
1fc30 73 20 6d 61 64 65 20 74 6f 20 50 32 2e 20 20 49  s made to P2.  I
1fc40 66 20 50 31 20 0a 2a 2a 20 64 6f 65 73 20 63 6f  f P1 .** does co
1fc50 6e 74 61 69 6e 20 61 6e 20 65 6e 74 72 79 20 77  ntain an entry w
1fc60 68 6f 73 65 20 70 72 65 66 69 78 20 6d 61 74 63  hose prefix matc
1fc70 68 65 73 20 74 68 65 20 50 33 2f 50 34 20 72 65  hes the P3/P4 re
1fc80 63 6f 72 64 20 74 68 65 6e 20 63 6f 6e 74 72 6f  cord then contro
1fc90 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74 68 72 6f 75  l.** falls throu
1fca0 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
1fcb0 6e 73 74 72 75 63 74 69 6f 6e 20 61 6e 64 20 50  nstruction and P
1fcc0 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69  1 is left pointi
1fcd0 6e 67 20 61 74 20 74 68 65 0a 2a 2a 20 6d 61 74  ng at the.** mat
1fce0 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a  ching entry..**.
1fcf0 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f  ** This operatio
1fd00 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  n leaves the cur
1fd10 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77  sor in a state w
1fd20 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62  here it cannot b
1fd30 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e  e.** advanced in
1fd40 20 65 69 74 68 65 72 20 64 69 72 65 63 74 69 6f   either directio
1fd50 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  n.  In other wor
1fd60 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64  ds, the Next and
1fd70 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73   Prev.** opcodes
1fd80 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74   do not work aft
1fd90 65 72 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f  er this operatio
1fda0 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  n..**.** See als
1fdb0 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69  o: Found, NotExi
1fdc0 73 74 73 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a  sts, NoConflict.
1fdd0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  */./* Opcode: No
1fde0 43 6f 6e 66 6c 69 63 74 20 50 31 20 50 32 20 50  Conflict P1 P2 P
1fdf0 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
1fe00 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
1fe10 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20  .**.** If P4==0 
1fe20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
1fe30 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f   holds a blob co
1fe40 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b  nstructed by Mak
1fe50 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20  eRecord.  If.** 
1fe60 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74  P4>0 then regist
1fe70 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72  er P3 is the fir
1fe80 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  st of P4 registe
1fe90 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20  rs that form an 
1fea0 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f  unpacked.** reco
1feb0 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f  rd..** .** Curso
1fec0 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e  r P1 is on an in
1fed0 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74  dex btree.  If t
1fee0 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69  he record identi
1fef0 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50  fied by P3 and P
1ff00 34 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 6e  4.** contains an
1ff10 79 20 4e 55 4c 4c 20 76 61 6c 75 65 2c 20 6a 75  y NULL value, ju
1ff20 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
1ff30 6f 20 50 32 2e 20 20 49 66 20 61 6c 6c 20 74 65  o P2.  If all te
1ff40 72 6d 73 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65  rms of the.** re
1ff50 63 6f 72 64 20 61 72 65 20 6e 6f 74 2d 4e 55 4c  cord are not-NUL
1ff60 4c 20 74 68 65 6e 20 61 20 63 68 65 63 6b 20 69  L then a check i
1ff70 73 20 64 6f 6e 65 20 74 6f 20 64 65 74 65 72 6d  s done to determ
1ff80 69 6e 65 20 69 66 20 61 6e 79 20 72 6f 77 20 69  ine if any row i
1ff90 6e 20 74 68 65 0a 2a 2a 20 50 31 20 69 6e 64 65  n the.** P1 inde
1ffa0 78 20 62 74 72 65 65 20 68 61 73 20 61 20 6d 61  x btree has a ma
1ffb0 74 63 68 69 6e 67 20 6b 65 79 20 70 72 65 66 69  tching key prefi
1ffc0 78 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65  x.  If there are
1ffd0 20 6e 6f 20 6d 61 74 63 68 65 73 2c 20 6a 75 6d   no matches, jum
1ffe0 70 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79  p.** immediately
1fff0 20 74 6f 20 50 32 2e 20 20 49 66 20 74 68 65 72   to P2.  If ther
20000 65 20 69 73 20 61 20 6d 61 74 63 68 2c 20 66 61  e is a match, fa
20010 6c 6c 20 74 68 72 6f 75 67 68 20 61 6e 64 20 6c  ll through and l
20020 65 61 76 65 20 74 68 65 20 50 31 0a 2a 2a 20 63  eave the P1.** c
20030 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74  ursor pointing t
20040 6f 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20 72  o the matching r
20050 6f 77 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  ow..**.** This o
20060 70 63 6f 64 65 20 69 73 20 73 69 6d 69 6c 61 72  pcode is similar
20070 20 74 6f 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20   to OP_NotFound 
20080 77 69 74 68 20 74 68 65 20 65 78 63 65 70 74 69  with the excepti
20090 6f 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20  ons that the.** 
200a0 62 72 61 6e 63 68 20 69 73 20 61 6c 77 61 79 73  branch is always
200b0 20 74 61 6b 65 6e 20 69 66 20 61 6e 79 20 70 61   taken if any pa
200c0 72 74 20 6f 66 20 74 68 65 20 73 65 61 72 63 68  rt of the search
200d0 20 6b 65 79 20 69 6e 70 75 74 20 69 73 20 4e 55   key input is NU
200e0 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  LL..**.** This o
200f0 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20  peration leaves 
20100 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20  the cursor in a 
20110 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63  state where it c
20120 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61  annot be.** adva
20130 6e 63 65 64 20 69 6e 20 65 69 74 68 65 72 20 64  nced in either d
20140 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74  irection.  In ot
20150 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e  her words, the N
20160 65 78 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20  ext and Prev.** 
20170 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77  opcodes do not w
20180 6f 72 6b 20 61 66 74 65 72 20 74 68 69 73 20 6f  ork after this o
20190 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  peration..**.** 
201a0 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75  See also: NotFou
201b0 6e 64 2c 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78  nd, Found, NotEx
201c0 69 73 74 73 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ists.*/.case OP_
201d0 4e 6f 43 6f 6e 66 6c 69 63 74 3a 20 20 20 20 20  NoConflict:     
201e0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
201f0 63 61 73 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64  case OP_NotFound
20200 3a 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c  :       /* jump,
20210 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
20220 46 6f 75 6e 64 3a 20 7b 20 20 20 20 20 20 20 20  Found: {        
20230 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
20240 20 20 69 6e 74 20 61 6c 72 65 61 64 79 45 78 69    int alreadyExi
20250 73 74 73 3b 0a 20 20 69 6e 74 20 74 61 6b 65 4a  sts;.  int takeJ
20260 75 6d 70 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 20  ump;.  int ii;. 
20270 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
20280 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 63 68  .  int res;.  ch
20290 61 72 20 2a 70 46 72 65 65 3b 0a 20 20 55 6e 70  ar *pFree;.  Unp
202a0 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70 49 64  ackedRecord *pId
202b0 78 4b 65 79 3b 0a 20 20 55 6e 70 61 63 6b 65 64  xKey;.  Unpacked
202c0 52 65 63 6f 72 64 20 72 3b 0a 20 20 63 68 61 72  Record r;.  char
202d0 20 61 54 65 6d 70 52 65 63 5b 52 4f 55 4e 44 38   aTempRec[ROUND8
202e0 28 73 69 7a 65 6f 66 28 55 6e 70 61 63 6b 65 64  (sizeof(Unpacked
202f0 52 65 63 6f 72 64 29 29 20 2b 20 73 69 7a 65 6f  Record)) + sizeo
20300 66 28 4d 65 6d 29 2a 34 20 2b 20 37 5d 3b 0a 0a  f(Mem)*4 + 7];..
20310 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
20320 53 54 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  ST.  if( pOp->op
20330 63 6f 64 65 21 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c  code!=OP_NoConfl
20340 69 63 74 20 29 20 73 71 6c 69 74 65 33 5f 66 6f  ict ) sqlite3_fo
20350 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e  und_count++;.#en
20360 64 69 66 0a 0a 20 20 61 73 73 65 72 74 28 20 70  dif..  assert( p
20370 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
20380 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
20390 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
203a0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
203b0 33 32 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  32 );.  pC = p->
203c0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
203d0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
203e0 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
203f0 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65  _DEBUG.  pC->see
20400 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64  kOp = pOp->opcod
20410 65 3b 0a 23 65 6e 64 69 66 0a 20 20 70 49 6e 33  e;.#endif.  pIn3
20420 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
20430 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  ];.  assert( pC-
20440 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  >pCursor!=0 );. 
20450 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
20460 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 70 46 72  able==0 );.  pFr
20470 65 65 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f  ee = 0;.  if( pO
20480 70 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a 20 20 20  p->p4.i>0 ){.   
20490 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
204a0 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  ->pKeyInfo;.    
204b0 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
204c0 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 72  pOp->p4.i;.    r
204d0 2e 61 4d 65 6d 20 3d 20 70 49 6e 33 3b 0a 20 20  .aMem = pIn3;.  
204e0 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 72    for(ii=0; ii<r
204f0 2e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a  .nField; ii++){.
20500 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
20510 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
20520 5b 69 69 5d 29 20 29 3b 0a 20 20 20 20 20 20 45  [ii]) );.      E
20530 78 70 61 6e 64 42 6c 6f 62 28 26 72 2e 61 4d 65  xpandBlob(&r.aMe
20540 6d 5b 69 69 5d 29 3b 0a 23 69 66 64 65 66 20 53  m[ii]);.#ifdef S
20550 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
20560 20 20 69 66 28 20 69 69 20 29 20 52 45 47 49 53    if( ii ) REGIS
20570 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
20580 33 2b 69 69 2c 20 26 72 2e 61 4d 65 6d 5b 69 69  3+ii, &r.aMem[ii
20590 5d 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d  ]);.#endif.    }
205a0 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20 26  .    pIdxKey = &
205b0 72 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  r;.  }else{.    
205c0 70 49 64 78 4b 65 79 20 3d 20 73 71 6c 69 74 65  pIdxKey = sqlite
205d0 33 56 64 62 65 41 6c 6c 6f 63 55 6e 70 61 63 6b  3VdbeAllocUnpack
205e0 65 64 52 65 63 6f 72 64 28 0a 20 20 20 20 20 20  edRecord(.      
205f0 20 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20    pC->pKeyInfo, 
20600 61 54 65 6d 70 52 65 63 2c 20 73 69 7a 65 6f 66  aTempRec, sizeof
20610 28 61 54 65 6d 70 52 65 63 29 2c 20 26 70 46 72  (aTempRec), &pFr
20620 65 65 0a 20 20 20 20 29 3b 0a 20 20 20 20 69 66  ee.    );.    if
20630 28 20 70 49 64 78 4b 65 79 3d 3d 30 20 29 20 67  ( pIdxKey==0 ) g
20640 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
20650 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c  assert( pIn3->fl
20660 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29  ags & MEM_Blob )
20670 3b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62  ;.    ExpandBlob
20680 28 70 49 6e 33 29 3b 0a 20 20 20 20 73 71 6c 69  (pIn3);.    sqli
20690 74 65 33 56 64 62 65 52 65 63 6f 72 64 55 6e 70  te3VdbeRecordUnp
206a0 61 63 6b 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  ack(pC->pKeyInfo
206b0 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d  , pIn3->n, pIn3-
206c0 3e 7a 2c 20 70 49 64 78 4b 65 79 29 3b 0a 20 20  >z, pIdxKey);.  
206d0 7d 0a 20 20 70 49 64 78 4b 65 79 2d 3e 64 65 66  }.  pIdxKey->def
206e0 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 74  ault_rc = 0;.  t
206f0 61 6b 65 4a 75 6d 70 20 3d 20 30 3b 0a 20 20 69  akeJump = 0;.  i
20700 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
20710 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 7b  OP_NoConflict ){
20720 0a 20 20 20 20 2f 2a 20 46 6f 72 20 74 68 65 20  .    /* For the 
20730 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 6f 70  OP_NoConflict op
20740 63 6f 64 65 2c 20 74 61 6b 65 20 74 68 65 20 6a  code, take the j
20750 75 6d 70 20 69 66 20 61 6e 79 20 6f 66 20 74 68  ump if any of th
20760 65 0a 20 20 20 20 2a 2a 20 69 6e 70 75 74 20 66  e.    ** input f
20770 69 65 6c 64 73 20 61 72 65 20 4e 55 4c 4c 2c 20  ields are NULL, 
20780 73 69 6e 63 65 20 61 6e 79 20 6b 65 79 20 77 69  since any key wi
20790 74 68 20 61 20 4e 55 4c 4c 20 77 69 6c 6c 20 6e  th a NULL will n
207a0 6f 74 0a 20 20 20 20 2a 2a 20 63 6f 6e 66 6c 69  ot.    ** confli
207b0 63 74 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 69  ct */.    for(ii
207c0 3d 30 3b 20 69 69 3c 70 49 64 78 4b 65 79 2d 3e  =0; ii<pIdxKey->
207d0 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20  nField; ii++){. 
207e0 20 20 20 20 20 69 66 28 20 70 49 64 78 4b 65 79       if( pIdxKey
207f0 2d 3e 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73  ->aMem[ii].flags
20800 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
20810 20 20 20 20 20 20 20 74 61 6b 65 4a 75 6d 70 20         takeJump 
20820 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 62 72 65  = 1;.        bre
20830 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
20840 7d 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  }.  }.  rc = sql
20850 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
20860 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72  npacked(pC->pCur
20870 73 6f 72 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c  sor, pIdxKey, 0,
20880 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 73 71 6c   0, &res);.  sql
20890 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
208a0 46 72 65 65 29 3b 0a 20 20 69 66 28 20 72 63 21  Free);.  if( rc!
208b0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
208c0 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70    break;.  }.  p
208d0 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  C->seekResult = 
208e0 72 65 73 3b 0a 20 20 61 6c 72 65 61 64 79 45 78  res;.  alreadyEx
208f0 69 73 74 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b  ists = (res==0);
20900 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
20910 20 31 2d 61 6c 72 65 61 64 79 45 78 69 73 74 73   1-alreadyExists
20920 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64  ;.  pC->deferred
20930 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43  Moveto = 0;.  pC
20940 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
20950 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69  CACHE_STALE;.  i
20960 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
20970 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20  OP_Found ){.    
20980 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
20990 61 6c 72 65 61 64 79 45 78 69 73 74 73 21 3d 30  alreadyExists!=0
209a0 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 61 6c 72  ,2);.    if( alr
209b0 65 61 64 79 45 78 69 73 74 73 20 29 20 67 6f 74  eadyExists ) got
209c0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
209d0 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42  }else{.    VdbeB
209e0 72 61 6e 63 68 54 61 6b 65 6e 28 74 61 6b 65 4a  ranchTaken(takeJ
209f0 75 6d 70 7c 7c 61 6c 72 65 61 64 79 45 78 69 73  ump||alreadyExis
20a00 74 73 3d 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66  ts==0,2);.    if
20a10 28 20 74 61 6b 65 4a 75 6d 70 20 7c 7c 20 21 61  ( takeJump || !a
20a20 6c 72 65 61 64 79 45 78 69 73 74 73 20 29 20 67  lreadyExists ) g
20a30 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
20a40 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
20a50 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78  /* Opcode: NotEx
20a60 69 73 74 73 20 50 31 20 50 32 20 50 33 20 2a 20  ists P1 P2 P3 * 
20a70 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
20a80 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a  ntkey=r[P3].**.*
20a90 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65  * P1 is the inde
20aa0 78 20 6f 66 20 61 20 63 75 72 73 6f 72 20 6f 70  x of a cursor op
20ab0 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61 62  en on an SQL tab
20ac0 6c 65 20 62 74 72 65 65 20 28 77 69 74 68 20 69  le btree (with i
20ad0 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29 2e  nteger.** keys).
20ae0 20 20 50 33 20 69 73 20 61 6e 20 69 6e 74 65 67    P3 is an integ
20af0 65 72 20 72 6f 77 69 64 2e 20 20 49 66 20 50 31  er rowid.  If P1
20b00 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69   does not contai
20b10 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 0a  n a record with.
20b20 2a 2a 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e  ** rowid P3 then
20b30 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
20b40 79 20 74 6f 20 50 32 2e 20 20 4f 72 2c 20 69 66  y to P2.  Or, if
20b50 20 50 32 20 69 73 20 30 2c 20 72 61 69 73 65 20   P2 is 0, raise 
20b60 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 43 4f 52  an.** SQLITE_COR
20b70 52 55 50 54 20 65 72 72 6f 72 2e 20 49 66 20 50  RUPT error. If P
20b80 31 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61  1 does contain a
20b90 20 72 65 63 6f 72 64 20 77 69 74 68 20 72 6f 77   record with row
20ba0 69 64 20 50 33 20 74 68 65 6e 20 0a 2a 2a 20 6c  id P3 then .** l
20bb0 65 61 76 65 20 74 68 65 20 63 75 72 73 6f 72 20  eave the cursor 
20bc0 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 61 74  pointing at that
20bd0 20 72 65 63 6f 72 64 20 61 6e 64 20 66 61 6c 6c   record and fall
20be0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
20bf0 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74  next.** instruct
20c00 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f  ion..**.** The O
20c10 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64  P_NotFound opcod
20c20 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73  e performs the s
20c30 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e  ame operation on
20c40 20 69 6e 64 65 78 20 62 74 72 65 65 73 0a 2a 2a   index btrees.**
20c50 20 28 77 69 74 68 20 61 72 62 69 74 72 61 72 79   (with arbitrary
20c60 20 6d 75 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79   multi-value key
20c70 73 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  s)..**.** This o
20c80 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65  pcode leaves the
20c90 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61   cursor in a sta
20ca0 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e  te where it cann
20cb0 6f 74 20 62 65 20 61 64 76 61 6e 63 65 64 0a 2a  ot be advanced.*
20cc0 2a 20 69 6e 20 65 69 74 68 65 72 20 64 69 72 65  * in either dire
20cd0 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ction.  In other
20ce0 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74   words, the Next
20cf0 20 61 6e 64 20 50 72 65 76 20 6f 70 63 6f 64 65   and Prev opcode
20d00 73 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f  s will.** not wo
20d10 72 6b 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 69  rk following thi
20d20 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  s opcode..**.** 
20d30 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
20d40 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e   NotFound, NoCon
20d50 66 6c 69 63 74 0a 2a 2f 0a 63 61 73 65 20 4f 50  flict.*/.case OP
20d60 5f 4e 6f 74 45 78 69 73 74 73 3a 20 7b 20 20 20  _NotExists: {   
20d70 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
20d80 33 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  3 */.  VdbeCurso
20d90 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
20da0 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
20db0 72 65 73 3b 0a 20 20 75 36 34 20 69 4b 65 79 3b  res;.  u64 iKey;
20dc0 0a 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ..  pIn3 = &aMem
20dd0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
20de0 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73  ert( pIn3->flags
20df0 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20   & MEM_Int );.  
20e00 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
20e10 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
20e20 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
20e30 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
20e40 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
20e50 70 43 21 3d 30 20 29 3b 0a 23 69 66 64 65 66 20  pC!=0 );.#ifdef 
20e60 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70  SQLITE_DEBUG.  p
20e70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 30 3b 0a 23  C->seekOp = 0;.#
20e80 65 6e 64 69 66 0a 20 20 61 73 73 65 72 74 28 20  endif.  assert( 
20e90 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  pC->isTable );. 
20ea0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65   assert( pC->pse
20eb0 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29  udoTableReg==0 )
20ec0 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
20ed0 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72  pCursor;.  asser
20ee0 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20  t( pCrsr!=0 );. 
20ef0 20 72 65 73 20 3d 20 30 3b 0a 20 20 69 4b 65 79   res = 0;.  iKey
20f00 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20   = pIn3->u.i;.  
20f10 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
20f20 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
20f30 70 43 72 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20  pCrsr, 0, iKey, 
20f40 30 2c 20 26 72 65 73 29 3b 0a 20 20 61 73 73 65  0, &res);.  asse
20f50 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
20f60 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29 3b 0a 20  K || res==0 );. 
20f70 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65   pC->movetoTarge
20f80 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73  t = iKey;  /* Us
20f90 65 64 20 62 79 20 4f 50 5f 44 65 6c 65 74 65 20  ed by OP_Delete 
20fa0 2a 2f 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  */.  pC->nullRow
20fb0 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
20fc0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
20fd0 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 64 65 66  STALE;.  pC->def
20fe0 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
20ff0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
21000 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
21010 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d  pC->seekResult =
21020 20 72 65 73 3b 0a 20 20 69 66 28 20 72 65 73 21   res;.  if( res!
21030 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
21040 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
21050 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  );.    if( pOp->
21060 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72  p2==0 ){.      r
21070 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  c = SQLITE_CORRU
21080 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 7d 65 6c  PT_BKPT;.    }el
21090 73 65 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a  se{.      goto j
210a0 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d  ump_to_p2;.    }
210b0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
210c0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75  ./* Opcode: Sequ
210d0 65 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a  ence P1 P2 * * *
210e0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
210f0 50 32 5d 3d 63 75 72 73 6f 72 5b 50 31 5d 2e 63  P2]=cursor[P1].c
21100 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20 46 69 6e 64 20  tr++.**.** Find 
21110 74 68 65 20 6e 65 78 74 20 61 76 61 69 6c 61 62  the next availab
21120 6c 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62  le sequence numb
21130 65 72 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31  er for cursor P1
21140 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 73  ..** Write the s
21150 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 69  equence number i
21160 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
21170 0a 2a 2a 20 54 68 65 20 73 65 71 75 65 6e 63 65  .** The sequence
21180 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65 20 63   number on the c
21190 75 72 73 6f 72 20 69 73 20 69 6e 63 72 65 6d 65  ursor is increme
211a0 6e 74 65 64 20 61 66 74 65 72 20 74 68 69 73 0a  nted after this.
211b0 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  ** instruction. 
211c0 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71   .*/.case OP_Seq
211d0 75 65 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20  uence: {        
211e0 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
211f0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
21200 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
21210 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
21220 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70  sert( p->apCsr[p
21230 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20 20  Op->p1]!=0 );.  
21240 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
21250 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
21260 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e   pOut->u.i = p->
21270 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e  apCsr[pOp->p1]->
21280 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72  seqCount++;.  br
21290 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f  eak;.}.../* Opco
212a0 64 65 3a 20 4e 65 77 52 6f 77 69 64 20 50 31 20  de: NewRowid P1 
212b0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
212c0 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77  opsis: r[P2]=row
212d0 69 64 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61 20 6e  id.**.** Get a n
212e0 65 77 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72  ew integer recor
212f0 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e 61 20  d number (a.k.a 
21300 22 72 6f 77 69 64 22 29 20 75 73 65 64 20 61 73  "rowid") used as
21310 20 74 68 65 20 6b 65 79 20 74 6f 20 61 20 74 61   the key to a ta
21320 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65 63 6f  ble..** The reco
21330 72 64 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f 74  rd number is not
21340 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64   previously used
21350 20 61 73 20 61 20 6b 65 79 20 69 6e 20 74 68 65   as a key in the
21360 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 74 61 62   database.** tab
21370 6c 65 20 74 68 61 74 20 63 75 72 73 6f 72 20 50  le that cursor P
21380 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68  1 points to.  Th
21390 65 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d  e new record num
213a0 62 65 72 20 69 73 20 77 72 69 74 74 65 6e 0a 2a  ber is written.*
213b0 2a 20 77 72 69 74 74 65 6e 20 74 6f 20 72 65 67  * written to reg
213c0 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
213d0 49 66 20 50 33 3e 30 20 74 68 65 6e 20 50 33 20  If P3>0 then P3 
213e0 69 73 20 61 20 72 65 67 69 73 74 65 72 20 69 6e  is a register in
213f0 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20   the root frame 
21400 6f 66 20 74 68 69 73 20 56 44 42 45 20 74 68 61  of this VDBE tha
21410 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74 68 65 20  t holds .** the 
21420 6c 61 72 67 65 73 74 20 70 72 65 76 69 6f 75 73  largest previous
21430 6c 79 20 67 65 6e 65 72 61 74 65 64 20 72 65 63  ly generated rec
21440 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e  ord number. No n
21450 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  ew record number
21460 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64  s are.** allowed
21470 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e   to be less than
21480 20 74 68 69 73 20 76 61 6c 75 65 2e 20 57 68 65   this value. Whe
21490 6e 20 74 68 69 73 20 76 61 6c 75 65 20 72 65 61  n this value rea
214a0 63 68 65 73 20 69 74 73 20 6d 61 78 69 6d 75 6d  ches its maximum
214b0 2c 20 0a 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f  , .** an SQLITE_
214c0 46 55 4c 4c 20 65 72 72 6f 72 20 69 73 20 67 65  FULL error is ge
214d0 6e 65 72 61 74 65 64 2e 20 54 68 65 20 50 33 20  nerated. The P3 
214e0 72 65 67 69 73 74 65 72 20 69 73 20 75 70 64 61  register is upda
214f0 74 65 64 20 77 69 74 68 20 74 68 65 20 27 0a 2a  ted with the '.*
21500 2a 20 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f  * generated reco
21510 72 64 20 6e 75 6d 62 65 72 2e 20 54 68 69 73 20  rd number. This 
21520 50 33 20 6d 65 63 68 61 6e 69 73 6d 20 69 73 20  P3 mechanism is 
21530 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70  used to help imp
21540 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41 55  lement the.** AU
21550 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65 61 74  TOINCREMENT feat
21560 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ure..*/.case OP_
21570 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20 20 20 20  NewRowid: {     
21580 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
21590 0a 20 20 69 36 34 20 76 3b 20 20 20 20 20 20 20  .  i64 v;       
215a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
215b0 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20   new rowid */.  
215c0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
215d0 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72         /* Cursor
215e0 20 6f 66 20 74 61 62 6c 65 20 74 6f 20 67 65 74   of table to get
215f0 20 74 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a   the new rowid *
21600 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20  /.  int res;    
21610 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
21620 73 75 6c 74 20 6f 66 20 61 6e 20 73 71 6c 69 74  sult of an sqlit
21630 65 33 42 74 72 65 65 4c 61 73 74 28 29 20 2a 2f  e3BtreeLast() */
21640 0a 20 20 69 6e 74 20 63 6e 74 3b 20 20 20 20 20  .  int cnt;     
21650 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75            /* Cou
21660 6e 74 65 72 20 74 6f 20 6c 69 6d 69 74 20 74 68  nter to limit th
21670 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65 61 72  e number of sear
21680 63 68 65 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ches */.  Mem *p
21690 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
216a0 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
216b0 64 69 6e 67 20 6c 61 72 67 65 73 74 20 72 6f 77  ding largest row
216c0 69 64 20 66 6f 72 20 41 55 54 4f 49 4e 43 52 45  id for AUTOINCRE
216d0 4d 45 4e 54 20 2a 2f 0a 20 20 56 64 62 65 46 72  MENT */.  VdbeFr
216e0 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20  ame *pFrame;    
216f0 20 2f 2a 20 52 6f 6f 74 20 66 72 61 6d 65 20 6f   /* Root frame o
21700 66 20 56 44 42 45 20 2a 2f 0a 0a 20 20 76 20 3d  f VDBE */..  v =
21710 20 30 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20   0;.  res = 0;. 
21720 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
21730 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
21740 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
21750 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
21760 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
21770 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
21780 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
21790 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
217a0 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
217b0 21 3d 30 20 29 3b 0a 20 20 7b 0a 20 20 20 20 2f  !=0 );.  {.    /
217c0 2a 20 54 68 65 20 6e 65 78 74 20 72 6f 77 69 64  * The next rowid
217d0 20 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65   or record numbe
217e0 72 20 28 64 69 66 66 65 72 65 6e 74 20 74 65 72  r (different ter
217f0 6d 73 20 66 6f 72 20 74 68 65 20 73 61 6d 65 0a  ms for the same.
21800 20 20 20 20 2a 2a 20 74 68 69 6e 67 29 20 69 73      ** thing) is
21810 20 6f 62 74 61 69 6e 65 64 20 69 6e 20 61 20 74   obtained in a t
21820 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69 74 68  wo-step algorith
21830 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  m..    **.    **
21840 20 46 69 72 73 74 20 77 65 20 61 74 74 65 6d 70   First we attemp
21850 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61  t to find the la
21860 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72  rgest existing r
21870 6f 77 69 64 20 61 6e 64 20 61 64 64 20 6f 6e 65  owid and add one
21880 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68 61 74 2e  .    ** to that.
21890 20 20 42 75 74 20 69 66 20 74 68 65 20 6c 61 72    But if the lar
218a0 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f  gest existing ro
218b0 77 69 64 20 69 73 20 61 6c 72 65 61 64 79 20 74  wid is already t
218c0 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20 2a  he maximum.    *
218d0 2a 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67  * positive integ
218e0 65 72 2c 20 77 65 20 68 61 76 65 20 74 6f 20 66  er, we have to f
218f0 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
21900 68 65 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a 2a  he second.    **
21910 20 70 72 6f 62 61 62 69 6c 69 73 74 69 63 20 61   probabilistic a
21920 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a 0a  lgorithm.    **.
21930 20 20 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e      ** The secon
21940 64 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 74  d algorithm is t
21950 6f 20 73 65 6c 65 63 74 20 61 20 72 6f 77 69 64  o select a rowid
21960 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 73   at random and s
21970 65 65 20 69 66 0a 20 20 20 20 2a 2a 20 69 74 20  ee if.    ** it 
21980 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 20 69  already exists i
21990 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66  n the table.  If
219a0 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69   it does not exi
219b0 73 74 2c 20 77 65 20 68 61 76 65 0a 20 20 20 20  st, we have.    
219c0 2a 2a 20 73 75 63 63 65 65 64 65 64 2e 20 20 49  ** succeeded.  I
219d0 66 20 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f 77  f the random row
219e0 69 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20 77  id does exist, w
219f0 65 20 73 65 6c 65 63 74 20 61 20 6e 65 77 20 6f  e select a new o
21a00 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74 72  ne.    ** and tr
21a10 79 20 61 67 61 69 6e 2c 20 75 70 20 74 6f 20 31  y again, up to 1
21a20 30 30 20 74 69 6d 65 73 2e 0a 20 20 20 20 2a 2f  00 times..    */
21a30 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
21a40 3e 69 73 54 61 62 6c 65 20 29 3b 0a 0a 23 69 66  >isTable );..#if
21a50 64 65 66 20 53 51 4c 49 54 45 5f 33 32 42 49 54  def SQLITE_32BIT
21a60 5f 52 4f 57 49 44 0a 23 20 20 20 64 65 66 69 6e  _ROWID.#   defin
21a70 65 20 4d 41 58 5f 52 4f 57 49 44 20 30 78 37 66  e MAX_ROWID 0x7f
21a80 66 66 66 66 66 66 0a 23 65 6c 73 65 0a 20 20 20  ffffff.#else.   
21a90 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70 69 6c 65   /* Some compile
21aa0 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75  rs complain abou
21ab0 74 20 63 6f 6e 73 74 61 6e 74 73 20 6f 66 20 74  t constants of t
21ac0 68 65 20 66 6f 72 6d 20 30 78 37 66 66 66 66 66  he form 0x7fffff
21ad0 66 66 66 66 66 66 66 66 66 66 2e 0a 20 20 20 20  ffffffffff..    
21ae0 2a 2a 20 4f 74 68 65 72 73 20 63 6f 6d 70 6c 61  ** Others compla
21af0 69 6e 20 61 62 6f 75 74 20 30 78 37 66 66 66 66  in about 0x7ffff
21b00 66 66 66 66 66 66 66 66 66 66 66 66 4c 4c 2e 20  ffffffffffffLL. 
21b10 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
21b20 61 63 72 6f 20 73 65 65 6d 73 0a 20 20 20 20 2a  acro seems.    *
21b30 2a 20 74 6f 20 70 72 6f 76 69 64 65 20 74 68 65  * to provide the
21b40 20 63 6f 6e 73 74 61 6e 74 20 77 68 69 6c 65 20   constant while 
21b50 6d 61 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d 70 69  making all compi
21b60 6c 65 72 73 20 68 61 70 70 79 2e 0a 20 20 20 20  lers happy..    
21b70 2a 2f 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41  */.#   define MA
21b80 58 5f 52 4f 57 49 44 20 20 28 69 36 34 29 28 20  X_ROWID  (i64)( 
21b90 28 28 28 75 36 34 29 30 78 37 66 66 66 66 66 66  (((u64)0x7ffffff
21ba0 66 29 3c 3c 33 32 29 20 7c 20 28 75 36 34 29 30  f)<<32) | (u64)0
21bb0 78 66 66 66 66 66 66 66 66 20 29 0a 23 65 6e 64  xffffffff ).#end
21bc0 69 66 0a 0a 20 20 20 20 69 66 28 20 21 70 43 2d  if..    if( !pC-
21bd0 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
21be0 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  ){.      rc = sq
21bf0 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70  lite3BtreeLast(p
21c00 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73  C->pCursor, &res
21c10 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
21c20 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
21c30 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
21c40 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
21c50 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
21c60 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 20 20   res ){.        
21c70 76 20 3d 20 31 3b 20 20 20 2f 2a 20 49 4d 50 3a  v = 1;   /* IMP:
21c80 20 52 2d 36 31 39 31 34 2d 34 38 30 37 34 20 2a   R-61914-48074 *
21c90 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  /.      }else{. 
21ca0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73         assert( s
21cb0 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
21cc0 72 49 73 56 61 6c 69 64 28 70 43 2d 3e 70 43 75  rIsValid(pC->pCu
21cd0 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20  rsor) );.       
21ce0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
21cf0 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70 43  eeKeySize(pC->pC
21d00 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20  ursor, &v);.    
21d10 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
21d20 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f  SQLITE_OK );   /
21d30 2a 20 43 61 6e 6e 6f 74 20 66 61 69 6c 20 66 6f  * Cannot fail fo
21d40 6c 6c 6f 77 69 6e 67 20 42 74 72 65 65 4c 61 73  llowing BtreeLas
21d50 74 28 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  t() */.        i
21d60 66 28 20 76 3e 3d 4d 41 58 5f 52 4f 57 49 44 20  f( v>=MAX_ROWID 
21d70 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 43 2d  ){.          pC-
21d80 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
21d90 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  = 1;.        }el
21da0 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 76 2b  se{.          v+
21db0 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 32  +;   /* IMP: R-2
21dc0 39 35 33 38 2d 33 34 39 38 37 20 2a 2f 0a 20 20  9538-34987 */.  
21dd0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
21de0 20 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53      }..#ifndef S
21df0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
21e00 4e 43 52 45 4d 45 4e 54 0a 20 20 20 20 69 66 28  NCREMENT.    if(
21e10 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20   pOp->p3 ){.    
21e20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
21e30 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d   P3 is a valid m
21e40 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20  emory cell. */. 
21e50 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
21e60 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p3>0 );.      
21e70 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b  if( p->pFrame ){
21e80 0a 20 20 20 20 20 20 20 20 66 6f 72 28 70 46 72  .        for(pFr
21e90 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70  ame=p->pFrame; p
21ea0 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20  Frame->pParent; 
21eb0 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70  pFrame=pFrame->p
21ec0 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 20 20 20  Parent);.       
21ed0 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20   /* Assert that 
21ee0 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65  P3 is a valid me
21ef0 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20  mory cell. */.  
21f00 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
21f10 70 2d 3e 70 33 3c 3d 70 46 72 61 6d 65 2d 3e 6e  p->p3<=pFrame->n
21f20 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20 20 70  Mem );.        p
21f30 4d 65 6d 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61  Mem = &pFrame->a
21f40 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
21f50 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
21f60 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61     /* Assert tha
21f70 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20  t P3 is a valid 
21f80 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a  memory cell. */.
21f90 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
21fa0 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
21fb0 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
21fc0 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20  .        pMem = 
21fd0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
21fe0 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74          memAbout
21ff0 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4d 65 6d  ToChange(p, pMem
22000 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
22010 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
22020 6c 69 64 28 70 4d 65 6d 29 20 29 3b 0a 0a 20 20  lid(pMem) );..  
22030 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
22040 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d  CE(pOp->p3, pMem
22050 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
22060 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
22070 79 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 61  y(pMem);.      a
22080 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c  ssert( (pMem->fl
22090 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d  ags & MEM_Int)!=
220a0 30 20 29 3b 20 20 2f 2a 20 6d 65 6d 28 50 33 29  0 );  /* mem(P3)
220b0 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
220c0 72 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70  r */.      if( p
220d0 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f  Mem->u.i==MAX_RO
220e0 57 49 44 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61  WID || pC->useRa
220f0 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20  ndomRowid ){.   
22100 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
22110 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a  _FULL;   /* IMP:
22120 20 52 2d 31 32 32 37 35 2d 36 31 33 33 38 20 2a   R-12275-61338 *
22130 2f 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  /.        goto a
22140 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
22150 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  r;.      }.     
22160 20 69 66 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69   if( v<pMem->u.i
22170 2b 31 20 29 7b 0a 20 20 20 20 20 20 20 20 76 20  +1 ){.        v 
22180 3d 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b  = pMem->u.i + 1;
22190 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70  .      }.      p
221a0 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20  Mem->u.i = v;.  
221b0 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 69    }.#endif.    i
221c0 66 28 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d  f( pC->useRandom
221d0 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 2f  Rowid ){.      /
221e0 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e  * IMPLEMENTATION
221f0 2d 4f 46 3a 20 52 2d 30 37 36 37 37 2d 34 31 38  -OF: R-07677-418
22200 38 31 20 49 66 20 74 68 65 20 6c 61 72 67 65 73  81 If the larges
22210 74 20 52 4f 57 49 44 20 69 73 20 65 71 75 61 6c  t ROWID is equal
22220 20 74 6f 20 74 68 65 0a 20 20 20 20 20 20 2a 2a   to the.      **
22230 20 6c 61 72 67 65 73 74 20 70 6f 73 73 69 62 6c   largest possibl
22240 65 20 69 6e 74 65 67 65 72 20 28 39 32 32 33 33  e integer (92233
22250 37 32 30 33 36 38 35 34 37 37 35 38 30 37 29 20  72036854775807) 
22260 74 68 65 6e 20 74 68 65 20 64 61 74 61 62 61 73  then the databas
22270 65 0a 20 20 20 20 20 20 2a 2a 20 65 6e 67 69 6e  e.      ** engin
22280 65 20 73 74 61 72 74 73 20 70 69 63 6b 69 6e 67  e starts picking
22290 20 70 6f 73 69 74 69 76 65 20 63 61 6e 64 69 64   positive candid
222a0 61 74 65 20 52 4f 57 49 44 73 20 61 74 20 72 61  ate ROWIDs at ra
222b0 6e 64 6f 6d 20 75 6e 74 69 6c 0a 20 20 20 20 20  ndom until.     
222c0 20 2a 2a 20 69 74 20 66 69 6e 64 73 20 6f 6e 65   ** it finds one
222d0 20 74 68 61 74 20 69 73 20 6e 6f 74 20 70 72 65   that is not pre
222e0 76 69 6f 75 73 6c 79 20 75 73 65 64 2e 20 2a 2f  viously used. */
222f0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
22300 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a  Op->p3==0 );  /*
22310 20 57 65 20 63 61 6e 6e 6f 74 20 62 65 20 69 6e   We cannot be in
22320 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 6d 6f   random rowid mo
22330 64 65 20 69 66 20 74 68 69 73 20 69 73 0a 20 20  de if this is.  
22340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22350 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 6e             ** an
22360 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74   AUTOINCREMENT t
22370 61 62 6c 65 2e 20 2a 2f 0a 20 20 20 20 20 20 63  able. */.      c
22380 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 64 6f  nt = 0;.      do
22390 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
223a0 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a  3_randomness(siz
223b0 65 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20 20 20  eof(v), &v);.   
223c0 20 20 20 20 20 76 20 26 3d 20 28 4d 41 58 5f 52       v &= (MAX_R
223d0 4f 57 49 44 3e 3e 31 29 3b 20 76 2b 2b 3b 20 20  OWID>>1); v++;  
223e0 2f 2a 20 45 6e 73 75 72 65 20 74 68 61 74 20 76  /* Ensure that v
223f0 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
22400 20 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20 7d   zero */.      }
22410 77 68 69 6c 65 28 20 20 28 28 72 63 20 3d 20 73  while(  ((rc = s
22420 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
22430 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43  oUnpacked(pC->pC
22440 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 76  ursor, 0, (u64)v
22450 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
22460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22480 20 20 20 30 2c 20 26 72 65 73 29 29 3d 3d 53 51     0, &res))==SQ
22490 4c 49 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20 20  LITE_OK).       
224a0 20 20 20 20 20 26 26 20 28 72 65 73 3d 3d 30 29       && (res==0)
224b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20  .            && 
224c0 28 2b 2b 63 6e 74 3c 31 30 30 29 29 3b 0a 20 20  (++cnt<100));.  
224d0 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
224e0 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20  TE_OK && res==0 
224f0 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
22500 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f  SQLITE_FULL;   /
22510 2a 20 49 4d 50 3a 20 52 2d 33 38 32 31 39 2d 35  * IMP: R-38219-5
22520 33 30 30 32 20 2a 2f 0a 20 20 20 20 20 20 20 20  3002 */.        
22530 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
22540 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
22550 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 76  .      assert( v
22560 3e 30 20 29 3b 20 20 2f 2a 20 45 56 3a 20 52 2d  >0 );  /* EV: R-
22570 34 30 38 31 32 2d 30 33 35 37 30 20 2a 2f 0a 20  40812-03570 */. 
22580 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64 65 66     }.    pC->def
22590 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
225a0 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
225b0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
225c0 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  LE;.  }.  pOut->
225d0 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b  u.i = v;.  break
225e0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
225f0 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33 20  Insert P1 P2 P3 
22600 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
22610 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 20  s: intkey=r[P3] 
22620 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  data=r[P2].**.**
22630 20 57 72 69 74 65 20 61 6e 20 65 6e 74 72 79 20   Write an entry 
22640 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 6f  into the table o
22650 66 20 63 75 72 73 6f 72 20 50 31 2e 20 20 41 20  f cursor P1.  A 
22660 6e 65 77 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20  new entry is.** 
22670 63 72 65 61 74 65 64 20 69 66 20 69 74 20 64 6f  created if it do
22680 65 73 6e 27 74 20 61 6c 72 65 61 64 79 20 65 78  esn't already ex
22690 69 73 74 20 6f 72 20 74 68 65 20 64 61 74 61 20  ist or the data 
226a0 66 6f 72 20 61 6e 20 65 78 69 73 74 69 6e 67 0a  for an existing.
226b0 2a 2a 20 65 6e 74 72 79 20 69 73 20 6f 76 65 72  ** entry is over
226c0 77 72 69 74 74 65 6e 2e 20 20 54 68 65 20 64 61  written.  The da
226d0 74 61 20 69 73 20 74 68 65 20 76 61 6c 75 65 20  ta is the value 
226e0 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20  MEM_Blob stored 
226f0 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e  in register.** n
22700 75 6d 62 65 72 20 50 32 2e 20 54 68 65 20 6b 65  umber P2. The ke
22710 79 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  y is stored in r
22720 65 67 69 73 74 65 72 20 50 33 2e 20 54 68 65 20  egister P3. The 
22730 6b 65 79 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61  key must.** be a
22740 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20   MEM_Int..**.** 
22750 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  If the OPFLAG_NC
22760 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 35  HANGE flag of P5
22770 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68   is set, then th
22780 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75  e row change cou
22790 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65  nt is.** increme
227a0 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20  nted (otherwise 
227b0 6e 6f 74 29 2e 20 20 49 66 20 74 68 65 20 4f 50  not).  If the OP
227c0 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 66  FLAG_LASTROWID f
227d0 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
227e0 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64 20  ,.** then rowid 
227f0 69 73 20 73 74 6f 72 65 64 20 66 6f 72 20 73 75  is stored for su
22800 62 73 65 71 75 65 6e 74 20 72 65 74 75 72 6e 20  bsequent return 
22810 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  by the.** sqlite
22820 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  3_last_insert_ro
22830 77 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 28  wid() function (
22840 6f 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20  otherwise it is 
22850 75 6e 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a  unmodified)..**.
22860 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
22870 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66  _USESEEKRESULT f
22880 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
22890 20 61 6e 64 20 69 66 20 74 68 65 20 72 65 73 75   and if the resu
228a0 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 6c 61 73  lt of.** the las
228b0 74 20 73 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e  t seek operation
228c0 20 28 4f 50 5f 4e 6f 74 45 78 69 73 74 73 29 20   (OP_NotExists) 
228d0 77 61 73 20 61 20 73 75 63 63 65 73 73 2c 20 74  was a success, t
228e0 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72  hen this.** oper
228f0 61 74 69 6f 6e 20 77 69 6c 6c 20 6e 6f 74 20 61  ation will not a
22900 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74  ttempt to find t
22910 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 72  he appropriate r
22920 6f 77 20 62 65 66 6f 72 65 20 64 6f 69 6e 67 0a  ow before doing.
22930 2a 2a 20 74 68 65 20 69 6e 73 65 72 74 20 62 75  ** the insert bu
22940 74 20 77 69 6c 6c 20 69 6e 73 74 65 61 64 20 6f  t will instead o
22950 76 65 72 77 72 69 74 65 20 74 68 65 20 72 6f 77  verwrite the row
22960 20 74 68 61 74 20 74 68 65 20 63 75 72 73 6f 72   that the cursor
22970 20 69 73 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79   is.** currently
22980 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 50   pointing to.  P
22990 72 65 73 75 6d 61 62 6c 79 2c 20 74 68 65 20 70  resumably, the p
229a0 72 69 6f 72 20 4f 50 5f 4e 6f 74 45 78 69 73 74  rior OP_NotExist
229b0 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 68 61 73 20  s opcode.** has 
229c0 61 6c 72 65 61 64 79 20 70 6f 73 69 74 69 6f 6e  already position
229d0 65 64 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  ed the cursor co
229e0 72 72 65 63 74 6c 79 2e 20 20 54 68 69 73 20 69  rrectly.  This i
229f0 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f  s an optimizatio
22a00 6e 0a 2a 2a 20 74 68 61 74 20 62 6f 6f 73 74 73  n.** that boosts
22a10 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 62 79 20   performance by 
22a20 61 76 6f 69 64 69 6e 67 20 72 65 64 75 6e 64 61  avoiding redunda
22a30 6e 74 20 73 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20  nt seeks..**.** 
22a40 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53  If the OPFLAG_IS
22a50 55 50 44 41 54 45 20 66 6c 61 67 20 69 73 20 73  UPDATE flag is s
22a60 65 74 2c 20 74 68 65 6e 20 74 68 69 73 20 6f 70  et, then this op
22a70 63 6f 64 65 20 69 73 20 70 61 72 74 20 6f 66 20  code is part of 
22a80 61 6e 0a 2a 2a 20 55 50 44 41 54 45 20 6f 70 65  an.** UPDATE ope
22a90 72 61 74 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69  ration.  Otherwi
22aa0 73 65 20 28 69 66 20 74 68 65 20 66 6c 61 67 20  se (if the flag 
22ab0 69 73 20 63 6c 65 61 72 29 20 74 68 65 6e 20 74  is clear) then t
22ac0 68 69 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73  his opcode.** is
22ad0 20 70 61 72 74 20 6f 66 20 61 6e 20 49 4e 53 45   part of an INSE
22ae0 52 54 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54  RT operation.  T
22af0 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 69 73  he difference is
22b00 20 6f 6e 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20   only important 
22b10 74 6f 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65  to.** the update
22b20 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72   hook..**.** Par
22b30 61 6d 65 74 65 72 20 50 34 20 6d 61 79 20 70 6f  ameter P4 may po
22b40 69 6e 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20  int to a string 
22b50 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
22b60 61 62 6c 65 2d 6e 61 6d 65 2c 20 6f 72 0a 2a 2a  able-name, or.**
22b70 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66   may be NULL. If
22b80 20 69 74 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   it is not NULL,
22b90 20 74 68 65 6e 20 74 68 65 20 75 70 64 61 74 65   then the update
22ba0 2d 68 6f 6f 6b 20 0a 2a 2a 20 28 73 71 6c 69 74  -hook .** (sqlit
22bb0 65 33 2e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  e3.xUpdateCallba
22bc0 63 6b 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 66  ck) is invoked f
22bd0 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63 63 65  ollowing a succe
22be0 73 73 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a  ssful insert..**
22bf0 0a 2a 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44  .** (WARNING/TOD
22c00 4f 3a 20 49 66 20 50 31 20 69 73 20 61 20 70 73  O: If P1 is a ps
22c10 65 75 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20  eudo-cursor and 
22c20 50 32 20 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c  P2 is dynamicall
22c30 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20  y.** allocated, 
22c40 74 68 65 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f  then ownership o
22c50 66 20 50 32 20 69 73 20 74 72 61 6e 73 66 65 72  f P2 is transfer
22c60 72 65 64 20 74 6f 20 74 68 65 20 70 73 65 75 64  red to the pseud
22c70 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20  o-cursor.** and 
22c80 72 65 67 69 73 74 65 72 20 50 32 20 62 65 63 6f  register P2 beco
22c90 6d 65 73 20 65 70 68 65 6d 65 72 61 6c 2e 20 20  mes ephemeral.  
22ca0 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  If the cursor is
22cb0 20 63 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a   changed, the.**
22cc0 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
22cd0 65 72 20 50 32 20 77 69 6c 6c 20 74 68 65 6e 20  er P2 will then 
22ce0 63 68 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75  change.  Make su
22cf0 72 65 20 74 68 69 73 20 64 6f 65 73 20 6e 6f 74  re this does not
22d00 0a 2a 2a 20 63 61 75 73 65 20 61 6e 79 20 70 72  .** cause any pr
22d10 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54  oblems.).**.** T
22d20 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
22d30 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61  only works on ta
22d40 62 6c 65 73 2e 20 20 54 68 65 20 65 71 75 69 76  bles.  The equiv
22d50 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  alent instructio
22d60 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65 73  n.** for indices
22d70 20 69 73 20 4f 50 5f 49 64 78 49 6e 73 65 72 74   is OP_IdxInsert
22d80 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
22d90 49 6e 73 65 72 74 49 6e 74 20 50 31 20 50 32 20  InsertInt P1 P2 
22da0 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
22db0 70 73 69 73 3a 20 20 69 6e 74 6b 65 79 3d 50 33  psis:  intkey=P3
22dc0 20 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a   data=r[P2].**.*
22dd0 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 65 78 61  * This works exa
22de0 63 74 6c 79 20 6c 69 6b 65 20 4f 50 5f 49 6e 73  ctly like OP_Ins
22df0 65 72 74 20 65 78 63 65 70 74 20 74 68 61 74 20  ert except that 
22e00 74 68 65 20 6b 65 79 20 69 73 20 74 68 65 0a 2a  the key is the.*
22e10 2a 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * integer value 
22e20 50 33 2c 20 6e 6f 74 20 74 68 65 20 76 61 6c 75  P3, not the valu
22e30 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72  e of the integer
22e40 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
22e50 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20  ter P3..*/.case 
22e60 4f 50 5f 49 6e 73 65 72 74 3a 20 0a 63 61 73 65  OP_Insert: .case
22e70 20 4f 50 5f 49 6e 73 65 72 74 49 6e 74 3a 20 7b   OP_InsertInt: {
22e80 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 3b 20 20  .  Mem *pData;  
22e90 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c       /* MEM cell
22ea0 20 68 6f 6c 64 69 6e 67 20 64 61 74 61 20 66 6f   holding data fo
22eb0 72 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  r the record to 
22ec0 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20  be inserted */. 
22ed0 20 4d 65 6d 20 2a 70 4b 65 79 3b 20 20 20 20 20   Mem *pKey;     
22ee0 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68     /* MEM cell h
22ef0 6f 6c 64 69 6e 67 20 6b 65 79 20 20 66 6f 72 20  olding key  for 
22f00 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
22f10 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20 20  i64 iKey;       
22f20 20 20 2f 2a 20 54 68 65 20 69 6e 74 65 67 65 72    /* The integer
22f30 20 52 4f 57 49 44 20 6f 72 20 6b 65 79 20 66 6f   ROWID or key fo
22f40 72 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  r the record to 
22f50 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20  be inserted */. 
22f60 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
22f70 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 74 6f 20     /* Cursor to 
22f80 74 61 62 6c 65 20 69 6e 74 6f 20 77 68 69 63 68  table into which
22f90 20 69 6e 73 65 72 74 20 69 73 20 77 72 69 74 74   insert is writt
22fa0 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72  en */.  int nZer
22fb0 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  o;        /* Num
22fc0 62 65 72 20 6f 66 20 7a 65 72 6f 2d 62 79 74 65  ber of zero-byte
22fd0 73 20 74 6f 20 61 70 70 65 6e 64 20 2a 2f 0a 20  s to append */. 
22fe0 20 69 6e 74 20 73 65 65 6b 52 65 73 75 6c 74 3b   int seekResult;
22ff0 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20     /* Result of 
23000 70 72 69 6f 72 20 73 65 65 6b 20 6f 72 20 30 20  prior seek or 0 
23010 69 66 20 6e 6f 20 55 53 45 53 45 45 4b 52 45 53  if no USESEEKRES
23020 55 4c 54 20 66 6c 61 67 20 2a 2f 0a 20 20 63 6f  ULT flag */.  co
23030 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20  nst char *zDb;  
23040 2f 2a 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  /* database name
23050 20 2d 20 75 73 65 64 20 62 79 20 74 68 65 20 75   - used by the u
23060 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20  pdate hook */.  
23070 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 62 6c  const char *zTbl
23080 3b 20 2f 2a 20 54 61 62 6c 65 20 6e 61 6d 65 20  ; /* Table name 
23090 2d 20 75 73 65 64 20 62 79 20 74 68 65 20 6f 70  - used by the op
230a0 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 69  date hook */.  i
230b0 6e 74 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  nt op;          
230c0 20 2f 2a 20 4f 70 63 6f 64 65 20 66 6f 72 20 75   /* Opcode for u
230d0 70 64 61 74 65 20 68 6f 6f 6b 3a 20 53 51 4c 49  pdate hook: SQLI
230e0 54 45 5f 55 50 44 41 54 45 20 6f 72 20 53 51 4c  TE_UPDATE or SQL
230f0 49 54 45 5f 49 4e 53 45 52 54 20 2a 2f 0a 0a 20  ITE_INSERT */.. 
23100 20 70 44 61 74 61 20 3d 20 26 61 4d 65 6d 5b 70   pData = &aMem[p
23110 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
23120 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
23130 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
23140 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
23150 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 44 61 74   memIsValid(pDat
23160 61 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  a) );.  pC = p->
23170 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
23180 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
23190 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
231a0 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  >pCursor!=0 );. 
231b0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65   assert( pC->pse
231c0 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29  udoTableReg==0 )
231d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
231e0 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 52 45 47  isTable );.  REG
231f0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
23200 3e 70 32 2c 20 70 44 61 74 61 29 3b 0a 0a 20 20  >p2, pData);..  
23210 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
23220 3d 4f 50 5f 49 6e 73 65 72 74 20 29 7b 0a 20 20  =OP_Insert ){.  
23230 20 20 70 4b 65 79 20 3d 20 26 61 4d 65 6d 5b 70    pKey = &aMem[p
23240 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73  Op->p3];.    ass
23250 65 72 74 28 20 70 4b 65 79 2d 3e 66 6c 61 67 73  ert( pKey->flags
23260 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20   & MEM_Int );.  
23270 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
23280 61 6c 69 64 28 70 4b 65 79 29 20 29 3b 0a 20 20  alid(pKey) );.  
23290 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
232a0 28 70 4f 70 2d 3e 70 33 2c 20 70 4b 65 79 29 3b  (pOp->p3, pKey);
232b0 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 4b 65 79  .    iKey = pKey
232c0 2d 3e 75 2e 69 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ->u.i;.  }else{.
232d0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
232e0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65  >opcode==OP_Inse
232f0 72 74 49 6e 74 20 29 3b 0a 20 20 20 20 69 4b 65  rtInt );.    iKe
23300 79 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d  y = pOp->p3;.  }
23310 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  ..  if( pOp->p5 
23320 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  & OPFLAG_NCHANGE
23330 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b   ) p->nChange++;
23340 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
23350 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49   OPFLAG_LASTROWI
23360 44 20 29 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  D ) db->lastRowi
23370 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 20 3d 20  d = lastRowid = 
23380 69 4b 65 79 3b 0a 20 20 69 66 28 20 70 44 61 74  iKey;.  if( pDat
23390 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  a->flags & MEM_N
233a0 75 6c 6c 20 29 7b 0a 20 20 20 20 70 44 61 74 61  ull ){.    pData
233b0 2d 3e 7a 20 3d 20 30 3b 0a 20 20 20 20 70 44 61  ->z = 0;.    pDa
233c0 74 61 2d 3e 6e 20 3d 20 30 3b 0a 20 20 7d 65 6c  ta->n = 0;.  }el
233d0 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
233e0 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 28  pData->flags & (
233f0 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72  MEM_Blob|MEM_Str
23400 29 20 29 3b 0a 20 20 7d 0a 20 20 73 65 65 6b 52  ) );.  }.  seekR
23410 65 73 75 6c 74 20 3d 20 28 28 70 4f 70 2d 3e 70  esult = ((pOp->p
23420 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  5 & OPFLAG_USESE
23430 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e  EKRESULT) ? pC->
23440 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 3b  seekResult : 0);
23450 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c  .  if( pData->fl
23460 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29  ags & MEM_Zero )
23470 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d 20 70 44  {.    nZero = pD
23480 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20  ata->u.nZero;.  
23490 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 5a 65 72 6f  }else{.    nZero
234a0 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72 63 20 3d   = 0;.  }.  rc =
234b0 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73   sqlite3BtreeIns
234c0 65 72 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ert(pC->pCursor,
234d0 20 30 2c 20 69 4b 65 79 2c 0a 20 20 20 20 20 20   0, iKey,.      
234e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234f0 20 20 20 20 70 44 61 74 61 2d 3e 7a 2c 20 70 44      pData->z, pD
23500 61 74 61 2d 3e 6e 2c 20 6e 5a 65 72 6f 2c 0a 20  ata->n, nZero,. 
23510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23520 20 20 20 20 20 20 20 20 20 28 70 4f 70 2d 3e 70           (pOp->p
23530 35 20 26 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e  5 & OPFLAG_APPEN
23540 44 29 21 3d 30 2c 20 73 65 65 6b 52 65 73 75 6c  D)!=0, seekResul
23550 74 0a 20 20 29 3b 0a 20 20 70 43 2d 3e 64 65 66  t.  );.  pC->def
23560 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
23570 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
23580 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
23590 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  ;..  /* Invoke t
235a0 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69  he update-hook i
235b0 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20  f required. */. 
235c0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
235d0 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70 64 61 74  OK && db->xUpdat
235e0 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70  eCallback && pOp
235f0 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 7a 44  ->p4.z ){.    zD
23600 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e  b = db->aDb[pC->
23610 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20  iDb].zName;.    
23620 7a 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  zTbl = pOp->p4.z
23630 3b 0a 20 20 20 20 6f 70 20 3d 20 28 28 70 4f 70  ;.    op = ((pOp
23640 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53  ->p5 & OPFLAG_IS
23650 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45  UPDATE) ? SQLITE
23660 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45  _UPDATE : SQLITE
23670 5f 49 4e 53 45 52 54 29 3b 0a 20 20 20 20 61 73  _INSERT);.    as
23680 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
23690 65 20 29 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70  e );.    db->xUp
236a0 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d  dateCallback(db-
236b0 3e 70 55 70 64 61 74 65 41 72 67 2c 20 6f 70 2c  >pUpdateArg, op,
236c0 20 7a 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79   zDb, zTbl, iKey
236d0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
236e0 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d  C->iDb>=0 );.  }
236f0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
23700 4f 70 63 6f 64 65 3a 20 44 65 6c 65 74 65 20 50  Opcode: Delete P
23710 31 20 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 0a  1 P2 * P4 P5.**.
23720 2a 2a 20 44 65 6c 65 74 65 20 74 68 65 20 72 65  ** Delete the re
23730 63 6f 72 64 20 61 74 20 77 68 69 63 68 20 74 68  cord at which th
23740 65 20 50 31 20 63 75 72 73 6f 72 20 69 73 20 63  e P1 cursor is c
23750 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
23760 67 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  g..**.** If the 
23770 50 35 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  P5 parameter is 
23780 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 63 75  non-zero, the cu
23790 72 73 6f 72 20 77 69 6c 6c 20 62 65 20 6c 65 66  rsor will be lef
237a0 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 0a 2a  t pointing at .*
237b0 2a 20 65 69 74 68 65 72 20 74 68 65 20 6e 65 78  * either the nex
237c0 74 20 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75  t or the previou
237d0 73 20 72 65 63 6f 72 64 20 69 6e 20 74 68 65 20  s record in the 
237e0 74 61 62 6c 65 2e 20 49 66 20 69 74 20 69 73 20  table. If it is 
237f0 6c 65 66 74 20 0a 2a 2a 20 70 6f 69 6e 74 69 6e  left .** pointin
23800 67 20 61 74 20 74 68 65 20 6e 65 78 74 20 72 65  g at the next re
23810 63 6f 72 64 2c 20 74 68 65 6e 20 74 68 65 20 6e  cord, then the n
23820 65 78 74 20 4e 65 78 74 20 69 6e 73 74 72 75 63  ext Next instruc
23830 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61 20 0a  tion will be a .
23840 2a 2a 20 6e 6f 2d 6f 70 2e 20 41 73 20 61 20 72  ** no-op. As a r
23850 65 73 75 6c 74 2c 20 69 6e 20 74 68 69 73 20 63  esult, in this c
23860 61 73 65 20 69 74 20 69 73 20 4f 4b 20 74 6f 20  ase it is OK to 
23870 64 65 6c 65 74 65 20 61 20 72 65 63 6f 72 64 20  delete a record 
23880 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 0a 2a 2a  from within a.**
23890 20 4e 65 78 74 20 6c 6f 6f 70 2e 20 49 66 20 50   Next loop. If P
238a0 35 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20  5 is zero, then 
238b0 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65  the cursor is le
238c0 66 74 20 69 6e 20 61 6e 20 75 6e 64 65 66 69 6e  ft in an undefin
238d0 65 64 20 73 74 61 74 65 2e 0a 2a 2a 0a 2a 2a 20  ed state..**.** 
238e0 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  If the OPFLAG_NC
238f0 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 32  HANGE flag of P2
23900 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68   is set, then th
23910 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75  e row change cou
23920 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65  nt is.** increme
23930 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20  nted (otherwise 
23940 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d  not)..**.** P1 m
23950 75 73 74 20 6e 6f 74 20 62 65 20 70 73 65 75 64  ust not be pseud
23960 6f 2d 74 61 62 6c 65 2e 20 20 49 74 20 68 61 73  o-table.  It has
23970 20 74 6f 20 62 65 20 61 20 72 65 61 6c 20 74 61   to be a real ta
23980 62 6c 65 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74  ble with.** mult
23990 69 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a  iple rows..**.**
239a0 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55   If P4 is not NU
239b0 4c 4c 2c 20 74 68 65 6e 20 69 74 20 69 73 20 74  LL, then it is t
239c0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
239d0 61 62 6c 65 20 74 68 61 74 20 50 31 20 69 73 0a  able that P1 is.
239e0 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20  ** pointing to. 
239f0 20 54 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b   The update hook
23a00 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64   will be invoked
23a10 2c 20 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a  , if it exists..
23a20 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  ** If P4 is not 
23a30 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 50 31  NULL then the P1
23a40 20 63 75 72 73 6f 72 20 6d 75 73 74 20 68 61 76   cursor must hav
23a50 65 20 62 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65  e been positione
23a60 64 0a 2a 2a 20 75 73 69 6e 67 20 4f 50 5f 4e 6f  d.** using OP_No
23a70 74 46 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f 20  tFound prior to 
23a80 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70  invoking this op
23a90 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  code..*/.case OP
23aa0 5f 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62  _Delete: {.  Vdb
23ab0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 75  eCursor *pC;.  u
23ac0 38 20 68 61 73 55 70 64 61 74 65 43 61 6c 6c 62  8 hasUpdateCallb
23ad0 61 63 6b 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  ack;..  assert( 
23ae0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
23af0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
23b00 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
23b10 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
23b20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
23b30 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
23b40 43 75 72 73 6f 72 21 3d 30 20 29 3b 20 20 2f 2a  Cursor!=0 );  /*
23b50 20 4f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 72 20   Only valid for 
23b60 72 65 61 6c 20 74 61 62 6c 65 73 2c 20 6e 6f 20  real tables, no 
23b70 70 73 65 75 64 6f 74 61 62 6c 65 73 20 2a 2f 0a  pseudotables */.
23b80 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
23b90 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
23ba0 29 3b 0a 0a 20 20 68 61 73 55 70 64 61 74 65 43  );..  hasUpdateC
23bb0 61 6c 6c 62 61 63 6b 20 3d 20 64 62 2d 3e 78 55  allback = db->xU
23bc0 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26  pdateCallback &&
23bd0 20 70 4f 70 2d 3e 70 34 2e 7a 20 26 26 20 70 43   pOp->p4.z && pC
23be0 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20 69 66 28  ->isTable;.  if(
23bf0 20 70 4f 70 2d 3e 70 35 20 26 26 20 68 61 73 55   pOp->p5 && hasU
23c00 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 29 7b  pdateCallback ){
23c10 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
23c20 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70 43 75  eKeySize(pC->pCu
23c30 72 73 6f 72 2c 20 26 70 43 2d 3e 6d 6f 76 65 74  rsor, &pC->movet
23c40 6f 54 61 72 67 65 74 29 3b 0a 20 20 7d 0a 0a 23  oTarget);.  }..#
23c50 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
23c60 55 47 0a 20 20 2f 2a 20 54 68 65 20 73 65 65 6b  UG.  /* The seek
23c70 20 6f 70 65 72 61 74 69 6f 6e 20 74 68 61 74 20   operation that 
23c80 70 6f 73 69 74 69 6f 6e 65 64 20 74 68 65 20 63  positioned the c
23c90 75 72 73 6f 72 20 70 72 69 6f 72 20 74 6f 20 4f  ursor prior to O
23ca0 50 5f 44 65 6c 65 74 65 20 77 69 6c 6c 0a 20 20  P_Delete will.  
23cb0 2a 2a 20 68 61 76 65 20 61 6c 73 6f 20 73 65 74  ** have also set
23cc0 20 74 68 65 20 70 43 2d 3e 6d 6f 76 65 74 6f 54   the pC->movetoT
23cd0 61 72 67 65 74 20 66 69 65 6c 64 20 74 6f 20 74  arget field to t
23ce0 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20  he rowid of the 
23cf0 72 6f 77 20 74 68 61 74 0a 20 20 2a 2a 20 69 73  row that.  ** is
23d00 20 62 65 69 6e 67 20 64 65 6c 65 74 65 64 20 2a   being deleted *
23d10 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e  /.  if( pOp->p4.
23d20 7a 20 26 26 20 70 43 2d 3e 69 73 54 61 62 6c 65  z && pC->isTable
23d30 20 26 26 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29   && pOp->p5==0 )
23d40 7b 0a 20 20 20 20 69 36 34 20 69 4b 65 79 20 3d  {.    i64 iKey =
23d50 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 42   0;.    sqlite3B
23d60 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e  treeKeySize(pC->
23d70 70 43 75 72 73 6f 72 2c 20 26 69 4b 65 79 29 3b  pCursor, &iKey);
23d80 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
23d90 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3d 3d 69  >movetoTarget==i
23da0 4b 65 79 20 29 3b 20 0a 20 20 7d 0a 23 65 6e 64  Key ); .  }.#end
23db0 69 66 0a 20 0a 20 20 72 63 20 3d 20 73 71 6c 69  if. .  rc = sqli
23dc0 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28 70  te3BtreeDelete(p
23dd0 43 2d 3e 70 43 75 72 73 6f 72 2c 20 70 4f 70 2d  C->pCursor, pOp-
23de0 3e 70 35 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68  >p5);.  pC->cach
23df0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
23e00 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76  STALE;..  /* Inv
23e10 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68  oke the update-h
23e20 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e  ook if required.
23e30 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   */.  if( rc==SQ
23e40 4c 49 54 45 5f 4f 4b 20 26 26 20 68 61 73 55 70  LITE_OK && hasUp
23e50 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 29 7b 0a  dateCallback ){.
23e60 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43      db->xUpdateC
23e70 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64  allback(db->pUpd
23e80 61 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f 44  ateArg, SQLITE_D
23e90 45 4c 45 54 45 2c 0a 20 20 20 20 20 20 20 20 20  ELETE,.         
23ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
23eb0 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e  b->aDb[pC->iDb].
23ec0 7a 4e 61 6d 65 2c 20 70 4f 70 2d 3e 70 34 2e 7a  zName, pOp->p4.z
23ed0 2c 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67  , pC->movetoTarg
23ee0 65 74 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  et);.    assert(
23ef0 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20   pC->iDb>=0 );. 
23f00 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32   }.  if( pOp->p2
23f10 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47   & OPFLAG_NCHANG
23f20 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b  E ) p->nChange++
23f30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 2f 2a 20  ;.  break;.}./* 
23f40 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 43 6f 75  Opcode: ResetCou
23f50 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  nt * * * * *.**.
23f60 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20  ** The value of 
23f70 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  the change count
23f80 65 72 20 69 73 20 63 6f 70 69 65 64 20 74 6f 20  er is copied to 
23f90 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
23fa0 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f  dle.** change co
23fb0 75 6e 74 65 72 20 28 72 65 74 75 72 6e 65 64 20  unter (returned 
23fc0 62 79 20 73 75 62 73 65 71 75 65 6e 74 20 63 61  by subsequent ca
23fd0 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65 33 5f 63  lls to sqlite3_c
23fe0 68 61 6e 67 65 73 28 29 29 2e 0a 2a 2a 20 54 68  hanges())..** Th
23ff0 65 6e 20 74 68 65 20 56 4d 73 20 69 6e 74 65 72  en the VMs inter
24000 6e 61 6c 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  nal change count
24010 65 72 20 72 65 73 65 74 73 20 74 6f 20 30 2e 0a  er resets to 0..
24020 2a 2a 20 54 68 69 73 20 69 73 20 75 73 65 64 20  ** This is used 
24030 62 79 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  by trigger progr
24040 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ams..*/.case OP_
24050 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b 0a 20 20  ResetCount: {.  
24060 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68  sqlite3VdbeSetCh
24070 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68  anges(db, p->nCh
24080 61 6e 67 65 29 3b 0a 20 20 70 2d 3e 6e 43 68 61  ange);.  p->nCha
24090 6e 67 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b  nge = 0;.  break
240a0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
240b0 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 20 50 31  SorterCompare P1
240c0 20 50 32 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e   P2 P3 P4.** Syn
240d0 6f 70 73 69 73 3a 20 20 69 66 20 6b 65 79 28 50  opsis:  if key(P
240e0 31 29 21 3d 74 72 69 6d 28 72 5b 50 33 5d 2c 50  1)!=trim(r[P3],P
240f0 34 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  4) goto P2.**.**
24100 20 50 31 20 69 73 20 61 20 73 6f 72 74 65 72 20   P1 is a sorter 
24110 63 75 72 73 6f 72 2e 20 54 68 69 73 20 69 6e 73  cursor. This ins
24120 74 72 75 63 74 69 6f 6e 20 63 6f 6d 70 61 72 65  truction compare
24130 73 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68  s a prefix of th
24140 65 0a 2a 2a 20 72 65 63 6f 72 64 20 62 6c 6f 62  e.** record blob
24150 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
24160 61 67 61 69 6e 73 74 20 61 20 70 72 65 66 69 78  against a prefix
24170 20 6f 66 20 74 68 65 20 65 6e 74 72 79 20 74 68   of the entry th
24180 61 74 20 0a 2a 2a 20 74 68 65 20 73 6f 72 74 65  at .** the sorte
24190 72 20 63 75 72 73 6f 72 20 63 75 72 72 65 6e 74  r cursor current
241a0 6c 79 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 4f  ly points to.  O
241b0 6e 6c 79 20 74 68 65 20 66 69 72 73 74 20 50 34  nly the first P4
241c0 20 66 69 65 6c 64 73 0a 2a 2a 20 6f 66 20 72 5b   fields.** of r[
241d0 50 33 5d 20 61 6e 64 20 74 68 65 20 73 6f 72 74  P3] and the sort
241e0 65 72 20 72 65 63 6f 72 64 20 61 72 65 20 63 6f  er record are co
241f0 6d 70 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  mpared..**.** If
24200 20 65 69 74 68 65 72 20 50 33 20 6f 72 20 74 68   either P3 or th
24210 65 20 73 6f 72 74 65 72 20 63 6f 6e 74 61 69 6e  e sorter contain
24220 73 20 61 20 4e 55 4c 4c 20 69 6e 20 6f 6e 65 20  s a NULL in one 
24230 6f 66 20 74 68 65 69 72 20 73 69 67 6e 69 66 69  of their signifi
24240 63 61 6e 74 0a 2a 2a 20 66 69 65 6c 64 73 20 28  cant.** fields (
24250 6e 6f 74 20 63 6f 75 6e 74 69 6e 67 20 74 68 65  not counting the
24260 20 50 34 20 66 69 65 6c 64 73 20 61 74 20 74 68   P4 fields at th
24270 65 20 65 6e 64 20 77 68 69 63 68 20 61 72 65 20  e end which are 
24280 69 67 6e 6f 72 65 64 29 20 74 68 65 6e 0a 2a 2a  ignored) then.**
24290 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   the comparison 
242a0 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 62 65  is assumed to be
242b0 20 65 71 75 61 6c 2e 0a 2a 2a 0a 2a 2a 20 46 61   equal..**.** Fa
242c0 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 6e 65  ll through to ne
242d0 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  xt instruction i
242e0 66 20 74 68 65 20 74 77 6f 20 72 65 63 6f 72 64  f the two record
242f0 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20  s compare equal 
24300 74 6f 0a 2a 2a 20 65 61 63 68 20 6f 74 68 65 72  to.** each other
24310 2e 20 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  .  Jump to P2 if
24320 20 74 68 65 79 20 61 72 65 20 64 69 66 66 65 72   they are differ
24330 65 6e 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ent..*/.case OP_
24340 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 3a 20 7b  SorterCompare: {
24350 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
24360 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  C;.  int res;.  
24370 69 6e 74 20 6e 4b 65 79 43 6f 6c 3b 0a 0a 20 20  int nKeyCol;..  
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 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
243b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
243c0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
243d0 32 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61  2 );.  pIn3 = &a
243e0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
243f0 6e 4b 65 79 43 6f 6c 20 3d 20 70 4f 70 2d 3e 70  nKeyCol = pOp->p
24400 34 2e 69 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a  4.i;.  res = 0;.
24410 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
24420 62 65 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 28  beSorterCompare(
24430 70 43 2c 20 70 49 6e 33 2c 20 6e 4b 65 79 43 6f  pC, pIn3, nKeyCo
24440 6c 2c 20 26 72 65 73 29 3b 0a 20 20 56 64 62 65  l, &res);.  Vdbe
24450 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21  BranchTaken(res!
24460 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73  =0,2);.  if( res
24470 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
24480 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a  p2;.  break;.};.
24490 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74  ./* Opcode: Sort
244a0 65 72 44 61 74 61 20 50 31 20 50 32 20 50 33 20  erData P1 P2 P3 
244b0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
244c0 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a   r[P2]=data.**.*
244d0 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67  * Write into reg
244e0 69 73 74 65 72 20 50 32 20 74 68 65 20 63 75 72  ister P2 the cur
244f0 72 65 6e 74 20 73 6f 72 74 65 72 20 64 61 74 61  rent sorter data
24500 20 66 6f 72 20 73 6f 72 74 65 72 20 63 75 72 73   for sorter curs
24510 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 6e 20 63  or P1..** Then c
24520 6c 65 61 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20  lear the column 
24530 68 65 61 64 65 72 20 63 61 63 68 65 20 6f 6e 20  header cache on 
24540 63 75 72 73 6f 72 20 50 33 2e 0a 2a 2a 0a 2a 2a  cursor P3..**.**
24550 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
24560 6e 6f 72 6d 61 6c 6c 79 20 75 73 65 20 74 6f 20  normally use to 
24570 6d 6f 76 65 20 61 20 72 65 63 6f 72 64 20 6f 75  move a record ou
24580 74 20 6f 66 20 74 68 65 20 73 6f 72 74 65 72 20  t of the sorter 
24590 61 6e 64 20 69 6e 74 6f 0a 2a 2a 20 61 20 72 65  and into.** a re
245a0 67 69 73 74 65 72 20 74 68 61 74 20 69 73 20 74  gister that is t
245b0 68 65 20 73 6f 75 72 63 65 20 66 6f 72 20 61 20  he source for a 
245c0 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72  pseudo-table cur
245d0 73 6f 72 20 63 72 65 61 74 65 64 20 75 73 69 6e  sor created usin
245e0 67 0a 2a 2a 20 4f 70 65 6e 50 73 65 75 64 6f 2e  g.** OpenPseudo.
245f0 20 20 54 68 61 74 20 70 73 65 75 64 6f 2d 74 61    That pseudo-ta
24600 62 6c 65 20 63 75 72 73 6f 72 20 69 73 20 74 68  ble cursor is th
24610 65 20 6f 6e 65 20 74 68 61 74 20 69 73 20 69 64  e one that is id
24620 65 6e 74 69 66 69 65 64 20 62 79 0a 2a 2a 20 70  entified by.** p
24630 61 72 61 6d 65 74 65 72 20 50 33 2e 20 20 43 6c  arameter P3.  Cl
24640 65 61 72 69 6e 67 20 74 68 65 20 50 33 20 63 6f  earing the P3 co
24650 6c 75 6d 6e 20 63 61 63 68 65 20 61 73 20 70 61  lumn cache as pa
24660 72 74 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64  rt of this opcod
24670 65 20 73 61 76 65 73 0a 2a 2a 20 75 73 20 66 72  e saves.** us fr
24680 6f 6d 20 68 61 76 69 6e 67 20 74 6f 20 69 73 73  om having to iss
24690 75 65 20 61 20 73 65 70 61 72 61 74 65 20 4e 75  ue a separate Nu
246a0 6c 6c 52 6f 77 20 69 6e 73 74 72 75 63 74 69 6f  llRow instructio
246b0 6e 20 74 6f 20 63 6c 65 61 72 20 74 68 61 74 20  n to clear that 
246c0 63 61 63 68 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  cache..*/.case O
246d0 50 5f 53 6f 72 74 65 72 44 61 74 61 3a 20 7b 0a  P_SorterData: {.
246e0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
246f0 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ;..  pOut = &aMe
24700 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43  m[pOp->p2];.  pC
24710 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
24720 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
24730 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a  isSorter(pC) );.
24740 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
24750 62 65 53 6f 72 74 65 72 52 6f 77 6b 65 79 28 70  beSorterRowkey(p
24760 43 2c 20 70 4f 75 74 29 3b 0a 20 20 61 73 73 65  C, pOut);.  asse
24770 72 74 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  rt( rc!=SQLITE_O
24780 4b 20 7c 7c 20 28 70 4f 75 74 2d 3e 66 6c 61 67  K || (pOut->flag
24790 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 20 29 3b  s & MEM_Blob) );
247a0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
247b0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
247c0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
247d0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
247e0 33 5d 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  3]->cacheStatus 
247f0 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
24800 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
24810 63 6f 64 65 3a 20 52 6f 77 44 61 74 61 20 50 31  code: RowData P1
24820 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
24830 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74  opsis: r[P2]=dat
24840 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e  a.**.** Write in
24850 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74  to register P2 t
24860 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20  he complete row 
24870 64 61 74 61 20 66 6f 72 20 63 75 72 73 6f 72 20  data for cursor 
24880 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20  P1..** There is 
24890 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f  no interpretatio
248a0 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20  n of the data.  
248b0 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73 74 20 63  .** It is just c
248c0 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50  opied onto the P
248d0 32 20 72 65 67 69 73 74 65 72 20 65 78 61 63 74  2 register exact
248e0 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20  ly as .** it is 
248f0 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74  found in the dat
24900 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  abase file..**.*
24910 2a 20 49 66 20 74 68 65 20 50 31 20 63 75 72 73  * If the P1 curs
24920 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e 74  or must be point
24930 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72  ing to a valid r
24940 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72  ow (not a NULL r
24950 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c  ow).** of a real
24960 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73   table, not a ps
24970 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 2f  eudo-table..*/./
24980 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 4b 65 79  * Opcode: RowKey
24990 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
249a0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
249b0 6b 65 79 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  key.**.** Write 
249c0 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
249d0 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f   the complete ro
249e0 77 20 6b 65 79 20 66 6f 72 20 63 75 72 73 6f 72  w key for cursor
249f0 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73   P1..** There is
24a00 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69   no interpretati
24a10 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20  on of the data. 
24a20 20 0a 2a 2a 20 54 68 65 20 6b 65 79 20 69 73 20   .** The key is 
24a30 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20  copied onto the 
24a40 50 32 20 72 65 67 69 73 74 65 72 20 65 78 61 63  P2 register exac
24a50 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73  tly as .** it is
24a60 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61   found in the da
24a70 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a  tabase file..**.
24a80 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63 75 72  ** If the P1 cur
24a90 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e  sor must be poin
24aa0 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20  ting to a valid 
24ab0 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20  row (not a NULL 
24ac0 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61  row).** of a rea
24ad0 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70  l table, not a p
24ae0 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a  seudo-table..*/.
24af0 63 61 73 65 20 4f 50 5f 52 6f 77 4b 65 79 3a 0a  case OP_RowKey:.
24b00 63 61 73 65 20 4f 50 5f 52 6f 77 44 61 74 61 3a  case OP_RowData:
24b10 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
24b20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
24b30 2a 70 43 72 73 72 3b 0a 20 20 75 33 32 20 6e 3b  *pCrsr;.  u32 n;
24b40 0a 20 20 69 36 34 20 6e 36 34 3b 0a 0a 20 20 70  .  i64 n64;..  p
24b50 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
24b60 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p2];.  memAbout
24b70 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
24b80 29 3b 0a 0a 20 20 2f 2a 20 4e 6f 74 65 20 74 68  );..  /* Note th
24b90 61 74 20 52 6f 77 4b 65 79 20 61 6e 64 20 52 6f  at RowKey and Ro
24ba0 77 44 61 74 61 20 61 72 65 20 72 65 61 6c 6c 79  wData are really
24bb0 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d   exactly the sam
24bc0 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f  e instruction */
24bd0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
24be0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
24bf0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
24c00 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
24c10 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
24c20 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d  t( isSorter(pC)=
24c30 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
24c40 70 43 2d 3e 69 73 54 61 62 6c 65 20 7c 7c 20 70  pC->isTable || p
24c50 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 52  Op->opcode!=OP_R
24c60 6f 77 44 61 74 61 20 29 3b 0a 20 20 61 73 73 65  owData );.  asse
24c70 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
24c80 3d 30 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  =0 || pOp->opcod
24c90 65 3d 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b  e==OP_RowData );
24ca0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
24cb0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
24cc0 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a  ->nullRow==0 );.
24cd0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73    assert( pC->ps
24ce0 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20  eudoTableReg==0 
24cf0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
24d00 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  >pCursor!=0 );. 
24d10 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75   pCrsr = pC->pCu
24d20 72 73 6f 72 3b 0a 0a 20 20 2f 2a 20 54 68 65 20  rsor;..  /* The 
24d30 4f 50 5f 52 6f 77 4b 65 79 20 61 6e 64 20 4f 50  OP_RowKey and OP
24d40 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f 64 65 73  _RowData opcodes
24d50 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20 4f   always follow O
24d60 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a 20  P_NotExists or. 
24d70 20 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 2f 4f 70   ** OP_Rewind/Op
24d80 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f 20 69 6e  _Next with no in
24d90 74 65 72 76 65 6e 69 6e 67 20 69 6e 73 74 72 75  tervening instru
24da0 63 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68  ctions that migh
24db0 74 20 69 6e 76 61 6c 69 64 61 74 65 0a 20 20 2a  t invalidate.  *
24dc0 2a 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 49  * the cursor.  I
24dd0 66 20 74 68 69 73 20 77 68 65 72 65 20 6e 6f 74  f this where not
24de0 20 74 68 65 20 63 61 73 65 2c 20 6f 6e 20 6f 66   the case, on of
24df0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   the following a
24e00 73 73 65 72 74 28 29 73 0a 20 20 2a 2a 20 77 6f  ssert()s.  ** wo
24e10 75 6c 64 20 66 61 69 6c 2e 20 20 53 68 6f 75 6c  uld fail.  Shoul
24e20 64 20 74 68 69 73 20 65 76 65 72 20 63 68 61 6e  d this ever chan
24e30 67 65 20 28 62 65 63 61 75 73 65 20 6f 66 20 63  ge (because of c
24e40 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 63 6f  hanges in the co
24e50 64 65 0a 20 20 2a 2a 20 67 65 6e 65 72 61 74 6f  de.  ** generato
24e60 72 29 20 74 68 65 6e 20 74 68 65 20 66 69 78 20  r) then the fix 
24e70 77 6f 75 6c 64 20 62 65 20 74 6f 20 69 6e 73 65  would be to inse
24e80 72 74 20 61 20 63 61 6c 6c 20 74 6f 0a 20 20 2a  rt a call to.  *
24e90 2a 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  * sqlite3VdbeCur
24ea0 73 6f 72 4d 6f 76 65 74 6f 28 29 2e 0a 20 20 2a  sorMoveto()..  *
24eb0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  /.  assert( pC->
24ec0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
24ed0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73  0 );.  assert( s
24ee0 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
24ef0 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20  rIsValid(pCrsr) 
24f00 29 3b 0a 23 69 66 20 30 20 20 2f 2a 20 4e 6f 74  );.#if 0  /* Not
24f10 20 72 65 71 75 69 72 65 64 20 64 75 65 20 74 6f   required due to
24f20 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 74 6f   the previous to
24f30 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
24f40 65 6e 74 73 20 2a 2f 0a 20 20 72 63 20 3d 20 73  ents */.  rc = s
24f50 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
24f60 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66  Moveto(pC);.  if
24f70 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
24f80 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
24f90 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69  _to_error;.#endi
24fa0 66 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 54  f..  if( pC->isT
24fb0 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 61  able==0 ){.    a
24fc0 73 73 65 72 74 28 20 21 70 43 2d 3e 69 73 54 61  ssert( !pC->isTa
24fd0 62 6c 65 20 29 3b 0a 20 20 20 20 56 56 41 5f 4f  ble );.    VVA_O
24fe0 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65  NLY(rc =) sqlite
24ff0 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43  3BtreeKeySize(pC
25000 72 73 72 2c 20 26 6e 36 34 29 3b 0a 20 20 20 20  rsr, &n64);.    
25010 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
25020 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 54  TE_OK );    /* T
25030 72 75 65 20 62 65 63 61 75 73 65 20 6f 66 20 43  rue because of C
25040 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61  ursorMoveto() ca
25050 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20  ll above */.    
25060 69 66 28 20 6e 36 34 3e 64 62 2d 3e 61 4c 69 6d  if( n64>db->aLim
25070 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
25080 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20  LENGTH] ){.     
25090 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
250a0 20 20 20 7d 0a 20 20 20 20 6e 20 3d 20 28 75 33     }.    n = (u3
250b0 32 29 6e 36 34 3b 0a 20 20 7d 65 6c 73 65 7b 0a  2)n64;.  }else{.
250c0 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20      VVA_ONLY(rc 
250d0 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65 65 44  =) sqlite3BtreeD
250e0 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20 26  ataSize(pCrsr, &
250f0 6e 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  n);.    assert( 
25100 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
25110 20 20 20 20 2f 2a 20 44 61 74 61 53 69 7a 65 28      /* DataSize(
25120 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f  ) cannot fail */
25130 0a 20 20 20 20 69 66 28 20 6e 3e 28 75 33 32 29  .    if( n>(u32)
25140 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
25150 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
25160 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f  ){.      goto to
25170 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 7d  o_big;.    }.  }
25180 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 3d 3d  .  testcase( n==
25190 30 20 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  0 );.  if( sqlit
251a0 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e  e3VdbeMemClearAn
251b0 64 52 65 73 69 7a 65 28 70 4f 75 74 2c 20 4d 41  dResize(pOut, MA
251c0 58 28 6e 2c 33 32 29 29 20 29 7b 0a 20 20 20 20  X(n,32)) ){.    
251d0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
251e0 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e 3b 0a  .  pOut->n = n;.
251f0 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
25200 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f 62 29  (pOut, MEM_Blob)
25210 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61  ;.  if( pC->isTa
25220 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63  ble==0 ){.    rc
25230 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b   = sqlite3BtreeK
25240 65 79 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20  ey(pCrsr, 0, n, 
25250 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c 73  pOut->z);.  }els
25260 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  e{.    rc = sqli
25270 74 65 33 42 74 72 65 65 44 61 74 61 28 70 43 72  te3BtreeData(pCr
25280 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e  sr, 0, n, pOut->
25290 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  z);.  }.  pOut->
252a0 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  enc = SQLITE_UTF
252b0 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74  8;  /* In case t
252c0 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20  he blob is ever 
252d0 63 61 73 74 20 74 6f 20 74 65 78 74 20 2a 2f 0a  cast to text */.
252e0 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
252f0 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 52  BSIZE(pOut);.  R
25300 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
25310 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20  p->p2, pOut);.  
25320 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
25330 6f 64 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32  ode: Rowid P1 P2
25340 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
25350 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a  is: r[P2]=rowid.
25360 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72  **.** Store in r
25370 65 67 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e  egister P2 an in
25380 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74  teger which is t
25390 68 65 20 6b 65 79 20 6f 66 20 74 68 65 20 74 61  he key of the ta
253a0 62 6c 65 20 65 6e 74 72 79 20 74 68 61 74 0a 2a  ble entry that.*
253b0 2a 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c  * P1 is currentl
253c0 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a  y point to..**.*
253d0 2a 20 50 31 20 63 61 6e 20 62 65 20 65 69 74 68  * P1 can be eith
253e0 65 72 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74  er an ordinary t
253f0 61 62 6c 65 20 6f 72 20 61 20 76 69 72 74 75 61  able or a virtua
25400 6c 20 74 61 62 6c 65 2e 20 20 54 68 65 72 65 20  l table.  There 
25410 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 61 20  used to.** be a 
25420 73 65 70 61 72 61 74 65 20 4f 50 5f 56 52 6f 77  separate OP_VRow
25430 69 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 75 73  id opcode for us
25440 65 20 77 69 74 68 20 76 69 72 74 75 61 6c 20 74  e with virtual t
25450 61 62 6c 65 73 2c 20 62 75 74 20 74 68 69 73 0a  ables, but this.
25460 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65 20 6e 6f  ** one opcode no
25470 77 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74 68  w works for both
25480 20 74 61 62 6c 65 20 74 79 70 65 73 2e 0a 2a 2f   table types..*/
25490 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a 20  .case OP_Rowid: 
254a0 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
254b0 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56    /* out2 */.  V
254c0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
254d0 20 69 36 34 20 76 3b 0a 20 20 73 71 6c 69 74 65   i64 v;.  sqlite
254e0 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
254f0 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
25500 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
25510 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
25520 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
25530 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
25540 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
25550 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
25560 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
25570 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
25580 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
25590 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64  ssert( pC->pseud
255a0 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 7c 7c 20  oTableReg==0 || 
255b0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20  pC->nullRow );. 
255c0 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77   if( pC->nullRow
255d0 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   ){.    pOut->fl
255e0 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
255f0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c      break;.  }el
25600 73 65 20 69 66 28 20 70 43 2d 3e 64 65 66 65 72  se if( pC->defer
25610 72 65 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20  redMoveto ){.   
25620 20 76 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54   v = pC->movetoT
25630 61 72 67 65 74 3b 0a 23 69 66 6e 64 65 66 20 53  arget;.#ifndef S
25640 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
25650 41 4c 54 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20  ALTABLE.  }else 
25660 69 66 28 20 70 43 2d 3e 70 56 74 61 62 43 75 72  if( pC->pVtabCur
25670 73 6f 72 20 29 7b 0a 20 20 20 20 70 56 74 61 62  sor ){.    pVtab
25680 20 3d 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73   = pC->pVtabCurs
25690 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20 70  or->pVtab;.    p
256a0 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
256b0 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73 73  pModule;.    ass
256c0 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52  ert( pModule->xR
256d0 6f 77 69 64 20 29 3b 0a 20 20 20 20 72 63 20 3d  owid );.    rc =
256e0 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64   pModule->xRowid
256f0 28 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  (pC->pVtabCursor
25700 2c 20 26 76 29 3b 0a 20 20 20 20 73 71 6c 69 74  , &v);.    sqlit
25710 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
25720 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 23 65  sg(p, pVtab);.#e
25730 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
25740 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
25750 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   */.  }else{.   
25760 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
25770 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 72  rsor!=0 );.    r
25780 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
25790 75 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43 29  ursorRestore(pC)
257a0 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67  ;.    if( rc ) g
257b0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
257c0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69 66 28 20  _error;.    if( 
257d0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
257e0 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73       pOut->flags
257f0 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20   = MEM_Null;.   
25800 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
25810 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
25820 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d  BtreeKeySize(pC-
25830 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20  >pCursor, &v);. 
25840 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
25850 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 2f 2a 20  QLITE_OK );  /* 
25860 41 6c 77 61 79 73 20 73 6f 20 62 65 63 61 75 73  Always so becaus
25870 65 20 6f 66 20 43 75 72 73 6f 72 52 65 73 74 6f  e of CursorResto
25880 72 65 28 29 20 61 62 6f 76 65 20 2a 2f 0a 20 20  re() above */.  
25890 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  }.  pOut->u.i = 
258a0 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  v;.  break;.}../
258b0 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f  * Opcode: NullRo
258c0 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  w P1 * * * *.**.
258d0 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63 75 72 73  ** Move the curs
258e0 6f 72 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20  or P1 to a null 
258f0 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c  row.  Any OP_Col
25900 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a  umn operations.*
25910 2a 20 74 68 61 74 20 6f 63 63 75 72 20 77 68 69  * that occur whi
25920 6c 65 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  le the cursor is
25930 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77   on the null row
25940 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20   will always.** 
25950 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f  write a NULL..*/
25960 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77  .case OP_NullRow
25970 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
25980 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28   *pC;..  assert(
25990 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
259a0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
259b0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
259c0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
259d0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
259e0 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
259f0 3d 20 31 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 1;.  pC->cache
25a00 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
25a10 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 43 2d 3e  TALE;.  if( pC->
25a20 70 43 75 72 73 6f 72 20 29 7b 0a 20 20 20 20 73  pCursor ){.    s
25a30 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72  qlite3BtreeClear
25a40 43 75 72 73 6f 72 28 70 43 2d 3e 70 43 75 72 73  Cursor(pC->pCurs
25a50 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  or);.  }.  break
25a60 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
25a70 4c 61 73 74 20 50 31 20 50 32 20 50 33 20 2a 20  Last P1 P2 P3 * 
25a80 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74  *.**.** The next
25a90 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69   use of the Rowi
25aa0 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 50  d or Column or P
25ab0 72 65 76 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  rev instruction 
25ac0 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20  for P1 .** will 
25ad0 72 65 66 65 72 20 74 6f 20 74 68 65 20 6c 61 73  refer to the las
25ae0 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64  t entry in the d
25af0 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72  atabase table or
25b00 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68   index..** If th
25b10 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
25b20 20 69 73 20 65 6d 70 74 79 20 61 6e 64 20 50 32   is empty and P2
25b30 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d  >0, then jump im
25b40 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
25b50 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 30 20 6f  .** If P2 is 0 o
25b60 72 20 69 66 20 74 68 65 20 74 61 62 6c 65 20 6f  r if the table o
25b70 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65  r index is not e
25b80 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75  mpty, fall throu
25b90 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c  gh.** to the fol
25ba0 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69  lowing instructi
25bb0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  on..**.** This o
25bc0 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65  pcode leaves the
25bd0 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72   cursor configur
25be0 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65  ed to move in re
25bf0 76 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20  verse order,.** 
25c00 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77  from the end tow
25c10 61 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  ard the beginnin
25c20 67 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  g.  In other wor
25c30 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69  ds, the cursor i
25c40 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20  s.** configured 
25c50 74 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74  to use Prev, not
25c60 20 4e 65 78 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f   Next..*/.case O
25c70 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20 20  P_Last: {       
25c80 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64   /* jump */.  Vd
25c90 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
25ca0 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
25cb0 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61  .  int res;..  a
25cc0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
25cd0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
25ce0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
25cf0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
25d00 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
25d10 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20  C!=0 );.  pCrsr 
25d20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20  = pC->pCursor;. 
25d30 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73 65   res = 0;.  asse
25d40 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a  rt( pCrsr!=0 );.
25d50 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
25d60 72 65 65 4c 61 73 74 28 70 43 72 73 72 2c 20 26  reeLast(pCrsr, &
25d70 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c  res);.  pC->null
25d80 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20  Row = (u8)res;. 
25d90 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
25da0 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  eto = 0;.  pC->c
25db0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
25dc0 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e  HE_STALE;.  pC->
25dd0 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 70 4f 70  seekResult = pOp
25de0 2d 3e 70 33 3b 0a 23 69 66 64 65 66 20 53 51 4c  ->p3;.#ifdef SQL
25df0 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e  ITE_DEBUG.  pC->
25e00 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 4c 61 73 74  seekOp = OP_Last
25e10 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70  ;.#endif.  if( p
25e20 4f 70 2d 3e 70 32 3e 30 20 29 7b 0a 20 20 20 20  Op->p2>0 ){.    
25e30 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
25e40 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69  res!=0,2);.    i
25e50 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75  f( res ) goto ju
25e60 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
25e70 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
25e80 63 6f 64 65 3a 20 53 6f 72 74 20 50 31 20 50 32  code: Sort P1 P2
25e90 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69   * * *.**.** Thi
25ea0 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 65 78  s opcode does ex
25eb0 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 74  actly the same t
25ec0 68 69 6e 67 20 61 73 20 4f 50 5f 52 65 77 69 6e  hing as OP_Rewin
25ed0 64 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a  d except that.**
25ee0 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73 20 61   it increments a
25ef0 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20 67  n undocumented g
25f00 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 75  lobal variable u
25f10 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67 2e  sed for testing.
25f20 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20 69  .**.** Sorting i
25f30 73 20 61 63 63 6f 6d 70 6c 69 73 68 65 64 20 62  s accomplished b
25f40 79 20 77 72 69 74 69 6e 67 20 72 65 63 6f 72 64  y writing record
25f50 73 20 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e 67  s into a sorting
25f60 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e 20   index,.** then 
25f70 72 65 77 69 6e 64 69 6e 67 20 74 68 61 74 20 69  rewinding that i
25f80 6e 64 65 78 20 61 6e 64 20 70 6c 61 79 69 6e 67  ndex and playing
25f90 20 69 74 20 62 61 63 6b 20 66 72 6f 6d 20 62 65   it back from be
25fa0 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e  ginning to.** en
25fb0 64 2e 20 20 57 65 20 75 73 65 20 74 68 65 20 4f  d.  We use the O
25fc0 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20 69 6e  P_Sort opcode in
25fd0 73 74 65 61 64 20 6f 66 20 4f 50 5f 52 65 77 69  stead of OP_Rewi
25fe0 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a 20  nd to do the.** 
25ff0 72 65 77 69 6e 64 69 6e 67 20 73 6f 20 74 68 61  rewinding so tha
26000 74 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72  t the global var
26010 69 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 69 6e  iable will be in
26020 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a 2a  cremented and.**
26030 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74   regression test
26040 73 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65 20  s can determine 
26050 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
26060 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 0a  he optimizer is.
26070 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f 70 74  ** correctly opt
26080 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72 74  imizing out sort
26090 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  s..*/.case OP_So
260a0 72 74 65 72 53 6f 72 74 3a 20 20 20 20 2f 2a 20  rterSort:    /* 
260b0 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
260c0 53 6f 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f  Sort: {        /
260d0 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66  * jump */.#ifdef
260e0 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73   SQLITE_TEST.  s
260f0 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e  qlite3_sort_coun
26100 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73  t++;.  sqlite3_s
26110 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23  earch_count--;.#
26120 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e  endif.  p->aCoun
26130 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53  ter[SQLITE_STMTS
26140 54 41 54 55 53 5f 53 4f 52 54 5d 2b 2b 3b 0a 20  TATUS_SORT]++;. 
26150 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
26160 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64 20   into OP_Rewind 
26170 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  */.}./* Opcode: 
26180 52 65 77 69 6e 64 20 50 31 20 50 32 20 2a 20 2a  Rewind P1 P2 * *
26190 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78   *.**.** The nex
261a0 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77  t use of the Row
261b0 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20  id or Column or 
261c0 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  Next instruction
261d0 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c   for P1 .** will
261e0 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 66 69   refer to the fi
261f0 72 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65  rst entry in the
26200 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
26210 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20  or index..** If 
26220 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
26230 65 78 20 69 73 20 65 6d 70 74 79 2c 20 6a 75 6d  ex is empty, jum
26240 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
26250 20 50 32 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74   P2..** If the t
26260 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73  able or index is
26270 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c   not empty, fall
26280 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
26290 66 6f 6c 6c 6f 77 69 6e 67 20 0a 2a 2a 20 69 6e  following .** in
262a0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
262b0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
262c0 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63  ves the cursor c
262d0 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76  onfigured to mov
262e0 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64  e in forward ord
262f0 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  er,.** from the 
26300 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64  beginning toward
26310 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74   the end.  In ot
26320 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63  her words, the c
26330 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66  ursor is.** conf
26340 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65  igured to use Ne
26350 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2f  xt, not Prev..*/
26360 0a 63 61 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a  .case OP_Rewind:
26370 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
26380 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  p */.  VdbeCurso
26390 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
263a0 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
263b0 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  res;..  assert( 
263c0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
263d0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
263e0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
263f0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
26400 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
26410 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72  .  assert( isSor
26420 74 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f  ter(pC)==(pOp->o
26430 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72  pcode==OP_Sorter
26440 53 6f 72 74 29 20 29 3b 0a 20 20 72 65 73 20 3d  Sort) );.  res =
26450 20 31 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   1;.#ifdef SQLIT
26460 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65  E_DEBUG.  pC->se
26470 65 6b 4f 70 20 3d 20 4f 50 5f 52 65 77 69 6e 64  ekOp = OP_Rewind
26480 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 69  ;.#endif.  if( i
26490 73 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20  sSorter(pC) ){. 
264a0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
264b0 64 62 65 53 6f 72 74 65 72 52 65 77 69 6e 64 28  dbeSorterRewind(
264c0 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 7d 65 6c  pC, &res);.  }el
264d0 73 65 7b 0a 20 20 20 20 70 43 72 73 72 20 3d 20  se{.    pCrsr = 
264e0 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 20  pC->pCursor;.   
264f0 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29   assert( pCrsr )
26500 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
26510 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43 72  e3BtreeFirst(pCr
26520 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70  sr, &res);.    p
26530 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
26540 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63  o = 0;.    pC->c
26550 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
26560 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20  HE_STALE;.  }.  
26570 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75  pC->nullRow = (u
26580 38 29 72 65 73 3b 0a 20 20 61 73 73 65 72 74 28  8)res;.  assert(
26590 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f   pOp->p2>0 && pO
265a0 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a  p->p2<p->nOp );.
265b0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
265c0 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69  n(res!=0,2);.  i
265d0 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75  f( res ) goto ju
265e0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
265f0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
26600 20 4e 65 78 74 20 50 31 20 50 32 20 50 33 20 50   Next P1 P2 P3 P
26610 34 20 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e  4 P5.**.** Advan
26620 63 65 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  ce cursor P1 so 
26630 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74  that it points t
26640 6f 20 74 68 65 20 6e 65 78 74 20 6b 65 79 2f 64  o the next key/d
26650 61 74 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a  ata pair in its.
26660 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  ** table or inde
26670 78 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65  x.  If there are
26680 20 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61 6c   no more key/val
26690 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61  ue pairs then fa
266a0 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f  ll through.** to
266b0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69   the following i
266c0 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74  nstruction.  But
266d0 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 61   if the cursor a
266e0 64 76 61 6e 63 65 20 77 61 73 20 73 75 63 63 65  dvance was succe
266f0 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69  ssful,.** jump i
26700 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
26710 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4e 65 78 74  ..**.** The Next
26720 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20   opcode is only 
26730 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20  valid following 
26740 61 6e 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47  an SeekGT, SeekG
26750 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 52 65 77 69  E, or.** OP_Rewi
26760 6e 64 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74  nd opcode used t
26770 6f 20 70 6f 73 69 74 69 6f 6e 20 74 68 65 20 63  o position the c
26780 75 72 73 6f 72 2e 20 20 4e 65 78 74 20 69 73 20  ursor.  Next is 
26790 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74  not allowed.** t
267a0 6f 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 4c 54 2c  o follow SeekLT,
267b0 20 53 65 65 6b 4c 45 2c 20 6f 72 20 4f 50 5f 4c   SeekLE, or OP_L
267c0 61 73 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ast..**.** The P
267d0 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
267e0 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c   for a real tabl
267f0 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d  e, not a pseudo-
26800 74 61 62 6c 65 2e 20 20 50 31 20 6d 75 73 74 20  table.  P1 must 
26810 68 61 76 65 0a 2a 2a 20 62 65 65 6e 20 6f 70 65  have.** been ope
26820 6e 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69  ned prior to thi
26830 73 20 6f 70 63 6f 64 65 20 6f 72 20 74 68 65 20  s opcode or the 
26840 70 72 6f 67 72 61 6d 20 77 69 6c 6c 20 73 65 67  program will seg
26850 66 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  fault..**.** The
26860 20 50 33 20 76 61 6c 75 65 20 69 73 20 61 20 68   P3 value is a h
26870 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65 65  int to the btree
26880 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
26890 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a   If P3==1, that.
268a0 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20 61  ** means P1 is a
268b0 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64 20  n SQL index and 
268c0 74 68 61 74 20 74 68 69 73 20 69 6e 73 74 72 75  that this instru
268d0 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65  ction could have
268e0 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64   been.** omitted
268f0 20 69 66 20 74 68 61 74 20 69 6e 64 65 78 20 68   if that index h
26900 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e 20  ad been unique. 
26910 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20 30   P3 is usually 0
26920 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61  .  P3 is.** alwa
26930 79 73 20 65 69 74 68 65 72 20 30 20 6f 72 20 31  ys either 0 or 1
26940 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c  ..**.** P4 is al
26950 77 61 79 73 20 6f 66 20 74 79 70 65 20 50 34 5f  ways of type P4_
26960 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75 6e  ADVANCE. The fun
26970 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f  ction pointer po
26980 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74  ints to.** sqlit
26990 65 33 42 74 72 65 65 4e 65 78 74 28 29 2e 0a 2a  e3BtreeNext()..*
269a0 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f  *.** If P5 is po
269b0 73 69 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a  sitive and the j
269c0 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68  ump is taken, th
269d0 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72  en event counter
269e0 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20  .** number P5-1 
269f0 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20  in the prepared 
26a00 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63  statement is inc
26a10 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  remented..**.** 
26a20 53 65 65 20 61 6c 73 6f 3a 20 50 72 65 76 2c 20  See also: Prev, 
26a30 4e 65 78 74 49 66 4f 70 65 6e 0a 2a 2f 0a 2f 2a  NextIfOpen.*/./*
26a40 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 49 66 4f   Opcode: NextIfO
26a50 70 65 6e 20 50 31 20 50 32 20 50 33 20 50 34 20  pen P1 P2 P3 P4 
26a60 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  P5.**.** This op
26a70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73 74 20  code works just 
26a80 6c 69 6b 65 20 4e 65 78 74 20 65 78 63 65 70 74  like Next except
26a90 20 74 68 61 74 20 69 66 20 63 75 72 73 6f 72 20   that if cursor 
26aa0 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70 65  P1 is not.** ope
26ab0 6e 20 69 74 20 62 65 68 61 76 65 73 20 61 20 6e  n it behaves a n
26ac0 6f 2d 6f 70 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  o-op..*/./* Opco
26ad0 64 65 3a 20 50 72 65 76 20 50 31 20 50 32 20 50  de: Prev P1 P2 P
26ae0 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 61  3 P4 P5.**.** Ba
26af0 63 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31 20  ck up cursor P1 
26b00 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74  so that it point
26b10 73 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75  s to the previou
26b20 73 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20  s key/data pair 
26b30 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20  in its.** table 
26b40 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68  or index.  If th
26b50 65 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69 6f  ere is no previo
26b60 75 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69  us key/value pai
26b70 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  rs then fall thr
26b80 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66  ough.** to the f
26b90 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63  ollowing instruc
26ba0 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68  tion.  But if th
26bb0 65 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70 20  e cursor backup 
26bc0 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a  was successful,.
26bd0 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  ** jump immediat
26be0 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ely to P2..**.**
26bf0 0a 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70 63  .** The Prev opc
26c00 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69  ode is only vali
26c10 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53  d following an S
26c20 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f  eekLT, SeekLE, o
26c30 72 0a 2a 2a 20 4f 50 5f 4c 61 73 74 20 6f 70 63  r.** OP_Last opc
26c40 6f 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73 69  ode used to posi
26c50 74 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 2e  tion the cursor.
26c60 20 20 50 72 65 76 20 69 73 20 6e 6f 74 20 61 6c    Prev is not al
26c70 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c  lowed.** to foll
26c80 6f 77 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47  ow SeekGT, SeekG
26c90 45 2c 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64 2e  E, or OP_Rewind.
26ca0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75  .**.** The P1 cu
26cb0 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72  rsor must be for
26cc0 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
26cd0 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
26ce0 65 2e 20 20 49 66 20 50 31 20 69 73 0a 2a 2a 20  e.  If P1 is.** 
26cf0 6e 6f 74 20 6f 70 65 6e 20 74 68 65 6e 20 74 68  not open then th
26d00 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e  e behavior is un
26d10 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  defined..**.** T
26d20 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 61  he P3 value is a
26d30 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72   hint to the btr
26d40 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ee implementatio
26d50 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61  n. If P3==1, tha
26d60 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73  t.** means P1 is
26d70 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e   an SQL index an
26d80 64 20 74 68 61 74 20 74 68 69 73 20 69 6e 73 74  d that this inst
26d90 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61  ruction could ha
26da0 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74  ve been.** omitt
26db0 65 64 20 69 66 20 74 68 61 74 20 69 6e 64 65 78  ed if that index
26dc0 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65   had been unique
26dd0 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79  .  P3 is usually
26de0 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c   0.  P3 is.** al
26df0 77 61 79 73 20 65 69 74 68 65 72 20 30 20 6f 72  ways either 0 or
26e00 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20   1..**.** P4 is 
26e10 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50  always of type P
26e20 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66  4_ADVANCE. The f
26e30 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20  unction pointer 
26e40 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c  points to.** sql
26e50 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75  ite3BtreePreviou
26e60 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  s()..**.** If P5
26e70 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64   is positive and
26e80 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
26e90 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63  en, then event c
26ea0 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72  ounter.** number
26eb0 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65   P5-1 in the pre
26ec0 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
26ed0 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a  is incremented..
26ee0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72  */./* Opcode: Pr
26ef0 65 76 49 66 4f 70 65 6e 20 50 31 20 50 32 20 50  evIfOpen P1 P2 P
26f00 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68  3 P4 P5.**.** Th
26f10 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20  is opcode works 
26f20 6a 75 73 74 20 6c 69 6b 65 20 50 72 65 76 20 65  just like Prev e
26f30 78 63 65 70 74 20 74 68 61 74 20 69 66 20 63 75  xcept that if cu
26f40 72 73 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a  rsor P1 is not.*
26f50 2a 20 6f 70 65 6e 20 69 74 20 62 65 68 61 76 65  * open it behave
26f60 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61  s a no-op..*/.ca
26f70 73 65 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74  se OP_SorterNext
26f80 3a 20 7b 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a  : {  /* jump */.
26f90 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
26fa0 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20  ;.  int res;..  
26fb0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
26fc0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
26fd0 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
26fe0 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 72  ;.  res = 0;.  r
26ff0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
27000 6f 72 74 65 72 4e 65 78 74 28 64 62 2c 20 70 43  orterNext(db, pC
27010 2c 20 26 72 65 73 29 3b 0a 20 20 67 6f 74 6f 20  , &res);.  goto 
27020 6e 65 78 74 5f 74 61 69 6c 3b 0a 63 61 73 65 20  next_tail;.case 
27030 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 3a 20 20  OP_PrevIfOpen:  
27040 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73    /* jump */.cas
27050 65 20 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 3a  e OP_NextIfOpen:
27060 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
27070 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f   if( p->apCsr[pO
27080 70 2d 3e 70 31 5d 3d 3d 30 20 29 20 62 72 65 61  p->p1]==0 ) brea
27090 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72  k;.  /* Fall thr
270a0 6f 75 67 68 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  ough */.case OP_
270b0 50 72 65 76 3a 20 20 20 20 20 20 20 20 20 20 2f  Prev:          /
270c0 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f  * jump */.case O
270d0 50 5f 4e 65 78 74 3a 20 20 20 20 20 20 20 20 20  P_Next:         
270e0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73   /* jump */.  as
270f0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
27100 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
27110 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
27120 72 74 28 20 70 4f 70 2d 3e 70 35 3c 41 72 72 61  rt( pOp->p5<Arra
27130 79 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e 74 65  ySize(p->aCounte
27140 72 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  r) );.  pC = p->
27150 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
27160 20 20 72 65 73 20 3d 20 70 4f 70 2d 3e 70 33 3b    res = pOp->p3;
27170 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
27180 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
27190 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
271a0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
271b0 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 3b 0a   pC->pCursor );.
271c0 20 20 61 73 73 65 72 74 28 20 72 65 73 3d 3d 30    assert( res==0
271d0 20 7c 7c 20 28 72 65 73 3d 3d 31 20 26 26 20 70   || (res==1 && p
271e0 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 29 20 29  C->isTable==0) )
271f0 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 72 65  ;.  testcase( re
27200 73 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74  s==1 );.  assert
27210 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  ( pOp->opcode!=O
27220 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 70  P_Next || pOp->p
27230 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69  4.xAdvance==sqli
27240 74 65 33 42 74 72 65 65 4e 65 78 74 20 29 3b 0a  te3BtreeNext );.
27250 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
27260 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c  pcode!=OP_Prev |
27270 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e  | pOp->p4.xAdvan
27280 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65  ce==sqlite3Btree
27290 50 72 65 76 69 6f 75 73 20 29 3b 0a 20 20 61 73  Previous );.  as
272a0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
272b0 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e  e!=OP_NextIfOpen
272c0 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76   || pOp->p4.xAdv
272d0 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72  ance==sqlite3Btr
272e0 65 65 4e 65 78 74 20 29 3b 0a 20 20 61 73 73 65  eeNext );.  asse
272f0 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21  rt( pOp->opcode!
27300 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 20 7c  =OP_PrevIfOpen |
27310 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e  | pOp->p4.xAdvan
27320 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65  ce==sqlite3Btree
27330 50 72 65 76 69 6f 75 73 29 3b 0a 0a 20 20 2f 2a  Previous);..  /*
27340 20 54 68 65 20 4e 65 78 74 20 6f 70 63 6f 64 65   The Next opcode
27350 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 61 66   is only used af
27360 74 65 72 20 53 65 65 6b 47 54 2c 20 53 65 65 6b  ter SeekGT, Seek
27370 47 45 2c 20 61 6e 64 20 52 65 77 69 6e 64 2e 0a  GE, and Rewind..
27380 20 20 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70    ** The Prev op
27390 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73 65  code is only use
273a0 64 20 61 66 74 65 72 20 53 65 65 6b 4c 54 2c 20  d after SeekLT, 
273b0 53 65 65 6b 4c 45 2c 20 61 6e 64 20 4c 61 73 74  SeekLE, and Last
273c0 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  . */.  assert( p
273d0 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e  Op->opcode!=OP_N
273e0 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  ext || pOp->opco
273f0 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65  de!=OP_NextIfOpe
27400 6e 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e  n.       || pC->
27410 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47  seekOp==OP_SeekG
27420 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d  T || pC->seekOp=
27430 3d 4f 50 5f 53 65 65 6b 47 45 0a 20 20 20 20 20  =OP_SeekGE.     
27440 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d    || pC->seekOp=
27450 3d 4f 50 5f 52 65 77 69 6e 64 20 7c 7c 20 70 43  =OP_Rewind || pC
27460 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 46 6f 75  ->seekOp==OP_Fou
27470 6e 64 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  nd);.  assert( p
27480 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50  Op->opcode!=OP_P
27490 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  rev || pOp->opco
274a0 64 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65  de!=OP_PrevIfOpe
274b0 6e 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e  n.       || pC->
274c0 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c  seekOp==OP_SeekL
274d0 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d  T || pC->seekOp=
274e0 3d 4f 50 5f 53 65 65 6b 4c 45 0a 20 20 20 20 20  =OP_SeekLE.     
274f0 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d    || pC->seekOp=
27500 3d 4f 50 5f 4c 61 73 74 20 29 3b 0a 0a 20 20 72  =OP_Last );..  r
27510 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76  c = pOp->p4.xAdv
27520 61 6e 63 65 28 70 43 2d 3e 70 43 75 72 73 6f 72  ance(pC->pCursor
27530 2c 20 26 72 65 73 29 3b 0a 6e 65 78 74 5f 74 61  , &res);.next_ta
27540 69 6c 3a 0a 20 20 70 43 2d 3e 63 61 63 68 65 53  il:.  pC->cacheS
27550 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
27560 41 4c 45 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  ALE;.  VdbeBranc
27570 68 54 61 6b 65 6e 28 72 65 73 3d 3d 30 2c 32 29  hTaken(res==0,2)
27580 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29  ;.  if( res==0 )
27590 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  {.    pC->nullRo
275a0 77 20 3d 20 30 3b 0a 20 20 20 20 70 2d 3e 61 43  w = 0;.    p->aC
275b0 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e 70 35 5d 2b  ounter[pOp->p5]+
275c0 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  +;.#ifdef SQLITE
275d0 5f 54 45 53 54 0a 20 20 20 20 73 71 6c 69 74 65  _TEST.    sqlite
275e0 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b  3_search_count++
275f0 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 67 6f 74  ;.#endif.    got
27600 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64  o jump_to_p2_and
27610 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72  _check_for_inter
27620 72 75 70 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  rupt;.  }else{. 
27630 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d     pC->nullRow =
27640 20 31 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63   1;.  }.  goto c
27650 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
27660 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  pt;.}../* Opcode
27670 3a 20 49 64 78 49 6e 73 65 72 74 20 50 31 20 50  : IdxInsert P1 P
27680 32 20 50 33 20 2a 20 50 35 0a 2a 2a 20 53 79 6e  2 P3 * P5.** Syn
27690 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32 5d  opsis: key=r[P2]
276a0 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
276b0 50 32 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c 20  P2 holds an SQL 
276c0 69 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75  index key made u
276d0 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65  sing the.** Make
276e0 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69  Record instructi
276f0 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ons.  This opcod
27700 65 20 77 72 69 74 65 73 20 74 68 61 74 20 6b 65  e writes that ke
27710 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e  y.** into the in
27720 64 65 78 20 50 31 2e 20 20 44 61 74 61 20 66 6f  dex P1.  Data fo
27730 72 20 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e  r the entry is n
27740 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20  il..**.** P3 is 
27750 61 20 66 6c 61 67 20 74 68 61 74 20 70 72 6f 76  a flag that prov
27760 69 64 65 73 20 61 20 68 69 6e 74 20 74 6f 20 74  ides a hint to t
27770 68 65 20 62 2d 74 72 65 65 20 6c 61 79 65 72 20  he b-tree layer 
27780 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 69 6e 73  that this.** ins
27790 65 72 74 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f  ert is likely to
277a0 20 62 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a 2a   be an append..*
277b0 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74  *.** If P5 has t
277c0 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47  he OPFLAG_NCHANG
277d0 45 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20  E bit set, then 
277e0 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  the change count
277f0 65 72 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65  er is.** increme
27800 6e 74 65 64 20 62 79 20 74 68 69 73 20 69 6e 73  nted by this ins
27810 74 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68  truction.  If th
27820 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
27830 20 62 69 74 20 69 73 20 63 6c 65 61 72 2c 0a 2a   bit is clear,.*
27840 2a 20 74 68 65 6e 20 74 68 65 20 63 68 61 6e 67  * then the chang
27850 65 20 63 6f 75 6e 74 65 72 20 69 73 20 75 6e 63  e counter is unc
27860 68 61 6e 67 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  hanged..**.** If
27870 20 50 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c   P5 has the OPFL
27880 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
27890 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74   bit set, then t
278a0 68 65 20 63 75 72 73 6f 72 20 6d 75 73 74 20 68  he cursor must h
278b0 61 76 65 0a 2a 2a 20 6a 75 73 74 20 64 6f 6e 65  ave.** just done
278c0 20 61 20 73 65 65 6b 20 74 6f 20 74 68 65 20 73   a seek to the s
278d0 70 6f 74 20 77 68 65 72 65 20 74 68 65 20 6e 65  pot where the ne
278e0 77 20 65 6e 74 72 79 20 69 73 20 74 6f 20 62 65  w entry is to be
278f0 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2a 20 54 68   inserted..** Th
27900 69 73 20 66 6c 61 67 20 61 76 6f 69 64 73 20 64  is flag avoids d
27910 6f 69 6e 67 20 61 6e 20 65 78 74 72 61 20 73 65  oing an extra se
27920 65 6b 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  ek..**.** This i
27930 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20  nstruction only 
27940 77 6f 72 6b 73 20 66 6f 72 20 69 6e 64 69 63 65  works for indice
27950 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65  s.  The equivale
27960 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a  nt instruction.*
27970 2a 20 66 6f 72 20 74 61 62 6c 65 73 20 69 73 20  * for tables is 
27980 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a 63 61  OP_Insert..*/.ca
27990 73 65 20 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65  se OP_SorterInse
279a0 72 74 3a 20 20 20 20 20 20 20 2f 2a 20 69 6e 32  rt:       /* in2
279b0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 49   */.case OP_IdxI
279c0 6e 73 65 72 74 3a 20 7b 20 20 20 20 20 20 20 20  nsert: {        
279d0 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65  /* in2 */.  Vdbe
279e0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e  Cursor *pC;.  in
279f0 74 20 6e 4b 65 79 3b 0a 20 20 63 6f 6e 73 74 20  t nKey;.  const 
27a00 63 68 61 72 20 2a 7a 4b 65 79 3b 0a 0a 20 20 61  char *zKey;..  a
27a10 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
27a20 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
27a30 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
27a40 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
27a50 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
27a60 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
27a70 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d  ( isSorter(pC)==
27a80 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50  (pOp->opcode==OP
27a90 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 29 20 29  _SorterInsert) )
27aa0 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
27ab0 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
27ac0 65 72 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73  ert( pIn2->flags
27ad0 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20   & MEM_Blob );. 
27ae0 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f   if( pOp->p5 & O
27af0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20  PFLAG_NCHANGE ) 
27b00 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20  p->nChange++;.  
27b10 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
27b20 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  sor!=0 );.  asse
27b30 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
27b40 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 45 78 70  =0 );.  rc = Exp
27b50 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20  andBlob(pIn2);. 
27b60 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
27b70 4f 4b 20 29 7b 0a 20 20 20 20 69 66 28 20 70 4f  OK ){.    if( pO
27b80 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f  p->opcode==OP_So
27b90 72 74 65 72 49 6e 73 65 72 74 20 29 7b 0a 20 20  rterInsert ){.  
27ba0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
27bb0 56 64 62 65 53 6f 72 74 65 72 57 72 69 74 65 28  VdbeSorterWrite(
27bc0 70 43 2c 20 70 49 6e 32 29 3b 0a 20 20 20 20 7d  pC, pIn2);.    }
27bd0 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4b 65 79  else{.      nKey
27be0 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20 20   = pIn2->n;.    
27bf0 20 20 7a 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 7a    zKey = pIn2->z
27c00 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
27c10 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74 28  ite3BtreeInsert(
27c20 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 7a 4b 65  pC->pCursor, zKe
27c30 79 2c 20 6e 4b 65 79 2c 20 22 22 2c 20 30 2c 20  y, nKey, "", 0, 
27c40 30 2c 20 70 4f 70 2d 3e 70 33 2c 20 0a 20 20 20  0, pOp->p3, .   
27c50 20 20 20 20 20 20 20 28 28 70 4f 70 2d 3e 70 35         ((pOp->p5
27c60 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45   & OPFLAG_USESEE
27c70 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73  KRESULT) ? pC->s
27c80 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a 20  eekResult : 0). 
27c90 20 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20           );.    
27ca0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
27cb0 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
27cc0 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 63 61 63  );.      pC->cac
27cd0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
27ce0 5f 53 54 41 4c 45 3b 0a 20 20 20 20 7d 0a 20 20  _STALE;.    }.  
27cf0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
27d00 20 4f 70 63 6f 64 65 3a 20 49 64 78 44 65 6c 65   Opcode: IdxDele
27d10 74 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  te P1 P2 P3 * *.
27d20 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
27d30 3d 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20  =r[P2@P3].**.** 
27d40 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50  The content of P
27d50 33 20 72 65 67 69 73 74 65 72 73 20 73 74 61 72  3 registers star
27d60 74 69 6e 67 20 61 74 20 72 65 67 69 73 74 65 72  ting at register
27d70 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75   P2 form.** an u
27d80 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
27d90 79 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72  y. This opcode r
27da0 65 6d 6f 76 65 73 20 74 68 61 74 20 65 6e 74 72  emoves that entr
27db0 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69  y from the .** i
27dc0 6e 64 65 78 20 6f 70 65 6e 65 64 20 62 79 20 63  ndex opened by c
27dd0 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73  ursor P1..*/.cas
27de0 65 20 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a 20  e OP_IdxDelete: 
27df0 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
27e00 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
27e10 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
27e20 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
27e30 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28  rd r;..  assert(
27e40 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
27e50 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
27e60 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70  0 && pOp->p2+pOp
27e70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
27e80 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
27e90 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
27ea0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
27eb0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
27ec0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
27ed0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
27ee0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72  ( pC!=0 );.  pCr
27ef0 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
27f00 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73  ;.  assert( pCrs
27f10 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
27f20 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a  ( pOp->p5==0 );.
27f30 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
27f40 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72  C->pKeyInfo;.  r
27f50 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70  .nField = (u16)p
27f60 4f 70 2d 3e 70 33 3b 0a 20 20 72 2e 64 65 66 61  Op->p3;.  r.defa
27f70 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 72 2e  ult_rc = 0;.  r.
27f80 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  aMem = &aMem[pOp
27f90 2d 3e 70 32 5d 3b 0a 23 69 66 64 65 66 20 53 51  ->p2];.#ifdef SQ
27fa0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 7b 20 69  LITE_DEBUG.  { i
27fb0 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69  nt i; for(i=0; i
27fc0 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20  <r.nField; i++) 
27fd0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
27fe0 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29  id(&r.aMem[i]) )
27ff0 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72 63 20  ; }.#endif.  rc 
28000 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
28010 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72  vetoUnpacked(pCr
28020 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72  sr, &r, 0, 0, &r
28030 65 73 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  es);.  if( rc==S
28040 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d  QLITE_OK && res=
28050 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  =0 ){.    rc = s
28060 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74  qlite3BtreeDelet
28070 65 28 70 43 72 73 72 2c 20 30 29 3b 0a 20 20 7d  e(pCrsr, 0);.  }
28080 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64  .  assert( pC->d
28090 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
280a0 20 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   );.  pC->cacheS
280b0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
280c0 41 4c 45 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ALE;.  break;.}.
280d0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 52  ./* Opcode: IdxR
280e0 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a  owid P1 P2 * * *
280f0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
28100 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20  P2]=rowid.**.** 
28110 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73  Write into regis
28120 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65  ter P2 an intege
28130 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6c  r which is the l
28140 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65  ast entry in the
28150 20 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20 74 68   record at.** th
28160 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e 64  e end of the ind
28170 65 78 20 6b 65 79 20 70 6f 69 6e 74 65 64 20 74  ex key pointed t
28180 6f 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 20  o by cursor P1. 
28190 20 54 68 69 73 20 69 6e 74 65 67 65 72 20 73 68   This integer sh
281a0 6f 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65 20 72  ould be.** the r
281b0 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c  owid of the tabl
281c0 65 20 65 6e 74 72 79 20 74 6f 20 77 68 69 63 68  e entry to which
281d0 20 74 68 69 73 20 69 6e 64 65 78 20 65 6e 74 72   this index entr
281e0 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  y points..**.** 
281f0 53 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69 64 2c  See also: Rowid,
28200 20 4d 61 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a   MakeRecord..*/.
28210 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77 69 64  case OP_IdxRowid
28220 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
28230 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 42 74   /* out2 */.  Bt
28240 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
28250 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
28260 0a 20 20 69 36 34 20 72 6f 77 69 64 3b 0a 0a 20  .  i64 rowid;.. 
28270 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
28280 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
28290 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
282a0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
282b0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
282c0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
282d0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
282e0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72  ( pC!=0 );.  pCr
282f0 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
28300 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73  ;.  assert( pCrs
28310 72 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  r!=0 );.  pOut->
28320 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
28330 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
28340 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20  isTable==0 );.  
28350 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
28360 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
28370 0a 0a 20 20 2f 2a 20 73 71 6c 69 74 65 33 56 62  ..  /* sqlite3Vb
28380 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 29  eCursorRestore()
28390 20 63 61 6e 20 6f 6e 6c 79 20 66 61 69 6c 20 69   can only fail i
283a0 66 20 74 68 65 20 72 65 63 6f 72 64 20 68 61 73  f the record has
283b0 20 62 65 65 6e 20 64 65 6c 65 74 65 64 0a 20 20   been deleted.  
283c0 2a 2a 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ** out from unde
283d0 72 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 54  r the cursor.  T
283e0 68 61 74 20 77 69 6c 6c 20 6e 65 76 65 72 20 68  hat will never h
283f0 61 70 70 65 6e 64 20 66 6f 72 20 61 6e 20 49 64  append for an Id
28400 78 52 6f 77 69 64 0a 20 20 2a 2a 20 6f 70 63 6f  xRowid.  ** opco
28410 64 65 2c 20 68 65 6e 63 65 20 74 68 65 20 4e 45  de, hence the NE
28420 56 45 52 28 29 20 61 72 72 6f 75 6e 64 20 74 68  VER() arround th
28430 65 20 63 68 65 63 6b 20 6f 66 20 74 68 65 20 72  e check of the r
28440 65 74 75 72 6e 20 76 61 6c 75 65 2e 0a 20 20 2a  eturn value..  *
28450 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
28460 56 64 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72  VdbeCursorRestor
28470 65 28 70 43 29 3b 0a 20 20 69 66 28 20 4e 45 56  e(pC);.  if( NEV
28480 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  ER(rc!=SQLITE_OK
28490 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
284a0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20  ue_to_error;..  
284b0 69 66 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77  if( !pC->nullRow
284c0 20 29 7b 0a 20 20 20 20 72 6f 77 69 64 20 3d 20   ){.    rowid = 
284d0 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65  0;  /* Not neede
284e0 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f  d.  Only used to
284f0 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69   silence a warni
28500 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20  ng. */.    rc = 
28510 73 71 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f  sqlite3VdbeIdxRo
28520 77 69 64 28 64 62 2c 20 70 43 72 73 72 2c 20 26  wid(db, pCrsr, &
28530 72 6f 77 69 64 29 3b 0a 20 20 20 20 69 66 28 20  rowid);.    if( 
28540 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
28550 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
28560 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
28570 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e      }.    pOut->
28580 75 2e 69 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20  u.i = rowid;.   
28590 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
285a0 45 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20 62 72  EM_Int;.  }.  br
285b0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
285c0 65 3a 20 49 64 78 47 45 20 50 31 20 50 32 20 50  e: IdxGE P1 P2 P
285d0 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
285e0 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
285f0 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72  ].**.** The P4 r
28600 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62  egister values b
28610 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33  eginning with P3
28620 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
28630 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20  d index .** key 
28640 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50  that omits the P
28650 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d  RIMARY KEY.  Com
28660 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61  pare this key va
28670 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68 65 20  lue against the 
28680 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50  index .** that P
28690 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  1 is currently p
286a0 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f  ointing to, igno
286b0 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59  ring the PRIMARY
286c0 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a   KEY or ROWID .*
286d0 2a 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20  * fields at the 
286e0 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  end..**.** If th
286f0 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79  e P1 index entry
28700 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
28710 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
28720 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68   key value.** th
28730 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20  en jump to P2.  
28740 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74  Otherwise fall t
28750 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
28760 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
28770 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  */./* Opcode: Id
28780 78 47 54 20 50 31 20 50 32 20 50 33 20 50 34 20  xGT P1 P2 P3 P4 
28790 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
287a0 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
287b0 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74  ** The P4 regist
287c0 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e  er values beginn
287d0 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d  ing with P3 form
287e0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
287f0 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20  ex .** key that 
28800 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52  omits the PRIMAR
28810 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65 20  Y KEY.  Compare 
28820 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61  this key value a
28830 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78  gainst the index
28840 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20   .** that P1 is 
28850 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
28860 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20  ng to, ignoring 
28870 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
28880 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65  or ROWID .** fie
28890 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 2e 0a  lds at the end..
288a0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
288b0 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 67  index entry is g
288c0 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
288d0 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65  key value.** the
288e0 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f  n jump to P2.  O
288f0 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68  therwise fall th
28900 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
28910 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
28920 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  /./* Opcode: Idx
28930 4c 54 20 50 31 20 50 32 20 50 33 20 50 34 20 50  LT P1 P2 P3 P4 P
28940 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  5.** Synopsis: k
28950 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
28960 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65  * The P4 registe
28970 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69  r values beginni
28980 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20  ng with P3 form 
28990 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
289a0 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f  x .** key that o
289b0 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59  mits the PRIMARY
289c0 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20   KEY or ROWID.  
289d0 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79  Compare this key
289e0 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a   value against.*
289f0 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74  * the index that
28a00 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
28a10 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
28a20 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41  noring the PRIMA
28a30 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57  RY KEY or.** ROW
28a40 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64  ID on the P1 ind
28a50 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ex..**.** If the
28a60 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20   P1 index entry 
28a70 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65  is less than the
28a80 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20   key value then 
28a90 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f  jump to P2..** O
28aa0 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68  therwise fall th
28ab0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
28ac0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
28ad0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  /./* Opcode: Idx
28ae0 4c 45 20 50 31 20 50 32 20 50 33 20 50 34 20 50  LE P1 P2 P3 P4 P
28af0 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  5.** Synopsis: k
28b00 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
28b10 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65  * The P4 registe
28b20 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69  r values beginni
28b30 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20  ng with P3 form 
28b40 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
28b50 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f  x .** key that o
28b60 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59  mits the PRIMARY
28b70 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20   KEY or ROWID.  
28b80 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79  Compare this key
28b90 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a   value against.*
28ba0 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74  * the index that
28bb0 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
28bc0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
28bd0 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41  noring the PRIMA
28be0 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57  RY KEY or.** ROW
28bf0 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64  ID on the P1 ind
28c00 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ex..**.** If the
28c10 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20   P1 index entry 
28c20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20  is less than or 
28c30 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
28c40 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70   value then jump
28c50 0a 2a 2a 20 74 6f 20 50 32 2e 20 4f 74 68 65 72  .** to P2. Other
28c60 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67  wise fall throug
28c70 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
28c80 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
28c90 73 65 20 4f 50 5f 49 64 78 4c 45 3a 20 20 20 20  se OP_IdxLE:    
28ca0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
28cb0 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 54 3a 20  .case OP_IdxGT: 
28cc0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
28cd0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c   */.case OP_IdxL
28ce0 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  T:          /* j
28cf0 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ump */.case OP_I
28d00 64 78 47 45 3a 20 20 7b 20 20 20 20 20 20 20 2f  dxGE:  {       /
28d10 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65  * jump */.  Vdbe
28d20 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e  Cursor *pC;.  in
28d30 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65  t res;.  Unpacke
28d40 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73  dRecord r;..  as
28d50 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
28d60 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
28d70 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
28d80 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
28d90 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
28da0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
28db0 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29   pC->isOrdered )
28dc0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
28dd0 70 43 75 72 73 6f 72 21 3d 30 29 3b 0a 20 20 61  pCursor!=0);.  a
28de0 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
28df0 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
28e00 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
28e10 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  5==0 || pOp->p5=
28e20 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =1 );.  assert( 
28e30 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
28e40 49 4e 54 33 32 20 29 3b 0a 20 20 72 2e 70 4b 65  INT32 );.  r.pKe
28e50 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79  yInfo = pC->pKey
28e60 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64  Info;.  r.nField
28e70 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e   = (u16)pOp->p4.
28e80 69 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  i;.  if( pOp->op
28e90 63 6f 64 65 3c 4f 50 5f 49 64 78 4c 54 20 29 7b  code<OP_IdxLT ){
28ea0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
28eb0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
28ec0 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  LE || pOp->opcod
28ed0 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20  e==OP_IdxGT );. 
28ee0 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20     r.default_rc 
28ef0 3d 20 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  = -1;.  }else{. 
28f00 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
28f10 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45  opcode==OP_IdxGE
28f20 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
28f30 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20  =OP_IdxLT );.   
28f40 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
28f50 30 3b 0a 20 20 7d 0a 20 20 72 2e 61 4d 65 6d 20  0;.  }.  r.aMem 
28f60 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
28f70 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
28f80 44 45 42 55 47 0a 20 20 7b 20 69 6e 74 20 69 3b  DEBUG.  { int i;
28f90 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46   for(i=0; i<r.nF
28fa0 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72  ield; i++) asser
28fb0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72  t( memIsValid(&r
28fc0 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23  .aMem[i]) ); }.#
28fd0 65 6e 64 69 66 0a 20 20 72 65 73 20 3d 20 30 3b  endif.  res = 0;
28fe0 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e    /* Not needed.
28ff0 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73    Only used to s
29000 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67  ilence a warning
29010 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69  . */.  rc = sqli
29020 74 65 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d  te3VdbeIdxKeyCom
29030 70 61 72 65 28 64 62 2c 20 70 43 2c 20 26 72 2c  pare(db, pC, &r,
29040 20 26 72 65 73 29 3b 0a 20 20 61 73 73 65 72 74   &res);.  assert
29050 28 20 28 4f 50 5f 49 64 78 4c 45 26 31 29 3d 3d  ( (OP_IdxLE&1)==
29060 28 4f 50 5f 49 64 78 4c 54 26 31 29 20 26 26 20  (OP_IdxLT&1) && 
29070 28 4f 50 5f 49 64 78 47 45 26 31 29 3d 3d 28 4f  (OP_IdxGE&1)==(O
29080 50 5f 49 64 78 47 54 26 31 29 20 29 3b 0a 20 20  P_IdxGT&1) );.  
29090 69 66 28 20 28 70 4f 70 2d 3e 6f 70 63 6f 64 65  if( (pOp->opcode
290a0 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31  &1)==(OP_IdxLT&1
290b0 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ) ){.    assert(
290c0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
290d0 5f 49 64 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f  _IdxLE || pOp->o
290e0 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20  pcode==OP_IdxLT 
290f0 29 3b 0a 20 20 20 20 72 65 73 20 3d 20 2d 72 65  );.    res = -re
29100 73 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  s;.  }else{.    
29110 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
29120 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c  ode==OP_IdxGE ||
29130 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
29140 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20 72 65  _IdxGT );.    re
29150 73 2b 2b 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42  s++;.  }.  VdbeB
29160 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 3e 30  ranchTaken(res>0
29170 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 3e 30  ,2);.  if( res>0
29180 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
29190 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p2;.  break;.}..
291a0 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72  /* Opcode: Destr
291b0 6f 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  oy P1 P2 P3 * *.
291c0 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20  **.** Delete an 
291d0 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 20  entire database 
291e0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77  table or index w
291f0 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69  hose root page i
29200 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  n the database.*
29210 2a 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20  * file is given 
29220 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  by P1..**.** The
29230 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73   table being des
29240 74 72 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65  troyed is in the
29250 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
29260 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49  ile if P3==0.  I
29270 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20  f.** P3==1 then 
29280 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20  the table to be 
29290 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20  clear is in the 
292a0 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
292b0 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20  se file.** that 
292c0 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
292d0 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75   tables create u
292e0 73 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50  sing CREATE TEMP
292f0 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a  ORARY TABLE..**.
29300 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d  ** If AUTOVACUUM
29310 20 69 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e   is enabled then
29320 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
29330 74 68 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f  that another roo
29340 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20  t page.** might 
29350 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68  be moved into th
29360 65 20 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20  e newly deleted 
29370 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64  root page in ord
29380 65 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a  er to keep all.*
29390 2a 20 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e  * root pages con
293a0 74 69 67 75 6f 75 73 20 61 74 20 74 68 65 20 62  tiguous at the b
293b0 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20  eginning of the 
293c0 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 66  database.  The f
293d0 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f  ormer.** value o
293e0 66 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20  f the root page 
293f0 74 68 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73  that moved - its
29400 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68   value before th
29410 65 20 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20  e move occurred 
29420 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69  -.** is stored i
29430 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20  n register P2.  
29440 49 66 20 6e 6f 20 70 61 67 65 20 0a 2a 2a 20 6d  If no page .** m
29450 6f 76 65 6d 65 6e 74 20 77 61 73 20 72 65 71 75  ovement was requ
29460 69 72 65 64 20 28 62 65 63 61 75 73 65 20 74 68  ired (because th
29470 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72  e table being dr
29480 6f 70 70 65 64 20 77 61 73 20 61 6c 72 65 61 64  opped was alread
29490 79 20 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 6f  y .** the last o
294a0 6e 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ne in the databa
294b0 73 65 29 20 74 68 65 6e 20 61 20 7a 65 72 6f 20  se) then a zero 
294c0 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
294d0 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 49 66 20  ister P2..** If 
294e0 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20 64 69  AUTOVACUUM is di
294f0 73 61 62 6c 65 64 20 74 68 65 6e 20 61 20 7a 65  sabled then a ze
29500 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ro is stored in 
29510 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
29520 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65  ** See also: Cle
29530 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65  ar.*/.case OP_De
29540 73 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20  stroy: {     /* 
29550 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 69 4d  out2 */.  int iM
29560 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69 44 62 3b  oved;.  int iDb;
29570 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ..  assert( p->r
29580 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
29590 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
295a0 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
295b0 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
295c0 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28 20 64  EM_Null;.  if( d
295d0 62 2d 3e 6e 56 64 62 65 52 65 61 64 20 3e 20 64  b->nVdbeRead > d
295e0 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2b 31 20 29  b->nVDestroy+1 )
295f0 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
29600 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d  E_LOCKED;.    p-
29610 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f  >errorAction = O
29620 45 5f 41 62 6f 72 74 3b 0a 20 20 7d 65 6c 73 65  E_Abort;.  }else
29630 7b 0a 20 20 20 20 69 44 62 20 3d 20 70 4f 70 2d  {.    iDb = pOp-
29640 3e 70 33 3b 0a 20 20 20 20 61 73 73 65 72 74 28  >p3;.    assert(
29650 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
29660 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29  treeMask, iDb) )
29670 3b 0a 20 20 20 20 69 4d 6f 76 65 64 20 3d 20 30  ;.    iMoved = 0
29680 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64  ;  /* Not needed
29690 2e 20 20 4f 6e 6c 79 20 74 6f 20 73 69 6c 65 6e  .  Only to silen
296a0 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f  ce a warning. */
296b0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
296c0 33 42 74 72 65 65 44 72 6f 70 54 61 62 6c 65 28  3BtreeDropTable(
296d0 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
296e0 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f 76  , pOp->p1, &iMov
296f0 65 64 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  ed);.    pOut->f
29700 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
29710 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
29720 69 4d 6f 76 65 64 3b 0a 23 69 66 6e 64 65 66 20  iMoved;.#ifndef 
29730 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
29740 56 41 43 55 55 4d 0a 20 20 20 20 69 66 28 20 72  VACUUM.    if( r
29750 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
29760 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20 20 20  iMoved!=0 ){.   
29770 20 20 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61     sqlite3RootPa
29780 67 65 4d 6f 76 65 64 28 64 62 2c 20 69 44 62 2c  geMoved(db, iDb,
29790 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31   iMoved, pOp->p1
297a0 29 3b 0a 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  );.      /* All 
297b0 4f 50 5f 44 65 73 74 72 6f 79 20 6f 70 65 72 61  OP_Destroy opera
297c0 74 69 6f 6e 73 20 6f 63 63 75 72 20 6f 6e 20 74  tions occur on t
297d0 68 65 20 73 61 6d 65 20 62 74 72 65 65 20 2a 2f  he same btree */
297e0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72  .      assert( r
297f0 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c  esetSchemaOnFaul
29800 74 3d 3d 30 20 7c 7c 20 72 65 73 65 74 53 63 68  t==0 || resetSch
29810 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69 44 62 2b  emaOnFault==iDb+
29820 31 20 29 3b 0a 20 20 20 20 20 20 72 65 73 65 74  1 );.      reset
29830 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20  SchemaOnFault = 
29840 69 44 62 2b 31 3b 0a 20 20 20 20 7d 0a 23 65 6e  iDb+1;.    }.#en
29850 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  dif.  }.  break;
29860 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
29870 6c 65 61 72 20 50 31 20 50 32 20 50 33 0a 2a 2a  lear P1 P2 P3.**
29880 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63  .** Delete all c
29890 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20 64  ontents of the d
298a0 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72  atabase table or
298b0 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f   index whose roo
298c0 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74 68 65  t page.** in the
298d0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
298e0 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e 20 20  s given by P1.  
298f0 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65 73 74  But, unlike Dest
29900 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72  roy, do not.** r
29910 65 6d 6f 76 65 20 74 68 65 20 74 61 62 6c 65 20  emove the table 
29920 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d 20 74 68  or index from th
29930 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
29940 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65  .**.** The table
29950 20 62 65 69 6e 67 20 63 6c 65 61 72 20 69 73 20   being clear is 
29960 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
29970 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 32 3d  base file if P2=
29980 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d 3d 31  =0.  If.** P2==1
29990 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
299a0 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20 69  to be clear is i
299b0 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20  n the auxiliary 
299c0 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a  database file.**
299d0 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f   that is used to
299e0 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72   store tables cr
299f0 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41 54  eate using CREAT
29a00 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c  E TEMPORARY TABL
29a10 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  E..**.** If the 
29a20 50 33 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d  P3 value is non-
29a30 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 74  zero, then the t
29a40 61 62 6c 65 20 72 65 66 65 72 72 65 64 20 74 6f  able referred to
29a50 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a 2a 20 69   must be an.** i
29a60 6e 74 6b 65 79 20 74 61 62 6c 65 20 28 61 6e 20  ntkey table (an 
29a70 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  SQL table, not a
29a80 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20 74 68 69  n index). In thi
29a90 73 20 63 61 73 65 20 74 68 65 20 72 6f 77 20 63  s case the row c
29aa0 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e 74 20  hange .** count 
29ab0 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62  is incremented b
29ac0 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  y the number of 
29ad0 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c  rows in the tabl
29ae0 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e  e being cleared.
29af0 20 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 67 72   .** If P3 is gr
29b00 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c  eater than zero,
29b10 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20   then the value 
29b20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
29b30 65 72 20 50 33 20 69 73 0a 2a 2a 20 61 6c 73 6f  er P3 is.** also
29b40 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20   incremented by 
29b50 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
29b60 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ws in the table 
29b70 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 0a 2a  being cleared..*
29b80 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 44  *.** See also: D
29b90 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f  estroy.*/.case O
29ba0 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20 69 6e 74  P_Clear: {.  int
29bb0 20 6e 43 68 61 6e 67 65 3b 0a 20 0a 20 20 6e 43   nChange;. .  nC
29bc0 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61 73 73  hange = 0;.  ass
29bd0 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
29be0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
29bf0 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
29c00 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70  treeMask, pOp->p
29c10 32 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  2) );.  rc = sql
29c20 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 54 61  ite3BtreeClearTa
29c30 62 6c 65 28 0a 20 20 20 20 20 20 64 62 2d 3e 61  ble(.      db->a
29c40 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c  Db[pOp->p2].pBt,
29c50 20 70 4f 70 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e   pOp->p1, (pOp->
29c60 70 33 20 3f 20 26 6e 43 68 61 6e 67 65 20 3a 20  p3 ? &nChange : 
29c70 30 29 0a 20 20 29 3b 0a 20 20 69 66 28 20 70 4f  0).  );.  if( pO
29c80 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 70 2d 3e  p->p3 ){.    p->
29c90 6e 43 68 61 6e 67 65 20 2b 3d 20 6e 43 68 61 6e  nChange += nChan
29ca0 67 65 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  ge;.    if( pOp-
29cb0 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20 20 20 61  >p3>0 ){.      a
29cc0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
29cd0 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  d(&aMem[pOp->p3]
29ce0 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62  ) );.      memAb
29cf0 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26  outToChange(p, &
29d00 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a  aMem[pOp->p3]);.
29d10 20 20 20 20 20 20 61 4d 65 6d 5b 70 4f 70 2d 3e        aMem[pOp->
29d20 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68 61 6e  p3].u.i += nChan
29d30 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ge;.    }.  }.  
29d40 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
29d50 6f 64 65 3a 20 52 65 73 65 74 53 6f 72 74 65 72  ode: ResetSorter
29d60 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
29d70 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e  * Delete all con
29d80 74 65 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 65  tents from the e
29d90 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 6f  phemeral table o
29da0 72 20 73 6f 72 74 65 72 0a 2a 2a 20 74 68 61 74  r sorter.** that
29db0 20 69 73 20 6f 70 65 6e 20 6f 6e 20 63 75 72 73   is open on curs
29dc0 6f 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  or P1..**.** Thi
29dd0 73 20 6f 70 63 6f 64 65 20 6f 6e 6c 79 20 77 6f  s opcode only wo
29de0 72 6b 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20  rks for cursors 
29df0 75 73 65 64 20 66 6f 72 20 73 6f 72 74 69 6e 67  used for sorting
29e00 20 61 6e 64 0a 2a 2a 20 6f 70 65 6e 65 64 20 77   and.** opened w
29e10 69 74 68 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d  ith OP_OpenEphem
29e20 65 72 61 6c 20 6f 72 20 4f 50 5f 53 6f 72 74 65  eral or OP_Sorte
29e30 72 4f 70 65 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  rOpen..*/.case O
29e40 50 5f 52 65 73 65 74 53 6f 72 74 65 72 3a 20 7b  P_ResetSorter: {
29e50 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
29e60 43 3b 0a 20 0a 20 20 61 73 73 65 72 74 28 20 70  C;. .  assert( p
29e70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
29e80 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
29e90 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
29ea0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
29eb0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
29ec0 20 20 69 66 28 20 70 43 2d 3e 70 53 6f 72 74 65    if( pC->pSorte
29ed0 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  r ){.    sqlite3
29ee0 56 64 62 65 53 6f 72 74 65 72 52 65 73 65 74 28  VdbeSorterReset(
29ef0 64 62 2c 20 70 43 2d 3e 70 53 6f 72 74 65 72 29  db, pC->pSorter)
29f00 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
29f10 73 73 65 72 74 28 20 70 43 2d 3e 69 73 45 70 68  ssert( pC->isEph
29f20 65 6d 65 72 61 6c 20 29 3b 0a 20 20 20 20 72 63  emeral );.    rc
29f30 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
29f40 6c 65 61 72 54 61 62 6c 65 4f 66 43 75 72 73 6f  learTableOfCurso
29f50 72 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a  r(pC->pCursor);.
29f60 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
29f70 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74  /* Opcode: Creat
29f80 65 54 61 62 6c 65 20 50 31 20 50 32 20 2a 20 2a  eTable P1 P2 * *
29f90 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
29fa0 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50  r[P2]=root iDb=P
29fb0 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65  1.**.** Allocate
29fc0 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20   a new table in 
29fd0 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
29fe0 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20  e file if P1==0 
29ff0 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78  or in the.** aux
2a000 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20  iliary database 
2a010 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72  file if P1==1 or
2a020 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20   in an attached 
2a030 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50  database if.** P
2a040 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65 20  1>1.  Write the 
2a050 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
2a060 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c   of the new tabl
2a070 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74  e into.** regist
2a080 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20  er P2.**.** The 
2a090 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
2a0a0 65 6e 20 61 20 74 61 62 6c 65 20 61 6e 64 20 61  en a table and a
2a0b0 6e 20 69 6e 64 65 78 20 69 73 20 74 68 69 73 3a  n index is this:
2a0c0 20 20 41 20 74 61 62 6c 65 20 6d 75 73 74 0a 2a    A table must.*
2a0d0 2a 20 68 61 76 65 20 61 20 34 2d 62 79 74 65 20  * have a 4-byte 
2a0e0 69 6e 74 65 67 65 72 20 6b 65 79 20 61 6e 64 20  integer key and 
2a0f0 63 61 6e 20 68 61 76 65 20 61 72 62 69 74 72 61  can have arbitra
2a100 72 79 20 64 61 74 61 2e 20 20 41 6e 20 69 6e 64  ry data.  An ind
2a110 65 78 0a 2a 2a 20 68 61 73 20 61 6e 20 61 72 62  ex.** has an arb
2a120 69 74 72 61 72 79 20 6b 65 79 20 62 75 74 20 6e  itrary key but n
2a130 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65  o data..**.** Se
2a140 65 20 61 6c 73 6f 3a 20 43 72 65 61 74 65 49 6e  e also: CreateIn
2a150 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  dex.*/./* Opcode
2a160 3a 20 43 72 65 61 74 65 49 6e 64 65 78 20 50 31  : CreateIndex P1
2a170 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
2a180 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f  opsis: r[P2]=roo
2a190 74 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41  t iDb=P1.**.** A
2a1a0 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 69 6e  llocate a new in
2a1b0 64 65 78 20 69 6e 20 74 68 65 20 6d 61 69 6e 20  dex in the main 
2a1c0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
2a1d0 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65   P1==0 or in the
2a1e0 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61  .** auxiliary da
2a1f0 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
2a200 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74  1==1 or in an at
2a210 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20  tached database 
2a220 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69  if.** P1>1.  Wri
2a230 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  te the root page
2a240 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e   number of the n
2a250 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a  ew table into.**
2a260 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
2a270 0a 2a 2a 20 53 65 65 20 64 6f 63 75 6d 65 6e 74  .** See document
2a280 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65 61  ation on OP_Crea
2a290 74 65 54 61 62 6c 65 20 66 6f 72 20 61 64 64 69  teTable for addi
2a2a0 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
2a2b0 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  on..*/.case OP_C
2a2c0 72 65 61 74 65 49 6e 64 65 78 3a 20 20 20 20 20  reateIndex:     
2a2d0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
2a2e0 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65  /.case OP_Create
2a2f0 54 61 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20  Table: {        
2a300 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69    /* out2 */.  i
2a310 6e 74 20 70 67 6e 6f 3b 0a 20 20 69 6e 74 20 66  nt pgno;.  int f
2a320 6c 61 67 73 3b 0a 20 20 44 62 20 2a 70 44 62 3b  lags;.  Db *pDb;
2a330 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ..  pOut = out2P
2a340 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
2a350 29 3b 0a 20 20 70 67 6e 6f 20 3d 20 30 3b 0a 20  );.  pgno = 0;. 
2a360 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
2a370 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
2a380 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
2a390 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
2a3a0 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70  ->btreeMask, pOp
2a3b0 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72  ->p1) );.  asser
2a3c0 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
2a3d0 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62  0 );.  pDb = &db
2a3e0 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  ->aDb[pOp->p1];.
2a3f0 20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70    assert( pDb->p
2a400 42 74 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70  Bt!=0 );.  if( p
2a410 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43  Op->opcode==OP_C
2a420 72 65 61 74 65 54 61 62 6c 65 20 29 7b 0a 20 20  reateTable ){.  
2a430 20 20 2f 2a 20 66 6c 61 67 73 20 3d 20 42 54 52    /* flags = BTR
2a440 45 45 5f 49 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20  EE_INTKEY; */.  
2a450 20 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f    flags = BTREE_
2a460 49 4e 54 4b 45 59 3b 0a 20 20 7d 65 6c 73 65 7b  INTKEY;.  }else{
2a470 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42 54 52  .    flags = BTR
2a480 45 45 5f 42 4c 4f 42 4b 45 59 3b 0a 20 20 7d 0a  EE_BLOBKEY;.  }.
2a490 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
2a4a0 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70  reeCreateTable(p
2a4b0 44 62 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20  Db->pBt, &pgno, 
2a4c0 66 6c 61 67 73 29 3b 0a 20 20 70 4f 75 74 2d 3e  flags);.  pOut->
2a4d0 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20 20 62 72  u.i = pgno;.  br
2a4e0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2a4f0 65 3a 20 50 61 72 73 65 53 63 68 65 6d 61 20 50  e: ParseSchema P
2a500 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
2a510 20 52 65 61 64 20 61 6e 64 20 70 61 72 73 65 20   Read and parse 
2a520 61 6c 6c 20 65 6e 74 72 69 65 73 20 66 72 6f 6d  all entries from
2a530 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 53 54   the SQLITE_MAST
2a540 45 52 20 74 61 62 6c 65 20 6f 66 20 64 61 74 61  ER table of data
2a550 62 61 73 65 20 50 31 0a 2a 2a 20 74 68 61 74 20  base P1.** that 
2a560 6d 61 74 63 68 20 74 68 65 20 57 48 45 52 45 20  match the WHERE 
2a570 63 6c 61 75 73 65 20 50 34 2e 20 0a 2a 2a 0a 2a  clause P4. .**.*
2a580 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e  * This opcode in
2a590 76 6f 6b 65 73 20 74 68 65 20 70 61 72 73 65 72  vokes the parser
2a5a0 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77   to create a new
2a5b0 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
2a5c0 2c 0a 2a 2a 20 74 68 65 6e 20 72 75 6e 73 20 74  ,.** then runs t
2a5d0 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d  he new virtual m
2a5e0 61 63 68 69 6e 65 2e 20 20 49 74 20 69 73 20 74  achine.  It is t
2a5f0 68 75 73 20 61 20 72 65 2d 65 6e 74 72 61 6e 74  hus a re-entrant
2a600 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65   opcode..*/.case
2a610 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61 3a   OP_ParseSchema:
2a620 20 7b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20   {.  int iDb;.  
2a630 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 61 73  const char *zMas
2a640 74 65 72 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71  ter;.  char *zSq
2a650 6c 3b 0a 20 20 49 6e 69 74 44 61 74 61 20 69 6e  l;.  InitData in
2a660 69 74 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e  itData;..  /* An
2a670 79 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  y prepared state
2a680 6d 65 6e 74 20 74 68 61 74 20 69 6e 76 6f 6b 65  ment that invoke
2a690 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69  s this opcode wi
2a6a0 6c 6c 20 68 6f 6c 64 20 6d 75 74 65 78 65 73 0a  ll hold mutexes.
2a6b0 20 20 2a 2a 20 6f 6e 20 65 76 65 72 79 20 62 74    ** on every bt
2a6c0 72 65 65 2e 20 20 54 68 69 73 20 69 73 20 61 20  ree.  This is a 
2a6d0 70 72 65 72 65 71 75 69 73 69 74 65 20 66 6f 72  prerequisite for
2a6e0 20 69 6e 76 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20   invoking .  ** 
2a6f0 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
2a700 61 63 6b 28 29 2e 0a 20 20 2a 2f 0a 23 69 66 64  ack()..  */.#ifd
2a710 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
2a720 20 20 66 6f 72 28 69 44 62 3d 30 3b 20 69 44 62    for(iDb=0; iDb
2a730 3c 64 62 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b 29  <db->nDb; iDb++)
2a740 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 44  {.    assert( iD
2a750 62 3d 3d 31 20 7c 7c 20 73 71 6c 69 74 65 33 42  b==1 || sqlite3B
2a760 74 72 65 65 48 6f 6c 64 73 4d 75 74 65 78 28 64  treeHoldsMutex(d
2a770 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 29  b->aDb[iDb].pBt)
2a780 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a   );.  }.#endif..
2a790 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b    iDb = pOp->p1;
2a7a0 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d  .  assert( iDb>=
2a7b0 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62  0 && iDb<db->nDb
2a7c0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
2a7d0 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20  HasProperty(db, 
2a7e0 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f  iDb, DB_SchemaLo
2a7f0 61 64 65 64 29 20 29 3b 0a 20 20 2f 2a 20 55 73  aded) );.  /* Us
2a800 65 64 20 74 6f 20 62 65 20 61 20 63 6f 6e 64 69  ed to be a condi
2a810 74 69 6f 6e 61 6c 20 2a 2f 20 7b 0a 20 20 20 20  tional */ {.    
2a820 7a 4d 61 73 74 65 72 20 3d 20 53 43 48 45 4d 41  zMaster = SCHEMA
2a830 5f 54 41 42 4c 45 28 69 44 62 29 3b 0a 20 20 20  _TABLE(iDb);.   
2a840 20 69 6e 69 74 44 61 74 61 2e 64 62 20 3d 20 64   initData.db = d
2a850 62 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e  b;.    initData.
2a860 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  iDb = pOp->p1;. 
2a870 20 20 20 69 6e 69 74 44 61 74 61 2e 70 7a 45 72     initData.pzEr
2a880 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d  rMsg = &p->zErrM
2a890 73 67 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73  sg;.    zSql = s
2a8a0 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62  qlite3MPrintf(db
2a8b0 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43 54  ,.       "SELECT
2a8c0 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c   name, rootpage,
2a8d0 20 73 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25   sql FROM '%q'.%
2a8e0 73 20 57 48 45 52 45 20 25 73 20 4f 52 44 45 52  s WHERE %s ORDER
2a8f0 20 42 59 20 72 6f 77 69 64 22 2c 0a 20 20 20 20   BY rowid",.    
2a900 20 20 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e     db->aDb[iDb].
2a910 7a 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20  zName, zMaster, 
2a920 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20  pOp->p4.z);.    
2a930 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20  if( zSql==0 ){. 
2a940 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
2a950 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 7d 65 6c 73  _NOMEM;.    }els
2a960 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  e{.      assert(
2a970 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d   db->init.busy==
2a980 30 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69  0 );.      db->i
2a990 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20  nit.busy = 1;.  
2a9a0 20 20 20 20 69 6e 69 74 44 61 74 61 2e 72 63 20      initData.rc 
2a9b0 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20  = SQLITE_OK;.   
2a9c0 20 20 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e     assert( !db->
2a9d0 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a  mallocFailed );.
2a9e0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
2a9f0 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c  e3_exec(db, zSql
2aa00 2c 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  , sqlite3InitCal
2aa10 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61  lback, &initData
2aa20 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20  , 0);.      if( 
2aa30 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc==SQLITE_OK ) 
2aa40 72 63 20 3d 20 69 6e 69 74 44 61 74 61 2e 72 63  rc = initData.rc
2aa50 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44  ;.      sqlite3D
2aa60 62 46 72 65 65 28 64 62 2c 20 7a 53 71 6c 29 3b  bFree(db, zSql);
2aa70 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e  .      db->init.
2aa80 62 75 73 79 20 3d 20 30 3b 0a 20 20 20 20 7d 0a  busy = 0;.    }.
2aa90 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 73    }.  if( rc ) s
2aaa0 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63  qlite3ResetAllSc
2aab0 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f  hemasOfConnectio
2aac0 6e 28 64 62 29 3b 0a 20 20 69 66 28 20 72 63 3d  n(db);.  if( rc=
2aad0 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b  =SQLITE_NOMEM ){
2aae0 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
2aaf0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20  ;.  }.  break;  
2ab00 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .}..#if !defined
2ab10 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41  (SQLITE_OMIT_ANA
2ab20 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a  LYZE)./* Opcode:
2ab30 20 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20 50 31   LoadAnalysis P1
2ab40 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52   * * * *.**.** R
2ab50 65 61 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73  ead the sqlite_s
2ab60 74 61 74 31 20 74 61 62 6c 65 20 66 6f 72 20 64  tat1 table for d
2ab70 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20 6c  atabase P1 and l
2ab80 6f 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a  oad the content.
2ab90 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65  ** of that table
2aba0 20 69 6e 74 6f 20 74 68 65 20 69 6e 74 65 72 6e   into the intern
2abb0 61 6c 20 69 6e 64 65 78 20 68 61 73 68 20 74 61  al index hash ta
2abc0 62 6c 65 2e 20 20 54 68 69 73 20 77 69 6c 6c 20  ble.  This will 
2abd0 63 61 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61  cause.** the ana
2abe0 6c 79 73 69 73 20 74 6f 20 62 65 20 75 73 65 64  lysis to be used
2abf0 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20   when preparing 
2ac00 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20 71  all subsequent q
2ac10 75 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20  ueries..*/.case 
2ac20 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a  OP_LoadAnalysis:
2ac30 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
2ac40 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
2ac50 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
2ac60 72 63 20 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c  rc = sqlite3Anal
2ac70 79 73 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70  ysisLoad(db, pOp
2ac80 2d 3e 70 31 29 3b 0a 20 20 62 72 65 61 6b 3b 20  ->p1);.  break; 
2ac90 20 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64   .}.#endif /* !d
2aca0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
2acb0 49 54 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a  IT_ANALYZE) */..
2acc0 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54  /* Opcode: DropT
2acd0 61 62 6c 65 20 50 31 20 2a 20 2a 20 50 34 20 2a  able P1 * * P4 *
2ace0 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68  .**.** Remove th
2acf0 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d  e internal (in-m
2ad00 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75  emory) data stru
2ad10 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63  ctures that desc
2ad20 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 61 62 6c  ribe.** the tabl
2ad30 65 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61  e named P4 in da
2ad40 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73  tabase P1.  This
2ad50 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72   is called after
2ad60 20 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 64   a table.** is d
2ad70 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b  ropped from disk
2ad80 20 28 75 73 69 6e 67 20 74 68 65 20 44 65 73 74   (using the Dest
2ad90 72 6f 79 20 6f 70 63 6f 64 65 29 20 69 6e 20 6f  roy opcode) in o
2ada0 72 64 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a 2a  rder to keep .**
2adb0 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65   the internal re
2adc0 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
2add0 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f  the.** schema co
2ade0 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68  nsistent with wh
2adf0 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a  at is on disk..*
2ae00 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 61  /.case OP_DropTa
2ae10 62 6c 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  ble: {.  sqlite3
2ae20 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
2ae30 61 62 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31  able(db, pOp->p1
2ae40 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
2ae50 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2ae60 6f 64 65 3a 20 44 72 6f 70 49 6e 64 65 78 20 50  ode: DropIndex P
2ae70 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
2ae80 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65   Remove the inte
2ae90 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29  rnal (in-memory)
2aea0 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73   data structures
2aeb0 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a   that describe.*
2aec0 2a 20 74 68 65 20 69 6e 64 65 78 20 6e 61 6d 65  * the index name
2aed0 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65  d P4 in database
2aee0 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61   P1.  This is ca
2aef0 6c 6c 65 64 20 61 66 74 65 72 20 61 6e 20 69 6e  lled after an in
2af00 64 65 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65  dex.** is droppe
2af10 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69  d from disk (usi
2af20 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f  ng the Destroy o
2af30 70 63 6f 64 65 29 0a 2a 2a 20 69 6e 20 6f 72 64  pcode).** in ord
2af40 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69  er to keep the i
2af50 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e  nternal represen
2af60 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  tation of the.**
2af70 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65   schema consiste
2af80 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20  nt with what is 
2af90 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65  on disk..*/.case
2afa0 20 4f 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b   OP_DropIndex: {
2afb0 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  .  sqlite3Unlink
2afc0 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 64  AndDeleteIndex(d
2afd0 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
2afe0 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b  >p4.z);.  break;
2aff0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
2b000 72 6f 70 54 72 69 67 67 65 72 20 50 31 20 2a 20  ropTrigger P1 * 
2b010 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d  * P4 *.**.** Rem
2b020 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  ove the internal
2b030 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74   (in-memory) dat
2b040 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61  a structures tha
2b050 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68  t describe.** th
2b060 65 20 74 72 69 67 67 65 72 20 6e 61 6d 65 64 20  e trigger named 
2b070 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  P4 in database P
2b080 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c  1.  This is call
2b090 65 64 20 61 66 74 65 72 20 61 20 74 72 69 67 67  ed after a trigg
2b0a0 65 72 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64  er.** is dropped
2b0b0 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e   from disk (usin
2b0c0 67 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70  g the Destroy op
2b0d0 63 6f 64 65 29 20 69 6e 20 6f 72 64 65 72 20 74  code) in order t
2b0e0 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20 69  o keep .** the i
2b0f0 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e  nternal represen
2b100 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  tation of the.**
2b110 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65   schema consiste
2b120 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20  nt with what is 
2b130 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65  on disk..*/.case
2b140 20 4f 50 5f 44 72 6f 70 54 72 69 67 67 65 72 3a   OP_DropTrigger:
2b150 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69   {.  sqlite3Unli
2b160 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67  nkAndDeleteTrigg
2b170 65 72 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  er(db, pOp->p1, 
2b180 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72  pOp->p4.z);.  br
2b190 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66  eak;.}...#ifndef
2b1a0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54   SQLITE_OMIT_INT
2b1b0 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a 20  EGRITY_CHECK./* 
2b1c0 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 72 69 74  Opcode: Integrit
2b1d0 79 43 6b 20 50 31 20 50 32 20 50 33 20 2a 20 50  yCk P1 P2 P3 * P
2b1e0 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e  5.**.** Do an an
2b1f0 61 6c 79 73 69 73 20 6f 66 20 74 68 65 20 63 75  alysis of the cu
2b200 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74  rrently open dat
2b210 61 62 61 73 65 2e 20 20 53 74 6f 72 65 20 69 6e  abase.  Store in
2b220 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20  .** register P1 
2b230 74 68 65 20 74 65 78 74 20 6f 66 20 61 6e 20 65  the text of an e
2b240 72 72 6f 72 20 6d 65 73 73 61 67 65 20 64 65 73  rror message des
2b250 63 72 69 62 69 6e 67 20 61 6e 79 20 70 72 6f 62  cribing any prob
2b260 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70  lems..** If no p
2b270 72 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f 75 6e  roblems are foun
2b280 64 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20  d, store a NULL 
2b290 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
2b2a0 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74  **.** The regist
2b2b0 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74  er P3 contains t
2b2c0 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65  he maximum numbe
2b2d0 72 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72 72  r of allowed err
2b2e0 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20  ors..** At most 
2b2f0 72 65 67 28 50 33 29 20 65 72 72 6f 72 73 20 77  reg(P3) errors w
2b300 69 6c 6c 20 62 65 20 72 65 70 6f 72 74 65 64 2e  ill be reported.
2b310 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  .** In other wor
2b320 64 73 2c 20 74 68 65 20 61 6e 61 6c 79 73 69 73  ds, the analysis
2b330 20 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61   stops as soon a
2b340 73 20 72 65 67 28 50 31 29 20 65 72 72 6f 72 73  s reg(P1) errors
2b350 20 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20   are .** seen.  
2b360 52 65 67 28 50 31 29 20 69 73 20 75 70 64 61 74  Reg(P1) is updat
2b370 65 64 20 77 69 74 68 20 74 68 65 20 6e 75 6d 62  ed with the numb
2b380 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d  er of errors rem
2b390 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68  aining..**.** Th
2b3a0 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  e root page numb
2b3b0 65 72 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65  ers of all table
2b3c0 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  s in the databas
2b3d0 65 20 61 72 65 20 69 6e 74 65 67 65 72 0a 2a 2a  e are integer.**
2b3e0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 28 50   stored in reg(P
2b3f0 31 29 2c 20 72 65 67 28 50 31 2b 31 29 2c 20 72  1), reg(P1+1), r
2b400 65 67 28 50 31 2b 32 29 2c 20 2e 2e 2e 2e 20 20  eg(P1+2), ....  
2b410 54 68 65 72 65 20 61 72 65 20 50 32 20 74 61 62  There are P2 tab
2b420 6c 65 73 0a 2a 2a 20 74 6f 74 61 6c 2e 0a 2a 2a  les.** total..**
2b430 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74  .** If P5 is not
2b440 20 7a 65 72 6f 2c 20 74 68 65 20 63 68 65 63 6b   zero, the check
2b450 20 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68 65 20   is done on the 
2b460 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
2b470 73 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74 20  se.** file, not 
2b480 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
2b490 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  e file..**.** Th
2b4a0 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65  is opcode is use
2b4b0 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  d to implement t
2b4c0 68 65 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  he integrity_che
2b4d0 63 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61  ck pragma..*/.ca
2b4e0 73 65 20 4f 50 5f 49 6e 74 65 67 72 69 74 79 43  se OP_IntegrityC
2b4f0 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f 74  k: {.  int nRoot
2b500 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
2b510 20 6f 66 20 74 61 62 6c 65 73 20 74 6f 20 63 68   of tables to ch
2b520 65 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20 6f 66  eck.  (Number of
2b530 20 72 6f 6f 74 20 70 61 67 65 73 2e 29 20 2a 2f   root pages.) */
2b540 0a 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 20 20  .  int *aRoot;  
2b550 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 72     /* Array of r
2b560 6f 6f 74 70 61 67 65 20 6e 75 6d 62 65 72 73 20  ootpage numbers 
2b570 66 6f 72 20 74 61 62 6c 65 73 20 74 6f 20 62 65  for tables to be
2b580 20 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20 69 6e   checked */.  in
2b590 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  t j;          /*
2b5a0 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f   Loop counter */
2b5b0 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20  .  int nErr;    
2b5c0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
2b5d0 65 72 72 6f 72 73 20 72 65 70 6f 72 74 65 64 20  errors reported 
2b5e0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20 20  */.  char *z;   
2b5f0 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
2b600 74 68 65 20 65 72 72 6f 72 20 72 65 70 6f 72 74  the error report
2b610 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72   */.  Mem *pnErr
2b620 3b 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65  ;     /* Registe
2b630 72 20 6b 65 65 70 69 6e 67 20 74 72 61 63 6b 20  r keeping track 
2b640 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e  of errors remain
2b650 69 6e 67 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74  ing */..  assert
2b660 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
2b670 3b 0a 20 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d  ;.  nRoot = pOp-
2b680 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  >p2;.  assert( n
2b690 52 6f 6f 74 3e 30 20 29 3b 0a 20 20 61 52 6f 6f  Root>0 );.  aRoo
2b6a0 74 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  t = sqlite3DbMal
2b6b0 6c 6f 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f  locRaw(db, sizeo
2b6c0 66 28 69 6e 74 29 2a 28 6e 52 6f 6f 74 2b 31 29  f(int)*(nRoot+1)
2b6d0 20 29 3b 0a 20 20 69 66 28 20 61 52 6f 6f 74 3d   );.  if( aRoot=
2b6e0 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
2b6f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2b700 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
2b710 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
2b720 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 6e 45 72  ursor) );.  pnEr
2b730 72 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  r = &aMem[pOp->p
2b740 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  3];.  assert( (p
2b750 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45  nErr->flags & ME
2b760 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61  M_Int)!=0 );.  a
2b770 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66  ssert( (pnErr->f
2b780 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c  lags & (MEM_Str|
2b790 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b  MEM_Blob))==0 );
2b7a0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
2b7b0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28  pOp->p1];.  for(
2b7c0 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b  j=0; j<nRoot; j+
2b7d0 2b 29 7b 0a 20 20 20 20 61 52 6f 6f 74 5b 6a 5d  +){.    aRoot[j]
2b7e0 20 3d 20 28 69 6e 74 29 73 71 6c 69 74 65 33 56   = (int)sqlite3V
2b7f0 64 62 65 49 6e 74 56 61 6c 75 65 28 26 70 49 6e  dbeIntValue(&pIn
2b800 31 5b 6a 5d 29 3b 0a 20 20 7d 0a 20 20 61 52 6f  1[j]);.  }.  aRo
2b810 6f 74 5b 6a 5d 20 3d 20 30 3b 0a 20 20 61 73 73  ot[j] = 0;.  ass
2b820 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62 2d  ert( pOp->p5<db-
2b830 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
2b840 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
2b850 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e  btreeMask, pOp->
2b860 70 35 29 20 29 3b 0a 20 20 7a 20 3d 20 73 71 6c  p5) );.  z = sql
2b870 69 74 65 33 42 74 72 65 65 49 6e 74 65 67 72 69  ite3BtreeIntegri
2b880 74 79 43 68 65 63 6b 28 64 62 2d 3e 61 44 62 5b  tyCheck(db->aDb[
2b890 70 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c 20 61 52  pOp->p5].pBt, aR
2b8a0 6f 6f 74 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20 20  oot, nRoot,.    
2b8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e               (in
2b8d0 74 29 70 6e 45 72 72 2d 3e 75 2e 69 2c 20 26 6e  t)pnErr->u.i, &n
2b8e0 45 72 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 44  Err);.  sqlite3D
2b8f0 62 46 72 65 65 28 64 62 2c 20 61 52 6f 6f 74 29  bFree(db, aRoot)
2b900 3b 0a 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d  ;.  pnErr->u.i -
2b910 3d 20 6e 45 72 72 3b 0a 20 20 73 71 6c 69 74 65  = nErr;.  sqlite
2b920 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
2b930 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45 72  pIn1);.  if( nEr
2b940 72 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65  r==0 ){.    asse
2b950 72 74 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65  rt( z==0 );.  }e
2b960 6c 73 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a  lse if( z==0 ){.
2b970 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
2b980 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71  .  }else{.    sq
2b990 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53  lite3VdbeMemSetS
2b9a0 74 72 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20  tr(pIn1, z, -1, 
2b9b0 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 73 71 6c  SQLITE_UTF8, sql
2b9c0 69 74 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a  ite3_free);.  }.
2b9d0 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
2b9e0 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73  BSIZE(pIn1);.  s
2b9f0 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
2ba00 45 6e 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65  Encoding(pIn1, e
2ba10 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61  ncoding);.  brea
2ba20 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2ba30 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47  QLITE_OMIT_INTEG
2ba40 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f  RITY_CHECK */../
2ba50 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74  * Opcode: RowSet
2ba60 41 64 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Add P1 P2 * * *.
2ba70 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 6f  ** Synopsis:  ro
2ba80 77 73 65 74 28 50 31 29 3d 72 5b 50 32 5d 0a 2a  wset(P1)=r[P2].*
2ba90 2a 0a 2a 2a 20 49 6e 73 65 72 74 20 74 68 65 20  *.** Insert the 
2baa0 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 68 65  integer value he
2bab0 6c 64 20 62 79 20 72 65 67 69 73 74 65 72 20 50  ld by register P
2bac0 32 20 69 6e 74 6f 20 61 20 62 6f 6f 6c 65 61 6e  2 into a boolean
2bad0 20 69 6e 64 65 78 0a 2a 2a 20 68 65 6c 64 20 69   index.** held i
2bae0 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
2baf0 2a 0a 2a 2a 20 41 6e 20 61 73 73 65 72 74 69 6f  *.** An assertio
2bb00 6e 20 66 61 69 6c 73 20 69 66 20 50 32 20 69 73  n fails if P2 is
2bb10 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 2e   not an integer.
2bb20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53  .*/.case OP_RowS
2bb30 65 74 41 64 64 3a 20 7b 20 20 20 20 20 20 20 2f  etAdd: {       /
2bb40 2a 20 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20 20  * in1, in2 */.  
2bb50 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
2bb60 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20  ->p1];.  pIn2 = 
2bb70 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
2bb80 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d    assert( (pIn2-
2bb90 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
2bba0 29 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70  )!=0 );.  if( (p
2bbb0 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
2bbc0 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20  _RowSet)==0 ){. 
2bbd0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2bbe0 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29  mSetRowSet(pIn1)
2bbf0 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d  ;.    if( (pIn1-
2bc00 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
2bc10 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  Set)==0 ) goto n
2bc20 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c  o_mem;.  }.  sql
2bc30 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74  ite3RowSetInsert
2bc40 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74  (pIn1->u.pRowSet
2bc50 2c 20 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20  , pIn2->u.i);.  
2bc60 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2bc70 6f 64 65 3a 20 52 6f 77 53 65 74 52 65 61 64 20  ode: RowSetRead 
2bc80 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
2bc90 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
2bca0 3d 72 6f 77 73 65 74 28 50 31 29 0a 2a 2a 0a 2a  =rowset(P1).**.*
2bcb0 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 73 6d  * Extract the sm
2bcc0 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 66 72 6f  allest value fro
2bcd0 6d 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20  m boolean index 
2bce0 50 31 20 61 6e 64 20 70 75 74 20 74 68 61 74 20  P1 and put that 
2bcf0 76 61 6c 75 65 20 69 6e 74 6f 0a 2a 2a 20 72 65  value into.** re
2bd00 67 69 73 74 65 72 20 50 33 2e 20 20 4f 72 2c 20  gister P3.  Or, 
2bd10 69 66 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78  if boolean index
2bd20 20 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c 79   P1 is initially
2bd30 20 65 6d 70 74 79 2c 20 6c 65 61 76 65 20 50 33   empty, leave P3
2bd40 0a 2a 2a 20 75 6e 63 68 61 6e 67 65 64 20 61 6e  .** unchanged an
2bd50 64 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75  d jump to instru
2bd60 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73  ction P2..*/.cas
2bd70 65 20 4f 50 5f 52 6f 77 53 65 74 52 65 61 64 3a  e OP_RowSetRead:
2bd80 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70   {       /* jump
2bd90 2c 20 69 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in1, out3 */. 
2bda0 20 69 36 34 20 76 61 6c 3b 0a 0a 20 20 70 49 6e   i64 val;..  pIn
2bdb0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
2bdc0 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  1];.  if( (pIn1-
2bdd0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
2bde0 53 65 74 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 73  Set)==0 .   || s
2bdf0 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74  qlite3RowSetNext
2be00 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74  (pIn1->u.pRowSet
2be10 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a  , &val)==0.  ){.
2be20 20 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f 6c 65      /* The boole
2be30 61 6e 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74  an index is empt
2be40 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33  y */.    sqlite3
2be50 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
2be60 49 6e 31 29 3b 0a 20 20 20 20 56 64 62 65 42 72  In1);.    VdbeBr
2be70 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a  anchTaken(1,2);.
2be80 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
2be90 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f  _p2_and_check_fo
2bea0 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d  r_interrupt;.  }
2beb0 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76  else{.    /* A v
2bec0 61 6c 75 65 20 77 61 73 20 70 75 6c 6c 65 64 20  alue was pulled 
2bed0 66 72 6f 6d 20 74 68 65 20 69 6e 64 65 78 20 2a  from the index *
2bee0 2f 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  /.    VdbeBranch
2bef0 54 61 6b 65 6e 28 30 2c 32 29 3b 0a 20 20 20 20  Taken(0,2);.    
2bf00 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2bf10 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70  tInt64(&aMem[pOp
2bf20 2d 3e 70 33 5d 2c 20 76 61 6c 29 3b 0a 20 20 7d  ->p3], val);.  }
2bf30 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f  .  goto check_fo
2bf40 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a  r_interrupt;.}..
2bf50 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65  /* Opcode: RowSe
2bf60 74 54 65 73 74 20 50 31 20 50 32 20 50 33 20 50  tTest P1 P2 P3 P
2bf70 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  4.** Synopsis: i
2bf80 66 20 72 5b 50 33 5d 20 69 6e 20 72 6f 77 73 65  f r[P3] in rowse
2bf90 74 28 50 31 29 20 67 6f 74 6f 20 50 32 0a 2a 2a  t(P1) goto P2.**
2bfa0 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33 20  .** Register P3 
2bfb0 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 68 6f  is assumed to ho
2bfc0 6c 64 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65  ld a 64-bit inte
2bfd0 67 65 72 20 76 61 6c 75 65 2e 20 49 66 20 72 65  ger value. If re
2bfe0 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 63 6f 6e  gister P1.** con
2bff0 74 61 69 6e 73 20 61 20 52 6f 77 53 65 74 20 6f  tains a RowSet o
2c000 62 6a 65 63 74 20 61 6e 64 20 74 68 61 74 20 52  bject and that R
2c010 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 63 6f 6e  owSet object con
2c020 74 61 69 6e 73 0a 2a 2a 20 74 68 65 20 76 61 6c  tains.** the val
2c030 75 65 20 68 65 6c 64 20 69 6e 20 50 33 2c 20 6a  ue held in P3, j
2c040 75 6d 70 20 74 6f 20 72 65 67 69 73 74 65 72 20  ump to register 
2c050 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  P2. Otherwise, i
2c060 6e 73 65 72 74 20 74 68 65 0a 2a 2a 20 69 6e 74  nsert the.** int
2c070 65 67 65 72 20 69 6e 20 50 33 20 69 6e 74 6f 20  eger in P3 into 
2c080 74 68 65 20 52 6f 77 53 65 74 20 61 6e 64 20 63  the RowSet and c
2c090 6f 6e 74 69 6e 75 65 20 6f 6e 20 74 6f 20 74 68  ontinue on to th
2c0a0 65 0a 2a 2a 20 6e 65 78 74 20 6f 70 63 6f 64 65  e.** next opcode
2c0b0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 6f 77 53  ..**.** The RowS
2c0c0 65 74 20 6f 62 6a 65 63 74 20 69 73 20 6f 70 74  et object is opt
2c0d0 69 6d 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63  imized for the c
2c0e0 61 73 65 20 77 68 65 72 65 20 73 75 63 63 65 73  ase where succes
2c0f0 73 69 76 65 20 73 65 74 73 0a 2a 2a 20 6f 66 20  sive sets.** of 
2c100 69 6e 74 65 67 65 72 73 2c 20 77 68 65 72 65 20  integers, where 
2c110 65 61 63 68 20 73 65 74 20 63 6f 6e 74 61 69 6e  each set contain
2c120 73 20 6e 6f 20 64 75 70 6c 69 63 61 74 65 73 2e  s no duplicates.
2c130 20 45 61 63 68 20 73 65 74 0a 2a 2a 20 6f 66 20   Each set.** of 
2c140 76 61 6c 75 65 73 20 69 73 20 69 64 65 6e 74 69  values is identi
2c150 66 69 65 64 20 62 79 20 61 20 75 6e 69 71 75 65  fied by a unique
2c160 20 50 34 20 76 61 6c 75 65 2e 20 54 68 65 20 66   P4 value. The f
2c170 69 72 73 74 20 73 65 74 0a 2a 2a 20 6d 75 73 74  irst set.** must
2c180 20 68 61 76 65 20 50 34 3d 3d 30 2c 20 74 68 65   have P4==0, the
2c190 20 66 69 6e 61 6c 20 73 65 74 20 50 34 3d 2d 31   final set P4=-1
2c1a0 2e 20 20 50 34 20 6d 75 73 74 20 62 65 20 65 69  .  P4 must be ei
2c1b0 74 68 65 72 20 2d 31 20 6f 72 0a 2a 2a 20 6e 6f  ther -1 or.** no
2c1c0 6e 2d 6e 65 67 61 74 69 76 65 2e 20 20 46 6f 72  n-negative.  For
2c1d0 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76 61   non-negative va
2c1e0 6c 75 65 73 20 6f 66 20 50 34 20 6f 6e 6c 79 20  lues of P4 only 
2c1f0 74 68 65 20 6c 6f 77 65 72 20 34 0a 2a 2a 20 62  the lower 4.** b
2c200 69 74 73 20 61 72 65 20 73 69 67 6e 69 66 69 63  its are signific
2c210 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ant..**.** This 
2c220 61 6c 6c 6f 77 73 20 6f 70 74 69 6d 69 7a 61 74  allows optimizat
2c230 69 6f 6e 73 3a 20 28 61 29 20 77 68 65 6e 20 50  ions: (a) when P
2c240 34 3d 3d 30 20 74 68 65 72 65 20 69 73 20 6e 6f  4==0 there is no
2c250 20 6e 65 65 64 20 74 6f 20 74 65 73 74 0a 2a 2a   need to test.**
2c260 20 74 68 65 20 72 6f 77 73 65 74 20 6f 62 6a 65   the rowset obje
2c270 63 74 20 66 6f 72 20 50 33 2c 20 61 73 20 69 74  ct for P3, as it
2c280 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 20 6e   is guaranteed n
2c290 6f 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20 69 74  ot to contain it
2c2a0 2c 0a 2a 2a 20 28 62 29 20 77 68 65 6e 20 50 34  ,.** (b) when P4
2c2b0 3d 3d 2d 31 20 74 68 65 72 65 20 69 73 20 6e 6f  ==-1 there is no
2c2c0 20 6e 65 65 64 20 74 6f 20 69 6e 73 65 72 74 20   need to insert 
2c2d0 74 68 65 20 76 61 6c 75 65 2c 20 61 73 20 69 74  the value, as it
2c2e0 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20 62   will.** never b
2c2f0 65 20 74 65 73 74 65 64 20 66 6f 72 2c 20 61 6e  e tested for, an
2c300 64 20 28 63 29 20 77 68 65 6e 20 61 20 76 61 6c  d (c) when a val
2c310 75 65 20 74 68 61 74 20 69 73 20 70 61 72 74 20  ue that is part 
2c320 6f 66 20 73 65 74 20 58 20 69 73 0a 2a 2a 20 69  of set X is.** i
2c330 6e 73 65 72 74 65 64 2c 20 74 68 65 72 65 20 69  nserted, there i
2c340 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 73 65 61  s no need to sea
2c350 72 63 68 20 74 6f 20 73 65 65 20 69 66 20 74 68  rch to see if th
2c360 65 20 73 61 6d 65 20 76 61 6c 75 65 20 77 61 73  e same value was
2c370 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 69  .** previously i
2c380 6e 73 65 72 74 65 64 20 61 73 20 70 61 72 74 20  nserted as part 
2c390 6f 66 20 73 65 74 20 58 20 28 6f 6e 6c 79 20 69  of set X (only i
2c3a0 66 20 69 74 20 77 61 73 20 70 72 65 76 69 6f 75  f it was previou
2c3b0 73 6c 79 0a 2a 2a 20 69 6e 73 65 72 74 65 64 20  sly.** inserted 
2c3c0 61 73 20 70 61 72 74 20 6f 66 20 73 6f 6d 65 20  as part of some 
2c3d0 6f 74 68 65 72 20 73 65 74 29 2e 0a 2a 2f 0a 63  other set)..*/.c
2c3e0 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 54 65 73  ase OP_RowSetTes
2c3f0 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
2c400 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
2c410 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20  , in1, in3 */.  
2c420 69 6e 74 20 69 53 65 74 3b 0a 20 20 69 6e 74 20  int iSet;.  int 
2c430 65 78 69 73 74 73 3b 0a 0a 20 20 70 49 6e 31 20  exists;..  pIn1 
2c440 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2c450 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ;.  pIn3 = &aMem
2c460 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 53 65  [pOp->p3];.  iSe
2c470 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  t = pOp->p4.i;. 
2c480 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
2c490 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
2c4a0 0a 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69  .  /* If there i
2c4b0 73 20 61 6e 79 74 68 69 6e 67 20 6f 74 68 65 72  s anything other
2c4c0 20 74 68 61 6e 20 61 20 72 6f 77 73 65 74 20 6f   than a rowset o
2c4d0 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f 72 79 20  bject in memory 
2c4e0 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20 64 65  cell P1,.  ** de
2c4f0 6c 65 74 65 20 69 74 20 6e 6f 77 20 61 6e 64 20  lete it now and 
2c500 69 6e 69 74 69 61 6c 69 7a 65 20 50 31 20 77 69  initialize P1 wi
2c510 74 68 20 61 6e 20 65 6d 70 74 79 20 72 6f 77 73  th an empty rows
2c520 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28 20 28 70  et.  */.  if( (p
2c530 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
2c540 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20  _RowSet)==0 ){. 
2c550 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2c560 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29  mSetRowSet(pIn1)
2c570 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d  ;.    if( (pIn1-
2c580 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
2c590 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  Set)==0 ) goto n
2c5a0 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61 73  o_mem;.  }..  as
2c5b0 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
2c5c0 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
2c5d0 20 61 73 73 65 72 74 28 20 69 53 65 74 3d 3d 2d   assert( iSet==-
2c5e0 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20 29 3b 0a  1 || iSet>=0 );.
2c5f0 20 20 69 66 28 20 69 53 65 74 20 29 7b 0a 20 20    if( iSet ){.  
2c600 20 20 65 78 69 73 74 73 20 3d 20 73 71 6c 69 74    exists = sqlit
2c610 65 33 52 6f 77 53 65 74 54 65 73 74 28 70 49 6e  e3RowSetTest(pIn
2c620 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 69 53  1->u.pRowSet, iS
2c630 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a  et, pIn3->u.i);.
2c640 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
2c650 6b 65 6e 28 65 78 69 73 74 73 21 3d 30 2c 32 29  ken(exists!=0,2)
2c660 3b 0a 20 20 20 20 69 66 28 20 65 78 69 73 74 73  ;.    if( exists
2c670 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
2c680 70 32 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69 53  p2;.  }.  if( iS
2c690 65 74 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  et>=0 ){.    sql
2c6a0 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74  ite3RowSetInsert
2c6b0 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74  (pIn1->u.pRowSet
2c6c0 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20  , pIn3->u.i);.  
2c6d0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23  }.  break;.}...#
2c6e0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2c6f0 49 54 5f 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f  IT_TRIGGER../* O
2c700 70 63 6f 64 65 3a 20 50 72 6f 67 72 61 6d 20 50  pcode: Program P
2c710 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
2c720 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20  .** Execute the 
2c730 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20  trigger program 
2c740 70 61 73 73 65 64 20 61 73 20 50 34 20 28 74 79  passed as P4 (ty
2c750 70 65 20 50 34 5f 53 55 42 50 52 4f 47 52 41 4d  pe P4_SUBPROGRAM
2c760 29 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e  ). .**.** P1 con
2c770 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73  tains the addres
2c780 73 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20  s of the memory 
2c790 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61 69  cell that contai
2c7a0 6e 73 20 74 68 65 20 66 69 72 73 74 20 6d 65 6d  ns the first mem
2c7b0 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20  ory .** cell in 
2c7c0 61 6e 20 61 72 72 61 79 20 6f 66 20 76 61 6c 75  an array of valu
2c7d0 65 73 20 75 73 65 64 20 61 73 20 61 72 67 75 6d  es used as argum
2c7e0 65 6e 74 73 20 74 6f 20 74 68 65 20 73 75 62 2d  ents to the sub-
2c7f0 70 72 6f 67 72 61 6d 2e 20 50 32 20 0a 2a 2a 20  program. P2 .** 
2c800 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64  contains the add
2c810 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20  ress to jump to 
2c820 69 66 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  if the sub-progr
2c830 61 6d 20 74 68 72 6f 77 73 20 61 6e 20 49 47 4e  am throws an IGN
2c840 4f 52 45 20 0a 2a 2a 20 65 78 63 65 70 74 69 6f  ORE .** exceptio
2c850 6e 20 75 73 69 6e 67 20 74 68 65 20 52 41 49 53  n using the RAIS
2c860 45 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 52 65  E() function. Re
2c870 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69  gister P3 contai
2c880 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20 0a  ns the address .
2c890 2a 2a 20 6f 66 20 61 20 6d 65 6d 6f 72 79 20 63  ** of a memory c
2c8a0 65 6c 6c 20 69 6e 20 74 68 69 73 20 28 74 68 65  ell in this (the
2c8b0 20 70 61 72 65 6e 74 29 20 56 4d 20 74 68 61 74   parent) VM that
2c8c0 20 69 73 20 75 73 65 64 20 74 6f 20 61 6c 6c 6f   is used to allo
2c8d0 63 61 74 65 20 74 68 65 20 0a 2a 2a 20 6d 65 6d  cate the .** mem
2c8e0 6f 72 79 20 72 65 71 75 69 72 65 64 20 62 79 20  ory required by 
2c8f0 74 68 65 20 73 75 62 2d 76 64 62 65 20 61 74 20  the sub-vdbe at 
2c900 72 75 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50  runtime..**.** P
2c910 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
2c920 6f 20 74 68 65 20 56 4d 20 63 6f 6e 74 61 69 6e  o the VM contain
2c930 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20  ing the trigger 
2c940 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49  program..**.** I
2c950 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P5 is non-zero
2c960 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69 76 65  , then recursive
2c970 20 70 72 6f 67 72 61 6d 20 69 6e 76 6f 63 61 74   program invocat
2c980 69 6f 6e 20 69 73 20 65 6e 61 62 6c 65 64 2e 0a  ion is enabled..
2c990 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 6f 67 72  */.case OP_Progr
2c9a0 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  am: {        /* 
2c9b0 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  jump */.  int nM
2c9c0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
2c9d0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d    /* Number of m
2c9e0 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20  emory registers 
2c9f0 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  for sub-program 
2ca00 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 20  */.  int nByte; 
2ca10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2ca20 42 79 74 65 73 20 6f 66 20 72 75 6e 74 69 6d 65  Bytes of runtime
2ca30 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64 20   space required 
2ca40 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  for sub-program 
2ca50 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 74 3b 20 20  */.  Mem *pRt;  
2ca60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2ca70 52 65 67 69 73 74 65 72 20 74 6f 20 61 6c 6c 6f  Register to allo
2ca80 63 61 74 65 20 72 75 6e 74 69 6d 65 20 73 70 61  cate runtime spa
2ca90 63 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  ce */.  Mem *pMe
2caa0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
2cab0 2f 2a 20 55 73 65 64 20 74 6f 20 69 74 65 72 61  /* Used to itera
2cac0 74 65 20 74 68 72 6f 75 67 68 20 6d 65 6d 6f 72  te through memor
2cad0 79 20 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d  y cells */.  Mem
2cae0 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20   *pEnd;         
2caf0 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 6d 65 6d       /* Last mem
2cb00 6f 72 79 20 63 65 6c 6c 20 69 6e 20 6e 65 77 20  ory cell in new 
2cb10 61 72 72 61 79 20 2a 2f 0a 20 20 56 64 62 65 46  array */.  VdbeF
2cb20 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20  rame *pFrame;   
2cb30 20 20 20 2f 2a 20 4e 65 77 20 76 64 62 65 20 66     /* New vdbe f
2cb40 72 61 6d 65 20 74 6f 20 65 78 65 63 75 74 65 20  rame to execute 
2cb50 69 6e 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72  in */.  SubProgr
2cb60 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20  am *pProgram;   
2cb70 2f 2a 20 53 75 62 2d 70 72 6f 67 72 61 6d 20 74  /* Sub-program t
2cb80 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a 20 20 76  o execute */.  v
2cb90 6f 69 64 20 2a 74 3b 20 20 20 20 20 20 20 20 20  oid *t;         
2cba0 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
2cbb0 69 64 65 6e 74 69 66 79 69 6e 67 20 74 72 69 67  identifying trig
2cbc0 67 65 72 20 2a 2f 0a 0a 20 20 70 50 72 6f 67 72  ger */..  pProgr
2cbd0 61 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 50 72  am = pOp->p4.pPr
2cbe0 6f 67 72 61 6d 3b 0a 20 20 70 52 74 20 3d 20 26  ogram;.  pRt = &
2cbf0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
2cc00 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61   assert( pProgra
2cc10 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a 20  m->nOp>0 );.  . 
2cc20 20 2f 2a 20 49 66 20 74 68 65 20 70 35 20 66 6c   /* If the p5 fl
2cc30 61 67 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65  ag is clear, the
2cc40 6e 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f  n recursive invo
2cc50 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65  cation of trigge
2cc60 72 73 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61  rs is .  ** disa
2cc70 62 6c 65 64 20 66 6f 72 20 62 61 63 6b 77 61 72  bled for backwar
2cc80 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  ds compatibility
2cc90 20 28 70 35 20 69 73 20 73 65 74 20 69 66 20 74   (p5 is set if t
2cca0 68 69 73 20 73 75 62 2d 70 72 6f 67 72 61 6d 0a  his sub-program.
2ccb0 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c 79 20 61    ** is really a
2ccc0 20 74 72 69 67 67 65 72 2c 20 6e 6f 74 20 61 20   trigger, not a 
2ccd0 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69  foreign key acti
2cce0 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66 6c 61 67  on, and the flag
2ccf0 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64 20 63 6c   set.  ** and cl
2cd00 65 61 72 65 64 20 62 79 20 74 68 65 20 22 50 52  eared by the "PR
2cd10 41 47 4d 41 20 72 65 63 75 72 73 69 76 65 5f 74  AGMA recursive_t
2cd20 72 69 67 67 65 72 73 22 20 63 6f 6d 6d 61 6e 64  riggers" command
2cd30 20 69 73 20 63 6c 65 61 72 29 2e 0a 20 20 2a 2a   is clear)..  **
2cd40 20 0a 20 20 2a 2a 20 49 74 20 69 73 20 72 65 63   .  ** It is rec
2cd50 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f  ursive invocatio
2cd60 6e 20 6f 66 20 74 72 69 67 67 65 72 73 2c 20 61  n of triggers, a
2cd70 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c  t the SQL level,
2cd80 20 74 68 61 74 20 69 73 20 0a 20 20 2a 2a 20 64   that is .  ** d
2cd90 69 73 61 62 6c 65 64 2e 20 49 6e 20 73 6f 6d 65  isabled. In some
2cda0 20 63 61 73 65 73 20 61 20 73 69 6e 67 6c 65 20   cases a single 
2cdb0 74 72 69 67 67 65 72 20 6d 61 79 20 67 65 6e 65  trigger may gene
2cdc0 72 61 74 65 20 6d 6f 72 65 20 74 68 61 6e 20 6f  rate more than o
2cdd0 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50 72 6f 67  ne .  ** SubProg
2cde0 72 61 6d 20 28 69 66 20 74 68 65 20 74 72 69 67  ram (if the trig
2cdf0 67 65 72 20 6d 61 79 20 62 65 20 65 78 65 63 75  ger may be execu
2ce00 74 65 64 20 77 69 74 68 20 6d 6f 72 65 20 74 68  ted with more th
2ce10 61 6e 20 6f 6e 65 20 64 69 66 66 65 72 65 6e 74  an one different
2ce20 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49   .  ** ON CONFLI
2ce30 43 54 20 61 6c 67 6f 72 69 74 68 6d 29 2e 20 53  CT algorithm). S
2ce40 75 62 50 72 6f 67 72 61 6d 20 73 74 72 75 63 74  ubProgram struct
2ce50 75 72 65 73 20 61 73 73 6f 63 69 61 74 65 64 20  ures associated 
2ce60 77 69 74 68 20 61 0a 20 20 2a 2a 20 73 69 6e 67  with a.  ** sing
2ce70 6c 65 20 74 72 69 67 67 65 72 20 61 6c 6c 20 68  le trigger all h
2ce80 61 76 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c  ave the same val
2ce90 75 65 20 66 6f 72 20 74 68 65 20 53 75 62 50 72  ue for the SubPr
2cea0 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a  ogram.token .  *
2ceb0 2a 20 76 61 72 69 61 62 6c 65 2e 20 20 2a 2f 0a  * variable.  */.
2cec0 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b    if( pOp->p5 ){
2ced0 0a 20 20 20 20 74 20 3d 20 70 50 72 6f 67 72 61  .    t = pProgra
2cee0 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f  m->token;.    fo
2cef0 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61  r(pFrame=p->pFra
2cf00 6d 65 3b 20 70 46 72 61 6d 65 20 26 26 20 70 46  me; pFrame && pF
2cf10 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20  rame->token!=t; 
2cf20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70  pFrame=pFrame->p
2cf30 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 69 66 28  Parent);.    if(
2cf40 20 70 46 72 61 6d 65 20 29 20 62 72 65 61 6b 3b   pFrame ) break;
2cf50 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6e  .  }..  if( p->n
2cf60 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69  Frame>=db->aLimi
2cf70 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54  t[SQLITE_LIMIT_T
2cf80 52 49 47 47 45 52 5f 44 45 50 54 48 5d 20 29 7b  RIGGER_DEPTH] ){
2cf90 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
2cfa0 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69  _ERROR;.    sqli
2cfb0 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
2cfc0 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c 73  "too many levels
2cfd0 20 6f 66 20 74 72 69 67 67 65 72 20 72 65 63 75   of trigger recu
2cfe0 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20 62 72 65  rsion");.    bre
2cff0 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65  ak;.  }..  /* Re
2d000 67 69 73 74 65 72 20 70 52 74 20 69 73 20 75 73  gister pRt is us
2d010 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
2d020 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20  memory required 
2d030 74 6f 20 73 61 76 65 20 74 68 65 20 73 74 61 74  to save the stat
2d040 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 63 75  e.  ** of the cu
2d050 72 72 65 6e 74 20 70 72 6f 67 72 61 6d 2c 20 61  rrent program, a
2d060 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65  nd the memory re
2d070 71 75 69 72 65 64 20 61 74 20 72 75 6e 74 69 6d  quired at runtim
2d080 65 20 74 6f 20 65 78 65 63 75 74 65 0a 20 20 2a  e to execute.  *
2d090 2a 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  * the trigger pr
2d0a0 6f 67 72 61 6d 2e 20 49 66 20 74 68 69 73 20 74  ogram. If this t
2d0b0 72 69 67 67 65 72 20 68 61 73 20 62 65 65 6e 20  rigger has been 
2d0c0 66 69 72 65 64 20 62 65 66 6f 72 65 2c 20 74 68  fired before, th
2d0d0 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20 69 73 20  en pRt .  ** is 
2d0e0 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65  already allocate
2d0f0 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 74  d. Otherwise, it
2d100 20 6d 75 73 74 20 62 65 20 69 6e 69 74 69 61 6c   must be initial
2d110 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20  ized.  */.  if( 
2d120 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  (pRt->flags&MEM_
2d130 46 72 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20  Frame)==0 ){.   
2d140 20 2f 2a 20 53 75 62 50 72 6f 67 72 61 6d 2e 6e   /* SubProgram.n
2d150 4d 65 6d 20 69 73 20 73 65 74 20 74 6f 20 74 68  Mem is set to th
2d160 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  e number of memo
2d170 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 62 79  ry cells used by
2d180 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 70 72 6f   the .    ** pro
2d190 67 72 61 6d 20 73 74 6f 72 65 64 20 69 6e 20 53  gram stored in S
2d1a0 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70 2e 20 41  ubProgram.aOp. A
2d1b0 73 20 77 65 6c 6c 20 61 73 20 74 68 65 73 65 2c  s well as these,
2d1c0 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20   one memory.    
2d1d0 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65 71 75 69  ** cell is requi
2d1e0 72 65 64 20 66 6f 72 20 65 61 63 68 20 63 75 72  red for each cur
2d1f0 73 6f 72 20 75 73 65 64 20 62 79 20 74 68 65 20  sor used by the 
2d200 70 72 6f 67 72 61 6d 2e 20 53 65 74 20 6c 6f 63  program. Set loc
2d210 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72 69 61 62  al.    ** variab
2d220 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20 6c 61 74  le nMem (and lat
2d230 65 72 2c 20 56 64 62 65 46 72 61 6d 65 2e 6e 43  er, VdbeFrame.nC
2d240 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74 68 69 73  hildMem) to this
2d250 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20   value..    */. 
2d260 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72 6f 67 72     nMem = pProgr
2d270 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f 67  am->nMem + pProg
2d280 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 6e  ram->nCsr;.    n
2d290 42 79 74 65 20 3d 20 52 4f 55 4e 44 38 28 73 69  Byte = ROUND8(si
2d2a0 7a 65 6f 66 28 56 64 62 65 46 72 61 6d 65 29 29  zeof(VdbeFrame))
2d2b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b  .              +
2d2c0 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d   nMem * sizeof(M
2d2d0 65 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  em).            
2d2e0 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43    + pProgram->nC
2d2f0 73 72 20 2a 20 73 69 7a 65 6f 66 28 56 64 62 65  sr * sizeof(Vdbe
2d300 43 75 72 73 6f 72 20 2a 29 0a 20 20 20 20 20 20  Cursor *).      
2d310 20 20 20 20 20 20 20 20 2b 20 70 50 72 6f 67 72          + pProgr
2d320 61 6d 2d 3e 6e 4f 6e 63 65 20 2a 20 73 69 7a 65  am->nOnce * size
2d330 6f 66 28 75 38 29 3b 0a 20 20 20 20 70 46 72 61  of(u8);.    pFra
2d340 6d 65 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61  me = sqlite3DbMa
2d350 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c 20 6e 42 79  llocZero(db, nBy
2d360 74 65 29 3b 0a 20 20 20 20 69 66 28 20 21 70 46  te);.    if( !pF
2d370 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 67 6f  rame ){.      go
2d380 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d  to no_mem;.    }
2d390 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
2d3a0 4d 65 6d 52 65 6c 65 61 73 65 28 70 52 74 29 3b  MemRelease(pRt);
2d3b0 0a 20 20 20 20 70 52 74 2d 3e 66 6c 61 67 73 20  .    pRt->flags 
2d3c0 3d 20 4d 45 4d 5f 46 72 61 6d 65 3b 0a 20 20 20  = MEM_Frame;.   
2d3d0 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65 20 3d   pRt->u.pFrame =
2d3e0 20 70 46 72 61 6d 65 3b 0a 0a 20 20 20 20 70 46   pFrame;..    pF
2d3f0 72 61 6d 65 2d 3e 76 20 3d 20 70 3b 0a 20 20 20  rame->v = p;.   
2d400 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d   pFrame->nChildM
2d410 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20 20 20 20 70  em = nMem;.    p
2d420 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72  Frame->nChildCsr
2d430 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73   = pProgram->nCs
2d440 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 70  r;.    pFrame->p
2d450 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  c = (int)(pOp - 
2d460 61 4f 70 29 3b 0a 20 20 20 20 70 46 72 61 6d 65  aOp);.    pFrame
2d470 2d 3e 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d  ->aMem = p->aMem
2d480 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4d  ;.    pFrame->nM
2d490 65 6d 20 3d 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20  em = p->nMem;.  
2d4a0 20 20 70 46 72 61 6d 65 2d 3e 61 70 43 73 72 20    pFrame->apCsr 
2d4b0 3d 20 70 2d 3e 61 70 43 73 72 3b 0a 20 20 20 20  = p->apCsr;.    
2d4c0 70 46 72 61 6d 65 2d 3e 6e 43 75 72 73 6f 72 20  pFrame->nCursor 
2d4d0 3d 20 70 2d 3e 6e 43 75 72 73 6f 72 3b 0a 20 20  = p->nCursor;.  
2d4e0 20 20 70 46 72 61 6d 65 2d 3e 61 4f 70 20 3d 20    pFrame->aOp = 
2d4f0 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 70 46 72 61  p->aOp;.    pFra
2d500 6d 65 2d 3e 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70  me->nOp = p->nOp
2d510 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 74 6f  ;.    pFrame->to
2d520 6b 65 6e 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  ken = pProgram->
2d530 74 6f 6b 65 6e 3b 0a 20 20 20 20 70 46 72 61 6d  token;.    pFram
2d540 65 2d 3e 61 4f 6e 63 65 46 6c 61 67 20 3d 20 70  e->aOnceFlag = p
2d550 2d 3e 61 4f 6e 63 65 46 6c 61 67 3b 0a 20 20 20  ->aOnceFlag;.   
2d560 20 70 46 72 61 6d 65 2d 3e 6e 4f 6e 63 65 46 6c   pFrame->nOnceFl
2d570 61 67 20 3d 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61  ag = p->nOnceFla
2d580 67 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  g;.#ifdef SQLITE
2d590 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41  _ENABLE_STMT_SCA
2d5a0 4e 53 54 41 54 55 53 0a 20 20 20 20 70 46 72 61  NSTATUS.    pFra
2d5b0 6d 65 2d 3e 61 6e 45 78 65 63 20 3d 20 70 2d 3e  me->anExec = p->
2d5c0 61 6e 45 78 65 63 3b 0a 23 65 6e 64 69 66 0a 0a  anExec;.#endif..
2d5d0 20 20 20 20 70 45 6e 64 20 3d 20 26 56 64 62 65      pEnd = &Vdbe
2d5e0 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29  FrameMem(pFrame)
2d5f0 5b 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d  [pFrame->nChildM
2d600 65 6d 5d 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65  em];.    for(pMe
2d610 6d 3d 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70  m=VdbeFrameMem(p
2d620 46 72 61 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45  Frame); pMem!=pE
2d630 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20  nd; pMem++){.   
2d640 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d     pMem->flags =
2d650 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a   MEM_Undefined;.
2d660 20 20 20 20 20 20 70 4d 65 6d 2d 3e 64 62 20 3d        pMem->db =
2d670 20 64 62 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c   db;.    }.  }el
2d680 73 65 7b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d  se{.    pFrame =
2d690 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a   pRt->u.pFrame;.
2d6a0 20 20 20 20 61 73 73 65 72 74 28 20 70 50 72 6f      assert( pPro
2d6b0 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67  gram->nMem+pProg
2d6c0 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d  ram->nCsr==pFram
2d6d0 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 29 3b 0a  e->nChildMem );.
2d6e0 20 20 20 20 61 73 73 65 72 74 28 20 70 50 72 6f      assert( pPro
2d6f0 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61  gram->nCsr==pFra
2d700 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 29 3b  me->nChildCsr );
2d710 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 69 6e  .    assert( (in
2d720 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3d 3d 70  t)(pOp - aOp)==p
2d730 46 72 61 6d 65 2d 3e 70 63 20 29 3b 0a 20 20 7d  Frame->pc );.  }
2d740 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b  ..  p->nFrame++;
2d750 0a 20 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  .  pFrame->pPare
2d760 6e 74 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a  nt = p->pFrame;.
2d770 20 20 70 46 72 61 6d 65 2d 3e 6c 61 73 74 52 6f    pFrame->lastRo
2d780 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b  wid = lastRowid;
2d790 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 61 6e  .  pFrame->nChan
2d7a0 67 65 20 3d 20 70 2d 3e 6e 43 68 61 6e 67 65 3b  ge = p->nChange;
2d7b0 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 44 62 43 68  .  pFrame->nDbCh
2d7c0 61 6e 67 65 20 3d 20 70 2d 3e 64 62 2d 3e 6e 43  ange = p->db->nC
2d7d0 68 61 6e 67 65 3b 0a 20 20 70 2d 3e 6e 43 68 61  hange;.  p->nCha
2d7e0 6e 67 65 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46  nge = 0;.  p->pF
2d7f0 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20  rame = pFrame;. 
2d800 20 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20   p->aMem = aMem 
2d810 3d 20 26 56 64 62 65 46 72 61 6d 65 4d 65 6d 28  = &VdbeFrameMem(
2d820 70 46 72 61 6d 65 29 5b 2d 31 5d 3b 0a 20 20 70  pFrame)[-1];.  p
2d830 2d 3e 6e 4d 65 6d 20 3d 20 70 46 72 61 6d 65 2d  ->nMem = pFrame-
2d840 3e 6e 43 68 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d  >nChildMem;.  p-
2d850 3e 6e 43 75 72 73 6f 72 20 3d 20 28 75 31 36 29  >nCursor = (u16)
2d860 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73  pFrame->nChildCs
2d870 72 3b 0a 20 20 70 2d 3e 61 70 43 73 72 20 3d 20  r;.  p->apCsr = 
2d880 28 56 64 62 65 43 75 72 73 6f 72 20 2a 2a 29 26  (VdbeCursor **)&
2d890 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2b 31 5d 3b  aMem[p->nMem+1];
2d8a0 0a 20 20 70 2d 3e 61 4f 70 20 3d 20 61 4f 70 20  .  p->aOp = aOp 
2d8b0 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b  = pProgram->aOp;
2d8c0 0a 20 20 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f  .  p->nOp = pPro
2d8d0 67 72 61 6d 2d 3e 6e 4f 70 3b 0a 20 20 70 2d 3e  gram->nOp;.  p->
2d8e0 61 4f 6e 63 65 46 6c 61 67 20 3d 20 28 75 38 20  aOnceFlag = (u8 
2d8f0 2a 29 26 70 2d 3e 61 70 43 73 72 5b 70 2d 3e 6e  *)&p->apCsr[p->n
2d900 43 75 72 73 6f 72 5d 3b 0a 20 20 70 2d 3e 6e 4f  Cursor];.  p->nO
2d910 6e 63 65 46 6c 61 67 20 3d 20 70 50 72 6f 67 72  nceFlag = pProgr
2d920 61 6d 2d 3e 6e 4f 6e 63 65 3b 0a 23 69 66 64 65  am->nOnce;.#ifde
2d930 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
2d940 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 0a  STMT_SCANSTATUS.
2d950 20 20 70 2d 3e 61 6e 45 78 65 63 20 3d 20 30 3b    p->anExec = 0;
2d960 0a 23 65 6e 64 69 66 0a 20 20 70 4f 70 20 3d 20  .#endif.  pOp = 
2d970 26 61 4f 70 5b 2d 31 5d 3b 0a 20 20 6d 65 6d 73  &aOp[-1];.  mems
2d980 65 74 28 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 2c  et(p->aOnceFlag,
2d990 20 30 2c 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67   0, p->nOnceFlag
2d9a0 29 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  );..  break;.}..
2d9b0 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 61 6d  /* Opcode: Param
2d9c0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
2d9d0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
2d9e0 73 20 6f 6e 6c 79 20 65 76 65 72 20 70 72 65 73  s only ever pres
2d9f0 65 6e 74 20 69 6e 20 73 75 62 2d 70 72 6f 67 72  ent in sub-progr
2da00 61 6d 73 20 63 61 6c 6c 65 64 20 76 69 61 20 74  ams called via t
2da10 68 65 20 0a 2a 2a 20 4f 50 5f 50 72 6f 67 72 61  he .** OP_Progra
2da20 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 43  m instruction. C
2da30 6f 70 79 20 61 20 76 61 6c 75 65 20 63 75 72 72  opy a value curr
2da40 65 6e 74 6c 79 20 73 74 6f 72 65 64 20 69 6e 20  ently stored in 
2da50 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c  a memory .** cel
2da60 6c 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67  l of the calling
2da70 20 28 70 61 72 65 6e 74 29 20 66 72 61 6d 65 20   (parent) frame 
2da80 74 6f 20 63 65 6c 6c 20 50 32 20 69 6e 20 74 68  to cell P2 in th
2da90 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65 73  e current frames
2daa0 20 0a 2a 2a 20 61 64 64 72 65 73 73 20 73 70 61   .** address spa
2dab0 63 65 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  ce. This is used
2dac0 20 62 79 20 74 72 69 67 67 65 72 20 70 72 6f 67   by trigger prog
2dad0 72 61 6d 73 20 74 6f 20 61 63 63 65 73 73 20 74  rams to access t
2dae0 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64  he new.* .** and
2daf0 20 6f 6c 64 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a   old.* values..*
2db00 2a 0a 2a 2a 20 54 68 65 20 61 64 64 72 65 73 73  *.** The address
2db10 20 6f 66 20 74 68 65 20 63 65 6c 6c 20 69 6e 20   of the cell in 
2db20 74 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65  the parent frame
2db30 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
2db40 79 20 61 64 64 69 6e 67 0a 2a 2a 20 74 68 65 20  y adding.** the 
2db50 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20  value of the P1 
2db60 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
2db70 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20  value of the P1 
2db80 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 0a  argument to the.
2db90 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72  ** calling OP_Pr
2dba0 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f  ogram instructio
2dbb0 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61  n..*/.case OP_Pa
2dbc0 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ram: {          
2dbd0 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64   /* out2 */.  Vd
2dbe0 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
2dbf0 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20 70  .  Mem *pIn;.  p
2dc00 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
2dc10 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
2dc20 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61  pFrame = p->pFra
2dc30 6d 65 3b 0a 20 20 70 49 6e 20 3d 20 26 70 46 72  me;.  pIn = &pFr
2dc40 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70  ame->aMem[pOp->p
2dc50 31 20 2b 20 70 46 72 61 6d 65 2d 3e 61 4f 70 5b  1 + pFrame->aOp[
2dc60 70 46 72 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b  pFrame->pc].p1];
2dc70 20 20 20 0a 20 20 73 71 6c 69 74 65 33 56 64 62     .  sqlite3Vdb
2dc80 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
2dc90 70 4f 75 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45  pOut, pIn, MEM_E
2dca0 70 68 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  phem);.  break;.
2dcb0 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66  }..#endif /* #if
2dcc0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2dcd0 5f 54 52 49 47 47 45 52 20 2a 2f 0a 0a 23 69 66  _TRIGGER */..#if
2dce0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2dcf0 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20  _FOREIGN_KEY./* 
2dd00 4f 70 63 6f 64 65 3a 20 46 6b 43 6f 75 6e 74 65  Opcode: FkCounte
2dd10 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  r P1 P2 * * *.**
2dd20 20 53 79 6e 6f 70 73 69 73 3a 20 66 6b 63 74 72   Synopsis: fkctr
2dd30 5b 50 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20 49  [P1]+=P2.**.** I
2dd40 6e 63 72 65 6d 65 6e 74 20 61 20 22 63 6f 6e 73  ncrement a "cons
2dd50 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 22 20  traint counter" 
2dd60 62 79 20 50 32 20 28 50 32 20 6d 61 79 20 62 65  by P2 (P2 may be
2dd70 20 6e 65 67 61 74 69 76 65 20 6f 72 20 70 6f 73   negative or pos
2dd80 69 74 69 76 65 29 2e 0a 2a 2a 20 49 66 20 50 31  itive)..** If P1
2dd90 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
2dda0 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74  e database const
2ddb0 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 20 69 73  raint counter is
2ddc0 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 0a 2a 2a   incremented .**
2ddd0 20 28 64 65 66 65 72 72 65 64 20 66 6f 72 65 69   (deferred forei
2dde0 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
2ddf0 74 73 29 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ts). Otherwise, 
2de00 69 66 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74  if P1 is zero, t
2de10 68 65 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  he .** statement
2de20 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72   counter is incr
2de30 65 6d 65 6e 74 65 64 20 28 69 6d 6d 65 64 69 61  emented (immedia
2de40 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  te foreign key c
2de50 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a  onstraints)..*/.
2de60 63 61 73 65 20 4f 50 5f 46 6b 43 6f 75 6e 74 65  case OP_FkCounte
2de70 72 3a 20 7b 0a 20 20 69 66 28 20 64 62 2d 3e 66  r: {.  if( db->f
2de80 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 44 65  lags & SQLITE_De
2de90 66 65 72 46 4b 73 20 29 7b 0a 20 20 20 20 64 62  ferFKs ){.    db
2dea0 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
2deb0 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  ns += pOp->p2;. 
2dec0 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e   }else if( pOp->
2ded0 70 31 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44  p1 ){.    db->nD
2dee0 65 66 65 72 72 65 64 43 6f 6e 73 20 2b 3d 20 70  eferredCons += p
2def0 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 7b  Op->p2;.  }else{
2df00 0a 20 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74  .    p->nFkConst
2df10 72 61 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70 32  raint += pOp->p2
2df20 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2df30 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 49  ../* Opcode: FkI
2df40 66 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20  fZero P1 P2 * * 
2df50 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
2df60 66 20 66 6b 63 74 72 5b 50 31 5d 3d 3d 30 20 67  f fkctr[P1]==0 g
2df70 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69  oto P2.**.** Thi
2df80 73 20 6f 70 63 6f 64 65 20 74 65 73 74 73 20 69  s opcode tests i
2df90 66 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  f a foreign key 
2dfa0 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74  constraint-count
2dfb0 65 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  er is currently 
2dfc0 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20  zero..** If so, 
2dfd0 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
2dfe0 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77 69 73  ion P2. Otherwis
2dff0 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  e, fall through 
2e000 74 6f 20 74 68 65 20 6e 65 78 74 20 0a 2a 2a 20  to the next .** 
2e010 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
2e020 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d  ** If P1 is non-
2e030 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 6a  zero, then the j
2e040 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20  ump is taken if 
2e050 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
2e060 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 0a  straint-counter.
2e070 2a 2a 20 69 73 20 7a 65 72 6f 20 28 74 68 65 20  ** is zero (the 
2e080 6f 6e 65 20 74 68 61 74 20 63 6f 75 6e 74 73 20  one that counts 
2e090 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61  deferred constra
2e0a0 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e  int violations).
2e0b0 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 7a 65 72   If P1 is.** zer
2e0c0 6f 2c 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  o, the jump is t
2e0d0 61 6b 65 6e 20 69 66 20 74 68 65 20 73 74 61 74  aken if the stat
2e0e0 65 6d 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74  ement constraint
2e0f0 2d 63 6f 75 6e 74 65 72 20 69 73 20 7a 65 72 6f  -counter is zero
2e100 0a 2a 2a 20 28 69 6d 6d 65 64 69 61 74 65 20 66  .** (immediate f
2e110 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
2e120 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73  raint violations
2e130 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b  )..*/.case OP_Fk
2e140 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20  IfZero: {       
2e150 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
2e160 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  f( pOp->p1 ){.  
2e170 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
2e180 6e 28 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  n(db->nDeferredC
2e190 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44  ons==0 && db->nD
2e1a0 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d  eferredImmCons==
2e1b0 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20 64  0, 2);.    if( d
2e1c0 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
2e1d0 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65  ==0 && db->nDefe
2e1e0 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29  rredImmCons==0 )
2e1f0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
2e200 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56  ;.  }else{.    V
2e210 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70  dbeBranchTaken(p
2e220 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d  ->nFkConstraint=
2e230 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72  =0 && db->nDefer
2e240 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32  redImmCons==0, 2
2e250 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e 46  );.    if( p->nF
2e260 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26  kConstraint==0 &
2e270 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  & db->nDeferredI
2e280 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 67 6f 74 6f  mmCons==0 ) goto
2e290 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
2e2a0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2e2b0 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51  if /* #ifndef SQ
2e2c0 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
2e2d0 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64 65  N_KEY */..#ifnde
2e2e0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
2e2f0 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f  TOINCREMENT./* O
2e300 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31  pcode: MemMax P1
2e310 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
2e320 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 6d 61 78  opsis: r[P1]=max
2e330 28 72 5b 50 31 5d 2c 72 5b 50 32 5d 29 0a 2a 2a  (r[P1],r[P2]).**
2e340 0a 2a 2a 20 50 31 20 69 73 20 61 20 72 65 67 69  .** P1 is a regi
2e350 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74  ster in the root
2e360 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56   frame of this V
2e370 4d 20 28 74 68 65 20 72 6f 6f 74 20 66 72 61 6d  M (the root fram
2e380 65 20 69 73 0a 2a 2a 20 64 69 66 66 65 72 65 6e  e is.** differen
2e390 74 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65  t from the curre
2e3a0 6e 74 20 66 72 61 6d 65 20 69 66 20 74 68 69 73  nt frame if this
2e3b0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
2e3c0 62 65 69 6e 67 20 65 78 65 63 75 74 65 64 0a 2a  being executed.*
2e3d0 2a 20 77 69 74 68 69 6e 20 61 20 73 75 62 2d 70  * within a sub-p
2e3e0 72 6f 67 72 61 6d 29 2e 20 53 65 74 20 74 68 65  rogram). Set the
2e3f0 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
2e400 65 72 20 50 31 20 74 6f 20 74 68 65 20 6d 61 78  er P1 to the max
2e410 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69 74 73 20  imum of .** its 
2e420 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 61 6e  current value an
2e430 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  d the value in r
2e440 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
2e450 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
2e460 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20 65 72 72  on throws an err
2e470 6f 72 20 69 66 20 74 68 65 20 6d 65 6d 6f 72 79  or if the memory
2e480 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69   cell is not ini
2e490 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74  tially.** an int
2e4a0 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  eger..*/.case OP
2e4b0 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20  _MemMax: {      
2e4c0 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64    /* in2 */.  Vd
2e4d0 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
2e4e0 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65  .  if( p->pFrame
2e4f0 20 29 7b 0a 20 20 20 20 66 6f 72 28 70 46 72 61   ){.    for(pFra
2e500 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46  me=p->pFrame; pF
2e510 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70  rame->pParent; p
2e520 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50  Frame=pFrame->pP
2e530 61 72 65 6e 74 29 3b 0a 20 20 20 20 70 49 6e 31  arent);.    pIn1
2e540 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d   = &pFrame->aMem
2e550 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c  [pOp->p1];.  }el
2e560 73 65 7b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26  se{.    pIn1 = &
2e570 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2e580 20 7d 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d   }.  assert( mem
2e590 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b  IsValid(pIn1) );
2e5a0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
2e5b0 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31  mIntegerify(pIn1
2e5c0 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  );.  pIn2 = &aMe
2e5d0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71  m[pOp->p2];.  sq
2e5e0 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
2e5f0 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20  gerify(pIn2);.  
2e600 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49  if( pIn1->u.i<pI
2e610 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49  n2->u.i){.    pI
2e620 6e 31 2d 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e  n1->u.i = pIn2->
2e630 75 2e 69 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  u.i;.  }.  break
2e640 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
2e650 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
2e660 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f  CREMENT */../* O
2e670 70 63 6f 64 65 3a 20 49 66 50 6f 73 20 50 31 20  pcode: IfPos P1 
2e680 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
2e690 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e  opsis: if r[P1]>
2e6a0 30 20 74 68 65 6e 20 72 5b 50 31 5d 2d 3d 50 33  0 then r[P1]-=P3
2e6b0 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  , goto P2.**.** 
2e6c0 52 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74  Register P1 must
2e6d0 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
2e6e0 67 65 72 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76  ger..** If the v
2e6f0 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
2e700 20 50 31 20 69 73 20 31 20 6f 72 20 67 72 65 61   P1 is 1 or grea
2e710 74 65 72 2c 20 73 75 62 74 72 61 63 74 20 50 33  ter, subtract P3
2e720 20 66 72 6f 6d 20 74 68 65 0a 2a 2a 20 76 61 6c   from the.** val
2e730 75 65 20 69 6e 20 50 31 20 61 6e 64 20 6a 75 6d  ue in P1 and jum
2e740 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49  p to P2..**.** I
2e750 66 20 74 68 65 20 69 6e 69 74 69 61 6c 20 76 61  f the initial va
2e760 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
2e770 50 31 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  P1 is less than 
2e780 31 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76  1, then the.** v
2e790 61 6c 75 65 20 69 73 20 75 6e 63 68 61 6e 67 65  alue is unchange
2e7a0 64 20 61 6e 64 20 63 6f 6e 74 72 6f 6c 20 70 61  d and control pa
2e7b0 73 73 65 73 20 74 68 72 6f 75 67 68 20 74 6f 20  sses through to 
2e7c0 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
2e7d0 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
2e7e0 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20 20 20 20  _IfPos: {       
2e7f0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
2e800 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
2e810 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2e820 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26  rt( pIn1->flags&
2e830 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62  MEM_Int );.  Vdb
2e840 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 70 49  eBranchTaken( pI
2e850 6e 31 2d 3e 75 2e 69 3e 30 2c 20 32 29 3b 0a 20  n1->u.i>0, 2);. 
2e860 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30   if( pIn1->u.i>0
2e870 20 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e   ){.    pIn1->u.
2e880 69 20 2d 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  i -= pOp->p3;.  
2e890 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
2e8a0 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
2e8b0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
2e8c0 74 49 66 4e 6f 74 50 6f 73 20 50 31 20 50 32 20  tIfNotPos P1 P2 
2e8d0 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
2e8e0 69 73 3a 20 69 66 20 72 5b 50 31 5d 3c 3d 30 20  is: if r[P1]<=0 
2e8f0 74 68 65 6e 20 72 5b 50 32 5d 3d 50 33 0a 2a 2a  then r[P2]=P3.**
2e900 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31 20  .** Register P1 
2e910 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20  must contain an 
2e920 69 6e 74 65 67 65 72 2e 0a 2a 2a 20 49 66 20 74  integer..** If t
2e930 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  he value of regi
2e940 73 74 65 72 20 50 31 20 69 73 20 6e 6f 74 20 70  ster P1 is not p
2e950 6f 73 69 74 69 76 65 20 28 69 66 20 69 74 20 69  ositive (if it i
2e960 73 20 6c 65 73 73 20 74 68 61 6e 20 31 29 20 74  s less than 1) t
2e970 68 65 6e 0a 2a 2a 20 73 65 74 20 74 68 65 20 76  hen.** set the v
2e980 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
2e990 20 50 32 20 74 6f 20 62 65 20 74 68 65 20 69 6e   P2 to be the in
2e9a0 74 65 67 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73  teger P3..*/.cas
2e9b0 65 20 4f 50 5f 53 65 74 49 66 4e 6f 74 50 6f 73  e OP_SetIfNotPos
2e9c0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e  : {        /* in
2e9d0 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31  1, in2 */.  pIn1
2e9e0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
2e9f0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
2ea00 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  1->flags&MEM_Int
2ea10 20 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e   );.  if( pIn1->
2ea20 75 2e 69 3c 3d 30 20 29 7b 0a 20 20 20 20 70 4f  u.i<=0 ){.    pO
2ea30 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
2ea40 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 20  ase(p, pOp);.   
2ea50 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 4f 70   pOut->u.i = pOp
2ea60 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 62 72 65 61  ->p3;.  }.  brea
2ea70 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2ea80 20 49 66 4e 6f 74 5a 65 72 6f 20 50 31 20 50 32   IfNotZero P1 P2
2ea90 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
2eaa0 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 30  sis: if r[P1]!=0
2eab0 20 74 68 65 6e 20 72 5b 50 31 5d 2d 3d 50 33 2c   then r[P1]-=P3,
2eac0 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52   goto P2.**.** R
2ead0 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20  egister P1 must 
2eae0 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
2eaf0 65 72 2e 20 20 49 66 20 74 68 65 20 63 6f 6e 74  er.  If the cont
2eb00 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
2eb10 50 31 20 69 73 0a 2a 2a 20 69 6e 69 74 69 61 6c  P1 is.** initial
2eb20 6c 79 20 6e 6f 6e 7a 65 72 6f 2c 20 74 68 65 6e  ly nonzero, then
2eb30 20 73 75 62 74 72 61 63 74 20 50 33 20 66 72 6f   subtract P3 fro
2eb40 6d 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  m the value in r
2eb50 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 0a 2a  egister P1 and.*
2eb60 2a 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 49  * jump to P2.  I
2eb70 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  f register P1 is
2eb80 20 69 6e 69 74 69 61 6c 6c 79 20 7a 65 72 6f 2c   initially zero,
2eb90 20 6c 65 61 76 65 20 69 74 20 75 6e 63 68 61 6e   leave it unchan
2eba0 67 65 64 0a 2a 2a 20 61 6e 64 20 66 61 6c 6c 20  ged.** and fall 
2ebb0 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a 63 61 73 65  through..*/.case
2ebc0 20 4f 50 5f 49 66 4e 6f 74 5a 65 72 6f 3a 20 7b   OP_IfNotZero: {
2ebd0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
2ebe0 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
2ebf0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2ec00 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
2ec10 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
2ec20 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
2ec30 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3c 30 2c  ken(pIn1->u.i<0,
2ec40 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d   2);.  if( pIn1-
2ec50 3e 75 2e 69 20 29 7b 0a 20 20 20 20 20 70 49 6e  >u.i ){.     pIn
2ec60 31 2d 3e 75 2e 69 20 2d 3d 20 70 4f 70 2d 3e 70  1->u.i -= pOp->p
2ec70 33 3b 0a 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d  3;.     goto jum
2ec80 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62  p_to_p2;.  }.  b
2ec90 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2eca0 64 65 3a 20 44 65 63 72 4a 75 6d 70 5a 65 72 6f  de: DecrJumpZero
2ecb0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
2ecc0 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 28 2d 2d  Synopsis: if (--
2ecd0 72 5b 50 31 5d 29 3d 3d 30 20 67 6f 74 6f 20 50  r[P1])==0 goto P
2ece0 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  2.**.** Register
2ecf0 20 50 31 20 6d 75 73 74 20 68 6f 6c 64 20 61 6e   P1 must hold an
2ed00 20 69 6e 74 65 67 65 72 2e 20 20 44 65 63 72 65   integer.  Decre
2ed10 6d 65 6e 74 20 74 68 65 20 76 61 6c 75 65 20 69  ment the value i
2ed20 6e 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a  n register P1.**
2ed30 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
2ed40 20 69 66 20 74 68 65 20 6e 65 77 20 76 61 6c 75   if the new valu
2ed50 65 20 69 73 20 65 78 61 63 74 6c 79 20 7a 65 72  e is exactly zer
2ed60 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65  o..*/.case OP_De
2ed70 63 72 4a 75 6d 70 5a 65 72 6f 3a 20 7b 20 20 20  crJumpZero: {   
2ed80 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
2ed90 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
2eda0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
2edb0 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
2edc0 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70  s&MEM_Int );.  p
2edd0 49 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a 20 20 56 64  In1->u.i--;.  Vd
2ede0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49  beBranchTaken(pI
2edf0 6e 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29 3b 0a  n1->u.i==0, 2);.
2ee00 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3d    if( pIn1->u.i=
2ee10 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  =0 ) goto jump_t
2ee20 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  o_p2;.  break;.}
2ee30 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75  .../* Opcode: Ju
2ee40 6d 70 5a 65 72 6f 49 6e 63 72 20 50 31 20 50 32  mpZeroIncr P1 P2
2ee50 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
2ee60 69 73 3a 20 69 66 20 28 72 5b 50 31 5d 2b 2b 29  is: if (r[P1]++)
2ee70 3d 3d 30 20 29 20 67 6f 74 6f 20 50 32 0a 2a 2a  ==0 ) goto P2.**
2ee80 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72  .** The register
2ee90 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e   P1 must contain
2eea0 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66   an integer.  If
2eeb0 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
2eec0 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 7a 65 72  initially.** zer
2eed0 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
2eee0 50 32 2e 20 20 49 6e 63 72 65 6d 65 6e 74 20 72  P2.  Increment r
2eef0 65 67 69 73 74 65 72 20 50 31 20 72 65 67 61 72  egister P1 regar
2ef00 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72  dless of whether
2ef10 20 6f 72 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 6a   or.** not the j
2ef20 75 6d 70 20 69 73 20 74 61 6b 65 6e 2e 0a 2a 2f  ump is taken..*/
2ef30 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70 5a 65 72  .case OP_JumpZer
2ef40 6f 49 6e 63 72 3a 20 7b 20 20 20 20 20 20 20 20  oIncr: {        
2ef50 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
2ef60 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
2ef70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2ef80 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d  t( pIn1->flags&M
2ef90 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62 65  EM_Int );.  Vdbe
2efa0 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31  BranchTaken(pIn1
2efb0 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29 3b 0a 20 20  ->u.i==0, 2);.  
2efc0 69 66 28 20 28 70 49 6e 31 2d 3e 75 2e 69 2b 2b  if( (pIn1->u.i++
2efd0 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70  )==0 ) goto jump
2efe0 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b  _to_p2;.  break;
2eff0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
2f000 67 67 53 74 65 70 30 20 2a 20 50 32 20 50 33 20  ggStep0 * P2 P3 
2f010 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
2f020 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73  s: accum=r[P3] s
2f030 74 65 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a  tep(r[P2@P5]).**
2f040 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20  .** Execute the 
2f050 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f  step function fo
2f060 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20  r an aggregate. 
2f070 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e   The.** function
2f080 20 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74   has P5 argument
2f090 73 2e 20 20 20 50 34 20 69 73 20 61 20 70 6f 69  s.   P4 is a poi
2f0a0 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63  nter to the Func
2f0b0 44 65 66 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  Def.** structure
2f0c0 20 74 68 61 74 20 73 70 65 63 69 66 69 65 73 20   that specifies 
2f0d0 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 52  the function.  R
2f0e0 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68  egister P3 is th
2f0f0 65 0a 2a 2a 20 61 63 63 75 6d 75 6c 61 74 6f 72  e.** accumulator
2f100 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61  ..**.** The P5 a
2f110 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b  rguments are tak
2f120 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  en from register
2f130 20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73   P2 and its.** s
2f140 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 2f 2a  uccessors..*/./*
2f150 20 4f 70 63 6f 64 65 3a 20 41 67 67 53 74 65 70   Opcode: AggStep
2f160 20 2a 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a   * P2 P3 P4 P5.*
2f170 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75  * Synopsis: accu
2f180 6d 3d 72 5b 50 33 5d 20 73 74 65 70 28 72 5b 50  m=r[P3] step(r[P
2f190 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65  2@P5]).**.** Exe
2f1a0 63 75 74 65 20 74 68 65 20 73 74 65 70 20 66 75  cute the step fu
2f1b0 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67  nction for an ag
2f1c0 67 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a  gregate.  The.**
2f1d0 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35   function has P5
2f1e0 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34   arguments.   P4
2f1f0 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
2f200 20 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74   an sqlite3_cont
2f210 65 78 74 0a 2a 2a 20 6f 62 6a 65 63 74 20 74 68  ext.** object th
2f220 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 72 75  at is used to ru
2f230 6e 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20  n the function. 
2f240 20 52 65 67 69 73 74 65 72 20 50 33 20 69 73 0a   Register P3 is.
2f250 2a 2a 20 61 73 20 74 68 65 20 61 63 63 75 6d 75  ** as the accumu
2f260 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  lator..**.** The
2f270 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61 72   P5 arguments ar
2f280 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67  e taken from reg
2f290 69 73 74 65 72 20 50 32 20 61 6e 64 20 69 74 73  ister P2 and its
2f2a0 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 0a  .** successors..
2f2b0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
2f2c0 65 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 63  e is initially c
2f2d0 6f 64 65 64 20 61 73 20 4f 50 5f 41 67 67 53 74  oded as OP_AggSt
2f2e0 65 70 30 2e 20 20 4f 6e 20 66 69 72 73 74 20 65  ep0.  On first e
2f2f0 76 61 6c 75 61 74 69 6f 6e 2c 0a 2a 2a 20 74 68  valuation,.** th
2f300 65 20 46 75 6e 63 44 65 66 20 73 74 6f 72 65 64  e FuncDef stored
2f310 20 69 6e 20 50 34 20 69 73 20 63 6f 6e 76 65 72   in P4 is conver
2f320 74 65 64 20 69 6e 74 6f 20 61 6e 20 73 71 6c 69  ted into an sqli
2f330 74 65 33 5f 63 6f 6e 74 65 78 74 20 61 6e 64 0a  te3_context and.
2f340 2a 2a 20 74 68 65 20 6f 70 63 6f 64 65 20 69 73  ** the opcode is
2f350 20 63 68 61 6e 67 65 64 2e 20 20 49 6e 20 74 68   changed.  In th
2f360 69 73 20 77 61 79 2c 20 74 68 65 20 69 6e 69 74  is way, the init
2f370 69 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 20 74 68  ialization of th
2f380 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6e  e.** sqlite3_con
2f390 74 65 78 74 20 6f 6e 6c 79 20 68 61 70 70 65 6e  text only happen
2f3a0 73 20 6f 6e 63 65 2c 20 69 6e 73 74 65 61 64 20  s once, instead 
2f3b0 6f 66 20 6f 6e 20 65 61 63 68 20 63 61 6c 6c 20  of on each call 
2f3c0 74 6f 20 74 68 65 0a 2a 2a 20 73 74 65 70 20 66  to the.** step f
2f3d0 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  unction..*/.case
2f3e0 20 4f 50 5f 41 67 67 53 74 65 70 30 3a 20 7b 0a   OP_AggStep0: {.
2f3f0 20 20 69 6e 74 20 6e 3b 0a 20 20 73 71 6c 69 74    int n;.  sqlit
2f400 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78  e3_context *pCtx
2f410 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
2f420 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e  ->p4type==P4_FUN
2f430 43 44 45 46 20 29 3b 0a 20 20 6e 20 3d 20 70 4f  CDEF );.  n = pO
2f440 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72 74 28  p->p5;.  assert(
2f450 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
2f460 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p3<=(p->nMem-
2f470 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
2f480 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c   assert( n==0 ||
2f490 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70   (pOp->p2>0 && p
2f4a0 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d  Op->p2+n<=(p->nM
2f4b0 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31  em-p->nCursor)+1
2f4c0 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
2f4d0 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c  Op->p3<pOp->p2 |
2f4e0 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e  | pOp->p3>=pOp->
2f4f0 70 32 2b 6e 20 29 3b 0a 20 20 70 43 74 78 20 3d  p2+n );.  pCtx =
2f500 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
2f510 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 2a  Raw(db, sizeof(*
2f520 70 43 74 78 29 20 2b 20 28 6e 2d 31 29 2a 73 69  pCtx) + (n-1)*si
2f530 7a 65 6f 66 28 73 71 6c 69 74 65 33 5f 76 61 6c  zeof(sqlite3_val
2f540 75 65 2a 29 29 3b 0a 20 20 69 66 28 20 70 43 74  ue*));.  if( pCt
2f550 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  x==0 ) goto no_m
2f560 65 6d 3b 0a 20 20 70 43 74 78 2d 3e 70 4d 65 6d  em;.  pCtx->pMem
2f570 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e 70 46   = 0;.  pCtx->pF
2f580 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46  unc = pOp->p4.pF
2f590 75 6e 63 3b 0a 20 20 70 43 74 78 2d 3e 69 4f 70  unc;.  pCtx->iOp
2f5a0 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61   = (int)(pOp - a
2f5b0 4f 70 29 3b 0a 20 20 70 43 74 78 2d 3e 70 56 64  Op);.  pCtx->pVd
2f5c0 62 65 20 3d 20 70 3b 0a 20 20 70 43 74 78 2d 3e  be = p;.  pCtx->
2f5d0 61 72 67 63 20 3d 20 6e 3b 0a 20 20 70 4f 70 2d  argc = n;.  pOp-
2f5e0 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 46 55 4e  >p4type = P4_FUN
2f5f0 43 43 54 58 3b 0a 20 20 70 4f 70 2d 3e 70 34 2e  CCTX;.  pOp->p4.
2f600 70 43 74 78 20 3d 20 70 43 74 78 3b 0a 20 20 70  pCtx = pCtx;.  p
2f610 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f  Op->opcode = OP_
2f620 41 67 67 53 74 65 70 3b 0a 20 20 2f 2a 20 46 61  AggStep;.  /* Fa
2f630 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20  ll through into 
2f640 4f 50 5f 41 67 67 53 74 65 70 20 2a 2f 0a 7d 0a  OP_AggStep */.}.
2f650 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65 70 3a  case OP_AggStep:
2f660 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 71   {.  int i;.  sq
2f670 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
2f680 43 74 78 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  Ctx;.  Mem *pMem
2f690 3b 0a 20 20 4d 65 6d 20 74 3b 0a 0a 20 20 61 73  ;.  Mem t;..  as
2f6a0 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
2f6b0 65 3d 3d 50 34 5f 46 55 4e 43 43 54 58 20 29 3b  e==P4_FUNCCTX );
2f6c0 0a 20 20 70 43 74 78 20 3d 20 70 4f 70 2d 3e 70  .  pCtx = pOp->p
2f6d0 34 2e 70 43 74 78 3b 0a 20 20 70 4d 65 6d 20 3d  4.pCtx;.  pMem =
2f6e0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
2f6f0 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20 66  ..  /* If this f
2f700 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e 73 69 64  unction is insid
2f710 65 20 6f 66 20 61 20 74 72 69 67 67 65 72 2c 20  e of a trigger, 
2f720 74 68 65 20 72 65 67 69 73 74 65 72 20 61 72 72  the register arr
2f730 61 79 20 69 6e 20 61 4d 65 6d 5b 5d 0a 20 20 2a  ay in aMem[].  *
2f740 2a 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66  * might change f
2f750 72 6f 6d 20 6f 6e 65 20 65 76 61 6c 75 61 74 69  rom one evaluati
2f760 6f 6e 20 74 6f 20 74 68 65 20 6e 65 78 74 2e 20  on to the next. 
2f770 20 54 68 65 20 6e 65 78 74 20 62 6c 6f 63 6b 20   The next block 
2f780 6f 66 20 63 6f 64 65 0a 20 20 2a 2a 20 63 68 65  of code.  ** che
2f790 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74 68  cks to see if th
2f7a0 65 20 72 65 67 69 73 74 65 72 20 61 72 72 61 79  e register array
2f7b0 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20 61 6e   has changed, an
2f7c0 64 20 69 66 20 73 6f 20 69 74 0a 20 20 2a 2a 20  d if so it.  ** 
2f7d0 72 65 69 6e 69 74 69 61 6c 69 7a 65 73 20 74 68  reinitializes th
2f7e0 65 20 72 65 6c 61 76 61 6e 74 20 70 61 72 74 73  e relavant parts
2f7f0 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f   of the sqlite3_
2f800 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74 20 2a  context object *
2f810 2f 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 70 4d  /.  if( pCtx->pM
2f820 65 6d 20 21 3d 20 70 4d 65 6d 20 29 7b 0a 20 20  em != pMem ){.  
2f830 20 20 70 43 74 78 2d 3e 70 4d 65 6d 20 3d 20 70    pCtx->pMem = p
2f840 4d 65 6d 3b 0a 20 20 20 20 66 6f 72 28 69 3d 70  Mem;.    for(i=p
2f850 43 74 78 2d 3e 61 72 67 63 2d 31 3b 20 69 3e 3d  Ctx->argc-1; i>=
2f860 30 3b 20 69 2d 2d 29 20 70 43 74 78 2d 3e 61 72  0; i--) pCtx->ar
2f870 67 76 5b 69 5d 20 3d 20 26 61 4d 65 6d 5b 70 4f  gv[i] = &aMem[pO
2f880 70 2d 3e 70 32 2b 69 5d 3b 0a 20 20 7d 0a 0a 23  p->p2+i];.  }..#
2f890 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
2f8a0 55 47 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  UG.  for(i=0; i<
2f8b0 70 43 74 78 2d 3e 61 72 67 63 3b 20 69 2b 2b 29  pCtx->argc; i++)
2f8c0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  {.    assert( me
2f8d0 6d 49 73 56 61 6c 69 64 28 70 43 74 78 2d 3e 61  mIsValid(pCtx->a
2f8e0 72 67 76 5b 69 5d 29 20 29 3b 0a 20 20 20 20 52  rgv[i]) );.    R
2f8f0 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
2f900 70 2d 3e 70 32 2b 69 2c 20 70 43 74 78 2d 3e 61  p->p2+i, pCtx->a
2f910 72 67 76 5b 69 5d 29 3b 0a 20 20 7d 0a 23 65 6e  rgv[i]);.  }.#en
2f920 64 69 66 0a 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b  dif..  pMem->n++
2f930 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
2f940 65 6d 49 6e 69 74 28 26 74 2c 20 64 62 2c 20 4d  emInit(&t, db, M
2f950 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 70 43 74 78  EM_Null);.  pCtx
2f960 2d 3e 70 4f 75 74 20 3d 20 26 74 3b 0a 20 20 70  ->pOut = &t;.  p
2f970 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78  Ctx->fErrorOrAux
2f980 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e 73 6b   = 0;.  pCtx->sk
2f990 69 70 46 6c 61 67 20 3d 20 30 3b 0a 20 20 28 70  ipFlag = 0;.  (p
2f9a0 43 74 78 2d 3e 70 46 75 6e 63 2d 3e 78 53 74 65  Ctx->pFunc->xSte
2f9b0 70 29 28 70 43 74 78 2c 70 43 74 78 2d 3e 61 72  p)(pCtx,pCtx->ar
2f9c0 67 63 2c 70 43 74 78 2d 3e 61 72 67 76 29 3b 20  gc,pCtx->argv); 
2f9d0 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d  /* IMP: R-24505-
2f9e0 32 33 32 33 30 20 2a 2f 0a 20 20 69 66 28 20 70  23230 */.  if( p
2f9f0 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78  Ctx->fErrorOrAux
2fa00 20 29 7b 0a 20 20 20 20 69 66 28 20 70 43 74 78   ){.    if( pCtx
2fa10 2d 3e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20  ->isError ){.   
2fa20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
2fa30 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71 6c  ror(p, "%s", sql
2fa40 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
2fa50 26 74 29 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  &t));.      rc =
2fa60 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 3b 0a   pCtx->isError;.
2fa70 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
2fa80 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28  3VdbeMemRelease(
2fa90 26 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  &t);.  }else{.  
2faa0 20 20 61 73 73 65 72 74 28 20 74 2e 66 6c 61 67    assert( t.flag
2fab0 73 3d 3d 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20  s==MEM_Null );. 
2fac0 20 7d 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 73   }.  if( pCtx->s
2fad0 6b 69 70 46 6c 61 67 20 29 7b 0a 20 20 20 20 61  kipFlag ){.    a
2fae0 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f  ssert( pOp[-1].o
2faf0 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65  pcode==OP_CollSe
2fb00 71 20 29 3b 0a 20 20 20 20 69 20 3d 20 70 4f 70  q );.    i = pOp
2fb10 5b 2d 31 5d 2e 70 31 3b 0a 20 20 20 20 69 66 28  [-1].p1;.    if(
2fb20 20 69 20 29 20 73 71 6c 69 74 65 33 56 64 62 65   i ) sqlite3Vdbe
2fb30 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65  MemSetInt64(&aMe
2fb40 6d 5b 69 5d 2c 20 31 29 3b 0a 20 20 7d 0a 20 20  m[i], 1);.  }.  
2fb50 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2fb60 6f 64 65 3a 20 41 67 67 46 69 6e 61 6c 20 50 31  ode: AggFinal P1
2fb70 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
2fb80 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b  nopsis: accum=r[
2fb90 50 31 5d 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20 45  P1] N=P2.**.** E
2fba0 78 65 63 75 74 65 20 74 68 65 20 66 69 6e 61 6c  xecute the final
2fbb0 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f  izer function fo
2fbc0 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20  r an aggregate. 
2fbd0 20 50 31 20 69 73 0a 2a 2a 20 74 68 65 20 6d 65   P1 is.** the me
2fbe0 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68  mory location th
2fbf0 61 74 20 69 73 20 74 68 65 20 61 63 63 75 6d 75  at is the accumu
2fc00 6c 61 74 6f 72 20 66 6f 72 20 74 68 65 20 61 67  lator for the ag
2fc10 67 72 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50  gregate..**.** P
2fc20 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  2 is the number 
2fc30 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61  of arguments tha
2fc40 74 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74  t the step funct
2fc50 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a  ion takes and.**
2fc60 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
2fc70 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66 20   to the FuncDef 
2fc80 66 6f 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f  for this functio
2fc90 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a 20 61 72  n.  The P2.** ar
2fca0 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75 73  gument is not us
2fcb0 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  ed by this opcod
2fcc0 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 74  e.  It is only t
2fcd0 68 65 72 65 20 74 6f 20 64 69 73 61 6d 62 69 67  here to disambig
2fce0 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e  uate.** function
2fcf0 73 20 74 68 61 74 20 63 61 6e 20 74 61 6b 65 20  s that can take 
2fd00 76 61 72 79 69 6e 67 20 6e 75 6d 62 65 72 73 20  varying numbers 
2fd10 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 54  of arguments.  T
2fd20 68 65 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e  he.** P4 argumen
2fd30 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64  t is only needed
2fd40 20 66 6f 72 20 74 68 65 20 64 65 67 65 6e 65 72   for the degener
2fd50 61 74 65 20 63 61 73 65 20 77 68 65 72 65 0a 2a  ate case where.*
2fd60 2a 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74  * the step funct
2fd70 69 6f 6e 20 77 61 73 20 6e 6f 74 20 70 72 65 76  ion was not prev
2fd80 69 6f 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a  iously called..*
2fd90 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 46 69 6e  /.case OP_AggFin
2fda0 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65  al: {.  Mem *pMe
2fdb0 6d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  m;.  assert( pOp
2fdc0 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p1>0 && pOp->p
2fdd0 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  1<=(p->nMem-p->n
2fde0 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4d 65  Cursor) );.  pMe
2fdf0 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
2fe00 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  1];.  assert( (p
2fe10 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d  Mem->flags & ~(M
2fe20 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29  EM_Null|MEM_Agg)
2fe30 29 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73  )==0 );.  rc = s
2fe40 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 69 6e  qlite3VdbeMemFin
2fe50 61 6c 69 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d  alize(pMem, pOp-
2fe60 3e 70 34 2e 70 46 75 6e 63 29 3b 0a 20 20 69 66  >p4.pFunc);.  if
2fe70 28 20 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69  ( rc ){.    sqli
2fe80 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
2fe90 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61  "%s", sqlite3_va
2fea0 6c 75 65 5f 74 65 78 74 28 70 4d 65 6d 29 29 3b  lue_text(pMem));
2feb0 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64  .  }.  sqlite3Vd
2fec0 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
2fed0 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e 67 29  (pMem, encoding)
2fee0 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
2fef0 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29 3b 0a 20  LOBSIZE(pMem);. 
2ff00 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
2ff10 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65 6d 29 20  MemTooBig(pMem) 
2ff20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
2ff30 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  big;.  }.  break
2ff40 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
2ff50 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 2f 2a 20  ITE_OMIT_WAL./* 
2ff60 4f 70 63 6f 64 65 3a 20 43 68 65 63 6b 70 6f 69  Opcode: Checkpoi
2ff70 6e 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  nt P1 P2 P3 * *.
2ff80 2a 2a 0a 2a 2a 20 43 68 65 63 6b 70 6f 69 6e 74  **.** Checkpoint
2ff90 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 54 68   database P1. Th
2ffa0 69 73 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69 66  is is a no-op if
2ffb0 20 50 31 20 69 73 20 6e 6f 74 20 63 75 72 72 65   P1 is not curre
2ffc0 6e 74 6c 79 20 69 6e 0a 2a 2a 20 57 41 4c 20 6d  ntly in.** WAL m
2ffd0 6f 64 65 2e 20 50 61 72 61 6d 65 74 65 72 20 50  ode. Parameter P
2ffe0 32 20 69 73 20 6f 6e 65 20 6f 66 20 53 51 4c 49  2 is one of SQLI
2fff0 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41  TE_CHECKPOINT_PA
30000 53 53 49 56 45 2c 20 46 55 4c 4c 2c 0a 2a 2a 20  SSIVE, FULL,.** 
30010 52 45 53 54 41 52 54 2c 20 6f 72 20 54 52 55 4e  RESTART, or TRUN
30020 43 41 54 45 2e 20 20 57 72 69 74 65 20 31 20 6f  CATE.  Write 1 o
30030 72 20 30 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 5d  r 0 into mem[P3]
30040 20 69 66 20 74 68 65 20 63 68 65 63 6b 70 6f 69   if the checkpoi
30050 6e 74 20 72 65 74 75 72 6e 73 0a 2a 2a 20 53 51  nt returns.** SQ
30060 4c 49 54 45 5f 42 55 53 59 20 6f 72 20 6e 6f 74  LITE_BUSY or not
30070 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
30080 20 57 72 69 74 65 20 74 68 65 20 6e 75 6d 62 65   Write the numbe
30090 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68  r of pages in th
300a0 65 0a 2a 2a 20 57 41 4c 20 61 66 74 65 72 20 74  e.** WAL after t
300b0 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 69 6e  he checkpoint in
300c0 74 6f 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64  to mem[P3+1] and
300d0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   the number of p
300e0 61 67 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 57  ages.** in the W
300f0 41 4c 20 74 68 61 74 20 68 61 76 65 20 62 65 65  AL that have bee
30100 6e 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20 61  n checkpointed a
30110 66 74 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f  fter the checkpo
30120 69 6e 74 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 73  int.** completes
30130 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 32 5d 2e   into mem[P3+2].
30140 20 20 48 6f 77 65 76 65 72 20 6f 6e 20 61 6e 20    However on an 
30150 65 72 72 6f 72 2c 20 6d 65 6d 5b 50 33 2b 31 5d  error, mem[P3+1]
30160 20 61 6e 64 0a 2a 2a 20 6d 65 6d 5b 50 33 2b 32   and.** mem[P3+2
30170 5d 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65  ] are initialize
30180 64 20 74 6f 20 2d 31 2e 0a 2a 2f 0a 63 61 73 65  d to -1..*/.case
30190 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74 3a 20   OP_Checkpoint: 
301a0 7b 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  {.  int i;      
301b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
301c0 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e      /* Loop coun
301d0 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 61 52 65  ter */.  int aRe
301e0 73 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20 20  s[3];           
301f0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
30200 6c 74 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d  lts */.  Mem *pM
30210 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
30220 20 20 20 20 20 20 20 20 20 2f 2a 20 57 72 69 74           /* Writ
30230 65 20 72 65 73 75 6c 74 73 20 68 65 72 65 20 2a  e results here *
30240 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  /..  assert( p->
30250 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
30260 20 61 52 65 73 5b 30 5d 20 3d 20 30 3b 0a 20 20   aRes[0] = 0;.  
30270 61 52 65 73 5b 31 5d 20 3d 20 61 52 65 73 5b 32  aRes[1] = aRes[2
30280 5d 20 3d 20 2d 31 3b 0a 20 20 61 73 73 65 72 74  ] = -1;.  assert
30290 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  ( pOp->p2==SQLIT
302a0 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53  E_CHECKPOINT_PAS
302b0 53 49 56 45 0a 20 20 20 20 20 20 20 7c 7c 20 70  SIVE.       || p
302c0 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43  Op->p2==SQLITE_C
302d0 48 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 0a 20  HECKPOINT_FULL. 
302e0 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32        || pOp->p2
302f0 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  ==SQLITE_CHECKPO
30300 49 4e 54 5f 52 45 53 54 41 52 54 0a 20 20 20 20  INT_RESTART.    
30310 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53     || pOp->p2==S
30320 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
30330 5f 54 52 55 4e 43 41 54 45 0a 20 20 29 3b 0a 20  _TRUNCATE.  );. 
30340 20 72 63 20 3d 20 73 71 6c 69 74 65 33 43 68 65   rc = sqlite3Che
30350 63 6b 70 6f 69 6e 74 28 64 62 2c 20 70 4f 70 2d  ckpoint(db, pOp-
30360 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 26 61  >p1, pOp->p2, &a
30370 52 65 73 5b 31 5d 2c 20 26 61 52 65 73 5b 32 5d  Res[1], &aRes[2]
30380 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
30390 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
303a0 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
303b0 20 20 20 20 61 52 65 73 5b 30 5d 20 3d 20 31 3b      aRes[0] = 1;
303c0 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 2c 20  .  }.  for(i=0, 
303d0 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pMem = &aMem[pOp
303e0 2d 3e 70 33 5d 3b 20 69 3c 33 3b 20 69 2b 2b 2c  ->p3]; i<3; i++,
303f0 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 73 71   pMem++){.    sq
30400 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
30410 6e 74 36 34 28 70 4d 65 6d 2c 20 28 69 36 34 29  nt64(pMem, (i64)
30420 61 52 65 73 5b 69 5d 29 3b 0a 20 20 7d 20 20 20  aRes[i]);.  }   
30430 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 20 20 0a   .  break;.};  .
30440 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
30450 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47  SQLITE_OMIT_PRAG
30460 4d 41 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 6f  MA./* Opcode: Jo
30470 75 72 6e 61 6c 4d 6f 64 65 20 50 31 20 50 32 20  urnalMode P1 P2 
30480 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 61  P3 * *.**.** Cha
30490 6e 67 65 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20  nge the journal 
304a0 6d 6f 64 65 20 6f 66 20 64 61 74 61 62 61 73 65  mode of database
304b0 20 50 31 20 74 6f 20 50 33 2e 20 50 33 20 6d 75   P1 to P3. P3 mu
304c0 73 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  st be one of the
304d0 0a 2a 2a 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  .** PAGER_JOURNA
304e0 4c 4d 4f 44 45 5f 58 58 58 20 76 61 6c 75 65 73  LMODE_XXX values
304f0 2e 20 49 66 20 63 68 61 6e 67 69 6e 67 20 62 65  . If changing be
30500 74 77 65 65 6e 20 74 68 65 20 76 61 72 69 6f 75  tween the variou
30510 73 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6d 6f  s rollback.** mo
30520 64 65 73 20 28 64 65 6c 65 74 65 2c 20 74 72 75  des (delete, tru
30530 6e 63 61 74 65 2c 20 70 65 72 73 69 73 74 2c 20  ncate, persist, 
30540 6f 66 66 20 61 6e 64 20 6d 65 6d 6f 72 79 29 2c  off and memory),
30550 20 74 68 69 73 20 69 73 20 61 20 73 69 6d 70 6c   this is a simpl
30560 65 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20  e.** operation. 
30570 4e 6f 20 49 4f 20 69 73 20 72 65 71 75 69 72 65  No IO is require
30580 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 68 61 6e  d..**.** If chan
30590 67 69 6e 67 20 69 6e 74 6f 20 6f 72 20 6f 75 74  ging into or out
305a0 20 6f 66 20 57 41 4c 20 6d 6f 64 65 20 74 68 65   of WAL mode the
305b0 20 70 72 6f 63 65 64 75 72 65 20 69 73 20 6d 6f   procedure is mo
305c0 72 65 20 63 6f 6d 70 6c 69 63 61 74 65 64 2e 0a  re complicated..
305d0 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 73 74  **.** Write a st
305e0 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20  ring containing 
305f0 74 68 65 20 66 69 6e 61 6c 20 6a 6f 75 72 6e 61  the final journa
30600 6c 2d 6d 6f 64 65 20 74 6f 20 72 65 67 69 73 74  l-mode to regist
30610 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
30620 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 3a 20 7b  P_JournalMode: {
30630 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
30640 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20   Btree *pBt;    
30650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30660 20 2f 2a 20 42 74 72 65 65 20 74 6f 20 63 68 61   /* Btree to cha
30670 6e 67 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65  nge journal mode
30680 20 6f 66 20 2a 2f 0a 20 20 50 61 67 65 72 20 2a   of */.  Pager *
30690 70 50 61 67 65 72 3b 20 20 20 20 20 20 20 20 20  pPager;         
306a0 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65           /* Page
306b0 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  r associated wit
306c0 68 20 70 42 74 20 2a 2f 0a 20 20 69 6e 74 20 65  h pBt */.  int e
306d0 4e 65 77 3b 20 20 20 20 20 20 20 20 20 20 20 20  New;            
306e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65             /* Ne
306f0 77 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a  w journal mode *
30700 2f 0a 20 20 69 6e 74 20 65 4f 6c 64 3b 20 20 20  /.  int eOld;   
30710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30720 20 20 20 20 2f 2a 20 54 68 65 20 6f 6c 64 20 6a      /* The old j
30730 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 23  ournal mode */.#
30740 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
30750 49 54 5f 57 41 4c 0a 20 20 63 6f 6e 73 74 20 63  IT_WAL.  const c
30760 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 20  har *zFilename; 
30770 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
30780 20 6f 66 20 64 61 74 61 62 61 73 65 20 66 69 6c   of database fil
30790 65 20 66 6f 72 20 70 50 61 67 65 72 20 2a 2f 0a  e for pPager */.
307a0 23 65 6e 64 69 66 0a 0a 20 20 70 4f 75 74 20 3d  #endif..  pOut =
307b0 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
307c0 70 2c 20 70 4f 70 29 3b 0a 20 20 65 4e 65 77 20  p, pOp);.  eNew 
307d0 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73  = pOp->p3;.  ass
307e0 65 72 74 28 20 65 4e 65 77 3d 3d 50 41 47 45 52  ert( eNew==PAGER
307f0 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c  _JOURNALMODE_DEL
30800 45 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65  ETE .       || e
30810 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
30820 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45 20  ALMODE_TRUNCATE 
30830 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
30840 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
30850 44 45 5f 50 45 52 53 49 53 54 20 0a 20 20 20 20  DE_PERSIST .    
30860 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
30870 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46  R_JOURNALMODE_OF
30880 46 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77  F.       || eNew
30890 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
308a0 4f 44 45 5f 4d 45 4d 4f 52 59 0a 20 20 20 20 20  ODE_MEMORY.     
308b0 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
308c0 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
308d0 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
308e0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
308f0 44 45 5f 51 55 45 52 59 0a 20 20 29 3b 0a 20 20  DE_QUERY.  );.  
30900 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
30910 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
30920 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
30930 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
30940 30 20 29 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62  0 );..  pBt = db
30950 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
30960 42 74 3b 0a 20 20 70 50 61 67 65 72 20 3d 20 73  Bt;.  pPager = s
30970 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72  qlite3BtreePager
30980 28 70 42 74 29 3b 0a 20 20 65 4f 6c 64 20 3d 20  (pBt);.  eOld = 
30990 73 71 6c 69 74 65 33 50 61 67 65 72 47 65 74 4a  sqlite3PagerGetJ
309a0 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65  ournalMode(pPage
309b0 72 29 3b 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d  r);.  if( eNew==
309c0 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
309d0 45 5f 51 55 45 52 59 20 29 20 65 4e 65 77 20 3d  E_QUERY ) eNew =
309e0 20 65 4f 6c 64 3b 0a 20 20 69 66 28 20 21 73 71   eOld;.  if( !sq
309f0 6c 69 74 65 33 50 61 67 65 72 4f 6b 54 6f 43 68  lite3PagerOkToCh
30a00 61 6e 67 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28  angeJournalMode(
30a10 70 50 61 67 65 72 29 20 29 20 65 4e 65 77 20 3d  pPager) ) eNew =
30a20 20 65 4f 6c 64 3b 0a 0a 23 69 66 6e 64 65 66 20   eOld;..#ifndef 
30a30 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
30a40 20 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 73 71    zFilename = sq
30a50 6c 69 74 65 33 50 61 67 65 72 46 69 6c 65 6e 61  lite3PagerFilena
30a60 6d 65 28 70 50 61 67 65 72 2c 20 31 29 3b 0a 0a  me(pPager, 1);..
30a70 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f    /* Do not allo
30a80 77 20 61 20 74 72 61 6e 73 69 74 69 6f 6e 20 74  w a transition t
30a90 6f 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57  o journal_mode=W
30aa0 41 4c 20 66 6f 72 20 61 20 64 61 74 61 62 61 73  AL for a databas
30ab0 65 0a 20 20 2a 2a 20 69 6e 20 74 65 6d 70 6f 72  e.  ** in tempor
30ac0 61 72 79 20 73 74 6f 72 61 67 65 20 6f 72 20 69  ary storage or i
30ad0 66 20 74 68 65 20 56 46 53 20 64 6f 65 73 20 6e  f the VFS does n
30ae0 6f 74 20 73 75 70 70 6f 72 74 20 73 68 61 72 65  ot support share
30af0 64 20 6d 65 6d 6f 72 79 20 0a 20 20 2a 2f 0a 20  d memory .  */. 
30b00 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45 52   if( eNew==PAGER
30b10 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
30b20 0a 20 20 20 26 26 20 28 73 71 6c 69 74 65 33 53  .   && (sqlite3S
30b30 74 72 6c 65 6e 33 30 28 7a 46 69 6c 65 6e 61 6d  trlen30(zFilenam
30b40 65 29 3d 3d 30 20 20 20 20 20 20 20 20 20 20 20  e)==0           
30b50 2f 2a 20 54 65 6d 70 20 66 69 6c 65 20 2a 2f 0a  /* Temp file */.
30b60 20 20 20 20 20 20 20 7c 7c 20 21 73 71 6c 69 74         || !sqlit
30b70 65 33 50 61 67 65 72 57 61 6c 53 75 70 70 6f 72  e3PagerWalSuppor
30b80 74 65 64 28 70 50 61 67 65 72 29 29 20 20 20 2f  ted(pPager))   /
30b90 2a 20 4e 6f 20 73 68 61 72 65 64 2d 6d 65 6d 6f  * No shared-memo
30ba0 72 79 20 73 75 70 70 6f 72 74 20 2a 2f 0a 20 20  ry support */.  
30bb0 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20 65 4f  ){.    eNew = eO
30bc0 6c 64 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 28  ld;.  }..  if( (
30bd0 65 4e 65 77 21 3d 65 4f 6c 64 29 0a 20 20 20 26  eNew!=eOld).   &
30be0 26 20 28 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a  & (eOld==PAGER_J
30bf0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 7c  OURNALMODE_WAL |
30c00 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
30c10 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 29 0a 20  URNALMODE_WAL). 
30c20 20 29 7b 0a 20 20 20 20 69 66 28 20 21 64 62 2d   ){.    if( !db-
30c30 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20 64  >autoCommit || d
30c40 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31 20 29  b->nVdbeRead>1 )
30c50 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
30c60 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20  ITE_ERROR;.     
30c70 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
30c80 72 28 70 2c 0a 20 20 20 20 20 20 20 20 20 20 22  r(p,.          "
30c90 63 61 6e 6e 6f 74 20 63 68 61 6e 67 65 20 25 73  cannot change %s
30ca0 20 77 61 6c 20 6d 6f 64 65 20 66 72 6f 6d 20 77   wal mode from w
30cb0 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74  ithin a transact
30cc0 69 6f 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20  ion",.          
30cd0 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55  (eNew==PAGER_JOU
30ce0 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 22  RNALMODE_WAL ? "
30cf0 69 6e 74 6f 22 20 3a 20 22 6f 75 74 20 6f 66 22  into" : "out of"
30d00 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20  ).      );.     
30d10 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 65 6c 73   break;.    }els
30d20 65 7b 0a 20 0a 20 20 20 20 20 20 69 66 28 20 65  e{. .      if( e
30d30 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  Old==PAGER_JOURN
30d40 41 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a 20 20  ALMODE_WAL ){.  
30d50 20 20 20 20 20 20 2f 2a 20 49 66 20 6c 65 61 76        /* If leav
30d60 69 6e 67 20 57 41 4c 20 6d 6f 64 65 2c 20 63 6c  ing WAL mode, cl
30d70 6f 73 65 20 74 68 65 20 6c 6f 67 20 66 69 6c 65  ose the log file
30d80 2e 20 49 66 20 73 75 63 63 65 73 73 66 75 6c 2c  . If successful,
30d90 20 74 68 65 20 63 61 6c 6c 0a 20 20 20 20 20 20   the call.      
30da0 20 20 2a 2a 20 74 6f 20 50 61 67 65 72 43 6c 6f    ** to PagerClo
30db0 73 65 57 61 6c 28 29 20 63 68 65 63 6b 70 6f 69  seWal() checkpoi
30dc0 6e 74 73 20 61 6e 64 20 64 65 6c 65 74 65 73 20  nts and deletes 
30dd0 74 68 65 20 77 72 69 74 65 2d 61 68 65 61 64 2d  the write-ahead-
30de0 6c 6f 67 20 0a 20 20 20 20 20 20 20 20 2a 2a 20  log .        ** 
30df0 66 69 6c 65 2e 20 41 6e 20 45 58 43 4c 55 53 49  file. An EXCLUSI
30e00 56 45 20 6c 6f 63 6b 20 6d 61 79 20 73 74 69 6c  VE lock may stil
30e10 6c 20 62 65 20 68 65 6c 64 20 6f 6e 20 74 68 65  l be held on the
30e20 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 0a   database file .
30e30 20 20 20 20 20 20 20 20 2a 2a 20 61 66 74 65 72          ** after
30e40 20 61 20 73 75 63 63 65 73 73 66 75 6c 20 72 65   a successful re
30e50 74 75 72 6e 2e 20 0a 20 20 20 20 20 20 20 20 2a  turn. .        *
30e60 2f 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  /.        rc = s
30e70 71 6c 69 74 65 33 50 61 67 65 72 43 6c 6f 73 65  qlite3PagerClose
30e80 57 61 6c 28 70 50 61 67 65 72 29 3b 0a 20 20 20  Wal(pPager);.   
30e90 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
30ea0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
30eb0 20 20 20 20 73 71 6c 69 74 65 33 50 61 67 65 72      sqlite3Pager
30ec0 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  SetJournalMode(p
30ed0 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 20 20  Pager, eNew);.  
30ee0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65        }.      }e
30ef0 6c 73 65 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41  lse if( eOld==PA
30f00 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
30f10 4d 45 4d 4f 52 59 20 29 7b 0a 20 20 20 20 20 20  MEMORY ){.      
30f20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 74 72 61 6e    /* Cannot tran
30f30 73 69 74 69 6f 6e 20 64 69 72 65 63 74 6c 79 20  sition directly 
30f40 66 72 6f 6d 20 4d 45 4d 4f 52 59 20 74 6f 20 57  from MEMORY to W
30f50 41 4c 2e 20 20 55 73 65 20 6d 6f 64 65 20 4f 46  AL.  Use mode OF
30f60 46 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 73 20  F.        ** as 
30f70 61 6e 20 69 6e 74 65 72 6d 65 64 69 61 74 65 20  an intermediate 
30f80 2a 2f 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  */.        sqlit
30f90 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61  e3PagerSetJourna
30fa0 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 50 41  lMode(pPager, PA
30fb0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
30fc0 4f 46 46 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  OFF);.      }.  
30fd0 0a 20 20 20 20 20 20 2f 2a 20 4f 70 65 6e 20 61  .      /* Open a
30fe0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20   transaction on 
30ff0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
31000 65 2e 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66  e. Regardless of
31010 20 74 68 65 20 6a 6f 75 72 6e 61 6c 0a 20 20 20   the journal.   
31020 20 20 20 2a 2a 20 6d 6f 64 65 2c 20 74 68 69 73     ** mode, this
31030 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 77   transaction alw
31040 61 79 73 20 75 73 65 73 20 61 20 72 6f 6c 6c 62  ays uses a rollb
31050 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 20 20 20  ack journal..   
31060 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65     */.      asse
31070 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
31080 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29 3d 3d  IsInTrans(pBt)==
31090 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  0 );.      if( r
310a0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
310b0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
310c0 69 74 65 33 42 74 72 65 65 53 65 74 56 65 72 73  ite3BtreeSetVers
310d0 69 6f 6e 28 70 42 74 2c 20 28 65 4e 65 77 3d 3d  ion(pBt, (eNew==
310e0 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
310f0 45 5f 57 41 4c 20 3f 20 32 20 3a 20 31 29 29 3b  E_WAL ? 2 : 1));
31100 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
31110 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 69 66 6e   }.#endif /* ifn
31120 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
31130 57 41 4c 20 2a 2f 0a 0a 20 20 69 66 28 20 72 63  WAL */..  if( rc
31140 20 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20 65   ){.    eNew = e
31150 4f 6c 64 3b 0a 20 20 7d 0a 20 20 65 4e 65 77 20  Old;.  }.  eNew 
31160 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65  = sqlite3PagerSe
31170 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  tJournalMode(pPa
31180 67 65 72 2c 20 65 4e 65 77 29 3b 0a 0a 20 20 70  ger, eNew);..  p
31190 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
311a0 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c  _Str|MEM_Static|
311b0 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74  MEM_Term;.  pOut
311c0 2d 3e 7a 20 3d 20 28 63 68 61 72 20 2a 29 73 71  ->z = (char *)sq
311d0 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65  lite3JournalMode
311e0 6e 61 6d 65 28 65 4e 65 77 29 3b 0a 20 20 70 4f  name(eNew);.  pO
311f0 75 74 2d 3e 6e 20 3d 20 73 71 6c 69 74 65 33 53  ut->n = sqlite3S
31200 74 72 6c 65 6e 33 30 28 70 4f 75 74 2d 3e 7a 29  trlen30(pOut->z)
31210 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
31220 53 51 4c 49 54 45 5f 55 54 46 38 3b 0a 20 20 73  SQLITE_UTF8;.  s
31230 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
31240 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65  Encoding(pOut, e
31250 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61  ncoding);.  brea
31260 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  k;.};.#endif /* 
31270 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47  SQLITE_OMIT_PRAG
31280 4d 41 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69  MA */..#if !defi
31290 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
312a0 56 41 43 55 55 4d 29 20 26 26 20 21 64 65 66 69  VACUUM) && !defi
312b0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
312c0 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63 6f 64  ATTACH)./* Opcod
312d0 65 3a 20 56 61 63 75 75 6d 20 2a 20 2a 20 2a 20  e: Vacuum * * * 
312e0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d  * *.**.** Vacuum
312f0 20 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61   the entire data
31300 62 61 73 65 2e 20 20 54 68 69 73 20 6f 70 63 6f  base.  This opco
31310 64 65 20 77 69 6c 6c 20 63 61 75 73 65 20 6f 74  de will cause ot
31320 68 65 72 20 76 69 72 74 75 61 6c 0a 2a 2a 20 6d  her virtual.** m
31330 61 63 68 69 6e 65 73 20 74 6f 20 62 65 20 63 72  achines to be cr
31340 65 61 74 65 64 20 61 6e 64 20 72 75 6e 2e 20 20  eated and run.  
31350 49 74 20 6d 61 79 20 6e 6f 74 20 62 65 20 63 61  It may not be ca
31360 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  lled from within
31370 0a 2a 2a 20 61 20 74 72 61 6e 73 61 63 74 69 6f  .** a transactio
31380 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61  n..*/.case OP_Va
31390 63 75 75 6d 3a 20 7b 0a 20 20 61 73 73 65 72 74  cuum: {.  assert
313a0 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
313b0 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
313c0 65 33 52 75 6e 56 61 63 75 75 6d 28 26 70 2d 3e  e3RunVacuum(&p->
313d0 7a 45 72 72 4d 73 67 2c 20 64 62 29 3b 0a 20 20  zErrMsg, db);.  
313e0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
313f0 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
31400 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41  LITE_OMIT_AUTOVA
31410 43 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a  CUUM)./* Opcode:
31420 20 49 6e 63 72 56 61 63 75 75 6d 20 50 31 20 50   IncrVacuum P1 P
31430 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65  2 * * *.**.** Pe
31440 72 66 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20 73  rform a single s
31450 74 65 70 20 6f 66 20 74 68 65 20 69 6e 63 72 65  tep of the incre
31460 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 20 70 72  mental vacuum pr
31470 6f 63 65 64 75 72 65 20 6f 6e 0a 2a 2a 20 74 68  ocedure on.** th
31480 65 20 50 31 20 64 61 74 61 62 61 73 65 2e 20 49  e P1 database. I
31490 66 20 74 68 65 20 76 61 63 75 75 6d 20 68 61 73  f the vacuum has
314a0 20 66 69 6e 69 73 68 65 64 2c 20 6a 75 6d 70 20   finished, jump 
314b0 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a  to instruction.*
314c0 2a 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c  * P2. Otherwise,
314d0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
314e0 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
314f0 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
31500 50 5f 49 6e 63 72 56 61 63 75 75 6d 3a 20 7b 20  P_IncrVacuum: { 
31510 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
31520 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a  /.  Btree *pBt;.
31530 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
31540 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
31550 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
31560 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
31570 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
31580 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73  Op->p1) );.  ass
31590 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
315a0 3d 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64  ==0 );.  pBt = d
315b0 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
315c0 70 42 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  pBt;.  rc = sqli
315d0 74 65 33 42 74 72 65 65 49 6e 63 72 56 61 63 75  te3BtreeIncrVacu
315e0 75 6d 28 70 42 74 29 3b 0a 20 20 56 64 62 65 42  um(pBt);.  VdbeB
315f0 72 61 6e 63 68 54 61 6b 65 6e 28 72 63 3d 3d 53  ranchTaken(rc==S
31600 51 4c 49 54 45 5f 44 4f 4e 45 2c 32 29 3b 0a 20  QLITE_DONE,2);. 
31610 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
31620 44 4f 4e 45 20 29 7b 0a 20 20 20 20 72 63 20 3d  DONE ){.    rc =
31630 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20   SQLITE_OK;.    
31640 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
31650 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
31660 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64  #endif../* Opcod
31670 65 3a 20 45 78 70 69 72 65 20 50 31 20 2a 20 2a  e: Expire P1 * *
31680 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65   * *.**.** Cause
31690 20 70 72 65 63 6f 6d 70 69 6c 65 64 20 73 74 61   precompiled sta
316a0 74 65 6d 65 6e 74 73 20 74 6f 20 65 78 70 69 72  tements to expir
316b0 65 2e 20 20 57 68 65 6e 20 61 6e 20 65 78 70 69  e.  When an expi
316c0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a  red statement.**
316d0 20 69 73 20 65 78 65 63 75 74 65 64 20 75 73 69   is executed usi
316e0 6e 67 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  ng sqlite3_step(
316f0 29 20 69 74 20 77 69 6c 6c 20 65 69 74 68 65 72  ) it will either
31700 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 2a   automatically.*
31710 2a 20 72 65 70 72 65 70 61 72 65 20 69 74 73 65  * reprepare itse
31720 6c 66 20 28 69 66 20 69 74 20 77 61 73 20 6f 72  lf (if it was or
31730 69 67 69 6e 61 6c 6c 79 20 63 72 65 61 74 65 64  iginally created
31740 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 70   using sqlite3_p
31750 72 65 70 61 72 65 5f 76 32 28 29 29 0a 2a 2a 20  repare_v2()).** 
31760 6f 72 20 69 74 20 77 69 6c 6c 20 66 61 69 6c 20  or it will fail 
31770 77 69 74 68 20 53 51 4c 49 54 45 5f 53 43 48 45  with SQLITE_SCHE
31780 4d 41 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50 31  MA..** .** If P1
31790 20 69 73 20 30 2c 20 74 68 65 6e 20 61 6c 6c 20   is 0, then all 
317a0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 62  SQL statements b
317b0 65 63 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 49  ecome expired. I
317c0 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P1 is non-zero
317d0 2c 0a 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79 20 74  ,.** then only t
317e0 68 65 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65  he currently exe
317f0 63 75 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  cuting statement
31800 20 69 73 20 65 78 70 69 72 65 64 2e 0a 2a 2f 0a   is expired..*/.
31810 63 61 73 65 20 4f 50 5f 45 78 70 69 72 65 3a 20  case OP_Expire: 
31820 7b 0a 20 20 69 66 28 20 21 70 4f 70 2d 3e 70 31  {.  if( !pOp->p1
31830 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45   ){.    sqlite3E
31840 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
31850 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d  tements(db);.  }
31860 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 65 78 70  else{.    p->exp
31870 69 72 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20  ired = 1;.  }.  
31880 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  break;.}..#ifnde
31890 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
318a0 41 52 45 44 5f 43 41 43 48 45 0a 2f 2a 20 4f 70  ARED_CACHE./* Op
318b0 63 6f 64 65 3a 20 54 61 62 6c 65 4c 6f 63 6b 20  code: TableLock 
318c0 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
318d0 20 53 79 6e 6f 70 73 69 73 3a 20 69 44 62 3d 50   Synopsis: iDb=P
318e0 31 20 72 6f 6f 74 3d 50 32 20 77 72 69 74 65 3d  1 root=P2 write=
318f0 50 33 0a 2a 2a 0a 2a 2a 20 4f 62 74 61 69 6e 20  P3.**.** Obtain 
31900 61 20 6c 6f 63 6b 20 6f 6e 20 61 20 70 61 72 74  a lock on a part
31910 69 63 75 6c 61 72 20 74 61 62 6c 65 2e 20 54 68  icular table. Th
31920 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
31930 73 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65 6e  s only used when
31940 0a 2a 2a 20 74 68 65 20 73 68 61 72 65 64 2d 63  .** the shared-c
31950 61 63 68 65 20 66 65 61 74 75 72 65 20 69 73 20  ache feature is 
31960 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a 20  enabled. .**.** 
31970 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  P1 is the index 
31980 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
31990 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d  in sqlite3.aDb[]
319a0 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
319b0 0a 2a 2a 20 6f 6e 20 77 68 69 63 68 20 74 68 65  .** on which the
319c0 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65   lock is acquire
319d0 64 2e 20 20 41 20 72 65 61 64 6c 6f 63 6b 20 69  d.  A readlock i
319e0 73 20 6f 62 74 61 69 6e 65 64 20 69 66 20 50 33  s obtained if P3
319f0 3d 3d 30 20 6f 72 0a 2a 2a 20 61 20 77 72 69 74  ==0 or.** a writ
31a00 65 20 6c 6f 63 6b 20 69 66 20 50 33 3d 3d 31 2e  e lock if P3==1.
31a10 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74 61 69  .**.** P2 contai
31a20 6e 73 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65  ns the root-page
31a30 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f   of the table to
31a40 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34 20   lock..**.** P4 
31a50 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e 74  contains a point
31a60 65 72 20 74 6f 20 74 68 65 20 6e 61 6d 65 20 6f  er to the name o
31a70 66 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  f the table bein
31a80 67 20 6c 6f 63 6b 65 64 2e 20 54 68 69 73 20 69  g locked. This i
31a90 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64 20 74  s only.** used t
31aa0 6f 20 67 65 6e 65 72 61 74 65 20 61 6e 20 65 72  o generate an er
31ab0 72 6f 72 20 6d 65 73 73 61 67 65 20 69 66 20 74  ror message if t
31ac0 68 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20 62  he lock cannot b
31ad0 65 20 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a 63  e obtained..*/.c
31ae0 61 73 65 20 4f 50 5f 54 61 62 6c 65 4c 6f 63 6b  ase OP_TableLock
31af0 3a 20 7b 0a 20 20 75 38 20 69 73 57 72 69 74 65  : {.  u8 isWrite
31b00 4c 6f 63 6b 20 3d 20 28 75 38 29 70 4f 70 2d 3e  Lock = (u8)pOp->
31b10 70 33 3b 0a 20 20 69 66 28 20 69 73 57 72 69 74  p3;.  if( isWrit
31b20 65 4c 6f 63 6b 20 7c 7c 20 30 3d 3d 28 64 62 2d  eLock || 0==(db-
31b30 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 52 65  >flags&SQLITE_Re
31b40 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 29 20 29  adUncommitted) )
31b50 7b 0a 20 20 20 20 69 6e 74 20 70 31 20 3d 20 70  {.    int p1 = p
31b60 4f 70 2d 3e 70 31 3b 20 0a 20 20 20 20 61 73 73  Op->p1; .    ass
31b70 65 72 74 28 20 70 31 3e 3d 30 20 26 26 20 70 31  ert( p1>=0 && p1
31b80 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 20 20  <db->nDb );.    
31b90 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
31ba0 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
31bb0 20 70 31 29 20 29 3b 0a 20 20 20 20 61 73 73 65   p1) );.    asse
31bc0 72 74 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d  rt( isWriteLock=
31bd0 3d 30 20 7c 7c 20 69 73 57 72 69 74 65 4c 6f 63  =0 || isWriteLoc
31be0 6b 3d 3d 31 20 29 3b 0a 20 20 20 20 72 63 20 3d  k==1 );.    rc =
31bf0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 6f 63   sqlite3BtreeLoc
31c00 6b 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70  kTable(db->aDb[p
31c10 31 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c  1].pBt, pOp->p2,
31c20 20 69 73 57 72 69 74 65 4c 6f 63 6b 29 3b 0a 20   isWriteLock);. 
31c30 20 20 20 69 66 28 20 28 72 63 26 30 78 46 46 29     if( (rc&0xFF)
31c40 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  ==SQLITE_LOCKED 
31c50 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63  ){.      const c
31c60 68 61 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34  har *z = pOp->p4
31c70 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  .z;.      sqlite
31c80 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 64  3VdbeError(p, "d
31c90 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 69 73  atabase table is
31ca0 20 6c 6f 63 6b 65 64 3a 20 25 73 22 2c 20 7a 29   locked: %s", z)
31cb0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
31cc0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
31cd0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
31ce0 52 45 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23 69  RED_CACHE */..#i
31cf0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
31d00 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
31d10 2a 20 4f 70 63 6f 64 65 3a 20 56 42 65 67 69 6e  * Opcode: VBegin
31d20 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a   * * * P4 *.**.*
31d30 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 70 6f  * P4 may be a po
31d40 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69  inter to an sqli
31d50 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
31d60 72 65 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c 20  re. If so, call 
31d70 74 68 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20 6d  the .** xBegin m
31d80 65 74 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74  ethod for that t
31d90 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f  able..**.** Also
31da0 2c 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  , whether or not
31db0 20 50 34 20 69 73 20 73 65 74 2c 20 63 68 65 63   P4 is set, chec
31dc0 6b 20 74 68 61 74 20 74 68 69 73 20 69 73 20 6e  k that this is n
31dd0 6f 74 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20  ot being called 
31de0 66 72 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20 61  from.** within a
31df0 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20 76   callback to a v
31e00 69 72 74 75 61 6c 20 74 61 62 6c 65 20 78 53 79  irtual table xSy
31e10 6e 63 28 29 20 6d 65 74 68 6f 64 2e 20 49 66 20  nc() method. If 
31e20 69 74 20 69 73 2c 20 74 68 65 20 65 72 72 6f 72  it is, the error
31e30 0a 2a 2a 20 63 6f 64 65 20 77 69 6c 6c 20 62 65  .** code will be
31e40 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4c   set to SQLITE_L
31e50 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f  OCKED..*/.case O
31e60 50 5f 56 42 65 67 69 6e 3a 20 7b 0a 20 20 56 54  P_VBegin: {.  VT
31e70 61 62 6c 65 20 2a 70 56 54 61 62 3b 0a 20 20 70  able *pVTab;.  p
31e80 56 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  VTab = pOp->p4.p
31e90 56 74 61 62 3b 0a 20 20 72 63 20 3d 20 73 71 6c  Vtab;.  rc = sql
31ea0 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 64 62  ite3VtabBegin(db
31eb0 2c 20 70 56 54 61 62 29 3b 0a 20 20 69 66 28 20  , pVTab);.  if( 
31ec0 70 56 54 61 62 20 29 20 73 71 6c 69 74 65 33 56  pVTab ) sqlite3V
31ed0 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
31ee0 70 2c 20 70 56 54 61 62 2d 3e 70 56 74 61 62 29  p, pVTab->pVtab)
31ef0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
31f00 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
31f10 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
31f20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
31f30 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
31f40 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
31f50 56 43 72 65 61 74 65 20 50 31 20 50 32 20 2a 20  VCreate P1 P2 * 
31f60 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20  * *.**.** P2 is 
31f70 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
31f80 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 20 6f  holds the name o
31f90 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  f a virtual tabl
31fa0 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 0a 2a  e in database .*
31fb0 2a 20 50 31 2e 20 43 61 6c 6c 20 74 68 65 20 78  * P1. Call the x
31fc0 43 72 65 61 74 65 20 6d 65 74 68 6f 64 20 66 6f  Create method fo
31fd0 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f  r that table..*/
31fe0 0a 63 61 73 65 20 4f 50 5f 56 43 72 65 61 74 65  .case OP_VCreate
31ff0 3a 20 7b 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b 20  : {.  Mem sMem; 
32000 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20           /* For 
32010 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65 63 6f  storing the reco
32020 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64  rd being decoded
32030 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
32040 20 2a 7a 54 61 62 3b 20 20 2f 2a 20 4e 61 6d 65   *zTab;  /* Name
32050 20 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c 20   of the virtual 
32060 74 61 62 6c 65 20 2a 2f 0a 0a 20 20 6d 65 6d 73  table */..  mems
32070 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a  et(&sMem, 0, siz
32080 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 73 4d  eof(sMem));.  sM
32090 65 6d 2e 64 62 20 3d 20 64 62 3b 0a 20 20 2f 2a  em.db = db;.  /*
320a0 20 42 65 63 61 75 73 65 20 50 32 20 69 73 20 61   Because P2 is a
320b0 6c 77 61 79 73 20 61 20 73 74 61 74 69 63 20 73  lways a static s
320c0 74 72 69 6e 67 2c 20 69 74 20 69 73 20 69 6d 70  tring, it is imp
320d0 6f 73 73 69 62 6c 65 20 66 6f 72 20 74 68 65 0a  ossible for the.
320e0 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65    ** sqlite3Vdbe
320f0 4d 65 6d 43 6f 70 79 28 29 20 74 6f 20 66 61 69  MemCopy() to fai
32100 6c 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28  l */.  assert( (
32110 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2e 66 6c  aMem[pOp->p2].fl
32120 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 29 21 3d  ags & MEM_Str)!=
32130 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  0 );.  assert( (
32140 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2e 66 6c  aMem[pOp->p2].fl
32150 61 67 73 20 26 20 4d 45 4d 5f 53 74 61 74 69 63  ags & MEM_Static
32160 29 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73  )!=0 );.  rc = s
32170 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6f 70  qlite3VdbeMemCop
32180 79 28 26 73 4d 65 6d 2c 20 26 61 4d 65 6d 5b 70  y(&sMem, &aMem[p
32190 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 61 73 73 65  Op->p2]);.  asse
321a0 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
321b0 4b 20 29 3b 0a 20 20 7a 54 61 62 20 3d 20 28 63  K );.  zTab = (c
321c0 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74  onst char*)sqlit
321d0 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 73  e3_value_text(&s
321e0 4d 65 6d 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Mem);.  assert( 
321f0 7a 54 61 62 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c  zTab || db->mall
32200 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 69 66  ocFailed );.  if
32210 28 20 7a 54 61 62 20 29 7b 0a 20 20 20 20 72 63  ( zTab ){.    rc
32220 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43 61   = sqlite3VtabCa
32230 6c 6c 43 72 65 61 74 65 28 64 62 2c 20 70 4f 70  llCreate(db, pOp
32240 2d 3e 70 31 2c 20 7a 54 61 62 2c 20 26 70 2d 3e  ->p1, zTab, &p->
32250 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20  zErrMsg);.  }.  
32260 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
32270 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20  lease(&sMem);.  
32280 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
32290 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
322a0 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
322b0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
322c0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
322d0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 44 65 73  ./* Opcode: VDes
322e0 74 72 6f 79 20 50 31 20 2a 20 2a 20 50 34 20 2a  troy P1 * * P4 *
322f0 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65  .**.** P4 is the
32300 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75   name of a virtu
32310 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61  al table in data
32320 62 61 73 65 20 50 31 2e 20 20 43 61 6c 6c 20 74  base P1.  Call t
32330 68 65 20 78 44 65 73 74 72 6f 79 20 6d 65 74 68  he xDestroy meth
32340 6f 64 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61  od.** of that ta
32350 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ble..*/.case OP_
32360 56 44 65 73 74 72 6f 79 3a 20 7b 0a 20 20 64 62  VDestroy: {.  db
32370 2d 3e 6e 56 44 65 73 74 72 6f 79 2b 2b 3b 0a 20  ->nVDestroy++;. 
32380 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
32390 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 64 62 2c  bCallDestroy(db,
323a0 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
323b0 34 2e 7a 29 3b 0a 20 20 64 62 2d 3e 6e 56 44 65  4.z);.  db->nVDe
323c0 73 74 72 6f 79 2d 2d 3b 0a 20 20 62 72 65 61 6b  stroy--;.  break
323d0 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
323e0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
323f0 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
32400 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
32410 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
32420 70 63 6f 64 65 3a 20 56 4f 70 65 6e 20 50 31 20  pcode: VOpen P1 
32430 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  * * P4 *.**.** P
32440 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
32450 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  o a virtual tabl
32460 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c  e object, an sql
32470 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
32480 75 72 65 2e 0a 2a 2a 20 50 31 20 69 73 20 61 20  ure..** P1 is a 
32490 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 20 20  cursor number.  
324a0 54 68 69 73 20 6f 70 63 6f 64 65 20 6f 70 65 6e  This opcode open
324b0 73 20 61 20 63 75 72 73 6f 72 20 74 6f 20 74 68  s a cursor to th
324c0 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62  e virtual.** tab
324d0 6c 65 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68  le and stores th
324e0 61 74 20 63 75 72 73 6f 72 20 69 6e 20 50 31 2e  at cursor in P1.
324f0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4f 70 65  .*/.case OP_VOpe
32500 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  n: {.  VdbeCurso
32510 72 20 2a 70 43 75 72 3b 0a 20 20 73 71 6c 69 74  r *pCur;.  sqlit
32520 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a  e3_vtab_cursor *
32530 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 73  pVtabCursor;.  s
32540 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
32550 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ab;.  const sqli
32560 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
32570 75 6c 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  ule;..  assert( 
32580 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
32590 20 20 70 43 75 72 20 3d 20 30 3b 0a 20 20 70 56    pCur = 0;.  pV
325a0 74 61 62 43 75 72 73 6f 72 20 3d 20 30 3b 0a 20  tabCursor = 0;. 
325b0 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34   pVtab = pOp->p4
325c0 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20  .pVtab->pVtab;. 
325d0 20 69 66 28 20 70 56 74 61 62 3d 3d 30 20 7c 7c   if( pVtab==0 ||
325e0 20 4e 45 56 45 52 28 70 56 74 61 62 2d 3e 70 4d   NEVER(pVtab->pM
325f0 6f 64 75 6c 65 3d 3d 30 29 20 29 7b 0a 20 20 20  odule==0) ){.   
32600 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43   rc = SQLITE_LOC
32610 4b 45 44 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  KED;.    break;.
32620 20 20 7d 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20    }.  pModule = 
32630 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
32640 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
32650 78 4f 70 65 6e 28 70 56 74 61 62 2c 20 26 70 56  xOpen(pVtab, &pV
32660 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 73 71  tabCursor);.  sq
32670 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
32680 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrmsg(p, pVtab);
32690 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b  .  if( SQLITE_OK
326a0 3d 3d 72 63 20 29 7b 0a 20 20 20 20 2f 2a 20 49  ==rc ){.    /* I
326b0 6e 69 74 69 61 6c 69 7a 65 20 73 71 6c 69 74 65  nitialize sqlite
326c0 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 62 61  3_vtab_cursor ba
326d0 73 65 20 63 6c 61 73 73 20 2a 2f 0a 20 20 20 20  se class */.    
326e0 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74  pVtabCursor->pVt
326f0 61 62 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20 20  ab = pVtab;..   
32700 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 76   /* Initialize v
32710 64 62 65 20 63 75 72 73 6f 72 20 6f 62 6a 65 63  dbe cursor objec
32720 74 20 2a 2f 0a 20 20 20 20 70 43 75 72 20 3d 20  t */.    pCur = 
32730 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
32740 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 2d 31  , pOp->p1, 0, -1
32750 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20 70 43  , 0);.    if( pC
32760 75 72 20 29 7b 0a 20 20 20 20 20 20 70 43 75 72  ur ){.      pCur
32770 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20  ->pVtabCursor = 
32780 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 20  pVtabCursor;.   
32790 20 20 20 70 56 74 61 62 2d 3e 6e 52 65 66 2b 2b     pVtab->nRef++
327a0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
327b0 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6d     assert( db->m
327c0 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20  allocFailed );. 
327d0 20 20 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43       pModule->xC
327e0 6c 6f 73 65 28 70 56 74 61 62 43 75 72 73 6f 72  lose(pVtabCursor
327f0 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f  );.      goto no
32800 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  _mem;.    }.  }.
32810 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
32820 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
32830 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
32840 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
32850 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
32860 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 46  LE./* Opcode: VF
32870 69 6c 74 65 72 20 50 31 20 50 32 20 50 33 20 50  ilter P1 P2 P3 P
32880 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
32890 20 69 70 6c 61 6e 3d 72 5b 50 33 5d 20 7a 70 6c   iplan=r[P3] zpl
328a0 61 6e 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50 31  an='P4'.**.** P1
328b0 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f 70 65   is a cursor ope
328c0 6e 65 64 20 75 73 69 6e 67 20 56 4f 70 65 6e 2e  ned using VOpen.
328d0 20 20 50 32 20 69 73 20 61 6e 20 61 64 64 72 65    P2 is an addre
328e0 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66  ss to jump to if
328f0 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65 72 65 64  .** the filtered
32900 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65   result set is e
32910 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  mpty..**.** P4 i
32920 73 20 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72  s either NULL or
32930 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 77   a string that w
32940 61 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20  as generated by 
32950 74 68 65 20 78 42 65 73 74 49 6e 64 65 78 0a 2a  the xBestIndex.*
32960 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20  * method of the 
32970 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20 69 6e 74  module.  The int
32980 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74  erpretation of t
32990 68 65 20 50 34 20 73 74 72 69 6e 67 20 69 73 20  he P4 string is 
329a0 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68 65 20 6d  left.** to the m
329b0 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  odule implementa
329c0 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  tion..**.** This
329d0 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
329e0 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68  the xFilter meth
329f0 6f 64 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61  od on the virtua
32a00 6c 20 74 61 62 6c 65 20 73 70 65 63 69 66 69 65  l table specifie
32a10 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20 54 68 65  d.** by P1.  The
32a20 20 69 6e 74 65 67 65 72 20 71 75 65 72 79 20 70   integer query p
32a30 6c 61 6e 20 70 61 72 61 6d 65 74 65 72 20 74 6f  lan parameter to
32a40 20 78 46 69 6c 74 65 72 20 69 73 20 73 74 6f 72   xFilter is stor
32a50 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a  ed in register.*
32a60 2a 20 50 33 2e 20 52 65 67 69 73 74 65 72 20 50  * P3. Register P
32a70 33 2b 31 20 73 74 6f 72 65 73 20 74 68 65 20 61  3+1 stores the a
32a80 72 67 63 20 70 61 72 61 6d 65 74 65 72 20 74 6f  rgc parameter to
32a90 20 62 65 20 70 61 73 73 65 64 20 74 6f 20 74 68   be passed to th
32aa0 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20 6d 65 74  e.** xFilter met
32ab0 68 6f 64 2e 20 52 65 67 69 73 74 65 72 73 20 50  hod. Registers P
32ac0 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67 63 20 61  3+2..P3+1+argc a
32ad0 72 65 20 74 68 65 20 61 72 67 63 0a 2a 2a 20 61  re the argc.** a
32ae0 64 64 69 74 69 6f 6e 61 6c 20 70 61 72 61 6d 65  dditional parame
32af0 74 65 72 73 20 77 68 69 63 68 20 61 72 65 20 70  ters which are p
32b00 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78 46 69 6c  assed to.** xFil
32b10 74 65 72 20 61 73 20 61 72 67 76 2e 20 52 65 67  ter as argv. Reg
32b20 69 73 74 65 72 20 50 33 2b 32 20 62 65 63 6f 6d  ister P3+2 becom
32b30 65 73 20 61 72 67 76 5b 30 5d 20 77 68 65 6e 20  es argv[0] when 
32b40 70 61 73 73 65 64 20 74 6f 20 78 46 69 6c 74 65  passed to xFilte
32b50 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20  r..**.** A jump 
32b60 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20 69 66  is made to P2 if
32b70 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20   the result set 
32b80 61 66 74 65 72 20 66 69 6c 74 65 72 69 6e 67 20  after filtering 
32b90 77 6f 75 6c 64 20 62 65 20 65 6d 70 74 79 2e 0a  would be empty..
32ba0 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46 69 6c 74  */.case OP_VFilt
32bb0 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20  er: {   /* jump 
32bc0 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20  */.  int nArg;. 
32bd0 20 69 6e 74 20 69 51 75 65 72 79 3b 0a 20 20 63   int iQuery;.  c
32be0 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
32bf0 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20  ule *pModule;.  
32c00 4d 65 6d 20 2a 70 51 75 65 72 79 3b 0a 20 20 4d  Mem *pQuery;.  M
32c10 65 6d 20 2a 70 41 72 67 63 3b 0a 20 20 73 71 6c  em *pArgc;.  sql
32c20 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
32c30 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20   *pVtabCursor;. 
32c40 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
32c50 56 74 61 62 3b 0a 20 20 56 64 62 65 43 75 72 73  Vtab;.  VdbeCurs
32c60 6f 72 20 2a 70 43 75 72 3b 0a 20 20 69 6e 74 20  or *pCur;.  int 
32c70 72 65 73 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  res;.  int i;.  
32c80 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 0a 20 20  Mem **apArg;..  
32c90 70 51 75 65 72 79 20 3d 20 26 61 4d 65 6d 5b 70  pQuery = &aMem[p
32ca0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 41 72 67 63  Op->p3];.  pArgc
32cb0 20 3d 20 26 70 51 75 65 72 79 5b 31 5d 3b 0a 20   = &pQuery[1];. 
32cc0 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72   pCur = p->apCsr
32cd0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
32ce0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
32cf0 70 51 75 65 72 79 29 20 29 3b 0a 20 20 52 45 47  pQuery) );.  REG
32d00 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
32d10 3e 70 33 2c 20 70 51 75 65 72 79 29 3b 0a 20 20  >p3, pQuery);.  
32d20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56  assert( pCur->pV
32d30 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  tabCursor );.  p
32d40 56 74 61 62 43 75 72 73 6f 72 20 3d 20 70 43 75  VtabCursor = pCu
32d50 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 3b 0a  r->pVtabCursor;.
32d60 20 20 70 56 74 61 62 20 3d 20 70 56 74 61 62 43    pVtab = pVtabC
32d70 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20  ursor->pVtab;.  
32d80 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
32d90 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f 2a 20  >pModule;..  /* 
32da0 47 72 61 62 20 74 68 65 20 69 6e 64 65 78 20 6e  Grab the index n
32db0 75 6d 62 65 72 20 61 6e 64 20 61 72 67 63 20 70  umber and argc p
32dc0 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 61  arameters */.  a
32dd0 73 73 65 72 74 28 20 28 70 51 75 65 72 79 2d 3e  ssert( (pQuery->
32de0 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29 21 3d  flags&MEM_Int)!=
32df0 30 20 26 26 20 70 41 72 67 63 2d 3e 66 6c 61 67  0 && pArgc->flag
32e00 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  s==MEM_Int );.  
32e10 6e 41 72 67 20 3d 20 28 69 6e 74 29 70 41 72 67  nArg = (int)pArg
32e20 63 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65 72 79  c->u.i;.  iQuery
32e30 20 3d 20 28 69 6e 74 29 70 51 75 65 72 79 2d 3e   = (int)pQuery->
32e40 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  u.i;..  /* Invok
32e50 65 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65  e the xFilter me
32e60 74 68 6f 64 20 2a 2f 0a 20 20 72 65 73 20 3d 20  thod */.  res = 
32e70 30 3b 0a 20 20 61 70 41 72 67 20 3d 20 70 2d 3e  0;.  apArg = p->
32e80 61 70 41 72 67 3b 0a 20 20 66 6f 72 28 69 20 3d  apArg;.  for(i =
32e90 20 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29   0; i<nArg; i++)
32ea0 7b 0a 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d  {.    apArg[i] =
32eb0 20 26 70 41 72 67 63 5b 69 2b 31 5d 3b 0a 20 20   &pArgc[i+1];.  
32ec0 7d 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65  }.  rc = pModule
32ed0 2d 3e 78 46 69 6c 74 65 72 28 70 56 74 61 62 43  ->xFilter(pVtabC
32ee0 75 72 73 6f 72 2c 20 69 51 75 65 72 79 2c 20 70  ursor, iQuery, p
32ef0 4f 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67 2c 20  Op->p4.z, nArg, 
32f00 61 70 41 72 67 29 3b 0a 20 20 73 71 6c 69 74 65  apArg);.  sqlite
32f10 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
32f20 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69  g(p, pVtab);.  i
32f30 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
32f40 20 29 7b 0a 20 20 20 20 72 65 73 20 3d 20 70 4d   ){.    res = pM
32f50 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 56 74 61  odule->xEof(pVta
32f60 62 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20  bCursor);.  }.  
32f70 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20  pCur->nullRow = 
32f80 30 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  0;.  VdbeBranchT
32f90 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a  aken(res!=0,2);.
32fa0 20 20 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f    if( res ) goto
32fb0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62   jump_to_p2;.  b
32fc0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
32fd0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
32fe0 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
32ff0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
33000 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
33010 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f 6c 75  /* Opcode: VColu
33020 6d 6e 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  mn P1 P2 P3 * *.
33030 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
33040 33 5d 3d 76 63 6f 6c 75 6d 6e 28 50 32 29 0a 2a  3]=vcolumn(P2).*
33050 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 76  *.** Store the v
33060 61 6c 75 65 20 6f 66 20 74 68 65 20 50 32 2d 74  alue of the P2-t
33070 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74  h column of.** t
33080 68 65 20 72 6f 77 20 6f 66 20 74 68 65 20 76 69  he row of the vi
33090 72 74 75 61 6c 2d 74 61 62 6c 65 20 74 68 61 74  rtual-table that
330a0 20 74 68 65 20 0a 2a 2a 20 50 31 20 63 75 72 73   the .** P1 curs
330b0 6f 72 20 69 73 20 70 6f 69 6e 74 69 6e 67 20 74  or is pointing t
330c0 6f 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  o into register 
330d0 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  P3..*/.case OP_V
330e0 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69  Column: {.  sqli
330f0 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
33100 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
33110 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
33120 3b 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 0a  ;.  Mem *pDest;.
33130 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
33140 74 20 73 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 56  t sContext;..  V
33150 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 20  dbeCursor *pCur 
33160 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
33170 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
33180 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
33190 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
331a0 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
331b0 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
331c0 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 44  nCursor) );.  pD
331d0 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  est = &aMem[pOp-
331e0 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p3];.  memAbout
331f0 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73  ToChange(p, pDes
33200 74 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e  t);.  if( pCur->
33210 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73  nullRow ){.    s
33220 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
33230 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20  Null(pDest);.   
33240 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56   break;.  }.  pV
33250 74 61 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61  tab = pCur->pVta
33260 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a  bCursor->pVtab;.
33270 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
33280 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73  b->pModule;.  as
33290 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78  sert( pModule->x
332a0 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73  Column );.  mems
332b0 65 74 28 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c  et(&sContext, 0,
332c0 20 73 69 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74   sizeof(sContext
332d0 29 29 3b 0a 20 20 73 43 6f 6e 74 65 78 74 2e 70  ));.  sContext.p
332e0 4f 75 74 20 3d 20 70 44 65 73 74 3b 0a 20 20 4d  Out = pDest;.  M
332f0 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 44  emSetTypeFlag(pD
33300 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  est, MEM_Null);.
33310 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
33320 78 43 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e 70 56  xColumn(pCur->pV
33330 74 61 62 43 75 72 73 6f 72 2c 20 26 73 43 6f 6e  tabCursor, &sCon
33340 74 65 78 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a  text, pOp->p2);.
33350 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70    sqlite3VtabImp
33360 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74  ortErrmsg(p, pVt
33370 61 62 29 3b 0a 20 20 69 66 28 20 73 43 6f 6e 74  ab);.  if( sCont
33380 65 78 74 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20  ext.isError ){. 
33390 20 20 20 72 63 20 3d 20 73 43 6f 6e 74 65 78 74     rc = sContext
333a0 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20  .isError;.  }.  
333b0 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
333c0 65 45 6e 63 6f 64 69 6e 67 28 70 44 65 73 74 2c  eEncoding(pDest,
333d0 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 52 45   encoding);.  RE
333e0 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
333f0 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20  ->p3, pDest);.  
33400 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
33410 49 5a 45 28 70 44 65 73 74 29 3b 0a 0a 20 20 69  IZE(pDest);..  i
33420 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
33430 6d 54 6f 6f 42 69 67 28 70 44 65 73 74 29 20 29  mTooBig(pDest) )
33440 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
33450 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ig;.  }.  break;
33460 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
33470 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
33480 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
33490 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
334a0 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
334b0 63 6f 64 65 3a 20 56 4e 65 78 74 20 50 31 20 50  code: VNext P1 P
334c0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64  2 * * *.**.** Ad
334d0 76 61 6e 63 65 20 76 69 72 74 75 61 6c 20 74 61  vance virtual ta
334e0 62 6c 65 20 50 31 20 74 6f 20 74 68 65 20 6e 65  ble P1 to the ne
334f0 78 74 20 72 6f 77 20 69 6e 20 69 74 73 20 72 65  xt row in its re
33500 73 75 6c 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20  sult set and.** 
33510 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
33520 69 6f 6e 20 50 32 2e 20 20 4f 72 2c 20 69 66 20  ion P2.  Or, if 
33530 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
33540 65 20 68 61 73 20 72 65 61 63 68 65 64 0a 2a 2a  e has reached.**
33550 20 74 68 65 20 65 6e 64 20 6f 66 20 69 74 73 20   the end of its 
33560 72 65 73 75 6c 74 20 73 65 74 2c 20 74 68 65 6e  result set, then
33570 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
33580 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
33590 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
335a0 50 5f 56 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20  P_VNext: {   /* 
335b0 6a 75 6d 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65  jump */.  sqlite
335c0 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
335d0 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
335e0 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
335f0 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 56 64 62    int res;.  Vdb
33600 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a  eCursor *pCur;..
33610 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 70 43 75    res = 0;.  pCu
33620 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
33630 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
33640 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
33650 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 43 75 72  or );.  if( pCur
33660 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
33670 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56   break;.  }.  pV
33680 74 61 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61  tab = pCur->pVta
33690 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a  bCursor->pVtab;.
336a0 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
336b0 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73  b->pModule;.  as
336c0 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78  sert( pModule->x
336d0 4e 65 78 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e  Next );..  /* In
336e0 76 6f 6b 65 20 74 68 65 20 78 4e 65 78 74 28 29  voke the xNext()
336f0 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d   method of the m
33700 6f 64 75 6c 65 2e 20 54 68 65 72 65 20 69 73 20  odule. There is 
33710 6e 6f 20 77 61 79 20 66 6f 72 20 74 68 65 0a 20  no way for the. 
33720 20 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 69   ** underlying i
33730 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f  mplementation to
33740 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72   return an error
33750 20 69 66 20 6f 6e 65 20 6f 63 63 75 72 73 20 64   if one occurs d
33760 75 72 69 6e 67 0a 20 20 2a 2a 20 78 4e 65 78 74  uring.  ** xNext
33770 28 29 2e 20 49 6e 73 74 65 61 64 2c 20 69 66 20  (). Instead, if 
33780 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c  an error occurs,
33790 20 74 72 75 65 20 69 73 20 72 65 74 75 72 6e 65   true is returne
337a0 64 20 28 69 6e 64 69 63 61 74 69 6e 67 20 74 68  d (indicating th
337b0 61 74 20 0a 20 20 2a 2a 20 64 61 74 61 20 69 73  at .  ** data is
337c0 20 61 76 61 69 6c 61 62 6c 65 29 20 61 6e 64 20   available) and 
337d0 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 72  the error code r
337e0 65 74 75 72 6e 65 64 20 77 68 65 6e 20 78 43 6f  eturned when xCo
337f0 6c 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d  lumn or.  ** som
33800 65 20 6f 74 68 65 72 20 6d 65 74 68 6f 64 20 69  e other method i
33810 73 20 6e 65 78 74 20 69 6e 76 6f 6b 65 64 20 6f  s next invoked o
33820 6e 20 74 68 65 20 73 61 76 65 20 76 69 72 74 75  n the save virtu
33830 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 2e  al table cursor.
33840 0a 20 20 2a 2f 0a 20 20 72 63 20 3d 20 70 4d 6f  .  */.  rc = pMo
33850 64 75 6c 65 2d 3e 78 4e 65 78 74 28 70 43 75 72  dule->xNext(pCur
33860 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a  ->pVtabCursor);.
33870 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70    sqlite3VtabImp
33880 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74  ortErrmsg(p, pVt
33890 61 62 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  ab);.  if( rc==S
338a0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
338b0 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78  res = pModule->x
338c0 45 6f 66 28 70 43 75 72 2d 3e 70 56 74 61 62 43  Eof(pCur->pVtabC
338d0 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 56 64  ursor);.  }.  Vd
338e0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 21 72  beBranchTaken(!r
338f0 65 73 2c 32 29 3b 0a 20 20 69 66 28 20 21 72 65  es,2);.  if( !re
33900 73 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74  s ){.    /* If t
33910 68 65 72 65 20 69 73 20 64 61 74 61 2c 20 6a 75  here is data, ju
33920 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20  mp to P2 */.    
33930 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f  goto jump_to_p2_
33940 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e  and_check_for_in
33950 74 65 72 72 75 70 74 3b 0a 20 20 7d 0a 20 20 67  terrupt;.  }.  g
33960 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e  oto check_for_in
33970 74 65 72 72 75 70 74 3b 0a 7d 0a 23 65 6e 64 69  terrupt;.}.#endi
33980 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
33990 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
339a0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
339b0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
339c0 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52  LE./* Opcode: VR
339d0 65 6e 61 6d 65 20 50 31 20 2a 20 2a 20 50 34 20  ename P1 * * P4 
339e0 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  *.**.** P4 is a 
339f0 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72  pointer to a vir
33a00 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63  tual table objec
33a10 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74  t, an sqlite3_vt
33a20 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ab structure..**
33a30 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76   This opcode inv
33a40 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73 70  okes the corresp
33a50 6f 6e 64 69 6e 67 20 78 52 65 6e 61 6d 65 20 6d  onding xRename m
33a60 65 74 68 6f 64 2e 20 54 68 65 20 76 61 6c 75 65  ethod. The value
33a70 0a 2a 2a 20 69 6e 20 72 65 67 69 73 74 65 72 20  .** in register 
33a80 50 31 20 69 73 20 70 61 73 73 65 64 20 61 73 20  P1 is passed as 
33a90 74 68 65 20 7a 4e 61 6d 65 20 61 72 67 75 6d 65  the zName argume
33aa0 6e 74 20 74 6f 20 74 68 65 20 78 52 65 6e 61 6d  nt to the xRenam
33ab0 65 20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73  e method..*/.cas
33ac0 65 20 4f 50 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a  e OP_VRename: {.
33ad0 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
33ae0 70 56 74 61 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e  pVtab;.  Mem *pN
33af0 61 6d 65 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20  ame;..  pVtab = 
33b00 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70  pOp->p4.pVtab->p
33b10 56 74 61 62 3b 0a 20 20 70 4e 61 6d 65 20 3d 20  Vtab;.  pName = 
33b20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
33b30 20 20 61 73 73 65 72 74 28 20 70 56 74 61 62 2d    assert( pVtab-
33b40 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d  >pModule->xRenam
33b50 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d  e );.  assert( m
33b60 65 6d 49 73 56 61 6c 69 64 28 70 4e 61 6d 65 29  emIsValid(pName)
33b70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
33b80 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
33b90 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
33ba0 28 70 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d 65 29  (pOp->p1, pName)
33bb0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4e 61 6d  ;.  assert( pNam
33bc0 65 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53  e->flags & MEM_S
33bd0 74 72 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  tr );.  testcase
33be0 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51  ( pName->enc==SQ
33bf0 4c 49 54 45 5f 55 54 46 38 20 29 3b 0a 20 20 74  LITE_UTF8 );.  t
33c00 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e  estcase( pName->
33c10 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31  enc==SQLITE_UTF1
33c20 36 42 45 20 29 3b 0a 20 20 74 65 73 74 63 61 73  6BE );.  testcas
33c30 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53  e( pName->enc==S
33c40 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 29 3b  QLITE_UTF16LE );
33c50 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
33c60 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
33c70 67 28 70 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f  g(pName, SQLITE_
33c80 55 54 46 38 29 3b 0a 20 20 69 66 28 20 72 63 3d  UTF8);.  if( rc=
33c90 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
33ca0 20 20 72 63 20 3d 20 70 56 74 61 62 2d 3e 70 4d    rc = pVtab->pM
33cb0 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 28 70  odule->xRename(p
33cc0 56 74 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b  Vtab, pName->z);
33cd0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62  .    sqlite3Vtab
33ce0 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20  ImportErrmsg(p, 
33cf0 70 56 74 61 62 29 3b 0a 20 20 20 20 70 2d 3e 65  pVtab);.    p->e
33d00 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a  xpired = 0;.  }.
33d10 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
33d20 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
33d30 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
33d40 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
33d50 55 70 64 61 74 65 20 50 31 20 50 32 20 50 33 20  Update P1 P2 P3 
33d60 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
33d70 73 3a 20 64 61 74 61 3d 72 5b 50 33 40 50 32 5d  s: data=r[P3@P2]
33d80 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
33d90 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74  ointer to a virt
33da0 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74  ual table object
33db0 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61  , an sqlite3_vta
33dc0 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20  b structure..** 
33dd0 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f  This opcode invo
33de0 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f  kes the correspo
33df0 6e 64 69 6e 67 20 78 55 70 64 61 74 65 20 6d 65  nding xUpdate me
33e00 74 68 6f 64 2e 20 50 32 20 76 61 6c 75 65 73 0a  thod. P2 values.
33e10 2a 2a 20 61 72 65 20 63 6f 6e 74 69 67 75 6f 75  ** are contiguou
33e20 73 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73  s memory cells s
33e30 74 61 72 74 69 6e 67 20 61 74 20 50 33 20 74 6f  tarting at P3 to
33e40 20 70 61 73 73 20 74 6f 20 74 68 65 20 78 55 70   pass to the xUp
33e50 64 61 74 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74  date .** invocat
33e60 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 69  ion. The value i
33e70 6e 20 72 65 67 69 73 74 65 72 20 28 50 33 2b 50  n register (P3+P
33e80 32 2d 31 29 20 63 6f 72 72 65 73 70 6f 6e 64 73  2-1) corresponds
33e90 20 74 6f 20 74 68 65 20 0a 2a 2a 20 70 32 74 68   to the .** p2th
33ea0 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20   element of the 
33eb0 61 72 67 76 20 61 72 72 61 79 20 70 61 73 73 65  argv array passe
33ec0 64 20 74 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a  d to xUpdate..**
33ed0 0a 2a 2a 20 54 68 65 20 78 55 70 64 61 74 65 20  .** The xUpdate 
33ee0 6d 65 74 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61  method will do a
33ef0 20 44 45 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e   DELETE or an IN
33f00 53 45 52 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a  SERT or both..**
33f10 20 54 68 65 20 61 72 67 76 5b 30 5d 20 65 6c 65   The argv[0] ele
33f20 6d 65 6e 74 20 28 77 68 69 63 68 20 63 6f 72 72  ment (which corr
33f30 65 73 70 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72  esponds to memor
33f40 79 20 63 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73  y cell P3).** is
33f50 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 61 20   the rowid of a 
33f60 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 20 20  row to delete.  
33f70 49 66 20 61 72 67 76 5b 30 5d 20 69 73 20 4e 55  If argv[0] is NU
33f80 4c 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64  LL then no .** d
33f90 65 6c 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20  eletion occurs. 
33fa0 20 54 68 65 20 61 72 67 76 5b 31 5d 20 65 6c 65   The argv[1] ele
33fb0 6d 65 6e 74 20 69 73 20 74 68 65 20 72 6f 77 69  ment is the rowi
33fc0 64 20 6f 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a  d of the new .**
33fd0 20 72 6f 77 2e 20 20 54 68 69 73 20 63 61 6e 20   row.  This can 
33fe0 62 65 20 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20  be NULL to have 
33ff0 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
34000 65 20 73 65 6c 65 63 74 20 74 68 65 20 6e 65 77  e select the new
34010 20 0a 2a 2a 20 72 6f 77 69 64 20 66 6f 72 20 69   .** rowid for i
34020 74 73 65 6c 66 2e 20 20 54 68 65 20 73 75 62 73  tself.  The subs
34030 65 71 75 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20  equent elements 
34040 69 6e 20 74 68 65 20 61 72 72 61 79 20 61 72 65  in the array are
34050 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20   .** the values 
34060 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
34070 65 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a  e new row..**.**
34080 20 49 66 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e   If P2==1 then n
34090 6f 20 69 6e 73 65 72 74 20 69 73 20 70 65 72 66  o insert is perf
340a0 6f 72 6d 65 64 2e 20 20 61 72 67 76 5b 30 5d 20  ormed.  argv[0] 
340b0 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a  is the rowid of.
340c0 2a 2a 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65  ** a row to dele
340d0 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  te..**.** P1 is 
340e0 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20  a boolean flag. 
340f0 49 66 20 69 74 20 69 73 20 73 65 74 20 74 6f 20  If it is set to 
34100 74 72 75 65 20 61 6e 64 20 74 68 65 20 78 55 70  true and the xUp
34110 64 61 74 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20  date call.** is 
34120 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65 6e  successful, then
34130 20 74 68 65 20 76 61 6c 75 65 20 72 65 74 75 72   the value retur
34140 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6c  ned by sqlite3_l
34150 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
34160 28 29 20 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f  () .** is set to
34170 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
34180 65 20 72 6f 77 69 64 20 66 6f 72 20 74 68 65 20  e rowid for the 
34190 72 6f 77 20 6a 75 73 74 20 69 6e 73 65 72 74 65  row just inserte
341a0 64 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73 20 74  d..**.** P5 is t
341b0 68 65 20 65 72 72 6f 72 20 61 63 74 69 6f 6e 73  he error actions
341c0 20 28 4f 45 5f 52 65 70 6c 61 63 65 2c 20 4f 45   (OE_Replace, OE
341d0 5f 46 61 69 6c 2c 20 4f 45 5f 49 67 6e 6f 72 65  _Fail, OE_Ignore
341e0 2c 20 65 74 63 29 20 74 6f 0a 2a 2a 20 61 70 70  , etc) to.** app
341f0 6c 79 20 69 6e 20 74 68 65 20 63 61 73 65 20 6f  ly in the case o
34200 66 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  f a constraint f
34210 61 69 6c 75 72 65 20 6f 6e 20 61 6e 20 69 6e 73  ailure on an ins
34220 65 72 74 20 6f 72 20 75 70 64 61 74 65 2e 0a 2a  ert or update..*
34230 2f 0a 63 61 73 65 20 4f 50 5f 56 55 70 64 61 74  /.case OP_VUpdat
34240 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76  e: {.  sqlite3_v
34250 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
34260 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
34270 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69  le *pModule;.  i
34280 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69  nt nArg;.  int i
34290 3b 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  ;.  sqlite_int64
342a0 20 72 6f 77 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a   rowid;.  Mem **
342b0 61 70 41 72 67 3b 0a 20 20 4d 65 6d 20 2a 70 58  apArg;.  Mem *pX
342c0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
342d0 2d 3e 70 32 3d 3d 31 20 20 20 20 20 20 20 20 7c  ->p2==1        |
342e0 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 46 61  | pOp->p5==OE_Fa
342f0 69 6c 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  il   || pOp->p5=
34300 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 0a 20 20  =OE_Rollback .  
34310 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d       || pOp->p5=
34320 3d 4f 45 5f 41 62 6f 72 74 20 7c 7c 20 70 4f 70  =OE_Abort || pOp
34330 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20  ->p5==OE_Ignore 
34340 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52  || pOp->p5==OE_R
34350 65 70 6c 61 63 65 0a 20 20 29 3b 0a 20 20 61 73  eplace.  );.  as
34360 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
34370 79 3d 3d 30 20 29 3b 0a 20 20 70 56 74 61 62 20  y==0 );.  pVtab 
34380 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d  = pOp->p4.pVtab-
34390 3e 70 56 74 61 62 3b 0a 20 20 69 66 28 20 70 56  >pVtab;.  if( pV
343a0 74 61 62 3d 3d 30 20 7c 7c 20 4e 45 56 45 52 28  tab==0 || NEVER(
343b0 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3d 3d  pVtab->pModule==
343c0 30 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  0) ){.    rc = S
343d0 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20  QLITE_LOCKED;.  
343e0 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70    break;.  }.  p
343f0 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
34400 70 4d 6f 64 75 6c 65 3b 0a 20 20 6e 41 72 67 20  pModule;.  nArg 
34410 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73  = pOp->p2;.  ass
34420 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
34430 3d 3d 50 34 5f 56 54 41 42 20 29 3b 0a 20 20 69  ==P4_VTAB );.  i
34440 66 28 20 41 4c 57 41 59 53 28 70 4d 6f 64 75 6c  f( ALWAYS(pModul
34450 65 2d 3e 78 55 70 64 61 74 65 29 20 29 7b 0a 20  e->xUpdate) ){. 
34460 20 20 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66     u8 vtabOnConf
34470 6c 69 63 74 20 3d 20 64 62 2d 3e 76 74 61 62 4f  lict = db->vtabO
34480 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20 61  nConflict;.    a
34490 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b  pArg = p->apArg;
344a0 0a 20 20 20 20 70 58 20 3d 20 26 61 4d 65 6d 5b  .    pX = &aMem[
344b0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 66 6f  pOp->p3];.    fo
344c0 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69  r(i=0; i<nArg; i
344d0 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  ++){.      asser
344e0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 58  t( memIsValid(pX
344f0 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62  ) );.      memAb
34500 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
34510 58 29 3b 0a 20 20 20 20 20 20 61 70 41 72 67 5b  X);.      apArg[
34520 69 5d 20 3d 20 70 58 3b 0a 20 20 20 20 20 20 70  i] = pX;.      p
34530 58 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64  X++;.    }.    d
34540 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63  b->vtabOnConflic
34550 74 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 20  t = pOp->p5;.   
34560 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
34570 55 70 64 61 74 65 28 70 56 74 61 62 2c 20 6e 41  Update(pVtab, nA
34580 72 67 2c 20 61 70 41 72 67 2c 20 26 72 6f 77 69  rg, apArg, &rowi
34590 64 29 3b 0a 20 20 20 20 64 62 2d 3e 76 74 61 62  d);.    db->vtab
345a0 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 76 74 61  OnConflict = vta
345b0 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20  bOnConflict;.   
345c0 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
345d0 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61  rtErrmsg(p, pVta
345e0 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  b);.    if( rc==
345f0 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 4f 70  SQLITE_OK && pOp
34600 2d 3e 70 31 20 29 7b 0a 20 20 20 20 20 20 61 73  ->p1 ){.      as
34610 73 65 72 74 28 20 6e 41 72 67 3e 31 20 26 26 20  sert( nArg>1 && 
34620 61 70 41 72 67 5b 30 5d 20 26 26 20 28 61 70 41  apArg[0] && (apA
34630 72 67 5b 30 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d  rg[0]->flags&MEM
34640 5f 4e 75 6c 6c 29 20 29 3b 0a 20 20 20 20 20 20  _Null) );.      
34650 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  db->lastRowid = 
34660 6c 61 73 74 52 6f 77 69 64 20 3d 20 72 6f 77 69  lastRowid = rowi
34670 64 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  d;.    }.    if(
34680 20 28 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49   (rc&0xff)==SQLI
34690 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 26 26  TE_CONSTRAINT &&
346a0 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e   pOp->p4.pVtab->
346b0 62 43 6f 6e 73 74 72 61 69 6e 74 20 29 7b 0a 20  bConstraint ){. 
346c0 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35       if( pOp->p5
346d0 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20  ==OE_Ignore ){. 
346e0 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
346f0 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 7d 65 6c  TE_OK;.      }el
34700 73 65 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 65  se{.        p->e
34710 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28 28 70  rrorAction = ((p
34720 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61  Op->p5==OE_Repla
34730 63 65 29 20 3f 20 4f 45 5f 41 62 6f 72 74 20 3a  ce) ? OE_Abort :
34740 20 70 4f 70 2d 3e 70 35 29 3b 0a 20 20 20 20 20   pOp->p5);.     
34750 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
34760 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b      p->nChange++
34770 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
34780 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
34790 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
347a0 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
347b0 66 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d  fndef  SQLITE_OM
347c0 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
347d0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 67 65  ./* Opcode: Page
347e0 63 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20  count P1 P2 * * 
347f0 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68  *.**.** Write th
34800 65 20 63 75 72 72 65 6e 74 20 6e 75 6d 62 65 72  e current number
34810 20 6f 66 20 70 61 67 65 73 20 69 6e 20 64 61 74   of pages in dat
34820 61 62 61 73 65 20 50 31 20 74 6f 20 6d 65 6d 6f  abase P1 to memo
34830 72 79 20 63 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63  ry cell P2..*/.c
34840 61 73 65 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74  ase OP_Pagecount
34850 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
34860 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74  * out2 */.  pOut
34870 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
34880 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75  e(p, pOp);.  pOu
34890 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65 33  t->u.i = sqlite3
348a0 42 74 72 65 65 4c 61 73 74 50 61 67 65 28 64 62  BtreeLastPage(db
348b0 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
348c0 42 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  Bt);.  break;.}.
348d0 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66  #endif...#ifndef
348e0 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41    SQLITE_OMIT_PA
348f0 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f  GER_PRAGMAS./* O
34900 70 63 6f 64 65 3a 20 4d 61 78 50 67 63 6e 74 20  pcode: MaxPgcnt 
34910 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
34920 2a 2a 20 54 72 79 20 74 6f 20 73 65 74 20 74 68  ** Try to set th
34930 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63  e maximum page c
34940 6f 75 6e 74 20 66 6f 72 20 64 61 74 61 62 61 73  ount for databas
34950 65 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75  e P1 to the valu
34960 65 20 69 6e 20 50 33 2e 0a 2a 2a 20 44 6f 20 6e  e in P3..** Do n
34970 6f 74 20 6c 65 74 20 74 68 65 20 6d 61 78 69 6d  ot let the maxim
34980 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 66 61  um page count fa
34990 6c 6c 20 62 65 6c 6f 77 20 74 68 65 20 63 75 72  ll below the cur
349a0 72 65 6e 74 20 70 61 67 65 20 63 6f 75 6e 74 20  rent page count 
349b0 61 6e 64 0a 2a 2a 20 64 6f 20 6e 6f 74 20 63 68  and.** do not ch
349c0 61 6e 67 65 20 74 68 65 20 6d 61 78 69 6d 75 6d  ange the maximum
349d0 20 70 61 67 65 20 63 6f 75 6e 74 20 76 61 6c 75   page count valu
349e0 65 20 69 66 20 50 33 3d 3d 30 2e 0a 2a 2a 0a 2a  e if P3==0..**.*
349f0 2a 20 53 74 6f 72 65 20 74 68 65 20 6d 61 78 69  * Store the maxi
34a00 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 61  mum page count a
34a10 66 74 65 72 20 74 68 65 20 63 68 61 6e 67 65 20  fter the change 
34a20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
34a30 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 78 50 67  */.case OP_MaxPg
34a40 63 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  cnt: {          
34a50 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 75    /* out2 */.  u
34a60 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 65 77 4d  nsigned int newM
34a70 61 78 3b 0a 20 20 42 74 72 65 65 20 2a 70 42 74  ax;.  Btree *pBt
34a80 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  ;..  pOut = out2
34a90 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
34aa0 70 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e  p);.  pBt = db->
34ab0 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74  aDb[pOp->p1].pBt
34ac0 3b 0a 20 20 6e 65 77 4d 61 78 20 3d 20 30 3b 0a  ;.  newMax = 0;.
34ad0 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b    if( pOp->p3 ){
34ae0 0a 20 20 20 20 6e 65 77 4d 61 78 20 3d 20 73 71  .    newMax = sq
34af0 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 50 61  lite3BtreeLastPa
34b00 67 65 28 70 42 74 29 3b 0a 20 20 20 20 69 66 28  ge(pBt);.    if(
34b10 20 6e 65 77 4d 61 78 20 3c 20 28 75 6e 73 69 67   newMax < (unsig
34b20 6e 65 64 29 70 4f 70 2d 3e 70 33 20 29 20 6e 65  ned)pOp->p3 ) ne
34b30 77 4d 61 78 20 3d 20 28 75 6e 73 69 67 6e 65 64  wMax = (unsigned
34b40 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20  )pOp->p3;.  }.  
34b50 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69  pOut->u.i = sqli
34b60 74 65 33 42 74 72 65 65 4d 61 78 50 61 67 65 43  te3BtreeMaxPageC
34b70 6f 75 6e 74 28 70 42 74 2c 20 6e 65 77 4d 61 78  ount(pBt, newMax
34b80 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  );.  break;.}.#e
34b90 6e 64 69 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ndif.../* Opcode
34ba0 3a 20 49 6e 69 74 20 2a 20 50 32 20 2a 20 50 34  : Init * P2 * P4
34bb0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
34bc0 20 53 74 61 72 74 20 61 74 20 50 32 0a 2a 2a 0a   Start at P2.**.
34bd0 2a 2a 20 50 72 6f 67 72 61 6d 73 20 63 6f 6e 74  ** Programs cont
34be0 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 69 6e 73  ain a single ins
34bf0 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 70  tance of this op
34c00 63 6f 64 65 20 61 73 20 74 68 65 20 76 65 72 79  code as the very
34c10 20 66 69 72 73 74 0a 2a 2a 20 6f 70 63 6f 64 65   first.** opcode
34c20 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 72 61 63 69  ..**.** If traci
34c30 6e 67 20 69 73 20 65 6e 61 62 6c 65 64 20 28 62  ng is enabled (b
34c40 79 20 74 68 65 20 73 71 6c 69 74 65 33 5f 74 72  y the sqlite3_tr
34c50 61 63 65 28 29 29 20 69 6e 74 65 72 66 61 63 65  ace()) interface
34c60 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 55 54  , then.** the UT
34c70 46 2d 38 20 73 74 72 69 6e 67 20 63 6f 6e 74 61  F-8 string conta
34c80 69 6e 65 64 20 69 6e 20 50 34 20 69 73 20 65 6d  ined in P4 is em
34c90 69 74 74 65 64 20 6f 6e 20 74 68 65 20 74 72 61  itted on the tra
34ca0 63 65 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2a 20  ce callback..** 
34cb0 4f 72 20 69 66 20 50 34 20 69 73 20 62 6c 61 6e  Or if P4 is blan
34cc0 6b 2c 20 75 73 65 20 74 68 65 20 73 74 72 69 6e  k, use the strin
34cd0 67 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  g returned by sq
34ce0 6c 69 74 65 33 5f 73 71 6c 28 29 2e 0a 2a 2a 0a  lite3_sql()..**.
34cf0 2a 2a 20 49 66 20 50 32 20 69 73 20 6e 6f 74 20  ** If P2 is not 
34d00 7a 65 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e  zero, jump to in
34d10 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f  struction P2..*/
34d20 0a 63 61 73 65 20 4f 50 5f 49 6e 69 74 3a 20 7b  .case OP_Init: {
34d30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
34d40 70 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 72  p */.  char *zTr
34d50 61 63 65 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a  ace;.  char *z;.
34d60 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
34d70 4f 4d 49 54 5f 54 52 41 43 45 0a 20 20 69 66 28  OMIT_TRACE.  if(
34d80 20 64 62 2d 3e 78 54 72 61 63 65 0a 20 20 20 26   db->xTrace.   &
34d90 26 20 21 70 2d 3e 64 6f 69 6e 67 52 65 72 75 6e  & !p->doingRerun
34da0 0a 20 20 20 26 26 20 28 7a 54 72 61 63 65 20 3d  .   && (zTrace =
34db0 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f   (pOp->p4.z ? pO
34dc0 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71  p->p4.z : p->zSq
34dd0 6c 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20  l))!=0.  ){.    
34de0 7a 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 45  z = sqlite3VdbeE
34df0 78 70 61 6e 64 53 71 6c 28 70 2c 20 7a 54 72 61  xpandSql(p, zTra
34e00 63 65 29 3b 0a 20 20 20 20 64 62 2d 3e 78 54 72  ce);.    db->xTr
34e10 61 63 65 28 64 62 2d 3e 70 54 72 61 63 65 41 72  ace(db->pTraceAr
34e20 67 2c 20 7a 29 3b 0a 20 20 20 20 73 71 6c 69 74  g, z);.    sqlit
34e30 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a 29 3b  e3DbFree(db, z);
34e40 0a 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49  .  }.#ifdef SQLI
34e50 54 45 5f 55 53 45 5f 46 43 4e 54 4c 5f 54 52 41  TE_USE_FCNTL_TRA
34e60 43 45 0a 20 20 7a 54 72 61 63 65 20 3d 20 28 70  CE.  zTrace = (p
34e70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e  Op->p4.z ? pOp->
34e80 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 3b  p4.z : p->zSql);
34e90 0a 20 20 69 66 28 20 7a 54 72 61 63 65 20 29 7b  .  if( zTrace ){
34ea0 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20  .    int i;.    
34eb0 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e  for(i=0; i<db->n
34ec0 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  Db; i++){.      
34ed0 69 66 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  if( DbMaskTest(p
34ee0 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 29 3d  ->btreeMask, i)=
34ef0 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  =0 ) continue;. 
34f00 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6c       sqlite3_fil
34f10 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 64 62  e_control(db, db
34f20 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20  ->aDb[i].zName, 
34f30 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 54 52 41  SQLITE_FCNTL_TRA
34f40 43 45 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 20  CE, zTrace);.   
34f50 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a   }.  }.#endif /*
34f60 20 53 51 4c 49 54 45 5f 55 53 45 5f 46 43 4e 54   SQLITE_USE_FCNT
34f70 4c 5f 54 52 41 43 45 20 2a 2f 0a 23 69 66 64 65  L_TRACE */.#ifde
34f80 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
34f90 20 69 66 28 20 28 64 62 2d 3e 66 6c 61 67 73 20   if( (db->flags 
34fa0 26 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63  & SQLITE_SqlTrac
34fb0 65 29 21 3d 30 0a 20 20 20 26 26 20 28 7a 54 72  e)!=0.   && (zTr
34fc0 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a  ace = (pOp->p4.z
34fd0 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70   ? pOp->p4.z : p
34fe0 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a 20 20 29 7b  ->zSql))!=0.  ){
34ff0 0a 20 20 20 20 73 71 6c 69 74 65 33 44 65 62 75  .    sqlite3Debu
35000 67 50 72 69 6e 74 66 28 22 53 51 4c 2d 74 72 61  gPrintf("SQL-tra
35010 63 65 3a 20 25 73 5c 6e 22 2c 20 7a 54 72 61 63  ce: %s\n", zTrac
35020 65 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f  e);.  }.#endif /
35030 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a  * SQLITE_DEBUG *
35040 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  /.#endif /* SQLI
35050 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20 2a 2f  TE_OMIT_TRACE */
35060 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 29  .  if( pOp->p2 )
35070 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
35080 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  ;.  break;.}.../
35090 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70 20 2a  * Opcode: Noop *
350a0 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44   * * * *.**.** D
350b0 6f 20 6e 6f 74 68 69 6e 67 2e 20 20 54 68 69 73  o nothing.  This
350c0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
350d0 6f 66 74 65 6e 20 75 73 65 66 75 6c 20 61 73 20  often useful as 
350e0 61 20 6a 75 6d 70 0a 2a 2a 20 64 65 73 74 69 6e  a jump.** destin
350f0 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20  ation..*/./*.** 
35100 54 68 65 20 6d 61 67 69 63 20 45 78 70 6c 61 69  The magic Explai
35110 6e 20 6f 70 63 6f 64 65 20 61 72 65 20 6f 6e 6c  n opcode are onl
35120 79 20 69 6e 73 65 72 74 65 64 20 77 68 65 6e 20  y inserted when 
35130 65 78 70 6c 61 69 6e 3d 3d 32 20 28 77 68 69 63  explain==2 (whic
35140 68 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79 20 77  h.** is to say w
35150 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20  hen the EXPLAIN 
35160 51 55 45 52 59 20 50 4c 41 4e 20 73 79 6e 74 61  QUERY PLAN synta
35170 78 20 69 73 20 75 73 65 64 2e 29 0a 2a 2a 20 54  x is used.).** T
35180 68 69 73 20 6f 70 63 6f 64 65 20 72 65 63 6f 72  his opcode recor
35190 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  ds information f
351a0 72 6f 6d 20 74 68 65 20 6f 70 74 69 6d 69 7a 65  rom the optimize
351b0 72 2e 20 20 49 74 20 69 73 20 74 68 65 0a 2a 2a  r.  It is the.**
351c0 20 74 68 65 20 73 61 6d 65 20 61 73 20 61 20 6e   the same as a n
351d0 6f 2d 6f 70 2e 20 20 54 68 69 73 20 6f 70 63 6f  o-op.  This opco
351e0 64 65 73 6e 65 76 65 72 20 61 70 70 65 61 72 73  desnever appears
351f0 20 69 6e 20 61 20 72 65 61 6c 20 56 4d 20 70 72   in a real VM pr
35200 6f 67 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61 75 6c  ogram..*/.defaul
35210 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a  t: {          /*
35220 20 54 68 69 73 20 69 73 20 72 65 61 6c 6c 79 20   This is really 
35230 4f 50 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50 5f 45  OP_Noop and OP_E
35240 78 70 6c 61 69 6e 20 2a 2f 0a 20 20 61 73 73 65  xplain */.  asse
35250 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
35260 3d 4f 50 5f 4e 6f 6f 70 20 7c 7c 20 70 4f 70 2d  =OP_Noop || pOp-
35270 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c  >opcode==OP_Expl
35280 61 69 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  ain );.  break;.
35290 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  }../************
352a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
352b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
352c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
352d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
352e0 2a 0a 2a 2a 20 54 68 65 20 63 61 73 65 73 20 6f  *.** The cases o
352f0 66 20 74 68 65 20 73 77 69 74 63 68 20 73 74 61  f the switch sta
35300 74 65 6d 65 6e 74 20 61 62 6f 76 65 20 74 68 69  tement above thi
35310 73 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 61 6c  s line should al
35320 6c 20 62 65 20 69 6e 64 65 6e 74 65 64 0a 2a 2a  l be indented.**
35330 20 62 79 20 36 20 73 70 61 63 65 73 2e 20 20 42   by 6 spaces.  B
35340 75 74 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74  ut the left-most
35350 20 36 20 73 70 61 63 65 73 20 68 61 76 65 20 62   6 spaces have b
35360 65 65 6e 20 72 65 6d 6f 76 65 64 20 74 6f 20 69  een removed to i
35370 6d 70 72 6f 76 65 20 74 68 65 0a 2a 2a 20 72 65  mprove the.** re
35380 61 64 61 62 69 6c 69 74 79 2e 20 20 46 72 6f 6d  adability.  From
35390 20 74 68 69 73 20 70 6f 69 6e 74 20 6f 6e 20 64   this point on d
353a0 6f 77 6e 2c 20 74 68 65 20 6e 6f 72 6d 61 6c 20  own, the normal 
353b0 69 6e 64 65 6e 74 61 74 69 6f 6e 20 72 75 6c 65  indentation rule
353c0 73 20 61 72 65 0a 2a 2a 20 72 65 73 74 6f 72 65  s are.** restore
353d0 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  d..*************
353e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
353f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
35400 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
35410 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
35420 2f 0a 20 20 20 20 7d 0a 0a 23 69 66 64 65 66 20  /.    }..#ifdef 
35430 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20  VDBE_PROFILE.   
35440 20 7b 0a 20 20 20 20 20 20 75 36 34 20 65 6e 64   {.      u64 end
35450 54 69 6d 65 20 3d 20 73 71 6c 69 74 65 33 48 77  Time = sqlite3Hw
35460 74 69 6d 65 28 29 3b 0a 20 20 20 20 20 20 69 66  time();.      if
35470 28 20 65 6e 64 54 69 6d 65 3e 73 74 61 72 74 20  ( endTime>start 
35480 29 20 70 4f 72 69 67 4f 70 2d 3e 63 79 63 6c 65  ) pOrigOp->cycle
35490 73 20 2b 3d 20 65 6e 64 54 69 6d 65 20 2d 20 73  s += endTime - s
354a0 74 61 72 74 3b 0a 20 20 20 20 20 20 70 4f 72 69  tart;.      pOri
354b0 67 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 20 20 20 20  gOp->cnt++;.    
354c0 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a  }.#endif..    /*
354d0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
354e0 6f 64 65 20 61 64 64 73 20 6e 6f 74 68 69 6e 67  ode adds nothing
354f0 20 74 6f 20 74 68 65 20 61 63 74 75 61 6c 20 66   to the actual f
35500 75 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 20 20 20  unctionality.   
35510 20 2a 2a 20 6f 66 20 74 68 65 20 70 72 6f 67 72   ** of the progr
35520 61 6d 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20  am.  It is only 
35530 68 65 72 65 20 66 6f 72 20 74 65 73 74 69 6e 67  here for testing
35540 20 61 6e 64 20 64 65 62 75 67 67 69 6e 67 2e 0a   and debugging..
35550 20 20 20 20 2a 2a 20 4f 6e 20 74 68 65 20 6f 74      ** On the ot
35560 68 65 72 20 68 61 6e 64 2c 20 69 74 20 64 6f 65  her hand, it doe
35570 73 20 62 75 72 6e 20 43 50 55 20 63 79 63 6c 65  s burn CPU cycle
35580 73 20 65 76 65 72 79 20 74 69 6d 65 20 74 68 72  s every time thr
35590 6f 75 67 68 0a 20 20 20 20 2a 2a 20 74 68 65 20  ough.    ** the 
355a0 65 76 61 6c 75 61 74 6f 72 20 6c 6f 6f 70 2e 20  evaluator loop. 
355b0 20 53 6f 20 77 65 20 63 61 6e 20 6c 65 61 76 65   So we can leave
355c0 20 69 74 20 6f 75 74 20 77 68 65 6e 20 4e 44 45   it out when NDE
355d0 42 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a  BUG is defined..
355e0 20 20 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 4e      */.#ifndef N
355f0 44 45 42 55 47 0a 20 20 20 20 61 73 73 65 72 74  DEBUG.    assert
35600 28 20 70 4f 70 3e 3d 26 61 4f 70 5b 2d 31 5d 20  ( pOp>=&aOp[-1] 
35610 26 26 20 70 4f 70 3c 26 61 4f 70 5b 70 2d 3e 6e  && pOp<&aOp[p->n
35620 4f 70 2d 31 5d 20 29 3b 0a 0a 23 69 66 64 65 66  Op-1] );..#ifdef
35630 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
35640 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20    if( db->flags 
35650 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  & SQLITE_VdbeTra
35660 63 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  ce ){.      if( 
35670 72 63 21 3d 30 20 29 20 70 72 69 6e 74 66 28 22  rc!=0 ) printf("
35680 72 63 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a 20 20  rc=%d\n",rc);.  
35690 20 20 20 20 69 66 28 20 70 4f 72 69 67 4f 70 2d      if( pOrigOp-
356a0 3e 6f 70 66 6c 61 67 73 20 26 20 28 4f 50 46 4c  >opflags & (OPFL
356b0 47 5f 4f 55 54 32 29 20 29 7b 0a 20 20 20 20 20  G_OUT2) ){.     
356c0 20 20 20 72 65 67 69 73 74 65 72 54 72 61 63 65     registerTrace
356d0 28 70 4f 72 69 67 4f 70 2d 3e 70 32 2c 20 26 61  (pOrigOp->p2, &a
356e0 4d 65 6d 5b 70 4f 72 69 67 4f 70 2d 3e 70 32 5d  Mem[pOrigOp->p2]
356f0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
35700 20 69 66 28 20 70 4f 72 69 67 4f 70 2d 3e 6f 70   if( pOrigOp->op
35710 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55  flags & OPFLG_OU
35720 54 33 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65  T3 ){.        re
35730 67 69 73 74 65 72 54 72 61 63 65 28 70 4f 72 69  gisterTrace(pOri
35740 67 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70  gOp->p3, &aMem[p
35750 4f 72 69 67 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20  OrigOp->p3]);.  
35760 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64      }.    }.#end
35770 69 66 20 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45  if  /* SQLITE_DE
35780 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20 20 2f  BUG */.#endif  /
35790 2a 20 4e 44 45 42 55 47 20 2a 2f 0a 20 20 7d 20  * NDEBUG */.  } 
357a0 20 2f 2a 20 54 68 65 20 65 6e 64 20 6f 66 20 74   /* The end of t
357b0 68 65 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20  he for(;;) loop 
357c0 74 68 65 20 6c 6f 6f 70 73 20 74 68 72 6f 75 67  the loops throug
357d0 68 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a 20 20  h opcodes */..  
357e0 2f 2a 20 49 66 20 77 65 20 72 65 61 63 68 20 74  /* If we reach t
357f0 68 69 73 20 70 6f 69 6e 74 2c 20 69 74 20 6d 65  his point, it me
35800 61 6e 73 20 74 68 61 74 20 65 78 65 63 75 74 69  ans that executi
35810 6f 6e 20 69 73 20 66 69 6e 69 73 68 65 64 20 77  on is finished w
35820 69 74 68 0a 20 20 2a 2a 20 61 6e 20 65 72 72 6f  ith.  ** an erro
35830 72 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a  r of some kind..
35840 20 20 2a 2f 0a 76 64 62 65 5f 65 72 72 6f 72 5f    */.vdbe_error_
35850 68 61 6c 74 3a 0a 20 20 61 73 73 65 72 74 28 20  halt:.  assert( 
35860 72 63 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20  rc );.  p->rc = 
35870 72 63 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20  rc;.  testcase( 
35880 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
35890 66 69 67 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20  fig.xLog!=0 );. 
358a0 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 72 63 2c   sqlite3_log(rc,
358b0 20 22 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 72   "statement abor
358c0 74 73 20 61 74 20 25 64 3a 20 5b 25 73 5d 20 25  ts at %d: [%s] %
358d0 73 22 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  s", .           
358e0 20 20 20 20 20 20 20 20 28 69 6e 74 29 28 70 4f          (int)(pO
358f0 70 20 2d 20 61 4f 70 29 2c 20 70 2d 3e 7a 53 71  p - aOp), p->zSq
35900 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  l, p->zErrMsg);.
35910 20 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c    sqlite3VdbeHal
35920 74 28 70 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  t(p);.  if( rc==
35930 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d  SQLITE_IOERR_NOM
35940 45 4d 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46  EM ) db->mallocF
35950 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 72 63 20  ailed = 1;.  rc 
35960 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
35970 20 20 69 66 28 20 72 65 73 65 74 53 63 68 65 6d    if( resetSchem
35980 61 4f 6e 46 61 75 6c 74 3e 30 20 29 7b 0a 20 20  aOnFault>0 ){.  
35990 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e    sqlite3ResetOn
359a0 65 53 63 68 65 6d 61 28 64 62 2c 20 72 65 73 65  eSchema(db, rese
359b0 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 2d 31  tSchemaOnFault-1
359c0 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68 69  );.  }..  /* Thi
359d0 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61  s is the only wa
359e0 79 20 6f 75 74 20 6f 66 20 74 68 69 73 20 70 72  y out of this pr
359f0 6f 63 65 64 75 72 65 2e 20 20 57 65 20 68 61 76  ocedure.  We hav
35a00 65 20 74 6f 0a 20 20 2a 2a 20 72 65 6c 65 61 73  e to.  ** releas
35a10 65 20 74 68 65 20 6d 75 74 65 78 65 73 20 6f 6e  e the mutexes on
35a20 20 62 74 72 65 65 73 20 74 68 61 74 20 77 65 72   btrees that wer
35a30 65 20 61 63 71 75 69 72 65 64 20 61 74 20 74 68  e acquired at th
35a40 65 0a 20 20 2a 2a 20 74 6f 70 2e 20 2a 2f 0a 76  e.  ** top. */.v
35a50 64 62 65 5f 72 65 74 75 72 6e 3a 0a 20 20 64 62  dbe_return:.  db
35a60 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61  ->lastRowid = la
35a70 73 74 52 6f 77 69 64 3b 0a 20 20 74 65 73 74 63  stRowid;.  testc
35a80 61 73 65 28 20 6e 56 6d 53 74 65 70 3e 30 20 29  ase( nVmStep>0 )
35a90 3b 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b  ;.  p->aCounter[
35aa0 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55  SQLITE_STMTSTATU
35ab0 53 5f 56 4d 5f 53 54 45 50 5d 20 2b 3d 20 28 69  S_VM_STEP] += (i
35ac0 6e 74 29 6e 56 6d 53 74 65 70 3b 0a 20 20 73 71  nt)nVmStep;.  sq
35ad0 6c 69 74 65 33 56 64 62 65 4c 65 61 76 65 28 70  lite3VdbeLeave(p
35ae0 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a  );.  return rc;.
35af0 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65  .  /* Jump to he
35b00 72 65 20 69 66 20 61 20 73 74 72 69 6e 67 20 6f  re if a string o
35b10 72 20 62 6c 6f 62 20 6c 61 72 67 65 72 20 74 68  r blob larger th
35b20 61 6e 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45  an SQLITE_MAX_LE
35b30 4e 47 54 48 0a 20 20 2a 2a 20 69 73 20 65 6e 63  NGTH.  ** is enc
35b40 6f 75 6e 74 65 72 65 64 2e 0a 20 20 2a 2f 0a 74  ountered..  */.t
35b50 6f 6f 5f 62 69 67 3a 0a 20 20 73 71 6c 69 74 65  oo_big:.  sqlite
35b60 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 73  3VdbeError(p, "s
35b70 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f  tring or blob to
35b80 6f 20 62 69 67 22 29 3b 0a 20 20 72 63 20 3d 20  o big");.  rc = 
35b90 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3b 0a 20  SQLITE_TOOBIG;. 
35ba0 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72   goto vdbe_error
35bb0 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d  _halt;..  /* Jum
35bc0 70 20 74 6f 20 68 65 72 65 20 69 66 20 61 20 6d  p to here if a m
35bd0 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 20  alloc() fails.. 
35be0 20 2a 2f 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20 64 62   */.no_mem:.  db
35bf0 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d  ->mallocFailed =
35c00 20 31 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   1;.  sqlite3Vdb
35c10 65 45 72 72 6f 72 28 70 2c 20 22 6f 75 74 20 6f  eError(p, "out o
35c20 66 20 6d 65 6d 6f 72 79 22 29 3b 0a 20 20 72 63  f memory");.  rc
35c30 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b   = SQLITE_NOMEM;
35c40 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72  .  goto vdbe_err
35c50 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a  or_halt;..  /* J
35c60 75 6d 70 20 74 6f 20 68 65 72 65 20 66 6f 72 20  ump to here for 
35c70 61 6e 79 20 6f 74 68 65 72 20 6b 69 6e 64 20 6f  any other kind o
35c80 66 20 66 61 74 61 6c 20 65 72 72 6f 72 2e 20 20  f fatal error.  
35c90 54 68 65 20 22 72 63 22 20 76 61 72 69 61 62 6c  The "rc" variabl
35ca0 65 0a 20 20 2a 2a 20 73 68 6f 75 6c 64 20 68 6f  e.  ** should ho
35cb0 6c 64 20 74 68 65 20 65 72 72 6f 72 20 6e 75 6d  ld the error num
35cc0 62 65 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f  ber..  */.abort_
35cd0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20 20  due_to_error:.  
35ce0 61 73 73 65 72 74 28 20 70 2d 3e 7a 45 72 72 4d  assert( p->zErrM
35cf0 73 67 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 64  sg==0 );.  if( d
35d00 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
35d10 29 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f  ) rc = SQLITE_NO
35d20 4d 45 4d 3b 0a 20 20 69 66 28 20 72 63 21 3d 53  MEM;.  if( rc!=S
35d30 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45  QLITE_IOERR_NOME
35d40 4d 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  M ){.    sqlite3
35d50 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73  VdbeError(p, "%s
35d60 22 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74 72  ", sqlite3ErrStr
35d70 28 72 63 29 29 3b 0a 20 20 7d 0a 20 20 67 6f 74  (rc));.  }.  got
35d80 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  o vdbe_error_hal
35d90 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f  t;..  /* Jump to
35da0 20 68 65 72 65 20 69 66 20 74 68 65 20 73 71 6c   here if the sql
35db0 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29  ite3_interrupt()
35dc0 20 41 50 49 20 73 65 74 73 20 74 68 65 20 69 6e   API sets the in
35dd0 74 65 72 72 75 70 74 0a 20 20 2a 2a 20 66 6c 61  terrupt.  ** fla
35de0 67 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75  g..  */.abort_du
35df0 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3a 0a  e_to_interrupt:.
35e00 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 75 31    assert( db->u1
35e10 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29  .isInterrupted )
35e20 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  ;.  rc = SQLITE_
35e30 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70 2d 3e  INTERRUPT;.  p->
35e40 72 63 20 3d 20 72 63 3b 0a 20 20 73 71 6c 69 74  rc = rc;.  sqlit
35e50 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22  e3VdbeError(p, "
35e60 25 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72 53  %s", sqlite3ErrS
35e70 74 72 28 72 63 29 29 3b 0a 20 20 67 6f 74 6f 20  tr(rc));.  goto 
35e80 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b  vdbe_error_halt;
35e90 0a 7d 0a                                         .}.